Przeglądaj źródła

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

Martijn Laan 1 rok temu
rodzic
commit
e12c908072
5 zmienionych plików z 33 dodań i 369 usunięć
  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
-  Copyright (C) 1997-2010 Jordan Russell
+  Copyright (C) 1997-2024 Jordan Russell
   Portions by Martijn Laan
   For conditions of distribution and use, see LICENSE.TXT.
 
   Functions for browsing for folders/files
-
-  $jrsoftware: issrc/Projects/BrowseFunc.pas,v 1.9 2010/09/10 01:08:44 jr Exp $
 }
 
 interface
@@ -33,7 +31,7 @@ function NewGetSaveFileName(const Prompt: String; var FileName: String;
 implementation
 
 uses
-  CommDlg, ShlObj, {$IFNDEF Delphi3orHigher} Ole2, {$ELSE} ActiveX, {$ENDIF}
+  CommDlg, ShlObj, ActiveX,
   PathFunc;
 
 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 IsMultiByteString(const S: AnsiString): 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 RemoveAccelChar(const S: String): String;
 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 IntMax(const A, B: Integer): Integer;
 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 SetNTFSCompression(const FileOrDir: String; Compress: Boolean): Boolean;
 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 ShutdownBlockReasonDestroy(Wnd: HWND): 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 CreateMutex(const MutexName: String);
 
-{$IFNDEF UNICODE}
-var
-  ConstLeadBytes: PLeadByteSet = nil;
-{$ENDIF}
-
 implementation
 
 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. }
 
@@ -176,9 +154,8 @@ function SHGetMalloc(var ppMalloc: IMalloc): HResult; stdcall; external shell32
 function SHGetSpecialFolderLocation(hwndOwner: HWND; nFolder: Integer;
   var ppidl: PItemIDList): HResult; stdcall; external shell32 name 'SHGetSpecialFolderLocation';
 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;
 begin
@@ -574,11 +551,6 @@ begin
                    Exit;
                  end;
                end;
-        else
-          {$IFNDEF UNICODE}
-          if S[Result] in ConstLeadBytes^ then
-            Inc(Result);
-          {$ENDIF}
         end;
         Inc(Result);
       end;
@@ -623,11 +595,6 @@ begin
              Delete(S, I+1, 2);
              S[I] := Chr(C);
            end;
-    else
-      {$IFNDEF UNICODE}
-      if S[I] in ConstLeadBytes^ then
-        Inc(I);
-      {$ENDIF}
     end;
     Inc(I);
   end;
@@ -652,13 +619,8 @@ begin
       if I = 0 then
         Break;
     end
-    else begin
-      {$IFNDEF UNICODE}
-      if S[I] in ConstLeadBytes^ then
-        Inc(I);
-      {$ENDIF}
+    else
       Inc(I);
-    end;
   end;
 end;
 
@@ -719,18 +681,13 @@ function GetSysWow64Dir: String;
   Returns '' if there is no SysWow64 directory (e.g. running 32-bit Windows). }
 var
   GetSystemWow64DirectoryFunc: function(
-    lpBuffer: {$IFDEF UNICODE} PWideChar {$ELSE} PAnsiChar {$ENDIF};
-    uSize: UINT): UINT; stdcall;
+    lpBuffer: PWideChar; uSize: UINT): UINT; stdcall;
   Res: Integer;
   Buf: array[0..MAX_PATH] of Char;
 begin
   Result := '';
   GetSystemWow64DirectoryFunc := GetProcAddress(GetModuleHandle(kernel32),
-    {$IFDEF UNICODE}
-      'GetSystemWow64DirectoryW'
-    {$ELSE}
-      'GetSystemWow64DirectoryA'
-    {$ENDIF} );
+      'GetSystemWow64DirectoryW');
   if Assigned(GetSystemWow64DirectoryFunc) then begin
     Res := GetSystemWow64DirectoryFunc(Buf, SizeOf(Buf) div SizeOf(Buf[0]));
     if (Res > 0) and (Res < SizeOf(Buf) div SizeOf(Buf[0])) then
