aboutsummaryrefslogtreecommitdiff
path: root/src/win32/ejabberd.nsi
diff options
context:
space:
mode:
Diffstat (limited to 'src/win32/ejabberd.nsi')
-rw-r--r--src/win32/ejabberd.nsi770
1 files changed, 0 insertions, 770 deletions
diff --git a/src/win32/ejabberd.nsi b/src/win32/ejabberd.nsi
deleted file mode 100644
index 26fdb0618..000000000
--- a/src/win32/ejabberd.nsi
+++ /dev/null
@@ -1,770 +0,0 @@
-; NSIS Modern User Interface
-; Ejabberd installation script
-
-;--------------------------------
-;Include Modern UI
-
- !include "MUI.nsh"
- !include "ejabberd.nsh" ; All release specific parameters come from this
-
-;--------------------------------
-;General
-
- ;Name and file
- !define PRODUCT "Ejabberd"
- Name ${PRODUCT}
- OutFile "${OUTFILEDIR}\${PRODUCT}-${VERSION}.exe"
- ShowInstDetails show
- ShowUninstDetails show
-
- !define MUI_ICON "ejabberd.ico"
- !define MUI_UNICON "ejabberd.ico"
- !define MUI_HEADERIMAGE
- !define MUI_HEADERIMAGE_BITMAP "ejabberd_header.bmp"
- !define MUI_WELCOMEFINISHPAGE_BITMAP "ejabberd_intro.bmp"
-
-
-;--------------------------------
-;Configuration
-
- SetCompressor lzma
-
-;--------------------------------
-;Reserve Files
-
- ReserveFile "ejabberd.ico"
- ReserveFile "ejabberd.ico"
- ReserveFile "ejabberd_header.bmp"
- ReserveFile "ejabberd_intro.bmp"
- !ifdef HACKED_INSTALLOPTIONS
- ReserveFile "CheckUserH.ini"
- ReserveFile "CheckReqs1H.ini"
- !else
- ReserveFile "CheckUser.ini"
- ReserveFile "CheckReqs1.ini"
- !endif
- ReserveFile "CheckReqs.ini"
- ReserveFile "CheckService.ini"
- !insertmacro MUI_RESERVEFILE_INSTALLOPTIONS
-
-;--------------------------------
-;Variables
-
- Var MUI_TEMP
- Var STARTMENU_FOLDER
- Var ADMIN
- Var ENABLE_SERVICE
- Var ERLANG_PATH
- Var ERLANG_VERSION
- Var REQUIRED_ERLANG_VERSION
- Var OPENSSL_PATH
- Var OPENSSL_VERSION
- Var REQUIRED_OPENSSL_VERSION
- Var ERLSRV
-
-;----------------------------------------------------------
-;.onInit uses UserInfo plugin, so it's as high as possible
-
-Function .onInit
-
- StrCpy $REQUIRED_ERLANG_VERSION "5.4.9"
- StrCpy $REQUIRED_OPENSSL_VERSION "0.9.7c"
-
- ;Default installation folder
- StrCpy $INSTDIR "$PROGRAMFILES\${PRODUCT}"
-
- ;Get installation folder from registry if available
- ClearErrors
- ReadRegStr $0 HKLM "SOFTWARE\${PRODUCT}" ""
- IfErrors 0 copydir
- ReadRegStr $0 HKCU "SOFTWARE\${PRODUCT}" ""
- IfErrors skipdir
- copydir:
- StrCpy $INSTDIR "$0"
-
- skipdir:
- ;Extract InstallOptions INI files
- !ifdef HACKED_INSTALLOPTIONS
- !insertmacro MUI_INSTALLOPTIONS_EXTRACT "CheckUserH.ini"
- !insertmacro MUI_INSTALLOPTIONS_EXTRACT "CheckReqs1H.ini"
- !else
- !insertmacro MUI_INSTALLOPTIONS_EXTRACT "CheckUser.ini"
- !insertmacro MUI_INSTALLOPTIONS_EXTRACT "CheckReqs1.ini"
- !endif
- !insertmacro MUI_INSTALLOPTIONS_EXTRACT "CheckReqs.ini"
- !insertmacro MUI_INSTALLOPTIONS_EXTRACT "CheckService.ini"
-
- ClearErrors
- UserInfo::GetName
- IfErrors admin
- Pop $0
- UserInfo::GetAccountType
- Pop $1
- StrCmp $1 "Admin" admin user
-
- admin:
- StrCpy $ADMIN 1
- Goto skip
-
- user:
- StrCpy $ADMIN 0
-
- skip:
-
-FunctionEnd
-
-;--------------------------------
-;Interface Settings
-
- !define MUI_ABORTWARNING
-
-;--------------------------------
-;Installer/Uninstaller pages
-
- !insertmacro MUI_PAGE_WELCOME
- !insertmacro MUI_PAGE_LICENSE "..\..\COPYING"
- Page custom CheckReqs LeaveCheckReqs
- Page custom CheckReqs1 LeaveCheckReqs1
- Page custom CheckUser LeaveCheckUser
- Page custom CheckService LeaveCheckService
- ;!insertmacro MUI_PAGE_COMPONENTS
- !insertmacro MUI_PAGE_DIRECTORY
-
- !insertmacro MUI_PAGE_STARTMENU ${PRODUCT} $STARTMENU_FOLDER
-
- !insertmacro MUI_PAGE_INSTFILES
-
- !insertmacro MUI_UNPAGE_WELCOME
- !insertmacro MUI_UNPAGE_CONFIRM
- !insertmacro MUI_UNPAGE_INSTFILES
-
-;--------------------------------
-;Languages
-
- !insertmacro MUI_LANGUAGE "English"
-
-;--------------------------------
-;Language Strings
-
-;Description
-
- LangString DESC_SecEjabberd ${LANG_ENGLISH} "Erlang jabber server."
-
-;--------------------------------
-;Installer Sections
-
-Section "Ejabberd" SecEjabberd
-SectionIn 1 RO
-
- SetOutPath "$INSTDIR"
- File /r "${TESTDIR}\doc"
- File /r "${TESTDIR}\ebin"
- File /r "${TESTDIR}\msgs"
- File /r "${TESTDIR}\win32"
- File "${TESTDIR}\*.dll"
- File "${TESTDIR}\inetrc"
- File /oname=ejabberd.cfg.example "${TESTDIR}\ejabberd.cfg"
- SetOverwrite off
- File "${TESTDIR}\ejabberd.cfg"
- SetOverwrite on
- ;File /r "${TESTDIR}\src"
- CreateDirectory "$INSTDIR\log"
-
-;The startmenu stuff
- !insertmacro MUI_STARTMENU_WRITE_BEGIN ${PRODUCT}
-
- ;Create shortcuts
- StrCpy $0 "$SMPROGRAMS\$STARTMENU_FOLDER"
- CreateDirectory "$0"
- CreateShortCut "$0\Start Ejabberd.lnk" "$ERLANG_PATH\bin\werl.exe" \
- '-sname ejabberd -pa ebin \
- -env EJABBERD_LOG_PATH log/ejabberd.log \
- -s ejabberd -kernel inetrc \"./inetrc\" -mnesia dir \"spool\" \
- -sasl sasl_error_logger {file,\"log/erlang.log\"}' \
- $INSTDIR\win32\ejabberd.ico
- CreateShortCut "$0\Edit Config.lnk" "%SystemRoot%\system32\notepad.exe" \
- "$INSTDIR\ejabberd.cfg"
- CreateShortCut "$0\Read Docs.lnk" "$INSTDIR\doc\guide.html"
- CreateShortCut "$0\Uninstall.lnk" "$INSTDIR\Uninstall.exe"
-
- !insertmacro MUI_STARTMENU_WRITE_END
-
-;Create Windows service
- StrCmp $ADMIN 1 0 skipservice
-
- StrCpy $ERLSRV ""
- Push $ERLANG_PATH
- Push erlsrv.exe
- GetFunctionAddress $0 FFCallback
- Push $0
- Call FindFiles
-
- StrCmp $ERLSRV "" skipservice
-
- nsExec::Exec '"$ERLSRV" list ejabberd'
- Pop $0
- StrCmp $0 "error" skipservice
- StrCmp $0 "0" 0 installsrv
-
- nsExec::ExecToLog '"$ERLSRV" remove ejabberd'
- Pop $0
-
- installsrv:
- nsExec::ExecToLog '"$ERLSRV" add ejabberd -stopaction "init:stop()." \
- -onfail restart -workdir "$INSTDIR" \
- -args "-s ejabberd -pa ebin \
- -kernel inetrc \\\"./inetrc\\\" \
- -env EJABBERD_LOG_PATH log/ejabberd.log \
- -sasl sasl_error_logger {file,\\\"log/erlang.log\\\"} \
- -mnesia dir \\\"spool\\\"" -d'
- Pop $0
-
- StrCmp $ENABLE_SERVICE 0 0 skipservice
- nsExec::ExecToLog '"$ERLSRV" disable ejabberd'
- Pop $0
-
- skipservice:
-
- ;Create uninstaller
- WriteUninstaller "$INSTDIR\Uninstall.exe"
-
- StrCpy $1 "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT}"
- StrCmp $ADMIN 1 admin2
-
- WriteRegStr HKCU "Software\${PRODUCT}" "" "$INSTDIR"
- WriteRegStr HKCU "$1" "DisplayName" "${PRODUCT} ${VERSION}"
- WriteRegStr HKCU "$1" "UninstallString" "$INSTDIR\Uninstall.exe"
- WriteRegDWORD HKCU "$1" "NoModify" 1
- WriteRegDWORD HKCU "$1" "NoRepair" 1
- Goto done2
-
- admin2:
- WriteRegStr HKLM "Software\${PRODUCT}" "" "$INSTDIR"
- WriteRegStr HKLM "Software\${PRODUCT}" "Erlsrv" "$ERLSRV"
- WriteRegStr HKLM "$1" "DisplayName" "${PRODUCT} ${VERSION}"
- WriteRegStr HKLM "$1" "UninstallString" "$INSTDIR\Uninstall.exe"
- WriteRegDWORD HKLM "$1" "NoModify" 1
- WriteRegDWORD HKLM "$1" "NoRepair" 1
-
- done2:
-
-SectionEnd ; SecEjabberd
-
-Function FFCallback
-
- Exch $0
- StrCpy $ERLSRV $0
- Pop $0
- Push "stop"
-
-FunctionEnd
-
-;--------------------------------
-;Descriptions
-
- !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
- !insertmacro MUI_DESCRIPTION_TEXT ${SecEjabberd} $(DESC_SecEjabberd)
- !insertmacro MUI_FUNCTION_DESCRIPTION_END
-
-;--------------------------------
-;Uninstaller Section
-
-Section "Uninstall"
-
- ClearErrors
- UserInfo::GetName
- IfErrors admin
- Pop $0
- UserInfo::GetAccountType
- Pop $1
- StrCmp $1 "Admin" admin
-
- StrCpy $ADMIN 0
- Goto skipservice
-
- admin:
- StrCpy $ADMIN 1
- ReadRegStr $ERLSRV HKLM "Software\${PRODUCT}" "Erlsrv"
-
- nsExec::Exec '"$ERLSRV" list ejabberd'
- Pop $0
- StrCmp $0 "error" skipservice
- StrCmp $0 "0" 0 skipservice
-
- nsExec::ExecToLog '"$ERLSRV" remove ejabberd'
- Pop $0
-
- skipservice:
- RMDir /r "$INSTDIR\doc"
- RMDir /r "$INSTDIR\ebin"
- RMDir /r "$INSTDIR\msgs"
- RMDir /r "$INSTDIR\win32"
- ;RMDir /r "$INSTDIR\src"
- RMDir /r "$INSTDIR\log"
- Delete "$INSTDIR\*.dll"
- Delete "$INSTDIR\inetrc"
- Delete "$INSTDIR\ejabberd.cfg.example"
- Delete "$INSTDIR\Uninstall.exe"
- RMDir "$INSTDIR"
-
- !insertmacro MUI_STARTMENU_GETFOLDER ${PRODUCT} $MUI_TEMP
-
- Delete "$SMPROGRAMS\$MUI_TEMP\Start Ejabberd.lnk"
- Delete "$SMPROGRAMS\$MUI_TEMP\Edit Config.lnk"
- Delete "$SMPROGRAMS\$MUI_TEMP\Read Docs.lnk"
- Delete "$SMPROGRAMS\$MUI_TEMP\Uninstall.lnk"
-
- ;Delete empty start menu parent diretories
- StrCpy $MUI_TEMP "$SMPROGRAMS\$MUI_TEMP"
-
- startMenuDeleteLoop:
- RMDir $MUI_TEMP
- GetFullPathName $MUI_TEMP "$MUI_TEMP\.."
-
- IfErrors startMenuDeleteLoopDone
-
- StrCmp $MUI_TEMP $SMPROGRAMS startMenuDeleteLoopDone startMenuDeleteLoop
- startMenuDeleteLoopDone:
-
- StrCpy $1 "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT}"
- StrCmp $ADMIN 1 admin1
- DeleteRegKey HKCU "Software\${PRODUCT}"
- DeleteRegKey HKCU $1
- Goto done
- admin1:
- DeleteRegKey HKLM "Software\${PRODUCT}"
- DeleteRegKey HKLM $1
-
- done:
-
-SectionEnd
-
-LangString TEXT_CU_TITLE ${LANG_ENGLISH} "Checking User Privileges"
-LangString TEXT_CU_SUBTITLE ${LANG_ENGLISH} "Checking user privileged required to install Ejabberd."
-
-Function CheckUser
-
- StrCmp $ADMIN 1 0 showpage
- Abort
-
- showpage:
- !insertmacro MUI_HEADER_TEXT $(TEXT_CU_TITLE) $(TEXT_CU_SUBTITLE)
-
- !ifdef HACKED_INSTALLOPTIONS
- !insertmacro MUI_INSTALLOPTIONS_INITDIALOG "CheckUserH.ini"
- !insertmacro MUI_INSTALLOPTIONS_READ $0 "CheckUserH.ini" "Field 2" "State"
- GetDlgItem $1 $HWNDPARENT 1
- EnableWindow $1 $0
- !else
- !insertmacro MUI_INSTALLOPTIONS_INITDIALOG "CheckUser.ini"
- !endif
-
- !insertmacro MUI_INSTALLOPTIONS_SHOW
-
-FunctionEnd
-
-Function LeaveCheckUser
-
- !ifdef HACKED_INSTALLOPTIONS
- !insertmacro MUI_INSTALLOPTIONS_READ $0 "CheckUserH.ini" "Settings" "State"
- StrCmp $0 0 validate ;Next button?
- StrCmp $0 2 checkbox ;checkbox?
- Abort ;Return to the page
-
- checkbox:
- !insertmacro MUI_INSTALLOPTIONS_READ $0 "CheckUserH.ini" "Field 2" "State"
- GetDlgItem $1 $HWNDPARENT 1
- EnableWindow $1 $0
- Abort
-
- validate:
- !endif
-
-FunctionEnd
-
-LangString TEXT_CU_TITLE ${LANG_ENGLISH} "Configuring Ejabberd Service"
-LangString TEXT_CU_SUBTITLE ${LANG_ENGLISH} "Configuring Ejabberd Service."
-
-Function CheckService
-
- StrCmp $ADMIN 0 0 showpage
- Abort
-
- showpage:
- !insertmacro MUI_HEADER_TEXT $(TEXT_CU_TITLE) $(TEXT_CU_SUBTITLE)
-
- !insertmacro MUI_INSTALLOPTIONS_INITDIALOG "CheckService.ini"
-
- !insertmacro MUI_INSTALLOPTIONS_SHOW
-
-FunctionEnd
-
-Function LeaveCheckService
-
- !insertmacro MUI_INSTALLOPTIONS_READ $0 "CheckService.ini" "Field 2" "State"
- StrCmp $0 0 0 autostart
- StrCpy $ENABLE_SERVICE 0
- Goto endfun
-
- autostart:
- StrCpy $ENABLE_SERVICE 1
-
- endfun:
-
-FunctionEnd
-
-LangString TEXT_CR_TITLE ${LANG_ENGLISH} "Unsatisfied Requirements"
-LangString TEXT_CR_SUBTITLE ${LANG_ENGLISH} "Unsatisfied Ejabberd requirements found."
-
-Function CheckReqs
-
- Push "HKLM"
- Call FindErlang
- Pop $ERLANG_PATH
- Pop $ERLANG_VERSION
- StrCmp $ERLANG_PATH "" 0 abort
- Push "HKCU"
- Call FindErlang
- Pop $ERLANG_PATH
- Pop $ERLANG_VERSION
- StrCmp $ERLANG_PATH "" 0 abort
-
- !insertmacro MUI_HEADER_TEXT $(TEXT_CR_TITLE) $(TEXT_CR_SUBTITLE)
-
- !insertmacro MUI_INSTALLOPTIONS_INITDIALOG "CheckReqs.ini"
- GetDlgItem $R0 $HWNDPARENT 1
- EnableWindow $R0 0
-
-
- !insertmacro MUI_INSTALLOPTIONS_SHOW
-
- abort:
- Abort
-
-FunctionEnd
-
-Function LeaveCheckReqs
-
- Abort
-
-FunctionEnd
-
-Function CheckReqs1
-
- Push "HKLM"
- Call FindOpenSSL
- Pop $OPENSSL_PATH
- Pop $OPENSSL_VERSION
- StrCmp $OPENSSL_PATH "" 0 abort
- Push "HKCU"
- Call FindOpenSSL
- Pop $OPENSSL_PATH
- Pop $OPENSSL_VERSION
- StrCmp $OPENSSL_PATH "" 0 abort
-
- !insertmacro MUI_HEADER_TEXT $(TEXT_CR_TITLE) $(TEXT_CR_SUBTITLE)
-
- !ifdef HACKED_INSTALLOPTIONS
- !insertmacro MUI_INSTALLOPTIONS_INITDIALOG "CheckReqs1H.ini"
- !insertmacro MUI_INSTALLOPTIONS_READ $0 "CheckReqs1H.ini" "Field 3" "State"
- GetDlgItem $1 $HWNDPARENT 1
- EnableWindow $1 $0
- !else
- !insertmacro MUI_INSTALLOPTIONS_INITDIALOG "CheckReqs1.ini"
- !endif
-
- !insertmacro MUI_INSTALLOPTIONS_SHOW
-
- abort:
- Abort
-
-FunctionEnd
-
-Function LeaveCheckReqs1
-
- !ifdef HACKED_INSTALLOPTIONS
- !insertmacro MUI_INSTALLOPTIONS_READ $0 "CheckReqs1H.ini" "Settings" "State"
- StrCmp $0 0 validate ;Next button?
- StrCmp $0 3 checkbox ;checkbox?
- Abort ;Return to the page
-
- checkbox:
- !insertmacro MUI_INSTALLOPTIONS_READ $0 "CheckReqs1H.ini" "Field 3" "State"
- GetDlgItem $1 $HWNDPARENT 1
- EnableWindow $1 $0
- Abort
-
- validate:
- !endif
-
-FunctionEnd
-
-Function FindErlang
-
- Exch $R0
- Push $R1
- Push $R2
- Push $R3
- Push $R4
- Push $R5
-
- StrCpy $R1 0
- StrCpy $R2 "SOFTWARE\Ericsson\Erlang"
-
- loop:
- StrCmp $R0 HKLM h1
- EnumRegKey $R3 HKCU $R2 $R1
- Goto l1
- h1:
- EnumRegKey $R3 HKLM $R2 $R1
- l1:
- IntOp $R1 $R1 + 1
- StrCmp $R3 "" endloop
- ClearErrors
- StrCmp $R0 HKLM h2
- ReadRegStr $R4 HKCU "$R2\$R3" ""
- Goto l2
- h2:
- ReadRegStr $R4 HKLM "$R2\$R3" ""
- l2:
- IfFileExists "$R4\bin\erl.exe" 0 loop
- Push $REQUIRED_ERLANG_VERSION
- Push $R3
- Call CompareVersions
- Pop $R5
- StrCmp $R5 1 get
- Goto loop
-
- endloop:
- StrCpy $R4 ""
-
- get:
- StrCpy $R0 $R4
- StrCpy $R1 $R3
-
- Pop $R5
- Pop $R4
- Pop $R3
- Pop $R2
- Exch $R1
- Exch
- Exch $R0
-
-FunctionEnd
-
-Function FindOpenSSL
-
- Exch $R0
- Push $R1
- Push $R2
- Push $R3
- Push $R4
- Push $R5
-
- StrCpy $R1 0
- StrCpy $R2 "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenSSL_is1"
-
- StrCmp $R0 HKLM h1
- ReadRegStr $R3 HKCU "$R2" "DisplayName"
- ReadRegStr $R4 HKCU "$R2" "Inno Setup: App Path"
- Goto l1
- h1:
- ReadRegStr $R3 HKLM "$R2" "DisplayName"
- ReadRegStr $R4 HKLM "$R2" "Inno Setup: App Path"
- l1:
-
- IfFileExists "$R4\bin\openssl.exe" 0 notfound
- Goto get
- ; TODO check version
- ;Push $REQUIRED_OPENSSL_VERSION
- ;Push $R3
- ;Call CompareVersions
- ;Pop $R5
- ;StrCmp $R5 1 get
-
- notfound:
- StrCpy $R4 ""
-
- get:
- StrCpy $R0 $R4
- StrCpy $R1 $R3
-
- Pop $R5
- Pop $R4
- Pop $R3
- Pop $R2
- Exch $R1
- Exch
- Exch $R0
-
-FunctionEnd
-
-;----------------------------------------------------------------------
-; CompareVersions
-; input:
-; top of stack = existing version
-; top of stack-1 = needed version
-; output:
-; top of stack = 1 if current version => neded version, else 0
-; version is a string in format "xx.xx.xx.xx" (number of interger sections
-; can be different in needed and existing versions)
-
-Function CompareVersions
- ; stack: existing ver | needed ver
- Exch $R0
- Exch
- Exch $R1
- ; stack: $R1|$R0
-
- Push $R1
- Push $R0
- ; stack: e|n|$R1|$R0
-
- ClearErrors
- loop:
- IfErrors VersionNotFound
- Strcmp $R0 "" VersionTestEnd
-
- Call ParseVersion
- Pop $R0
- Exch
-
- Call ParseVersion
- Pop $R1
- Exch
-
- IntCmp $R1 $R0 +1 VersionOk VersionNotFound
- Pop $R0
- Push $R0
-
- goto loop
-
- VersionTestEnd:
- Pop $R0
- Pop $R1
- Push $R1
- Push $R0
- StrCmp $R0 $R1 VersionOk VersionNotFound
-
- VersionNotFound:
- StrCpy $R0 "0"
- Goto end
-
- VersionOk:
- StrCpy $R0 "1"
-end:
- ; stack: e|n|$R1|$R0
- Exch $R0
- Pop $R0
- Exch $R0
- ; stack: res|$R1|$R0
- Exch
- ; stack: $R1|res|$R0
- Pop $R1
- ; stack: res|$R0
- Exch
- Pop $R0
- ; stack: res
-FunctionEnd
-
-;-----------------------------------------------------------------------
-; ParseVersion
-; input:
-; top of stack = version string ("xx.xx.xx.xx")
-; output:
-; top of stack = first number in version ("xx")
-; top of stack-1 = rest of the version string ("xx.xx.xx")
-Function ParseVersion
- Exch $R1 ; version
- Push $R2
- Push $R3
-
- StrCpy $R2 1
- loop:
- StrCpy $R3 $R1 1 $R2
- StrCmp $R3 "." loopend
- StrLen $R3 $R1
- IntCmp $R3 $R2 loopend loopend
- IntOp $R2 $R2 + 1
- Goto loop
- loopend:
- Push $R1
- StrCpy $R1 $R1 $R2
- Exch $R1
-
- StrLen $R3 $R1
- IntOp $R3 $R3 - $R2
- IntOp $R2 $R2 + 1
- StrCpy $R1 $R1 $R3 $R2
-
- Push $R1
-
- Exch 2
- Pop $R3
-
- Exch 2
- Pop $R2
-
- Exch 2
- Pop $R1
-FunctionEnd
-
-Function FindFiles
-
- Exch $R5 # callback function
- Exch
- Exch $R4 # file name
- Exch 2
- Exch $R0 # directory
- Push $R1
- Push $R2
- Push $R3
- Push $R6
-
- Push $R0 # first dir to search
-
- StrCpy $R3 1
-
- nextDir:
- Pop $R0
- IntOp $R3 $R3 - 1
- ClearErrors
- FindFirst $R1 $R2 "$R0\*.*"
- nextFile:
- StrCmp $R2 "." gotoNextFile
- StrCmp $R2 ".." gotoNextFile
-
- StrCmp $R2 $R4 0 isDir
- Push "$R0\$R2"
- Call $R5
- Pop $R6
- StrCmp $R6 "stop" 0 isDir
- loop:
- StrCmp $R3 0 done
- Pop $R0
- IntOp $R3 $R3 - 1
- Goto loop
-
- isDir:
- IfFileExists "$R0\$R2\*.*" 0 gotoNextFile
- IntOp $R3 $R3 + 1
- Push "$R0\$R2"
-
- gotoNextFile:
- FindNext $R1 $R2
- IfErrors 0 nextFile
-
- done:
- FindClose $R1
- StrCmp $R3 0 0 nextDir
-
- Pop $R6
- Pop $R3
- Pop $R2
- Pop $R1
- Pop $R0
- Pop $R5
- Pop $R4
-
-FunctionEnd
-