Browse Source

arosunits: datatypes library unit

git-svn-id: trunk@38986 -
marcus 7 years ago
parent
commit
76e3b28297
3 changed files with 998 additions and 0 deletions
  1. 1 0
      .gitattributes
  2. 1 0
      packages/arosunits/fpmake.pp
  3. 996 0
      packages/arosunits/src/datatypes.pas

+ 1 - 0
.gitattributes

@@ -1095,6 +1095,7 @@ packages/arosunits/src/asl.pas svneol=native#text/plain
 packages/arosunits/src/clipboard.pas svneol=native#text/plain
 packages/arosunits/src/clipboard.pas svneol=native#text/plain
 packages/arosunits/src/commodities.pas svneol=native#text/pascal
 packages/arosunits/src/commodities.pas svneol=native#text/pascal
 packages/arosunits/src/cybergraphics.pas svneol=native#text/plain
 packages/arosunits/src/cybergraphics.pas svneol=native#text/plain
+packages/arosunits/src/datatypes.pas svneol=native#text/pascal
 packages/arosunits/src/diskfont.pas svneol=native#text/plain
 packages/arosunits/src/diskfont.pas svneol=native#text/plain
 packages/arosunits/src/exec.pas svneol=native#text/plain
 packages/arosunits/src/exec.pas svneol=native#text/plain
 packages/arosunits/src/gadtools.pas svneol=native#text/plain
 packages/arosunits/src/gadtools.pas svneol=native#text/plain

+ 1 - 0
packages/arosunits/fpmake.pp

@@ -54,6 +54,7 @@ begin
     T:=P.Targets.AddUnit('cybergraphics.pas');
     T:=P.Targets.AddUnit('cybergraphics.pas');
     T:=P.Targets.AddUnit('locale.pas');
     T:=P.Targets.AddUnit('locale.pas');
     T:=P.Targets.AddUnit('commodities.pas');
     T:=P.Targets.AddUnit('commodities.pas');
+    T:=P.Targets.AddUnit('datatypes.pas');
 
 
 {$ifndef ALLPACKAGES}
 {$ifndef ALLPACKAGES}
     Run;
     Run;

+ 996 - 0
packages/arosunits/src/datatypes.pas

