瀏覽代碼

More work on cleaning outdated UNICODE/Delphi3orHigher/IS_.. checks as well even though it's not Vista related.

Martijn Laan 1 年之前
父節點
當前提交
e12c908072
共有 5 個文件被更改,包括 33 次插入369 次删除
  1. 2 4
      Projects/BrowseFunc.pas
  2. 8 136
      Projects/CmnFunc2.pas
  3. 7 124
      Projects/Compile.pas
  4. 3 14
      Projects/Main.pas
  5. 13 91
      Projects/ScriptFunc_R.pas

+ 2 - 4
Projects/BrowseFunc.pas

@@ -2,13 +2,11 @@ unit BrowseFunc;
 
 
 {
 {
   Inno Setup
   Inno Setup
-  Copyright (C) 1997-2010 Jordan Russell
+  Copyright (C) 1997-2024 Jordan Russell
   Portions by Martijn Laan
   Portions by Martijn Laan
   For conditions of distribution and use, see LICENSE.TXT.
   For conditions of distribution and use, see LICENSE.TXT.
 
 
   Functions for browsing for folders/files
   Functions for browsing for folders/files
-
-  $jrsoftware: issrc/Projects/BrowseFunc.pas,v 1.9 2010/09/10 01:08:44 jr Exp $
 }
 }
 
 
 interface
 interface
@@ -33,7 +31,7 @@ function NewGetSaveFileName(const Prompt: String; var FileName: String;
 implementation
 implementation
 
 
 uses
 uses
-  CommDlg, ShlObj, {$IFNDEF Delphi3orHigher} Ole2, {$ELSE} ActiveX, {$ENDIF}
+  CommDlg, ShlObj, ActiveX,
   PathFunc;
   PathFunc;
 
 
 function BrowseCallback(Wnd: HWND; uMsg: UINT; lParam, lpData: LPARAM): Integer; stdcall;
 function BrowseCallback(Wnd: HWND; uMsg: UINT; lParam, lpData: LPARAM): Integer; stdcall;

+ 8 - 136
Projects/CmnFunc2.pas

@@ -93,10 +93,6 @@ function IsAdminLoggedOn: Boolean;
 function IsPowerUserLoggedOn: Boolean;
 function IsPowerUserLoggedOn: Boolean;
 function IsMultiByteString(const S: AnsiString): Boolean;
 function IsMultiByteString(const S: AnsiString): Boolean;
 function FontExists(const FaceName: String): Boolean;
 function FontExists(const FaceName: String): Boolean;
-{$IFNDEF IS_D5}
-procedure FreeAndNil(var Obj);
-function SafeLoadLibrary(const Filename: String; ErrorMode: UINT): HMODULE;
-{$ENDIF}
 function GetUILanguage: LANGID;
 function GetUILanguage: LANGID;
 function RemoveAccelChar(const S: String): String;
 function RemoveAccelChar(const S: String): String;
 function GetTextWidth(const DC: HDC; S: String; const Prefix: Boolean): Integer;
 function GetTextWidth(const DC: HDC; S: String; const Prefix: Boolean): Integer;
@@ -107,20 +103,9 @@ function IsWildcard(const Pattern: String): Boolean;
 function WildcardMatch(const Text, Pattern: PChar): Boolean;
 function WildcardMatch(const Text, Pattern: PChar): Boolean;
 function IntMax(const A, B: Integer): Integer;
 function IntMax(const A, B: Integer): Integer;
 function Win32ErrorString(ErrorCode: Integer): String;
 function Win32ErrorString(ErrorCode: Integer): String;
-{$IFNDEF UNICODE}
-procedure GetLeadBytes(var ALeadBytes: TLeadByteSet);
-{$ENDIF}
-{$IFNDEF IS_D3}
-function CompareMem(P1, P2: Pointer; Length: Integer): Boolean;
-{$ENDIF}
 function DeleteDirTree(const Dir: String): Boolean;
 function DeleteDirTree(const Dir: String): Boolean;
 function SetNTFSCompression(const FileOrDir: String; Compress: Boolean): Boolean;
 function SetNTFSCompression(const FileOrDir: String; Compress: Boolean): Boolean;
 procedure AddToWindowMessageFilterEx(const Wnd: HWND; const Msg: UINT);
 procedure AddToWindowMessageFilterEx(const Wnd: HWND; const Msg: UINT);
-{$IFNDEF UNICODE}
-type
-  TSysCharSet = set of AnsiChar;
-function CharInSet(C: AnsiChar; const CharSet: TSysCharSet): Boolean;
-{$ENDIF}
 function ShutdownBlockReasonCreate(Wnd: HWND; const Reason: String): Boolean;
 function ShutdownBlockReasonCreate(Wnd: HWND; const Reason: String): Boolean;
 function ShutdownBlockReasonDestroy(Wnd: HWND): Boolean;
 function ShutdownBlockReasonDestroy(Wnd: HWND): Boolean;
 function TryStrToBoolean(const S: String; var BoolResult: Boolean): Boolean;
 function TryStrToBoolean(const S: String; var BoolResult: Boolean): Boolean;
@@ -129,17 +114,10 @@ function MoveFileReplace(const ExistingFileName, NewFileName: String): Boolean;
 procedure TryEnableAutoCompleteFileSystem(Wnd: HWND);
 procedure TryEnableAutoCompleteFileSystem(Wnd: HWND);
 procedure CreateMutex(const MutexName: String);
 procedure CreateMutex(const MutexName: String);
 
 
-{$IFNDEF UNICODE}
-var
-  ConstLeadBytes: PLeadByteSet = nil;
-{$ENDIF}
-
 implementation
 implementation
 
 
 uses
 uses
-  {$IFNDEF Delphi3orHigher} OLE2, ShlObj, {$ENDIF} PathFunc;
-
-{$IFDEF Delphi3orHigher}
+  PathFunc;
 
 
 { Avoid including Variants (via ActiveX and ShlObj) in SetupLdr (SetupLdr uses CmnFunc2), saving 26 KB. }
 { Avoid including Variants (via ActiveX and ShlObj) in SetupLdr (SetupLdr uses CmnFunc2), saving 26 KB. }
 
 
@@ -176,9 +154,8 @@ function SHGetMalloc(var ppMalloc: IMalloc): HResult; stdcall; external shell32
 function SHGetSpecialFolderLocation(hwndOwner: HWND; nFolder: Integer;
 function SHGetSpecialFolderLocation(hwndOwner: HWND; nFolder: Integer;
   var ppidl: PItemIDList): HResult; stdcall; external shell32 name 'SHGetSpecialFolderLocation';
   var ppidl: PItemIDList): HResult; stdcall; external shell32 name 'SHGetSpecialFolderLocation';
 function SHGetPathFromIDList(pidl: PItemIDList; pszPath: PChar): BOOL; stdcall;
 function SHGetPathFromIDList(pidl: PItemIDList; pszPath: PChar): BOOL; stdcall;
-  external shell32 name {$IFDEF UNICODE}'SHGetPathFromIDListW'{$ELSE}'SHGetPathFromIDListA'{$ENDIF};
+  external shell32 name 'SHGetPathFromIDListW';
 
 
-{$ENDIF}
 
 
 function InternalGetFileAttr(const Name: String): Integer;
 function InternalGetFileAttr(const Name: String): Integer;
 begin
 begin
@@ -574,11 +551,6 @@ begin
                    Exit;
                    Exit;
                  end;
                  end;
                end;
                end;
-        else
-          {$IFNDEF UNICODE}
-          if S[Result] in ConstLeadBytes^ then
-            Inc(Result);
-          {$ENDIF}
         end;
         end;
         Inc(Result);
         Inc(Result);
       end;
       end;
@@ -623,11 +595,6 @@ begin
              Delete(S, I+1, 2);
              Delete(S, I+1, 2);
              S[I] := Chr(C);
              S[I] := Chr(C);
            end;
            end;
-    else
-      {$IFNDEF UNICODE}
-      if S[I] in ConstLeadBytes^ then
-        Inc(I);
-      {$ENDIF}
     end;
     end;
     Inc(I);
     Inc(I);
   end;
   end;
@@ -652,13 +619,8 @@ begin
       if I = 0 then
       if I = 0 then
         Break;
         Break;
     end
     end
-    else begin
-      {$IFNDEF UNICODE}
-      if S[I] in ConstLeadBytes^ then
-        Inc(I);
-      {$ENDIF}
+    else
       Inc(I);
       Inc(I);
-    end;
   end;
   end;
 end;
 end;
 
 
@@ -719,18 +681,13 @@ function GetSysWow64Dir: String;
   Returns '' if there is no SysWow64 directory (e.g. running 32-bit Windows). }
   Returns '' if there is no SysWow64 directory (e.g. running 32-bit Windows). }
 var
 var
   GetSystemWow64DirectoryFunc: function(
   GetSystemWow64DirectoryFunc: function(
-    lpBuffer: {$IFDEF UNICODE} PWideChar {$ELSE} PAnsiChar {$ENDIF};
-    uSize: UINT): UINT; stdcall;
+    lpBuffer: PWideChar; uSize: UINT): UINT; stdcall;
   Res: Integer;
   Res: Integer;
   Buf: array[0..MAX_PATH] of Char;
   Buf: array[0..MAX_PATH] of Char;
 begin
 begin
   Result := '';
   Result := '';
   GetSystemWow64DirectoryFunc := GetProcAddress(GetModuleHandle(kernel32),
   GetSystemWow64DirectoryFunc := GetProcAddress(GetModuleHandle(kernel32),
-    {$IFDEF UNICODE}
-      'GetSystemWow64DirectoryW'
-    {$ELSE}
-      'GetSystemWow64DirectoryA'
-    {$ENDIF} );
+      'GetSystemWow64DirectoryW');
   if Assigned(GetSystemWow64DirectoryFunc) then begin
   if Assigned(GetSystemWow64DirectoryFunc) then begin
     Res := GetSystemWow64DirectoryFunc(Buf, SizeOf(Buf) div SizeOf(Buf[0]));
     Res := GetSystemWow64DirectoryFunc(Buf, SizeOf(Buf) div SizeOf(Buf[0]));
     if (Res > 0) and (Res < SizeOf(Buf) div SizeOf(Buf[0])) then
     if (Res > 0) and (Res < SizeOf(Buf) div SizeOf(Buf[0])) then