@@ -935,8 +892,7 @@ end;
 
 var
   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;
   const Name: PChar): Longint;
@@ -946,11 +902,7 @@ begin
   else begin
     if @RegDeleteKeyExFunc = nil then
       RegDeleteKeyExFunc := GetProcAddress(GetModuleHandle(advapi32),
-        {$IFDEF UNICODE}
-          'RegDeleteKeyExW'
-        {$ELSE}
-          'RegDeleteKeyExA'
-        {$ENDIF} );
+          'RegDeleteKeyExW');
     if Assigned(RegDeleteKeyExFunc) then
       Result := RegDeleteKeyExFunc(Key, Name, KEY_WOW64_64KEY, 0)
     else
@@ -1050,8 +1002,7 @@ var
   StringSid: PWideChar;
 begin
   Result := '';
-  if not OpenProcessToken(GetCurrentProcess, TOKEN_QUERY,
-      {$IFDEF Delphi3orHigher} Token {$ELSE} @Token {$ENDIF}) then
+  if not OpenProcessToken(GetCurrentProcess, TOKEN_QUERY, Token) then
     Exit;
   UserInfo := nil;
   try
@@ -1200,42 +1151,6 @@ begin
   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;
 { Platform-independent version of GetUserDefaultUILanguage. May return 0 in
   case of failure. }
@@ -1418,49 +1333,6 @@ begin
   SetString(Result, Buffer, Len);
 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;
 { Removes the specified directory including any files/subdirectories inside
   it. Returns True if successful. }

+ 7 - 124
Projects/Compile.pas

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

+ 3 - 14
Projects/Main.pas

@@ -266,8 +266,7 @@ uses
   ShellAPI, ShlObj,
   Msgs, MsgIDs, Install, InstFunc, InstFnc2, RedirFunc, PathFunc,
   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,
   TaskDialog, RegStr;
 
@@ -1259,13 +1258,8 @@ begin
           Inc(I); { Skip closing brace }
       end;
     end
-    else begin
-{$IFNDEF UNICODE}
-      if Result[I] in ConstLeadBytes^ then
-        Inc(I);
-{$ENDIF}
+    else
       Inc(I);
-    end;
   end;
 end;
 
@@ -1484,7 +1478,7 @@ begin
   SHFolderDLLHandle := SafeLoadLibrary(Filename, SEM_NOOPENFILEERRORBOX);
   if SHFolderDLLHandle = 0 then
     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
     InternalError('Failed to get address of SHGetFolderPath function');
 end;
@@ -3737,9 +3731,7 @@ begin
     S := S + SNewLine2 + SetupMessages[msgAboutSetupNote];
   if SetupMessages[msgTranslatorNote] <> '' then
     S := S + SNewLine2 + SetupMessages[msgTranslatorNote];
