Browse Source

AROS: removed readintags and readinlongs (just a bug function), Added missing functions in AmigaDos, GetAttr overloaded with var parameter

git-svn-id: trunk@31164 -
marcus 10 years ago
parent
commit
56ae2ad6bc

File diff suppressed because it is too large
+ 163 - 163
packages/arosunits/src/amigados.pas


+ 8 - 2
packages/arosunits/src/asl.pas

@@ -536,13 +536,19 @@ implementation
 
 
 
 
 function AllocAslRequest(ReqType: LongWord; const Tags: array of const): Pointer;
 function AllocAslRequest(ReqType: LongWord; const Tags: array of const): Pointer;
+var
+  TagList: TTagsList;
 begin
 begin
-  AllocAslRequest := AllocAslRequestA(reqType , readintags(tags));
+  AddTags(TagList, Tags);
+  AllocAslRequest := AllocAslRequestA(reqType , GetTagPtr(TagList));
 end;
 end;
 
 
 function AslRequest(Requester: Pointer; const Tags: array of const): LongBool;
 function AslRequest(Requester: Pointer; const Tags: array of const): LongBool;
+var
+  TagList: TTagsList;
 begin
 begin
-  AslRequest := AslRequestA(Requester , readintags(tags));
+  AddTags(TagList, Tags);
+  AslRequest := AslRequestA(Requester , GetTagPtr(TagList));
 end;
 end;
 
 
 initialization
 initialization

File diff suppressed because it is too large
+ 145 - 145
packages/arosunits/src/intuition.pas


+ 1 - 36
packages/arosunits/src/longarray.pas

@@ -36,20 +36,12 @@ uses
 type
 type
   PArgList = ^TArgList;
   PArgList = ^TArgList;
   TArgList = array of IPTR;
   TArgList = array of IPTR;
-  
-function readinlongs(const Args: array of const): Pointer;
+
 procedure AddArguments(var ArgList: TArgList; const Args: array of const);
 procedure AddArguments(var ArgList: TArgList; const Args: array of const);
 function GetArgPtr(var ArgList: TArgList): Pointer;
 function GetArgPtr(var ArgList: TArgList): Pointer;
 
 
 implementation
 implementation
 
 
-type
-  TMyArgs = array of IPTR;
-  PMyArgs = ^TMyArgs;
-
-var
-  ArgArray : PMyArgs;
-
 procedure AddArguments(var ArgList: TArgList; const Args: array of const);
 procedure AddArguments(var ArgList: TArgList; const Args: array of const);
 var
 var
   i: Integer;
   i: Integer;
@@ -80,32 +72,5 @@ begin
   Result := @(ArgList[0]);
   Result := @(ArgList[0]);
 end;
 end;
 
 
-
-function ReadInLongs(const Args: array of const): Pointer;
-var
-  i: Integer;
-begin
-  for i := 0 to High(Args) do begin
-    case args[i].vtype of
-      vtinteger: ArgArray^[i] := IPTR(Args[i].vinteger);
-      vtpchar: ArgArray^[i] := IPTR(Args[i].vpchar);
-      vtchar: ArgArray^[i] := IPTR(Args[i].vchar);
-      vtpointer: ArgArray^[i] := IPTR(Args[i].vpointer);
-      vtstring: ArgArray^[i] := IPTR(PChar(string(Args[i].vstring^)));
-      vtboolean: ArgArray^[i] := IPTR(byte(Args[i].vboolean));
-    end;
-  end;
-  readinlongs := @(argarray^[0]);
-end;
-
-
-
-
-initialization
-  New(argarray);
-  SetLength(argarray^, 200);
-finalization
-  SetLength(argarray^, 0);
-  Dispose(argarray);
 end.
 end.
 
 

+ 20 - 5
packages/arosunits/src/mui.pas

@@ -3859,28 +3859,43 @@ end;
  Functions and procedures with array of const go here
  Functions and procedures with array of const go here
 }
 }
 function MUI_AllocAslRequestTags(_type : longword; const tags : Array Of Const) : Pointer;
 function MUI_AllocAslRequestTags(_type : longword; const tags : Array Of Const) : Pointer;
+var
+  TagList: TTagsList;
 begin
 begin
