| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385 | 
							- ; BEGIN ISPPBUILTINS.ISS
 
- //
 
- // Inno Setup Preprocessor
 
- //
 
- // Copyright (C) 2001-2004 Alex Yackimoff. All Rights Reserved.
 
- // Portions by Martijn Laan.
 
- //
 
- // Inno Setup (C) 1997-2019 Jordan Russell. All Rights Reserved.
 
- // Portions by Martijn Laan.
 
- //
 
- #if defined(ISPP_INVOKED) && !defined(_BUILTINS_ISS_)
 
- //
 
- #if PREPROCVER < 0x01000000
 
- # error Inno Setup Preprocessor version is outdated
 
- #endif
 
- //
 
- #define _BUILTINS_ISS_
 
- //
 
- // ===========================================================================
 
- //
 
- // Default states for options.
 
- //
 
- //#pragma parseroption -b+ ; short circuit boolean evaluation: on
 
- //#pragma parseroption -m- ; short circuit multiplication evaluation (0 * A will not eval A): off
 
- //#pragma parseroption -p+ ; string literals without escape sequences: on
 
- //#pragma parseroption -u- ; allow undeclared identifiers: off
 
- //#pragma option -c+       ; pass script to the compiler: on
 
- //#pragma option -e-       ; emit empty lines to translation: off
 
- //#pragma option -v-       ; verbose mode: off
 
- //
 
- // ---------------------------------------------------------------------------
 
- //
 
- // Verbose levels:
 
- // 0 - #include and #file acknowledgements
 
- // 1 - information about any temp files created by #file
 
- // 2 - #insert and #append acknowledgements
 
- // 3 - reserved
 
- // 4 - #dim, #define and #undef acknowledgements
 
- // 5 - reserved
 
- // 6 - conditional inclusion acknowledgements
 
- // 7 - reserved
 
- // 8 - show strings emitted with #emit directive
 
- // 9 - macro and functions successful call acknowledgements
 
- //10 - Local macro array allocation acknowledgements
 
- //
 
- //#pragma verboselevel 0
 
- //
 
- #ifndef __POPT_P__
 
- # define private CStrings
 
- #else
 
- # pragma parseroption -p-
 
- #endif
 
- //
 
- #define NewLine            "\n"
 
- #define Tab                "\t"
 
- //
 
- #pragma parseroption -p+
 
- //
 
- #pragma spansymbol "\"
 
- //
 
- #define True               1
 
- #define False              0
 
- #define Yes                True
 
- #define No								 False
 
- //
 
- #define MaxInt             0x7FFFFFFFL
 
- #define MinInt             0x80000000L
 
- //
 
- #define NULL
 
- #define void
 
- //
 
- // TypeOf constants
 
- //
 
- #define TYPE_ERROR         0
 
- #define TYPE_NULL          1
 
- #define TYPE_INTEGER       2
 
- #define TYPE_STRING        3
 
- #define TYPE_MACRO         4
 
- #define TYPE_FUNC          5
 
- #define TYPE_ARRAY         6
 
- //
 
- // Helper macro to find out the type of an array element or expression. TypeOf
 
- // standard function only allows identifier as its parameter. Use this macro
 
- // to convert an expression to identifier.
 
- //
 
- #define TypeOf2(any Expr) TypeOf(Expr)
 
- //
 
- // ReadReg constants
 
- //
 
- #define HKEY_CLASSES_ROOT  0x80000000UL
 
- #define HKEY_CURRENT_USER  0x80000001UL
 
- #define HKEY_LOCAL_MACHINE 0x80000002UL
 
- #define HKEY_USERS         0x80000003UL
 
- #define HKEY_CURRENT_CONFIG     0x80000005UL
 
- #define HKEY_CLASSES_ROOT_64    0x82000000UL
 
- #define HKEY_CURRENT_USER_64    0x82000001UL
 
- #define HKEY_LOCAL_MACHINE_64   0x82000002UL
 
- #define HKEY_USERS_64           0x82000003UL
 
- #define HKEY_CURRENT_CONFIG_64  0x82000005UL
 
- //
 
- #define HKCR               HKEY_CLASSES_ROOT
 
- #define HKCU               HKEY_CURRENT_USER
 