@@ -935,8 +892,7 @@ end;
 
 
 var
 var
   RegDeleteKeyExFunc: function(hKey: HKEY;
   RegDeleteKeyExFunc: function(hKey: HKEY;
-    lpSubKey: {$IFDEF UNICODE} PWideChar {$ELSE} PAnsiChar {$ENDIF};
-    samDesired: REGSAM; Reserved: DWORD): Longint; stdcall;
+    lpSubKey: PWideChar; samDesired: REGSAM; Reserved: DWORD): Longint; stdcall;
 
 
 function RegDeleteKeyView(const RegView: TRegView; const Key: HKEY;
 function RegDeleteKeyView(const RegView: TRegView; const Key: HKEY;
   const Name: PChar): Longint;
   const Name: PChar): Longint;
@@ -946,11 +902,7 @@ begin
   else begin
   else begin
     if @RegDeleteKeyExFunc = nil then
     if @RegDeleteKeyExFunc = nil then
       RegDeleteKeyExFunc := GetProcAddress(GetModuleHandle(advapi32),
       RegDeleteKeyExFunc := GetProcAddress(GetModuleHandle(advapi32),
-        {$IFDEF UNICODE}
-          'RegDeleteKeyExW'
-        {$ELSE}
-          'RegDeleteKeyExA'
-        {$ENDIF} );
+          'RegDeleteKeyExW');
     if Assigned(RegDeleteKeyExFunc) then
     if Assigned(RegDeleteKeyExFunc) then
       Result := RegDeleteKeyExFunc(Key, Name, KEY_WOW64_64KEY, 0)
       Result := RegDeleteKeyExFunc(Key, Name, KEY_WOW64_64KEY, 0)
     else
     else
@@ -1050,8 +1002,7 @@ var
   StringSid: PWideChar;
   StringSid: PWideChar;
 begin
 begin
   Result := '';
   Result := '';
-  if not OpenProcessToken(GetCurrentProcess, TOKEN_QUERY,
-      {$IFDEF Delphi3orHigher} Token {$ELSE} @Token {$ENDIF}) then
+  if not OpenProcessToken(GetCurrentProcess, TOKEN_QUERY, Token) then
     Exit;
     Exit;
   UserInfo := nil;
   UserInfo := nil;
   try
   try
@@ -1200,42 +1151,6 @@ begin
   end;
   end;
 end;
 end;
 
 
-{$IFNDEF IS_D5}
-procedure FreeAndNil(var Obj);
-var
-  Temp: TObject;
-begin
-  Temp := TObject(Obj);
-  Pointer(Obj) := nil;
-  Temp.Free;
-end;
-{$ENDIF}
-
-{$IFNDEF IS_D5}
-function SafeLoadLibrary(const Filename: String; ErrorMode: UINT): HMODULE;
-var
-  SaveErrorMode: UINT;
-  SaveFPUControlWord: Word;
-begin
-  SaveErrorMode := SetErrorMode(ErrorMode);
-  try
-    asm
-      FNSTCW SaveFPUControlWord
-    end;
-    try
-      Result := LoadLibrary(PChar(Filename));
-    finally
-      asm
-        FNCLEX
-        FLDCW SaveFPUControlWord
-      end;
-    end;
-  finally
-    SetErrorMode(SaveErrorMode);
-  end;
-end;
-{$ENDIF}
-
 function GetUILanguage: LANGID;
 function GetUILanguage: LANGID;
 { Platform-independent version of GetUserDefaultUILanguage. May return 0 in
 { Platform-independent version of GetUserDefaultUILanguage. May return 0 in
   case of failure. }
   case of failure. }
@@ -1418,49 +1333,6 @@ begin
   SetString(Result, Buffer, Len);
   SetString(Result, Buffer, Len);
 end;
 end;
 
 
-{$IFNDEF UNICODE}
-procedure GetLeadBytes(var ALeadBytes: TLeadByteSet);
-var
-  AnsiCPInfo: TCPInfo;
-  I: Integer;
-  J: Byte;
-begin
-  ALeadBytes := [];
-  if GetCPInfo(CP_ACP, AnsiCPInfo) then
-    with AnsiCPInfo do begin
-      I := 0;
-      while (I < MAX_LEADBYTES) and ((LeadByte[I] or LeadByte[I+1]) <> 0) do begin
-        for J := LeadByte[I] to LeadByte[I+1] do
-          Include(ALeadBytes, AnsiChar(J));
-        Inc(I, 2);
-      end;
-    end;
-end;
-{$ENDIF}
-
-{$IFNDEF IS_D3}
-function CompareMem(P1, P2: Pointer; Length: Integer): Boolean;
-asm
-        PUSH    ESI
-        PUSH    EDI
-        MOV     ESI,P1
-        MOV     EDI,P2
-        MOV     EDX,ECX
-        XOR     EAX,EAX
-        AND     EDX,3
-        SHR     ECX,1
-        SHR     ECX,1
-        REPE    CMPSD
-        JNE     @@2
-        MOV     ECX,EDX
-        REPE    CMPSB
-        JNE     @@2
-@@1:    INC     EAX
-@@2:    POP     EDI
-        POP     ESI
-end;
-{$ENDIF}
-
 function DeleteDirTree(const Dir: String): Boolean;
 function DeleteDirTree(const Dir: String): Boolean;
 { Removes the specified directory including any files/subdirectories inside
 { Removes the specified directory including any files/subdirectories inside
   it. Returns True if successful. }
   it. Returns True if successful. }

+ 7 - 124
Projects/Compile.pas

@@ -61,13 +61,11 @@ type
     FileLineNumber: Integer;
     FileLineNumber: Integer;
   end;
   end;
 
 
-{$IFDEF UNICODE}
   TPreLangData = class
   TPreLangData = class
   public
   public
     Name: String;
     Name: String;
     LanguageCodePage: Integer;
     LanguageCodePage: Integer;
   end;
   end;
-{$ENDIF}
 
 
   TLangData = class
   TLangData = class
   public
   public
@@ -192,7 +190,7 @@ type
     PreprocOutput: String;
     PreprocOutput: String;
 
 
     DefaultLangData: TLangData;
     DefaultLangData: TLangData;
-    {$IFDEF UNICODE} PreLangDataList, {$ENDIF} LangDataList: TList;
+    PreLangDataList, LangDataList: TList;
     SignToolList: TList;
     SignToolList: TList;
     SignTools, SignToolsParams: TStringList;
     SignTools, SignToolsParams: TStringList;
     SignToolRetryCount, SignToolRetryDelay, SignToolMinimumTimeBetween: Integer;
     SignToolRetryCount, SignToolRetryDelay, SignToolMinimumTimeBetween: Integer;
