瀏覽代碼

Merge remote-tracking branch 'origin/same_cmd'

Martijn Laan 10 年之前
父節點
當前提交
9da63f6fe8

+ 1 - 1
Projects/CompTypes.pas

@@ -6,7 +6,7 @@ unit CompTypes;
   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.
 
 
-  Types and functions used by both IDE, ISCC and ISPPCC units
+  Types and functions used by both IDE and ISCC units
 }
 }
 
 
 interface
 interface

+ 180 - 19
Projects/ISCC.dpr

@@ -32,10 +32,23 @@ type
     Next: PScriptLine;
     Next: PScriptLine;
   end;
   end;
 
 
+  TOptionID = 0..25;
+
+  TOptions = packed set of TOptionID;
+
+  TIsppOptions = packed record
+    ParserOptions: TOptions;
+    Options: TOptions;
+    VerboseLevel: Byte;
+    InlineStart: string[7];
+    InlineEnd: string[7];
+    SpanSymbol: AnsiChar;
+  end;
+
 var
 var
   StdOutHandle, StdErrHandle: THandle;
   StdOutHandle, StdErrHandle: THandle;
   ScriptFilename: String;
   ScriptFilename: String;
-  Output, OutputPath, OutputFilename, SignTool: String;
+  IncludePath, Definitions, Output, OutputPath, OutputFilename, SignTool: String;
   ScriptLines, NextScriptLine: PScriptLine;
   ScriptLines, NextScriptLine: PScriptLine;
   CurLine: String;
   CurLine: String;
   StartTime, EndTime: DWORD;
   StartTime, EndTime: DWORD;
@@ -43,6 +56,8 @@ var
   SignTools: TStringList;
   SignTools: TStringList;
   ProgressPoint: TPoint;
   ProgressPoint: TPoint;
   LastProgress: String;
   LastProgress: String;
+  IsppOptions: TIsppOptions;
+  IsppMode: Boolean;
 
 
 procedure WriteToStdHandle(const H: THandle; S: AnsiString);
 procedure WriteToStdHandle(const H: THandle; S: AnsiString);
 var
 var