- #define HKLM               HKEY_LOCAL_MACHINE
 
- #define HKU                HKEY_USERS
 
- #define HKCC               HKEY_CURRENT_CONFIG
 
- #define HKCR64             HKEY_CLASSES_ROOT_64
 
- #define HKCU64             HKEY_CURRENT_USER_64
 
- #define HKLM64             HKEY_LOCAL_MACHINE_64
 
- #define HKU64              HKEY_USERS_64
 
- #define HKCC64             HKEY_CURRENT_CONFIG_64
 
- //
 
- // Exec constants
 
- //
 
- #define SW_HIDE            0
 
- #define SW_SHOWNORMAL      1
 
- #define SW_NORMAL          1
 
- #define SW_SHOWMINIMIZED   2
 
- #define SW_SHOWMAXIMIZED   3
 
- #define SW_MAXIMIZE        3
 
- #define SW_SHOWNOACTIVATE  4
 
- #define SW_SHOW            5
 
- #define SW_MINIMIZE        6
 
- #define SW_SHOWMINNOACTIVE 7
 
- #define SW_SHOWNA          8
 
- #define SW_RESTORE         9
 
- #define SW_SHOWDEFAULT     10
 
- #define SW_MAX             10
 
- //
 
- // Find constants
 
- //
 
- #define FIND_MATCH         0x00
 
- #define FIND_BEGINS        0x01
 
- #define FIND_ENDS          0x02
 
- #define FIND_CONTAINS      0x03
 
- #define FIND_CASESENSITIVE 0x04 
 
- #define FIND_SENSITIVE     FIND_CASESENSITIVE
 
- #define FIND_AND           0x00
 
- #define FIND_OR            0x08
 
- #define FIND_NOT           0x10
 
- #define FIND_TRIM          0x20
 
- //
 
- // FindFirst constants
 
- //
 
- #define faReadOnly         0x00000001
 
- #define faHidden           0x00000002
 
- #define faSysFile          0x00000004
 
- #define faVolumeID         0x00000008
 
- #define faDirectory        0x00000010
 
- #define faArchive          0x00000020
 
- #define faSymLink          0x00000040
 
- #define faAnyFile          0x0000003F
 
- //
 
- // GetStringFileInfo standard names
 
- //
 
- #define COMPANY_NAME       "CompanyName"
 
- #define FILE_DESCRIPTION   "FileDescription"
 
- #define FILE_VERSION       "FileVersion"
 
- #define INTERNAL_NAME      "InternalName"
 
- #define LEGAL_COPYRIGHT    "LegalCopyright"
 
- #define ORIGINAL_FILENAME  "OriginalFilename"
 
- #define PRODUCT_NAME       "ProductName"
 
- #define PRODUCT_VERSION    "ProductVersion"
 
- //
 
- // GetStringFileInfo helpers
 
- //
 
- #define GetFileCompany(str FileName) GetStringFileInfo(FileName, COMPANY_NAME)
 
- #define GetFileDescription(str FileName) GetStringFileInfo(FileName, FILE_DESCRIPTION)
 
- #define GetFileVersionString(str FileName) GetStringFileInfo(FileName, FILE_VERSION)
 
- #define GetFileCopyright(str FileName) GetStringFileInfo(FileName, LEGAL_COPYRIGHT)
 
- #define GetFileOriginalFilename(str FileName) GetStringFileInfo(FileName, ORIGINAL_FILENAME)
 
- #define GetFileProductVersion(str FileName) GetStringFileInfo(FileName, PRODUCT_VERSION)
 
- //
 
- // ParseVersion
 
- //
 
- // Macro internally calls GetFileVersion function and parses string returned
 
- // by that function (in form "0.0.0.0"). All four version elements are stored
 
- // in by-reference parameters Major, Minor, Rev, and Build. Macro returns
 
- // string returned by GetFileVersion.
 
- //
 
- #define DeleteToFirstPeriod(str *S) \
 
-   Local[1] = Copy(S, 1, (Local[0] = Pos(".", S)) - 1), \
 
-   S = Copy(S, Local[0] + 1), \
 
-   Local[1]
 
- //
 
- #define ParseVersion(str FileName, *Major, *Minor, *Rev, *Build) \
 
