]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - win32/terminus.nsi
import terminus-font-4.48
[FreeBSD/FreeBSD.git] / win32 / terminus.nsi
1 #\r
2 # Copyright (c) 2019 Dimitar Toshkov Zhekov <dimitar.zhekov@gmail.com>\r
3 #\r
4 # This program is free software; you can redistribute it and/or\r
5 # modify it under the terms of the GNU General Public License as\r
6 # published by the Free Software Foundation; either version 2 of\r
7 # the License, or (at your option) any later version.\r
8 #\r
9 # This program is distributed in the hope that it will be useful,\r
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of\r
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
12 # GNU General Public License for more details.\r
13 #\r
14 \r
15 !include nsDialogs.nsh\r
16 !include LogicLib.nsh\r
17 !include FileFunc.nsh\r
18 !include WinVer.nsh\r
19 \r
20 Name "Terminus Font"\r
21 OutFile terminus-font-4.48.exe\r
22 \r
23 XPStyle on\r
24 CRCCheck force\r
25 RequestExecutionLevel admin\r
26 \r
27 InstallDir "$EXEDIR\terminus-font-4.48"\r
28 InstallButtonText "Proceed"\r
29 \r
30 Var ter_dialog\r
31 \r
32 Var apply_ao2\r
33 Var apply_dv1\r
34 Var apply_ge2\r
35 Var apply_gq2\r
36 Var apply_ij1\r
37 Var apply_ka2\r
38 Var apply_ll2\r
39 Var apply_td1\r
40 Var apply_hi2\r
41 \r
42 Var install\r
43 Var unpack\r
44 Var hamster\r
45 Var directory\r
46 Var browse\r
47 \r
48 Var ao2\r
49 Var dv1\r
50 Var ge2\r
51 Var gq2\r
52 Var ij1\r
53 Var ka2\r
54 Var ll2\r
55 Var td1\r
56 Var hi2\r
57 \r
58 Var instate\r
59 \r
60 Page custom ter_dialog_page ter_dialog_page_leave\r
61 Page instfiles\r
62 \r
63 Function install_clicked\r
64 \r
65         EnableWindow $directory 0\r
66         EnableWindow $browse 0\r
67         ${NSD_SetText} $directory "$FONTS"\r
68 \r
69 FunctionEnd\r
70 \r
71 Function unpack_clicked\r
72 \r
73         ${NSD_SetText} $directory "$INSTDIR"\r
74         EnableWindow $directory 1\r
75         EnableWindow $browse 1\r
76 \r
77 FunctionEnd\r
78 \r
79 Function hamster_clicked\r
80 \r
81         ExecShell "open" "http://terminus-font.sourceforge.net#variants"\r
82         ToolTips::Classic $hamster "http://terminus-font.sourceforge.net#variants"\r
83 \r
84 FunctionEnd\r
85 \r
86 Function browse_clicked\r
87 \r
88         nsDialogs::SelectFolderDialog Directory $INSTDIR\r
89 \r
90         Pop $0\r
91         ${If} $0 != error\r
92                 StrCpy $INSTDIR "$0"\r
93                 ${NSD_SetText} $directory "$INSTDIR"\r
94         ${EndIf}\r
95 \r
96 FunctionEnd\r
97 \r
98 Function ter_dialog_page\r
99 \r
100         nsDialogs::Create 1018\r
101         Pop $ter_dialog\r
102 \r
103         ${NSD_CreateLink} 2% 1 11% 10u "Variants"\r
104         Pop $hamster\r
105         ${NSD_OnClick} $hamster hamster_clicked\r
106         ToolTips::Classic $hamster "http://terminus-font.sourceforge.net#variants"\r
107         ${NSD_CreateGroupBox} 0 0 100% 25u ""\r
108         ${NSD_CreateCheckBox} 2% 10u 11% 12u "ao2"\r
109         Pop $apply_ao2\r
110         ${NSD_CreateCheckBox} 13% 10u 11% 12u "dv1"\r
111         Pop $apply_dv1\r
112         ${NSD_CreateCheckBox} 24% 10u 11% 12u "ge2"\r
113         Pop $apply_ge2\r
114         ${NSD_CreateCheckBox} 35% 10u 11% 12u "gq2"\r
115         Pop $apply_gq2\r
116         ${NSD_CreateCheckBox} 46% 10u 10% 12u "ij1"\r
117         Pop $apply_ij1\r
118         ${NSD_CreateCheckBox} 56% 10u 11% 12u "ka2"\r
119         Pop $apply_ka2\r
120         ${NSD_CreateCheckBox} 67% 10u 10% 12u "ll2"\r
121         Pop $apply_ll2\r
122         ${NSD_CreateCheckBox} 77% 10u 11% 12u "td1"\r
123         Pop $apply_td1\r
124         ${NSD_CreateCheckBox} 88% 10u 11% 12u "hi2"\r
125         Pop $apply_hi2\r
126 \r
127         ${NSD_CreateRadioButton} 0 28u 14% 12u "Install"\r
128         Pop $install\r
129         ${NSD_AddStyle} $install ${WS_GROUP}\r
130         ${NSD_Check} $install\r
131         ${NSD_OnClick} $install install_clicked\r
132         ${NSD_CreateRadioButton} 15% 28u 35% 12u "Unpack and patch only"\r
133         Pop $unpack\r
134         ${NSD_UnCheck} $unpack\r
135         ${NSD_OnClick} $unpack unpack_clicked\r
136         ${NSD_CreateFileRequest} 0% 42u 95% 12u ""\r
137         Pop $directory\r
138         ${NSD_CreateBrowseButton} 95% 42u 5% 12u "..."\r
139         Pop $browse\r
140         ${NSD_OnClick} $browse browse_clicked\r
141         Call install_clicked\r
142 \r
143         ${NSD_CreateHLine} 0 57u 100% 1u\r
144         Pop $0\r
145         ${NSD_AddStyle} $0 ${WS_GROUP}\r
146         ${NSD_CreateLabel} 2% 63u 96% 8u "Terminus Font is licensed under \\r
147                 the SIL Open Font License, Version 1.1."\r
148         ${NSD_CreateLabel} 2% 71u 96% 12u "The license is available with a \\r
149                 FAQ at: http://scripts.sil.org/OFL"\r
150         ${NSD_CreateLabel} 2% 83u 96% 24u "Note: the Windows code pages \\r
151                 contain a total of 356 characters. All other characters \\r
152                 (math, pseudographics etc.) are not currently available."\r
153         ${NSD_CreateLabel} 2% 107u 96% 12u "Terminus Font 4.48, \\r
154                 Copyright (C) 2019 Dimitar Toshkov Zhekov."\r
155         ${NSD_CreateLabel} 2% 119u 96% 12u "Report bugs to \\r
156                 <dimitar.zhekov@gmail.com>"\r
157 \r
158         nsDialogs::Show\r
159 \r
160 FunctionEnd\r
161 \r
162 Function ter_dialog_page_leave\r
163 \r
164         ${NSD_GetState} $apply_ao2 $0\r
165         ${IfThen} $0 == ${BST_CHECKED} ${|} StrCpy $ao2 "ao2" ${|}\r
166         ${NSD_GetState} $apply_dv1 $0\r
167         ${IfThen} $0 == ${BST_CHECKED} ${|} StrCpy $dv1 "dv1" ${|}\r
168         ${NSD_GetState} $apply_ge2 $0\r
169         ${IfThen} $0 == ${BST_CHECKED} ${|} StrCpy $ge2 "ge2" ${|}\r
170         ${NSD_GetState} $apply_gq2 $0\r
171         ${IfThen} $0 == ${BST_CHECKED} ${|} StrCpy $gq2 "gq2" ${|}\r
172         ${NSD_GetState} $apply_ij1 $0\r
173         ${IfThen} $0 == ${BST_CHECKED} ${|} StrCpy $ij1 "ij1" ${|}\r
174         ${NSD_GetState} $apply_ka2 $0\r
175         ${IfThen} $0 == ${BST_CHECKED} ${|} StrCpy $ka2 "ka2" ${|}\r
176         ${NSD_GetState} $apply_ll2 $0\r
177         ${IfThen} $0 == ${BST_CHECKED} ${|} StrCpy $ll2 "ll2" ${|}\r
178         ${NSD_GetState} $apply_td1 $0\r
179         ${IfThen} $0 == ${BST_CHECKED} ${|} StrCpy $td1 "td1" ${|}\r
180 \r
181         ${NSD_GetState} $apply_hi2 $0\r
182         ${If} $0 == ${BST_CHECKED}\r
183                 StrCpy $hi2 "hi2"\r
184                 ${IfThen} $dv1 != "" ${|} StrCpy $dv1 "hi2-dv1" ${|}\r
185                 ${IfThen} $ka2 != "" ${|} StrCpy $ka2 "hi2-ka2" ${|}\r
186         ${EndIf}\r
187 \r
188         ${NSD_GetState} $install $instate\r
189         ${If} $instate == ${BST_UNCHECKED}\r
190                 ${NSD_GetText} $directory $INSTDIR\r
191                 ${If} $INSTDIR == ""\r
192                         MessageBox MB_ICONSTOP|MB_OK "Unpack directory name required"\r
193                         Abort\r
194                 ${EndIf}\r
195         ${EndIf}\r
196 \r
197 FunctionEnd\r
198 \r
199 Function patch\r
200 \r
201         Pop $1\r
202         ${If} $1 != ""\r
203                 ExecWait '"$OUTDIR\fcpw.exe" 4100 terminus.fon $1.txt' $R0\r
204                 ${If} ${Errors}\r
205                         MessageBox MB_OK|MB_ICONEXCLAMATION "Can't run $OUTDIR\fcpw.exe"\r
206                         Abort "Can't run $OUTDIR\fcpw.exe"\r
207                 ${EndIf}\r
208                 ${IfThen} $R0 != 0 ${|} Abort "fcpw.exe failed with exit code $R0" ${|}\r
209         ${EndIf}\r
210 \r
211 FunctionEnd\r
212 \r
213 !macro PATCH arg\r
214         push ${arg}\r
215         Call patch\r
216 !macroend\r
217 \r
218 !define Patch `!insertmacro PATCH`\r
219 \r
220 Section "Install"\r
221 \r
222         ${If} $instate == ${BST_CHECKED}\r
223                 InitPluginsDir\r
224                 SetOutPath "$PLUGINSDIR"\r
225         ${Else}\r
226                 SetOutPath "$INSTDIR"\r
227         ${EndIf}\r
228 \r
229         File "terminus.fon"\r
230         File "fcpw.exe"\r
231         File "ao2.txt"\r
232         File "dv1.txt"\r
233         File "ge2.txt"\r
234         File "gq2.txt"\r
235         File "ij1.txt"\r
236         File "ka2.txt"\r
237         File "ll2.txt"\r
238         File "td1.txt"\r
239         File "hi2.txt"\r
240         File "hi2-dv1.txt"\r
241         File "hi2-ka2.txt"\r
242 \r
243         ${Patch} $ao2\r
244         ${Patch} $ge2\r
245         ${Patch} $gq2\r
246         ${Patch} $ij1\r
247         ${Patch} $hi2\r
248         ${Patch} $dv1\r
249         ${Patch} $ka2\r
250         ${Patch} $ll2\r
251         ${Patch} $td1\r
252 \r
253         ${If} $instate == ${BST_CHECKED}\r
254                 ${For} $R0 1 15\r
255                         Push "$FONTS\terminus.fon"\r
256                         System::Call "Gdi32::RemoveFontResource(t s) i.r0"\r
257                         ${IfThen} $0 == 0 ${|} ${ExitFor} ${|}\r
258                 ${Next}\r
259                 SendMessage ${HWND_BROADCAST} ${WM_FONTCHANGE} 0 0 /TIMEOUT=250\r
260 \r
261                 ${Do}\r
262                         ClearErrors\r
263                         CopyFiles "$OUTDIR\terminus.fon" "$FONTS\terminus.fon"\r
264                         ${IfNotThen} ${Errors} ${|} ${Break} ${|}\r
265                         MessageBox MB_RETRYCANCEL|MB_ICONSTOP "Can't copy terminus.fon$\n\\r
266                                 $\n\\r
267                                 All programs using the font should be stopped." IDRETRY +2\r
268                         Abort "Can't copy terminus.fon"\r
269                 ${Loop}\r
270 \r
271                 ${For} $R1 1 $R0\r
272                         Push "$FONTS\terminus.fon"\r
273                         System::Call "Gdi32::AddFontResource(t s) i.r0"\r
274                         ${IfThen} $0 == 0 ${|} ${ExitFor} ${|}\r
275                 ${Next}\r
276                 SendMessage ${HWND_BROADCAST} ${WM_FONTCHANGE} 0 0 /TIMEOUT=250\r
277 \r
278                 ${If} ${IsNT}\r
279                         StrCpy $1 "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts"\r
280                 ${Else}\r
281                         StrCpy $1 "SOFTWARE\Microsoft\Windows\CurrentVersion\Fonts"\r
282                 ${EndIf}\r
283                 WriteRegStr HKLM "$1" "Terminus" "terminus.fon"\r
284                 ReadRegStr $0 HKLM "$1" "Terminus"\r
285 \r
286                 StrCpy $1 ""\r
287                 ${If} $0 != "terminus.fon"\r
288                         StrCpy $1 'If the font is not available after restart, open Control \\r
289                         Panel -> Fonts, find "Terminus" and open it.$\n$\n'\r
290                 ${EndIf}\r
291                 MessageBox MB_OK '$1\\r
292                         Depending on the Windows font settings, some sizes may be unavailable. \\r
293                         For example, with "Medium - 125%" fonts, 8x14 and 12x24 will likely be \\r
294                         suppressed by 8x16 and 11x22 respectively. This seems to be Windows GUI \\r
295                         problem; if you remove 8x16 and 11x12 with a resource editor, 8x14 and \\r
296                         12x24 will work.$\n\\r
297                         $\n\\r
298                         Uninstallation: stop all programs using Terminus Font, open Control \\r
299                         Panel -> Fonts, find "Terminus" and delete it. If you get an Access \\r
300                         denied error, re-login or restart the system and try again.'\r
301         ${Else}\r
302                 File "..\AUTHORS"\r
303                 File "..\CHANGES"\r
304                 File "..\OFL.TXT"\r
305         ${EndIf}\r
306 \r
307 SectionEnd\r