File: regina.nsi

package info (click to toggle)
regina 3.3-5
  • links: PTS
  • area: main
  • in suites: lenny
  • size: 4,944 kB
  • ctags: 7,235
  • sloc: ansic: 50,555; sh: 2,727; lex: 2,298; yacc: 1,498; makefile: 1,019; cpp: 117
file content (343 lines) | stat: -rw-r--r-- 10,724 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
;
; Regina Install Script, based on Modern Example Script Written by Joost Verburg
; Requires: ${NSISDIR}\Contrib\Path\path.nsi
; Run as:
;  makensis /DVERSION=x.x /DNODOTVER=xx regina.nsi
; Note:
;  regina.nsi MUST be in the current directory!

!define LONGNAME "Regina"  ;Long Name (for descriptions)
!define SHORTNAME "Regina" ;Short name (no slash) of package

!define MUI_ICON "${SRCDIR}\reginaw32.ico"
!define MUI_UNICON "uninstall.ico"

Name "${LONGNAME} ${VERSION}"

!include "MUI.nsh"

!define MUI_CUSTOMPAGECOMMANDS

!define MUI_LICENSEPAGE
!define MUI_COMPONENTSPAGE
!define MUI_DIRECTORYPAGE
!define MUI_FINISHPAGE
!define MUI_FINISHPAGE_NOAUTOCLOSE
  
!define MUI_ABORTWARNING
  
!define MUI_UNINSTALLER
!define MUI_UNCONFIRMPAGE
  
; VERSION  ;Must be supplied on compile command line
; NODOTVER ;Must be supplied on compile command line

;--------------------------------
;Configuration

  ;General
  OutFile "${SHORTNAME}${NODOTVER}.exe"
  ShowInstdetails show
  SetOverwrite on


  ;License dialog
  LicenseData "${SRCDIR}\COPYING-LIB"


  ;Folder-select dialog
  InstallDir "c:\${SHORTNAME}"

  LangString TEXT_IO_PAGETITLE_ASSOC ${LANG_ENGLISH} "File Associations"
  LangString TEXT_IO_SUBTITLE_ASSOC ${LANG_ENGLISH} "Associate file extensions with Regina"
  LangString TEXT_IO_PAGETITLE_LANGUAGE ${LANG_ENGLISH} "Language for Error Messages"
  LangString TEXT_IO_SUBTITLE_LANGUAGE ${LANG_ENGLISH} "Select the language for Regina error messages"
  LangString TEXT_IO_PAGETITLE_STACK ${LANG_ENGLISH} "Regina Stack Service"
  LangString TEXT_IO_SUBTITLE_STACK ${LANG_ENGLISH} "Install Regina Stack Service"
;--------------------------------
;Pages
  
  !insertmacro MUI_PAGE_LICENSE "${SRCDIR}\COPYING-LIB"
  !insertmacro MUI_PAGE_COMPONENTS
  !insertmacro MUI_PAGE_DIRECTORY
  Page custom SetCustomAssoc
  Page custom SetCustomLanguage
  Page custom SetCustomStack
  !insertmacro MUI_PAGE_INSTFILES
  !insertmacro MUI_PAGE_FINISH

;--------------------------------
;Language
!insertmacro MUI_LANGUAGE "English"

;--------------------------------
;Reserved files

  ReserveFile "regina_fa.ini"
  ReserveFile "regina_ss.ini"
  ReserveFile "regina_mt.ini"
  !insertmacro MUI_RESERVEFILE_INSTALLOPTIONS

;========================================================================
;Installer Sections

;------------------------------------------------------------------------
; Core

