Files
jameswitzeman.net/fonts/terminus-font/win32/terminus.nsi
T
2026-05-29 11:30:10 -07:00

299 lines
8.2 KiB
NSIS

#
# Copyright (c) 2020 Dimitar Toshkov Zhekov <dimitar.zhekov@gmail.com>
#
# This program is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the Free
# Software Foundation; either version 2 of the License, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
#
!include nsDialogs.nsh
!include LogicLib.nsh
!include FileFunc.nsh
!include WinVer.nsh
Name "Terminus Font"
OutFile terminus-font-4.49.exe
XPStyle on
CRCCheck force
RequestExecutionLevel admin
InstallDir "$EXEDIR\terminus-font-4.49"
InstallButtonText "Proceed"
Var apply_ao2
Var apply_dv1
Var apply_ge2
Var apply_gq2
Var apply_ij1
Var apply_ka2
Var apply_ll2
Var apply_td1
Var apply_hi2
Var install
Var unpack
Var hamster
Var directory
Var browse
Var ao2
Var dv1
Var ge2
Var gq2
Var ij1
Var ka2
Var ll2
Var td1
Var hi2
Var instate
Page custom ter_dialog_page ter_dialog_page_leave
Page instfiles
Function install_clicked
EnableWindow $directory 0
EnableWindow $browse 0
${NSD_SetText} $directory $FONTS
FunctionEnd
Function unpack_clicked
${NSD_SetText} $directory $INSTDIR
EnableWindow $directory 1
EnableWindow $browse 1
FunctionEnd
Function hamster_clicked
ExecShell "open" "http://terminus-font.sourceforge.net#variants"
ToolTips::Classic $hamster "http://terminus-font.sourceforge.net#variants"
FunctionEnd
Function browse_clicked
nsDialogs::SelectFolderDialog Directory $INSTDIR
Pop $0
${If} $0 != error
StrCpy $INSTDIR $0
${NSD_SetText} $directory $INSTDIR
${EndIf}
FunctionEnd
Function ter_dialog_page
nsDialogs::Create 1018
Pop $0
${If} $0 == error
MessageBox MB_ICONSTOP|MB_OK "Failed to create installation dialog."
Abort
${EndIf}
${NSD_CreateLink} 2% 1 11% 10u "Variants"
Pop $hamster
${NSD_OnClick} $hamster hamster_clicked
ToolTips::Classic $hamster "http://terminus-font.sourceforge.net#variants"
${NSD_CreateGroupBox} 0 0 100% 25u ""
${NSD_CreateCheckBox} 2% 10u 11% 12u "ao2"
Pop $apply_ao2
${NSD_CreateCheckBox} 13% 10u 11% 12u "dv1"
Pop $apply_dv1
${NSD_CreateCheckBox} 24% 10u 11% 12u "ge2"
Pop $apply_ge2
${NSD_CreateCheckBox} 35% 10u 11% 12u "gq2"
Pop $apply_gq2
${NSD_CreateCheckBox} 46% 10u 10% 12u "ij1"
Pop $apply_ij1
${NSD_CreateCheckBox} 56% 10u 11% 12u "ka2"
Pop $apply_ka2
${NSD_CreateCheckBox} 67% 10u 10% 12u "ll2"
Pop $apply_ll2
${NSD_CreateCheckBox} 77% 10u 11% 12u "td1"
Pop $apply_td1
${NSD_CreateCheckBox} 88% 10u 11% 12u "hi2"
Pop $apply_hi2
${NSD_CreateRadioButton} 0 28u 14% 12u "Install"
Pop $install
${NSD_AddStyle} $install ${WS_GROUP}
${NSD_Check} $install
${NSD_OnClick} $install install_clicked
${NSD_CreateRadioButton} 15% 28u 35% 12u "Unpack and patch only"
Pop $unpack
${NSD_UnCheck} $unpack
${NSD_OnClick} $unpack unpack_clicked
${NSD_CreateFileRequest} 0% 42u 95% 12u ""
Pop $directory
${NSD_CreateBrowseButton} 95% 42u 5% 12u "..."
Pop $browse
${NSD_OnClick} $browse browse_clicked
Call install_clicked
${NSD_CreateHLine} 0 57u 100% 1u
Pop $0
${NSD_AddStyle} $0 ${WS_GROUP}
${NSD_CreateLabel} 2% 63u 96% 8u "Terminus Font is licensed under \
the SIL Open Font License, Version 1.1."
${NSD_CreateLabel} 2% 71u 96% 12u "The license is available with a \
FAQ at: http://scripts.sil.org/OFL"
${NSD_CreateLabel} 2% 83u 96% 24u "Note: the Windows code pages \
contain a total of 384 characters. All other characters \
(math, pseudographics etc.) are not currently available."
${NSD_CreateLabel} 2% 107u 96% 12u "Terminus Font 4.49, \
Copyright (C) 2020 Dimitar Toshkov Zhekov."
${NSD_CreateLabel} 2% 119u 96% 12u "Report bugs to \
<dimitar.zhekov@gmail.com>"
nsDialogs::Show
FunctionEnd
Function ter_dialog_page_leave
${NSD_GetState} $apply_ao2 $0
${IfThen} $0 == ${BST_CHECKED} ${|} StrCpy $ao2 "ao2" ${|}
${NSD_GetState} $apply_dv1 $0
${IfThen} $0 == ${BST_CHECKED} ${|} StrCpy $dv1 "dv1" ${|}
${NSD_GetState} $apply_ge2 $0
${IfThen} $0 == ${BST_CHECKED} ${|} StrCpy $ge2 "ge2" ${|}
${NSD_GetState} $apply_gq2 $0
${IfThen} $0 == ${BST_CHECKED} ${|} StrCpy $gq2 "gq2" ${|}
${NSD_GetState} $apply_ij1 $0
${IfThen} $0 == ${BST_CHECKED} ${|} StrCpy $ij1 "ij1" ${|}
${NSD_GetState} $apply_ka2 $0
${IfThen} $0 == ${BST_CHECKED} ${|} StrCpy $ka2 "ka2" ${|}
${NSD_GetState} $apply_ll2 $0
${IfThen} $0 == ${BST_CHECKED} ${|} StrCpy $ll2 "ll2" ${|}
${NSD_GetState} $apply_td1 $0
${IfThen} $0 == ${BST_CHECKED} ${|} StrCpy $td1 "td1" ${|}
${NSD_GetState} $apply_hi2 $0
${If} $0 == ${BST_CHECKED}
StrCpy $hi2 "hi2"
${IfThen} $dv1 != "" ${|} StrCpy $dv1 "hi2-dv1" ${|}
${IfThen} $ka2 != "" ${|} StrCpy $ka2 "hi2-ka2" ${|}
${EndIf}
${NSD_GetState} $install $instate
${If} $instate == ${BST_UNCHECKED}
${NSD_GetText} $directory $INSTDIR
${If} $INSTDIR == ""
MessageBox MB_ICONSTOP|MB_OK "Unpack directory name required"
Abort
${EndIf}
${EndIf}
FunctionEnd
Function patch
Pop $1
${If} $1 != ""
ClearErrors
ExecWait '"$OUTDIR\fcpw.exe" 4100 terminus.fon $1.txt' $R0
${If} ${Errors}
MessageBox MB_OK|MB_ICONEXCLAMATION "Can't run $OUTDIR\fcpw.exe"
Abort "Can't run $OUTDIR\fcpw.exe"
${EndIf}
${IfThen} $R0 != 0 ${|} Abort "fcpw.exe failed with exit code $R0" ${|}
${EndIf}
FunctionEnd
!macro PATCH arg
push ${arg}
Call patch
!macroend
!define Patch `!insertmacro PATCH`
Section "Install"
${If} $instate == ${BST_CHECKED}
InitPluginsDir
SetOutPath $PLUGINSDIR
${Else}
SetOutPath $INSTDIR
${EndIf}
File "terminus.fon"
File "fcpw.exe"
File "ao2.txt"
File "dv1.txt"
File "ge2.txt"
File "gq2.txt"
File "ij1.txt"
File "ka2.txt"
File "ll2.txt"
File "td1.txt"
File "hi2.txt"
File "hi2-dv1.txt"
File "hi2-ka2.txt"
${Patch} $ao2
${Patch} $ge2
${Patch} $gq2
${Patch} $ij1
${Patch} $hi2
${Patch} $dv1
${Patch} $ka2
${Patch} $ll2
${Patch} $td1
${If} $instate == ${BST_CHECKED}
${For} $R0 1 15
Push "$FONTS\terminus.fon"
System::Call "Gdi32::RemoveFontResource(t s) i.r0"
${IfThen} $0 == 0 ${|} ${ExitFor} ${|}
${Next}
SendMessage ${HWND_BROADCAST} ${WM_FONTCHANGE} 0 0 /TIMEOUT=250
${Do}
ClearErrors
CopyFiles "$OUTDIR\terminus.fon" "$FONTS\terminus.fon"
${IfNotThen} ${Errors} ${|} ${Break} ${|}
MessageBox MB_RETRYCANCEL|MB_ICONSTOP "Can't copy terminus.fon$\n\
$\n\
All programs using the font should be stopped." IDRETRY +2
Abort "Can't copy terminus.fon"
${Loop}
${For} $R1 1 $R0
Push "$FONTS\terminus.fon"
System::Call "Gdi32::AddFontResource(t s) i.r0"
${IfThen} $0 == 0 ${|} ${ExitFor} ${|}
${Next}
SendMessage ${HWND_BROADCAST} ${WM_FONTCHANGE} 0 0 /TIMEOUT=250
${If} ${IsNT}
StrCpy $1 "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts"
${Else}
StrCpy $1 "SOFTWARE\Microsoft\Windows\CurrentVersion\Fonts"
${EndIf}
WriteRegStr HKLM $1 "Terminus" "terminus.fon"
ReadRegStr $0 HKLM $1 "Terminus"
StrCpy $1 ""
${If} $0 != "terminus.fon"
StrCpy $1 'If the font is not available after restart, open Control \
Panel -> Fonts, find "Terminus" and open it.$\n$\n'
${EndIf}
MessageBox MB_OK '$1\
Depending on the Windows font settings, some sizes may be unavailable. \
For example, with "Medium - 125%" fonts, 8x14 and 12x24 will likely be \
suppressed by 8x16 and 11x22 respectively. This seems to be Windows GUI \
problem; if you remove 8x16 and 11x12 with a resource editor, 8x14 and \
12x24 will work.$\n\
$\n\
Uninstallation: stop all programs using Terminus Font, open Control \
Panel -> Fonts, find "Terminus" and delete it. If you get an Access \
denied error, re-login or restart the system and try again.'
${Else}
File "..\AUTHORS"
File "..\CHANGES"
File "..\OFL.TXT"
${EndIf}
SectionEnd