-   Local[1]  = Local[0] = GetFileVersion(FileName), \
 
-   Local[1] == "" ? "" : ( \
 
-     Major   = Int(DeleteToFirstPeriod(Local[1])), \
 
-     Minor   = Int(DeleteToFirstPeriod(Local[1])), \
 
-     Rev     = Int(DeleteToFirstPeriod(Local[1])), \
 
-     Build   = Int(Local[1]), \
 
-   Local[0])
 
- //
 
- // EncodeVer
 
- //
 
- // Encodes given four version elements to a 32 bit integer number (8 bits for
 
- // each element, i.e. elements must be within 0...255 range).
 
- //
 
- #define EncodeVer(int Major, int Minor, int Revision = 0, int Build = -1) \
 
-   Major << 24 | (Minor & 0xFF) << 16 | (Revision & 0xFF) << 8 | (Build >= 0 ? Build & 0xFF : 0)
 
- //
 
- // DecodeVer
 
- //
 
- // Decodes given 32 bit integer encoded version to its string representation,
 
- // Digits parameter indicates how many elements to show (if the fourth element
 
- // is 0, it won't be shown anyway).
 
- //
 
- #define DecodeVer(int Ver, int Digits = 3) \
 
-   Str(Ver >> 0x18 & 0xFF) + (Digits > 1 ? "." : "") + \
 
-   (Digits > 1 ? \
 
-     Str(Ver >> 0x10 & 0xFF) + (Digits > 2 ? "." : "") : "") + \
 
-   (Digits > 2 ? \
 
-     Str(Ver >> 0x08 & 0xFF) + (Digits > 3 && (Local = Ver & 0xFF) ? "." : "") : "") + \
 
-   (Digits > 3 && Local ? \
 
-     Str(Ver & 0xFF) : "")
 
- //
 
- // FindSection
 
- //
 
- // Returns index of the line following the header of the section. This macro
 
- // is intended to be used with #insert directive.
 
- //
 
- #define FindSection(str Section = "Files") \
 
-   Find(0, "[" + Section + "]", FIND_MATCH | FIND_TRIM) + 1
 
- //
 
- // FindSectionEnd
 
- //
 
- // Returns index of the line following last entry of the section. This macro
 
- // is intended to be used with #insert directive.
 
- //
 
- #if VER >= 0x03000000
 
- # define FindNextSection(int Line) \
 
-     Find(Line, "[", FIND_BEGINS | FIND_TRIM, "]", FIND_ENDS | FIND_AND)
 
- # define FindSectionEnd(str Section = "Files") \
 
-     FindNextSection(FindSection(Section))
 
- #else
 
- # define FindSectionEnd(str Section = "Files") \
 
-     FindSection(Section) + EntryCount(Section)
 
- #endif
 
- //
 
- // FindCode
 
- //
 
- // Returns index of the line (of translation) following either [Code] section
 
- // header, or "program" keyword, if any.
 
- //
 
- #define FindCode() \
 
-     Local[1] = FindSection("Code"), \
 
-     Local[0] = Find(Local[1] - 1, "program", FIND_BEGINS, ";", FIND_ENDS | FIND_AND), \
 
-     (Local[0] < 0 ? Local[1] : Local[0] + 1)
 
- //
 
- // ExtractFilePath
 
- //
 
- // Returns directory portion of the given filename without backslash (unless
 
- // it is a root directory). If PathName doesn't contain directory portion,
 
- // the result is an empty string.
 
- //
 
- #define ExtractFilePath(str PathName) \
 