-    MUI_AllocAslRequestTags := MUI_AllocAslRequest(_type , readintags(tags));
+  AddTags(TagList, Tags);
+  MUI_AllocAslRequestTags := MUI_AllocAslRequest(_type, GetTagPtr(TagList));
 end;
 end;
 
 
 function MUI_AslRequestTags(req : Pointer; const tags : Array Of Const) : LongBool;
 function MUI_AslRequestTags(req : Pointer; const tags : Array Of Const) : LongBool;
+var
+  TagList: TTagsList;
 begin
 begin
-    MUI_AslRequestTags := MUI_AslRequest(req , readintags(tags));
+  AddTags(TagList, Tags);
+  MUI_AslRequestTags := MUI_AslRequest(req, GetTagPtr(TagList));
 end;
 end;
 
 
 function MUI_MakeObject(_type : LongInt; const params : Array Of Const) : pLongWord;
 function MUI_MakeObject(_type : LongInt; const params : Array Of Const) : pLongWord;
+var
+  Args: TArgList;
 begin
 begin
-    MUI_MakeObject := MUI_MakeObjectA(_type , readinlongs(params));
+  AddArguments(Args, params);
+  MUI_MakeObject := MUI_MakeObjectA(_type, GetArgPtr(Args));
 end;
 end;
 
 
 function MUI_NewObject(a0arg : pCHAR; const tags : Array Of Const) : pLongWord;
 function MUI_NewObject(a0arg : pCHAR; const tags : Array Of Const) : pLongWord;
+var
+  TagList: TTagsList;
 begin
 begin
-    MUI_NewObject := MUI_NewObjectA(a0arg , readintags(tags));
+  AddTags(TagList, Tags);
+  MUI_NewObject := MUI_NewObjectA(a0arg , GetTagPtr(TagList));
 end;
 end;
 
 
 function MUI_Request(app : Pointer; win : Pointer; flags : longword; title : pCHAR; gadgets : pCHAR; format : pCHAR; const params : Array Of Const) : LongInt;
 function MUI_Request(app : Pointer; win : Pointer; flags : longword; title : pCHAR; gadgets : pCHAR; format : pCHAR; const params : Array Of Const) : LongInt;
+var
+  Args: TArgList;
 begin
 begin
-    MUI_Request := MUI_RequestA(app , win , flags , title , gadgets , format , readintags(params));
+  AddArguments(Args, params);
+  MUI_Request := MUI_RequestA(app , win , flags , title , gadgets , format , GetArgPtr(Args));
 end;
 end;
 
 
 const
 const

+ 0 - 43
packages/arosunits/src/tagsarray.pas

@@ -24,18 +24,12 @@ uses
 
 
 type
 type
   TTagsList = array of ttagitem;
   TTagsList = array of ttagitem;
-  PMyTags = ^TTagsList;
 
 
-
-function ReadInTags(const Args: array of const): PTagItem;
 procedure AddTags(var Taglist: TTagsList; const Args: array of const);
 procedure AddTags(var Taglist: TTagsList; const Args: array of const);
 function GetTagPtr(var TagList: TTagsList): PTagItem;
 function GetTagPtr(var TagList: TTagsList): PTagItem;
 
 
 implementation
 implementation
 
 
-var
-  MyTags: PMyTags;
-
 procedure AddTags(var Taglist: TTagsList; const Args: array of const);
 procedure AddTags(var Taglist: TTagsList; const Args: array of const);
 var
 var
   i: IPTR;
   i: IPTR;
@@ -69,43 +63,6 @@ begin
   GetTagPtr := @(TagList[0]);
   GetTagPtr := @(TagList[0]);
 end;
 end;
 
 
-function ReadInTags(const Args: array of const): PTagItem;
-var
-  i: IPTR;
-  ii: IPTR;
-begin
-  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 := IPTR(Args[i].vinteger);
-    end else
-    begin
-      case Args[i].vtype of
-        vtinteger: mytags^[ii].ti_data := IPTR(Args[i].vinteger);
-        vtboolean: mytags^[ii].ti_data := IPTR(Byte(Args[i].vboolean));
-        vtpchar: mytags^[ii].ti_data := IPTR(Args[i].vpchar);
-        vtchar: mytags^[ii].ti_data := IPTR(Args[i].vchar);
-        vtstring: mytags^[ii].ti_data := IPTR(PChar(string(Args[i].vstring^)));
-        vtpointer: mytags^[ii].ti_data := IPTR(Args[i].vpointer);
-      end;
-      Inc(ii);
-    end;
-  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;
-
 initialization
 initialization
