+Function EnterClientConfig
+ SectionGetFlags ${SecFileDaemon} $R0
+ IntOp $R0 $R0 & 1
+
+ SectionGetFlags ${SecStorageDaemon} $R1
+ IntOp $R1 $R1 & 1
+
+ SectionGetFlags ${SecDirectorDaemon} $R2
+ IntOp $R2 $R2 & 1
+
+ ${If} $R0 = 0
+ ${OrIf} $R1 = 1
+ ${OrIf} $R2 = 1
+ Abort
+ ${EndIf}
+
+ !insertmacro MUI_HEADER_TEXT "$(TITLE_ClientConfig)" "$(SUBTITLE_ClientConfig)"
+ !insertmacro MUI_INSTALLOPTIONS_INITDIALOG "ClientConfig.ini"
+ Pop $HDLG ;HWND of dialog
+
+ ; Initialize Controls
+ ; Client Name
+ !insertmacro MUI_INSTALLOPTIONS_READ $HCTL "ClientConfig.ini" "Field 3" "HWND"
+ SendMessage $HCTL ${EM_LIMITTEXT} 30 0
+
+ ; Client Port Number
+ !insertmacro MUI_INSTALLOPTIONS_READ $HCTL "ClientConfig.ini" "Field 6" "HWND"
+ SendMessage $HCTL ${EM_LIMITTEXT} 5 0
+ SendMessage $HCTL ${WM_SETTEXT} 0 "STR:9102"
+
+ ; Max Jobs
+ !insertmacro MUI_INSTALLOPTIONS_READ $HCTL "ClientConfig.ini" "Field 8" "HWND"
+ SendMessage $HCTL ${EM_LIMITTEXT} 2 0
+ SendMessage $HCTL ${WM_SETTEXT} 0 "STR:20"
+
+ ; Director Name
+ !insertmacro MUI_INSTALLOPTIONS_READ $HCTL "ClientConfig.ini" "Field 11" "HWND"
+ SendMessage $HCTL ${EM_LIMITTEXT} 30 0
+
+ ; Director Password
+ !insertmacro MUI_INSTALLOPTIONS_READ $HCTL "ClientConfig.ini" "Field 14" "HWND"
+ SendMessage $HCTL ${EM_LIMITTEXT} 60 0
+
+ ; Monitor Name
+ !insertmacro MUI_INSTALLOPTIONS_READ $HCTL "ClientConfig.ini" "Field 17" "HWND"
+ SendMessage $HCTL ${EM_LIMITTEXT} 30 0
+
+ ; Monitor Password
+ !insertmacro MUI_INSTALLOPTIONS_READ $HCTL "ClientConfig.ini" "Field 20" "HWND"
+ SendMessage $HCTL ${EM_LIMITTEXT} 60 0
+
+ !insertmacro MUI_INSTALLOPTIONS_SHOW
+
+ ;
+ ; Process results
+ ;
+ ; Client Name
+ !insertmacro MUI_INSTALLOPTIONS_READ $ConfigClientName "ClientConfig.ini" "Field 3" "State"
+ ; Client Port Number
+ !insertmacro MUI_INSTALLOPTIONS_READ $ConfigClientPort "ClientConfig.ini" "Field 6" "State"
+ ; Max Jobs
+ !insertmacro MUI_INSTALLOPTIONS_READ $ConfigMaxJobs "ClientConfig.ini" "Field 8" "State"
+
+ ; Director Name
+ !insertmacro MUI_INSTALLOPTIONS_READ $ConfigDirectorName "ClientConfig.ini" "Field 11" "State"
+ ; Director Password
+ !insertmacro MUI_INSTALLOPTIONS_READ $ConfigDirectorPW "ClientConfig.ini" "Field 14" "State"
+
+ ; Monitor Name
+ !insertmacro MUI_INSTALLOPTIONS_READ $ConfigMonitorName "ClientConfig.ini" "Field 17" "State"
+ ; Monitor Password
+ !insertmacro MUI_INSTALLOPTIONS_READ $ConfigMonitorPW "ClientConfig.ini" "Field 20" "State"
+FunctionEnd
+
+Function LeaveClientConfig
+ ; Client Port Number
+ !insertmacro MUI_INSTALLOPTIONS_READ $R0 "ClientConfig.ini" "Field 6" "State"
+ ${If} $R0 < 1024
+ ${OrIf} $R0 > 65535
+ MessageBox MB_OK "Port must be between 1024 and 65535 inclusive."
+ Abort
+ ${EndIf}
+
+ ; Max Jobs
+ !insertmacro MUI_INSTALLOPTIONS_READ $R0 "ClientConfig.ini" "Field 8" "State"
+ ${If} $R0 < 1
+ ${OrIf} $R0 > 99
+ MessageBox MB_OK "Max Jobs must be between 1 and 99 inclusive."
+ Abort
+ ${EndIf}
+FunctionEnd
+
+Function EnterOptions
+ SectionGetFlags ${SecFileDaemon} $R0
+ IntOp $R0 $R0 & 1
+
+ SectionGetFlags ${SecStorageDaemon} $R1
+ IntOp $R1 $R1 & 1
+
+ SectionGetFlags ${SecDirectorDaemon} $R2
+ IntOp $R2 $R2 & 1
+
+ ${If} $R0 = 0
+ ${AndIf} $R1 = 0
+ ${AndIf} $R2 = 0
+ Abort
+ ${EndIf}
+
+ FileOpen $R3 "$PLUGINSDIR\options.ini" w
+
+ StrCpy $R4 1 ; Field Number
+ StrCpy $R5 0 ; Top
+
+ ${If} $R0 = 1
+ IntOp $R6 $R5 + 34
+
+ FileWrite $R3 '[Field $R4]$\r$\n'
+ FileWrite $R3 'Type="GroupBox"$\r$\nText="Client"$\r$\nLeft=0$\r$\nTop=$R5$\r$\nRight=300$\r$\nBottom=$R6$\r$\n'
+
+ IntOp $R4 $R4 + 1
+ IntOp $R5 $R5 + 8
+ IntOp $R6 $R5 + 12
+
+ FileWrite $R3 '[Field $R4]$\r$\nType="Checkbox"$\r$\nState=$OptService$\r$\nText="Install as service"$\r$\nLeft=6$\r$\nTop=$R5$\r$\nRight=280$\r$\nBottom=$R6$\r$\n'
+
+ IntOp $R4 $R4 + 1
+ StrCpy $R5 $R6
+ IntOp $R6 $R5 + 12
+
+ FileWrite $R3 '[Field $R4]$\r$\nType="Checkbox"$\r$\nState=$OptStart$\r$\nText="Start after install"$\r$\nLeft=6$\r$\nTop=$R5$\r$\nRight=280$\r$\nBottom=$R6$\r$\n'
+
+ IntOp $R4 $R4 + 1
+ IntOp $R5 $R6 + 8
+ ${Endif}
+
+ ${If} $R1 = 1
+ IntOp $R6 $R5 + 34
+
+ FileWrite $R3 '[Field $R4]$\r$\n'
+ FileWrite $R3 'Type="GroupBox"$\r$\nText="Storage"$\r$\nLeft=0$\r$\nTop=$R5$\r$\nRight=300$\r$\nBottom=$R6$\r$\n'
+
+ IntOp $R4 $R4 + 1
+ IntOp $R5 $R5 + 8
+ IntOp $R6 $R5 + 12
+
+ FileWrite $R3 '[Field $R4]$\r$\nType="Checkbox"$\r$\nState=$OptService$\r$\nText="Install as service"$\r$\nLeft=6$\r$\nTop=$R5$\r$\nRight=280$\r$\nBottom=$R6$\r$\n'
+
+ IntOp $R4 $R4 + 1
+ StrCpy $R5 $R6
+ IntOp $R6 $R5 + 12
+
+ FileWrite $R3 '[Field $R4]$\r$\nType="Checkbox"$\r$\nState=$OptStart$\r$\nText="Start after install"$\r$\nLeft=6$\r$\nTop=$R5$\r$\nRight=280$\r$\nBottom=$R6$\r$\n'
+
+ IntOp $R4 $R4 + 1
+ IntOp $R5 $R6 + 8
+ ${Endif}
+
+ ${If} $R2 = 1
+ IntOp $R6 $R5 + 46
+
+ FileWrite $R3 '[Field $R4]$\r$\n'
+ FileWrite $R3 'Type="GroupBox"$\r$\nText="Director"$\r$\nLeft=0$\r$\nTop=$R5$\r$\nRight=300$\r$\nBottom=$R6$\r$\n'
+
+ IntOp $R4 $R4 + 1
+ IntOp $R5 $R5 + 8
+ IntOp $R6 $R5 + 12
+
+ FileWrite $R3 '[Field $R4]$\r$\nType="Checkbox"$\r$\nState=$OptService$\r$\nText="Install as service"$\r$\nLeft=6$\r$\nTop=$R5$\r$\nRight=280$\r$\nBottom=$R6$\r$\n'
+
+ IntOp $R4 $R4 + 1
+ StrCpy $R5 $R6
+ IntOp $R6 $R5 + 12
+
+ FileWrite $R3 '[Field $R4]$\r$\nType="Checkbox"$\r$\nState=$OptStart$\r$\nText="Start after install"$\r$\nLeft=6$\r$\nTop=$R5$\r$\nRight=280$\r$\nBottom=$R6$\r$\n'
+
+ IntOp $R4 $R4 + 1
+ IntOp $R5 $R6 + 2
+ IntOp $R6 $R5 + 8
+
+ FileWrite $R3 '[Field $R4]$\r$\nType="Label"$\r$\nText="Database:"$\r$\nLeft=6$\r$\nTop=$R5$\r$\nRight=46$\r$\nBottom=$R6$\r$\n'
+
+ IntOp $R4 $R4 + 1
+ IntOp $R5 $R5 - 2
+ IntOp $R6 $R5 + 12
+
+ FileWrite $R3 '[Field $R4]$\r$\nType="RadioButton"$\r$\nState=1$\r$\nText="MySQL"$\r$\nFlags="GROUP"$\r$\nLeft=46$\r$\nTop=$R5$\r$\nRight=86$\r$\nBottom=$R6$\r$\n'
+
+ IntOp $R4 $R4 + 1
+ IntOp $R6 $R5 + 12
+
+ FileWrite $R3 '[Field $R4]$\r$\nType="RadioButton"$\r$\nState=0$\r$\nText="PostgreSQL"$\r$\nFlags="NOTABSTOP"$\r$\nLeft=86$\r$\nTop=$R5$\r$\nRight=142$\r$\nBottom=$R6$\r$\n'
+
+ IntOp $R4 $R4 + 1
+ IntOp $R6 $R5 + 12
+
+ FileWrite $R3 '[Field $R4]$\r$\nType="RadioButton"$\r$\nState=0$\r$\nText="Builtin"$\r$\nFlags="NOTABSTOP"$\r$\nLeft=142$\r$\nTop=$R5$\r$\nRight=182$\r$\nBottom=$R6$\r$\n'
+
+ IntOp $R4 $R4 + 1
+ IntOp $R5 $R6 + 8
+ ${Endif}
+
+ IntOp $R4 $R4 - 1
+
+ FileWrite $R3 "[Settings]$\r$\nNumFields=$R4$\r$\n"
+
+ FileClose $R3
+
+ !insertmacro MUI_HEADER_TEXT "$(TITLE_Options)" "$(SUBTITLE_Options)"
+ !insertmacro MUI_INSTALLOPTIONS_DISPLAY "Options.ini"
+
+ ;
+ ; Process results
+ ;
+ StrCpy $R4 2
+
+ ${If} $R0 = 1
+ ; Client
+ !insertmacro MUI_INSTALLOPTIONS_READ $OptionsClientService "Options.ini" "Field $R4" "State"
+ IntOp $R4 $R4 + 1
+ !insertmacro MUI_INSTALLOPTIONS_READ $OptionsClientStart "Options.ini" "Field $R4" "State"
+ IntOp $R4 $R4 + 2
+ ${EndIf}
+
+ ${If} $R0 = 1
+ ; Client
+ !insertmacro MUI_INSTALLOPTIONS_READ $OptionsStorageService "Options.ini" "Field $R4" "State"
+ IntOp $R4 $R4 + 1
+ !insertmacro MUI_INSTALLOPTIONS_READ $OptionsStorageStart "Options.ini" "Field $R4" "State"
+ IntOp $R4 $R4 + 2
+ ${EndIf}
+
+ ${If} $R0 = 1
+ ; Client
+ !insertmacro MUI_INSTALLOPTIONS_READ $OptionsDirectorService "Options.ini" "Field $R4" "State"
+ IntOp $R4 $R4 + 1
+ !insertmacro MUI_INSTALLOPTIONS_READ $OptionsDirectorStart "Options.ini" "Field $R4" "State"
+ IntOp $R4 $R4 + 2
+ !insertmacro MUI_INSTALLOPTIONS_READ $R3 "Options.ini" "Field $R4" "State"
+ ${If} $R3 = 1
+ StrCpy $OptionsDirectorDB 1
+ ${Else}
+ IntOp $R4 $R4 + 1
+ !insertmacro MUI_INSTALLOPTIONS_READ $R3 "Options.ini" "Field $R4" "State"
+ ${If} $R3 = 1
+ StrCpy $OptionsDirectorDB 2
+ ${Else}
+ StrCpy $OptionsDirectorDB 3
+ ${Endif}
+ ${Endif}
+ ${EndIf}
+FunctionEnd
+
+;
+; $0 - Service Name (ie Bacula-FD)
+; $1 - Service Description (ie Bacula File Daemon)
+; $2 - Install as Service
+; $3 - Start Service now
+;
+Function InstallDaemon
+ Call CopyDependencies
+
+ IfFileExists "$APPDATA\Bacula\$0.conf" 0 +3
+ ExecWait '"$INSTDIR\bin\$0.exe" /kill' ; Shutdown any bacula that could be running
+ Sleep 3000 ; give it some time to shutdown
+
+ WriteRegDWORD HKLM "Software\Bacula" "Service_$0" $2
+
+ ${If} $2 = 1
+ ExecWait '"$INSTDIR\bin\$0.exe" /install'
+
+ ${If} $OsIsNT <> 1
+ File Start.bat
+ File Stop.bat
+ ${EndIf}
+
+ ; Start the service? (default skipped if silent, use /start to force starting)
+
+ ${If} $3 = 1
+ ${If} $OsIsNT = 1
+ Exec 'net start bacula'
+ Sleep 3000
+ ${Else}
+ Exec '"$INSTDIR\bin\$0.exe" -c "$APPDATA\Bacula\$0.conf"'
+ ${EndIf}
+ ${EndIf}
+ ${Else}
+ CreateShortCut "$SMPROGRAMS\Bacula\Start $1.lnk" "$INSTDIR\bin\$0.exe" '-c "$APPDATA\Bacula\$0.conf"' "$INSTDIR\bin\$0.exe" 0
+ ${EndIf}
+FunctionEnd