Browse Source

Merge remote-tracking branch 'KngStr/same_cmd' into same_cmd

Martijn Laan 11 năm trước cách đây
mục cha
commit
5ccf82cd65

+ 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

+ 181 - 18
Projects/ISCC.dpr

@@ -31,11 +31,29 @@ type
     LineText: String;
     LineText: String;
     Next: PScriptLine;
     Next: PScriptLine;
   end;
   end;
+  
+  TOptionID = 0..25;
+
+  TOptions = packed set of TOptionID;
+
+  PIsppParserOptions = ^TIsppParserOptions;
+  TIsppParserOptions = packed record
+    Options: TOptions;
+  end;
+
+  TIsppOptions = packed record
+    ParserOptions: TIsppParserOptions;
+    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 +61,116 @@ var
   SignTools: TStringList;
   SignTools: TStringList;
   ProgressPoint: TPoint;
   ProgressPoint: TPoint;
   LastProgress: String;
   LastProgress: String;
+  IsppOptions: TIsppOptions;
+  IsppMode: Boolean;
+
+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 PopulateOptions(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;
+
+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 InitIsppOptions(var Opt: TIsppOptions; var Definitions, IncludePath: String);
+begin
+  with Opt do
+  begin
+    SetOption(Options, 'C', True);
+    SetOption(ParserOptions.Options, 'B', True);
+    SetOption(ParserOptions.Options, 'P', True);
+    VerboseLevel := 0;
+    InlineStart := '{#';
+    InlineEnd := '}';
+
+    PopulateOptions(Options, '$');
+    PopulateOptions(ParserOptions.Options, 'p');
+  end;
+
+  Definitions := 'ISPPCC_INVOKED';
+  IncludePath := ExtractFileDir(NewParamStr(0));
+end;
+
+procedure IsppOptionsToString(var S: String; Opt: TIsppOptions; Definitions, IncludePath: String);
+begin
+  with Opt do
+  begin
+    AppendOption(S, 'ISPP:ParserOptions', ConvertOptionsToString(ParserOptions.Options));
+    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;
 
 
 procedure WriteToStdHandle(const H: THandle; S: AnsiString);
 procedure WriteToStdHandle(const H: THandle; S: AnsiString);
 var
 var
@@ -254,6 +382,10 @@ procedure ProcessCommandLine;
     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,6 +400,18 @@ 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>');
+      WriteStdErr('');
+      WriteStdErr('Example: iscc /$c- /Pu+ "/DLic=Trial Lic.txt" /IC:\INC;D:\INC scriptfile.iss');
+      WriteStdErr('');
+    end;
     WriteStdErr('  /?                 Show this help screen');
     WriteStdErr('  /?                 Show this help screen');
   end;
   end;
 
 
@@ -275,29 +419,45 @@ var
   I: Integer;
   I: Integer;
   S: String;
   S: String;
 begin
 begin
+  if IsppMode then InitIsppOptions(IsppOptions, Definitions, IncludePath);
+
   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;
@@ -388,11 +548,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 +561,8 @@ 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 +595,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

BIN
Projects/ISPP/ISPPCC.manifest.res


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

@@ -1,18 +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}"/>
-    </application>
-</compatibility>
-</assembly>

BIN
Projects/ISPP/ISPPCC.res


+ 4 - 6
README.md

@@ -154,7 +154,8 @@ under Delphi 3 (3.02 to be exact). The rest of the projects are compiled
 under Delphi 2.01.
 under Delphi 2.01.
 
 
 **ISCC** - This is the command-line front-end to the compiler. Like
 **ISCC** - This is the command-line front-end to the compiler. Like
-Compil32, it depends on ISCmplr.dll to do the actual compiling.
+Compil32, it depends on ISCmplr.dll to do the actual compiling. If
+ispp.dll exist, extra preprocessor related parameters would be supported.
 
 
 **ISCmplr** - This is a DLL which is loaded by Compil32 and ISCC to compile
 **ISCmplr** - This is a DLL which is loaded by Compil32 and ISCC to compile
 scripts. The actual compiler code is in Compile.pas. See CompInt.pas for the
 scripts. The actual compiler code is in Compile.pas. See CompInt.pas for the
@@ -167,9 +168,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 +181,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 use 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
@@ -278,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