Section "${LONGNAME} Core (required)" SecMain
  SectionIn 1 RO
  ; Set output path to the installation directory.
  SetOutPath $INSTDIR
  ; Distribution files...
  File rexx.exe
  File regina.exe
  File regina.dll
  File rxstack.exe
  File rxqueue.exe
  File de.mtb
  File en.mtb
  File es.mtb
  File no.mtb
  File pt.mtb
  File pl.mtb
  File /oname=README${NODOTVER}.txt ${SRCDIR}\README.${NODOTVER}
  File /oname=READMEW32.txt ${SRCDIR}\README.W32
  File /oname=LICENSE.txt ${SRCDIR}\COPYING-LIB
  Push $INSTDIR
  Call AddToPath
  CreateDirectory "$SMPROGRAMS\${SHORTNAME} REXX"
  CreateShortCut "$SMPROGRAMS\${SHORTNAME} REXX\Uninstall.lnk" "$INSTDIR\uninstall.exe" "" "$INSTDIR\uninstall.exe" 0
  CreateShortCut "$SMPROGRAMS\${SHORTNAME} REXX\Release Notes.lnk" "$INSTDIR\README${NODOTVER}.txt" "" "$INSTDIR\README${NODOTVER}.txt" 0
  CreateShortCut "$SMPROGRAMS\${SHORTNAME} REXX\README.lnk" "$INSTDIR\READMEW32.txt" "" "$INSTDIR\READMEW32.txt" 0
  CreateShortCut "$SMPROGRAMS\${SHORTNAME} REXX\LICENSE.lnk" "$INSTDIR\LICENSE.txt" "" "$INSTDIR\LICENSE.txt" 0
  ; Write the installation path into the registry
  ;WriteRegStr HKLM SOFTWARE\NSIS_Example2 "Install_Dir" "$INSTDIR"
  ; Write the uninstall keys for Windows
  WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORTNAME}" "DisplayName" "${LONGNAME} (remove only)"
  WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORTNAME}" "UninstallString" '"$INSTDIR\uninstall.exe"'
  WriteUninstaller "$INSTDIR\uninstall.exe"
  ReadIniStr $R0 "$PLUGINSDIR\regina_ss.ini" "Field 4" State
  Push $R0
  Call InstallRxstack
  StrCpy $5 0
  ReadIniStr $R0 "$PLUGINSDIR\regina_fa.ini" "Field 2" State
  ReadIniStr $R1 "$PLUGINSDIR\regina_fa.ini" "Field 2" Text
  Push $R0
  Push $R1
  Call DoFileAssociation
  ReadIniStr $R0 "$PLUGINSDIR\regina_fa.ini" "Field 3" State
  ReadIniStr $R1 "$PLUGINSDIR\regina_fa.ini" "Field 3" Text
  Push $R0
  Push $R1
  Call DoFileAssociation
  ReadIniStr $R0 "$PLUGINSDIR\regina_fa.ini" "Field 4" State
  ReadIniStr $R1 "$PLUGINSDIR\regina_fa.ini" "Field 4" Text
  Push $R0
  Push $R1
  Call DoFileAssociation
  ReadIniStr $R0 "$PLUGINSDIR\regina_fa.ini" "Field 5" State
  ReadIniStr $R1 "$PLUGINSDIR\regina_fa.ini" "Field 5" Text
  Push $R0
  Push $R1
  Call DoFileAssociation
  Call DoFileAssociationDetails
  Call DoLanguageDefault
SectionEnd

;------------------------------------------------------------------------
; Demos

Section "${LONGNAME} Demos" SecDemo
  CreateDirectory "$SMPROGRAMS\${SHORTNAME} REXX\${SHORTNAME} Demos"
  ; Set output path to the installation directory.
  SetOutPath $INSTDIR\demo
  File test1.dll
  File test2.dll
  ; Distribution files...
  File /oname=rexxcps.rexx ${SRCDIR}\demo\rexxcps.rexx
  CreateShortCut "$SMPROGRAMS\${SHORTNAME} REXX\${SHORTNAME} Demos\Rexxcps.lnk" "$INSTDIR\regina.exe" '-p "$INSTDIR\demo\rexxcps.rexx"' "$INSTDIR\regina.exe"
  File /oname=dynfunc.rexx ${SRCDIR}\demo\dynfunc.rexx
  CreateShortCut "$SMPROGRAMS\${SHORTNAME} REXX\${SHORTNAME} Demos\Dynfunc.lnk" "$INSTDIR\regina.exe" '-p "$INSTDIR\demo\dynfunc.rexx"' "$INSTDIR\regina.exe"
SectionEnd

;------------------------------------------------------------------------
; Development tools

Section "${LONGNAME} Development Kit" SecDev
  ; Set output path to the installation directory.
  SetOutPath $INSTDIR\lib
  ; Distribution files...
  File regina.lib
  File rexx.lib
  SetOutPath $INSTDIR\include
  File /oname=rexxsaa.h ${SRCDIR}\rexxsaa.h
SectionEnd

;------------------------------------------------------------------------
; Doco

Section "${LONGNAME} Documentation" SecDoc
  ; Set output path to the installation directory.
  SetOutPath $INSTDIR\doc
;  File ..\doc\*.html
;  File ..\doc\logo1.jpg
;  CreateShortCut "$SMPROGRAMS\${SHORTNAME} REXX\${SHORTNAME} Documentation.lnk" "$INSTDIR\doc\index.html" "" "$INSTDIR\doc\index.html" 0
SectionEnd

Section ""

  ;Invisible section to display the Finish header
; !insertmacro MUI_FINISHHEADER

SectionEnd

;========================================================================
;Installer Functions

Function .onInit
  !insertmacro MUI_INSTALLOPTIONS_EXTRACT "regina_fa.ini"
  !insertmacro MUI_INSTALLOPTIONS_EXTRACT "regina_ss.ini"
  !insertmacro MUI_INSTALLOPTIONS_EXTRACT "regina_mt.ini"
FunctionEnd

Function SetCustomAssoc
  !insertmacro MUI_HEADER_TEXT "$(TEXT_IO_PAGETITLE_ASSOC)" "$(TEXT_IO_SUBTITLE_ASSOC)"
  !insertmacro MUI_INSTALLOPTIONS_DISPLAY "regina_fa.ini"
FunctionEnd

Function SetCustomLanguage
  !insertmacro MUI_HEADER_TEXT "$(TEXT_IO_PAGETITLE_LANGUAGE)" "$(TEXT_IO_SUBTITLE_LANGUAGE)"
  !insertmacro MUI_INSTALLOPTIONS_DISPLAY "regina_mt.ini"
