Skip to content
This repository was archived by the owner on May 1, 2024. It is now read-only.

Commit 2befbcd

Browse files
committed
Start rewrite for using records and more idiomatic procedures
1 parent f5251cf commit 2befbcd

File tree

1 file changed

+76
-113
lines changed

1 file changed

+76
-113
lines changed

ElixirWeb.iss

Lines changed: 76 additions & 113 deletions
Original file line numberDiff line numberDiff line change
@@ -71,12 +71,29 @@ Name: "erlpath"; Description: "Append Erlang directory to Path environment varia
7171

7272
[Code]
7373
type
74-
TStringTable = array of TStringList;
74+
TElixirReleaseType = (rtRelease, rtPrerelease, rtLatestRelease, rtLatestPrerelease, rtIncompatible);
75+
TElixirRelease = record
76+
Version: String;
77+
URL: String;
78+
ReleaseType: TElixirReleaseType;
79+
Ref: TObject;
80+
end;
81+
TErlangRelease = record
82+
OTPVersion: String;
83+
ERTSVersion: String;
84+
URL32: String;
85+
URL64: String;
86+
EXE32: String;
87+
EXE64: String;
88+
end;
7589
7690
var
7791
PSelRelease: TInputOptionWizardPage;
7892
PSelInstallType: TInputOptionWizardPage;
79-
ErlangCSVInfo: TStrings;
93+
94+
ElixirReleases: array of TElixirRelease;
95+
ErlangInfo: TErlangRelease;
96+
8097
_int: Integer;
8198
8299
function SplitStringRec(Str: String; Delim: String; StrList: TStringList): TStringList;
@@ -135,132 +152,78 @@ begin
135152
Result := ExpandConstant('{tmp}\' + GetURLFilePart('{#ERLANG_CSV_URL}'));
136153
end;
137154
138-
function GetVersion(Release: TStrings): String;
139-
begin
140-
Result := Release[0];
141-
end;
142-
143-
function GetURL(Release: TStrings): String;
144-
begin
145-
Result := Release[1];
146-
end;
147-
148-
function IsPrerelease(Release: TStrings): Boolean;
149-
begin
150-
Result := (Release[2] = 'prerelease');
151-
end;
152-
153-
function IsCompatibleForInstall(Release: TStrings): Boolean;
154-
begin
155-
Result := (StrToInt(Release[3]) = {#COMPAT_MASK});
156-
end;
157-
158-
function GetOTP32Name: String;
159-
begin
160-
Result := 'OTP ' + ErlangCSVInfo[0] + ' (32-bit)'
161-
end;
162-
163-
function GetOTP64Name: String;
164-
begin
165-
Result := 'OTP ' + ErlangCSVInfo[0] + ' (64-bit)'
166-
end;
167-
168-
function GetERTSVersion: String;
169-
begin
170-
Result := ErlangCSVInfo[1];
171-
end;
172-
173-
function GetOTP32URL: String;
174-
begin
175-
Result := ErlangCSVInfo[2];
176-
end;
177-
178-
function GetOTP64URL: String;
179-
begin
180-
Result := ErlangCSVInfo[3];
181-
end;
182-
183-
function GetOTP32Exe: String;
184-
begin
185-
Result := ExpandConstant('{tmp}\' + GetURLFilePart(GetOTP32URL));
186-
end;
187-
188-
function GetOTP64Exe: String;
155+
function ReleaseTypeToString(ReleaseType: TElixirReleaseType): String;
189156
begin
190-
Result := ExpandConstant('{tmp}\' + GetURLFilePart(GetOTP64URL));
157+
Result := 'Undefined';
158+
if ReleaseType = rtRelease then
159+
Result := 'Release';
160+
if ReleaseType = rtPrerelease then
161+
Result := 'Prerelease';
162+
if ReleaseType = rtLatestRelease then
163+
Result := 'Latest Release';
164+
if ReleaseType = rtLatestPrerelease then
165+
Result := 'Latest Prerelease';
166+
if ReleaseType = rtIncompatible then
167+
Result := 'Incompatible';
191168
end;
192169
193-
function CSVToStringTable(Filename: String): TStringTable;
170+
procedure CSVToElixirReleases(Filename: String; Releases: array of TElixirRelease);
194171
var
195172
Rows: TArrayOfString;
196-
i: Integer;
197-
begin
198-
LoadStringsFromFile(Filename, Rows);
199-
SetArrayLength(Result, GetArrayLength(Rows));
200-
201-
for i := 0 to GetArrayLength(Result) - 1 do begin
202-
Result[i] := SplitString(Rows[i], ',');
203-
end;
204-
end;
205-
206-
procedure PopulatePSelReleaseListBox(StringTable: TStringTable);
207-
var
208-
SelectFirst: Boolean;
209-
ReleaseDesc: String;
173+
RowValues: TStrings;
210174
i: Integer;
175+
LatestPrerelease: Boolean;
176+
LatestRelease: Boolean;
211177
begin
212-
PSelRelease.CheckListBox.Items.Clear;
213-
SelectFirst := True;
214-
for i := 0 to GetArrayLength(StringTable) - 1 do begin
215-
if IsCompatibleForInstall(StringTable[i]) then begin
216-
if IsPrerelease(StringTable[i]) then begin
217-
ReleaseDesc := 'Prerelease';
178+
LatestPrerelease := True;
179+
LatestRelease := True;
180+
181+
LoadStringsFromFile(Filename, Rows);
182+
SetArrayLength(Releases, GetArrayLength(Rows));
183+
184+
for i := 0 to GetArrayLength(Releases) - 1 do begin
185+
RowValues := SplitString(Rows[i], ',');
186+
187+
with Releases[i] do begin
188+
Version := RowValues[0];
189+
URL := RowValues[1];
190+
191+
if StrToInt(RowValues[3]) = {#COMPAT_MASK} then begin
192+
if RowValues[2] = 'prerelease' then begin
193+
if LatestPrerelease then begin
194+
ReleaseType := rtLatestPrerelease;
195+
LatestPrerelease := False;
196+
end else begin
197+
ReleaseType := rtPrerelease;
198+
end;
199+
end else begin
200+
if LatestRelease then begin
201+
ReleaseType := rtLatestRelease;
202+
LatestRelease := False;
203+
end else begin
204+
ReleaseType := rtRelease;
205+
end;
206+
end;
218207
end else begin
219-
ReleaseDesc := 'Release';
208+
ReleaseType := rtIncompatible;
220209
end;
221-
PSelRelease.CheckListBox.AddRadioButton('Elixir version ' + GetVersion(StringTable[i]), ReleaseDesc, 0, SelectFirst, True, StringTable[i]);
222-
SelectFirst := False;
223-
end;
224-
end;
225-
end;
226210
227-
function GetListBoxSelectedRelease(): TStrings;
228-
var
229-
i: Integer;
230-
begin
231-
for i := 0 to PSelRelease.CheckListBox.Items.Count - 1 do begin
232-
if PSelRelease.CheckListBox.Checked[i] then begin
233-
Result := TStrings(PSelRelease.CheckListBox.ItemObject[i]);
234-
break;
211+
Ref := TObject.Create();
235212
end;
236213
end;
237214
end;
238215
239-
function GetListBoxLatestRelease(Prerelease: Boolean): TStrings;
240-
var
241-
i: Integer;
242-
begin
243-
for i := 0 to PSelRelease.CheckListBox.Items.Count - 1 do begin
244-
if Prerelease = IsPrerelease(TStrings(PSelRelease.CheckListBox.ItemObject[i])) then begin
245-
Result := TStrings(PSelRelease.CheckListBox.ItemObject[i]);
246-
break;
247-
end;
248-
end;
249-
end;
250-
251-
function GetSelectedRelease(): TStrings;
216+
procedure ElixirReleasesToListBox(ListBox: TNewCheckListBox; Releases: array of TElixirRelease);
252217
var
253218
i: Integer;
254219
begin
255-
for i := 0 to PSelInstallType.CheckListBox.Items.Count - 1 do begin
256-
if PSelInstallType.CheckListBox.Checked[i] then begin
257-
if not (PSelInstallType.CheckListBox.ItemObject[i] = nil) then begin
258-
Result := TStrings(PSelInstallType.CheckListBox.ItemObject[i]);
259-
end else begin
260-
Result := GetListBoxSelectedRelease();
220+
PSelRelease.CheckListBox.Items.Clear;
221+
for i := 0 to GetArrayLength(Releases) - 1 do begin
222+
with Releases[i] do begin
223+
if ReleaseType <> rtIncompatible then begin
224+
PSelRelease.CheckListBox.AddRadioButton('Elixir version ' + Version, ReleaseTypeToString(ReleaseType), 0, (ReleaseType = rtLatestRelease), True, Ref);
261225
end;
262-
break;
263-
end;
226+
end
264227
end;
265228
end;
266229
@@ -279,7 +242,7 @@ begin
279242
end;
280243
281244
if RegGetSubkeyNames(HKEY_LOCAL_MACHINE, KeyPath, Versions) then begin
282-
if RegQueryStringValue(HKEY_LOCAL_MACHINE, KeyPath + '\' + GetERTSVersion, '', Path) then begin
245+
if RegQueryStringValue(HKEY_LOCAL_MACHINE, KeyPath + '\' + ErlangInfo.ERTSVersion, '', Path) then begin
283246
Result := Path;
284247
end else if RegQueryStringValue(HKEY_LOCAL_MACHINE, KeyPath + '\' + Versions[GetArrayLength(Versions) - 1], '', Path) then begin
285248
Result := Path;
@@ -312,10 +275,10 @@ procedure CurPageChanged(CurPageID: Integer);
312275
begin
313276
if CurPageID = wpPreparing then begin
314277
if IsTaskSelected('erlang\32') then begin
315-
idpAddFile(GetOTP32URL, GetOTP32Exe);
278+
idpAddFile(ErlangInfo.URL32, GetOTP32Exe);
316279
end;
317280
if IsTaskSelected('erlang\64') then begin
318-
idpAddFile(GetOTP64URL, GetOTP64Exe);
281+
idpAddFile(ErlangInfo.URL64, GetOTP64Exe);
319282
end;
320283
idpAddFile(GetURL(GetSelectedRelease()), ExpandConstant('{tmp}\Precompiled.zip'));
321284
idpDownloadAfter(wpPreparing);

0 commit comments

Comments
 (0)