|
@@ -14,58 +14,98 @@
|
|
|
|
|
|
**********************************************************************}
|
|
**********************************************************************}
|
|
|
|
|
|
-{
|
|
|
|
- History:
|
|
|
|
-
|
|
|
|
- First version of this unit.
|
|
|
|
- Just use this unit when you want to
|
|
|
|
- use taglist.
|
|
|
|
-
|
|
|
|
- 09 Nov 2002
|
|
|
|
-
|
|
|
|
- [email protected]
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
unit tagsarray;
|
|
unit tagsarray;
|
|
-{$mode objfpc}
|
|
|
|
-
|
|
|
|
|
|
+{$mode objfpc}{$H+}
|
|
|
|
|
|
interface
|
|
interface
|
|
|
|
|
|
-uses Exec, Utility;
|
|
|
|
|
|
+uses
|
|
|
|
+ Exec, Utility;
|
|
|
|
+
|
|
|
|
+type
|
|
|
|
+ TTagsList = array of ttagitem;
|
|
|
|
+ PMyTags = ^TTagsList;
|
|
|
|
|
|
|
|
|
|
-function readintags(const args : array of const): pTagItem;
|
|
|
|
|
|
+function ReadInTags(const Args: array of const): PTagItem;
|
|
|
|
+procedure AddTags(var Taglist: TTagsList; const Args: array of const);
|
|
|
|
+function GetTagPtr(var TagList: TTagsList): PTagItem;
|
|
|
|
|
|
implementation
|
|
implementation
|
|
|
|
|
|
-uses pastoc;
|
|
|
|
|
|
+var
|
|
|
|
+ MyTags: PMyTags;
|
|
|
|
|
|
|
|
+procedure AddTags(var Taglist: TTagsList; const Args: array of const);
|
|
var
|
|
var
|
|
- mytags : array [0..200] of ttagitem;
|
|
|
|
|
|
+ i: PtrInt;
|
|
|
|
+ ii: PtrInt;
|
|
|
|
+begin
|
|
|
|
+ ii := Length(TagList);
|
|
|
|
+ SetLength(TagList, Length(TagList) + (Length(args) DIV 2));
|
|
|
|
+ for i := 0 to High(args) do
|
|
|
|
+ begin
|
|
|
|
+ if (not Odd(i)) then
|
|
|
|
+ begin
|
|
|
|
+ TagList[ii].ti_tag := PtrInt(Args[i].vinteger);
|
|
|
|
+ end else
|
|
|
|
+ begin
|
|
|
|
+ case Args[i].vtype of
|
|
|
|
+ vtinteger : TagList[ii].ti_data := PtrInt(Args[i].vinteger);
|
|
|
|
+ vtboolean : TagList[ii].ti_data := PtrInt(byte(Args[i].vboolean));
|
|
|
|
+ vtpchar : TagList[ii].ti_data := PtrInt(Args[i].vpchar);
|
|
|
|
+ vtchar : TagList[ii].ti_data := PtrInt(Args[i].vchar);
|
|
|
|
+ vtstring : TagList[ii].ti_data := PtrInt(PChar(string(Args[i].vstring^)));
|
|
|
|
+ vtpointer : TagList[ii].ti_data := PtrInt(Args[i].vpointer);
|
|
|
|
+ end;
|
|
|
|
+ inc(ii);
|
|
|
|
+ end;
|
|
|
|
+ end;
|
|
|
|
+end;
|
|
|
|
+
|
|
|
|
+function GetTagPtr(var TagList: TTagsList): pTagItem;
|
|
|
|
+begin
|
|
|
|
+ AddTags(TagList, [TAG_END, TAG_END]);
|
|
|
|
+ GetTagPtr := @(TagList[0]);
|
|
|
|
+end;
|
|
|
|
|
|
-function readintags(const args : array of const): pTagItem;
|
|
|
|
|
|
+function ReadInTags(const Args: array of const): PTagItem;
|
|
var
|
|
var
|
|
- i : longint;
|
|
|
|
- ii : longint;
|
|
|
|
|
|
+ i: PtrInt;
|
|
|
|
+ ii: PtrInt;
|
|
begin
|
|
begin
|
|
- ii := 0;
|
|
|
|
- for i := 0 to high(args) do begin
|
|
|
|
- if (not odd(i)) then begin
|
|
|
|
- mytags[ii].ti_tag := longint(Args[i].vinteger);
|
|
|
|
- end else begin
|
|
|
|
- case Args[i].vtype of
|
|
|
|
- vtinteger : mytags[ii].ti_data := longint(Args[i].vinteger);
|
|
|
|
- vtboolean : mytags[ii].ti_data := longint(byte(Args[i].vboolean));
|
|
|
|
- vtpchar : mytags[ii].ti_data := longint(Args[i].vpchar);
|
|
|
|
- vtchar : mytags[ii].ti_data := longint(Args[i].vchar);
|
|
|
|
- vtstring : mytags[ii].ti_data := longint(pas2c(Args[i].vstring^));
|
|
|
|
- vtpointer : mytags[ii].ti_data := longint(Args[i].vpointer);
|
|
|
|
- end;
|
|
|
|
- inc(ii);
|
|
|
|
- end;
|
|
|
|
|
|
+ ii := 0;
|
|
|
|
+ SetLength(MyTags^, (Length(Args) div 2) + 4); // some more at the end
|
|
|
|
+ for i := 0 to High(Args) do
|
|
|
|
+ begin
|
|
|
|
+ if not Odd(i) then
|
|
|
|
+ begin
|
|
|
|
+ mytags^[ii].ti_tag := PtrInt(Args[i].vinteger);
|
|
|
|
+ end else
|
|
|
|
+ begin
|
|
|
|
+ case Args[i].vtype of
|
|
|
|
+ vtinteger: mytags^[ii].ti_data := PtrInt(Args[i].vinteger);
|
|
|
|
+ vtboolean: mytags^[ii].ti_data := PtrInt(Byte(Args[i].vboolean));
|
|
|
|
+ vtpchar: mytags^[ii].ti_data := PtrInt(Args[i].vpchar);
|
|
|
|
+ vtchar: mytags^[ii].ti_data := PtrInt(Args[i].vchar);
|
|
|
|
+ vtstring: mytags^[ii].ti_data := PtrInt(PChar(string(Args[i].vstring^)));
|
|
|
|
+ vtpointer: mytags^[ii].ti_data := PtrInt(Args[i].vpointer);
|
|
|
|
+ end;
|
|
|
|
+ Inc(ii);
|
|
end;
|
|
end;
|
|
- readintags := @mytags;
|
|
|
|
|
|
+ end;
|
|
|
|
+ Inc(ii);
|
|
|
|
+ // Add additional TAG_DONE (if user forget)
|
|
|
|
+ mytags^[ii].ti_tag := TAG_DONE;
|
|
|
|
+ mytags^[ii].ti_data := 0;
|
|
|
|
+ // return the pointer
|
|
|
|
+ ReadInTags := @(MyTags^[0]);
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+initialization
|
|
|
|
+ New(MyTags);
|
|
|
|
+ SetLength(MyTags^, 200);
|
|
|
|
+finalization
|
|
|
|
+ SetLength(MyTags^, 0);
|
|
|
|
+ Dispose(MyTags);
|
|
end.
|
|
end.
|