Blame win32/djvulibre/djvulibre.nsi

Packit df99a1
;---------------------------------------------------------;
Packit df99a1
;Created 08-24 april 2013 by                                 ;
Packit df99a1
;(C) Kravtsov Konstantin Ivanovich, Novokuznetsk, Russia  ;
Packit df99a1
;State of Art edition version - see below NSI_VER                                   ;
Packit df99a1
;LogicLib and Winver applied by Leon Bottou               ;             ;
Packit df99a1
;----------------------------------------------------------
Packit df99a1

Packit df99a1
;Used software:
Packit df99a1
;--------------
Packit df99a1
;NSIS 2.46 (http://sourceforge.net/projects/nsis/files/NSIS%202/2.46/nsis-2.46-setup.exe/download)
Packit df99a1
;add-on NSIS 2.46+log (http://sourceforge.net/projects/nsis/files/NSIS%202/2.46/nsis-2.46-log.zip/download)
Packit df99a1
;HM NIS Edit 2.0.3 -- it's good IDE for NSI building (http://prdownloads.sourceforge.net/hmne/nisedit2.0.3.exe?download)
Packit df99a1
;with 2.46 NSIS update (http://nsis.sourceforge.net/mediawiki/images/6/64/HMnsiSyntaxConfig.zip)
Packit df99a1
;Notepad ++ 6.3 (http://download.tuxfamily.org/notepadplus/6.3/npp.6.3.Installer.exe)
Packit df99a1
;Used docs
Packit df99a1
;---------
Packit df99a1
;NSIS docs and manuals at http://forum.oszone.net/thread-248731.html
Packit df99a1
;NSIS help at http://forum.oszone.net/thread-168287.html
Packit df99a1
;NSIS 2.46 User Manual shipped with NSIS
Packit df99a1

Packit df99a1

Packit df99a1

Packit df99a1

Packit df99a1
;INSTALLER START
Packit df99a1
;---------------
Packit df99a1
;prepare names
Packit df99a1

Packit df99a1
RequestExecutionLevel admin
Packit df99a1

Packit df99a1
!define NSI_VER "9.2"
Packit df99a1
!define DJVULIBRE_NAME "DjVuLibre"
Packit df99a1
!define DJVULIBRE_VERSION "3.5.27"
Packit df99a1
!define CLASSES "Software\Classes\"
Packit df99a1
!define DJVIEW_NAME "DjView"
Packit df99a1
!define DJVIEW_VERSION "4.10"
Packit df99a1
!define VI_PRODUCT_VERSION "4.10.0.0"
Packit df99a1

Packit df99a1
!define PRODUCT_NAME "${DJVULIBRE_NAME} ${DJVIEW_NAME}"
Packit df99a1
!define UNINST_NAME "${DJVULIBRE_NAME}+${DJVIEW_NAME}" ; for uninstaller
Packit df99a1
!define MENU_NAME "${DJVULIBRE_NAME}"
Packit df99a1
!define PRODUCT_VERSION "${DJVULIBRE_VERSION}+${DJVIEW_VERSION}"
Packit df99a1

Packit df99a1
;provide other info
Packit df99a1
!define PRODUCT_PUBLISHER "DjVuZone"
Packit df99a1
!define DJVULIBRE_WEB_SITE "http://djvu.sourceforge.net"
Packit df99a1
!define DJVUORG_WEB_SITE "http://djvu.org"
Packit df99a1
!define DJVIEW_OPTS "--outline --continuous"
Packit df99a1
!define PRODUCT_DOWNLOAD_PAGE "http://sourceforge.net/projects/djvu/files/DjVuLibre_Windows/"
Packit df99a1
!define PRODUCT_ONLINEHELP_PAGE "http://djvu.sourceforge.net/doc/index.html"
Packit df99a1
!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\djview.exe"
Packit df99a1
!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${UNINST_NAME}"
Packit df99a1
!define PRODUCT_UNINST_ROOT_KEY "HKLM"
Packit df99a1

Packit df99a1

Packit df99a1
;label for HCR
Packit df99a1
!define FILEID "Djview.DjVuFile"
Packit df99a1
!define NO_EXT "no key"
Packit df99a1
!define BACKUP_EXT "DjView.Backup"
Packit df99a1

Packit df99a1
;const for url.lnk
Packit df99a1
!define RUN_URL "$WINDIR\system32\rundll32.exe"
Packit df99a1
!define ICO_URL "$WINDIR\system32\url.dll"
Packit df99a1
!define URL_PAR " url.dll,FileProtocolHandler"
Packit df99a1

Packit df99a1
;vars
Packit df99a1
Var Djvu_EXT ; ext var
Packit df99a1
Var COUNT    ; counter var
Packit df99a1
Var KEY_VAL  ; readed key valuse
Packit df99a1
Var TMP_EXT  ; for temp reading ext val from reg
Packit df99a1
Var INST_LOG_REN ; flag of exist install.log
Packit df99a1

Packit df99a1
;fill installer description
Packit df99a1
VIProductVersion "${VI_PRODUCT_VERSION}"
Packit df99a1

Packit df99a1
;end-user doesnot see
Packit df99a1
;djvulibre version anywhere except installer
Packit df99a1
;dll's and utils doesn't report any
Packit df99a1
VIAddVersionKey "DjvuLibreVersion" ${DJVULIBRE_VERSION}
Packit df99a1
VIAddVersionKey "DjViewVersion" ${DJVIEW_VERSION}
Packit df99a1
VIAddVersionKey "Installer by" "Konstantin Kravtsov (C) 2013"
Packit df99a1
VIAddVersionKey "FileVersion" ${PRODUCT_VERSION}
Packit df99a1
VIAddVersionKey "ProductName" "${PRODUCT_NAME}"
Packit df99a1
VIAddVersionKey "LegalCopyright" "GPL v2+"
Packit df99a1
VIAddVersionKey "CompanyName" ${PRODUCT_PUBLISHER}
Packit df99a1
VIAddVersionKey "FileDescription" "DjVu view, edit and create tools for Windows"
Packit df99a1

Packit df99a1
;----------------
Packit df99a1
;Includes section
Packit df99a1
;----------------
Packit df99a1

Packit df99a1
!include "LogicLib.nsh"
Packit df99a1
!include "WinVer.nsh"
Packit df99a1

Packit df99a1

Packit df99a1
;---------------
Packit df99a1
;Install section
Packit df99a1
;---------------
Packit df99a1

Packit df99a1
SetCompressor /SOLID lzma
Packit df99a1
Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
Packit df99a1
OutFile "..\DjVuLibre-${DJVULIBRE_VERSION}_DjView-${DJVIEW_VERSION}_Setup.exe"
Packit df99a1
InstallDir "$PROGRAMFILES\DjVuLibre"
Packit df99a1
InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""
Packit df99a1
ShowInstDetails show
Packit df99a1
ShowUnInstDetails show
Packit df99a1

Packit df99a1
; MUI 1.67 compatible ------
Packit df99a1
!include "MUI.nsh"
Packit df99a1

Packit df99a1
;settings
Packit df99a1
!define MUI_ABORTWARNING
Packit df99a1
!define MUI_HEADERIMAGE
Packit df99a1
!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\win-install.ico"
Packit df99a1
!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\win-uninstall.ico"
Packit df99a1

Packit df99a1
;language selection dialog settings
Packit df99a1
!define MUI_LANGDLL_ALWAYSSHOW
Packit df99a1
!define MUI_LANGDLL_REGISTRY_ROOT "${PRODUCT_UNINST_ROOT_KEY}"
Packit df99a1
!define MUI_LANGDLL_REGISTRY_KEY "${PRODUCT_UNINST_KEY}"
Packit df99a1
!define MUI_LANGDLL_REGISTRY_VALUENAME "NSIS:Language"
Packit df99a1

Packit df99a1
;workaround lang change effect
Packit df99a1
!define MUI_PAGE_CUSTOMFUNCTION_PRE preWelcomePage
Packit df99a1

Packit df99a1
;set components decription layout bottom
Packit df99a1
!define MUI_COMPONENTSPAGE_SMALLDESC
Packit df99a1

Packit df99a1

Packit df99a1
;welcome page
Packit df99a1
!define MUI_WELCOMEPAGE_TITLE_3LINES
Packit df99a1
!insertmacro MUI_PAGE_WELCOME
Packit df99a1

Packit df99a1
;license page
Packit df99a1
!insertmacro MUI_PAGE_LICENSE "COPYING.txt"
Packit df99a1

Packit df99a1
;directory page
Packit df99a1
!insertmacro MUI_PAGE_DIRECTORY
Packit df99a1

Packit df99a1
;install options page
Packit df99a1
!insertmacro MUI_PAGE_COMPONENTS
Packit df99a1

Packit df99a1
;instfiles page
Packit df99a1
!insertmacro MUI_PAGE_INSTFILES
Packit df99a1

Packit df99a1
;finish page
Packit df99a1
!define MUI_FINISHPAGE_RUN " "
Packit df99a1
!define MUI_FINISHPAGE_RUN_TEXT $(Launch_LAB)
Packit df99a1
!define MUI_FINISHPAGE_RUN_NOTCHECKED
Packit df99a1
!define MUI_FINISHPAGE_RUN_FUNCTION "LaunchReadme"
Packit df99a1
!define MUI_FINISHPAGE_NOAUTOCLOSE
Packit df99a1
!define MUI_FINISHPAGE_TITLE_3LINES
Packit df99a1
!insertmacro MUI_PAGE_FINISH
Packit df99a1

Packit df99a1
;uninstaller pages
Packit df99a1
!insertmacro MUI_UNPAGE_INSTFILES
Packit df99a1

Packit df99a1
;reserve files
Packit df99a1
!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS
Packit df99a1

Packit df99a1
;language files
Packit df99a1
!insertmacro MUI_LANGUAGE "English"
Packit df99a1
!insertmacro MUI_LANGUAGE "Russian"
Packit df99a1

Packit df99a1
; end MUI 1.67 compatible ------
Packit df99a1

Packit df99a1

Packit df99a1
Function .onInit
Packit df99a1
  ;check language
Packit df99a1
  !insertmacro MUI_LANGDLL_DISPLAY
Packit df99a1
FunctionEnd
Packit df99a1

Packit df99a1
Function preWelcomePage
Packit df99a1
  ReadRegStr $KEY_VAL  ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString"
Packit df99a1
  ${If} "$KEY_VAL" != ""
Packit df99a1
    ReadRegStr $COUNT ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion"
Packit df99a1
    ${If} "$COUNT" == "${PRODUCT_VERSION}"
Packit df99a1
      MessageBox MB_YESNO|MB_ICONEXCLAMATION $(Message_AlreadyInstalled) IDNO done
Packit df99a1
    ${ElseIf} "$COUNT" S< "${PRODUCT_VERSION}"
Packit df99a1
      MessageBox MB_YESNO|MB_ICONEXCLAMATION $(Message_OldFound) IDNO done
Packit df99a1
    ${ElseIf} "$COUNT" S> "${PRODUCT_VERSION}"
Packit df99a1
      MessageBox MB_YESNO|MB_ICONEXCLAMATION $(Message_NewFound) IDNO done
Packit df99a1
    ${EndIf}
Packit df99a1
    ;Run the uninstaller
Packit df99a1
    ClearErrors
Packit df99a1
    ExecWait '"$KEY_VAL" /S' ;; silent
Packit df99a1
  ${EndIf}
Packit df99a1
done:
Packit df99a1
FunctionEnd
Packit df99a1

Packit df99a1
Function RegisterExt
Packit df99a1
  ; Kravtsov Konstantin Ivanovich (C) 2013
Packit df99a1
  ; for register ext. Push EXT with ext and call
Packit df99a1
  Pop $Djvu_EXT
Packit df99a1
  ClearErrors
Packit df99a1
  ReadRegStr $TMP_EXT HKLM "${CLASSES}$Djvu_EXT" ""
Packit df99a1
  ${If} ${Errors}
Packit df99a1
    WriteRegStr HKLM "${CLASSES}$Djvu_EXT" ${BACKUP_EXT} "${NO_EXT}"
Packit df99a1
  ${ElseIf} "$TMP_EXT" != "${FILEID}"
Packit df99a1
    WriteRegStr HKLM "${CLASSES}$Djvu_EXT" "${BACKUP_EXT}" "$TMP_EXT"
Packit df99a1
  ${EndIf}
Packit df99a1
  WriteRegStr HKLM "${CLASSES}$Djvu_EXT" "" "${FILEID}"
Packit df99a1
FunctionEnd
Packit df99a1

Packit df99a1
Function LaunchReadme
Packit df99a1
  Exec '"$INSTDIR\djview.exe" --outline --continuous "$INSTDIR\doc\djvulibre-book-en.djvu"'
Packit df99a1
FunctionEnd
Packit df99a1

Packit df99a1

Packit df99a1
;---install files
Packit df99a1
Section "-!DjVuLibre" scDjVuLibre
Packit df99a1
  SectionIn RO
Packit df99a1
  SetOutPath "$INSTDIR"
Packit df99a1
  SetOverwrite try
Packit df99a1
  StrCpy $INST_LOG_REN 0 ;set var to zero
Packit df99a1
  StrCpy $TMP_EXT "$INSTDIR\install.log"
Packit df99a1
  ${If} ${FileExists} $TMP_EXT
Packit df99a1
    Rename $TMP_EXT $INSTDIR\install.kik
Packit df99a1
    StrCpy $INST_LOG_REN 1 ;set var to rename was
Packit df99a1
  ${EndIf}
Packit df99a1
  StrCpy $TMP_EXT "$INSTDIR\uninstall.${PRODUCT_VERSION}"
Packit df99a1
  ${If} ${FileExists} $TMP_EXT
Packit df99a1
    Rename $INSTDIR\uninstall.${PRODUCT_VERSION} $INSTDIR\install.log
Packit df99a1
  ${EndIf}
Packit df99a1
  ;; all files are installed now
Packit df99a1
  Logset on
Packit df99a1
  File "*.exe"
Packit df99a1
  File "*.dll"
Packit df99a1
  File "*.lib"
Packit df99a1
  File /r "include"
Packit df99a1
  File /r "doc"
Packit df99a1
  File /r "plugins"
Packit df99a1
  File /r "share"
Packit df99a1
  File "qt.conf"
Packit df99a1
  File "djvulibre*.ns?"
Packit df99a1
  File "COPYING.txt"
Packit df99a1
  Logset off
Packit df99a1
SectionEnd
Packit df99a1

Packit df99a1
;--- registry
Packit df99a1
Section "-registry"
Packit df99a1
  SectionIn RO
Packit df99a1
  DetailPrint "Updating registry"
Packit df99a1
  ;; app registration
Packit df99a1
  WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\djview.exe"
Packit df99a1
  WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "Path" "$INSTDIR"
Packit df99a1
  WriteRegStr HKLM "${CLASSES}Applications\djview.exe" "FriendlyAppName" "DjView"
Packit df99a1
  WriteRegStr HKLM "${CLASSES}Applications\djview.exe\SupportedTypes\.djvu" "" ""
Packit df99a1
  WriteRegStr HKLM "${CLASSES}Applications\djview.exe\SupportedTypes\.djv" "" ""
Packit df99a1
  WriteRegStr HKLM "${CLASSES}Applications\djview.exe\shell\open\command" "" '"$INSTDIR\djview.exe" "%1"'
Packit df99a1
  ${If} ${AtLeastWin7}
Packit df99a1
    WriteRegDWORD HKLM "${PRODUCT_DIR_REGKEY}" "UseUrl" 1
Packit df99a1
    WriteRegStr HKLM "${CLASSES}Applications\djview.exe\SupportedProtocols\http" "" ""
Packit df99a1
    WriteRegStr HKLM "${CLASSES}Applications\djview.exe\SupportedProtocols\https" "" ""
Packit df99a1
  ${EndIf}
Packit df99a1
  ;; fileid
Packit df99a1
  DeleteRegKey HKLM "${CLASSES}${FILEID}"
Packit df99a1
  WriteRegStr HKLM "${CLASSES}${FILEID}" "" "DjVu File"
Packit df99a1
  WriteRegStr HKLM "${CLASSES}${FILEID}\DefaultIcon" "" "$INSTDIR\djview.exe,1"
Packit df99a1
  WriteRegStr HKLM "${CLASSES}${FILEID}\shell\open\command" "" '"$INSTDIR\djview.exe" "%1"'
Packit df99a1
  ;; open with
Packit df99a1
  WriteRegStr HKLM "${CLASSES}.djv\OpenWithProgids" ${FILEID} ""
Packit df99a1
  WriteRegStr HKLM "${CLASSES}.djvu\OpenWithProgids" ${FILEID} ""
Packit df99a1
  ClearErrors
Packit df99a1
  ReadRegStr $TMP_EXT HKLM "${CLASSES}DjVu.Document" ""
Packit df99a1
  ${IfNot} ${Errors}
Packit df99a1
    WriteRegStr HKLM "${CLASSES}.djv\OpenWithProgids" "DjVu.Document" ""
Packit df99a1
    WriteRegStr HKLM "${CLASSES}.djvu\OpenWithProgids" "DjVu.Document" ""
Packit df99a1
  ${EndIf}
Packit df99a1
SectionEnd
Packit df99a1

Packit df99a1
;--- associations
Packit df99a1
Section "$(secAssoc)" scAssoc
Packit df99a1
  DetailPrint "Creating associations"
Packit df99a1
  push ".djvu"
Packit df99a1
  Call RegisterExt
Packit df99a1
  push ".djv"
Packit df99a1
  Call RegisterExt
Packit df99a1
SectionEnd
Packit df99a1

Packit df99a1
;--- shortcuts
Packit df99a1
Section "-menuentries"
Packit df99a1
  SectionIn RO
Packit df99a1
  DetailPrint "Creating menu entries"
Packit df99a1

Packit df99a1
  ;clear old menu
Packit df99a1
  rmdir /r "$SMPROGRAMS\${MENU_NAME}"
Packit df99a1

Packit df99a1
  ;; all menu entries
Packit df99a1
  LogSet on
Packit df99a1
  SetShellVarContext all
Packit df99a1
  CreateDirectory "$SMPROGRAMS\${MENU_NAME}"
Packit df99a1
  CreateShortCut "$SMPROGRAMS\${MENU_NAME}\DjView.lnk" "$INSTDIR\djview.exe"
Packit df99a1
  CreateDirectory "$SMPROGRAMS\${MENU_NAME}\$(Uninst_DIR)"
Packit df99a1
  CreateShortCut "$SMPROGRAMS\${MENU_NAME}\$(Uninst_DIR)\$(Uninst_LNK).lnk" "$INSTDIR\uninst.exe"
Packit df99a1
  CreateDirectory "$SMPROGRAMS\${MENU_NAME}\$(Doc_DIR)"
Packit df99a1
  CreateShortCut "$SMPROGRAMS\${MENU_NAME}\$(Doc_DIR)\$(WEB_LNK) Djvu.org.lnk" ${RUN_URL} "${URL_PAR} ${DJVUORG_WEB_SITE}" ${ICO_URL} 0
Packit df99a1
  CreateShortCut "$SMPROGRAMS\${MENU_NAME}\$(Doc_DIR)\$(WEB_LNK) DjvuLibre.lnk" ${RUN_URL} "${URL_PAR} ${DJVULIBRE_WEB_SITE}" ${ICO_URL} 0
Packit df99a1
  CreateShortCut "$SMPROGRAMS\${MENU_NAME}\$(Doc_DIR)\$(WEB_LNK) DjVuLibre $(WebDL_LNK).lnk" ${RUN_URL} "${URL_PAR} ${PRODUCT_DOWNLOAD_PAGE}" ${ICO_URL} 0
Packit df99a1
  CreateShortCut "$SMPROGRAMS\${MENU_NAME}\$(Doc_DIR)\Online documentation.lnk" ${RUN_URL} "${URL_PAR} ${PRODUCT_ONLINEHELP_PAGE}" ${ICO_URL} 0
Packit df99a1
  CreateShortCut "$SMPROGRAMS\${MENU_NAME}\$(Doc_DIR)\$(Lic_TXT).lnk" "$INSTDIR\COPYING.txt"
Packit df99a1
  CreateShortCut "$SMPROGRAMS\${MENU_NAME}\$(Doc_DIR)\DjVuLibre documentation.lnk" "$INSTDIR\djview.exe" '${DJVIEW_OPTS} "$INSTDIR\doc\djvulibre-book-en.djvu"'
Packit df99a1
  CreateShortCut "$SMPROGRAMS\${MENU_NAME}\$(Doc_DIR)\Specification of the DjVu format (v2).lnk" "$INSTDIR\djview.exe" '${DJVIEW_OPTS} "$INSTDIR\doc\djvu2spec.djvu"'
Packit df99a1
  CreateShortCut "$SMPROGRAMS\${MENU_NAME}\$(Doc_DIR)\Specification of the DjVu format (v3).lnk" "$INSTDIR\djview.exe" '${DJVIEW_OPTS} "$INSTDIR\doc\djvu3spec.djvu"'
Packit df99a1
  CreateShortCut "$SMPROGRAMS\${MENU_NAME}\$(Doc_DIR)\Specification of the DjVu format (changes).lnk" "$INSTDIR\doc\djvuchanges.txt"
Packit df99a1
  CreateShortCut "$SMPROGRAMS\${MENU_NAME}\$(Doc_DIR)\Lizardtech License Notes 2002.lnk" "$INSTDIR\djview.exe" '"$INSTDIR\doc\lizard2002.djvu"'
Packit df99a1
  CreateShortCut "$SMPROGRAMS\${MENU_NAME}\$(Doc_DIR)\Lizardtech License Notes 2007.lnk" "$INSTDIR\djview.exe" '"$INSTDIR\doc\lizard2007.djvu"'
Packit df99a1
  ${If} $Language == ${LANG_RUSSIAN}
Packit df99a1
    CreateShortCut "$SMPROGRAMS\${MENU_NAME}\$(Doc_DIR)\$(Doc_LNK) ${DJVULIBRE_NAME}.lnk" "$INSTDIR\djview.exe" '${DJVIEW_OPTS} "$INSTDIR\doc\djvulibre-book-ru.djvu"'
Packit df99a1
  ${EndIf}
Packit df99a1
  LogSet off
Packit df99a1
SectionEnd
Packit df99a1

Packit df99a1
Section "$(secDesk)" scDesk
Packit df99a1
  DetailPrint "Creating desktop shortcut"
Packit df99a1
  SetShellVarContext all
Packit df99a1
  LogSet on
Packit df99a1
  CreateShortCut "$DESKTOP\DjView.lnk" "$INSTDIR\djview.exe"
Packit df99a1
  Logset off
Packit df99a1
SectionEnd
Packit df99a1
  
Packit df99a1
Section /o "$(secQuick)" scQuick
Packit df99a1
  DetailPrint "Creating quick launch shortcut"
Packit df99a1
  SetShellVarContext all
Packit df99a1
  LogSet on
Packit df99a1
  CreateShortCut "$QUICKLAUNCH\DjView.lnk" "$INSTDIR\djview.exe"
Packit df99a1
  LogSet off
Packit df99a1
SectionEnd
Packit df99a1

Packit df99a1

Packit df99a1
; --- post install
Packit df99a1
Section -Post
Packit df99a1
  WriteUninstaller "$INSTDIR\uninst.exe"
Packit df99a1
  WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\djview.exe"
Packit df99a1
  WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "Path" "$INSTDIR"
Packit df99a1
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "${PRODUCT_NAME}  ${PRODUCT_VERSION}"
Packit df99a1
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe"
Packit df99a1
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\djview.exe,0"
Packit df99a1
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"
Packit df99a1
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${DJVULIBRE_WEB_SITE}"
Packit df99a1
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}"
Packit df99a1
  ;protect install log
Packit df99a1
  Rename $INSTDIR\install.log $INSTDIR\uninstall.${PRODUCT_VERSION}
Packit df99a1
  SetFileAttributes $INSTDIR\uninstall.${PRODUCT_VERSION} HIDDEN|READONLY|SYSTEM
Packit df99a1
  ${If} $INST_LOG_REN == "1"
Packit df99a1
    Rename $INSTDIR\install.kik $INSTDIR\install.log
Packit df99a1
  ${EndIf}
Packit df99a1
  DetailPrint "-----------------------------------------------------------------------------------------------"
Packit df99a1
  DetailPrint "Installer NSI V.${NSI_VER} by Kravtsov Konstantin Ivanovich, Novokuznetsk, Russia."
Packit df99a1
  DetailPrint "-----------------------------------------------------------------------------------------------"
Packit df99a1
SectionEnd
Packit df99a1

Packit df99a1

Packit df99a1

Packit df99a1
;------------
Packit df99a1
; Uninstaller 
Packit df99a1
;------------
Packit df99a1

Packit df99a1

Packit df99a1
!define UnStrLoc "!insertmacro UnStrLoc"
Packit df99a1
!macro UnStrLoc ResultVar String SubString StartPoint
Packit df99a1
  Push "${String}"
Packit df99a1
  Push "${SubString}"
Packit df99a1
  Push "${StartPoint}"
Packit df99a1
  Call un.StrLoc
Packit df99a1
  Pop "${ResultVar}"
Packit df99a1
!macroend
Packit df99a1

Packit df99a1
Function un.StrLoc
Packit df99a1
  ; After this point:
Packit df99a1
  ;  $R0 = StartPoint (input)
Packit df99a1
  ;  $R1 = SubString (input)
Packit df99a1
  ;  $R2 = String (input)
Packit df99a1
  ;  $R3 = SubStringLen (temp)
Packit df99a1
  ;  $R4 = StrLen (temp)
Packit df99a1
  ;  $R5 = StartCharPos (temp)
Packit df99a1
  ;  $R6 = TempStr (temp)*/
Packit df99a1
  ;Get input from user
Packit df99a1
  Exch $R0
Packit df99a1
  Exch
Packit df99a1
  Exch $R1
Packit df99a1
  Exch 2
Packit df99a1
  Exch $R2
Packit df99a1
  Push $R3
Packit df99a1
  Push $R4
Packit df99a1
  Push $R5
Packit df99a1
  Push $R6
Packit df99a1
  ;Get "String" and "SubString" length
Packit df99a1
  StrLen $R3 $R1
Packit df99a1
  StrLen $R4 $R2
Packit df99a1
  ;Start "StartCharPos" counter
Packit df99a1
  StrCpy $R5 0
Packit df99a1
  ;Loop until "SubString" is found or "String" reaches its end
Packit df99a1
  ${Do}
Packit df99a1
    ;Remove everything before and after the searched part ("TempStr")
Packit df99a1
    StrCpy $R6 $R2 $R3 $R5
Packit df99a1
    ;Compare "TempStr" with "SubString"
Packit df99a1
    ${If} $R6 == $R1
Packit df99a1
      ${If} $R0 == `<`
Packit df99a1
        IntOp $R6 $R3 + $R5
Packit df99a1
        IntOp $R0 $R4 - $R6
Packit df99a1
      ${Else}
Packit df99a1
        StrCpy $R0 $R5
Packit df99a1
      ${EndIf}
Packit df99a1
      ${ExitDo}
Packit df99a1
    ${EndIf}
Packit df99a1
    ;If not "SubString", this could be "String"'s end
Packit df99a1
    ${If} $R5 >= $R4
Packit df99a1
      StrCpy $R0 ``
Packit df99a1
      ${ExitDo}
Packit df99a1
    ${EndIf}
Packit df99a1
    ;If not, continue the loop
Packit df99a1
    IntOp $R5 $R5 + 1
Packit df99a1
  ${Loop}
Packit df99a1
  ;Return output to user
Packit df99a1
  Pop $R6
Packit df99a1
  Pop $R5
Packit df99a1
  Pop $R4
Packit df99a1
  Pop $R3
Packit df99a1
  Pop $R2
Packit df99a1
  Exch
Packit df99a1
  Pop $R1
Packit df99a1
  Exch $R0
Packit df99a1
FunctionEnd
Packit df99a1

Packit df99a1
Function un.RemoveFiles
Packit df99a1
  Exch $R7 ;get  path+filename uninstall log
Packit df99a1
  push $0 ;$0 - uninstall log file var
Packit df99a1
  push $1 ; string readed from file
Packit df99a1
  push $2 ; string cutted from $1
Packit df99a1
  push $3 ; int - found str location by StrLoc
Packit df99a1
  push $4 ; counter
Packit df99a1
  push $5 ; extracted filename
Packit df99a1
  DetailPrint "Removing Files.."
Packit df99a1
  ${If} ${FileExists} "$R7"
Packit df99a1
    ClearErrors
Packit df99a1
    FileOpen $0 "$R7" "r"
Packit df99a1
    ${Do}
Packit df99a1
      ClearErrors
Packit df99a1
      FileRead $0 $1
Packit df99a1
      ${If} ${Errors}
Packit df99a1
         ;check no file or EOF
Packit df99a1
         ${ExitDo}
Packit df99a1
      ${EndIf}
Packit df99a1
      StrCpy $2 $1 11
Packit df99a1
      ${If} $2 == "File: wrote"
Packit df99a1
        ${UnStrloc} $3 $1 " to " ">"
Packit df99a1
        Intop $3 $3 + 5
Packit df99a1
        StrCpy $5 $1 -3 $3
Packit df99a1
        Delete  /REBOOTOK "$5"
Packit df99a1
      ${ElseIf} $2 == "CreateShort"
Packit df99a1
        ${UnStrloc} $3 $1 ', in: ' ">"
Packit df99a1
        Intop $3 $3 - 22
Packit df99a1
        StrCpy $5 $1 $3 22
Packit df99a1
        Delete /REBOOTOK "$5"
Packit df99a1
      ${EndIf}
Packit df99a1
    ${Loop}
Packit df99a1
    SetDetailsPrint both
Packit df99a1
    ;prepare file
Packit df99a1
    FileSeek $0 0
Packit df99a1
    ;set counter
Packit df99a1
    strcpy $4 0
Packit df99a1
    ${Do}
Packit df99a1
      ClearErrors
Packit df99a1
      FileRead $0 $1
Packit df99a1
      ${If} ${Errors}
Packit df99a1
         ${ExitDo}
Packit df99a1
      ${EndIf}
Packit df99a1
      StrCpy $2 $1 -2 -10
Packit df99a1
      ${If} $2 == " created"
Packit df99a1
        ${UnStrloc} $3 $1 " created" ">"
Packit df99a1
        Intop $3 $3 - 18
Packit df99a1
        StrCpy $5 $1 $3 18
Packit df99a1
        push $5
Packit df99a1
        Intop $4 $4 + 1
Packit df99a1
      ${EndIf}
Packit df99a1
    ${Loop}
Packit df99a1
    ${ForEach} $COUNT $4 1 - 1
Packit df99a1
      POP $5
Packit df99a1
      RmDir  /REBOOTOK "$5"
Packit df99a1
    ${Next}
Packit df99a1
    FileClose $0
Packit df99a1
  ${Else}
Packit df99a1
    RMDir /r "$INSTDIR"  ; too bad
Packit df99a1
  ${EndIf}
Packit df99a1
  pop $5 ; extracted filename
Packit df99a1
  pop $4 ; counter
Packit df99a1
  pop $3 ; int - found str location by StrLoc
Packit df99a1
  pop $2 ; string cutted from $1
Packit df99a1
  pop $1 ; string readed from file
Packit df99a1
  pop $0 ;$0 - uninstall log file var
Packit df99a1
  pop $R7 ; path+filename uninstall log
Packit df99a1
FunctionEnd
Packit df99a1

Packit df99a1

Packit df99a1
Function un.RegisterExt
Packit df99a1
; Kravtsov Konstantin Ivanovich (C) 2013
Packit df99a1
; restore assoc from uninst key
Packit df99a1
; check if restore really need
Packit df99a1
  Pop $Djvu_EXT
Packit df99a1
  ClearErrors
Packit df99a1
  ReadRegStr $TMP_EXT HKLM "${CLASSES}$Djvu_EXT" ""
Packit df99a1
  ${IfNot} ${Errors}
Packit df99a1
     ${If} "$TMP_EXT" == ${FILEID}
Packit df99a1
       ClearErrors
Packit df99a1
       ReadRegStr $TMP_EXT HKLM "${CLASSES}$Djvu_EXT" ${BACKUP_EXT}
Packit df99a1
       ${IfNot} ${Errors}
Packit df99a1
         ${If} "$TMP_EXT" == "${NO_EXT}"
Packit df99a1
           WriteRegStr HKLM "${CLASSES}$Djvu_EXT" "" ""
Packit df99a1
         ${Else}
Packit df99a1
           WriteRegStr HKLM "${CLASSES}$Djvu_EXT" "" $TMP_EXT
Packit df99a1
         ${EndIf}
Packit df99a1
         DeleteRegValue HKLM "${CLASSES}$Djvu_EXT" ${BACKUP_EXT}
Packit df99a1
       ${EndIf}
Packit df99a1
     ${EndIf}
Packit df99a1
  ${EndIf}
Packit df99a1
FunctionEnd
Packit df99a1

Packit df99a1
Function un.onUninstSuccess
Packit df99a1
  IfSilent +2
Packit df99a1
  MessageBox MB_ICONINFORMATION|MB_OK $(UninstSux_MSG)
Packit df99a1
FunctionEnd
Packit df99a1

Packit df99a1
Function un.onInit
Packit df99a1
  IfSilent +3
Packit df99a1
  MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 $(Uninst_MSG) IDYES +2
Packit df99a1
  Abort
Packit df99a1
FunctionEnd
Packit df99a1

Packit df99a1
Section Uninstall
Packit df99a1
  SetShellVarContext all
Packit df99a1
  SetFileAttributes $INSTDIR\uninstall.${PRODUCT_VERSION} NORMAL
Packit df99a1
  IfSilent +2
Packit df99a1
  SetDetailsPrint both
Packit df99a1
  ;; remove all files
Packit df99a1
  push $INSTDIR\uninstall.${PRODUCT_VERSION}
Packit df99a1
  Call un.RemoveFiles
Packit df99a1
  Delete "$INSTDIR\uninstall.${PRODUCT_VERSION}"
Packit df99a1
  Delete "$INSTDIR\uninst.exe"
Packit df99a1
  RMDir "$INSTDIR"
Packit df99a1
  ;; clean registry
Packit df99a1
  DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}"
Packit df99a1
  DeleteRegKey HKLM "${CLASSES}${FILEID}"
Packit df99a1
  DeleteRegKey HKLM "${CLASSES}Applications\djview.exe"
Packit df99a1
  DeleteRegValue HKLM "${CLASSES}.djvu\OpenWithProgIDs" "${FILEID}"
Packit df99a1
  DeleteRegValue HKLM "${CLASSES}.djv\OpenWithProgIDs" "${FILEID}"
Packit df99a1
;if no windjview key  - delete openwithprogid
Packit df99a1
  ClearErrors
Packit df99a1
  ReadRegStr $TMP_EXT HKCR "DjVu.Document" ""
Packit df99a1
  ${If} ${Errors}
Packit df99a1
  DeleteRegValue HKLM "${CLASSES}.djv\OpenWithProgids" "DjVu.Document"
Packit df99a1
  DeleteRegValue HKLM "${CLASSES}.djvu\OpenWithProgids" "DjVu.Document"
Packit df99a1
  ${EndIf}
Packit df99a1

Packit df99a1

Packit df99a1
  Push ".djvu"
Packit df99a1
  Call un.RegisterExt
Packit df99a1
  Push ".djv"
Packit df99a1
  Call un.RegisterExt
Packit df99a1
  ;; clean uninstall key
Packit df99a1
  DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
Packit df99a1
;  SetAutoClose true
Packit df99a1
  DetailPrint "-----------------------------------------------------------------------------------------------"
Packit df99a1
  DetailPrint "DjVuLibre installer script V.${NSI_VER} by Kravtsov Konstantin Ivanovich, Novokuznetsk, Russia."
Packit df99a1
  DetailPrint "-----------------------------------------------------------------------------------------------"
Packit df99a1
SectionEnd
Packit df99a1

Packit df99a1
!include "djvulibrelang-ru.nsh"
Packit df99a1
!include "djvulibrelang-en.nsh"
Packit df99a1

Packit df99a1
; Section descriptions set
Packit df99a1

Packit df99a1
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
Packit df99a1
!insertmacro MUI_DESCRIPTION_TEXT ${scAssoc} $(DESC_Assoc)
Packit df99a1
!insertmacro MUI_DESCRIPTION_TEXT ${scQuick} $(DESC_Quick)
Packit df99a1
!insertmacro MUI_DESCRIPTION_TEXT ${scDesk} $(DESC_Desk)
Packit df99a1
!insertmacro MUI_FUNCTION_DESCRIPTION_END