-  New(MyTags);
-  SetLength(MyTags^, 200);
 finalization
 finalization
-  SetLength(MyTags^, 0);
-  Dispose(MyTags);
 end.
 end.

+ 17 - 20
packages/arosunits/src/utility.pas

@@ -33,18 +33,18 @@ type
     Year: Word;
     Year: Word;
     WDay: Word;
     WDay: Word;
   end;
   end;
-  
+
 // Use CALLHOOKPKT to call a hook
 // Use CALLHOOKPKT to call a hook
   PHook = ^THook;
   PHook = ^THook;
   THookFunctionProc = function(Hook: PHook; Object_: APTR; Message: APTR): IPTR; cdecl;
   THookFunctionProc = function(Hook: PHook; Object_: APTR; Message: APTR): IPTR; cdecl;
-  
+
   THook = record
   THook = record
     h_MinNode: TMinNode;
     h_MinNode: TMinNode;
     h_Entry: IPTR;    // Main Entry point THookFunctionProc
     h_Entry: IPTR;    // Main Entry point THookFunctionProc
     h_SubEntry: IPTR; // Secondary entry point
     h_SubEntry: IPTR; // Secondary entry point
     h_Data: Pointer;     // owner specific
     h_Data: Pointer;     // owner specific
   end;
   end;
-  
+
 // The named object structure
 // The named object structure
   PNamedObject = ^TNamedObject;
   PNamedObject = ^TNamedObject;
   TNamedObject = record
   TNamedObject = record