-   (Local[0] = \
 
-     !(Local[1] = RPos("\", PathName)) ? \
 
-       "" : \
 
-       Copy(PathName, 1, Local[1] - 1)), \
 
-   Local[0] + \
 
-     ((Local[2] = Len(Local[0])) == 2 && Copy(Local[0], Local[2]) == ":" ? \
 
-       "\" : \
 
-       "")
 
- #define ExtractFileDir(str PathName) \
 
-   RemoveBackslash(ExtractFilePath(PathName))
 
- #define ExtractFileExt(str PathName) \
 
-   Local[0] = RPos(".", PathName), \
 
-   Copy(PathName, Local[0] + 1)
 
- //
 
- // ExtractFileName
 
- //
 
- // Returns name portion of the given filename. If PathName ends with
 
- // a backslash, the result is an empty string.
 
- //
 
- #define ExtractFileName(str PathName) \
 
-   !(Local[0] = RPos("\", PathName)) ? \
 
-     PathName : \
 
-     Copy(PathName, Local[0] + 1)
 
- //
 
- // ChangeFileExt
 
- //
 
- // Changes extension in FileName with NewExt. NewExt must not contain
 
- // period.
 
- //
 
- #define ChangeFileExt(str FileName, str NewExt) \
 
-   !(Local[0] = RPos(".", FileName)) ? \
 
-     FileName + "." + NewExt : \
 
-     Copy(FileName, 1, Local[0]) + NewExt
 
- //
 
- // RemoveFileExt
 
- //
 
- // Removes extension in FileName.
 
- //
 
- #define RemoveFileExt(str FileName) \
 
-   !(Local[0] = RPos(".", FileName)) ? \
 
-   FileName : \
 
-   Copy(FileName, 1, Local[0] - 1)
 
- //
 
- // AddBackslash
 
- //
 
- // Adds a backslash to the string, if it's not already there.
 
- //
 
- #define AddBackslash(str S) \
 
-   Copy(S, Len(S)) == "\" ? S : S + "\"
 
- //
 
- // RemoveBackslash
 
- //
 
- // Removes trailing backslash from the string unless the string points to
 
- // a root directory.
 
- //
 
- #define RemoveBackslash(str S) \
 
-   Local[0] = Len(S), \
 
-   Local[0] > 0 ? \
 
-     Copy(S, Local[0]) == "\" ? \
 
-       (Local[0] == 3 && Copy(S, 2, 1) == ":" ? \
 
-         S : \
 
-         Copy(S, 1, Local[0] - 1)) : \
 
-       S : \
 
-     ""
 
- //
 
- // Delete
 
- //
 
- // Deletes specified number of characters beginning with Index from S. S is
 
- // passed by reference (therefore is modified). Acts like Delete function in
 
- // Delphi (from System unit).
 
- //
 
- #define Delete(str *S, int Index, int Count = MaxInt) \
 
-   S = Copy(S, 1, Index - 1) + Copy(S, Index + Count)
 
- //
 
- // Insert
 
- //
 
- // Inserts specified Substr at Index'th character into S. S is passed by
 
- // reference (therefore is modified).
 
- //
 
- #define Insert(str *S, int Index, str Substr) \
 
-   Index > Len(S) + 1 ? \
 
-     S : \
 
-     S = Copy(S, 1, Index - 1) + SubStr + Copy(S, Index)
 
- //
 
- // YesNo, IsDirSet
 
- //
 
- // Returns nonzero value if given string is "yes", "true" or "1". Intended to
 
- // be used with SetupSetting function. This macro replaces YesNo function
 
- // available in previous releases.
 
- //
 
- #define YesNo(str S) \
 
-   (S = LowerCase(S)) == "yes" || S == "true" || S == "1"
 
- //
 
- #define IsDirSet(str SetupDirective) \
 
-   YesNo(SetupSetting(SetupDirective))
 
- //
 
- //
 
- #define Power(int X, int P = 2) \
 
-   !P ? 1 : X * Power(X, P - 1)
 
- //
 
- #define Min(int A, int B, int C = MaxInt)  \
 
-   A < B ? A < C ? Int(A) : Int(C) : Int(B)
 
- //
 
- #define Max(int A, int B, int C = MinInt)  \
 
-   A > B ? A > C ? Int(A) : Int(C) : Int(B)
 
- //
 
- // SameText
 
- //
 
- // Returns True if the given strings are identical, ignoring case.
 
- // 
 
- #define SameText(str S1, str S2) \
 
-   LowerCase(S1) == LowerCase(S2)
 
- // 
 
- // SameStr
 
- //
 
- // Returns True if the given strings are identical, with case-sensitivity.
 
- //
 
- #define SameStr(str S1, str S2) \
 
-   S1 == S2
 
- //
 
- #ifdef CStrings
 
- # pragma parseroption -p-
 
- #endif
 
- #endif
 
- ; END ISPPBUILTINS.ISS
 
 
  |