]> sigrok.org Git - sigrok-util.git/blob - cross-compile/mingw/FileAssociation.nsh
sigrok-cross-mingw: Drop apparently obsolete libzip patch.
[sigrok-util.git] / cross-compile / mingw / FileAssociation.nsh
1 /*
2 _____________________________________________________________________________
3
4                        File Association
5 _____________________________________________________________________________
6
7  Based on code taken from http://nsis.sourceforge.net/File_Association 
8
9  Usage in script:
10  1. !include "FileAssociation.nsh"
11  2. [Section|Function]
12       ${FileAssociationFunction} "Param1" "Param2" "..." $var
13     [SectionEnd|FunctionEnd]
14
15  FileAssociationFunction=[RegisterExtension|UnRegisterExtension]
16
17 _____________________________________________________________________________
18
19  ${RegisterExtension} "[executable]" "[extension]" "[description]"
20
21 "[executable]"     ; executable which opens the file format
22                    ;
23 "[extension]"      ; extension, which represents the file format to open
24                    ;
25 "[description]"    ; description for the extension. This will be display in Windows Explorer.
26                    ;
27
28
29  ${UnRegisterExtension} "[extension]" "[description]"
30
31 "[extension]"      ; extension, which represents the file format to open
32                    ;
33 "[description]"    ; description for the extension. This will be display in Windows Explorer.
34                    ;
35
36 _____________________________________________________________________________
37
38                          Macros
39 _____________________________________________________________________________
40
41  Change log window verbosity (default: 3=no script)
42
43  Example:
44  !include "FileAssociation.nsh"
45  !insertmacro RegisterExtension
46  ${FileAssociation_VERBOSE} 4   # all verbosity
47  !insertmacro UnRegisterExtension
48  ${FileAssociation_VERBOSE} 3   # no script
49 */
50
51
52 !ifndef FileAssociation_INCLUDED
53 !define FileAssociation_INCLUDED
54
55 !include Util.nsh
56
57 !verbose push
58 !verbose 3
59 !ifndef _FileAssociation_VERBOSE
60   !define _FileAssociation_VERBOSE 3
61 !endif
62 !verbose ${_FileAssociation_VERBOSE}
63 !define FileAssociation_VERBOSE `!insertmacro FileAssociation_VERBOSE`
64 !verbose pop
65
66 !macro FileAssociation_VERBOSE _VERBOSE
67   !verbose push
68   !verbose 3
69   !undef _FileAssociation_VERBOSE
70   !define _FileAssociation_VERBOSE ${_VERBOSE}
71   !verbose pop
72 !macroend
73
74
75
76 !macro RegisterExtensionCall _EXECUTABLE _EXTENSION _DESCRIPTION
77   !verbose push
78   !verbose ${_FileAssociation_VERBOSE}
79   Push `${_DESCRIPTION}`
80   Push `${_EXTENSION}`
81   Push `${_EXECUTABLE}`
82   ${CallArtificialFunction} RegisterExtension_
83   !verbose pop
84 !macroend
85
86 !macro UnRegisterExtensionCall _EXTENSION _DESCRIPTION
87   !verbose push
88   !verbose ${_FileAssociation_VERBOSE}
89   Push `${_EXTENSION}`
90   Push `${_DESCRIPTION}`
91   ${CallArtificialFunction} UnRegisterExtension_
92   !verbose pop
93 !macroend
94
95
96
97 !define RegisterExtension `!insertmacro RegisterExtensionCall`
98 !define un.RegisterExtension `!insertmacro RegisterExtensionCall`
99
100 !macro RegisterExtension
101 !macroend
102
103 !macro un.RegisterExtension
104 !macroend
105
106 !macro RegisterExtension_
107   !verbose push
108   !verbose ${_FileAssociation_VERBOSE}
109
110   Exch $R2 ;exe
111   Exch
112   Exch $R1 ;ext
113   Exch
114   Exch 2
115   Exch $R0 ;desc
116   Exch 2
117   Push $0
118   Push $1
119
120   ReadRegStr $1 HKCR $R1 ""  ; read current file association
121   StrCmp "$1" "" NoBackup  ; is it empty
122   StrCmp "$1" "$R0" NoBackup  ; is it our own
123     WriteRegStr HKCR $R1 "backup_val" "$1"  ; backup current value
124 NoBackup:
125   WriteRegStr HKCR $R1 "" "$R0"  ; set our file association
126
127   ReadRegStr $0 HKCR $R0 ""
128   StrCmp $0 "" 0 Skip
129     WriteRegStr HKCR "$R0" "" "$R0"
130     WriteRegStr HKCR "$R0\shell" "" "open"
131     WriteRegStr HKCR "$R0\DefaultIcon" "" "$R2,0"
132 Skip:
133   WriteRegStr HKCR "$R0\shell\open\command" "" '"$R2" "%1"'
134   WriteRegStr HKCR "$R0\shell\edit" "" "Edit $R0"
135   WriteRegStr HKCR "$R0\shell\edit\command" "" '"$R2" "%1"'
136
137   Pop $1
138   Pop $0
139   Pop $R2
140   Pop $R1
141   Pop $R0
142
143   !verbose pop
144 !macroend
145
146
147
148 !define UnRegisterExtension `!insertmacro UnRegisterExtensionCall`
149 !define un.UnRegisterExtension `!insertmacro UnRegisterExtensionCall`
150
151 !macro UnRegisterExtension
152 !macroend
153
154 !macro un.UnRegisterExtension
155 !macroend
156
157 !macro UnRegisterExtension_
158   !verbose push
159   !verbose ${_FileAssociation_VERBOSE}
160
161   Exch $R1 ;desc
162   Exch
163   Exch $R0 ;ext
164   Exch
165   Push $0
166   Push $1
167
168   ReadRegStr $1 HKCR $R0 ""
169   StrCmp $1 $R1 0 NoOwn ; only do this if we own it
170   ReadRegStr $1 HKCR $R0 "backup_val"
171   StrCmp $1 "" 0 Restore ; if backup="" then delete the whole key
172   DeleteRegKey HKCR $R0
173   Goto NoOwn
174
175 Restore:
176   WriteRegStr HKCR $R0 "" $1
177   DeleteRegValue HKCR $R0 "backup_val"
178   DeleteRegKey HKCR $R1 ;Delete key with association name settings
179
180 NoOwn:
181
182   Pop $1
183   Pop $0
184   Pop $R1
185   Pop $R0
186
187   !verbose pop
188 !macroend
189
190 !endif # !FileAssociation_INCLUDED