FunctionEnd

Function SetCustomStack
  !insertmacro MUI_HEADER_TEXT "$(TEXT_IO_PAGETITLE_STACK)" "$(TEXT_IO_SUBTITLE_STACK)"
  !insertmacro MUI_INSTALLOPTIONS_DISPLAY "regina_ss.ini"
FunctionEnd

Function .onMouseOverSection

  !insertmacro MUI_DESCRIPTION_BEGIN

    !insertmacro MUI_DESCRIPTION_TEXT ${SecMain} "Installs the core components of ${LONGNAME} to the application folder."
    !insertmacro MUI_DESCRIPTION_TEXT ${SecDev} "Installs the files required to embed ${LONGNAME} into you C/C++ application."
    !insertmacro MUI_DESCRIPTION_TEXT ${SecDemo} "Install sample ${LONGNAME} programs."
    !insertmacro MUI_DESCRIPTION_TEXT ${SecDoc} "Install ${LONGNAME} documentation."

 !insertmacro MUI_DESCRIPTION_END

FunctionEnd

Function DoFileAssociation
  Pop $R1
  Pop $R0
  Strcmp $R0 0 exitfa
  ; do the association
  DetailPrint "Registering $R1 extension to run with Regina"
  IntOp $5 $5 + 1
  WriteRegStr HKCR $R1 "" "Regina"
  exitfa:
  Return
FunctionEnd

Function DoFileAssociationDetails
  StrCmp $5 0 exitfad
  ; do the association details
  WriteRegStr HKCR "Regina" "" "Regina Rexx Program"
  WriteRegStr HKCR "Regina\shell" "" "open"
  WriteRegStr HKCR "Regina\DefaultIcon" "" "$INSTDIR\regina.exe,0"
  WriteRegStr HKCR "Regina\shell\open" "" "Run"
  WriteRegStr HKCR "Regina\shell\open\command" "" '"$INSTDIR\regina.exe" -p "%1" %*'
  WriteRegStr HKCR "Regina\shell\edit" "" "Edit"
  WriteRegStr HKCR "Regina\shell\edit\command" "" 'notepad.exe "%1"'
  exitfad:
  Return
FunctionEnd

Function DoLanguageDefault
  StrCpy $1 2
  langStartLoop:
    StrCpy $2 "Field $1"
    ReadIniStr $R0 "$PLUGINSDIR\regina_mt.ini" $2 State
    StrCmp $R0 1 langFound
    IntOp $1 $1 + 1
    StrCmp $1 8 langExit ; the "8" here must be 1 more than the last field number in regina_mt.ini
    Goto langStartLoop
  langFound:
  ReadIniStr $R0 "$PLUGINSDIR\regina_mt.ini" $2 Text
  ; do the language default
  Push "REGINA_LANG_DIR"
  Push "$INSTDIR"
  Call WriteEnvStr
  Push "REGINA_LANG"
  Push "$R0"
  Call WriteEnvStr
  langExit:
  Return
FunctionEnd

Function InstallRxstack
  Pop $R0
  Strcmp $R0 0 exitss
  ; do the install of rxstack
  DetailPrint "Installing Regina Stack Service"
  nsExec::ExecToLog "$INSTDIR\rxstack -install"
  exitss:
FunctionEnd

;========================================================================
;Uninstaller Section

Section "Uninstall"

  ; get rid of file associations
  Push ".rexx"
  Call un.DeleteFileAssociation
  Push ".rex"
  Call un.DeleteFileAssociation
  Push ".rx"
  Call un.DeleteFileAssociation
  Push ".cmd"
  Call un.DeleteFileAssociation
  Push $INSTDIR
  Call un.RemoveFromPath
  DeleteRegKey HKCR "Regina"
  ; remove LANG environment variables
  Push "REGINA_LANG_DIR"
  Call un.DeleteEnvStr
  Push "REGINA_LANG"
  Call un.DeleteEnvStr
  ; stop and remove the rxstack service - ignore if we get errors
  Exec 'net stop "Regina Stack"'
  Exec "$INSTDIR\rxstack -remove"

  RMDir /r "$INSTDIR"

  ; Remove the installation stuff
  DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORTNAME}"
  DeleteRegKey HKLM SOFTWARE\${LONGNAME}

  ; remove shortcuts directory and everything in it
  RMDir /r "$SMPROGRAMS\${SHORTNAME}"

; !insertmacro MUI_UNFINISHHEADER

SectionEnd

;========================================================================
;Uninstaller Functions

Function un.DeleteFileAssociation
  Pop $R0
  ReadRegStr $R1 HKCR "$R0" ""
  StrCmp $R1 "Regina" 0 NoOwn ; only delete key if we own it
  DeleteRegKey HKCR "$R0"
  DetailPrint "Deleteing file association for $R0"
  NoOwn:
FunctionEnd

!include "isnt.nsh"
!include "path.nsh"
!include "WriteEnv.nsh"

;eof