@@ -0,0 +1,996 @@
+{
+    This file is part of the Free Pascal run time library.
+    Copyright (c) 2014 by Free Pascal development team
+
+    asl.library functions
+
+    See the file COPYING.FPC, included in this distribution,
+    for details about the copyright.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ **********************************************************************}
+unit datatypes;
+
+interface
+
+uses
+  Exec, AmigaDOS, Utility, AGraphics, Intuition, IFFParse;
+
+const
+  DATATYPESNAME = 'datatypes.library';
+
+// datatypes
+const
+  ID_DTYP = Ord('D') shl 24 + Ord('T') shl 16 + Ord('Y') shl 8 + Ord('P'); // DTYP
+  ID_DTHD = Ord('D') shl 24 + Ord('T') shl 16 + Ord('H') shl 8 + Ord('D'); // DTHD
+
+type
+  PDataTypeHeader = ^TDataTypeHeader;
+  TDataTypeHeader = record
+    dth_Name: STRPTR;       // Name of the data type
+    dth_BaseName: STRPTR;   // Base name of the data type
+    dth_Pattern: STRPTR;    // File name match pattern
+    dth_Mask: PSmallInt;    // Comparison mask (binary)
+    dth_GroupID: LongWord;  // DataType Group GID_*
+    dth_ID: LongWord;       // DataType ID (same as IFF FORM type) ID_*
+    dth_MaskLen: SmallInt;  // Length of the comparison mask
+    dth_Pad: SmallInt;      // Unused at present (must be 0)
+    dth_Flags: Word;        // Flags DTF_*
+    dth_Priority: Word;
+ end;
+
+const
+  DTHSIZE = SizeOf(TDataTypeHeader);
+
+  // TDataTypeHeader.dth_Flags
+  DTF_TYPE_MASK = $000F;
+  DTF_BINARY    = $0000;
+  DTF_ASCII     = $0001;
+  DTF_IFF       = $0002;
+  DTF_MISC      = $0003;
+  DTF_CASE      = $0010; // Case is important
+  DTF_SYSTEM1   = $1000; // For system use only
+
+// TDataTypeHeader.dth_GroupID and TDataTypeHeader.dth_ID
+
+  // System file -- executable, directory, library, font and so on.
+  GID_SYSTEM    = Ord('s') shl 24 + Ord('y') shl 16 + Ord('s') shl 8 + Ord('t'); // syst
+  ID_BINARY     = Ord('b') shl 24 + Ord('i') shl 16 + Ord('n') shl 8 + Ord('a'); // bina
+  ID_EXECUTABLE = Ord('e') shl 24 + Ord('x') shl 16 + Ord('e') shl 8 + Ord('c'); // exec
+  ID_DIRECTORY  = Ord('d') shl 24 + Ord('i') shl 16 + Ord('r') shl 8 + Ord('e'); // dire
+  ID_IFF        = Ord('i') shl 24 + Ord('f') shl 16 + Ord('f') shl 8 + Ord(#0);  // iff
+
+  // Text, formatted or not
+  GID_TEXT = Ord('t') shl 24 + Ord('e') shl 16 + Ord('x') shl 8 + Ord('t'); // text
+  ID_ASCII = Ord('a') shl 24 + Ord('s') shl 16 + Ord('c') shl 8 + Ord('i'); // asci
+
+  // Formatted text combined with graphics or other DataTypes
+  GID_DOCUMENT = Ord('d') shl 24 + Ord('o') shl 16 + Ord('c') shl 8 + Ord('u'); // docu
+
+  // Sound
+  GID_SOUND = Ord('s') shl 24 + Ord('o') shl 16 + Ord('u') shl 8 + Ord('n'); // soun
+
+  // Musical instrument
+  GID_INSTRUMENT = Ord('i') shl 24 + Ord('n') shl 16 + Ord('s') shl 8 + Ord('t'); // inst
+
+  // Musical score
+  GID_MUSIC = Ord('m') shl 24 + Ord('u') shl 16 + Ord('s') shl 8 + Ord('i'); // musi
+
+  // Picture
+  GID_PICTURE = Ord('p') shl 24 + Ord('i') shl 16 + Ord('c') shl 8 + Ord('t'); // pict
+
+  //* Animated pictures */
+  GID_ANIMATION = Ord('a') shl 24 + Ord('n') shl 16 + Ord('i') shl 8 + Ord('m'); // anim
+
+  //* Animation with audio */
+  GID_MOVIE = Ord('m') shl 24 + Ord('o') shl 16 + Ord('v') shl 8 + Ord('i'); // movi
+
+  ID_CODE = Ord('D') shl 24 + Ord('T')  shl 16 + Ord('C') shl 8 + Ord('D'); // DTCD
+
+type
+  PTHookContext = ^TDTHookContext;
+  TDTHookContext = record
+    dthc_SysBase: PLibrary;
+    dthc_DOSBase: PLibrary;
+    dthc_IFFParseBase: PLibrary;
+    dthc_UtilityBase: PLibrary;
+    // File context
+    dthc_Lock: BPTR;
+    dthc_FIB: PFileInfoBlock;
+    dthc_FileHandle: BPTR;       // Pointer to file handle (may be nil)
+    dthc_IFF: PIFFHandle;        // Pointer to IFFHandle (may be nil)
+    dthc_Buffer: STRPTR;         // Buffer...
+    dthc_BufferLength: LongWord; // ... and corresponding length
+ end;
+const
+  ID_TOOL = Ord('D') shl 24 + Ord('T') shl 16 + Ord('T') shl 8 + Ord('L'); // DTTL
+
+type
+  PTool = ^TTool;
+  TTool = record
+    tn_Which: Word;     // TW_*
+    tn_Flags: Word;     // Flags TF_*
+    tn_Program: STRPTR; // Application to use
+  end;
+
+const
+  // TTool.tn_Which field
+  TW_MISC   = 0;
+  TW_INFO   = 1;
+  TW_BROWSE = 2;
+  TW_EDIT   = 3;
+  TW_PRINT  = 4;
+  TW_MAIL   = 5;
+  // TTool.tnFlags field
+  TF_LAUNCH_MASK = $000F;
+  TF_SHELL       = $0001;
+  TF_WORKBENCH   = $0002;
+  TF_RX          = $0003;
+
+  // Tags for use with FindToolNodeA(), GetToolAttrsA() and so on
+  TOOLA_Dummy      = TAG_USER;
+  TOOLA_Program    = TOOLA_Dummy + 1;
+  TOOLA_Which      = TOOLA_Dummy + 2;
+  TOOLA_LaunchType = TOOLA_Dummy + 3;
+
+const
+  ID_TAGS = Ord('D') shl 24 + Ord('T') shl 16 + Ord('T') shl 8 + Ord('G'); // DTTG
+
+type
+  PDataType = ^TDataType;
+  TDataType = record
+    dtn_Node1: TNode;            // These two nodes are for...
+    dtn_Node2: TNode;            // ...system use only!
+    dtn_Header: PDataTypeHeader;
+    dtn_ToolList: TList;         // Tool nodes
+    dtn_FunctionName: STRPTR;    // Name of comparison routine
+    dtn_AttrList: PTagItem;      // Object creation tags
+    dtn_Length: LongWord;        // Length of the memory block
+  end;
+
+const
+  DTNSIZE = SizeOf(TDataType);
+
+type
+  PToolNode = ^TToolNode;
+  TToolNode = record
+    tn_Node: TNode;
+    tn_Tool: TTool;
+    tn_Length: LongWord; // Length of the memory block
+  end;
+
+const
+  TNSIZE = SizeOf(TToolNode);
+
+  ID_NAME = Ord('N') shl 24 + Ord('A') shl 16 + Ord('M') shl 8 + Ord('E');
+
+  // Text ID's
+  DTERROR_UNKNOWN_DATATYPE     = 2000;
+  DTERROR_COULDNT_SAVE         = 2001;
+  DTERROR_COULDNT_OPEN         = 2002;
+  DTERROR_COULDNT_SEND_MESSAGE = 2003;
+
+  // new for V40
+  DTERROR_COULDNT_OPEN_CLIPBOARD = 2004;
+  DTERROR_Reserved               = 2005;
+  DTERROR_UNKNOWN_COMPRESSION    = 2006;
+  DTERROR_NOT_ENOUGH_DATA        = 2007;
+  DTERROR_INVALID_DATA           = 2008;
+
+  DTMSG_TYPE_OFFSET = 2100;
+
+// datatypesclass
+const
+  DATATYPESCLASS = 'datatypesclass';
+
+  DTA_Dummy = TAG_USER + $1000;
+
+  DTA_TextAttr       = DTA_Dummy + 10; // (PTextAttr) Default TextAttr to use for text within the object
+  DTA_TopVert        = DTA_Dummy + 11; // (LongInt) Top vertical unit
+  DTA_VisibleVert    = DTA_Dummy + 12; // (LongInt) Number of visible vertical units
+  DTA_TotalVert      = DTA_Dummy + 13; // (LongInt) Total number of vertical units
+  DTA_VertUnit       = DTA_Dummy + 14; // (LongInt) Number of pixels per vertical unit
+  DTA_TopHoriz       = DTA_Dummy + 15; // (LongInt) Top horizontal unit
+  DTA_VisibleHoriz   = DTA_Dummy + 16; // (LongInt) Number of visible horizontal units
+  DTA_TotalHoriz     = DTA_Dummy + 17; // (LongInt) Total number of horiziontal units
+  DTA_HorizUnit      = DTA_Dummy + 18; // (LongInt) Number of pixels per horizontal unit
+  DTA_NodeName       = DTA_Dummy + 19; // (PByte) Name of the current element within the object
+  DTA_Title          = DTA_Dummy + 20; // (STRPTR) Object's title
+  DTA_TriggerMethods = DTA_Dummy + 21; // (PDTMethod) Pointer to a nil terminated array of trigger methods
+  DTA_Data           = DTA_Dummy + 22; // (APTR) Object data
+  DTA_TextFont       = DTA_Dummy + 23; // (PTextFont) Default font to use
+  DTA_Methods        = DTA_Dummy + 24; // (PLongWord) Pointer to an array (terminated with #0) of methods that the object supports
+  DTA_PrinterStatus  = DTA_Dummy + 25; // (LongInt) Printer error message
+  DTA_PrinterProc    = DTA_Dummy + 26; // (PProcess) PRIVATE! Pointer to the print process
+  DTA_LayoutProc     = DTA_Dummy + 27; // (PProcess) PRIVATE! Pointer to the print process
+  DTA_Busy           = DTA_Dummy + 28; // Turns the application's busy pointer on and off
+  DTA_Sync           = DTA_Dummy + 29; // Indicate that new information has been loaded into an object.
+                                       // (This is used for models that cache the DTA_TopVert-like tags.)
+  DTA_BaseName       = DTA_Dummy + 30; // Base name of the class
+  DTA_GroupID        = DTA_Dummy + 31; // Group that the object must belong to
+  DTA_ErrorLevel     = DTA_Dummy + 32; // Error level
+  DTA_ErrorNumber    = DTA_Dummy + 33; // datatypes.library error number
+  DTA_ErrorString    = DTA_Dummy + 34; // Argument for datatypes.library error
+  DTA_Conductor      = DTA_Dummy + 35; // (PByte) Name of a realtime.library conductor -- defaults to "Main"
+  DTA_ControlPanel   = DTA_Dummy + 36; // (LongBool) Specify whether a control panel should be embedded into the object or not
+                                       // (for example in the animation datatype) -- defaults to True
+  DTA_Immediate      = DTA_Dummy + 37; // (LongBool) Should the object begin playing immediately? -- defaults to False
+  DTA_Repeat         = DTA_Dummy + 38; // (LongBool) Indicate that the object should repeat playing -- defaults to False
+  // V44
+  DTA_SourceAddress  = DTA_Dummy + 39; // (APTR) V44: Address of object if of type DTST_MEMORY
+  DTA_SourceSize     = DTA_Dummy + 40; // (LongWord) V44: Size of object if of type DTST_MEMORY
+
+  // DTObject attributes
+  DTA_Name          = DTA_Dummy + 100;
+  DTA_SourceType    = DTA_Dummy + 101;
+  DTA_Handle        = DTA_Dummy + 102;
+  DTA_DataType      = DTA_Dummy + 103;
+  DTA_Domain        = DTA_Dummy + 104;
+  // Left, Top, Width, Height -> use the Gadgetclass Tags
+  DTA_ObjName       = DTA_Dummy + 109;
+  DTA_ObjAuthor     = DTA_Dummy + 110;
+  DTA_ObjAnnotation = DTA_Dummy + 111;
+  DTA_ObjCopyright  = DTA_Dummy + 112;
+  DTA_ObjVersion    = DTA_Dummy + 113;
+  DTA_ObjectID      = DTA_Dummy + 114;
+  DTA_UserData      = DTA_Dummy + 115;
+  // RelLeft, RelTop, RelWidth, RelHeight -> use the Gadgetclass Tags
+  DTA_FrameInfo     = DTA_Dummy + 116;
+  DTA_SelectDomain  = DTA_Dummy + 121;
+  DTA_TotalPVert    = DTA_Dummy + 122;
+  DTA_TotalPHoriz   = DTA_Dummy + 123;
+  DTA_NominalVert   = DTA_Dummy + 124;
+  DTA_NominalHoriz  = DTA_Dummy + 125;
+
+  // Printing attributes
+  DTA_DestCols      = DTA_Dummy + 400; // (LongInt) Destination x width
+  DTA_DestRows      = DTA_Dummy + 401; // (LongInt) Destination y height
+  DTA_Special       = DTA_Dummy + 402; // (Word) Option flags
+  DTA_RastPort      = DTA_Dummy + 403; // (PRastPort) RastPort used when printing
+  DTA_ARexxPortName = DTA_Dummy + 404; // (STRPTR) Pointer to base name for ARexx port
+
+  DTST_RAM       = 1;
+  DTST_FILE      = 2;
+  DTST_CLIPBOARD = 3;
+  DTST_HOTLINK   = 4;
+  DTST_MEMORY    = 5; // V44
+
+// This structure is attached to the Gadget.SpecialInfo field of the gadget. Use Get/Set calls to access it.
+type
+  PDTSpecialInfo = ^TDTSpecialInfo;
+  TDTSpecialInfo = record
+    si_Lock: TSignalSemaphore;
+    si_Flags: LongWord;
+
+    si_TopVert: LongInt;   // Top row (in units)
+    si_VisVert: LongInt;   // Number of visible rows (in units)
+    si_TotVert: LongInt;   // Total number of rows (in units)
+    si_OTopVert: LongInt;  // Previous top (in units)
+    si_VertUnit: LongInt;  // Number of pixels in vertical unit
+
+    si_TopHoriz: LongInt;  // Top column (in units)
+    si_VisHoriz: LongInt;  // Number of visible columns (in units)
+    si_TotHoriz: LongInt;  // Total number of columns (in units)
+    si_OTopHoriz: LongInt; // Previous top (in units)
+    si_HorizUnit: LongInt; // Number of pixels in horizontal unit
+ end;
+
+const
+  DTSIF_LAYOUT     = 1 shl 0; // Object is in layout processing
+  DTSIF_NEWSIZE    = 1 shl 1; // Object needs to be layed out
+  DTSIF_DRAGGING   = 1 shl 2;
+  DTSIF_DRAGSELECT = 1 shl 3;
+  DTSIF_HIGHLIGHT  = 1 shl 4;
+  DTSIF_PRINTING   = 1 shl 5; // Object is being printed
+  DTSIF_LAYOUTPROC = 1 shl 6; // Object is in layout process
+
+type
+  PDTMethod = ^TDTMethod;
+  TDTMethod = record
+    dtm_Label: STRPTR;
+    dtm_Command: STRPTR;
+    dtm_Method: LongWord;
+  end;
+
+const
+  DTM_Dummy          = $600;
+
+  DTM_FRAMEBOX       = $601; // Get the environment an object requires
+  DTM_PROCLAYOUT     = $602;
+  DTM_ASYNCLAYOUT    = $603;
+  DTM_REMOVEDTOBJECT = $604; // When RemoveDTObject() is called
+
+  DTM_SELECT         = $605;
+  DTM_CLEARSELECTED  = $606;
+
+  DTM_COPY           = $607;
+  DTM_PRINT          = $608;
+  DTM_ABORTPRINT     = $609;
+
+  DTM_NEWMEMBER      = $610;
+  DTM_DISPOSEMEMBER  = $611;
+
+  DTM_GOTO           = $630;
+  DTM_TRIGGER        = $631;
+
+  DTM_OBTAINDRAWINFO  = $640;
+  DTM_DRAW            = $641;
+  DTM_RELEASEDRAWINFO = $642;
+
+  DTM_WRITE           = $650;
+
+type
+  PFrameInfo = ^TFrameInfo;
+  TFrameInfo = record
+    fri_PropertyFlags: LongWord; // DisplayInfo
+    fri_Resolution: TPoint;      // DisplayInfo
+
+    fri_RedBits: Byte;
+    fri_GreenBits: Byte;
+    fri_BlueBits: Byte;
+
+    fri_Dimensions: record
+      Width: LongWord;
+      Height: LongWord;
+      Depth: LongWord;
+    end;
+
+    fri_Screen: PScreen;
+    fri_ColorMap: PColorMap;
+
+    fri_Flags: LongWord; // FIF_*
+  end;
+
+const
+  FIF_SCALABLE   = $1;
+  FIF_SCROLLABLE = $2;
+  FIF_REMAPPABLE = $4;
+
+type
+  // DTM_REMOVEDTOBJECT, DTM_CLEARSELECTED, DTM_COPY, DTM_ABORTPRINT
+  PdtGeneral = ^TdtGeneral;
+  TdtGeneral = record
+    MethodID: PtrUInt;
+    dtg_GInfo: PGadgetInfo;
+  end;
+
+  // DTM_SELECT
+  PdtSelect = ^TdtSelect;
+  TdtSelect = record
+    MethodID: PtrUInt;
+    dts_GInfo: PGadgetInfo;
+    dts_Select: TRectangle;
+  end;
+
+  // DTM_FRAMEBOX
+  PdtFrameBox = ^TdtFrameBox;
+  TdtFrameBox = record
+    MethodID: PtrUInt;
+    dtf_GInfo: PGadgetInfo;
+    dtf_ContentsInfo: PFrameInfo;
+    dtf_FrameInfo: PFrameInfo;    // Input
+    dtf_SizeFrameInfo: LongWord;  // Output
+    dtf_FrameFlags: LongWord;
+  end;
+
+  // DTM_GOTO
+  PdtGoto = ^TdtGoto;
+  TdtGoto = record
+    MethodID: PtrUInt;
+    dtg_GInfo: PGadgetInfo;
+    dtg_NodeName: STRPTR;   // Node to goto
+    dtg_AttrList: PTagItem; // Additional attributes
+  end;
+
+  //* DTM_TRIGGER */
+  PdtTrigger = ^TdtTrigger;
+  TdtTrigger = record
+    MethodID        : ULONG;
+    dtt_GInfo       : PGadgetInfo;
+    dtt_Function    : ULONG;
+    dtt_Data        : APTR;
+  end;
+
+const
+  STMF_METHOD_MASK   = $0000FFFF;
+  STMF_DATA_MASK     = $00FF0000;
+  STMF_RESERVED_MASK = $FF000000;
+
+  STMD_VOID    = $00010000;
+  STMD_ULONG   = $00020000;
+  STMD_STRPTR  = $00030000;
+  STMD_TAGLIST = $00040000;
+
+  STM_DONE        = 0;
+  STM_PAUSE       = 1;
+  STM_PLAY        = 2;
+  STM_CONTENTS    = 3;
+  STM_INDEX       = 4;
+  STM_RETRACE     = 5;
+  STM_BROWSE_PREV = 6;
+  STM_BROWSE_NEXT = 7;
+
+  STM_NEXT_FIELD     =  8;
+  STM_PREV_FIELD     =  9;
+  STM_ACTIVATE_FIELD = 10;
+
+  STM_COMMAND = 11;
+
+  STM_REWIND      = 12;
+  STM_FASTFORWARD = 13;
+  STM_STOP        = 14;
+  STM_RESUME      = 15;
+  STM_LOCATE      = 16;
+  //* 17 is reserved for help */
+  STM_SEARCH      = 18;
+  STM_SEARCH_NEXT = 19;
+  STM_SEARCH_PREV = 20;
+
+  STM_USER = 100;
+
+  // skipped PrinterIO, dtPrint -> needs printer unit
+
+type
+  // DTM_DRAW
+  PdtDraw = ^TdtDraw;
+  TdtDraw = record
+    MethodID: PtrUInt;
+    dtd_RPort: PRastPort;
+    dtd_Left: LongInt;
+    dtd_Top: LongInt;
+    dtd_Width: LongInt;
+    dtd_Height: LongInt;
+    dtd_TopHoriz: LongInt;
+    dtd_TopVert: LongInt;
+    dtd_AttrList: PTagItem; // Additional attributes
+  end;
+
+  // DTM_RELEASERAWINFO
+  PdtReleaseDrawInfo = ^TdtReleaseDrawInfo;
+  TdtReleaseDrawInfo = record
+    MethodID: PtrUInt;
+    dtr_Handle: APTR; // Handle as returned by DTM_OBTAINDRAWINFO
+  end;
+
+  // DTM_WRITE
+  PdtWrite = ^TdtWrite;
+  TdtWrite = record
+    MethodID: PtrUInt;
+    dtw_GInfo: PGadgetInfo; // Gadget information
+    dtw_FileHandle: BPTR;   // File handle to write to
+    dtw_Mode: LongWord;
+    dtw_AttrList: PTagItem; // Additional attributes
+  end;
+
+const
+  DTWM_IFF = 0; // Save data as IFF data
+  DTWM_RAW = 1; // Save data as local data format
+
+// amigaguideclass
+const
+  AMIGAGUIDEDTCLASS = 'amigaguide.datatype';
+
+  AGDTA_Dummy      = DTA_Dummy + 700;
+  AGDTA_Secure     = AGDTA_Dummy + 1;
+  AGDTA_HelpGroup  = AGDTA_Dummy + 2;
+
+//  pictureclass
+const
+  PICTUREDTCLASS = 'picture.datatype';
+
+Type
+  PBitMapHeader = ^TBitMapHeader;
+  TBitMapHeader = record
+    bmh_Width: Word;
+    bmh_Height: Word;
+    bmh_Left: SmallInt;
+    bmh_Top: SmallInt;
+    bmh_Depth: Byte;
+    bmh_Masking: Byte;
+    bmh_Compression: Byte;
+    bmh_Pad: Byte;
+    bmh_Transparent: Word;
+    bmh_XAspect: Byte;
+    bmh_YAspect: Byte;
+    bmh_PageWidth: SmallInt;
+    bmh_PageHeight: SmallInt;
+  end;
+
+  PColorRegister = ^TColorRegister;
+  TColorRegister = record
+    red: Byte;
+    green: Byte;
+    blue: Byte;
+  end;
+
+const
+  PDTA_ModeID           = DTA_Dummy + 200;
+  PDTA_BitMapHeader     = DTA_Dummy + 201;
+  PDTA_BitMap           = DTA_Dummy + 202;
+  PDTA_ColorRegisters   = DTA_Dummy + 203;
+  PDTA_CRegs            = DTA_Dummy + 204;
+  PDTA_GRegs            = DTA_Dummy + 205;
+  PDTA_ColorTable       = DTA_Dummy + 206;
+  PDTA_ColorTable2      = DTA_Dummy + 207;
+  PDTA_Allocated        = DTA_Dummy + 208;
+  PDTA_NumColors        = DTA_Dummy + 209;
+  PDTA_NumAlloc         = DTA_Dummy + 210;
+  PDTA_Remap            = DTA_Dummy + 211;
+  PDTA_Screen           = DTA_Dummy + 212;
+  PDTA_FreeSourceBitMap = DTA_Dummy + 213;
+  PDTA_Grab             = DTA_Dummy + 214;
+  PDTA_DestBitMap       = DTA_Dummy + 215;
+  PDTA_ClassBitMap      = DTA_Dummy + 216;
+  PDTA_NumSparse        = DTA_Dummy + 217;
+  PDTA_SparseTable      = DTA_Dummy + 218;
+
+  PDTA_SourceMode       = DTA_Dummy + 250; // Set the interface mode for the sub datatype. See below.
+  PDTA_DestMode         = DTA_Dummy + 251; // Set the interface mode for the app datatype. See below.
+  PDTA_UseFriendBitMap  = DTA_Dummy + 255; // Make the allocated bitmap be a "friend" bitmap (LongBool)
+
+  // Interface modes
+  PMODE_V42 = 0; // Mode used for backward compatibility
+  PMODE_V43 = 1; // Use the new features
+
+  mskNone                = 0;
+  mskHasMask             = 1;
+  mskHasTransparentColor = 2;
+  mskLasso               = 3;
+  mskHasAlpha            = 4;
+
+  cmpNone     = 0;
+  cmpByteRun1 = 1;
+  cmpByteRun2 = 2;
+
+  ID_ILBM = Ord('I') shl 24 + Ord('L') shl 16 + Ord('B') shl 8 + Ord('M'); // ILBM
+  ID_BMHD = Ord('B') shl 24 + Ord('M') shl 16 + Ord('H') shl 8 + Ord('D'); // BMHD
+  ID_BODY = Ord('B') shl 24 + Ord('O') shl 16 + Ord('D') shl 8 + Ord('Y'); // BODY
+  ID_CMAP = Ord('C') shl 24 + Ord('M') shl 16 + Ord('A') shl 8 + Ord('P'); // CMAP
+  ID_CRNG = Ord('C') shl 24 + Ord('R') shl 16 + Ord('N') shl 8 + Ord('G'); // CRNG
+  ID_GRAB = Ord('G') shl 24 + Ord('R') shl 16 + Ord('A') shl 8 + Ord('B'); // GRAB
+  ID_SPRT = Ord('S') shl 24 + Ord('P') shl 16 + Ord('R') shl 8 + Ord('T'); // SPRT
+  ID_DEST = Ord('D') shl 24 + Ord('E') shl 16 + Ord('S') shl 8 + Ord('T'); // DEST
+  ID_CAMG = Ord('C') shl 24 + Ord('A') shl 16 + Ord('M') shl 8 + Ord('G'); // CAMG
+
+ {Support for the V44 picture.datatype
+
+    It is not clear, if AROS should support AmigaOS3.5 .
+
+    But if you want V44-support define DT_V44_SUPPORT
+
+    Joerg Dietrich}
+
+{$IFDEF DT_V44_SUPPORT}
+const
+  PDTANUMPICTURES_Unknown = 0;
+
+  PDTA_WhichPicture    = DTA_Dummy + 219;
+  PDTA_GetNumPictures  = DTA_Dummy + 220;
+  PDTA_MaxDitherPens   = DTA_Dummy + 221;
+  PDTA_DitherQuality   = DTA_Dummy + 222;
+  PDTA_AllocatedPens   = DTA_Dummy + 223;
+  PDTA_ScaleQuality    = DTA_Dummy + 224;
+  PDTA_DelayRead       = DTA_Dummy + 225;
+  PDTA_DelayedRead     = DTA_Dummy + 226;
+
+  PDTA_SourceMode      = DTA_Dummy + 250;
+  PDTA_DestMode        = DTA_Dummy + 251;
+  PDTA_UseFriendBitMap = DTA_Dummy + 255;
+  PDTA_MaskPlane       = DTA_Dummy + 258;
+
+  PDTM_Dummy           = DTM_Dummy + $60;
+  PDTM_WRITEPIXELARRAY = PDTM_Dummy + 0;
+  PDTM_READPIXELARRAY  = PDTM_Dummy + 1;
+  PDTM_SCALE           = PDTM_Dummy + 2;
+
+type
+  PpdtBlitPixelArray = ^TpdtBlitPixelArray;
+  TpdtBlitPixelArray = record
+    MethodID: PtrUInt;
+    pbpa_PixelData: APTR;
+    pbpa_PixelFormat: LongWord;
+    pbpa_PixelArrayMod: LongWord;
+    pbpa_Left: LongWord;
+    pbpa_Top: LongWord;
+    pbpa_Width: LongWord;
+    pbpa_Height: LongWord;
+  end;
+
+  PpdtScale = ^TpdtScale;
+  TpdtScale = record
+    MethodID: PtrUInt;
+    ps_NewWidth: LongWord;
+    ps_NewHeight: LongWord;
+    ps_Flags: LongWord;
+  end;
+
+const
+  // Flags for ps_Flags, for AROS only
+  PScale_KeepAspect = $10;  // Keep aspect ratio when scaling, fit inside given x, y coordinates
+
+  PBPAFMT_RGB       = 0;
+  PBPAFMT_RGBA      = 1;
+  PBPAFMT_ARGB      = 2;
+  PBPAFMT_LUT8      = 3;
+  PBPAFMT_GREY8     = 4;
+{$ENDIF DT_V44_SUPPORT}
+
+// soundclass
+
+const
+  SOUNDDTCLASS = 'sound.datatype';
+
+const
+  // Tags
+  SDTA_Dummy         = DTA_Dummy + 500;
+  SDTA_VoiceHeader   = SDTA_Dummy + 1;
+  SDTA_Sample        = SDTA_Dummy + 2;
+  SDTA_SampleLength  = SDTA_Dummy + 3;
+  SDTA_Period        = SDTA_Dummy + 4;
+  SDTA_Volume        = SDTA_Dummy + 5;
+  SDTA_Cycles        = SDTA_Dummy + 6;
+  SDTA_SignalTask    = SDTA_Dummy + 7;
+  SDTA_SignalBit     = SDTA_Dummy + 8;
+  SDTA_SignalBitMask = SDTA_SignalBit;
+  SDTA_Continuous    = SDTA_Dummy + 9;
+
+  // New in V44
+  SDTA_SignalBitNumber = SDTA_Dummy + 10;
+  SDTA_SamplesPerSec    = SDTA_Dummy + 11;
+  SDTA_ReplayPeriod     = SDTA_Dummy + 12;
+  SDTA_LeftSample       = SDTA_Dummy + 13;
+  SDTA_RightSample      = SDTA_Dummy + 14;
+  SDTA_Pan              = SDTA_Dummy + 15;
+  SDTA_FreeSampleData   = SDTA_Dummy + 16;
+  SDTA_SyncSampleChange = SDTA_Dummy + 17;
+
+  // Data compression methods
+  CMP_NONE     = 0;
+  CMP_FIBDELTA = 1;
+
+  // Unity = Fixed 1.0 = maximum volume
+  Unity = $10000;
+
+type
+  PVoiceHeader = ^TVoiceHeader;
+  TVoiceHeader = record
+    vh_OneShotHiSamples: LongWord;
+    vh_RepeatHiSamples: LongWord;
+    vh_SamplesPerHiCycle: LongWord;
+    vh_SamplesPerSec: Word;
+    vh_Octaves: Byte;
+    vh_Compression: Byte;
+    vh_Volume: LongWord;
+  end;
+
+const
+  // Channel allocation */
+  SAMPLETYPE_Left   = 2;
+  SAMPLETYPE_Right  = 4;
+  SAMPLETYPE_Stereo = 6;
+
+type
+  TSampleType = LongInt;
+
+const
+  // IFF types
+  ID_8SVX = Ord('8') shl 24 + Ord('S') shl 16 + Ord('V') shl 8 + Ord('X'); // 8SVX
+  ID_VHDR = Ord('V') shl 24 + Ord('H') shl 16 + Ord('D') shl 8 + Ord('R'); // VHDR
+  ID_CHAN = Ord('C') shl 24 + Ord('H') shl 16 + Ord('A') shl 8 + Ord('N'); // CHAN
+
+// soundclassext
+const
+  SDTA_SampleType = SDTA_Dummy + 30;
+  SDTA_Panning    = SDTA_Dummy + 31;
+  SDTA_Frequency  = SDTA_Dummy + 32;
+
+  SDTST_M8S  = 0;
+  SDTST_S8S  = 1;
+  SDTST_M16S = 2;
+  SDTST_S16S = 3;
+
+// textclass
+
+const
+  TEXTDTCLASS = 'text.datatype';
+
+  // attributes
+  TDTA_Buffer      = DTA_Dummy + 300;
+  TDTA_BufferLen   = DTA_Dummy + 301;
+  TDTA_LineList    = DTA_Dummy + 302;
+  TDTA_WordSelect  = DTA_Dummy + 303;
+  TDTA_WordDelim   = DTA_Dummy + 304;
+  TDTA_WordWrap    = DTA_Dummy + 305;
+
+
+Type
+  // There is one line structure for every line of text in the document.
+  PLine = ^TLine;
+  TLine = record
+    ln_Link: TMinNode;
+    ln_Text: STRPTR;
+    ln_TextLen: LongWord;
+    ln_XOffset: Word;
+    ln_YOffset: Word;
+    ln_Width: Word;
+    ln_Height: Word;
+    ln_Flags: Word;      // LNF_*
+    ln_FgPen: ShortInt;
+    ln_BgPen: ShortInt;
+    ln_Style: LongWord;
+    ln_Data: APTR;
+  end;
+
+const
+  // ln_Flags
+  LNF_LF       = 1 shl 0;
+  LNF_LINK     = 1 shl 1;
+  LNF_OBJECT   = 1 shl 2;
+  LNF_SELECTED = 1 shl 3;
+
+  ID_FTXT = Ord('F') shl 24 + Ord('T') shl 16 + Ord('X') shl 8 + Ord('T'); // FTXT
+  ID_CHRS = Ord('C') shl 24 + Ord('H') shl 16 + Ord('R') shl 8 + Ord('S'); // CHRS
+
+// animationclass
+const
+  ANIMATIONDTCLASS = 'animation.datatype';
+
+  // Tags
+  ADTA_Dummy           = DTA_Dummy + 600;
+  ADTA_ModeID          = PDTA_ModeID;
+  ADTA_KeyFrame        = PDTA_BitMap;
+  ADTA_ColorRegisters  = PDTA_ColorRegisters;
+  ADTA_CRegs           = PDTA_CRegs;
+  ADTA_GRegs           = PDTA_GRegs;
+  ADTA_ColorTable      = PDTA_ColorTable;
+  ADTA_ColorTable2     = PDTA_ColorTable2;
+  ADTA_Allocated       = PDTA_Allocated;
+  ADTA_NumColors       = PDTA_NumColors;
+  ADTA_NumAlloc        = PDTA_NumAlloc;
+  ADTA_Remap           = PDTA_Remap;
+  ADTA_Screen          = PDTA_Screen;
+  ADTA_Width           = ADTA_Dummy + 1;
+  ADTA_Height          = ADTA_Dummy + 2;
+  ADTA_Depth           = ADTA_Dummy + 3;
+  ADTA_Frames          = ADTA_Dummy + 4;
+  ADTA_Frame           = ADTA_Dummy + 5;
+  ADTA_FramesPerSecond = ADTA_Dummy + 6;
+  ADTA_FrameIncrement  = ADTA_Dummy + 7;
+  ADTA_Sample          = SDTA_Sample;
+  ADTA_SampleLength    = SDTA_SampleLength;
+  ADTA_Period          = SDTA_Period;
+  ADTA_Volume          = SDTA_Volume;
+  ADTA_Cycles          = SDTA_Cycles;
+
+  // New in V44
+  ADTA_PreloadFrameCount = ADTA_Dummy + 8;
+  ADTA_LeftSample        = SDTA_LeftSample;
+  ADTA_RightSample       = SDTA_RightSample;
+  ADTA_SamplesPerSec     = SDTA_SamplesPerSec;
+
+  // IFF ANIM chunks
+  ID_ANIM = Ord('A') shl 24 + Ord('N') shl 16 + Ord('I') shl 8 + Ord('M'); // ANIM
+  ID_ANHD = Ord('A') shl 24 + Ord('N') shl 16 + Ord('H') shl 8 + Ord('D'); // ANHD
+  ID_DLTA = Ord('D') shl 24 + Ord('L') shl 16 + Ord('T') shl 8 + Ord('A'); // DLTA
+
+type
+  PAnimHeader = ^TAnimHeader;
+  TAnimHeader = record
+    ah_Operation: Byte;
+    ah_Mask: Byte;
+    ah_Height: Word;
+    ah_Width: Word;
+    ah_Left: SmallInt;
+    ah_Top: SmallInt;
+    ah_AbsTime: LongWord;
+    ah_RelTime: LongWord;
+    ah_Interleave: Byte;
+    ah_Pad0: Byte;
+    ah_Flags: LongWord;
+    ah_Pad: array[0..15] of Byte;
+  end;
+
+const
+  // Methods
+  ADTM_Dummy       = $700;
+  ADTM_LOADFRAME   = $701;
+  ADTM_UNLOADFRAME = $702;
+  ADTM_START       = $703;
+  ADTM_PAUSE       = $704;
+  ADTM_STOP        = $705;
+  ADTM_LOCATE      = $706;
+  // New on V44
+  ADTM_LOADNEWFORMATFRAME   = $707;
+  ADTM_UNLOADNEWFORMATFRAME = $708;
+
+type
+  PadtFrame = ^TadtFrame;
+  TadtFrame = record
+    MethodID: PtrUInt;
+    alf_TimeStamp: LongWord;
+    alf_Frame: LongWord;
+    alf_Duration: LongWord;
+    alf_BitMap: PBitMap;
+    alf_CMap: PColorMap;
+    alf_Sample: PShortInt;
+    alf_SampleLength: LongWord;
+    alf_Period: LongWord;
+    alf_UserData: APTR;
+  end;
+
+  PadtNewFormatFrame = ^TadtNewFormatFrame;
+  TadtNewFormatFrame = record
+    MethodID: PtrUInt;
+    alf_TimeStamp: LongWord;
+    alf_Frame: LongWord;
+    alf_Duration: LongWord;
+    alf_BitMap: PBitMap;
+    alf_CMap: PColorMap;
+    alf_Sample: PShortInt;
+    alf_SampleLength: LongWord;
+    alf_Period: LongWord;
+    alf_UserData: APTR;
+    alf_Size: LongWord;
+    alf_LeftSample: PShortInt;
+    alf_RightSample: PShortInt;
+    alf_SamplesPerSec: LongWord;
+  end;
+
+  PadtStart = ^tadtStart;
+  TadtStart = record
+    MethodID: PtrUInt;
+    asa_Frame: LongWord;
+  end;
+
+function SDTM_ISSTEREO(SampleType: LongWord): Boolean; inline;
+function SDTM_CHANNELS(SampleType: LongWord): LongWord; inline;
+function SDTM_BYTESPERSAMPLE(x: LongWord): LongWord; inline;
+function SDTM_BYTESPERPOINT(x: LongWord): LongWord; inline;
+
+var
+  DataTypesBase: PLibrary;
+
+function ObtainDataTypeA(Typ: LongWord; Handle: APTR; Attrs: PTagItem): PDataType; syscall DataTypesBase 6;
+procedure ReleaseDataType(Dt: PDataType); syscall DataTypesBase 7;
+function NewDTObjectA(Name: APTR; Attrs: PTagItem): PObject_; syscall DataTypesBase 8;
+procedure DisposeDTObject(O: PObject_); syscall DataTypesBase 9;
+function SetDTAttrsA(O: PObject_; Win: PWindow; Req: PRequester; Attrs: PTagItem): LongWord; syscall DataTypesBase 10;
+function GetDTAttrsA(O: PObject_; Attrs: PTagItem): LongWord; syscall DataTypesBase 11;
+function AddDTObject(Win: PWindow; Req: PRequester; Obj: PObject_; Pos: LongInt): LongInt; syscall DataTypesBase 12;
+procedure RefreshDTObjectA(Obj: PObject_; Window: PWindow; Req: PRequester; Attrs: PTagItem); syscall DataTypesBase 13;
+function DoAsyncLayout(Obj: PObject_; Gpl: PgpLayout): LongWord; syscall DataTypesBase 14;
+function DoDTMethodA(O: PObject_; Win: PWindow; Req: PRequester; Msg: PMsg): PtrUInt; syscall DataTypesBase 15;
+function RemoveDTObject(Window: PWindow; Obj: PObject_): LongInt; syscall DataTypesBase 16;
+function GetDTMethods(Obj: PObject_): PLongWord; syscall DataTypesBase 17;
+function GetDTTriggerMethods(Obj: PObject_): PDTMethod; syscall DataTypesBase 18;
+function PrintDTObjectA(Obj: PObject_; Window: PWindow; Requester: PRequester; Msg: Pointer {PdtPrint}): LongWord; syscall DataTypesBase 19;
+function ObtainDTDrawInfoA(O: PObject_; Attrs: PTagItem): APTR; syscall DataTypesBase 20;
+function DrawDTObjectA(Rp: PRastPort; O: PObject_; x, y, w, h, th, tv: LongInt; Attrs: PTagItem): LongInt; syscall DataTypesBase 21;
+procedure ReleaseDTDrawInfo(O: PObject_; Handle: APTR); syscall DataTypesBase 22;
+function GetDTString(Id: LongWord): CONST_STRPTR; syscall DataTypesBase 23;
+procedure LockDataType(Dt: PDataType); syscall DataTypesBase 40;
+function FindToolNodeA(ToolList: PList; Attrs: PTagItem): PToolNode; syscall DataTypesBase 41;
+function LaunchToolA(Tool: PTool; Project: STRPTR; Attrs: PTagItem): LongWord; syscall DataTypesBase 42;
+function FindMethod(Methods: PLongWord; SearchModeID: LongWord): PLongWord; syscall DataTypesBase 43;
+function FindTriggerMethod(Methods: PDTMethod; Command: STRPTR; Method: LongWord): PDTMethod; syscall DataTypesBase 44;
+function CopyDTMethods(Methods: PLongWord; Include: PLongWord; Exclude: PLongWord): PLongWord; syscall DataTypesBase 45;
+function CopyDTTriggerMethods(Methods: PDTMethod; Include: PDTMethod; Exclude: PDTMethod): PDTMethod; syscall DataTypesBase 46;
+procedure FreeDTMethods(Methods: APTR); syscall DataTypesBase 47;
+function GetDTTriggerMethodDataFlags(Method: LongWord): LongWord; syscall DataTypesBase 48;
+function SaveDTObjectA(O: PObject_; Win: PWindow; Req: PRequester; File_: STRPTR; Mode: LongWord; SaveIcon: Bool; Attrs: PTagItem): LongWord; syscall DataTypesBase 49;
+function StartDragSelect(O: PObject_): LongWord; syscall DataTypesBase 50;
+function DoDTDomainA(O: PObject_; Win: PWindow; Req: PRequester; RPort: PRastPort; Which: LongWord; Domain: PIBox; Attrs: PTagItem): LongWord; syscall DataTypesBase 51;
+
+function ObtainDataType(Typ: LongWord; Handle: APTR; const TagList: array of PtrUInt): PDataType; inline;
+function NewDTObject(Name: APTR; const TagList: array of PtrUInt): PObject_; inline;
+function SetDTAttrs(O: PObject_; Win: PWindow; Req: PRequester; const TagList: array of PtrUInt): LongWord; inline;
+function GetDTAttrs(O: PObject_; const TagList: array of PtrUInt): LongWord; inline;
+procedure RefreshDTObject(Obj: PObject_; Window: PWindow; Req: PRequester; const TagList: array of PtrUInt); inline;
+function DoDTMethod(O: PObject_; Win: PWindow; Req: PRequester; const ArgList: array of PtrUInt): PtrUInt; inline;
+function PrintDTObject(Obj: PObject_; Window: PWindow; Requester: PRequester; const ArgList: array of PtrUInt): LongWord; inline;
+function ObtainDTDrawInfo(O: PObject_; const TagList: array of PtrUInt): APTR; inline;
+function DrawDTObject(Rp: PRastPort; O: PObject_; x, y, w, h, th, tv: LongInt; const TagList: array of PtrUInt): LongInt; inline;
+function FindToolNode(ToolList: PList; const TagList: array of PtrUInt): PToolNode; inline;
+function LaunchTool(Tool: PTool; Project: STRPTR; const TagList: array of PtrUInt): LongWord; inline;
+function SaveDTObject(O: PObject_; Win: PWindow; Req: PRequester; File_: STRPTR; Mode: LongWord; SaveIcon: Bool; const TagList: array of PtrUInt): LongWord; inline;
+function DoDTDomain(O: PObject_; Win: PWindow; Req: PRequester; RPort: PRastPort; Which: LongWord; Domain: PIBox; const TagList: array of PtrUInt): LongWord; inline;
+
+implementation
+
+function SDTM_ISSTEREO(SampleType: LongWord): Boolean; inline;
+begin
+  SDTM_ISSTEREO := Boolean(SampleType and 1);
+end;
+
+function SDTM_CHANNELS(SampleType: LongWord): LongWord; inline;
+begin
+  SDTM_CHANNELS := 1 + (SampleType and 1);
+end;
+
+function SDTM_BYTESPERSAMPLE(x: LongWord): LongWord; inline;
+begin
+  if x >= SDTST_M16S then
+    SDTM_BYTESPERSAMPLE := 2
+  else
+    SDTM_BYTESPERSAMPLE := 1;
+end;
+
+function SDTM_BYTESPERPOINT(x: LongWord): LongWord;
+begin
+  SDTM_BYTESPERPOINT := SDTM_CHANNELS(x) * SDTM_BYTESPERSAMPLE(x);
+end;
+
+function ObtainDataType(Typ: LongWord; Handle: APTR; const TagList: array of PtrUInt): PDataType;
+begin
+  ObtainDataType := ObtainDataTypeA(Typ, Handle, @TagList);
+end;
+
+function NewDTObject(Name: APTR; const TagList: array of PtrUInt): PObject_;
+begin
+  NewDTObject := NewDTObjectA(Name, @TagList);
+end;
+
+function SetDTAttrs(O: PObject_; Win: PWindow; Req: PRequester; const TagList: array of PtrUInt): LongWord;
+begin
+  SetDTAttrs := SetDTAttrsA(O, Win, Req, @TagList);
+end;
+
+function GetDTAttrs(O: PObject_; const TagList: array of PtrUInt): LongWord;
+begin
+  GetDTAttrs := GetDTAttrsA(O, @TagList);
+end;
+
+procedure RefreshDTObject(Obj: PObject_; Window: PWindow; Req: PRequester; const TagList: array of PtrUInt);
+begin
+  RefreshDTObjectA(Obj, Window, Req, @TagList);
+end;
+
+function DoDTMethod(O: PObject_; Win: PWindow; Req: PRequester; const ArgList: array of PtrUInt): PtrUInt;
+begin
+  DoDTMethod := DoDTMethodA(O, Win, Req, @ArgList);
+end;
+
+function PrintDTObject(Obj: PObject_; Window: PWindow; Requester: PRequester; const ArgList: array of PtrUInt): LongWord;
+begin
+  PrintDTObject := PrintDTObjectA(Obj, Window, Requester, @ArgList);
+end;
+
+function ObtainDTDrawInfo(O: PObject_; const TagList: array of PtrUInt): APTR;
+begin
+  ObtainDTDrawInfo := ObtainDTDrawInfoA(O, @TagList);
+end;
+
+function DrawDTObject(Rp: PRastPort; O: PObject_; x, y, w, h, th, tv: LongInt; const TagList: array of PtrUInt): LongInt;
+begin
+  DrawDTObject := DrawDTObjectA(RP, O, x, y, w, h, th, tv, @TagList);
+end;
+
+function FindToolNode(ToolList: PList; const TagList: array of PtrUInt): PToolNode;
+begin
+  FindToolNode := FindToolNodeA(ToolList, @TagList);
+end;
+
+function LaunchTool(Tool: PTool; Project: STRPTR; const TagList: array of PtrUInt): LongWord;
+begin
+  LaunchTool := LaunchToolA(Tool, Project, @TagList);
+end;
+
+function SaveDTObject(O: PObject_; Win: PWindow; Req: PRequester; File_: STRPTR; Mode: LongWord; SaveIcon: Bool; const TagList: array of PtrUInt): LongWord;
+begin
+  SaveDTObject := SaveDTObjectA(O, Win, Req, File_, Mode, SaveIcon, @TagList);
+end;
+
+function DoDTDomain(O: PObject_; Win: PWindow; Req: PRequester; RPort: PRastPort; Which: LongWord; Domain: PIBox; const TagList: array of PtrUInt): LongWord;
+begin
+  DoDTDomain := DoDTDomainA(O, Win, Req, RPort, Which, Domain, @TagList);
+end;
+
+initialization
+  DataTypesBase := OpenLibrary(DATATYPESNAME, 0);
+finalization
+  CloseLibrary(DataTypesBase);
+
+end.