-{$IFDEF UNICODE}
   StringChangeEx(S, '(C)', #$00A9, True);
-{$ENDIF}
   LoggedMsgBox(S, SetupMessages[msgAboutSetupTitle], mbInformation, MB_OK, False, 0);
 end;
 
@@ -4480,9 +4472,6 @@ end;
 initialization
   InitIsWin64AndProcessorArchitecture;
   InitWindowsVersion;
-{$IFNDEF UNICODE}
-  ConstLeadBytes := @SetupHeader.LeadBytes;
-{$ENDIF}
   InitComponents := TStringList.Create();
   InitTasks := TStringList.Create();
   NewParamsForCode := TStringList.Create();

+ 13 - 91
Projects/ScriptFunc_R.pas

@@ -22,8 +22,7 @@ implementation
 
 uses
   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,
   Install, InstFunc, InstFnc2, Msgs, MsgIDs, NewDisk, BrowseFunc, Wizard, VerInfo,
   SetupTypes, Int64Em, MD5, SHA1, Logging, SetupForm, RegDLL, Helper,
@@ -33,17 +32,16 @@ var
   ScaleBaseUnitsInitialized: Boolean;
   ScaleBaseUnitX, ScaleBaseUnitY: Integer;
 
-procedure NoSetupFuncError(const C: AnsiString);{$IFDEF UNICODE} overload;{$ENDIF}
+procedure NoSetupFuncError(const C: AnsiString); overload;
 begin
   InternalError(Format('Cannot call "%s" function during Setup', [C]));
 end;
 
-procedure NoUninstallFuncError(const C: AnsiString);{$IFDEF UNICODE} overload;{$ENDIF}
+procedure NoUninstallFuncError(const C: AnsiString); overload;
 begin
   InternalError(Format('Cannot call "%s" function during Uninstall', [C]));
 end;
 
-{$IFDEF UNICODE}
 procedure NoSetupFuncError(const C: UnicodeString); overload;
 begin
   InternalError(Format('Cannot call "%s" function during Setup', [C]));
@@ -53,31 +51,15 @@ procedure NoUninstallFuncError(const C: UnicodeString); overload;
 begin
   InternalError(Format('Cannot call "%s" function during Uninstall', [C]));
 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;
 begin
-{$IFDEF UNICODE}
   Result := Stack.GetAnsiString(ItemNo);
-{$ELSE}
-  Result := Stack.GetString(ItemNo);
-{$ENDIF}
 end;
 
 procedure StackSetAnsiString(Stack: TPSStack; ItemNo: LongInt; const Data: AnsiString);
 begin
-{$IFDEF UNICODE}
   Stack.SetAnsiString(ItemNo, Data);
-{$ELSE}
-  Stack.SetString(ItemNo, Data);
-{$ENDIF}
 end;
 
 function GetMainForm: TMainForm;
@@ -862,31 +844,19 @@ begin
   end else if Proc.Name = 'GETMD5OFSTRING' then begin
     Stack.SetString(PStart, MD5DigestToString(GetMD5OfAnsiString(StackGetAnsiString(Stack, PStart-1))));
   end else if Proc.Name = 'GETMD5OFUNICODESTRING' then begin
-{$IFDEF UNICODE}
     Stack.SetString(PStart, MD5DigestToString(GetMD5OfUnicodeString(Stack.GetString(PStart-1))));
-{$ELSE}
-    NoNonUnicodeFuncError(Proc.Name);
-{$ENDIF}
   end else if Proc.Name = 'GETSHA1OFFILE' then begin
     Stack.SetString(PStart, SHA1DigestToString(GetSHA1OfFile(ScriptFuncDisableFsRedir, Stack.GetString(PStart-1))));
   end else if Proc.Name = 'GETSHA1OFSTRING' then begin
     Stack.SetString(PStart, SHA1DigestToString(GetSHA1OfAnsiString(StackGetAnsiString(Stack, PStart-1))));
   end else if Proc.Name = 'GETSHA1OFUNICODESTRING' then begin
-{$IFDEF UNICODE}
     Stack.SetString(PStart, SHA1DigestToString(GetSHA1OfUnicodeString(Stack.GetString(PStart-1))));
-{$ELSE}
-    NoNonUnicodeFuncError(Proc.Name);
-{$ENDIF}
   end else if Proc.Name = 'GETSHA256OFFILE' then begin
     Stack.SetString(PStart, GetSHA256OfFile(ScriptFuncDisableFsRedir, Stack.GetString(PStart-1)));
   end else if Proc.Name = 'GETSHA256OFSTRING' then begin
     Stack.SetString(PStart, GetSHA256OfAnsiString(StackGetAnsiString(Stack, PStart-1)));
   end else if Proc.Name = 'GETSHA256OFUNICODESTRING' then begin
-{$IFDEF UNICODE}
     Stack.SetString(PStart, GetSHA256OfUnicodeString(Stack.GetString(PStart-1)));
-{$ELSE}
-    NoNonUnicodeFuncError(Proc.Name);
-{$ENDIF}
   end else if Proc.Name = 'GETSPACEONDISK' then begin
     if GetSpaceOnDisk(ScriptFuncDisableFsRedir, Stack.GetString(PStart-1), FreeBytes, TotalBytes) then begin
       if Stack.GetBool(PStart-2) then begin
@@ -1413,19 +1383,19 @@ begin
   end else if Proc.Name = 'SAMETEXT' then begin
     Stack.SetBool(PStart, CompareText(Stack.GetString(PStart-1), Stack.GetString(PStart-2)) = 0);
   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
       NewDateSeparator := Stack.GetString(PStart-2)[1];
       NewTimeSeparator := Stack.GetString(PStart-3)[1];
       if NewDateSeparator <> #0 then
-        {$IFDEF IS_DXE}FormatSettings.{$ENDIF}DateSeparator := NewDateSeparator;
+        FormatSettings.DateSeparator := NewDateSeparator;
       if NewTimeSeparator <> #0 then
-        {$IFDEF IS_DXE}FormatSettings.{$ENDIF}TimeSeparator := NewTimeSeparator;
+        FormatSettings.TimeSeparator := NewTimeSeparator;
       Stack.SetString(PStart, FormatDateTime(Stack.GetString(PStart-1), Now()));
     finally
-      {$IFDEF IS_DXE}FormatSettings.{$ENDIF}TimeSeparator := OldTimeSeparator;
-      {$IFDEF IS_DXE}FormatSettings.{$ENDIF}DateSeparator := OldDateSeparator;
+      FormatSettings.TimeSeparator := OldTimeSeparator;
+      FormatSettings.DateSeparator := OldDateSeparator;
     end;
   end else if Proc.Name = 'SYSERRORMESSAGE' then begin
     Stack.SetString(PStart, Win32ErrorString(Stack.GetInt(PStart-1)));
@@ -1480,45 +1450,6 @@ begin
   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 }
 function VerInfoProc(Caller: TPSExec; Proc: TPSExternalProcRec; Global, Stack: TPSStack): Boolean;
 var