@@ -282,13 +280,9 @@ type
     procedure EnumDirsProc(const Line: PChar; const Ext: Integer);
     procedure EnumDirsProc(const Line: PChar; const Ext: Integer);
     procedure EnumIconsProc(const Line: PChar; const Ext: Integer);
     procedure EnumIconsProc(const Line: PChar; const Ext: Integer);
     procedure EnumINIProc(const Line: PChar; const Ext: Integer);
     procedure EnumINIProc(const Line: PChar; const Ext: Integer);
-{$IFDEF UNICODE}
     procedure EnumLangOptionsPreProc(const Line: PChar; const Ext: Integer);
     procedure EnumLangOptionsPreProc(const Line: PChar; const Ext: Integer);
-{$ENDIF}
     procedure EnumLangOptionsProc(const Line: PChar; const Ext: Integer);
     procedure EnumLangOptionsProc(const Line: PChar; const Ext: Integer);
-{$IFDEF UNICODE}
     procedure EnumLanguagesPreProc(const Line: PChar; const Ext: Integer);
     procedure EnumLanguagesPreProc(const Line: PChar; const Ext: Integer);
-{$ENDIF}
     procedure EnumLanguagesProc(const Line: PChar; const Ext: Integer);
     procedure EnumLanguagesProc(const Line: PChar; const Ext: Integer);
     procedure EnumRegistryProc(const Line: PChar; const Ext: Integer);
     procedure EnumRegistryProc(const Line: PChar; const Ext: Integer);
     procedure EnumDeleteProc(const Line: PChar; const Ext: Integer);
     procedure EnumDeleteProc(const Line: PChar; const Ext: Integer);
@@ -304,9 +298,7 @@ type
     function GetLZMAExeFilename(const Allow64Bit: Boolean): String;
     function GetLZMAExeFilename(const Allow64Bit: Boolean): String;
     procedure InitBzipDLL;
     procedure InitBzipDLL;
     procedure InitCryptDLL;
     procedure InitCryptDLL;
-{$IFDEF UNICODE}
     procedure InitPreLangData(const APreLangData: TPreLangData);
     procedure InitPreLangData(const APreLangData: TPreLangData);
-{$ENDIF}
     procedure InitLanguageEntry(var ALanguageEntry: TSetupLanguageEntry);
     procedure InitLanguageEntry(var ALanguageEntry: TSetupLanguageEntry);
     procedure InitLZMADLL;
     procedure InitLZMADLL;
     procedure InitPreprocessor;
     procedure InitPreprocessor;
@@ -330,13 +322,9 @@ type
     procedure ProcessWildcardsParameter(const ParamData: String;
     procedure ProcessWildcardsParameter(const ParamData: String;
       const AWildcards: TStringList; const TooLongMsg: String);
       const AWildcards: TStringList; const TooLongMsg: String);
     procedure ReadDefaultMessages;
     procedure ReadDefaultMessages;
-{$IFDEF UNICODE}
     procedure ReadMessagesFromFilesPre(const AFiles: String; const ALangIndex: Integer);
     procedure ReadMessagesFromFilesPre(const AFiles: String; const ALangIndex: Integer);
-{$ENDIF}
     procedure ReadMessagesFromFiles(const AFiles: String; const ALangIndex: Integer);
     procedure ReadMessagesFromFiles(const AFiles: String; const ALangIndex: Integer);
-{$IFDEF UNICODE}
     procedure ReadMessagesFromScriptPre;
     procedure ReadMessagesFromScriptPre;
-{$ENDIF}
     procedure ReadMessagesFromScript;
     procedure ReadMessagesFromScript;
     function ReadScriptFile(const Filename: String; const UseCache: Boolean;
     function ReadScriptFile(const Filename: String; const UseCache: Boolean;
       const AnsiConvertCodePage: Cardinal): TScriptFileLines;
       const AnsiConvertCodePage: Cardinal): TScriptFileLines;
@@ -371,9 +359,6 @@ type
   end;
   end;
 
 
 var
 var
-{$IFNDEF UNICODE}
-  CompilerLeadBytes: TLeadByteSet;
-{$ENDIF}
   ZipInitialized, BzipInitialized, LZMAInitialized, CryptInitialized: Boolean;
   ZipInitialized, BzipInitialized, LZMAInitialized, CryptInitialized: Boolean;
   PreprocessorInitialized: Boolean;
   PreprocessorInitialized: Boolean;
   PreprocessScriptProc: TPreprocessScriptProc;
   PreprocessScriptProc: TPreprocessScriptProc;
@@ -781,13 +766,8 @@ begin
       if Result[I] = '{' then
       if Result[I] = '{' then
         Delete(Result, I, 1);
         Delete(Result, I, 1);
     end
     end
-    else begin
-{$IFNDEF UNICODE}
-      if Result[I] in CompilerLeadBytes then
-        Inc(I);
-{$ENDIF}
+    else
       Inc(I);
       Inc(I);
-    end;
   end;
   end;
 end;
 end;
 
 
@@ -1520,9 +1500,7 @@ begin
   UsedUserAreas.Duplicates := dupIgnore;
   UsedUserAreas.Duplicates := dupIgnore;
   PreprocIncludedFilenames := TStringList.Create;
   PreprocIncludedFilenames := TStringList.Create;
   DefaultLangData := TLangData.Create;
   DefaultLangData := TLangData.Create;
-{$IFDEF UNICODE}
   PreLangDataList := TLowFragList.Create;
   PreLangDataList := TLowFragList.Create;
-{$ENDIF}
   LangDataList := TLowFragList.Create;
   LangDataList := TLowFragList.Create;
   SignToolList := TLowFragList.Create;
   SignToolList := TLowFragList.Create;
   SignTools := TStringList.Create;
   SignTools := TStringList.Create;
@@ -1555,9 +1533,7 @@ begin
     SignToolList.Free;
     SignToolList.Free;
   end;
   end;
   LangDataList.Free;
   LangDataList.Free;
-{$IFDEF UNICODE}
   PreLangDataList.Free;
   PreLangDataList.Free;
-{$ENDIF}
   DefaultLangData.Free;
   DefaultLangData.Free;
   PreprocIncludedFilenames.Free;
   PreprocIncludedFilenames.Free;
   UsedUserAreas.Free;
   UsedUserAreas.Free;
@@ -1586,8 +1562,6 @@ end;
 
 
 procedure TSetupCompiler.InitPreprocessor;
 procedure TSetupCompiler.InitPreprocessor;
 {$IFNDEF STATICPREPROC}
 {$IFNDEF STATICPREPROC}
-const
-  FuncNameSuffix = {$IFDEF UNICODE} 'W' {$ELSE} 'A' {$ENDIF};
 var
 var
   Filename: String;
   Filename: String;
   Attr: DWORD;
   Attr: DWORD;
@@ -1607,8 +1581,7 @@ begin
     if M = 0 then
     if M = 0 then
       AbortCompileFmt('Failed to load preprocessor DLL "%s" (%d)',
       AbortCompileFmt('Failed to load preprocessor DLL "%s" (%d)',
         [Filename, GetLastError]);
         [Filename, GetLastError]);
-    PreprocessScriptProc := GetProcAddress(M,
-      PAnsiChar('ISPreprocessScript' + FuncNameSuffix));
+    PreprocessScriptProc := GetProcAddress(M, 'ISPreprocessScriptW');
     if not Assigned(PreprocessScriptProc) then
     if not Assigned(PreprocessScriptProc) then
       AbortCompileFmt('Failed to get address of functions in "%s"', [Filename]);
       AbortCompileFmt('Failed to get address of functions in "%s"', [Filename]);
   end;
   end;
@@ -2167,7 +2140,6 @@ var
 
 
     UseCache := not (LangSection and LangSectionPre);
     UseCache := not (LangSection and LangSectionPre);
     AnsiConvertCodePage := 0;
     AnsiConvertCodePage := 0;
