[b]type[/b]
TWordList = [b]Array[/b] [b]of[/b] Word;
TCharArray = [b]Array[/b] [b]of[/b] Char;
[b]function[/b] ParseList([b]const[/b] PortList: [b]String[/b]): TWordList;
[b]var[/b]
F, P, Sep: PChar;
s: [b]string[/b];
i, Len, LoRange, HiRange: Integer;
[b]begin[/b]
SetLength(Result, 0);
F := PChar(PortList);
P := F;
[b]while[/b] P^ <> #0 [b]do[/b]
[b]begin[/b]
[b]while[/b] (P^ <> #0) [b]and[/b] ([b]not[/b] (P^ [b]in[/b] ['-', ',', ';'])) [b]do[/b] Inc(P);
[b]if[/b] P^ = '-' [b]then[/b]
[b]begin[/b]
Sep := P;
[color=#000080][i]// Ende suchen[/i][/color]
[b]while[/b] (P^ <> #0) [b]and[/b] ([b]not[/b] (P^ [b]in[/b] [',', ';'])) [b]do[/b] Inc(P);
SetString(s, F, Sep - F);
LoRange := StrToIntDef(s, -1);
Inc(Sep);
SetString(s, Sep, P - Sep);
HiRange := StrToIntDef(s, -1);
[b]end[/b] [b]else[/b]
[b]begin[/b]
SetString(s, F, P - F);
LoRange := StrToIntDef(s, -1);
HiRange := LoRange;
[b]end[/b];
[b]if[/b] (LoRange = -1) [b]or[/b] (HiRange = -1) [b]or[/b]
(LoRange > HiRange) [b]or[/b] (HiRange > High(Word))[b]then[/b]
[b]raise[/b]
Exception.Create('Ungültige Port Liste');
Len := Length(Result);
SetLength(Result, Len + HiRange - LoRange + 1);
[b]for[/b] i := LoRange [b]to[/b] HiRange [b]do[/b]
Result[Len + i - LoRange] := i;
[b]if[/b] P^ <> #0 [b]then[/b] Inc(P); [color=#000080][i]// ';', '-' überspringen[/i][/color]
F := P;
[b]end[/b];
[b]end[/b];