forked from jrsoftware/issrc
-
Notifications
You must be signed in to change notification settings - Fork 0
/
ISPPBuiltins.iss
323 lines (262 loc) · 10.2 KB
/
ISPPBuiltins.iss
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
// Inno Setup Preprocessor
//
// Inno Setup (C) 1997-2024 Jordan Russell. All Rights Reserved.
// Portions Copyright (C) 2000-2024 Martijn Laan. All Rights Reserved.
// Portions Copyright (C) 2001-2004 Alex Yackimoff. All Rights Reserved.
//
// See the ISPP help file for more documentation of the functions defined by this file
//
#if defined(ISPP_INVOKED) && !defined(_BUILTINS_ISS_)
//
#if PREPROCVER < 0x01000000
# error Inno Setup Preprocessor version is outdated
#endif
//
#define _BUILTINS_ISS_
//
#ifdef __OPT_E__
# define private EnableOptE
# pragma option -e-
#endif
#ifndef __POPT_P__
# define private DisablePOptP
#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 0x7FFFFFFFFFFFFFFFL
#define MinInt 0x8000000000000000L
#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)
#define DeleteToFirstPeriod(str *S) \
Local[1] = Copy(S, 1, (Local[0] = Pos(".", S)) - 1), \
S = Copy(S, Local[0] + 1), \
Local[1]
#define GetVersionComponents(str FileName, *Major, *Minor, *Rev, *Build) \
Local[1] = Local[0] = GetVersionNumbersString(FileName), \
Local[1] == "" ? "" : ( \
Major = Int(DeleteToFirstPeriod(Local[1])), \
Minor = Int(DeleteToFirstPeriod(Local[1])), \
Rev = Int(DeleteToFirstPeriod(Local[1])), \
Build = Int(Local[1]), \
Local[0])
#define GetPackedVersion(str FileName, *Version) \
Local[0] = GetVersionComponents(FileName, Local[1], Local[2], Local[3], Local[4]), \
Version = PackVersionComponents(Local[1], Local[2], Local[3], Local[4]), \
Local[0]
#define GetVersionNumbers(str FileName, *MS, *LS) \
Local[0] = GetPackedVersion(FileName, Local[1]), \
UnpackVersionNumbers(Local[1], MS, LS), \
Local[0]
#define PackVersionNumbers(int VersionMS, int VersionLS) \
VersionMS << 32 | (VersionLS & 0xFFFFFFFF)
#define PackVersionComponents(int Major, int Minor, int Rev, int Build) \
Major << 48 | (Minor & 0xFFFF) << 32 | (Rev & 0xFFFF) << 16 | (Build & 0xFFFF)
#define UnpackVersionNumbers(int Version, *VersionMS, *VersionLS) \
VersionMS = Version >> 32, \
VersionLS = Version & 0xFFFFFFFF, \
void
#define UnpackVersionComponents(int Version, *Major, *Minor, *Rev, *Build) \
Major = Version >> 48, \
Minor = (Version >> 32) & 0xFFFF, \
Rev = (Version >> 16) & 0xFFFF, \
Build = Version & 0xFFFF, \
void
#define VersionToStr(int Version) \
Str(Version >> 48 & 0xFFFF) + "." + Str(Version >> 32 & 0xFFFF) + "." + \
Str(Version >> 16 & 0xFFFF) + "." + Str(Version & 0xFFFF)
#define StrToVersion(str Version) \
Local[0] = Version, \
Local[1] = Int(DeleteToFirstPeriod(Local[0])), \
Local[2] = Int(DeleteToFirstPeriod(Local[0])), \
Local[3] = Int(DeleteToFirstPeriod(Local[0])), \
Local[4] = Int(Local[0]), \
PackVersionComponents(Local[1], Local[2], Local[3], Local[4])
#define EncodeVer(int Major, int Minor, int Revision = 0, int Build = -1) \
(Major & 0xFF) << 24 | (Minor & 0xFF) << 16 | (Revision & 0xFF) << 8 | (Build >= 0 ? Build & 0xFF : 0)
#define DecodeVer(int Version, int Digits = 3) \
Str(Version >> 24 & 0xFF) + (Digits > 1 ? "." : "") + \
(Digits > 1 ? \
Str(Version >> 16 & 0xFF) + (Digits > 2 ? "." : "") : "") + \
(Digits > 2 ? \
Str(Version >> 8 & 0xFF) + (Digits > 3 && (Local = Version & 0xFF) ? "." : "") : "") + \
(Digits > 3 && Local ? \
Str(Version & 0xFF) : "")
#define FindSection(str Section = "Files") \
Find(0, "[" + Section + "]", FIND_MATCH | FIND_TRIM) + 1
#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
#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)
#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)
#define ExtractFileName(str PathName) \
!(Local[0] = RPos("\", PathName)) ? \
PathName : \
Copy(PathName, Local[0] + 1)
#define ChangeFileExt(str FileName, str NewExt) \
!(Local[0] = RPos(".", FileName)) ? \
FileName + "." + NewExt : \
Copy(FileName, 1, Local[0]) + NewExt
#define RemoveFileExt(str FileName) \
!(Local[0] = RPos(".", FileName)) ? \
FileName : \
Copy(FileName, 1, Local[0] - 1)
#define AddBackslash(str S) \
Copy(S, Len(S)) == "\" ? S : S + "\"
#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 : \
""
#define Delete(str *S, int Index, int Count = MaxInt) \
S = Copy(S, 1, Index - 1) + Copy(S, Index + Count)
#define Insert(str *S, int Index, str Substr) \
Index > Len(S) + 1 ? \
S : \
S = Copy(S, 1, Index - 1) + SubStr + Copy(S, Index)
#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)
#define SameText(str S1, str S2) \
LowerCase(S1) == LowerCase(S2)
#define SameStr(str S1, str S2) \
S1 == S2
#define WarnRenamedVersion(str OldName, str NewName) \
Warning("Function """ + OldName + """ has been renamed. Use """ + NewName + """ instead.")
#define ParseVersion(str FileName, *Major, *Minor, *Rev, *Build) \
WarnRenamedVersion("ParseVersion", "GetVersionComponents"), \
GetVersionComponents(FileName, Major, Minor, Rev, Build)
#define GetFileVersion(str FileName) \
WarnRenamedVersion("GetFileVersion", "GetVersionNumbersString"), \
GetVersionNumbersString(FileName)
#ifdef DisablePOptP
# pragma parseroption -p-
#endif
#ifdef EnableOptE
# pragma option -e+
#endif
#endif