-{$IFDEF UNICODE}
     if LangSection then begin
     if LangSection then begin
       { During a Pre pass on an .isl file, use code page 1252 for translation.
       { During a Pre pass on an .isl file, use code page 1252 for translation.
         Previously, the system code page was used, but on DBCS that resulted in
         Previously, the system code page was used, but on DBCS that resulted in
@@ -2183,7 +2155,6 @@ var
         AnsiConvertCodePage := TPreLangData(PreLangDataList[Ext]).LanguageCodePage;
         AnsiConvertCodePage := TPreLangData(PreLangDataList[Ext]).LanguageCodePage;
       end;
       end;
     end;
     end;
-{$ENDIF}
 
 
     Lines := ReadScriptFile(Filename, UseCache, AnsiConvertCodePage);
     Lines := ReadScriptFile(Filename, UseCache, AnsiConvertCodePage);
     try
     try
@@ -2786,13 +2757,7 @@ begin
 
 
       1:{ Constant is OK }
       1:{ Constant is OK }
       end;
       end;
-{$IFDEF UNICODE}
     end;
     end;
-{$ELSE}
-    end
-    else if S[I] in CompilerLeadBytes then
-      Inc(I);
-{$ENDIF}
     Inc(I);
     Inc(I);
   end;
   end;
 end;
 end;
@@ -2812,7 +2777,7 @@ begin
     Decl := '0';
     Decl := '0';
 
 
   for I := Low(Parameters) to High(Parameters) do begin
   for I := Low(Parameters) to High(Parameters) do begin
-    if Parameters[I].VType = {$IFDEF UNICODE} vtUnicodeString {$ELSE} vtAnsiString {$ENDIF} then
+    if Parameters[I].VType = vtUnicodeString then
       Decl := Decl + ' @String'
       Decl := Decl + ' @String'
     else if Parameters[I].VType = vtInteger then
     else if Parameters[I].VType = vtInteger then
       Decl := Decl + ' @LongInt'
       Decl := Decl + ' @LongInt'
@@ -3215,18 +3180,15 @@ procedure TSetupCompiler.ReadTextFile(const Filename: String; const LangIndex: I
 var
 var
   F: TFile;
   F: TFile;
   Size: Cardinal;
   Size: Cardinal;
-{$IFDEF UNICODE}
   UnicodeFile, RTFFile: Boolean;
   UnicodeFile, RTFFile: Boolean;
   AnsiConvertCodePage: Integer;
   AnsiConvertCodePage: Integer;
   S: RawByteString;
   S: RawByteString;
   U: String;
   U: String;
-{$ENDIF}
 begin
 begin
   try
   try
     F := TFile.Create(Filename, fdOpenExisting, faRead, fsRead);
     F := TFile.Create(Filename, fdOpenExisting, faRead, fsRead);
     try
     try
       Size := F.Size.Lo;
       Size := F.Size.Lo;
-{$IFDEF UNICODE}
       SetLength(S, Size);
       SetLength(S, Size);
       F.ReadBuffer(S[1], Size);
       F.ReadBuffer(S[1], Size);
 
 
@@ -3250,10 +3212,6 @@ begin
           Text := S;
           Text := S;
       end else
       end else
         Text := S;
         Text := S;
-{$ELSE}
-      SetLength(Text, Size);
-      F.ReadBuffer(Text[1], Size);
-{$ENDIF}
     finally
     finally
       F.Free;
       F.Free;
     end;
     end;
@@ -3983,11 +3941,7 @@ begin
         SetSetupHeaderOption(shShowTasksTreeLines);
         SetSetupHeaderOption(shShowTasksTreeLines);
       end;
       end;
     ssShowUndisplayableLanguages: begin
     ssShowUndisplayableLanguages: begin
-{$IFDEF UNICODE}
         WarningsList.Add(Format(SCompilerEntryObsolete, ['Setup', KeyName]));
         WarningsList.Add(Format(SCompilerEntryObsolete, ['Setup', KeyName]));
-{$ELSE}
-        SetSetupHeaderOption(shShowUndisplayableLanguages);
-{$ENDIF}
       end;
       end;
     ssSignedUninstaller: begin
     ssSignedUninstaller: begin
         SetSetupHeaderOption(shSignedUninstaller);
         SetSetupHeaderOption(shSignedUninstaller);
@@ -4231,7 +4185,6 @@ function TSetupCompiler.FindLangEntryIndexByName(const AName: String;
 var
 var
   I: Integer;
   I: Integer;
 begin
 begin
-{$IFDEF UNICODE}
   if Pre then begin
   if Pre then begin
     for I := 0 to PreLangDataList.Count-1 do begin
     for I := 0 to PreLangDataList.Count-1 do begin
       if TPreLangData(PreLangDataList[I]).Name = AName then begin
       if TPreLangData(PreLangDataList[I]).Name = AName then begin
@@ -4241,7 +4194,6 @@ begin
     end;
     end;
     AbortCompileOnLineFmt(SCompilerUnknownLanguage, [AName]);
     AbortCompileOnLineFmt(SCompilerUnknownLanguage, [AName]);
   end;
   end;
-{$ENDIF}
 
 
   for I := 0 to LanguageEntries.Count-1 do begin
   for I := 0 to LanguageEntries.Count-1 do begin
     if PSetupLanguageEntry(LanguageEntries[I]).Name = AName then begin
     if PSetupLanguageEntry(LanguageEntries[I]).Name = AName then begin
@@ -4266,7 +4218,6 @@ begin
   Result := -1;
   Result := -1;
 end;
 end;
 
 
-{$IFDEF UNICODE}
 procedure TSetupCompiler.EnumLangOptionsPreProc(const Line: PChar; const Ext: Integer);
 procedure TSetupCompiler.EnumLangOptionsPreProc(const Line: PChar; const Ext: Integer);
 
 
   procedure ApplyToLangEntryPre(const KeyName, Value: String;
   procedure ApplyToLangEntryPre(const KeyName, Value: String;
@@ -4319,7 +4270,6 @@ begin
   end else
   end else
     ApplyToLangEntryPre(KeyName, Value, TPreLangData(PreLangDataList[LangIndex]), False);
     ApplyToLangEntryPre(KeyName, Value, TPreLangData(PreLangDataList[LangIndex]), False);
 end;
 end;
-{$ENDIF}
 
 
 procedure TSetupCompiler.EnumLangOptionsProc(const Line: PChar; const Ext: Integer);
 procedure TSetupCompiler.EnumLangOptionsProc(const Line: PChar; const Ext: Integer);
 
 
@@ -4398,7 +4348,7 @@ procedure TSetupCompiler.EnumLangOptionsProc(const Line: PChar; const Ext: Integ
       lsLanguageCodePage: begin
       lsLanguageCodePage: begin
           if AffectsMultipleLangs then
           if AffectsMultipleLangs then
             AbortCompileOnLineFmt(SCompilerCantSpecifyLangOption, [KeyName]);
             AbortCompileOnLineFmt(SCompilerCantSpecifyLangOption, [KeyName]);
-          {$IFNDEF UNICODE}LangOptions.LanguageCodePage := {$ENDIF}StrToIntCheck(Value);
+          StrToIntCheck(Value);
         end;
         end;
       lsLanguageID: begin
       lsLanguageID: begin
           if AffectsMultipleLangs then
           if AffectsMultipleLangs then
@@ -4834,35 +4784,14 @@ type
     mkcPgDn, mkcEnd, mkcHome, mkcLeft, mkcUp, mkcRight, mkcDown, mkcIns,
     mkcPgDn, mkcEnd, mkcHome, mkcLeft, mkcUp, mkcRight, mkcDown, mkcIns,
     mkcDel, mkcShift, mkcCtrl, mkcAlt);
     mkcDel, mkcShift, mkcCtrl, mkcAlt);
 
 
-{$IFDEF Delphi3OrHigher}
 var
 var
   MenuKeyCaps: array[TMenuKeyCap] of string = (
   MenuKeyCaps: array[TMenuKeyCap] of string = (
     SmkcBkSp, SmkcTab, SmkcEsc, SmkcEnter, SmkcSpace, SmkcPgUp,
     SmkcBkSp, SmkcTab, SmkcEsc, SmkcEnter, SmkcSpace, SmkcPgUp,
     SmkcPgDn, SmkcEnd, SmkcHome, SmkcLeft, SmkcUp, SmkcRight,
     SmkcPgDn, SmkcEnd, SmkcHome, SmkcLeft, SmkcUp, SmkcRight,
     SmkcDown, SmkcIns, SmkcDel, SmkcShift, SmkcCtrl, SmkcAlt);
     SmkcDown, SmkcIns, SmkcDel, SmkcShift, SmkcCtrl, SmkcAlt);
-{$ELSE}
-var
-  MenuKeyCaps: array[TMenuKeyCap] of string;
-
-const
-  MenuKeyCapIDs: array[TMenuKeyCap] of Word = (
-    SmkcBkSp, SmkcTab, SmkcEsc, SmkcEnter, SmkcSpace, SmkcPgUp,
-    SmkcPgDn, SmkcEnd, SmkcHome, SmkcLeft, SmkcUp, SmkcRight,
-    SmkcDown, SmkcIns, SmkcDel, SmkcShift, SmkcCtrl, SmkcAlt);
-{$ENDIF}
 
 
 procedure TSetupCompiler.EnumIconsProc(const Line: PChar; const Ext: Integer);
 procedure TSetupCompiler.EnumIconsProc(const Line: PChar; const Ext: Integer);
 
 
-  {$IFNDEF Delphi3OrHigher}
-  procedure LoadStrings;
-  var
-    I: TMenuKeyCap;
-  begin
-    for I := Low(TMenuKeyCap) to High(TMenuKeyCap) do
-      MenuKeyCaps[I] := LoadStr(MenuKeyCapIDs[I]);
-  end;
-  {$ENDIF}
-
   function HotKeyToText(HotKey: Word): string;
   function HotKeyToText(HotKey: Word): string;
 
 
     function GetSpecialName(HotKey: Word): string;
     function GetSpecialName(HotKey: Word): string;
@@ -4990,10 +4919,6 @@ var
   NewIconEntry: PSetupIconEntry;
   NewIconEntry: PSetupIconEntry;
   S: String;
   S: String;
 begin
 begin
-  {$IFNDEF Delphi3OrHigher}
-  LoadStrings;
-  {$ENDIF}
-
   ExtractParameters(Line, ParamInfo, Values);
   ExtractParameters(Line, ParamInfo, Values);
 
 
   NewIconEntry := AllocMem(SizeOf(TSetupIconEntry));
   NewIconEntry := AllocMem(SizeOf(TSetupIconEntry));
@@ -5565,13 +5490,7 @@ procedure TSetupCompiler.EnumFilesProc(const Line: PChar; const Ext: Integer);
       if Result[I] = '{' then begin
       if Result[I] = '{' then begin
         Insert('{', Result, I);
         Insert('{', Result, I);
         Inc(I);
         Inc(I);
-{$IFDEF UNICODE}
       end;
       end;
-{$ELSE}
-      end
-      else if Result[I] in CompilerLeadBytes then
-        Inc(I);
-{$ENDIF}
       Inc(I);
       Inc(I);
     end;
     end;
   end;
   end;
@@ -6024,32 +5943,20 @@ type
       function ComparePathStr(P1, P2: PChar): Integer;
       function ComparePathStr(P1, P2: PChar): Integer;
       { Like CompareStr, but sorts backslashes correctly ('A\B' < 'AB\B') }
       { Like CompareStr, but sorts backslashes correctly ('A\B' < 'AB\B') }
       var
       var
-{$IFNDEF UNICODE}
-        LastWasLeadByte: BOOL;
-{$ENDIF}
         C1, C2: Char;
         C1, C2: Char;
       begin
       begin
-{$IFNDEF UNICODE}
-        LastWasLeadByte := False;
-{$ENDIF}
         repeat
         repeat
           C1 := P1^;
           C1 := P1^;
-          if (C1 = '\') {$IFNDEF UNICODE} and not LastWasLeadByte {$ENDIF} then
+          if (C1 = '\') then
             C1 := #1;
             C1 := #1;
           C2 := P2^;
           C2 := P2^;
-          if (C2 = '\') {$IFNDEF UNICODE} and not LastWasLeadByte {$ENDIF} then
+          if (C2 = '\') then
             C2 := #1;
             C2 := #1;
           Result := Ord(C1) - Ord(C2);
           Result := Ord(C1) - Ord(C2);
           if Result <> 0 then
           if Result <> 0 then
             Break;
             Break;
           if C1 = #0 then
           if C1 = #0 then
             Break;
             Break;
-{$IFNDEF UNICODE}
-          if LastWasLeadByte then
-            LastWasLeadByte := False
-          else
-            LastWasLeadByte := IsDBCSLeadByte(Ord(C1));
-{$ENDIF}
           Inc(P1);
           Inc(P1);
           Inc(P2);
           Inc(P2);
         until False;
         until False;
@@ -6701,7 +6608,6 @@ const
     (Name: ParamLanguagesInfoBeforeFile; Flags: [piNoEmpty]),
     (Name: ParamLanguagesInfoBeforeFile; Flags: [piNoEmpty]),
     (Name: ParamLanguagesInfoAfterFile; Flags: [piNoEmpty]));
     (Name: ParamLanguagesInfoAfterFile; Flags: [piNoEmpty]));
 
 
-{$IFDEF UNICODE}
 procedure TSetupCompiler.EnumLanguagesPreProc(const Line: PChar; const Ext: Integer);
 procedure TSetupCompiler.EnumLanguagesPreProc(const Line: PChar; const Ext: Integer);
 var
 var
   Values: array[TLanguagesParam] of TParamValue;
   Values: array[TLanguagesParam] of TParamValue;
@@ -6732,7 +6638,6 @@ begin
 
 
   ReadMessagesFromFilesPre(Filename, PreLangDataList.Count-1);
   ReadMessagesFromFilesPre(Filename, PreLangDataList.Count-1);
 end;
 end;
-{$ENDIF}
 
 
 procedure TSetupCompiler.EnumLanguagesProc(const Line: PChar; const Ext: Integer);
 procedure TSetupCompiler.EnumLanguagesProc(const Line: PChar; const Ext: Integer);
 var
 var
@@ -6978,7 +6883,6 @@ begin
   end;
   end;
 end;
 end;
 
 
-{$IFDEF UNICODE}
 procedure TSetupCompiler.InitPreLangData(const APreLangData: TPreLangData);
 procedure TSetupCompiler.InitPreLangData(const APreLangData: TPreLangData);
 { Initializes a TPreLangData object with the default settings }
 { Initializes a TPreLangData object with the default settings }
 begin
 begin
@@ -6987,7 +6891,6 @@ begin
     LanguageCodePage := 0;
     LanguageCodePage := 0;
   end;
   end;
 end;
 end;
-{$ENDIF}
 
 
 procedure TSetupCompiler.InitLanguageEntry(var ALanguageEntry: TSetupLanguageEntry);
 procedure TSetupCompiler.InitLanguageEntry(var ALanguageEntry: TSetupLanguageEntry);
 { Initializes a TSetupLanguageEntry record with the default settings }
 { Initializes a TSetupLanguageEntry record with the default settings }
@@ -6996,9 +6899,6 @@ begin
     Name := 'default';
     Name := 'default';
     LanguageName := 'English';
     LanguageName := 'English';
     LanguageID := $0409;  { U.S. English }
     LanguageID := $0409;  { U.S. English }
-{$IFNDEF UNICODE}
-    LanguageCodePage := 0;
-{$ENDIF}
     DialogFontName := DefaultDialogFontName;
     DialogFontName := DefaultDialogFontName;
     DialogFontSize := 8;
     DialogFontSize := 8;
     TitleFontName := 'Arial';
     TitleFontName := 'Arial';
@@ -7013,7 +6913,6 @@ begin
   end;
   end;
 end;
 end;
 
 
-{$IFDEF UNICODE}
 procedure TSetupCompiler.ReadMessagesFromFilesPre(const AFiles: String;
 procedure TSetupCompiler.ReadMessagesFromFilesPre(const AFiles: String;
   const ALangIndex: Integer);
   const ALangIndex: Integer);
 var
 var
@@ -7030,7 +6929,6 @@ begin
     CallIdleProc;
     CallIdleProc;
   end;
   end;
 end;
 end;
-{$ENDIF}
 
 
 procedure TSetupCompiler.ReadMessagesFromFiles(const AFiles: String;
 procedure TSetupCompiler.ReadMessagesFromFiles(const AFiles: String;
   const ALangIndex: Integer);
   const ALangIndex: Integer);
@@ -7069,7 +6967,6 @@ begin
         { ^ Copy(..., 4, Maxint) is to skip past "msg" }
         { ^ Copy(..., 4, Maxint) is to skip past "msg" }
 end;
 end;
 
 
-{$IFDEF UNICODE}
 procedure TSetupCompiler.ReadMessagesFromScriptPre;
 procedure TSetupCompiler.ReadMessagesFromScriptPre;
 
 
   procedure CreateDefaultLanguageEntryPre;
   procedure CreateDefaultLanguageEntryPre;
@@ -7103,7 +7000,6 @@ begin
   EnumIniSection(EnumLangOptionsPreProc, 'LangOptions', -1, False, True, '', True, False);
   EnumIniSection(EnumLangOptionsPreProc, 'LangOptions', -1, False, True, '', True, False);
   CallIdleProc;
   CallIdleProc;
 end;
 end;
-{$ENDIF}
 
 
 procedure TSetupCompiler.ReadMessagesFromScript;
 procedure TSetupCompiler.ReadMessagesFromScript;
 
 
@@ -7591,7 +7487,6 @@ procedure TSetupCompiler.Compile;
     end;
     end;
   end;
   end;
 
 
-{$IFDEF UNICODE}
   procedure FreePreLangData;
   procedure FreePreLangData;
   var
   var
     I: Integer;
     I: Integer;
@@ -7601,7 +7496,6 @@ procedure TSetupCompiler.Compile;
       PreLangDataList.Delete(I);
       PreLangDataList.Delete(I);
     end;
     end;
   end;
   end;
-{$ENDIF}
 
 
   procedure FreeLangData;
   procedure FreeLangData;
   var
   var
@@ -7670,9 +7564,6 @@ var
 
 
     F.WriteBuffer(SetupID, SizeOf(SetupID));
     F.WriteBuffer(SetupID, SizeOf(SetupID));
 
 
-{$IFNDEF UNICODE}
-    SetupHeader.LeadBytes := CompilerLeadBytes;
-{$ENDIF}
     SetupHeader.NumLanguageEntries := LanguageEntries.Count;
     SetupHeader.NumLanguageEntries := LanguageEntries.Count;
     SetupHeader.NumCustomMessageEntries := CustomMessageEntries.Count;
     SetupHeader.NumCustomMessageEntries := CustomMessageEntries.Count;
     SetupHeader.NumPermissionEntries := PermissionEntries.Count;
     SetupHeader.NumPermissionEntries := PermissionEntries.Count;
@@ -8782,7 +8673,6 @@ begin
       Note: it must avoid caching the .isl files while determining the code pages, since
       Note: it must avoid caching the .isl files while determining the code pages, since
       the conversion is done *before* the caching. }
       the conversion is done *before* the caching. }
 
 
-{$IFDEF UNICODE}
     { 0. Determine final language code pages }
     { 0. Determine final language code pages }
     AddStatus(SCompilerStatusDeterminingCodePages);
     AddStatus(SCompilerStatusDeterminingCodePages);
 
 
@@ -8793,7 +8683,6 @@ begin
 
 
     { 0.2. Read [LangOptions] in the script }
     { 0.2. Read [LangOptions] in the script }
     ReadMessagesFromScriptPre;
     ReadMessagesFromScriptPre;
-{$ENDIF}
 
 
     { 1. Read Default.isl messages }
     { 1. Read Default.isl messages }
     AddStatus(SCompilerStatusReadingDefaultMessages);
     AddStatus(SCompilerStatusReadingDefaultMessages);
@@ -9101,9 +8990,7 @@ begin
     FileLocationEntryFilenames.Clear;
     FileLocationEntryFilenames.Clear;
     FreeLineInfoList(ExpectedCustomMessageNames);
     FreeLineInfoList(ExpectedCustomMessageNames);
     FreeLangData;
     FreeLangData;
-{$IFDEF UNICODE}
     FreePreLangData;
     FreePreLangData;
-{$ENDIF}
     FreeScriptFiles;
     FreeScriptFiles;
     FreeLineInfoList(CodeText);
     FreeLineInfoList(CodeText);
     FreeAndNil(CompressProps);
     FreeAndNil(CompressProps);
@@ -9275,10 +9162,6 @@ begin
 end;
 end;
 
 
 initialization
 initialization
-{$IFNDEF UNICODE}
-  GetLeadBytes(CompilerLeadBytes);
-  ConstLeadBytes := @CompilerLeadBytes;
-{$ENDIF}
 finalization
 finalization
   if CryptProv <> 0 then begin
   if CryptProv <> 0 then begin
     CryptReleaseContext(CryptProv, 0);
     CryptReleaseContext(CryptProv, 0);

+ 3 - 14
Projects/Main.pas

@@ -266,8 +266,7 @@ uses
   ShellAPI, ShlObj,
   ShellAPI, ShlObj,
   Msgs, MsgIDs, Install, InstFunc, InstFnc2, RedirFunc, PathFunc,
   Msgs, MsgIDs, Install, InstFunc, InstFnc2, RedirFunc, PathFunc,
   Compress, CompressZlib, bzlib, LZMADecomp, ArcFour, SetupEnt, SelLangForm,
   Compress, CompressZlib, bzlib, LZMADecomp, ArcFour, SetupEnt, SelLangForm,
-  Wizard, DebugClient, VerInfo, Extract, FileClass, Logging, MD5, SHA1,
-  {$IFNDEF Delphi3orHigher} OLE2, {$ELSE} ActiveX, {$ENDIF}
+  Wizard, DebugClient, VerInfo, Extract, FileClass, Logging, MD5, SHA1, ActiveX,
   SimpleExpression, Helper, SpawnClient, SpawnServer, DotNet, BitmapImage,
   SimpleExpression, Helper, SpawnClient, SpawnServer, DotNet, BitmapImage,
   TaskDialog, RegStr;
   TaskDialog, RegStr;
 
 
@@ -1259,13 +1258,8 @@ begin
           Inc(I); { Skip closing brace }
           Inc(I); { Skip closing brace }
       end;
       end;
     end
     end
-    else begin
-{$IFNDEF UNICODE}
-      if Result[I] in ConstLeadBytes^ then
-        Inc(I);
-{$ENDIF}
+    else
       Inc(I);
       Inc(I);
-    end;
   end;
   end;
 end;
 end;
 
 
@@ -1484,7 +1478,7 @@ begin
   SHFolderDLLHandle := SafeLoadLibrary(Filename, SEM_NOOPENFILEERRORBOX);
   SHFolderDLLHandle := SafeLoadLibrary(Filename, SEM_NOOPENFILEERRORBOX);
   if SHFolderDLLHandle = 0 then
   if SHFolderDLLHandle = 0 then
     InternalError(Format('Failed to load DLL "%s"', [Filename]));
     InternalError(Format('Failed to load DLL "%s"', [Filename]));
-  @SHGetFolderPathFunc := GetProcAddress(SHFolderDLLHandle, {$IFDEF UNICODE}'SHGetFolderPathW'{$ELSE}'SHGetFolderPathA'{$ENDIF});
+  @SHGetFolderPathFunc := GetProcAddress(SHFolderDLLHandle, 'SHGetFolderPathW');
   if @SHGetFolderPathFunc = nil then
   if @SHGetFolderPathFunc = nil then
     InternalError('Failed to get address of SHGetFolderPath function');
     InternalError('Failed to get address of SHGetFolderPath function');
 end;
 end;
@@ -3737,9 +3731,7 @@ begin
     S := S + SNewLine2 + SetupMessages[msgAboutSetupNote];
     S := S + SNewLine2 + SetupMessages[msgAboutSetupNote];
   if SetupMessages[msgTranslatorNote] <> '' then
   if SetupMessages[msgTranslatorNote] <> '' then
     S := S + SNewLine2 + SetupMessages[msgTranslatorNote];
     S := S + SNewLine2 + SetupMessages[msgTranslatorNote];
-{$IFDEF UNICODE}
   StringChangeEx(S, '(C)', #$00A9, True);
   StringChangeEx(S, '(C)', #$00A9, True);
-{$ENDIF}
   LoggedMsgBox(S, SetupMessages[msgAboutSetupTitle], mbInformation, MB_OK, False, 0);
   LoggedMsgBox(S, SetupMessages[msgAboutSetupTitle], mbInformation, MB_OK, False, 0);
 end;
 end;
 
 
@@ -4480,9 +4472,6 @@ end;
 initialization
 initialization
   InitIsWin64AndProcessorArchitecture;
   InitIsWin64AndProcessorArchitecture;
   InitWindowsVersion;
   InitWindowsVersion;
-{$IFNDEF UNICODE}
-  ConstLeadBytes := @SetupHeader.LeadBytes;
-{$ENDIF}
   InitComponents := TStringList.Create();
   InitComponents := TStringList.Create();
   InitTasks := TStringList.Create();
   InitTasks := TStringList.Create();
   NewParamsForCode := TStringList.Create();
   NewParamsForCode := TStringList.Create();

+ 13 - 91
Projects/ScriptFunc_R.pas

@@ -22,8 +22,7 @@ implementation
 
 
 uses
 uses
   Windows, ScriptFunc,
   Windows, ScriptFunc,
-  Forms, uPSUtils, SysUtils, Classes, Graphics, Controls, TypInfo,
-  {$IFNDEF Delphi3orHigher} Ole2, {$ELSE} ActiveX, {$ENDIF}
+  Forms, uPSUtils, SysUtils, Classes, Graphics, Controls, TypInfo, ActiveX,
   Struct, ScriptDlg, Main, PathFunc, CmnFunc, CmnFunc2, FileClass, RedirFunc,
   Struct, ScriptDlg, Main, PathFunc, CmnFunc, CmnFunc2, FileClass, RedirFunc,
   Install, InstFunc, InstFnc2, Msgs, MsgIDs, NewDisk, BrowseFunc, Wizard, VerInfo,
   Install, InstFunc, InstFnc2, Msgs, MsgIDs, NewDisk, BrowseFunc, Wizard, VerInfo,
   SetupTypes, Int64Em, MD5, SHA1, Logging, SetupForm, RegDLL, Helper,
   SetupTypes, Int64Em, MD5, SHA1, Logging, SetupForm, RegDLL, Helper,
@@ -33,17 +32,16 @@ var
   ScaleBaseUnitsInitialized: Boolean;
   ScaleBaseUnitsInitialized: Boolean;
   ScaleBaseUnitX, ScaleBaseUnitY: Integer;
   ScaleBaseUnitX, ScaleBaseUnitY: Integer;
 
 
-procedure NoSetupFuncError(const C: AnsiString);{$IFDEF UNICODE} overload;{$ENDIF}
+procedure NoSetupFuncError(const C: AnsiString); overload;
 begin
 begin
   InternalError(Format('Cannot call "%s" function during Setup', [C]));
   InternalError(Format('Cannot call "%s" function during Setup', [C]));
 end;
 end;
 
 
-procedure NoUninstallFuncError(const C: AnsiString);{$IFDEF UNICODE} overload;{$ENDIF}
+procedure NoUninstallFuncError(const C: AnsiString); overload;
 begin
 begin
   InternalError(Format('Cannot call "%s" function during Uninstall', [C]));
   InternalError(Format('Cannot call "%s" function during Uninstall', [C]));
 end;
 end;
 
 
-{$IFDEF UNICODE}
 procedure NoSetupFuncError(const C: UnicodeString); overload;
 procedure NoSetupFuncError(const C: UnicodeString); overload;
 begin
 begin
   InternalError(Format('Cannot call "%s" function during Setup', [C]));
   InternalError(Format('Cannot call "%s" function during Setup', [C]));
@@ -53,31 +51,15 @@ procedure NoUninstallFuncError(const C: UnicodeString); overload;
 begin
 begin
   InternalError(Format('Cannot call "%s" function during Uninstall', [C]));
   InternalError(Format('Cannot call "%s" function during Uninstall', [C]));
 end;
 end;
-{$ENDIF}
-
-{$IFNDEF UNICODE}
-procedure NoNonUnicodeFuncError(const C: String);
-begin
-  InternalError(Format('Cannot call "%s" function during non Unicode Setup or Uninstall', [C]));
-end;
-{$ENDIF}
 
 
 function StackGetAnsiString(Stack: TPSStack; ItemNo: LongInt): AnsiString;
 function StackGetAnsiString(Stack: TPSStack; ItemNo: LongInt): AnsiString;
 begin
 begin
-{$IFDEF UNICODE}
   Result := Stack.GetAnsiString(ItemNo);
   Result := Stack.GetAnsiString(ItemNo);
-{$ELSE}
-  Result := Stack.GetString(ItemNo);
-{$ENDIF}
 end;
 end;
 
 
 procedure StackSetAnsiString(Stack: TPSStack; ItemNo: LongInt; const Data: AnsiString);
 procedure StackSetAnsiString(Stack: TPSStack; ItemNo: LongInt; const Data: AnsiString);
 begin
 begin
-{$IFDEF UNICODE}
   Stack.SetAnsiString(ItemNo, Data);
   Stack.SetAnsiString(ItemNo, Data);
-{$ELSE}
-  Stack.SetString(ItemNo, Data);
-{$ENDIF}
 end;
 end;
 
 
 function GetMainForm: TMainForm;
 function GetMainForm: TMainForm;
@@ -862,31 +844,19 @@ begin
   end else if Proc.Name = 'GETMD5OFSTRING' then begin
   end else if Proc.Name = 'GETMD5OFSTRING' then begin
     Stack.SetString(PStart, MD5DigestToString(GetMD5OfAnsiString(StackGetAnsiString(Stack, PStart-1))));
     Stack.SetString(PStart, MD5DigestToString(GetMD5OfAnsiString(StackGetAnsiString(Stack, PStart-1))));
   end else if Proc.Name = 'GETMD5OFUNICODESTRING' then begin
   end else if Proc.Name = 'GETMD5OFUNICODESTRING' then begin
-{$IFDEF UNICODE}
     Stack.SetString(PStart, MD5DigestToString(GetMD5OfUnicodeString(Stack.GetString(PStart-1))));
     Stack.SetString(PStart, MD5DigestToString(GetMD5OfUnicodeString(Stack.GetString(PStart-1))));
-{$ELSE}
-    NoNonUnicodeFuncError(Proc.Name);
-{$ENDIF}
   end else if Proc.Name = 'GETSHA1OFFILE' then begin
   end else if Proc.Name = 'GETSHA1OFFILE' then begin
     Stack.SetString(PStart, SHA1DigestToString(GetSHA1OfFile(ScriptFuncDisableFsRedir, Stack.GetString(PStart-1))));
     Stack.SetString(PStart, SHA1DigestToString(GetSHA1OfFile(ScriptFuncDisableFsRedir, Stack.GetString(PStart-1))));
   end else if Proc.Name = 'GETSHA1OFSTRING' then begin
   end else if Proc.Name = 'GETSHA1OFSTRING' then begin
     Stack.SetString(PStart, SHA1DigestToString(GetSHA1OfAnsiString(StackGetAnsiString(Stack, PStart-1))));
     Stack.SetString(PStart, SHA1DigestToString(GetSHA1OfAnsiString(StackGetAnsiString(Stack, PStart-1))));
   end else if Proc.Name = 'GETSHA1OFUNICODESTRING' then begin
   end else if Proc.Name = 'GETSHA1OFUNICODESTRING' then begin
-{$IFDEF UNICODE}
     Stack.SetString(PStart, SHA1DigestToString(GetSHA1OfUnicodeString(Stack.GetString(PStart-1))));
     Stack.SetString(PStart, SHA1DigestToString(GetSHA1OfUnicodeString(Stack.GetString(PStart-1))));
-{$ELSE}
-    NoNonUnicodeFuncError(Proc.Name);
-{$ENDIF}
   end else if Proc.Name = 'GETSHA256OFFILE' then begin
   end else if Proc.Name = 'GETSHA256OFFILE' then begin
     Stack.SetString(PStart, GetSHA256OfFile(ScriptFuncDisableFsRedir, Stack.GetString(PStart-1)));
     Stack.SetString(PStart, GetSHA256OfFile(ScriptFuncDisableFsRedir, Stack.GetString(PStart-1)));
   end else if Proc.Name = 'GETSHA256OFSTRING' then begin
   end else if Proc.Name = 'GETSHA256OFSTRING' then begin
     Stack.SetString(PStart, GetSHA256OfAnsiString(StackGetAnsiString(Stack, PStart-1)));
     Stack.SetString(PStart, GetSHA256OfAnsiString(StackGetAnsiString(Stack, PStart-1)));
   end else if Proc.Name = 'GETSHA256OFUNICODESTRING' then begin
   end else if Proc.Name = 'GETSHA256OFUNICODESTRING' then begin
-{$IFDEF UNICODE}
     Stack.SetString(PStart, GetSHA256OfUnicodeString(Stack.GetString(PStart-1)));
     Stack.SetString(PStart, GetSHA256OfUnicodeString(Stack.GetString(PStart-1)));
-{$ELSE}
-    NoNonUnicodeFuncError(Proc.Name);
-{$ENDIF}
   end else if Proc.Name = 'GETSPACEONDISK' then begin
   end else if Proc.Name = 'GETSPACEONDISK' then begin
     if GetSpaceOnDisk(ScriptFuncDisableFsRedir, Stack.GetString(PStart-1), FreeBytes, TotalBytes) then begin
     if GetSpaceOnDisk(ScriptFuncDisableFsRedir, Stack.GetString(PStart-1), FreeBytes, TotalBytes) then begin
       if Stack.GetBool(PStart-2) then begin
       if Stack.GetBool(PStart-2) then begin
@@ -1413,19 +1383,19 @@ begin
   end else if Proc.Name = 'SAMETEXT' then begin
   end else if Proc.Name = 'SAMETEXT' then begin
     Stack.SetBool(PStart, CompareText(Stack.GetString(PStart-1), Stack.GetString(PStart-2)) = 0);
     Stack.SetBool(PStart, CompareText(Stack.GetString(PStart-1), Stack.GetString(PStart-2)) = 0);
   end else if Proc.Name = 'GETDATETIMESTRING' then begin
   end else if Proc.Name = 'GETDATETIMESTRING' then begin
-    OldDateSeparator := {$IFDEF IS_DXE}FormatSettings.{$ENDIF}DateSeparator;
-    OldTimeSeparator := {$IFDEF IS_DXE}FormatSettings.{$ENDIF}TimeSeparator;
+    OldDateSeparator := FormatSettings.DateSeparator;
+    OldTimeSeparator := FormatSettings.TimeSeparator;
     try
     try
       NewDateSeparator := Stack.GetString(PStart-2)[1];
       NewDateSeparator := Stack.GetString(PStart-2)[1];
       NewTimeSeparator := Stack.GetString(PStart-3)[1];
       NewTimeSeparator := Stack.GetString(PStart-3)[1];
       if NewDateSeparator <> #0 then
       if NewDateSeparator <> #0 then
-        {$IFDEF IS_DXE}FormatSettings.{$ENDIF}DateSeparator := NewDateSeparator;
+        FormatSettings.DateSeparator := NewDateSeparator;
       if NewTimeSeparator <> #0 then
       if NewTimeSeparator <> #0 then
-        {$IFDEF IS_DXE}FormatSettings.{$ENDIF}TimeSeparator := NewTimeSeparator;
+        FormatSettings.TimeSeparator := NewTimeSeparator;
       Stack.SetString(PStart, FormatDateTime(Stack.GetString(PStart-1), Now()));
       Stack.SetString(PStart, FormatDateTime(Stack.GetString(PStart-1), Now()));
     finally
     finally
-      {$IFDEF IS_DXE}FormatSettings.{$ENDIF}TimeSeparator := OldTimeSeparator;
-      {$IFDEF IS_DXE}FormatSettings.{$ENDIF}DateSeparator := OldDateSeparator;
+      FormatSettings.TimeSeparator := OldTimeSeparator;
+      FormatSettings.DateSeparator := OldDateSeparator;
     end;
     end;
   end else if Proc.Name = 'SYSERRORMESSAGE' then begin
   end else if Proc.Name = 'SYSERRORMESSAGE' then begin
     Stack.SetString(PStart, Win32ErrorString(Stack.GetInt(PStart-1)));
     Stack.SetString(PStart, Win32ErrorString(Stack.GetInt(PStart-1)));
@@ -1480,45 +1450,6 @@ begin
   end;
   end;
 end;
 end;
 
 
-{$IFNDEF IS_D7}
-procedure _FmtStr(var Result: string; const Format: string;
-  const Args: array of const);
-var
-  Len, BufLen: Integer;
-  Buffer: array[0..4095] of Char;
-begin
-  BufLen := SizeOf(Buffer);
-  if Length(Format) < (sizeof(Buffer) - (sizeof(Buffer) div 4)) then
-    Len := FormatBuf(Buffer, sizeof(Buffer) - 1, Pointer(Format)^, Length(Format), Args)
-  else
-  begin
-    BufLen := Length(Format);
-    Len := BufLen;
-  end;
-  if Len >= BufLen - 1 then
-  begin
-    while Len >= BufLen - 1 do
-    begin
-      Inc(BufLen, BufLen);
-      Result := '';          // prevent copying of existing data, for speed
-      SetLength(Result, BufLen);
-      Len := FormatBuf(Pointer(Result)^, BufLen - 1, Pointer(Format)^,
-      Length(Format), Args);
-    end;
-    SetLength(Result, Len);
-  end
-  else
-    SetString(Result, Buffer, Len);
-end;
-
-{ We use the Format/FmtStr functions from Delphi 7 because Delphi 2's Format
-  raises an exception if the result is more than 4096 characters. }
-function _Format(const Format: string; const Args: array of const): string;
-begin
-  _FmtStr(Result, Format, Args);
-end;
-{$ENDIF}
-
 { VerInfo }
 { VerInfo }
 function VerInfoProc(Caller: TPSExec; Proc: TPSExternalProcRec; Global, Stack: TPSStack): Boolean;
 function VerInfoProc(Caller: TPSExec; Proc: TPSExternalProcRec; Global, Stack: TPSStack): Boolean;
 var
 var
@@ -1694,16 +1625,15 @@ function OtherProc(Caller: TPSExec; Proc: TPSExternalProcRec; Global, Stack: TPS
     Code: TPSError;
     Code: TPSError;
     E: TObject;
     E: TObject;
   begin
   begin
-    Code := Caller.{$IFDEF UNICODE} LastEx {$ELSE} ExceptionCode {$ENDIF};
+    Code := Caller.LastEx;
     if Code = erNoError then
     if Code = erNoError then
       Result := '(There is no current exception)'
       Result := '(There is no current exception)'
     else begin
     else begin
-      E := Caller.{$IFDEF UNICODE} LastExObject {$ELSE} ExceptionObject {$ENDIF};
+      E := Caller.LastExObject;
       if Assigned(E) and (E is Exception) then
       if Assigned(E) and (E is Exception) then
         Result := Exception(E).Message
         Result := Exception(E).Message
       else
       else
-        Result := String(PSErrorToString(Code, Caller.
-          {$IFDEF UNICODE} LastExParam {$ELSE} ExceptionString {$ENDIF}));
+        Result := String(PSErrorToString(Code, Caller.LastExParam));
     end;
     end;
   end;
   end;
 
 
@@ -1799,10 +1729,6 @@ function OtherProc(Caller: TPSExec; Proc: TPSExternalProcRec; Global, Stack: TPS
     I, N: Integer;
     I, N: Integer;
     S: String;
     S: String;
   begin
   begin
-{$IFNDEF UNICODE}
-    if UTF8 then
-      NoNonUnicodeFuncError('SAVESTRINGSTOUTF8FILE');
-{$ENDIF}
     try
     try
       if Append then
       if Append then
         F := TTextFileWriterRedir.Create(ScriptFuncDisableFsRedir, FileName, fdOpenAlways, faWrite, fsNone)
         F := TTextFileWriterRedir.Create(ScriptFuncDisableFsRedir, FileName, fdOpenAlways, faWrite, fsNone)
@@ -1814,14 +1740,10 @@ function OtherProc(Caller: TPSExec; Proc: TPSExternalProcRec; Global, Stack: TPS
         N := PSDynArrayGetLength(Pointer(Arr.Dta^), Arr.aType);
         N := PSDynArrayGetLength(Pointer(Arr.Dta^), Arr.aType);
         for I := 0 to N-1 do begin
         for I := 0 to N-1 do begin
           S := VNGetString(PSGetArrayField(Arr^, I));
           S := VNGetString(PSGetArrayField(Arr^, I));
-{$IFDEF UNICODE}
           if not UTF8 then
           if not UTF8 then
             F.WriteAnsiLine(AnsiString(S))
             F.WriteAnsiLine(AnsiString(S))
           else
           else
             F.WriteLine(S);
             F.WriteLine(S);
-{$ELSE}
-          F.WriteLine(S);
-{$ENDIF}
         end;
         end;
       finally
       finally
         F.Free;
         F.Free;
@@ -2124,7 +2046,7 @@ begin
   ScriptInterpreter.RegisterDelphiFunction(@_FindNext, 'FindNext', cdRegister);
   ScriptInterpreter.RegisterDelphiFunction(@_FindNext, 'FindNext', cdRegister);
   ScriptInterpreter.RegisterDelphiFunction(@_FindClose, 'FindClose', cdRegister);
   ScriptInterpreter.RegisterDelphiFunction(@_FindClose, 'FindClose', cdRegister);
   ScriptInterpreter.RegisterDelphiFunction(@_FmtMessage, 'FmtMessage', cdRegister);
   ScriptInterpreter.RegisterDelphiFunction(@_FmtMessage, 'FmtMessage', cdRegister);
-  ScriptInterpreter.RegisterDelphiFunction({$IFNDEF IS_D7} @_Format {$ELSE} @Format {$ENDIF}, 'Format', cdRegister);
+  ScriptInterpreter.RegisterDelphiFunction(@Format, 'Format', cdRegister);
   ScriptInterpreter.RegisterDelphiFunction(@_GetWindowsVersionEx, 'GetWindowsVersionEx', cdRegister); 
   ScriptInterpreter.RegisterDelphiFunction(@_GetWindowsVersionEx, 'GetWindowsVersionEx', cdRegister); 
 end;
 end;