@@ -66,16 +66,16 @@ const
 
 
 //   Control attributes for Pack/UnpackStructureTags()
 //   Control attributes for Pack/UnpackStructureTags()
 { PackTable definition:
 { PackTable definition:
- 
+
   The PackTable is a simple array of LONGWORDS that are evaluated by
   The PackTable is a simple array of LONGWORDS that are evaluated by
   PackStructureTags() and UnpackStructureTags().
   PackStructureTags() and UnpackStructureTags().
- 
+
   The table contains compressed information such as the tag offset from
   The table contains compressed information such as the tag offset from
   the base tag. The tag offset has a limited range so the base tag is
   the base tag. The tag offset has a limited range so the base tag is
   defined in the first longword.
   defined in the first longword.
- 
+
   After the first longword, the fields look as follows:
   After the first longword, the fields look as follows:
- 
+
        +--------- 1 = signed, 0 = unsigned (for bits, 1=inverted boolean)
        +--------- 1 = signed, 0 = unsigned (for bits, 1=inverted boolean)
        |
        |
        |  +------ 00 = Pack/Unpack, 10 = Pack, 01 = Unpack, 11 = special
        |  +------ 00 = Pack/Unpack, 10 = Pack, 01 = Unpack, 11 = special
@@ -91,11 +91,11 @@ const
        Bit offset (for bit operations) ----/ |               |
        Bit offset (for bit operations) ----/ |               |
                                              \                       |
                                              \                       |
        Offset into data structure -----------------------------------/
        Offset into data structure -----------------------------------/
- 
+
   A -1 longword signifies that the next longword will be a new base tag
   A -1 longword signifies that the next longword will be a new base tag
- 
+
   A 0 longword signifies that it is the end of the pack table.
   A 0 longword signifies that it is the end of the pack table.
- 
+
   What this implies is that there are only 13-bits of address offset
   What this implies is that there are only 13-bits of address offset
   and 10 bits for tag offsets from the base tag.  For most uses this
   and 10 bits for tag offsets from the base tag.  For most uses this
   should be enough, but when this is not, either multiple pack tables
   should be enough, but when this is not, either multiple pack tables
@@ -108,7 +108,7 @@ const
   PSTB_PACK   = 29;       // Note that these are active low...
   PSTB_PACK   = 29;       // Note that these are active low...
   PSTF_PACK   = 1 shl 29;
   PSTF_PACK   = 1 shl 29;
   PSTB_UNPACK = 30;       // Note that these are active low...
   PSTB_UNPACK = 30;       // Note that these are active low...
-  PSTF_UNPACK = 1 shl 30;  
+  PSTF_UNPACK = 1 shl 30;
   PSTB_SIGNED = 31;
   PSTB_SIGNED = 31;
   PSTF_SIGNED = 1 shl 31;
   PSTF_SIGNED = 1 shl 31;
 
 
@@ -199,7 +199,7 @@ const
   MAP_REMOVE_NOT_FOUND = 0; // remove tags that aren't in mapList
   MAP_REMOVE_NOT_FOUND = 0; // remove tags that aren't in mapList
   MAP_KEEP_NOT_FOUND   = 1; // keep tags that aren't in mapList
   MAP_KEEP_NOT_FOUND   = 1; // keep tags that aren't in mapList
 
 
-  UTILITYNAME	= 'utility.library';
+  UTILITYNAME = 'utility.library';
 
 
 type
 type
   PUtilityBase = ^TUtilityBase;
   PUtilityBase = ^TUtilityBase;
@@ -250,7 +250,6 @@ function UnpackStructureTags(Pack: APTR; PackTable: PLongWord; TagList: PTagItem
 
 
 // Macros
 // Macros
 function CALLHOOKPKT_(Hook: PHook; Object_: APTR; Message: APTR): IPTR; inline;
 function CALLHOOKPKT_(Hook: PHook; Object_: APTR; Message: APTR): IPTR; inline;
-function TAGLIST(var Args: array of const): PTagItem; // NOT threadsafe! Better use AddTags/GetTagPtr
 
 
 // VarArgs Versions
 // VarArgs Versions
 function AllocNamedObject(const Name: STRPTR; const Tags: array of const): PNamedObject;
 function AllocNamedObject(const Name: STRPTR; const Tags: array of const): PNamedObject;
@@ -268,20 +267,18 @@ begin
   AddTags(TagList, Tags);
   AddTags(TagList, Tags);
   Result := AllocNamedObjectA(Name, GetTagPtr(TagList));
   Result := AllocNamedObjectA(Name, GetTagPtr(TagList));
 end;
 end;
-  
-function TAGLIST(var Args: array of const): PTagItem;
-begin
-  Result := ReadInTags(Args);
-end;
 
 
 function CallHook(Hook: PHook; Object_: APTR; const Params: array of const): IPTR;
 function CallHook(Hook: PHook; Object_: APTR; const Params: array of const): IPTR;
+var
+  Args: TArgList;
 begin
 begin
-  CallHook := CallHookPkt(Hook, Object_ , ReadInLongs(Params));
+  AddArguments(Args, params);
+  CallHook := CallHookPkt(Hook, Object_ , GetArgPtr(Args));
 end;
 end;
 
 
 function CALLHOOKPKT_(Hook: PHook; Object_: APTR; Message: APTR): IPTR;
 function CALLHOOKPKT_(Hook: PHook; Object_: APTR; Message: APTR): IPTR;
 var
 var
-  FuncPtr: THookFunctionProc; 
+  FuncPtr: THookFunctionProc;
 begin
 begin
   Result := 0;
   Result := 0;
   if (Hook = nil) or (Object_ = nil) or (Message = nil) then
   if (Hook = nil) or (Object_ = nil) or (Message = nil) then

+ 31 - 8
packages/arosunits/src/workbench.pas

@@ -605,50 +605,73 @@ uses
 
 
 // varargs versions:
 // varargs versions:
 function AddAppIcon(ID: LongWord; UserData: LongWord; Text_: PChar; MsgPort: PMsgPort; Lock: BPTR; DiskObj: PDiskObject; const Tags: array of const): PAppIcon;
 function AddAppIcon(ID: LongWord; UserData: LongWord; Text_: PChar; MsgPort: PMsgPort; Lock: BPTR; DiskObj: PDiskObject; const Tags: array of const): PAppIcon;
+var
+  TagList: TTagsList;
 begin
 begin
-  AddAppIcon := AddAppIconA(ID, UserData, Text_, MsgPort, Lock, DiskObj, ReadInTags(Tags));
+  AddTags(TagList, Tags);
+  AddAppIcon := AddAppIconA(ID, UserData, Text_, MsgPort, Lock, DiskObj, GetTagPtr(TagList));
 end;
 end;
 
 
 
 
 function AddAppMenuItem(ID: LongWord; UserData: LongWord; Text_: APTR; MsgPort: PMsgPort;  const Tags: array of const): PAppMenuItem;
 function AddAppMenuItem(ID: LongWord; UserData: LongWord; Text_: APTR; MsgPort: PMsgPort;  const Tags: array of const): PAppMenuItem;
+var
+  TagList: TTagsList;
 begin
 begin
-  AddAppMenuItem := AddAppMenuItemA(ID, UserData, Text_, MsgPort, ReadInTags(Tags));
+  AddAppMenuItem := AddAppMenuItemA(ID, UserData, Text_, MsgPort, GetTagPtr(TagList));
 end;
 end;
 
 
 
 
 function AddAppWindow(ID: LongWord; UserData: LongWord; Window: PWindow; MsgPort: PMsgPort;  const Tags: array of const): PAppWindow;
 function AddAppWindow(ID: LongWord; UserData: LongWord; Window: PWindow; MsgPort: PMsgPort;  const Tags: array of const): PAppWindow;
+var
+  TagList: TTagsList;
 begin
 begin
-  AddAppWindow := AddAppWindowA(ID, UserData, Window, MsgPort, ReadInTags(Tags));
+  AddTags(TagList, Tags);
+  AddAppWindow := AddAppWindowA(ID, UserData, Window, MsgPort, GetTagPtr(TagList));
 end;
 end;
 
 
 
 
 function AddAppWindowDropZone(Aw: PAppWindow; ID: LongWord; UserData: LongWord;  const Tags: array of const): PAppWindowDropZone;
 function AddAppWindowDropZone(Aw: PAppWindow; ID: LongWord; UserData: LongWord;  const Tags: array of const): PAppWindowDropZone;
+var
+  TagList: TTagsList;
 begin
 begin
-  AddAppWindowDropZone := AddAppWindowDropZoneA(Aw, ID, UserData, ReadInTags(Tags));
+  AddTags(TagList, Tags);
+  AddAppWindowDropZone := AddAppWindowDropZoneA(Aw, ID, UserData, GetTagPtr(TagList));
 end;
 end;
 
 
 
 
 function CloseWorkbenchObject(Name: STRPTR;  const Tags: array of const): LongBool;
 function CloseWorkbenchObject(Name: STRPTR;  const Tags: array of const): LongBool;
+var
+  TagList: TTagsList;
 begin
 begin
-  CloseWorkbenchObject := CloseWorkbenchObjectA(Name, ReadInTags(Tags));
+  AddTags(TagList, Tags);
+  CloseWorkbenchObject := CloseWorkbenchObjectA(Name, GetTagPtr(TagList));
 end;
 end;
 
 
 
 
 function MakeWorkbenchObjectVisible(Name: STRPTR;  const Tags: array of const): LongBool;
 function MakeWorkbenchObjectVisible(Name: STRPTR;  const Tags: array of const): LongBool;
+var
+  TagList: TTagsList;
 begin
 begin
-  MakeWorkbenchObjectVisible := MakeWorkbenchObjectVisibleA(Name, ReadInTags(Tags));
+  AddTags(TagList, Tags);
+  MakeWorkbenchObjectVisible := MakeWorkbenchObjectVisibleA(Name, GetTagPtr(TagList));
 end;
 end;
 
 
 
 
 function OpenWorkbenchObject(Name: STRPTR;  const Tags: array of const): LongBool;
 function OpenWorkbenchObject(Name: STRPTR;  const Tags: array of const): LongBool;
+var
+  TagList: TTagsList;
 begin
 begin
-  OpenWorkbenchObject := OpenWorkbenchObjectA(Name, ReadInTags(Tags));
+  AddTags(TagList, Tags);
+  OpenWorkbenchObject := OpenWorkbenchObjectA(Name, GetTagPtr(TagList));
 end;
 end;
 
 
 
 
 function WorkbenchControl(Name: STRPTR;  const Tags: array of const): LongBool;
 function WorkbenchControl(Name: STRPTR;  const Tags: array of const): LongBool;
+var
+  TagList: TTagsList;
 begin
 begin
-  WorkbenchControl := WorkbenchControlA(Name, ReadInTags(Tags));
+  AddTags(TagList, Tags);
+  WorkbenchControl := WorkbenchControlA(Name, GetTagPtr(TagList));
 end;
 end;
 
 
 
 

Some files were not shown because too many files changed in this diff