@@ -1694,16 +1625,15 @@ function OtherProc(Caller: TPSExec; Proc: TPSExternalProcRec; Global, Stack: TPS
     Code: TPSError;
     E: TObject;
   begin
-    Code := Caller.{$IFDEF UNICODE} LastEx {$ELSE} ExceptionCode {$ENDIF};
+    Code := Caller.LastEx;
     if Code = erNoError then
       Result := '(There is no current exception)'
     else begin
-      E := Caller.{$IFDEF UNICODE} LastExObject {$ELSE} ExceptionObject {$ENDIF};
+      E := Caller.LastExObject;
       if Assigned(E) and (E is Exception) then
         Result := Exception(E).Message
       else
-        Result := String(PSErrorToString(Code, Caller.
-          {$IFDEF UNICODE} LastExParam {$ELSE} ExceptionString {$ENDIF}));
+        Result := String(PSErrorToString(Code, Caller.LastExParam));
     end;
   end;
 
@@ -1799,10 +1729,6 @@ function OtherProc(Caller: TPSExec; Proc: TPSExternalProcRec; Global, Stack: TPS
     I, N: Integer;
     S: String;
   begin
-{$IFNDEF UNICODE}
-    if UTF8 then
-      NoNonUnicodeFuncError('SAVESTRINGSTOUTF8FILE');
-{$ENDIF}
     try
       if Append then
         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);
         for I := 0 to N-1 do begin
           S := VNGetString(PSGetArrayField(Arr^, I));
-{$IFDEF UNICODE}
           if not UTF8 then
             F.WriteAnsiLine(AnsiString(S))
           else
             F.WriteLine(S);
-{$ELSE}
-          F.WriteLine(S);
-{$ENDIF}
         end;
       finally
         F.Free;
@@ -2124,7 +2046,7 @@ begin
   ScriptInterpreter.RegisterDelphiFunction(@_FindNext, 'FindNext', cdRegister);
   ScriptInterpreter.RegisterDelphiFunction(@_FindClose, 'FindClose', 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); 
 end;