Subversion Repositories oidplus

Rev

Rev 733 | Rev 737 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 733 Rev 735
Line 1... Line 1...
1
unit STRLIST;
1
unit STRLIST;
2
 
2
 
3
(************************************************)
3
(************************************************)
4
(* STRLIST.PAS                                  *)
4
(* STRLIST.PAS                                  *)
5
(* Author:   Daniel Marschall                   *)
5
(* Author:   Daniel Marschall                   *)
6
(* Revision: 2020-09-11                         *)
6
(* Revision: 2022-02-14                         *)
7
(* License:  Apache 2.0                         *)
7
(* License:  Apache 2.0                         *)
8
(* This file contains:                          *)
8
(* This file contains:                          *)
9
(* - StringList implementation for Turbo Pascal *)
9
(* - StringList implementation for Turbo Pascal *)
10
(************************************************)
10
(************************************************)
11
 
11
 
Line 17... Line 17...
17
    init: boolean;
17
    init: boolean;
18
    element: string;
18
    element: string;
19
    next: PStringList;
19
    next: PStringList;
20
  end;
20
  end;
21
 
21
 
22
procedure InitList(var list: PStringList);
22
procedure CreateList(var list: PStringList);
23
procedure FreeList(list: PStringList);
23
procedure FreeList(list: PStringList);
24
function ListContains(list: PStringList; val: string): boolean;
24
function ListContains(list: PStringList; val: string): boolean;
25
procedure ListClear(list: PStringList);
25
procedure ListClear(list: PStringList);
26
procedure ListAppend(list: PStringList; str: string);
26
function ListAppend(list: PStringList; str: string): integer;
27
function ListCount(list: PStringList): integer;
27
function ListCount(list: PStringList): integer;
28
procedure ListDeleteElement(list: PStringlist; idx: integer);
28
procedure ListDeleteElement(list: PStringlist; idx: integer);
29
function ListGetElement(list: PStringList; idx: integer): string;
29
function ListGetElement(list: PStringList; idx: integer): string;
30
procedure ListSetElement(list: PStringList; idx: integer; value: string);
30
procedure ListSetElement(list: PStringList; idx: integer; value: string);
31
procedure ListInsert(list: PStringlist; str: string; idx: integer);
31
procedure ListInsert(list: PStringlist; str: string; idx: integer);
Line 37... Line 37...
37
implementation
37
implementation
38
 
38
 
39
uses
39
uses
40
  VtsFuncs;
40
  VtsFuncs;
41
 
41
 
42
procedure InitList(var list: PStringList);
42
procedure CreateList(var list: PStringList);
43
begin
43
begin
44
  GetMem(list, SizeOf(TStringList));
44
  GetMem(list, SizeOf(TStringList));
45
  list^.init := false;
45
  list^.init := false;
46
  list^.element := '';
46
  list^.element := '';
47
  list^.next := nil;
47
  list^.next := nil;
Line 75... Line 75...
75
  begin
75
  begin
76
    ListDeleteElement(list, 0);
76
    ListDeleteElement(list, 0);
77
  end;
77
  end;
78
end;
78
end;
79
 
79
 
80
procedure ListAppend(list: PStringList; str: string);
80
function ListAppend(list: PStringList; str: string): integer;
81
var
81
var
82
  new: PStringList;
82
  new: PStringList;
83
  tmp: PStringList;
83
  tmp: PStringList;
-
 
84
  cnt: integer;
84
begin
85
begin
-
 
86
  cnt := 0;
85
  if not list^.init then
87
  if not list^.init then
86
  begin
88
  begin
87
   list^.element := str;
89
   list^.element := str;
88
   list^.init := true;
90
   list^.init := true;
89
  end
91
  end
90
  else
92
  else
91
  begin
93
  begin
-
 
94
    Inc(cnt);
92
    GetMem(new, sizeof(TStringList));
95
    GetMem(new, sizeof(TStringList));
93
    new^.element := str;
96
    new^.element := str;
94
    new^.next := nil;
97
    new^.next := nil;
95
    new^.init := true;
98
    new^.init := true;
96
 
99
 
97
    tmp := list;
100
    tmp := list;
98
    while tmp^.next <> nil do
101
    while tmp^.next <> nil do
99
    begin
102
    begin
100
      tmp := tmp^.next;
103
      tmp := tmp^.next;
-
 
104
      Inc(cnt);
101
    end;
105
    end;
102
 
106
 
103
    tmp^.next := new;
107
    tmp^.next := new;
104
  end;
108
  end;
-
 
109
 
-
 
110
  ListAppend := cnt; (* Return the index where the new element was put *)
105
end;
111
end;
106
 
112
 
107
function ListCount(list: PStringList): integer;
113
function ListCount(list: PStringList): integer;
108
var
114
var
109
  cnt: integer;
115
  cnt: integer;