@@ -125,7 +140,7 @@ begin
     try
     try
       L.LineText := F.ReadLine;
       L.LineText := F.ReadLine;
       if Pos(#0, L.LineText) <> 0 then
       if Pos(#0, L.LineText) <> 0 then
-        raise Exception.CreateFmt('Illegal null character on line %d', [LineNumber]); 
+        raise Exception.CreateFmt('Illegal null character on line %d', [LineNumber]);
       L.Next := nil;
       L.Next := nil;
     except
     except
       Dispose(L);
       Dispose(L);
@@ -249,11 +264,89 @@ end;
 
 
 procedure ProcessCommandLine;
 procedure ProcessCommandLine;
 
 
+  procedure SetOption(var Options: TOptions; Option: Char; Value: Boolean);
+  begin
+    if Value then
+      Include(Options, Ord(UpCase(Option)) - Ord('A'))
+    else
+      Exclude(Options, Ord(UpCase(Option)) - Ord('A'))
+  end;
+
+  procedure InitIsppOptions(var Opt: TIsppOptions; var Definitions, IncludePath: String);
+  begin
+    with Opt do begin
+      SetOption(Options, 'C', True);
+      SetOption(ParserOptions, 'B', True);
+      SetOption(ParserOptions, 'P', True);
+      VerboseLevel := 0;
+      InlineStart := '{#';
+      InlineEnd := '}';
+    end;
+
+    Definitions := 'ISPPCC_INVOKED';
+    IncludePath := ExtractFileDir(NewParamStr(0));
+  end;
+
+  procedure ReadOptionsParam(var Options: TOptions; Symbol: Char);
+  var
+    I: Integer;
+    S: String;
+  begin
+    for I := 1 to NewParamCount do
+    begin
+      S := NewParamStr(I);
+      if Length(S) = 4 then
+        if ((S[1] = '/') or (S[1] = '-')) and (UpCase(S[2]) = Symbol) then
+          case S[4] of
+            '-': SetOption(Options, S[3], False);
+            '+': SetOption(Options, S[3], True)
+          else
+            raise Exception.CreateFmt('Invalid command line option: %s', [S]);
+          end;
+    end;
+  end;
+
+  function IsParam(const S: String): Boolean;
+  begin
+    Result := (Length(S) >= 2) and ((S[1] = '/') or (S[1] = '-'));
+  end;
+
+  function GetParam(var S: String; Symbols: String): Boolean;
+  begin
+    Result := IsParam(S) and
+      (CompareText(Copy(S, 2, Length(Symbols)), Symbols) = 0);
+    if Result then
+      S := Copy(S, 2 + Length(Symbols), MaxInt);
+  end;
+
+  function FindParam(var Index: Integer; Symbols: String): String;
+  var
+    I: Integer;
+    S: String;
+  begin
+    for I := Index to NewParamCount do
+    begin
+      S := NewParamStr(I);
+      if IsParam(S) and (CompareText(Copy(S, 2, Length(Symbols)), Symbols) = 0) then
+      begin
+        Result := Copy(S, 2 + Length(Symbols), MaxInt);
+        Index := I + 1;
+        Exit;
+      end;
+    end;
+    Index := MaxInt;
+    Result := '';
+  end;
+
   procedure ShowBanner;
   procedure ShowBanner;
   begin
   begin
     WriteStdOut('Inno Setup 5 Command-Line Compiler');
     WriteStdOut('Inno Setup 5 Command-Line Compiler');
     WriteStdOut('Copyright (C) 1997-2014 Jordan Russell. All rights reserved.');
     WriteStdOut('Copyright (C) 1997-2014 Jordan Russell. All rights reserved.');
     WriteStdOut('Portions Copyright (C) 2000-2014 Martijn Laan');
     WriteStdOut('Portions Copyright (C) 2000-2014 Martijn Laan');
+    if IsppMode then begin
+      WriteStdOut('Inno Setup Preprocessor');
+      WriteStdOut('Copyright (C) 2001-2004 Alex Yackimoff. All rights reserved.');
+    end;
     WriteStdOut('');
     WriteStdOut('');
   end;
   end;
 
 
@@ -268,36 +361,70 @@ procedure ProcessCommandLine;
     WriteStdErr('  /S<name>=<command> Sets a SignTool with the specified name and command');
     WriteStdErr('  /S<name>=<command> Sets a SignTool with the specified name and command');
     WriteStdErr('  /Q                 Quiet compile (print error messages only)');
     WriteStdErr('  /Q                 Quiet compile (print error messages only)');
     WriteStdErr('  /Qp                Enable quiet compile while still displaying progress');
     WriteStdErr('  /Qp                Enable quiet compile while still displaying progress');
+    if IsppMode then begin
+      WriteStdErr('  /D<name>[=<value>] Emulate #define public <name> <value>');
+      WriteStdErr('  /$<letter>(+|-)    Emulate #pragma option -<letter>(+|-)');
+      WriteStdErr('  /P<letter>(+|-)    Emulate #pragma parseroption -<letter>(+|-)');
+      WriteStdErr('  /I<paths>          Emulate #pragma include <paths>');
+      WriteStdErr('  /{#<string>        Emulate #pragma inlinestart <string>');
+      WriteStdErr('  /}<string>         Emulate #pragma inlineend <string>');
+      WriteStdErr('  /V<number>         Emulate #pragma verboselevel <number>');
+    end;
     WriteStdErr('  /?                 Show this help screen');
     WriteStdErr('  /?                 Show this help screen');
+    if IsppMode then begin
+      WriteStdErr('');
+      WriteStdErr('Example: iscc /$c- /Pu+ "/DLic=Trial Lic.txt" /IC:\INC;D:\INC scriptfile.iss');
+      WriteStdErr('');
+    end;
   end;
   end;
 
 
 var
 var
   I: Integer;
   I: Integer;
   S: String;
   S: String;
 begin
 begin
+  if IsppMode then begin
+    InitIsppOptions(IsppOptions, Definitions, IncludePath);
+    ReadOptionsParam(IsppOptions.Options, '$');
+    ReadOptionsParam(IsppOptions.ParserOptions, 'p');
+  end;
+
   for I := 1 to NewParamCount do begin
   for I := 1 to NewParamCount do begin
     S := NewParamStr(I);
     S := NewParamStr(I);
-    if (S = '') or (S[1] = '/') then begin
-      if CompareText(Copy(S, 1, 2), '/Q') = 0 then
-      begin
+    if (S = '') or IsParam(S) then begin
+      if GetParam(S, 'Q') then begin
         Quiet := True;
         Quiet := True;
-        ShowProgress := CompareText(Copy(S, 3, MaxInt), 'P') = 0;
+        ShowProgress := CompareText(S, 'P') = 0;
       end
       end
-      else if CompareText(Copy(S, 1, 3), '/O-') = 0 then
-        Output := 'no'
-      else if CompareText(Copy(S, 1, 3), '/O+') = 0 then
-        Output := 'yes'
-      else if CompareText(Copy(S, 1, 2), '/O') = 0 then
-        OutputPath := Copy(S, 3, MaxInt)
-      else if CompareText(Copy(S, 1, 2), '/F') = 0 then
-        OutputFilename := Copy(S, 3, MaxInt)
-      else if CompareText(Copy(S, 1, 2), '/S') = 0 then begin
-        SignTool := Copy(S, 3, MaxInt);
+      else if GetParam(S, 'O') then begin
+        if S = '-' then Output := 'no'
+        else if S = '+' then Output := 'yes'
+        else OutputPath := S;
+      end
+      else if GetParam(S, 'F') then
+        OutputFilename := S
+      else if GetParam(S, 'S') then begin
+        SignTool := S;
         if Pos('=', SignTool) = 0 then begin
         if Pos('=', SignTool) = 0 then begin
           ShowBanner;
           ShowBanner;
           WriteStdErr('Invalid option: ' + S);
           WriteStdErr('Invalid option: ' + S);
           Halt(1);
           Halt(1);
         end;
         end;
+      end else if IsppMode and GetParam(S, 'D') then begin
+        if (Pos(';', S) > 0) or (Pos(' ', S) > 0) then
+          S := AddQuotes(S);
+        Definitions := Definitions + ';' + S;
+      end
+      else if IsppMode and GetParam(S, 'I') then begin
+        IncludePath := IncludePath + ';' + S;
+      end
+      else if IsppMode and GetParam(S, '{#') then begin
+        if S <> '' then IsppOptions.InlineStart := AnsiString(S);
+      end
+      else if IsppMode and GetParam(S, '}') then begin
+        if S <> '' then IsppOptions.InlineEnd := AnsiString(S);
+      end
+      else if IsppMode and GetParam(S, 'V') then begin
+        if S <> '' then IsppOptions.VerboseLevel := StrToIntDef(S, 0);
       end
       end
       else if S = '/?' then begin
       else if S = '/?' then begin
         ShowBanner;
         ShowBanner;
@@ -332,6 +459,36 @@ begin
 end;
 end;
 
 
 procedure Go;
 procedure Go;
+
+  procedure AppendOption(var Opts: String; const OptName, OptValue: String);
+  begin
+    Opts := Opts + OptName + '=' + OptValue + #0;
+  end;
+
+  function ConvertOptionsToString(const Options: TOptions): String;
+  var
+    I: TOptionID;
+  begin
+    Result := '';
+    for I := 0 to 25 do
+      if I in Options then
+        Result := Result + Chr(Ord('a') + I);
+  end;
+
+  procedure IsppOptionsToString(var S: String; Opt: TIsppOptions; Definitions, IncludePath: String);
+  begin
+    with Opt do begin
+      AppendOption(S, 'ISPP:ParserOptions', ConvertOptionsToString(ParserOptions));
+      AppendOption(S, 'ISPP:Options', ConvertOptionsToString(Options));
+      AppendOption(S, 'ISPP:VerboseLevel', IntToStr(VerboseLevel));
+      AppendOption(S, 'ISPP:InlineStart', String(InlineStart));
+      AppendOption(S, 'ISPP:InlineEnd', String(InlineEnd));
+    end;
+
+    AppendOption(S, 'ISPP:IncludePath', IncludePath);
+    AppendOption(S, 'ISPP:Definitions', Definitions);
+  end;
+
 var
 var
   ScriptPath: String;
   ScriptPath: String;
   ExitCode: Integer;
   ExitCode: Integer;
@@ -388,11 +545,11 @@ begin
     Params.CallbackProc := CompilerCallbackProc;
     Params.CallbackProc := CompilerCallbackProc;
     Options := '';
     Options := '';
     if Output <> '' then
     if Output <> '' then
-      Options := Options + 'Output=' + Output + #0;
+      AppendOption(Options, 'Output', Output);
     if OutputPath <> '' then
     if OutputPath <> '' then
-      Options := Options + 'OutputDir=' + OutputPath + #0;
+      AppendOption(Options, 'OutputDir', OutputPath);
     if OutputFilename <> '' then
     if OutputFilename <> '' then
-      Options := Options + 'OutputBaseFilename=' + OutputFilename + #0;
+      AppendOption(Options, 'OutputBaseFilename', OutputFilename);
 
 
     ReadSignTools(SignTools);
     ReadSignTools(SignTools);
     for I := 0 to SignTools.Count-1 do
     for I := 0 to SignTools.Count-1 do
@@ -401,6 +558,9 @@ begin
     if SignTool <> '' then
     if SignTool <> '' then
       Options := Options + AddSignToolParam(SignTool);
       Options := Options + AddSignToolParam(SignTool);
 
 
+    if IsppMode then
+      IsppOptionsToString(Options, IsppOptions, Definitions, IncludePath);
+
     Params.Options := PChar(Options);
     Params.Options := PChar(Options);
 
 
     StartTime := GetTickCount;
     StartTime := GetTickCount;
@@ -433,6 +593,7 @@ begin
   StdErrHandle := GetStdHandle(STD_ERROR_HANDLE);
   StdErrHandle := GetStdHandle(STD_ERROR_HANDLE);
   SetConsoleCtrlHandler(@ConsoleCtrlHandler, True);
   SetConsoleCtrlHandler(@ConsoleCtrlHandler, True);
   try
   try
+    IsppMode := FileExists(ExtractFilePath(NewParamStr(0)) + 'ispp.dll');
     ProcessCommandLine;
     ProcessCommandLine;
     Go;
     Go;
   except
   except

+ 0 - 136
Projects/ISPP/ISPPCC.dof

@@ -1,136 +0,0 @@
-[FileVersion]
-Version=7.0
-[Compiler]
-A=8
-B=0
-C=1
-D=1
-E=0
-F=0
-G=1
-H=1
-I=1
-J=0
-K=0
-L=1
-M=0
-N=1
-O=1
-P=1
-Q=0
-R=0
-S=0
-T=0
-U=0
-V=1
-W=0
-X=1
-Y=1
-Z=1
-ShowHints=1
-ShowWarnings=1
-UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
-NamespacePrefix=
-SymbolDeprecated=1
-SymbolLibrary=1
-SymbolPlatform=1
-UnitLibrary=1
-UnitPlatform=1
-UnitDeprecated=1
-HResultCompat=1
-HidingMember=1
-HiddenVirtual=1
-Garbage=1
-BoundsError=1
-ZeroNilCompat=1
-StringConstTruncated=1
-ForLoopVarVarPar=1
-TypedConstVarPar=1
-AsgToTypedConst=1
-CaseLabelRange=1
-ForVariable=1
-ConstructingAbstract=1
-ComparisonFalse=1
-ComparisonTrue=1
-ComparingSignedUnsigned=1
-CombiningSignedUnsigned=1
-UnsupportedConstruct=1
-FileOpen=1
-FileOpenUnitSrc=1
-BadGlobalSymbol=1
-DuplicateConstructorDestructor=1
-InvalidDirective=1
-PackageNoLink=1
-PackageThreadVar=1
-ImplicitImport=1
-HPPEMITIgnored=1
-NoRetVal=1
-UseBeforeDef=1
-ForLoopVarUndef=1
-UnitNameMismatch=1
-NoCFGFileFound=1
-MessageDirective=1
-ImplicitVariants=1
-UnicodeToLocale=1
-LocaleToUnicode=1
-ImagebaseMultiple=1
-SuspiciousTypecast=1
-PrivatePropAccessor=1
-UnsafeType=0
-UnsafeCode=0
-UnsafeCast=0
-[Linker]
-MapFile=0
-OutputObjs=0
-ConsoleApp=1
-DebugInfo=0
-RemoteSymbols=0
-MinStackSize=16384
-MaxStackSize=1048576
-ImageBase=4194304
-ExeDescription=
-[Directories]
-OutputDir=
-UnitOutputDir=
-PackageDLLOutputDir=
-PackageDCPOutputDir=
-SearchPath=
-Packages=vcl;rtl;vclx;indy;vclie;xmlrtl;inetdbbde;inet;inetdbxpress;dbrtl;soaprtl;dsnap;VclSmp;dbexpress;vcldb;dbxcds;inetdb;bdertl;vcldbx;adortl;teeui;teedb;tee;ibxpress;visualclx;visualdbclx;vclactnband;vclshlctrls;dclOfficeXP
-Conditionals=IS_ALLOWD7;PS_MINIVCL;PS_NOWIDESTRING;PS_NOINT64;PS_NOGRAPHCONST
-DebugSourceDirs=
-UsePackages=0
-[Parameters]
-RunParams=
-HostApplication=
-Launcher=
-UseLauncher=0
-DebugCWD=
-[Language]
-ActiveLang=
-ProjectLang=
-RootDir=
-[Version Info]
-IncludeVerInfo=1
-AutoIncBuild=0
-MajorVer=0
-MinorVer=0
-Release=0
-Build=0
-Debug=0
-PreRelease=0
-Special=0
-Private=0
-DLL=0
-Locale=1033
-CodePage=1252
-[Version Info Keys]
-CompanyName=Jordan Russell
-FileDescription=Inno Setup Preprocessor Command-Line Compiler
-FileVersion=0.0.0.0
-InternalName=
-LegalCopyright=Copyright (C) 1997-2010 Jordan Russell. Portions Copyright (C) 2000-2010 Martijn Laan. Copyright © 2001-2004 Alex Yackimoff.
-LegalTrademarks=
-OriginalFilename=
-ProductName=Inno Setup
-ProductVersion=0.0.0.0
-Comments=Inno Setup home page: http://www.innosetup.com

+ 0 - 534
Projects/ISPP/ISPPCC.dpr

@@ -1,534 +0,0 @@
-{
-  Inno Setup Preprocessor
-  Copyright (C) 2001-2002 Alex Yackimoff
-  $Id: ISPPCC.dpr,v 1.29 2011/03/16 08:43:35 mlaan Exp $
-}
-
-program ISPPCC;
-{$APPTYPE CONSOLE}
-
-{
-  Inno Setup
-  Copyright (C) 1997-2014 Jordan Russell
-  Portions by Martijn Laan
-  For conditions of distribution and use, see LICENSE.TXT.
-
-  Command-line compiler
-
-  $xId: ISCC.dpr,v 1.8 2002/04/11 00:06:52 jr Exp $
-}
-
-uses
-  SafeDLLPath in '..\SafeDLLPath.pas',
-  Windows,
-  SysUtils,
-  Classes,
-  PathFunc in '..\..\Components\PathFunc.pas',
-  CmnFunc2 in '..\CmnFunc2.pas',
-  FileClass in '..\FileClass.pas',
-  IsppIntf in 'IsppIntf.pas',
-  IsppBase in 'IsppBase.pas',
-  CompInt in '..\CompInt.pas',
-  Int64Em in '..\Int64Em.pas',
-  CompTypes in '..\CompTypes.pas';
-
-{$R *.res}
-{$R ISPPCC.manifest.res}
-
-{$I ..\VERSION.INC}
-
-type
-  PScriptLine = ^TScriptLine;
-  TScriptLine = record
-    LineText: String;
-    Next: PScriptLine;
-  end;
-
-var
-  StdOutHandle, StdErrHandle: THandle;
-  ScriptFilename: String;
-  ScriptLines, NextScriptLine: PScriptLine;
-  CurLine: String;
-  StartTime, EndTime: DWORD;
-  Quiet, ShowProgress, WantAbort: Boolean;
-  Options: TIsppOptions;
-  SignTools: TStringList;
-  ProgressPoint: TPoint;
-  LastProgress: String;
-
-procedure WriteToStdHandle(const H: THandle; S: AnsiString);
-var
-  BytesWritten: DWORD;
-begin
-  if Copy(S, 1, 1) <> #13 then S := S + #13#10;
-  WriteFile(H, S[1], Length(S), BytesWritten, nil);
-end;
-
-procedure WriteStdOut(const S: String);
-begin
-  WriteToStdHandle(StdOutHandle, AnsiString(S));
-end;
-
-procedure WriteStdErr(const S: String);
-begin
-  WriteToStdHandle(StdErrHandle, AnsiString(S));
-end;
-
-function GetCursorPos: TPoint;
-var
-  CSBI: TConsoleScreenBufferInfo;
-begin
-  if not GetConsoleScreenBufferInfo(StdOutHandle, CSBI) then
-    Exit;
-  Result.X := CSBI.dwCursorPosition.X;
-  Result.Y := CSBI.dwCursorPosition.Y;
-end;
-
-procedure SetCursorPos(const P: TPoint);
-var
-  Coords: TCoord;
-  CSBI: TConsoleScreenBufferInfo;
-begin
-  if not GetConsoleScreenBufferInfo(StdOutHandle, CSBI) then
-    Exit;
-  if P.X < 0 then Exit;
-  if P.Y < 0 then Exit;
-  if P.X > CSBI.dwSize.X then Exit;
-  if P.Y > CSBI.dwSize.Y then Exit;
-  Coords.X := P.X;
-  Coords.Y := P.Y;
-  SetConsoleCursorPosition(StdOutHandle, Coords);
-end;
-
-procedure WriteProgress(const S: String);
-var
-  CSBI: TConsoleScreenBufferInfo;
-  Str: String;
-begin
-  if GetConsoleScreenBufferInfo(StdOutHandle, CSBI) then
-  begin
-    if Length(S) > CSBI.dwSize.X then
-      Str := Copy(S, 1, CSBI.dwSize.X)
-    else
-      Str := Format('%-' + IntToStr(CSBI.dwSize.X) + 's', [S]);
-  end
-  else
-    Str := S;
-
-  WriteToStdHandle(StdOutHandle, AnsiString(Str));
-end;
-
-function ConsoleCtrlHandler(dwCtrlType: DWORD): BOOL; stdcall;
-begin
-  { Abort gracefully when Ctrl+C/Break is pressed }
-  WantAbort := True;
-  Result := True;
-end;
-
-procedure ReadScriptLines(const F: TTextFileReader);
-var
-  LineNumber: Integer;
-  PrevLine, L: PScriptLine;
-begin
-  LineNumber := 1;
-  PrevLine := nil;
-  while not F.Eof do begin
-    New(L);
-    try
-      L.LineText := F.ReadLine;
-      if Pos(#0, L.LineText) <> 0 then
-        raise Exception.CreateFmt('Illegal null character on line %d', [LineNumber]); 
-      L.Next := nil;
-    except
-      Dispose(L);
-      raise;
-    end;
-    if Assigned(PrevLine) then
-      PrevLine.Next := L
-    else begin
-      ScriptLines := L;
-      NextScriptLine := L;
-    end;
-    PrevLine := L;
-    Inc(LineNumber);
-  end;
-end;
-
-procedure FreeScriptLines;
-var
-  L, NextLine: PScriptLine;
-begin
-  L := ScriptLines;
-  ScriptLines := nil;
-  NextScriptLine := nil;
-  while Assigned(L) do begin
-    NextLine := L.Next;
-    Dispose(L);
-    L := NextLine;
-  end;
-end;
-
-function CompilerCallbackProc(Code: Integer; var Data: TCompilerCallbackData;
-  AppData: Longint): Integer; stdcall;
-
-  procedure PrintProgress(Progress: String);
-  var
-    Pt: TPoint;
-  begin
-    if (Progress = '') or (LastProgress = Progress) then
-      Exit;
-
-    Pt := GetCursorPos;
-
-    if Pt.Y <= ProgressPoint.Y then
-      Exit
-    else if ProgressPoint.X < 0 then begin
-      ProgressPoint := Pt;
-      WriteStdOut('');
-      Pt := GetCursorPos;
-    end;
-
-    SetCursorPos(ProgressPoint);
-    WriteProgress(#13 + Progress);
-    LastProgress := Progress;
-    SetCursorPos(Pt);
-  end;
-
-var
-  S, BytesCompressedPerSecond, SecondsRemaining: String;
-begin
-  if WantAbort then begin
-    Result := iscrRequestAbort;
-    Exit;
-  end;
-  Result := iscrSuccess;
-  case Code of
-    iscbReadScript: begin
-        { Note: In Inno Setup 3.0.1 and later we can ignore Data.Reset since
-          it is only True once (when reading the first line). }
-        if Assigned(NextScriptLine) then begin
-          CurLine := NextScriptLine.LineText;
-          NextScriptLine := NextScriptLine.Next;
-          Data.LineRead := PChar(CurLine);
-        end;
-      end;
-    iscbNotifyStatus:
-      if not Quiet then
-        WriteStdOut(Data.StatusMsg)
-      else if ShowProgress then
-        PrintProgress(Trim(Data.StatusMsg));
-    iscbNotifySuccess: begin
-        EndTime := GetTickCount;
-        if not Quiet then begin
-          WriteStdOut('');
-          if Data.OutputExeFilename <> '' then begin
-            WriteStdOut(Format('Successful compile (%.3f sec). ' +
-              'Resulting Setup program filename is:',
-              [(EndTime - StartTime) / 1000]));
-            WriteStdOut(Data.OutputExeFilename);
-          end else
-            WriteStdOut(Format('Successful compile (%.3f sec). ' +
-              'Output was disabled.',
-              [(EndTime - StartTime) / 1000]));
-        end;
-      end;
-    iscbNotifyError:
-      if Assigned(Data.ErrorMsg) then begin
-        S := 'Error';
-        if Data.ErrorLine <> 0 then
-          S := S + Format(' on line %d', [Data.ErrorLine]);
-        if Assigned(Data.ErrorFilename) then
-          S := S + ' in ' + Data.ErrorFilename
-        else if ScriptFilename <> '' then
-          S := S + ' in ' + ScriptFilename;
-        S := S + ': ' + Data.ErrorMsg;
-        WriteStdErr(S);
-      end;
-    iscbNotifyIdle:
-      if ShowProgress and (Data.CompressProgress <> 0) then begin
-        if Data.BytesCompressedPerSecond <> 0 then
-          BytesCompressedPerSecond := Format(' at %.2f kb/s', [Data.BytesCompressedPerSecond / 1024])
-        else
-          BytesCompressedPerSecond := '';
-        if Data.SecondsRemaining <> -1 then
-          SecondsRemaining := Format(', %d seconds remaining', [Data.SecondsRemaining])
-        else
-          SecondsRemaining := '';
-        PrintProgress(Format('Compressing: %.2f%% done%s%s', [Data.CompressProgress / Data.CompressProgressMax * 100, BytesCompressedPerSecond, SecondsRemaining]));
-      end;
-  end;
-end;
-
-procedure PopulateOptions(var Options: TOptions; Symbol: Char);
-var
-  I: Integer;
-  S: string;
-begin
-  for I := 1 to ParamCount do
-  begin
-    S := ParamStr(I);
-    if Length(S) = 4 then
-    if ((S[1] = '/') or (S[1] = '-')) and (UpCase(S[2]) = Symbol) then
-      case S[4] of
-        '-': SetOption(Options, S[3], False);
-        '+': SetOption(Options, S[3], True)
-      else
-        raise Exception.CreateFmt('Invalid command line option: %s', [S]);
-      end;
-  end;
-end;
-
-function IsParam(const S: String): Boolean;
-begin
-  Result := (Length(S) >= 2) and ((S[1] = '/') or (S[1] = '-'));
-end;
-
-function FindParam(var Index: Integer; Symbols: String): String;
-var
-  I: Integer;
-  S: string;
-begin
-  for I := Index to ParamCount do
-  begin
-    S := ParamStr(I);
-    if IsParam(S) and (CompareText(Copy(S, 2, Length(Symbols)), Symbols) = 0) then
-    begin
-      Result := Copy(S, 2 + Length(Symbols), MaxInt);
-      Index := I + 1;
-      Exit;
-    end;
-  end;
-  Index := MaxInt;
-  Result := '';
-end;
-
-function ConvertOptionsToString(const Options: TOptions): String;
-var
-  I: TOptionID;
-begin
-  Result := '';
-  for I := 0 to 25 do
-    if I in Options then
-      Result := Result + Chr(Ord('a') + I);
-end;
-
-procedure AppendOption(var Opts: String; const OptName, OptValue: String);
-begin
-  Opts := Opts + OptName + '=' + OptValue + #0;
-end;
-
-procedure Go;
-
-  procedure ShowBanner;
-  begin
-    WriteStdOut('Inno Setup 5 Command-Line Compiler');
-    WriteStdOut('Copyright (C) 1997-2014 Jordan Russell. All rights reserved.');
-    WriteStdOut('Portions Copyright (C) 2000-2014 Martijn Laan');
-    WriteStdOut('Inno Setup Preprocessor');
-    WriteStdOut('Copyright (C) 2001-2004 Alex Yackimoff. All rights reserved.');
-    WriteStdOut('');
-  end;
-
-  procedure ShowUsage;
-  begin
-    WriteStdErr('Usage:  iscc [options] scriptfile.iss');
-    WriteStdErr('or to read from standard input:  iscc [options] -');
-    WriteStdErr('Options:');
-    WriteStdErr('  /O(+|-)            Enable or disable output (overrides Output)');
-    WriteStdErr('  /O<path>           Output files to specified path (overrides OutputDir)');
-    WriteStdErr('  /F<filename>       Overrides OutputBaseFilename with the specified filename');
-    WriteStdErr('  /S<name>=<command> Sets a SignTool with the specified name and command');
-    WriteStdErr('  /Q                 Quiet compile (print error messages only)');
-    WriteStdErr('  /Qp                Enable quiet compile while still displaying progress');
-    WriteStdErr('  /D<name>[=<value>] Emulate #define public <name> <value>');
-    WriteStdErr('  /$<letter>(+|-)    Emulate #pragma option -<letter>(+|-)');
-    WriteStdErr('  /P<letter>(+|-)    Emulate #pragma parseroption -<letter>(+|-)');
-    WriteStdErr('  /I<paths>          Emulate #pragma include <paths>');
-    WriteStdErr('  /{#<string>        Emulate #pragma inlinestart <string>');
-    WriteStdErr('  /}<string>         Emulate #pragma inlineend <string>');
-    WriteStdErr('  /V<number>         Emulate #pragma verboselevel <number>');
-    WriteStdErr('  /?                 Show this help screen');
-    WriteStdErr('');
-    WriteStdErr('Example: iscc /$c- /Pu+ "/DLic=Trial Lic.txt" /IC:\INC;D:\INC scriptfile.iss');
-  end;
-
-var
-  ScriptPath: String;
-  ExitCode: Integer;
-  Ver: PCompilerVersionInfo;
-  F: TTextFileReader;
-  Params: TCompileScriptParamsEx;
-  I: Integer;
-  S, IncludePath, Definitions, Output, OutputPath, OutputFilename, SignTool: string;
-  Res: Integer;
-begin
-  I := 1;
-  ShowProgress := 'P' = UpperCase(FindParam(I, 'Q')) ;
-  Quiet := I <> MaxInt;
-
-  if (ParamCount < 1) or (ParamStr(1) = '/?') then begin
-    ShowBanner;
-    ShowUsage;
-    Halt(1);
-  end;
-
-  if not Quiet then
-    ShowBanner;
-
-  ScriptFilename := '';
-
-  for I := 1 to ParamCount do begin
-    S := ParamStr(I);
-    if not IsParam(S) then begin
-      if ScriptFilename <> '' then
-        raise Exception.Create('Script file name specified more than once');
-      ScriptFileName := S;
-    end;
-  end;
-
-  if ScriptFilename = '' then
-    raise Exception.Create('Script file name not specified');
-
-  if ScriptFilename <> '-' then begin
-    ScriptFilename := PathExpand(ScriptFilename);
-    ScriptPath := PathExtractPath(ScriptFilename);
-  end
-  else begin
-    { Read from standard input }
-    ScriptFilename := '<stdin>';
-    ScriptPath := GetCurrentDir;
-  end;
-
-  Ver := ISDllGetVersion;
-  if Ver.BinVersion < $05000500 then begin
-    { 5.0.5 or later is required since we use TCompileScriptParamsEx }
-    WriteStdErr('Incompatible compiler engine version.');
-    Halt(1);
-  end;
-
-  SetOption(Options.Options, 'C', True);
-  SetOption(Options.ParserOptions.Options, 'B', True);
-  SetOption(Options.ParserOptions.Options, 'P', True);
-  Options.VerboseLevel := 0;
-  Options.InlineStart := '{#';
-  Options.InlineEnd := '}';
-
-  PopulateOptions(Options.Options, '$');
-  PopulateOptions(Options.ParserOptions.Options, 'p');
-
-  I := 1;
-  Definitions := 'ISPPCC_INVOKED';
-  S := FindParam(I, 'D');
-  while S <> '' do
-  begin
-    if (Pos(';', S) > 0) or (Pos(' ', S) > 0) then
-      S := AnsiQuotedStr(S, '"');
-    Definitions := Definitions + ';' + S;
-    S := FindParam(I, 'D')
-  end;
-  I := 1;
-  IncludePath := ExtractFileDir(ParamStr(0));
-  S := FindParam(I, 'I');
-  while S <> '' do
-  begin
-    IncludePath := IncludePath + ';' + S;
-    S := FindParam(I, 'I');
-  end;
-  I := 1; S := FindParam(I, '{#');
-  if S <> '' then Options.InlineStart := AnsiString(S);
-  I := 1; S := FindParam(I, '}');
-  if S <> '' then Options.InlineEnd := AnsiString(S);
-  I := 1; S := FindParam(I, 'V');
-  if S <> '' then Options.VerboseLevel := StrToIntDef(S, 0);
-  I := 1; S := FindParam(I, 'O');
-  while S <> '' do
-  begin
-    if S = '-' then Output := 'no'
-    else if S = '+' then Output := 'yes'
-    else OutputPath := S;
-    S := FindParam(I, 'O');
-  end;
-  I := 1; OutputFileName := FindParam(I, 'F');
-  I := 1; SignTool := FindParam(I, 'S');
-
-  SignTools := TStringList.Create;
-  ProgressPoint.X := -1;
-  ExitCode := 0;
-  try
-    if ScriptFilename <> '<stdin>' then
-      F := TTextFileReader.Create(ScriptFilename, fdOpenExisting, faRead, fsRead)
-    else
-      F := TTextFileReader.CreateWithExistingHandle(GetStdHandle(STD_INPUT_HANDLE));
-    try
-      ReadScriptLines(F);
-    finally
-      F.Free;
-    end;
-
-    if not Quiet then begin
-      WriteStdOut('Compiler engine version: ' + String(Ver.Title) + ' ' + String(Ver.Version));
-      WriteStdOut('');
-    end;
-
-    FillChar(Params, SizeOf(Params), 0);
-    Params.Size := SizeOf(Params);
-    Params.SourcePath := PChar(ScriptPath);
-    Params.CallbackProc := CompilerCallbackProc;
-    S := '';
-    if Output <> '' then
-      AppendOption(S, 'Output', Output);
-    if OutputPath <> '' then
-      AppendOption(S, 'OutputDir', OutputPath);
-    if OutputFilename <> '' then
-      AppendOption(S, 'OutputBaseFilename', OutputFilename);
-
-    ReadSignTools(SignTools);
-    for I := 0 to SignTools.Count-1 do
-      if (SignTool = '') or (Pos(UpperCase(SignTools.Names[I]) + '=', UpperCase(SignTool)) = 0) then
-        S := S + AddSignToolParam(SignTools[I]);
-    if SignTool <> '' then
-      S := S + AddSignToolParam(SignTool);
-
-    AppendOption(S, 'ISPP:ParserOptions', ConvertOptionsToString(Options.ParserOptions.Options));
-    AppendOption(S, 'ISPP:Options', ConvertOptionsToString(Options.Options));
-    AppendOption(S, 'ISPP:VerboseLevel', IntToStr(Options.VerboseLevel));
-    AppendOption(S, 'ISPP:InlineStart', String(Options.InlineStart));
-    AppendOption(S, 'ISPP:InlineEnd', String(Options.InlineEnd));
-    AppendOption(S, 'ISPP:IncludePath', IncludePath);
-    AppendOption(S, 'ISPP:Definitions', Definitions);
-    Params.Options := PChar(S);
-
-    StartTime := GetTickCount;
-    Res := ISDllCompileScript(Params);
-    case Res of
-      isceNoError: ;
-      isceCompileFailure: begin
-          ExitCode := 2;
-          WriteStdErr('Compile aborted.');
-        end;
-    else
-      ExitCode := 1;
-      WriteStdErr(Format('Internal error: ISDllCompileScript returned ' +
-        'unexpected result (%d).', [Res]));
-    end;
-  finally
-    SignTools.Free;
-    FreeScriptLines;
-  end;
-  if ExitCode <> 0 then
-    Halt(ExitCode);
-end;
-
-begin
-  StdOutHandle := GetStdHandle(STD_OUTPUT_HANDLE);
-  StdErrHandle := GetStdHandle(STD_ERROR_HANDLE);
-  SetConsoleCtrlHandler(@ConsoleCtrlHandler, True);
-  try
-    Go;
-  except
-    { Show a friendlier exception message. (By default, Delphi prints out
-      the exception class and address.) }
-    WriteStdErr(GetExceptMessage);
-    Halt(2);
-  end;
-end.

+ 0 - 1
Projects/ISPP/ISPPCC.manifest.rc

@@ -1 +0,0 @@
-1 24 ISPPCC.manifest.txt

二進制
Projects/ISPP/ISPPCC.manifest.res


+ 0 - 19
Projects/ISPP/ISPPCC.manifest.txt

@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
-<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
-    <security>
-        <requestedPrivileges>
-            <requestedExecutionLevel level="asInvoker" uiAccess="false"/>
-        </requestedPrivileges>
-    </security>
-</trustInfo>
-<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
-    <application>
-        <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
-        <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
-        <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
-        <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
-        <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
-    </application>
-</compatibility>
-</assembly>

二進制
Projects/ISPP/ISPPCC.res


+ 2 - 5
README.md

@@ -167,9 +167,6 @@ performs all (un)installation-related tasks.
 Setup program into the user's TEMP directory and runs it from there. It also
 Setup program into the user's TEMP directory and runs it from there. It also
 displays the "This will install..." and /HELP message boxes.
 displays the "This will install..." and /HELP message boxes.
 
 
-**ISPP\ISPPCC** - This is Inno Setup's ISCC command-line front-end with extra
-preprocessor related parameters added.
-
 **ISPP\ISPP** - This is a DLL implementing Inno Setup's preprocessor interface
 **ISPP\ISPP** - This is a DLL implementing Inno Setup's preprocessor interface
 
 
 How do the projects link together?
 How do the projects link together?
@@ -183,7 +180,7 @@ How do the projects link together?
   clauses of the projects and units if you aren't sure if a project uses a
   clauses of the projects and units if you aren't sure if a project uses a
   particular unit.
   particular unit.
 
 
-- ISPP and ISPPCC use various copies of other Inno Setup files. To synch these
+- ISPP uses various copies of other Inno Setup files. To synch these
   run synch-isfiles.bat.
   run synch-isfiles.bat.
 
 
 5. Source code tips
 5. Source code tips
@@ -279,4 +276,4 @@ Compiled by Visual Studio 2005 from the Examples\MyProg directory.
 
 
 - When mentioning something the user would type in a script, e.g. "MinVersion",
 - When mentioning something the user would type in a script, e.g. "MinVersion",
   surround it by `<tt></tt>` so that it's displayed in the Courier New font. This is
   surround it by `<tt></tt>` so that it's displayed in the Courier New font. This is
-  a convention used throughout the help file. Example: `<tt>MinVersion</tt>`
+  a convention used throughout the help file. Example: `<tt>MinVersion</tt>`

+ 2 - 2
build.bat

@@ -55,7 +55,7 @@ echo - Setup.exe
 if exist .\setup-sign.bat (
 if exist .\setup-sign.bat (
   call .\setup-sign.bat
   call .\setup-sign.bat
 ) else (
 ) else (
-  files\isppcc setup.iss /q /DNOSIGNTOOL
+  files\iscc setup.iss /q /DNOSIGNTOOL
 )
 )
 if errorlevel 1 goto failed
 if errorlevel 1 goto failed
 echo - Copying ISCC for ISPack
 echo - Copying ISCC for ISPack
@@ -79,7 +79,7 @@ echo - Setup.exe
 if exist .\setup-sign.bat (
 if exist .\setup-sign.bat (
   call .\setup-sign.bat
   call .\setup-sign.bat
 ) else (
 ) else (
-  files\isppcc setup.iss /q /DNOSIGNTOOL
+  files\iscc setup.iss /q /DNOSIGNTOOL
 )
 )
 if errorlevel 1 goto failed
 if errorlevel 1 goto failed
 echo - Copying ISCC for ISPack
 echo - Copying ISCC for ISPack

+ 0 - 4
compile-unicode.bat

@@ -34,10 +34,6 @@ if errorlevel 1 goto exit
 cd ISPP
 cd ISPP
 if errorlevel 1 goto failed
 if errorlevel 1 goto failed
 
 
-echo - ISPPCC.dpr
-"%DELPHI2009ROOT%\bin\dcc32.exe" --no-config --peflags:1 --string-checks:off -Q -B -H -W %1 -U"%DELPHI2009ROOT%\lib" -E..\..\Files ISPPCC.dpr
-if errorlevel 1 goto failed
-
 echo - ISPP.dpr
 echo - ISPP.dpr
 "%DELPHI2009ROOT%\bin\dcc32.exe" --no-config --string-checks:off -Q -B -H -W %1 -U"%DELPHI2009ROOT%\lib" -E..\..\Files ISPP.dpr
 "%DELPHI2009ROOT%\bin\dcc32.exe" --no-config --string-checks:off -Q -B -H -W %1 -U"%DELPHI2009ROOT%\lib" -E..\..\Files ISPP.dpr
 if errorlevel 1 goto failed
 if errorlevel 1 goto failed

+ 1 - 6
compile.bat

@@ -40,10 +40,6 @@ if errorlevel 1 goto exit
 cd ISPP
 cd ISPP
 if errorlevel 1 goto failed
 if errorlevel 1 goto failed
 
 
-echo - ISPPCC.dpr
-"%DELPHI7ROOT%\bin\dcc32.exe" -Q -B -H -W %1 -U"%DELPHI7ROOT%\lib" -E..\..\Files ISPPCC.dpr -DIS_ALLOWD7
-if errorlevel 1 goto failed
-
 echo - ISPP.dpr
 echo - ISPP.dpr
 "%DELPHI7ROOT%\bin\dcc32.exe" -Q -B -H -W %1 -U"%DELPHI7ROOT%\lib" -E..\..\Files ISPP.dpr -DIS_ALLOWD7
 "%DELPHI7ROOT%\bin\dcc32.exe" -Q -B -H -W %1 -U"%DELPHI7ROOT%\lib" -E..\..\Files ISPP.dpr -DIS_ALLOWD7
 if errorlevel 1 goto failed
 if errorlevel 1 goto failed
@@ -57,7 +53,6 @@ if errorlevel 1 goto failed
 echo - ISCC.dpr
 echo - ISCC.dpr
 "%DELPHIROOT%\bin\dcc32.exe" -Q -B -H -W %1 -U"%DELPHIROOT%\lib;..\Components;..\Components\Ps\Source" -E..\Files -DPS_MINIVCL;PS_NOWIDESTRING;PS_NOINT64;PS_NOGRAPHCONST ISCC.dpr
 "%DELPHIROOT%\bin\dcc32.exe" -Q -B -H -W %1 -U"%DELPHIROOT%\lib;..\Components;..\Components\Ps\Source" -E..\Files -DPS_MINIVCL;PS_NOWIDESTRING;PS_NOINT64;PS_NOGRAPHCONST ISCC.dpr
 if errorlevel 1 goto failed
 if errorlevel 1 goto failed
-
 echo - ISCmplr.dpr
 echo - ISCmplr.dpr
 "%DELPHIROOT%\bin\dcc32.exe" -Q -B -H -W %1 -U"%DELPHIROOT%\lib;..\Components;..\Components\Ps\Source" -E..\Files -DPS_MINIVCL;PS_NOWIDESTRING;PS_NOINT64;PS_NOGRAPHCONST ISCmplr.dpr
 "%DELPHIROOT%\bin\dcc32.exe" -Q -B -H -W %1 -U"%DELPHIROOT%\lib;..\Components;..\Components\Ps\Source" -E..\Files -DPS_MINIVCL;PS_NOWIDESTRING;PS_NOINT64;PS_NOGRAPHCONST ISCmplr.dpr
 if errorlevel 1 goto failed
 if errorlevel 1 goto failed
@@ -79,7 +74,7 @@ move Setup.exe Setup.e32
 if errorlevel 1 goto failed
 if errorlevel 1 goto failed
 
 
 echo - StripReloc'ing
 echo - StripReloc'ing
-stripreloc /b- Compil32.exe ISCC.exe SetupLdr.e32 Setup.e32 ISPPCC.exe
+stripreloc /b- Compil32.exe ISCC.exe SetupLdr.e32 Setup.e32
 if errorlevel 1 goto failed
 if errorlevel 1 goto failed
 
 
 echo Success!
 echo Success!

+ 1 - 1
ishelp/compile.bat

@@ -34,7 +34,7 @@ if errorlevel 1 goto failed
 echo.
 echo.
 echo Running help compiler:
 echo Running help compiler:
 echo.
 echo.
-del Staging\isetup.chm
+if exist Staging\isetup.chm del Staging\isetup.chm
 if exist Staging\isetup.chm goto failed
 if exist Staging\isetup.chm goto failed
 "%HHCEXE%" Staging\hh_project.hhp
 "%HHCEXE%" Staging\hh_project.hhp
 if %errorlevel% neq 1 goto failed
 if %errorlevel% neq 1 goto failed

+ 1 - 2
setup.iss

@@ -95,7 +95,7 @@ Source: "license.txt"; DestDir: "{app}"; Flags: ignoreversion touch
 Source: "ishelp\Staging\ISetup.chm"; DestDir: "{app}"; Flags: ignoreversion touch
 Source: "ishelp\Staging\ISetup.chm"; DestDir: "{app}"; Flags: ignoreversion touch
 Source: "files\Compil32.exe"; DestDir: "{app}"; Flags: ignoreversion touch
 Source: "files\Compil32.exe"; DestDir: "{app}"; Flags: ignoreversion touch
 Source: "files\isscint.dll"; DestDir: "{app}"; Flags: ignoreversion touch
 Source: "files\isscint.dll"; DestDir: "{app}"; Flags: ignoreversion touch
-Source: "files\ISCC.exe"; DestDir: "{app}"; Flags: ignoreversion touch; Check: not ISPPCheck
+Source: "files\ISCC.exe"; DestDir: "{app}"; Flags: ignoreversion touch
 Source: "files\ISCmplr.dll"; DestDir: "{app}"; Flags: ignoreversion touch
 Source: "files\ISCmplr.dll"; DestDir: "{app}"; Flags: ignoreversion touch
 Source: "files\Setup.e32"; DestDir: "{app}"; Flags: ignoreversion touch
 Source: "files\Setup.e32"; DestDir: "{app}"; Flags: ignoreversion touch
 Source: "files\SetupLdr.e32"; DestDir: "{app}"; Flags: ignoreversion touch
 Source: "files\SetupLdr.e32"; DestDir: "{app}"; Flags: ignoreversion touch
@@ -171,7 +171,6 @@ Source: "Examples\ISPPExample1.iss"; DestDir: "{app}\Examples"; Flags: ignorever
 Source: "Examples\ISPPExample1License.txt"; DestDir: "{app}\Examples"; Flags: ignoreversion touch
 Source: "Examples\ISPPExample1License.txt"; DestDir: "{app}\Examples"; Flags: ignoreversion touch
 ; ISPP files
 ; ISPP files
 Source: "Projects\ISPP\Help\Staging\ISPP.chm"; DestDir: "{app}"; Flags: ignoreversion touch
 Source: "Projects\ISPP\Help\Staging\ISPP.chm"; DestDir: "{app}"; Flags: ignoreversion touch
-Source: "files\ISPPCC.exe"; DestDir: "{app}"; DestName: "ISCC.exe"; Flags: ignoreversion touch; Check: ISPPCheck
 Source: "files\ISPP.dll"; DestDir: "{app}"; Flags: ignoreversion touch; Check: ISPPCheck
 Source: "files\ISPP.dll"; DestDir: "{app}"; Flags: ignoreversion touch; Check: ISPPCheck
 Source: "files\ISPPBuiltins.iss"; DestDir: "{app}"; Flags: ignoreversion touch; Check: ISPPCheck
 Source: "files\ISPPBuiltins.iss"; DestDir: "{app}"; Flags: ignoreversion touch; Check: ISPPCheck