diff --git a/etl-installer.nsi b/etl-installer.nsi deleted file mode 100755 index ff909c7..0000000 --- a/etl-installer.nsi +++ /dev/null @@ -1,294 +0,0 @@ -#################################################### -# Wolfenstein Enemy Territory - Legacy Project # -# Auto-generated by EclipseNSIS Script Wizard # -#################################################### - -Name "Wolfenstein ET: Legacy" - -# FIXME/TODO -# -# add etlded to windows menu (done/feedback) -# rename this "ET: L" in installer options to ET:Legacy V2.70 -# add +set fs_game legacy to etl and etlded (done/feedback) -# add option to set fs_hompath -# add options to complete install (missing genuine files) -# - do a search for installed W:ET and get the files from -# -- search by key -# -- search by user input path -# --- if install is found -# ---- add option to use key -# ---- copy mp_bin.pk3, pa0.pk3, pak1.pk3, pak2.pk3 to etmain -# -- ask to download and install genuine files -# --- run installer again -# --- worst case points to http://www.etlegacy.com/projects/etlegacy/wiki/Windows -# add omnibot files to installer options (default: true) - -RequestExecutionLevel admin #NOTE: You still need to check user rights with UserInfo! - -# General Symbol Definitions -!define REGKEY "SOFTWARE\$(^Name)" -!define VERSION "2.70 alpha (git ${__DATE__})" -!define COMPANY "ET:L Dev Team" -!define URL http://www.etlegacy.com -!define DL_URL http://mirror.etlegacy.com/installer - -# MUI Symbol Definitions -!define MUI_ICON wolfet.ico -!define MUI_FINISHPAGE_NOAUTOCLOSE -!define MUI_STARTMENUPAGE_REGISTRY_ROOT HKLM -!define MUI_STARTMENUPAGE_REGISTRY_KEY ${REGKEY} -!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME StartMenuGroup -!define MUI_STARTMENUPAGE_DEFAULTFOLDER "WolfET Legacy" -!define MUI_FINISHPAGE_SHOWREADME "" -!define MUI_FINISHPAGE_SHOWREADME_NOTCHECKED -!define MUI_FINISHPAGE_SHOWREADME_TEXT $(^CreateDesktopShortcut) -!define MUI_FINISHPAGE_SHOWREADME_FUNCTION finishpageaction -!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\win-uninstall.ico" -!define MUI_UNFINISHPAGE_NOAUTOCLOSE -!define MUI_LANGDLL_REGISTRY_ROOT HKLM -!define MUI_LANGDLL_REGISTRY_KEY ${REGKEY} -!define MUI_LANGDLL_REGISTRY_VALUENAME InstallerLanguage - -# Included files -!include Sections.nsh -!include MUI2.nsh - -# Reserved Files -!insertmacro MUI_RESERVEFILE_LANGDLL - -# Variables -Var StartMenuGroup -Var FileToDownload - -# Installer pages -!insertmacro MUI_PAGE_WELCOME -!insertmacro MUI_PAGE_LICENSE COPYING.txt -!insertmacro MUI_PAGE_COMPONENTS -!insertmacro MUI_PAGE_DIRECTORY -!insertmacro MUI_PAGE_STARTMENU Application $StartMenuGroup -!insertmacro MUI_PAGE_INSTFILES -!insertmacro MUI_PAGE_FINISH -!insertmacro MUI_UNPAGE_CONFIRM -!insertmacro MUI_UNPAGE_INSTFILES - -# Installer languages -!insertmacro MUI_LANGUAGE English -!insertmacro MUI_LANGUAGE Czech -!insertmacro MUI_LANGUAGE German -!insertmacro MUI_LANGUAGE Polish - -# Installer attributes -OutFile etlegacy-2.70-git-${__DATE__}-setup.exe -InstallDir "$PROGRAMFILES\WolfET Legacy" -CRCCheck on -XPStyle on -ShowInstDetails show -VIProductVersion 2.70.0.0 -VIAddVersionKey /LANG=${LANG_ENGLISH} ProductName "Wolfenstein Enemy Territory: Legacy" -VIAddVersionKey /LANG=${LANG_ENGLISH} ProductVersion "${VERSION}" -VIAddVersionKey /LANG=${LANG_ENGLISH} CompanyName "${COMPANY}" -VIAddVersionKey /LANG=${LANG_ENGLISH} CompanyWebsite "${URL}" -VIAddVersionKey /LANG=${LANG_ENGLISH} FileVersion "${VERSION}" -VIAddVersionKey /LANG=${LANG_ENGLISH} FileDescription "Wolfenstein Enemy Territory: Legacy - best multiplayer game ever." -VIAddVersionKey /LANG=${LANG_ENGLISH} LegalCopyright "GNU GENERAL PUBLIC LICENSE V3" -InstallDirRegKey HKLM "${REGKEY}" Path -ShowUninstDetails show - -# Installer sections -Section !ET:L MainProgram - SectionIn RO ;mark section as mandatory - SetOutPath $INSTDIR - SetOverwrite on - File etl.exe - File etlded.exe - File wolfet.ico - File libcurl.dll - ;File libfreetype-6.dll - File README-libjpeg-8.txt - File libjpeg-8.dll - File README-SDL.txt - File SDL.dll - SetOutPath $INSTDIR\etmain - File etmain\etl_server.cfg - File etmain\lmscycle.cfg - File etmain\objectivecycle.cfg - File etmain\campaigncycle.cfg - - SetOutPath $INSTDIR\legacy - File legacy\etl_bin.pk3 - File legacy\pak3.pk3 - File legacy\qagame_mp_x86.dll - - SetOutPath $DESKTOP - WriteRegStr HKLM "${REGKEY}\Components" ET:L 1 -SectionEnd - -# Distributing these files is illegal -# we have to find another way. -;Section "Download required datafiles" GameData -; StrCpy $FileToDownload "pak0.pk3" -; Call Download -; StrCpy $FileToDownload "pak1.pk3" -; Call Download -; StrCpy $FileToDownload "pak2.pk3" -; Call Download -; StrCpy $FileToDownload "mp_bin.pk3" -; Call Download -;SectionEnd - -Function Download - StrCpy $2 "$INSTDIR\etmain\$FileToDownload" - nsisdl::download /TIMEOUT=30000 ${DL_URL}/$FileToDownload $2 - Pop $R0 ;get the return value - StrCmp $R0 "success" +3 - MessageBox MB_OK "Download failed: $R0" - Quit - ;MessageBox MB_OK "Download complete: $R0" - Return -FunctionEnd - -Function finishpageaction - CreateShortcut "$DESKTOP\ET Legacy.lnk" "$INSTDIR\etl.exe" "+set fs_game legacy" "$INSTDIR\wolfet.ico" - CreateShortcut "$DESKTOP\ET Legacy dedicated.lnk" "$INSTDIR\etlded.exe" "+set fs_game legacy" "$INSTDIR\wolfet.ico" -FunctionEnd - -Section -post PostInstall - SetShellVarContext all - WriteRegStr HKLM "${REGKEY}" Path $INSTDIR - SetOutPath $INSTDIR - WriteUninstaller $INSTDIR\uninstall.exe - !insertmacro MUI_STARTMENU_WRITE_BEGIN Application - SetOutPath $SMPROGRAMS\$StartMenuGroup - ;CreateShortcut "$SMPROGRAMS\$StartMenuGroup\$(^UninstallLink).lnk" $INSTDIR\uninstall.exe - CreateShortcut "$SMPROGRAMS\$StartMenuGroup\ET Legacy.lnk" "$INSTDIR\etl.exe" "+set fs_game legacy" "$INSTDIR\wolfet.ico" - CreateShortcut "$SMPROGRAMS\$StartMenuGroup\ET Legacy dedicated.lnk" "$INSTDIR\etlded.exe" "+set fs_game legacy" "$INSTDIR\wolfet.ico" - - !insertmacro MUI_STARTMENU_WRITE_END - WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" DisplayName "$(^Name)" - WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" DisplayVersion "${VERSION}" - WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" Publisher "${COMPANY}" - WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" URLInfoAbout "${URL}" - WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" DisplayIcon $INSTDIR\uninstall.exe - WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" UninstallString $INSTDIR\uninstall.exe - WriteRegDWORD HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" NoModify 1 - WriteRegDWORD HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" NoRepair 1 -SectionEnd - -# Macro for selecting uninstaller sections -!macro SELECT_UNSECTION SECTION_NAME UNSECTION_ID - Push $R0 - ReadRegStr $R0 HKLM "${REGKEY}\Components" "${SECTION_NAME}" - StrCmp $R0 1 0 next${UNSECTION_ID} - !insertmacro SelectSection "${UNSECTION_ID}" - GoTo done${UNSECTION_ID} -next${UNSECTION_ID}: - !insertmacro UnselectSection "${UNSECTION_ID}" -done${UNSECTION_ID}: - Pop $R0 -!macroend - -# Uninstaller sections -Section /o -un.ET:L UNMainProgram - Delete /REBOOTOK "$DESKTOP\ET Legacy.lnk" - Delete /REBOOTOK "$DESKTOP\ET Legacy dedicated.lnk" - - #etmain - Delete /REBOOTOK $INSTDIR\etmain\etl_server.cfg - Delete /REBOOTOK $INSTDIR\etmain\lmscycle.cfg - Delete /REBOOTOK $INSTDIR\etmain\objectivecycle.cfg - Delete /REBOOTOK $INSTDIR\etmain\campaigncycle.cfg - RmDir /r /REBOOTOK $INSTDIR\etmain ; this deletes EVERYTHING recursively! Maybe a bad idea. - - #legacy - Delete /REBOOTOK $INSTDIR\legacy\pak3.pk3 - Delete /REBOOTOK $INSTDIR\legacy\etl_bin.pk3 - Delete /REBOOTOK $INSTDIR\legacy\qagame_mp_x86.dll - RmDir /r /REBOOTOK $INSTDIR\legacy ; this deletes EVERYTHING recursively! Maybe a bad idea. - - #root - Delete /REBOOTOK $INSTDIR\SDL.dll - Delete /REBOOTOK $INSTDIR\README-SDL.txt - Delete /REBOOTOK $INSTDIR\README-libjpeg-8.txt - Delete /REBOOTOK $INSTDIR\libjpeg-8.dll - ;Delete /REBOOTOK $INSTDIR\libfreetype-6.dll - Delete /REBOOTOK $INSTDIR\libcurl.dll - Delete /REBOOTOK $INSTDIR\etlded.exe - Delete /REBOOTOK $INSTDIR\etl.exe - Delete /REBOOTOK $INSTDIR\wolfet.ico - DeleteRegValue HKLM "${REGKEY}\Components" ET:L -SectionEnd - -Section -un.post UNPostInstall - SetShellVarContext all - Delete "$DESKTOP\ET Legacy.lnk" - DeleteRegKey HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" - ;Delete /REBOOTOK "$SMPROGRAMS\$StartMenuGroup\$(^UninstallLink).lnk" - Delete /REBOOTOK "$SMPROGRAMS\$StartMenuGroup\ET Legacy.lnk" - Delete /REBOOTOK "$SMPROGRAMS\$StartMenuGroup\ET Legacy dedicated.lnk" - RmDir /REBOOTOK "$SMPROGRAMS\$StartMenuGroup" - Delete /REBOOTOK $INSTDIR\uninstall.exe - DeleteRegValue HKLM "${REGKEY}" StartMenuGroup - DeleteRegValue HKLM "${REGKEY}" Path - DeleteRegKey /IfEmpty HKLM "${REGKEY}\Components" - DeleteRegKey /IfEmpty HKLM "${REGKEY}" - RmDir /REBOOTOK $INSTDIR - Push $R0 - StrCpy $R0 $StartMenuGroup 1 - StrCmp $R0 ">" no_smgroup -no_smgroup: - Pop $R0 -SectionEnd - -# Installer functions -Function .onInit - InitPluginsDir - !insertmacro MUI_LANGDLL_DISPLAY -FunctionEnd - -# Uninstaller functions -Function un.onInit - ReadRegStr $INSTDIR HKLM "${REGKEY}" Path - !insertmacro MUI_STARTMENU_GETFOLDER Application $StartMenuGroup - !insertmacro MUI_UNGETLANGUAGE - !insertmacro SELECT_UNSECTION ET:L ${UNMainProgram} -FunctionEnd - -# Section Descriptions -!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN - !insertmacro MUI_DESCRIPTION_TEXT ${MainProgram} $(MainProgram_DESC) -; !insertmacro MUI_DESCRIPTION_TEXT ${GameData} $(GameData_DESC) -!insertmacro MUI_FUNCTION_DESCRIPTION_END - -# Installer Language Strings - -# -# ENGLISH -# -LangString ^UninstallLink ${LANG_ENGLISH} "Uninstall $(^Name)" -LangString MainProgram_DESC ${LANG_ENGLISH} "Game binaries" -LangString GameData_DESC ${LANG_ENGLISH} "Download game datafiles required to play, i.e. pak0.pk3, pak1.pk3, pak2.pk3 and mp_bin.pk3. You will NOT be able to play without them." -LangString ^CreateDesktopShortcut ${LANG_ENGLISH} "Create Desktop Shortcut" - -# -# CZECH -# -LangString ^UninstallLink ${LANG_CZECH} "Odinstaluj $(^Name)" -LangString MainProgram_DESC ${LANG_CZECH} "Soubory se hrou" -LangString GameData_DESC ${LANG_CZECH} "Stáhnout soubory s herními daty, t.j. pak0.pk3, pak1.pk3, pak2.pk3 a mp_bin.pk3. Bez nich hru nebude možné spustit." -LangString ^CreateDesktopShortcut ${LANG_CZECH} "VytvoÅ™it zástupce na ploÅ¡e" - -# -# GERMAN -# -LangString ^UninstallLink ${LANG_GERMAN} "Deinstallieren $(^Name)" -LangString MainProgram_DESC ${LANG_GERMAN} "Spiel Binaries" -LangString GameData_DESC ${LANG_GERMAN} "Lade die erforderlichen Spieledateien herunter, z.B. pak0.pk3, pak1.pk3, pak2.pk3 und mp_bin.pk3. Diese werden für das Spiel benötigt." -LangString ^CreateDesktopShortcut ${LANG_GERMAN} "Desktop Shortcut erstellen" - -# -# POLISH -# -LangString ^UninstallLink ${LANG_POLISH} "Odinstaluj $(^Name)" -LangString MainProgram_DESC ${LANG_POLISH} "Pliki wykonywalne" -LangString GameData_DESC ${LANG_POLISH} "Pobierz pliki wymagane do gry. SÄ… to pliki pak0.pk3, pak1.pk3, pak2.pk3 oraz mp_bin.pk3. Nie jest możliwe granie bez tych plików." -LangString ^CreateDesktopShortcut ${LANG_POLISH} "Create Desktop Shortcut" diff --git a/inno_installer/etl_innoinstaller.iss b/inno_installer/etl_innoinstaller.iss deleted file mode 100644 index 55a6661..0000000 --- a/inno_installer/etl_innoinstaller.iss +++ /dev/null @@ -1,170 +0,0 @@ -; Script generated by the Inno Setup Script Wizard. - -; TODO -; * fixme: windows text is scribbled on the Download page -; * (option) import etkey from W:ET 2.60b installation -; * (option) install omnibot files - -; Inno Downloader script (had to be updated) -#include <./it_download.iss> - -#define MyAppName "Enemy Territory - Legacy" -#define MyAppVersion "2.70" -#define MyAppPublisher "ET:L Team" -#define MyAppURL "http://www.etlegacy.com" -#define MyAppExeName "etl.exe" - -[Setup] -; NOTE: The value of AppId uniquely identifies this application. -; Do not use the same AppId value in installers for other applications. -; (To generate a new GUID, click Tools | Generate GUID inside the IDE.) -AppId={{9695CADB-4A88-444C-9A0F-B1D27D15AE5F} -AppName={#MyAppName} -AppVersion={#MyAppVersion} -;AppVerName={#MyAppName} {#MyAppVersion} -AppPublisher={#MyAppPublisher} -AppPublisherURL={#MyAppURL} -AppSupportURL={#MyAppURL} -AppUpdatesURL={#MyAppURL} -DefaultDirName={pf}\Enemy Territory - Legacy -DefaultGroupName={#MyAppName} -AllowNoIcons=yes -LicenseFile=files\COPYING.txt -InfoBeforeFile=intro.rtf -OutputBaseFilename=setup -Compression=lzma -SolidCompression=yes - -[Languages] -Name: "english"; MessagesFile: "compiler:Default.isl" -Name: "czech"; MessagesFile: "compiler:Languages\Czech.isl" -Name: "german"; MessagesFile: "compiler:Languages\German.isl" -Name: "polish"; MessagesFile: "compiler:Languages\Polish.isl" - -[Tasks] -Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked - -[Files] -Source: "files\etl.exe"; DestDir: "{app}"; Flags: ignoreversion -Source: "files\etlded.exe"; DestDir: "{app}"; Flags: ignoreversion -Source: "files\etl.ico"; DestDir: "{app}"; Flags: ignoreversion -Source: "files\legacy\*"; DestDir: "{app}\legacy\"; Flags: ignoreversion recursesubdirs createallsubdirs -Source: "files\libcurl.dll"; DestDir: "{app}"; Flags: ignoreversion -Source: "files\SDL.dll"; DestDir: "{app}"; Flags: ignoreversion -; W:ET 2.60b game data -Source: "{code:GetPakPath|pak0}"; DestDir: "{app}\etmain"; Flags: ignoreversion external -Source: "{code:GetPakPath|pak1}"; DestDir: "{app}\etmain"; Flags: ignoreversion external -Source: "{code:GetPakPath|pak2}"; DestDir: "{app}\etmain"; Flags: ignoreversion external -Source: "{code:GetPakPath|mp_bin}"; DestDir: "{app}\etmain"; Flags: ignoreversion external -; NOTE: Don't use "Flags: ignoreversion" on any shared system files - -[Icons] -Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; IconFilename: "{app}\etl.ico" -Name: "{group}\{cm:ProgramOnTheWeb,{#MyAppName}}"; Filename: "{#MyAppURL}" -Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}" -Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; IconFilename: "{app}\etl.ico"; Tasks: desktopicon - -[Code] -var - pak0, pak1, pak2, mp_bin: String; - InstallDataPage: TInputOptionWizardPage; - EtmainDirPage: TInputDirWizardPage; - DownloadFiles: Boolean; - -procedure InitializeWizard; -begin - InstallDataPage := CreateInputOptionPage(wpSelectDir, - 'Required game data', 'You must have W:ET game datafiles in order to play ET:L', - 'Do you want to download required data files (pak0.pk3, pak1.pk3, pak2.pk3, mp_bin.pk3)?'#10#10'If Wolfenstein: Enemy Territory 2.60b is already installed, select No, then click Next.', - True, False); - InstallDataPage.Add('Yes, download required files'); - InstallDataPage.Add('No, copy files from W:ET installation'); - // Set initial values (optional) - InstallDataPage.SelectedValueIndex := 0; // Default: Yes - - // Let user choose the location of etmain directory - EtmainDirPage := CreateInputDirPage(InstallDataPage.ID, - 'Select "etmain" directory inside W:ET 2.60b installation', '', - 'Select the "etmain" folder inside your Wolfenstein: Enemy Territory 2.60b installation, then click Next.', - False, ''); - EtmainDirPage.Add(''); - - // Locate W:ET 2.60b etmain directory - if RegQueryStringValue(HKLM, 'Software\Activision\Wolfenstein - Enemy Territory', 'InstallPath', InstallPath) then begin - EtmainDirPage.Values[0] := InstallPath + '\etmain' - end; - - // Download W:ET data files - itd_init; - itd_downloadafter(wpReady); -end; - -function ShouldSkipPage(PageID: Integer): Boolean; -begin - { Skip pages that shouldn't be shown } - if (PageID = EtmainDirPage.ID) and not (InstallDataPage.SelectedValueIndex <> 0) then - Result := True - else - Result := False; -end; - -function NextButtonClick(CurPageID: Integer): Boolean; -begin - if CurPageID = EtmainDirPage.ID then begin - pak0 := EtmainDirPage.Values[0] + '\pak0.pk3'; - pak1 := EtmainDirPage.Values[0] + '\pak1.pk3'; - pak2 := EtmainDirPage.Values[0] + '\pak2.pk3'; - mp_bin := EtmainDirPage.Values[0] + '\mp_bin.pk3'; - - Result := False; - if not FileExists(pak0) then begin - MsgBox('Sorry, pak0.pk3 not found in ' + pak0, mbError, MB_OK) - exit; - end; - if not FileExists(pak1) then begin - MsgBox('Sorry, pak1.pk3 not found in ' + pak1, mbError, MB_OK) - exit; - end; - if not FileExists(pak2) then begin - MsgBox('Sorry, pak2.pk3 not found in ' + pak2, mbError, MB_OK) - exit; - end; - if not FileExists(mp_bin) then begin - MsgBox('Sorry, mp_bin.pk3 not found in ' + mp_bin, mbError, MB_OK) - exit; - end; - Result := True; - end else if (CurPageID = InstallDataPage.ID) and not (InstallDataPage.SelectedValueIndex <> 0) then begin - DownloadFiles := (InstallDataPage.SelectedValueIndex <> 0); - pak0 := expandconstant('{tmp}\pak0.pk3'); - pak1 := expandconstant('{tmp}\pak1.pk3'); - pak2 := expandconstant('{tmp}\pak2.pk3'); - mp_bin := expandconstant('{tmp}\mp_bin.pk3'); - - itd_setstring(200, 'Downloading additional files'); - itd_setstring(201, 'Please wait while setup downloads additional files...'); - itd_addfile('http://mirror.etlegacy.com/etmain/pak0.pk3',pak0); - itd_addfile('http://mirror.etlegacy.com/etmain/pak1.pk3',pak1); - itd_addfile('http://mirror.etlegacy.com/etmain/pak2.pk3',pak2); - itd_addfile('http://mirror.etlegacy.com/etmain/mp_bin.pk3',mp_bin); - Result := True; - end else begin - Result := True; - end; -end; - -function GetPakPath(pak: String): String; -begin - if pak = 'pak0' then begin - Result := pak0 - end; - if pak = 'pak1' then begin - Result := pak1 - end; - if pak = 'pak2' then begin - Result := pak2 - end; - if pak = 'mp_bin' then begin - Result := mp_bin - end; -end; \ No newline at end of file diff --git a/inno_installer/intro.rtf b/inno_installer/intro.rtf deleted file mode 100644 index dd10e45..0000000 Binary files a/inno_installer/intro.rtf and /dev/null differ diff --git a/inno_installer/it_download.iss b/inno_installer/it_download.iss deleted file mode 100644 index 79099f2..0000000 --- a/inno_installer/it_download.iss +++ /dev/null @@ -1,318 +0,0 @@ -[Files] -Source: {#emit ReadReg(HKEY_LOCAL_MACHINE,'Software\Sherlock Software\InnoTools\Downloader','InstallPath','')}\itdownload.dll; Flags: dontcopy; DestDir: {tmp} - -[Code] -(* - Inno Tools Downloader DLL - Copyright (C) Sherlock Software 2008 - Version 0.3.5 - - Contact: - The author, Nicholas Sherlock, at nick@sherlocksoftware.org. - Comments, questions and suggestions welcome. - - Website: - http://www.sherlocksoftware.org/ - - History: - 0.3.5 - Moved strings used in the updater example to the language file, so that they - may be more easily translated. - Added event functions to support the example of integration with InnoTools tray. - Fixes bugs that could cause the download to hang until - some mouse movements were received. - Allows "detailed mode" to be turned on with ITD_SetOption - Allows the HTTP agent to be set with ITD_SetOption - 0.3.4 - Added Brazilian Portuguese translation by Ronaldo Souza - 0.3.3 - The "Hilbrand Edskes" release :), lots of suggestions and corrections from him, thank you! - The "Retry" button is now translated. - The "Current file" progress bar is hidden if only one file is being downloaded. - The page's title and description are updated in the case of failed downloads. - Several updates to the translations. - Several small GUI fixes. - 0.3.2 - Minor tweaks to the English language file and the translation example script (example4.iss) - Added Dutch translation by Hilbrand Edskes - Added French translation by Néo - 0.3.1 - Added language file examples, fixed several missing language strings - Preliminary support for proxy server autodetection - Allows the size of a file to be queried with ITD_GetFileSize - Several small bugfixes - 0.3.0 - Properly supports timeouts. - Fixes bug with time remaining. - DLL is required again. - Supports localization through ITD_LoadStrings, ITD_SetString - Add mirrors for files - Post HTTP documents - Quick view and detailed view - 0.2.2 - Fixed empty strings '' in calls and added timeouts - 0.2.1 - Renamed identifiers to avoid name clashes - 0.2.0 - Converted from DLL to pure native code -*) - -procedure ITD_Cancel; - external 'itd_cancel@files:itdownload.dll stdcall'; - -procedure ITD_ClearFiles; - external 'itd_clearfiles@files:itdownload.dll stdcall'; - -function ITD_DownloadFile(url: PAnsiChar; destfilename: PAnsiChar): integer; - external 'itd_downloadfile@files:itdownload.dll stdcall'; - -function ITD_GetResultLen: integer; - external 'itd_getresultlen@files:itdownload.dll stdcall'; - -procedure ITD_GetResultString(buffer: pansichar; maxlen: integer); - external 'itd_getresultstring@files:itdownload.dll stdcall'; - -procedure ITD_Internal_InitUI(HostHwnd: dword); - external 'itd_initui@files:itdownload.dll stdcall'; - -function ITD_Internal_LoadStrings(filename: PAnsiChar): boolean; - external 'itd_loadstrings@files:itdownload.dll stdcall'; - -procedure ITD_Internal_SetOption(option, value: PAnsiChar); - external 'itd_setoption@files:itdownload.dll stdcall'; - -function ITD_Internal_GetFileSize(url: pansichar; var size: Cardinal): boolean; - external 'itd_getfilesize@files:itdownload.dll stdcall'; - -function ITD_Internal_GetString(index: integer): boolean; - external 'itd_getstring@files:itdownload.dll stdcall'; - -function ITD_Internal_GetOption(option: PAnsiChar; buffer: PAnsiChar; length: integer): integer; - external 'itd_getoption@files:itdownload.dll stdcall'; - -procedure ITD_Internal_SetString(index: integer; value: PAnsiChar); - external 'itd_setstring@files:itdownload.dll stdcall'; - -procedure ITD_Internal_AddFile(url: PAnsiChar; destfilename: PAnsiChar); - external 'itd_addfile@files:itdownload.dll stdcall'; - -procedure ITD_Internal_AddMirror(url: PAnsiChar; destfilename: PAnsiChar); - external 'itd_addmirror@files:itdownload.dll stdcall'; - -procedure ITD_Internal_AddFileSize(url: PAnsiChar; destfilename: PAnsiChar; size: integer); - external 'itd_addfilesize@files:itdownload.dll stdcall'; - -function ITD_Internal_DownloadFiles(surface: hwnd): integer; - external 'itd_downloadfiles@files:itdownload.dll stdcall'; - -function ITD_FileCount: integer; - external 'itd_filecount@files:itdownload.dll stdcall'; - -function ITD_Internal_PostPage(url, buffer: PAnsiChar; length: integer): boolean; - external 'itd_postpage@files:itdownload.dll stdcall'; - - -const - ITDERR_SUCCESS = 0; - ITDERR_USERCANCEL = 1; - ITDERR_ERROR = 3; - - {Constants for Language String indexes:} - ITDS_DownloadFailed = 104; - - ITDS_TitleCaption = 200; - ITDS_TitleDescription = 201; - - ITDS_MessageFailRetryContinue = 250; - ITDS_MessageFailRetry = 251; - - ITDS_Retry = 502; - - {Constants for language strings of updater example} - ITDS_Update_Caption = 600; - ITDS_Update_Description = 601; - ITDS_Update_Checking = 602; - ITDS_Update_NewAvailable = 603; - ITDS_Update_NoNewAvailable = 604; - ITDS_Update_WantToCheck = 605; - ITDS_Update_Failed = 606; - ITDS_Update_WillLaunch = 607; - ITDS_Update_WillLaunchWithPath = 608; - - ITD_Event_DownloadPageEntered = 1; - ITD_Event_DownloadPageLeft = 2; - ITD_Event_DownloadFailed = 3; - -var - itd_allowcontinue: boolean; - itd_retryonback: boolean; - - ITD_AfterSuccess: procedure(downloadPage: TWizardPage); - ITD_EventHandler: procedure(event: integer); - -procedure ITD_DownloadFiles(); -begin - ITD_Internal_DownloadFiles(0); -end; - -procedure ITD_AddFile(const URL, filename: string); -begin - ITD_Internal_AddFile(URL, filename); -end; - -procedure ITD_AddMirror(const URL, filename: string); -begin - ITD_Internal_AddMirror(URL, filename); -end; - -procedure ITD_AddFileSize(const URL, filename: string; size: integer); -begin - ITD_Internal_AddFileSize(URL, filename, size); -end; - -function ITD_HandleSkipPage(sender: TWizardPage): boolean; -begin - result := (itd_filecount = 0); -end; - -procedure ITD_SetString(index: integer; value: string); -begin - itd_internal_setstring(index, value); -end; - -function ITD_GetFileSize(const url: string; var size: cardinal): boolean; -begin - result := itd_internal_getfilesize(PAnsiChar(url), size); -end; - -function ITD_LoadStrings(const filename: string): boolean; -begin - result := itd_internal_loadstrings(filename); -end; - -function ITD_GetString(index: integer): string; -begin - itd_internal_getstring(index); - setlength(result, ITD_GetResultLen); - ITD_GetResultString(PAnsiChar(result), length(result)); -end; - -procedure ITD_NowDoDownload(sender: TWizardPage); -var err: integer; -begin - wizardform.backbutton.enabled := false; - wizardform.nextbutton.enabled := false; - - sender.caption := ITD_GetString(ITDS_TitleCaption); - sender.description := ITD_GetString(ITDS_TitleDescription); - - err := ITD_Internal_DownloadFiles(sender.surface.handle); - - case err of - ITDERR_SUCCESS: begin - wizardform.nextbutton.enabled := true; - wizardform.nextbutton.onclick(nil); - - if itd_aftersuccess <> nil then - itd_aftersuccess(sender); - end; - ITDERR_USERCANCEL: ; //Don't show a message, this happens on setup close and cancel click - else begin - //Some unexpected error, like connection interrupted - wizardform.backbutton.caption := ITD_GetString(ITDS_Retry); - wizardform.backbutton.enabled := true; - wizardform.backbutton.show(); - itd_retryonback := true; - - wizardform.nextbutton.enabled := itd_allowcontinue; - - if ITD_EventHandler <> nil then - ITD_EventHandler(ITD_Event_DownloadFailed); - - if itd_allowcontinue then begin //Download failed, we can retry, continue, or exit - sender.caption := ITD_GetString(ITDS_DownloadFailed); - sender.description := ITD_GetString(ITDS_MessageFailRetryContinue); - - MsgBox(ITD_GetString(ITDS_MessageFailRetryContinue), mbError, MB_OK) - end else begin //Download failed, we must retry or exit setup - sender.caption := ITD_GetString(ITDS_DownloadFailed); - sender.description := ITD_GetString(ITDS_MessageFailRetry); - - MsgBox(ITD_GetString(ITDS_MessageFailRetry), mbError, MB_OK) - end; - end; - end; -end; - -procedure ITD_HandleShowPage(sender: TWizardPage); -begin - wizardform.nextbutton.enabled := false; - wizardform.backbutton.hide(); - - if ITD_EventHandler <> nil then - ITD_EventHandler(ITD_Event_DownloadPageEntered); - - itd_nowdodownload(sender); -end; - -function ITD_HandleBackClick(sender: TWizardpage): boolean; -begin - result := false; - if itd_retryonback then begin - itd_retryonback := false; - wizardform.backbutton.hide(); - itd_nowdodownload(sender); - end; -end; - -function ITD_HandleNextClick(sender: TWizardpage): boolean; -begin - if ITD_EventHandler <> nil then - ITD_EventHandler(ITD_Event_DownloadPageLeft); - - result := true; -end; - -procedure ITD_Init; -begin - //Currently a NOP. Don't count on it in future. -end; - -function ITD_PostPage(const url, data: string; out response: string): boolean; -begin - result := ITD_Internal_PostPage(PAnsiChar(url), PAnsiChar(data), length(data)); - - if result then begin - setlength(response, ITD_GetResultLen); - ITD_GetResultString(PAnsiChar(response), length(response)); - end; -end; - -function ITD_DownloadAfter(afterID: integer): TWizardPage; -var itd_downloadPage: TWizardPage; -begin - itd_downloadpage := CreateCustomPage(afterID, ITD_GetString(ITDS_TitleCaption), ITD_GetString(ITDS_TitleDescription)); - - itd_downloadpage.onactivate := @itd_handleshowpage; - itd_downloadpage.onshouldskippage := @itd_handleskippage; - itd_downloadpage.onbackbuttonclick := @itd_handlebackclick; - itd_downloadpage.onnextbuttonclick := @itd_handlenextclick; - - itd_internal_initui(itd_downloadpage.surface.handle); - - result := itd_downloadpage; -end; - -procedure ITD_SetOption(const option, value: string); -begin - //The options which call ITD_SetString are depreciated, use ITD_SetString directly - if comparetext(option, 'UI_Caption') = 0 then - ITD_SetString(ITDS_TitleCaption, value) - else if comparetext(option, 'UI_Description') = 0 then - ITD_SetString(ITDS_TitleDescription, value) - else if comparetext(option, 'UI_FailMessage') = 0 then - ITD_SetString(ITDS_MessageFailRetry, value) - else if comparetext(option, 'UI_FailOrContinueMessage') = 0 then - ITD_SetString(ITDS_MessageFailRetryContinue, value) - else if comparetext(option, 'UI_AllowContinue') = 0 then - ITD_AllowContinue := (value = '1') - else - ITD_Internal_SetOption(option, value); -end; - -function ITD_GetOption(const option: string): string; -begin - setlength(result, 500); - setlength(result, itd_internal_getoption(pansichar(option), pansichar(result), length(result))); -end;