Browse Source

amiga units: datatypes library unit improved

git-svn-id: trunk@38987 -
marcus 7 years ago
parent
commit
ae01ff2bf3
2 changed files with 795 additions and 1188 deletions
  1. 787 1180
      packages/amunits/src/coreunits/datatypes.pas
  2. 8 8
      packages/arosunits/src/datatypes.pas

+ 787 - 1180
packages/amunits/src/coreunits/datatypes.pas

@@ -49,52 +49,42 @@
 
 
 unit datatypes;
 unit datatypes;
 
 
-INTERFACE
+interface
 
 
-uses exec, amigados, intuition, utility,
-     agraphics, iffparse, amigaprinter, prtbase;
+uses
+  exec, amigados, intuition, utility,
+  agraphics, iffparse, amigaprinter, prtbase;
 
 
+// datatypes
 const
 const
-{***************************************************************************}
-
- ID_DTYP = 1146378576;
-
-{***************************************************************************}
-
- ID_DTHD = 1146374212;
+  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
 Type
- pDataTypeHeader = ^tDataTypeHeader;
- tDataTypeHeader = record
-    dth_Name,                                         { Descriptive name of the data type }
-    dth_BaseName,                                     { Base name of the data type }
-    dth_Pattern  : STRPTR;                            { Match pattern for file name. }
-    dth_Mask : Pointer;                               { Comparision mask }
-    dth_GroupID,                                      { Group that the DataType is in }
-    dth_ID   : ULONG;                                 { ID for DataType (same as IFF FORM type) }
-    dth_MaskLen,                                      { Length of comparision mask }
-    dth_Pad   : smallint;                              { Unused at present (must be 0) }
-    dth_Flags,                                        { Flags }
-    dth_Priority  : WORD;                             { Priority }
+  PDataTypeHeader = ^TDataTypeHeader;
+  TDataTypeHeader = record
+    dth_Name: STRPTR;       // Descriptive name of the data type
+    dth_BaseName: STRPTR;   // Base name of the data type
+    dth_Pattern: STRPTR;    // Match pattern for file name.
+    dth_Mask: PSmallInt;    // Comparision mask
+    dth_GroupID: LongWord;  // Group that the DataType is in
+    dth_ID: LongWord;       // ID for DataType (same as IFF FORM type)
+    dth_MaskLen: SmallInt;  // Length of comparision mask
+    dth_Pad: SmallInt;      // Unused at present (must be 0)
+    dth_Flags: Word;        // Flags
+    dth_Priority: Word;     // Priority
  end;
  end;
-
 const
 const
- DTHSIZE = 32;
-
-{***************************************************************************}
+  DTHSIZE = SizeOf(TDataTypeHeader);
 
 
-{ Basic type }
- DTF_TYPE_MASK  = $000F;
- DTF_BINARY     = $0000;
- DTF_ASCII      = $0001;
- DTF_IFF        = $0002;
- DTF_MISC       = $0003;
-
-{ Set if case is important }
- DTF_CASE       = $0010;
-
-{ Reserved for system use }
- DTF_SYSTEM1    = $1000;
+// Basic type - TDataTypeHeader.dth_Flags
+  DTF_TYPE_MASK = $000F;
+  DTF_BINARY    = $0000;
+  DTF_ASCII     = $0001;
+  DTF_IFF       = $0002;
+  DTF_MISC      = $0003;
+  DTF_CASE      = $0010; // Set if case is important
+  DTF_SYSTEM1   = $1000; // Reserved for system use
 
 
 {****************************************************************************
 {****************************************************************************
  *
  *
@@ -114,1226 +104,843 @@ const
  *
  *
  ****************************************************************************}
  ****************************************************************************}
 
 
-{ System file, such as; directory, executable, library, device, font, etc. }
- GID_SYSTEM      = 1937339252;
-
-{ Formatted or unformatted text }
- GID_TEXT        = 1952807028;
-
-{ Formatted text with graphics or other DataTypes }
- GID_DOCUMENT    = 1685021557;
-
-{ Sound }
- GID_SOUND       = 1936684398;
-
-{ Musical instruments used for musical scores }
- GID_INSTRUMENT  = 1768846196;
-
-{ Musical score }
- GID_MUSIC       = 1836413801;
-
-{ Still picture }
- GID_PICTURE     = 1885954932;
-
-{ Animated picture }
- GID_ANIMATION   = 1634625901;
-
-{ Animation with audio track }
- GID_MOVIE       = 1836021353;
-
-{***************************************************************************}
-
-{ A code chunk contains an embedded executable that can be loaded
- * with InternalLoadSeg. }
- ID_CODE = 1146372932;
-
-Type
-{ DataTypes comparision hook context (Read-Only).  This is the
- * argument that is passed to a custom comparision routine. }
-
- pDTHookContext = ^tDTHookContext;
- tDTHookContext = record
-    { Libraries that are already opened for your use }
-    dthc_SysBase,
-    dthc_DOSBase,
-    dthc_IFFParseBase,
-    dthc_UtilityBase             : pLibrary;
-
-    { File context }
-    dthc_Lock                    : BPTR;                { Lock on the file }
-    dthc_FIB                     : pFileInfoBlock;      { Pointer to a FileInfoBlock }
-    dthc_FileHandle              : BPTR;                { Pointer to the file handle (may be NULL) }
-    dthc_IFF                     : pIFFHandle;          { Pointer to an IFFHandle (may be NULL) }
-    dthc_Buffer                  : STRPTR;              { Buffer }
-    dthc_BufferLength            : ULONG;               { Length of the buffer }
+  // System file, such as; directory, executable, library, device, font, etc.
+  GID_SYSTEM    = Ord('s') shl 24 + Ord('y') shl 16 + Ord('s') shl 8 + Ord('t'); // syst
+  // Formatted or unformatted text
+  GID_TEXT = Ord('t') shl 24 + Ord('e') shl 16 + Ord('x') shl 8 + Ord('t'); // text
+  // 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
+
+  // A code chunk contains an embedded executable that can be loaded with InternalLoadSeg.
+  ID_CODE = Ord('D') shl 24 + Ord('T')  shl 16 + Ord('C') shl 8 + Ord('D'); // DTCD
+
+// DataTypes comparision hook context (Read-Only).  This is the argument that is passed to a custom comparision routine.
+type
+  PTHookContext = ^TDTHookContext;
+  TDTHookContext = record
+    dthc_SysBase: PLibrary;
+    dthc_DOSBase: PLibrary;
+    dthc_IFFParseBase: PLibrary;
+    dthc_UtilityBase: PLibrary;
+    // File context
+    dthc_Lock: BPTR;             // Lock on the file
+    dthc_FIB: PFileInfoBlock;    // Pointer to a FileInfoBlock
+    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;
  end;
 
 
-{***************************************************************************}
-
 const
 const
- ID_TOOL = 1146377292;
+  ID_TOOL = Ord('D') shl 24 + Ord('T') shl 16 + Ord('T') shl 8 + Ord('L'); // DTTL
 
 
-Type
- pTool = ^tTool;
- tTool = record
-    tn_Which,                                      { Which tool is this }
-    tn_Flags  : WORD;                              { Flags }
-    tn_Program : STRPTR;                           { Application to use }
- end;
+type
+  PTool = ^TTool;
+  TTool = record
+    tn_Which: Word;      // Which tool is this TW_*
+    tn_Flags: Word;      // Flags TF_*
+    tn_Program: STRPTR;  // Application to use
+  end;
 
 
 const
 const
- TSIZE = 8;
-
-{ defines for tn_Which }
- TW_INFO               =  1;
- TW_BROWSE             =  2;
- TW_EDIT               =  3;
- TW_PRINT              =  4;
- TW_MAIL               =  5;
-
-{ defines for tn_Flags }
- TF_LAUNCH_MASK        =  $000F;
- TF_SHELL              =  $0001;
- TF_WORKBENCH          =  $0002;
- TF_RX                 =  $0003;
+  TOOLSIZE = SizeOf(TTool); // orig TSIZE but clash with type TSize
 
 
-{***************************************************************************}
+  // defines for tn_Which
+  TW_INFO   = 1;
+  TW_BROWSE = 2;
+  TW_EDIT   = 3;
+  TW_PRINT  = 4;
+  TW_MAIL   = 5;
 
 
- ID_TAGS = 1146377287;
+  // defines for tn_Flags
+  TF_LAUNCH_MASK = $000F;
+  TF_SHELL       = $0001;
+  TF_WORKBENCH   = $0002;
+  TF_RX          = $0003;
 
 
-{***************************************************************************}
+  ID_TAGS = Ord('D') shl 24 + Ord('T') shl 16 + Ord('T') shl 8 + Ord('G'); // DTTG
 
 
-Type
- pDataType = ^tDataType;
- tDataType = record
-    dtn_Node1,                      { Reserved for system use }
-    dtn_Node2   : tNode;            { Reserved for system use }
-    dtn_Header  : pDataTypeHeader;  { Pointer to the DataTypeHeader }
-    dtn_ToolList: tList;            { List of tool nodes }
-    dtn_FunctionName : STRPTR;      { Name of comparision routine }
-    dtn_AttrList : pTagItem;         { Object creation tags }
-    dtn_Length : ULONG;             { Length of the memory block }
- end;
-
-{***************************************************************************}
-
- pToolNode = ^tToolNode;
- tToolNode = Record
-    tn_Node   : tNode;                               { Embedded node }
-    tn_Tool   : tTool;                               { Embedded tool }
-    tn_Length : ULONG;                            { Length of the memory block }
- end;
-
-{***************************************************************************}
+type
+  PDataType = ^TDataType;
+  TDataType = record
+    dtn_Node1: TNode;            // Reserved for system use
+    dtn_Node2: TNode;            // Reserved for system use
+    dtn_Header: PDataTypeHeader; // Pointer to the DataTypeHeader
+    dtn_ToolList: TList;         // List of 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
 const
- ID_NAME = 1312902469;
-
-{***************************************************************************}
-
-{ 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;
-
-{ New for V44 }
- DTERROR_NOT_AVAILABLE                 =  2009;
-
-{ Offset for types }
- DTMSG_TYPE_OFFSET                     =  2100;
-
-{***************************************************************************}
-
-  DATATYPESCLASS        : Pchar =  'datatypesclass';
-
-{***************************************************************************}
-
-  DTA_Dummy             =  (TAG_USER+$1000);
-
-{ Generic attributes }
-  DTA_TextAttr          =  (DTA_Dummy+10);
-        { (struct TextAttr ) Pointer to the default TextAttr to use for
-         * the text within the object. }
-
-  DTA_TopVert           =  (DTA_Dummy+11);
-        { (LONG) Current top vertical unit }
-
-  DTA_VisibleVert       =  (DTA_Dummy+12);
-        { (LONG) Number of visible vertical units }
-
-  DTA_TotalVert         =  (DTA_Dummy+13);
-        { (LONG) Total number of vertical units }
-
-  DTA_VertUnit          =  (DTA_Dummy+14);
-        { (LONG) Number of pixels per vertical unit }
-
-  DTA_TopHoriz          =  (DTA_Dummy+15);
-        { (LONG) Current top horizontal unit }
-
-  DTA_VisibleHoriz      =  (DTA_Dummy+16);
-        { (LONG)  Number of visible horizontal units }
-
-  DTA_TotalHoriz        =  (DTA_Dummy+17);
-        { (LONG) Total number of horizontal units }
-
-  DTA_HorizUnit         =  (DTA_Dummy+18);
-        { (LONG) Number of pixels per horizontal unit }
-
-  DTA_NodeName          =  (DTA_Dummy+19);
-        { (UBYTE ) Name of the current element within the object. }
-
-  DTA_Title             =  (DTA_Dummy+20);
-        { (UBYTE ) Title of the object. }
-
-  DTA_TriggerMethods    =  (DTA_Dummy+21);
-        { (struct DTMethod ) Pointer to a NULL terminated array of
-         * supported trigger methods. }
-
-  DTA_Data              =  (DTA_Dummy+22);
-        { (APTR) Object specific data. }
-
-  DTA_TextFont          =  (DTA_Dummy+23);
-        { (struct TextFont ) Default font to use for text within the
-         * object. }
-
-  DTA_Methods           =  (DTA_Dummy+24);
-        { (ULONG ) Pointer to a ~0 terminated array of supported
-         * methods. }
-
-  DTA_PrinterStatus     =  (DTA_Dummy+25);
-        { (LONG) Printer error message.  Error numbers are defined in
-         * <devices/printer.h> }
-
-  DTA_PrinterProc       =  (DTA_Dummy+26);
-        { PRIVATE (struct Process ) Pointer to the print process. }
-
-  DTA_LayoutProc        =  (DTA_Dummy+27);
-        { PRIVATE (struct Process ) Pointer to the layout process. }
-
-  DTA_Busy              =  (DTA_Dummy+28);
-        { Used to turn the applications' busy pointer off and on }
-
-  DTA_Sync              =  (DTA_Dummy+29);
-        { Used to indicate that new information has been loaded into
-         * an object.  This is for models that cache the DTA_TopVert-
-         * like tags }
-
-  DTA_BaseName          =  (DTA_Dummy+30);
-        { The base name of the class }
-
-  DTA_GroupID           =  (DTA_Dummy+31);
-        { Group that the object must belong in }
-
-  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);
-        { New for V40. (UBYTE ) specifies the name of the
-         * realtime.library conductor.  Defaults to "Main". }
-
-  DTA_ControlPanel      =  (DTA_Dummy+36);
-        { New for V40. (BOOL) Indicate whether a control panel should be
-         * embedded within the object (in the animation datatype, for
-         * example).  Defaults to TRUE. }
-
-  DTA_Immediate         =  (DTA_Dummy+37);
-        { New for V40. (BOOL) Indicate whether the object should
-         * immediately begin playing.  Defaults to FALSE. }
-
-  DTA_Repeat            =  (DTA_Dummy+38);
-        { New for V40. (BOOL) Indicate that the object should repeat
-         * playing.  Defaults to FALSE. }
-
-        { New for V44. Address of a DTST_MEMORY source type
-         * object (APTR).
-         }
-  DTA_SourceAddress     =  (DTA_Dummy+39);
-
-        { New for V44. Size of a DTST_MEMORY source type
-         * object (ULONG).
-        }
-  DTA_SourceSize        =  (DTA_Dummy+40);
-
-        { Reserved tag; DO NOT USE (V44) }
-  DTA_Reserved          =  (DTA_Dummy+41);
-
-{ 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);
-
-{ DON'T USE THE FOLLOWING FOUR TAGS.  USE THE CORRESPONDING TAGS IN
- * <intuition/gadgetclass.h> }
-  DTA_Left              =  (DTA_Dummy+105);
-  DTA_Top               =  (DTA_Dummy+106);
-  DTA_Width             =  (DTA_Dummy+107);
-  DTA_Height            =  (DTA_Dummy+108);
-
-  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);
-  DTA_FrameInfo         =  (DTA_Dummy+116);
-
-{ DON'T USE THE FOLLOWING FOUR TAGS.  USE THE CORRESPONDING TAGS IN
- * <intuition/gadgetclass.h> }
-  DTA_RelRight          =  (DTA_Dummy+117);
-  DTA_RelBottom         =  (DTA_Dummy+118);
-  DTA_RelWidth          =  (DTA_Dummy+119);
-  DTA_RelHeight         =  (DTA_Dummy+120);
-
-  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);
-        { (LONG) Destination X width }
-
-  DTA_DestRows          =  (DTA_Dummy+401);
-        { (LONG) Destination Y height }
-
-  DTA_Special           =  (DTA_Dummy+402);
-        { (UWORD) Option flags }
-
-  DTA_RastPort          =  (DTA_Dummy+403);
-        { (struct RastPort ) RastPort to use when printing. (V40) }
-
-  DTA_ARexxPortName     =  (DTA_Dummy+404);
-        { (STRPTR) Pointer to base name for ARexx port (V40) }
-
-
-{***************************************************************************}
-
-  DTST_RAM              =  1;
-  DTST_FILE             =  2;
-  DTST_CLIPBOARD        =  3;
-  DTST_HOTLINK          =  4;
-  DTST_MEMORY           =  5;   { New for V44 }
-
-{***************************************************************************}
-
-{ Attached to the Gadget.SpecialInfo field of the gadget.  Don't access directly,
- * use the Get/Set calls instead.
- }
-Type
-
- pDTSpecialInfo = ^tDTSpecialInfo;
- tDTSpecialInfo = record
-    si_Lock            : tSignalSemaphore;       { Locked while in DoAsyncLayout() }
-    si_Flags,
-
-    si_TopVert,    { Top row (in units) }
-    si_VisVert,    { Number of visible rows (in units) }
-    si_TotVert,    { Total number of rows (in units) }
-    si_OTopVert,   { Previous top (in units) }
-    si_VertUnit,   { Number of pixels in vertical unit }
-
-    si_TopHoriz,   { Top column (in units) }
-    si_VisHoriz,   { Number of visible columns (in units) }
-    si_TotHoriz,   { Total number of columns (in units) }
-    si_OTopHoriz,  { Previous top (in units) }
-    si_HorizUnit  : Longint;  { Number of pixels in horizontal unit }
- end;
-
+  DTNSIZE = SizeOf(TDataType);
 
 
+type
+  PToolNode = ^TToolNode;
+  TToolNode = record
+    tn_Node: TNode;      // Embedded node
+    tn_Tool: TTool;      // Embedded tool
+    tn_Length: LongWord; // Length of the memory block
+  end;
 const
 const
-{ Object is in layout processing }
-  DTSIF_LAYOUT         =   1;
-
-{ Object needs to be layed out }
-  DTSIF_NEWSIZE        =   2;
-
-  DTSIF_DRAGGING       =   4;
-  DTSIF_DRAGSELECT     =   8;
-
-  DTSIF_HIGHLIGHT      =   16;
-
-{ Object is being printed }
-  DTSIF_PRINTING       =   32;
-
-{ Object is in layout process }
-  DTSIF_LAYOUTPROC     =   64;
-
-{***************************************************************************}
-
-Type
- pDTMethod = ^tDTMethod;
- tDTMethod = record
-    dtm_Label,
-    dtm_Command  : STRPTR;
-    dtm_Method   : ULONG;
- end;
-
-{***************************************************************************}
-
-Const
-  DTM_Dummy             =  ($600);
-
-{ Inquire what environment an object requires }
-  DTM_FRAMEBOX          =  ($601);
-
-{ Same as GM_LAYOUT except guaranteed to be on a process already }
-  DTM_PROCLAYOUT        =  ($602);
-
-{ Layout that is occurring on a process }
-  DTM_ASYNCLAYOUT       =  ($603);
-
-{ When a RemoveDTObject() is called }
-  DTM_REMOVEDTOBJECT    =  ($604);
-
-  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);
-
-{ Used to ask the object about itself }
+  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;
+  // New for V44
+  DTERROR_NOT_AVAILABLE = 2009;
+  // Offset for types }
+  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
+
+  DTA_Reserved       = DTA_Dummy + 41; // Reserved tag; DO NOT USE (V44)
+
+// 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
 type
- pFrameInfo = ^tFrameInfo;
- tFrameInfo = record
-            fri_PropertyFlags : ULONG;
-            fri_Resolution : tPoint;
-            fri_RedBits :  BYTE;
-            fri_GreenBits : BYTE;
-            fri_BlueBits : BYTE;
-            fri_Dimensions : record
-                 Width : ULONG;
-                 Height : ULONG;
-                 Depth : ULONG;
-              end;
-            fri_Screen : pScreen;
-            fri_ColorMap : pColorMap;
-            fri_Flags : ULONG;
-         end;
-
-
-CONST
-
-  FIF_SCALABLE    = $1;
-  FIF_SCROLLABLE  = $2;
-  FIF_REMAPPABLE  = $4;
-
-{ DTM_REMOVEDTOBJECT, DTM_CLEARSELECTED, DTM_COPY, DTM_ABORTPRINT }
-Type
-
- pdtGeneral = ^tdtGeneral;
- tdtGeneral = record
-    MethodID   : ULONG;
-    dtg_GInfo  : pGadgetInfo;
- end;
-
-{ DTM_SELECT }
- pdtSelect = ^tdtSelect;
- tdtSelect = record
-    MethodID  : ULONG;
-    dts_GInfo : pGadgetInfo;
-    dts_Select : tRectangle;
- end;
-
-{ DTM_FRAMEBOX }
-
- pdtFrameBox = ^tdtFrameBox;
- tdtFrameBox = record
-    MethodID             : ULONG;
-    dtf_GInfo            : pGadgetInfo;
-    dtf_ContentsInfo,     { Input }
-    dtf_FrameInfo        : pFrameInfo;         { Output }
-    dtf_SizeFrameInfo,
-    dtf_FrameFlags       : ULONG;
- end;
-
-{ DTM_GOTO }
- pdtGoto = ^tdtGoto;
- tdtGoto = record
-    MethodID             : ULONG;
-    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             : Pointer;
- end;
+  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
 const
-  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;
-
-{ New for V40 }
-  STM_REWIND            =  12;
-  STM_FASTFORWARD       =  13;
-  STM_STOP              =  14;
-  STM_RESUME            =  15;
-  STM_LOCATE            =  16;
-
-Type
-{ Printer IO request }
- pprinterIO = ^tprinterIO;
- tprinterIO = record
-     ios : tIOStdReq;
-     iodrp : tIODRPReq;
-     iopc : tIOPrtCmdReq;
- end;
-{ DTM_PRINT }
-
-        pdtPrint = ^tdtPrint;
-        tdtPrint = record
-            MethodID : ULONG;
-            dtp_GInfo : pGadgetInfo;
-            dtp_PIO : pprinterIO;
-            dtp_AttrList : pTagItem;
-         end;
-
-
-{ DTM_DRAW }
- pdtDraw = ^tdtDraw;
- tdtDraw = record
-    MethodID             : ULONG;
-    dtd_RPort            : pRastPort;
-    dtd_Left,
-    dtd_Top,
-    dtd_Width,
-    dtd_Height,
-    dtd_TopHoriz,
-    dtd_TopVert          : Longint;
-    dtd_AttrList         : pTagItem;          { Additional attributes }
- end;
+  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
 
 
-{ DTM_WRITE }
- pdtWrite = ^tdtWrite;
- tdtWrite = record
-    MethodID             : ULONG;
-    dtw_GInfo            : pGadgetInfo;       { Gadget information }
-    dtw_FileHandle       : BPTR;              { File handle to write to }
-    dtw_Mode             : ULONG;
-    dtw_AttrList         : pTagItem;          { Additional attributes }
- end;
+type
+  PDTMethod = ^TDTMethod;
+  TDTMethod = record
+    dtm_Label: STRPTR;
+    dtm_Command: STRPTR;
+    dtm_Method: LongWord;
+  end;
 
 
 const
 const
-{ Save data as IFF data }
-  DTWM_IFF       = 0;
-
-{ Save data as local data format }
-  DTWM_RAW       = 1;
-
-{***************************************************************************}
-
-   PICTUREDTCLASS        : PChar =  'picture.datatype';
-
-{***************************************************************************}
-
-{ Picture attributes }
-   PDTA_ModeID           =  (DTA_Dummy + 200);
-        { Mode ID of the picture }
-
-   PDTA_BitMapHeader     =  (DTA_Dummy + 201);
-
-   PDTA_BitMap           =  (DTA_Dummy + 202);
-        { Pointer to a class-allocated bitmap, that will end
-         * up being freed by picture.class when DisposeDTObject()
-         * is called }
-{ Picture colour table (struct ColorRegister *) }
-   PDTA_ColorRegisters   =  (DTA_Dummy + 203);
+  DTM_Dummy          = $600;
 
 
-{ Color table to use with SetRGB32CM() (ULONG *) }
-   PDTA_CRegs            =  (DTA_Dummy + 204);
+  DTM_FRAMEBOX       = $601; // Inquire what environment an object requires
+  DTM_PROCLAYOUT     = $602; // Same as GM_LAYOUT except guaranteed to be on a process already
+  DTM_ASYNCLAYOUT    = $603; // Layout that is occurring on a process
+  DTM_REMOVEDTOBJECT = $604; // When RemoveDTObject() is called
 
 
-{ Color table; this table is initialized during the layout
- * process and will contain the colours the picture will use
- * after remapping. If no remapping takes place, these colours
- * will match those in the PDTA_CRegs table (ULONG *).
- }
-   PDTA_GRegs            =  (DTA_Dummy + 205);
+  DTM_SELECT         = $605;
+  DTM_CLEARSELECTED  = $606;
 
 
-{ Shared pen table; this table is initialized during the layout
- * process while the picture is being remapped (UBYTE *).
- }
-   PDTA_ColorTable       =  (DTA_Dummy + 206);
+  DTM_COPY           = $607;
+  DTM_PRINT          = $608;
+  DTM_ABORTPRINT     = $609;
 
 
-{ Shared pen table; in most places this table will be identical to
- * the PDTA_ColorTable table. Some of the colours in this table might
- * match the original colour palette a little better than the colours
- * picked for the other table. The picture.datatype uses the two tables
- * during remapping, alternating for each pixel (UBYTE *).
- }
-   PDTA_ColorTable2      =  (DTA_Dummy + 207);
+  DTM_NEWMEMBER      = $610;
+  DTM_DISPOSEMEMBER  = $611;
 
 
-{ OBSOLETE; DO NOT USE }
-   PDTA_Allocated        =  (DTA_Dummy + 208);
+  DTM_GOTO           = $630;
+  DTM_TRIGGER        = $631;
 
 
-{ Number of colors used by the picture. (UWORD) }
-   PDTA_NumColors        =  (DTA_Dummy + 209);
+  DTM_OBTAINDRAWINFO  = $640;
+  DTM_DRAW            = $641;
+  DTM_RELEASEDRAWINFO = $642;
 
 
-{ Number of colors allocated by the picture (UWORD) }
-   PDTA_NumAlloc         =  (DTA_Dummy + 210);
+  DTM_WRITE           = $650;
 
 
-   PDTA_Remap            =  (DTA_Dummy + 211);
-        { Boolean : Remap picture (defaults to TRUE) }
-
-   PDTA_Screen           =  (DTA_Dummy + 212);
-        { Screen to remap to }
-
-   PDTA_FreeSourceBitMap =  (DTA_Dummy + 213);
-        { Boolean : Free the source bitmap after remapping }
-
-   PDTA_Grab             =  (DTA_Dummy + 214);
-        { Pointer to a Point structure }
-
-   PDTA_DestBitMap       =  (DTA_Dummy + 215);
-        { Pointer to the destination (remapped) bitmap }
-
-   PDTA_ClassBitMap      =  (DTA_Dummy + 216);
-        { Pointer to class-allocated bitmap, that will end
-         * up being freed by the class after DisposeDTObject()
-         * is called }
-
-   PDTA_NumSparse        =  (DTA_Dummy + 217);
-        { (UWORD) Number of colors used for sparse remapping }
-
-   PDTA_SparseTable      =  (DTA_Dummy + 218);
-        { (UBYTE *) Pointer to a table of pen numbers indicating
-         * which colors should be used when remapping the image.
-         * This array must contain as many entries as there
-         * are colors specified with PDTA_NumSparse }
-
-         { Index number of the picture to load (ULONG). (V44) }
-   PDTA_WhichPicture     = (DTA_Dummy + 219);
-
-{ Get the number of pictures stored in the file (ULONG *). (V44) }
-   PDTA_GetNumPictures   = (DTA_Dummy + 220);
-
-{ Maximum number of colours to use for dithering (ULONG). (V44) }
-   PDTA_MaxDitherPens    = (DTA_Dummy + 221);
-
-{ Quality of the dithering algorithm to be used during colour
- * quantization (ULONG). (V44)
- }
-   PDTA_DitherQuality    = (DTA_Dummy + 222);
-
-{ Pointer to the allocated pen table (UBYTE *). (V44) }
-   PDTA_AllocatedPens    = (DTA_Dummy + 223);
-
-{ Quality for scaling. (V45) }
-   PDTA_ScaleQuality     = (DTA_Dummy + 224);
-
-{***************************************************************************}
-
-{ When querying the number of pictures stored in a file, the
- * following value denotes "the number of pictures is unknown".
- }
-   PDTANUMPICTURES_Unknown = (0);
-
-{***************************************************************************}
-
-{ V43 extensions (attributes) }
-
-{ Set the sub datatype interface mode (LONG); see "Interface modes" below }
-   PDTA_SourceMode              = (DTA_Dummy + 250);
-
-{ Set the app datatype interface mode (LONG); see "Interface modes" below }
-   PDTA_DestMode                = (DTA_Dummy + 251);
-
-{ Allocates the resulting bitmap as a friend bitmap (BOOL) }
-   PDTA_UseFriendBitMap         = (DTA_Dummy + 255);
-
-{ NULL or mask plane for use with BltMaskBitMapRastPort() (PLANEPTR) }
-   PDTA_MaskPlane               = (DTA_Dummy + 258);
-
-{***************************************************************************}
-
-{ Interface modes }
-  PMODE_V42 = (0);      { Compatibility mode }
-  PMODE_V43 = (1);      { Extended mode }
-
-{***************************************************************************}
-
-{ V43 extensions (methods) }
-
-  PDTM_Dummy = (DTM_Dummy + $60);
-
-{ Transfer pixel data to the picture object in the specified format }
-  PDTM_WRITEPIXELARRAY = (PDTM_Dummy + 0);
-
-{ Transfer pixel data from the picture object in the specified format }
-  PDTM_READPIXELARRAY = (PDTM_Dummy + 1);
-
-{***************************************************************************}
-
-{  Masking techniques  }
-   mskNone                = 0;
-   mskHasMask             = 1;
-   mskHasTransparentColor = 2;
-   mskLasso               = 3;
-   mskHasAlpha            = 4;
-
-{  Compression techniques  }
-   cmpNone                = 0;
-   cmpByteRun1            = 1;
-   cmpByteRun2            = 2;
+type
+  // Used to ask the object about itself
+  PFrameInfo = ^TFrameInfo;
+  TFrameInfo = record
+    fri_PropertyFlags: LongWord; // DisplayInfo
+    fri_Resolution: TPoint;      // DisplayInfo
 
 
-Type
-{  Bitmap header (BMHD) structure  }
- pBitMapHeader = ^tBitMapHeader;
- tBitMapHeader = record
-    bmh_Width,                         { Width in pixels }
-    bmh_Height   : Word;               { Height in pixels }
-    bmh_Left,                          { Left position }
-    bmh_Top      : smallint;            { Top position }
-    bmh_Depth,                         { Number of planes }
-    bmh_Masking,                       { Masking type }
-    bmh_Compression,                   { Compression type }
-    bmh_Pad      : Byte;
-    bmh_Transparent : WORD;            { Transparent color }
-    bmh_XAspect,
-    bmh_YAspect     : Byte;
-    bmh_PageWidth,
-    bmh_PageHeight  : smallint;
- end;
+    fri_RedBits: Byte;
+    fri_GreenBits: Byte;
+    fri_BlueBits: Byte;
 
 
-{***************************************************************************}
+    fri_Dimensions: record
+      Width: LongWord;
+      Height: LongWord;
+      Depth: LongWord;
+    end;
 
 
-{  Color register structure }
- pColorRegister = ^tColorRegister;
- tColorRegister = record
-   red, green, blue : Byte;
- end;
+    fri_Screen: PScreen;
+    fri_ColorMap: PColorMap;
 
 
-{***************************************************************************}
+    fri_Flags: LongWord; // FIF_*
+  end;
 
 
 const
 const
-{ IFF types that may be in pictures }
-   ID_ILBM         = 1229734477;
-   ID_BMHD         = 1112361028;
-   ID_BODY         = 1112491097;
-   ID_CMAP         = 1129136464;
-   ID_CRNG         = 1129467463;
-   ID_GRAB         = 1196572994;
-   ID_SPRT         = 1397772884;
-   ID_DEST         = 1145394004;
-   ID_CAMG         = 1128353095;
-
-{***************************************************************************}
-
-   SOUNDDTCLASS          : PChar =  'sound.datatype';
-
-{***************************************************************************}
-
-{ Sound attributes }
-   SDTA_Dummy            =  (DTA_Dummy + 500);
-   SDTA_VoiceHeader      =  (SDTA_Dummy + 1);
-   SDTA_Sample           =  (SDTA_Dummy + 2);
-   { (UBYTE *) Sample data }
-
-   SDTA_SampleLength     =  (SDTA_Dummy + 3);
-   { (ULONG) Length of the sample data in UBYTEs }
-
-   SDTA_Period           =  (SDTA_Dummy + 4);
-    { (UWORD) Period }
-
-   SDTA_Volume           =  (SDTA_Dummy + 5);
-    { (UWORD) Volume.  Range from 0 to 64 }
-
-   SDTA_Cycles           =  (SDTA_Dummy + 6);
-
-{ The following tags are new for V40 }
-   SDTA_SignalTask       =  (SDTA_Dummy + 7);
-    { (struct Task *) Task to signal when sound is complete or
-        next buffer needed. }
-
-{ (ULONG) Signal mask to use on completion or 0 to disable
- *
- *         NOTE: Due to a bug in sound.datatype V40 SDTA_SignalBit
- *               was actually implemented as a signal mask as opposed
- *               to a bit number. The documentation now reflects
- *               this. If you intend to use a signal bit number
- *               instead of the mask, use the new V44 tag
- *               SDTA_SignalBitNumber below.
- *}
-   SDTA_SignalBit        =  (SDTA_Dummy + 8);
-   SDTA_SignalBitMask    = SDTA_SignalBit;
-    { (BYTE) Signal bit to use on completion or -1 to disable }
-
-   SDTA_Continuous       =  (SDTA_Dummy + 9);
-    { (ULONG) Playing a continuous stream of data.  Defaults to
-        FALSE. }
-
-{ The following tags are new for V44 }
-
-{ (BYTE) Signal bit to use on completion or -1 to disable }
-   SDTA_SignalBitNumber  =  (SDTA_Dummy + 10);
-
-{ (UWORD) Samples per second }
-   SDTA_SamplesPerSec    = (SDTA_Dummy + 11);
+  FIF_SCALABLE   = $1;
+  FIF_SCROLLABLE = $2;
+  FIF_REMAPPABLE = $4;
 
 
-{ (struct timeval *) Sample replay period }
-   SDTA_ReplayPeriod     = (SDTA_Dummy + 12);
-
-{ (BYTE *) Sample data }
-   SDTA_LeftSample       = (SDTA_Dummy + 13);
-   SDTA_RightSample      = (SDTA_Dummy + 14);
-
-{ (BYTE) Stereo panning }
-   SDTA_Pan              = (SDTA_Dummy + 15);
-
-{ (BOOL) FreeVec() all sample data upon OM_DISPOSE. }
-   SDTA_FreeSampleData   = (SDTA_Dummy + 16);
-
-{ (BOOL) Wait for the current sample to be played back before
- * switching to the new sample data.
- }
-   SDTA_SyncSampleChange = (SDTA_Dummy + 17);
-
-{***************************************************************************}
-
-   CMP_NONE     = 0;
-   CMP_FIBDELTA = 1;
-
-Type
- pVoiceHeader = ^tVoiceHeader;
- tVoiceHeader = record
-    vh_OneShotHiSamples,
-    vh_RepeatHiSamples,
-    vh_SamplesPerHiCycle : ULONG;
-    vh_SamplesPerSec     : WORD;
-    vh_Octaves,
-    vh_Compression       : Byte;
-    vh_Volume            : ULONG;
- end;
-
-{***************************************************************************}
+type
+  // DTM_REMOVEDTOBJECT, DTM_CLEARSELECTED, DTM_COPY, DTM_ABORTPRINT
+  PdtGeneral = ^TdtGeneral;
+  TdtGeneral = record
+    MethodID: LongWord;
+    dtg_GInfo: PGadgetInfo;
+  end;
+
+  // DTM_SELECT
+  PdtSelect = ^TdtSelect;
+  TdtSelect = record
+    MethodID: LongWord;
+    dts_GInfo: PGadgetInfo;
+    dts_Select: TRectangle;
+  end;
+
+  // DTM_FRAMEBOX
+  PdtFrameBox = ^TdtFrameBox;
+  TdtFrameBox = record
+    MethodID: LongWord;
+    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: LongWord;
+    dtg_GInfo: PGadgetInfo;
+    dtg_NodeName: STRPTR;   // Node to goto
+    dtg_AttrList: PTagItem; // Additional attributes
+  end;
+
+  //* DTM_TRIGGER */
+  PdtTrigger = ^TdtTrigger;
+  TdtTrigger = record
+    MethodID: LongWord;
+    dtt_GInfo: PGadgetInfo;
+    dtt_Function: LongWord;
+    dtt_Data: APTR;
+  end;
 
 
 const
 const
+  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;
+
+  // New for V40
+  STM_REWIND      = 12;
+  STM_FASTFORWARD = 13;
+  STM_STOP        = 14;
+  STM_RESUME      = 15;
+  STM_LOCATE      = 16;
 
 
-{ Channel allocation }
-   SAMPLETYPE_Left      = (2);
-   SAMPLETYPE_Right     = (4);
-   SAMPLETYPE_Stereo    = (6);
-
-{ IFF types }
-   ID_8SVX = 944985688;
-   ID_VHDR = 1447576658;
-   ID_CHAN = $4348414E;
-
-{***************************************************************************}
-
-{ ***************************************************************************}
-
-   TEXTDTCLASS           : PChar =  'text.datatype';
-
-{ ***************************************************************************}
-
-{  Text 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);
-     {  Boolean. Should the text be word wrapped.  Defaults to false. }
-
-{ ***************************************************************************}
-
-Type
-{  There is one Line structure for every line of text in our document.  }
- pLine = ^tLine;
- tLine = record
-    ln_Link              : tMinNode;            {  to link the lines together }
-    ln_Text              : STRPTR;              {  pointer to the text for this line }
-    ln_TextLen           : ULONG;               {  the character length of the text for this line }
-    ln_XOffset,                                 {  where in the line the text starts }
-    ln_YOffset,                                 {  line the text is on }
-    ln_Width,                                   {  Width of line in pixels }
-    ln_Height,                                  {  Height of line in pixels }
-    ln_Flags             : WORD;                {  info on the line }
-    ln_FgPen,                                   {  foreground pen }
-    ln_BgPen             : Shortint;            {  background pen }
-    ln_Style             : ULONG;               {  Font style }
-    ln_Data              : Pointer;             {  Link data... }
- end;
-
-{ ***************************************************************************}
+type
+  // Printer IO request
+  PPrinterIO = ^TPrinterIO;
+  TPrinterIO = record
+     Ios: TIOStdReq;
+     Iodrp: TIODRPReq;
+     Iopc: TIOPrtCmdReq;
+   end;
+
+  // DTM_PRINT
+  PdtPrint = ^TdtPrint;
+  TdtPrint = record
+    MethodID: LongWord;
+    dtp_GInfo: PGadgetInfo;
+    dtp_PIO: PPrinterIO;
+    dtp_AttrList: PTagItem;
+  end;
+
+  // DTM_DRAW
+  PdtDraw = ^TdtDraw;
+  TdtDraw = record
+    MethodID: LongWord;
+    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_WRITE
+  PdtWrite = ^TdtWrite;
+  TdtWrite = record
+    MethodID: LongWord;
+    dtw_GInfo: PGadgetInfo; // Gadget information
+    dtw_FileHandle: BPTR;   // File handle to write to
+    dtw_Mode: LongWord;
+    dtw_AttrList: PTagItem; // Additional attributes
+  end;
 
 
 const
 const
-{  Line.ln_Flags }
-
-{  Line Feed }
-   LNF_LF        = 1;
-
-{  Segment is a link }
-   LNF_LINK      = 2;
-
-{  ln_Data is a pointer to an DataTypes object }
-   LNF_OBJECT    = 4;
-
-{  Object is selected }
-   LNF_SELECTED  = 8;
-
-{ ***************************************************************************}
-
-{  IFF types that may be text }
-   ID_FTXT         = 1179932756;
-   ID_CHRS         = 1128813139;
-
-{ ***************************************************************************}
-
-   ANIMATIONDTCLASS         : PChar =       'animation.datatype';
-
-{ ***************************************************************************}
-
-{  Animation attributes }
-   ADTA_Dummy            =  (DTA_Dummy + 600);
-   ADTA_ModeID           =  PDTA_ModeID      ;
-   ADTA_KeyFrame         =  PDTA_BitMap      ;
-        {  (struct BitMap *) Key frame (first frame) 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;
-        {  (BOOL) : Remap animation (defaults to TRUE) }
-
-   ADTA_Screen           =  PDTA_Screen;
-        {  (struct Screen *) Screen to remap to }
-
-   ADTA_NumSparse        =  PDTA_NumSparse;
-        {  (UWORD) Number of colors used for sparse remapping }
-
-   ADTA_SparseTable      =  PDTA_SparseTable;
-        {  (UBYTE *) Pointer to a table of pen numbers indicating
-         * which colors should be used when remapping the image.
-         * This array must contain as many entries as there
-         * are colors specified with ADTA_NumSparse }
-
-   ADTA_Width            =  (ADTA_Dummy + 1);
-   ADTA_Height           =  (ADTA_Dummy + 2);
-   ADTA_Depth            =  (ADTA_Dummy + 3);
-   ADTA_Frames           =  (ADTA_Dummy + 4);
-        {  (ULONG) Number of frames in the animation }
-
-   ADTA_Frame            =  (ADTA_Dummy + 5);
-        {  (ULONG) Current frame }
-
-   ADTA_FramesPerSecond  =  (ADTA_Dummy + 6);
-        {  (ULONG) Frames per second }
-
-   ADTA_FrameIncrement   =  (ADTA_Dummy + 7);
-        {  (LONG) Amount to change frame by when fast forwarding or
-         * rewinding.  Defaults to 10. }
-
-   ADTA_PreloadFrameCount = (ADTA_Dummy + 8);   { (V44) }
-{  Sound attributes }
-   ADTA_Sample           =  SDTA_Sample      ;
-   ADTA_SampleLength     =  SDTA_SampleLength;
-   ADTA_Period           =  SDTA_Period      ;
-   ADTA_Volume           =  SDTA_Volume      ;
-   ADTA_Cycles           =  SDTA_Cycles      ;
-
-   ADTA_LeftSample       =  SDTA_LeftSample;            { (V44) }
-   ADTA_RightSample      =  SDTA_RightSample;   { (V44) }
-   ADTA_SamplesPerSec    =  SDTA_SamplesPerSec; { (V44) }
-
-{ ***************************************************************************}
-
-   ID_ANIM   = 1095649613;
-   ID_ANHD   = 1095649348;
-   ID_DLTA   = 1145852993;
-
-{ ***************************************************************************}
-
-{   Required ANHD structure describes an ANIM frame }
-Type
- pAnimHeader = ^tAnimHeader;
- tAnimHeader = record
-    ah_Operation   : Byte;  {   The compression method:
-                                     0  set directly (normal ILBM BODY),
-                                     1  XOR ILBM mode,
-                                     2  Long Delta mode,
-                                     3  Short Delta mode,
-                                     4  Generalized short/long Delta mode,
-                                     5  Byte Vertical Delta mode
-                                     6  Stereo op 5 (third party)
-                                    74  (ascii 'J') reserved for Eric Graham's
-                                        compression technique (details to be
-                                        released later). }
-
-    ah_Mask        : Byte;      {  (XOR mode only - plane mask where each
-                                   bit is set =1 if there is data and =0
-                                   if not.) }
-
-    ah_Width,                   {  (XOR mode only - width and height of the }
-    ah_Height,                  {  area represented by the BODY to eliminate }
-                                {  unnecessary un-changed data) }
-
-
-    ah_Left,                    {  (XOR mode only - position of rectangular }
-    ah_Top         : WORD;      {  area representd by the BODY) }
-
-
-    ah_AbsTime,                 {  Timing for a frame relative to the time
-                                   the first frame was displayed, in
-                                   jiffies (1/60 sec) }
-
-    ah_RelTime     : ULONG;    {  Timing for frame relative to time
-                                   previous frame was displayed - in
-                                   jiffies (1/60 sec) }
-
-    ah_Interleave,              {  Indicates how may frames back this data is to
-                                   modify.  0 defaults to indicate two frames back
-                                   (for double buffering). n indicates n frames back.
-                                   The main intent here is to allow values
-                                   of 1 for special applications where
-                                   frame data would modify the immediately
-                                   previous frame. }
-
-    ah_Pad0        :  Byte;     {  Pad byte, not used at present. }
-
-    ah_Flags       : ULONG;     {  32 option bits used by options=4 and 5.
-                                   At present only 6 are identified, but the
-                                   rest are set =0 so they can be used to
-                                   implement future ideas.  These are defined
-                                   for option 4 only at this point.  It is
-                                   recommended that all bits be set =0 for
-                                   option 5 and that any bit settings
-                                   used in the future (such as for XOR mode)
-                                   be compatible with the option 4
-                                   bit settings.   Player code should check
-                                   undefined bits in options 4 and 5 to assure
-                                   they are zero.
-
-                                   The six bits for current use are:
-
-                                    bit #       set =0                  set =1
-                                    ===============================================
-                                    0           short data              long data
-                                    1           set                     XOR
-                                    2           separate info           one info list
-                                                for each plane          for all planes
-                                    3           not RLC                 RLC (run length coded)
-                                    4           horizontal              vertical
-                                    5           short info offsets      long info offsets
-                                }
-
-    ah_Pad  : Array[0..15] of Byte;    {  This is a pad for future use for future
-                                   compression modes. }
- end;
-
-{ ***************************************************************************}
+  DTWM_IFF = 0; // Save data as IFF data
+  DTWM_RAW = 1; // Save data as local data format
 
 
+//  pictureclass
 const
 const
-   ADTM_Dummy            =  ($700);
+  PICTUREDTCLASS = 'picture.datatype';
+
+  // Picture attributes
+  PDTA_ModeID           = DTA_Dummy + 200; // Mode ID of the picture
+  PDTA_BitMapHeader     = DTA_Dummy + 201;
+  PDTA_BitMap           = DTA_Dummy + 202; // (PBitmap) Pointer to a class-allocated bitmap, that will end up being freed by picture.class when DisposeDTObject() is called
+  PDTA_ColorRegisters   = DTA_Dummy + 203; // (PColorRegister) Picture colour table
+  PDTA_CRegs            = DTA_Dummy + 204; // (PLongWord) Color table to use with SetRGB32CM()
+  PDTA_GRegs            = DTA_Dummy + 205; // (PLongWord) Color table; this table is initialized during the layout process and will contain the colours the picture will use
+                                           // after remapping. If no remapping takes place, these colours will match those in the PDTA_CRegs table.
+  PDTA_ColorTable       = DTA_Dummy + 206; // (PByte) Shared pen table; this table is initialized during the layout process while the picture is being remapped
+  PDTA_ColorTable2      = DTA_Dummy + 207; // (PByte) Shared pen table; in most places this table will be identical to the PDTA_ColorTable table. Some of the colours in this table might
+                                           // match the original colour palette a little better than the colours picked for the other table. The picture.datatype uses the two tables
+                                           // during remapping, alternating for each pixel
+  PDTA_Allocated        = DTA_Dummy + 208; // OBSOLETE; DO NOT USE
+  PDTA_NumColors        = DTA_Dummy + 209; // (Word) Number of colors used by the picture.
+  PDTA_NumAlloc         = DTA_Dummy + 210; // (Word) Number of colors allocated by the picture
+  PDTA_Remap            = DTA_Dummy + 211; // (Boolean) Remap picture (defaults to True)
+  PDTA_Screen           = DTA_Dummy + 212; // (PScreen) Screen to remap to
+  PDTA_FreeSourceBitMap = DTA_Dummy + 213; // (Boolean) Free the source bitmap after remapping
+  PDTA_Grab             = DTA_Dummy + 214; // Pointer to a Point structure
+  PDTA_DestBitMap       = DTA_Dummy + 215; // Pointer to the destination (remapped) bitmap
+  PDTA_ClassBitMap      = DTA_Dummy + 216; // Pointer to class-allocated bitmap, that will end up being freed by the class after DisposeDTObject() is called
+  PDTA_NumSparse        = DTA_Dummy + 217; // (Word) Number of colors used for sparse remapping
+  PDTA_SparseTable      = DTA_Dummy + 218; // (PByte) Pointer to a table of pen numbers indicating which colors should be used when remapping the image.
+                                           //  This array must contain as many entries as there are colors specified with PDTA_NumSparse
+  // V44
+  PDTA_WhichPicture     = DTA_Dummy + 219; // (LongWord) Index number of the picture to load
+  PDTA_GetNumPictures   = DTA_Dummy + 220; // (PLongWord) Get the number of pictures stored in the file
+  PDTA_MaxDitherPens    = DTA_Dummy + 221; // (LongWord) Maximum number of colours to use for dithering
+  PDTA_DitherQuality    = DTA_Dummy + 222; // (LongWord) Quality of the dithering algorithm to be used during colour quantization
+  PDTA_AllocatedPens    = DTA_Dummy + 223; // (PByte) Pointer to the allocated pen table
+  // V45
+  PDTA_ScaleQuality     = DTA_Dummy + 224; // Quality for scaling.
+
+
+  PDTANUMPICTURES_Unknown = 0; // When querying the number of pictures stored in a file, the following value denotes "the number of pictures is unknown".
+
+  // V43 extensions (attributes)
+  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)
+  PDTA_MaskPlane        = DTA_Dummy + 258; // (PlantPtr) nil or mask plane for use with BltMaskBitMapRastPort()
+
+  // Interface modes
+  PMODE_V42 = 0; // Compatibility mode
+  PMODE_V43 = 1; // Extended mode
+
+  // V43 extensions (methods)
+  PDTM_Dummy = DTM_Dummy + $60;
+
+  PDTM_WRITEPIXELARRAY = PDTM_Dummy + 0; // Transfer pixel data to the picture object in the specified format
+  PDTM_READPIXELARRAY  = PDTM_Dummy + 1; // Transfer pixel data from the picture object in the specified format
+
+  //  Masking techniques
+  mskNone                = 0;
+  mskHasMask             = 1;
+  mskHasTransparentColor = 2;
+  mskLasso               = 3;
+  mskHasAlpha            = 4;
+
+  //  Compression techniques
+  cmpNone     = 0;
+  cmpByteRun1 = 1;
+  cmpByteRun2 = 2;
 
 
-   ADTM_LOADFRAME        =  ($701);
-    {  Used to load a frame of the animation }
+type
+  // Bitmap header (BMHD) structure
+  PBitMapHeader = ^TBitMapHeader;
+  TBitMapHeader = record
+    bmh_Width: Word;        // Width in pixels
+    bmh_Height: Word;       // Height in pixels
+    bmh_Left: SmallInt;     // Left position
+    bmh_Top: SmallInt;      // Top position
+    bmh_Depth: Byte;        // Number of planes
+    bmh_Masking: Byte;      // Masking type
+    bmh_Compression: Byte;  // Compression type
+    bmh_Pad: Byte;
+    bmh_Transparent: Word; // Transparent color
+    bmh_XAspect: Byte;
+    bmh_YAspect: Byte;
+    bmh_PageWidth: SmallInt;
+    bmh_PageHeight: SmallInt;
+  end;
+
+  PColorRegister = ^TColorRegister;
+  TColorRegister = record
+    red: Byte;
+    green: Byte;
+    blue: Byte;
+  end;
 
 
-   ADTM_UNLOADFRAME      =  ($702);
-    {  Used to unload a frame of the animation }
+const
+  // IFF types that may be in pictures
+  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_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
+
+  ID_BODY = Ord('B') shl 24 + Ord('O') shl 16 + Ord('D') shl 8 + Ord('Y'); // BODY
+
+// soundclass
+const
+  SOUNDDTCLASS = 'sound.datatype';
+  // Sound attributes
+  SDTA_Dummy         = DTA_Dummy + 500;
+  SDTA_VoiceHeader   = SDTA_Dummy + 1;
+  SDTA_Sample        = SDTA_Dummy + 2; // (PByte) Sample data
+  SDTA_SampleLength  = SDTA_Dummy + 3; // (LongWord) Length of the sample data in Bytes
+  SDTA_Period        = SDTA_Dummy + 4; // (Word) Period
+  SDTA_Volume        = SDTA_Dummy + 5; // (Word) Volume.  Range from 0 to 64
+  SDTA_Cycles        = SDTA_Dummy + 6;
+  // The following tags are new for V40
+  SDTA_SignalTask    = SDTA_Dummy + 7; // (PTask) Task to signal when sound is complete or next buffer needed.
+  SDTA_SignalBit     = SDTA_Dummy + 8; // (LongWord) Signal mask to use on completion or 0 to disable
+  SDTA_SignalBitMask = SDTA_SignalBit; // (Byte) Signal bit to use on completion or -1 to disable
+  SDTA_Continuous    = SDTA_Dummy + 9; // (Byte) Playing a continuous stream of data.  Defaults to False.
+
+  // The following tags are new for V44
+  SDTA_SignalBitNumber  = SDTA_Dummy + 10; // (Byte) Signal bit to use on completion or -1 to disable
+  SDTA_SamplesPerSec    = SDTA_Dummy + 11; // (Word) Samples per second
+  SDTA_ReplayPeriod     = SDTA_Dummy + 12; // (PTimeVal) Sample replay period
+  SDTA_LeftSample       = SDTA_Dummy + 13; // (PByte) Sample data
+  SDTA_RightSample      = SDTA_Dummy + 14; // (PByte) Sample data
+  SDTA_Pan              = SDTA_Dummy + 15; // (PByte) Stereo panning
+  SDTA_FreeSampleData   = SDTA_Dummy + 16; // (Bool) FreeVec() all sample data upon OM_DISPOSE.
+  SDTA_SyncSampleChange = SDTA_Dummy + 17; // (Boot) Wait for the current sample to be played back before switching to the new sample data.
+
+  // Data compression methods
+  CMP_NONE     = 0;
+  CMP_FIBDELTA = 1;
+
+  // Unity = Fixed 1.0 = maximum volume
+  Unity = $10000;
 
 
-   ADTM_START            =  ($703);
-    {  Used to start the animation }
+type
+  PVoiceHeader = ^TVoiceHeader;
+  TVoiceHeader = record
+    vh_OneShotHiSamples: LongWord;  // # samples in the high octave 1-shot part
+    vh_RepeatHiSamples: LongWord;   // # samples in the high octave repeat part
+    vh_SamplesPerHiCycle: LongWord; // # samples/cycle in high octave, else 0
+    vh_SamplesPerSec: Word;         // data sampling rate
+    vh_Octaves: Byte;               // # of octaves of waveforms
+    vh_Compression: Byte;           // data compression technique used
+    vh_Volume: LongWord;            // playback nominal volume from 0 to Unity (full volume). Map this value into the output hardware's dynamic range.
+  end;
 
 
-   ADTM_PAUSE            =  ($704);
-    {  Used to pause the animation (don't reset the timer) }
+const
+  // Channel allocation */
+  SAMPLETYPE_Left   = 2;
+  SAMPLETYPE_Right  = 4;
+  SAMPLETYPE_Stereo = 6;
 
 
-   ADTM_STOP             =  ($705);
-    {  Used to stop the animation }
+type
+  TSampleType = LongInt;
 
 
-   ADTM_LOCATE           =  ($706);
-    {  Used to locate a frame in the animation (as set by a slider...) }
+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
 
 
-    { Used to load a new format frame of the animation (V44) }
-   ADTM_LOADNEWFORMATFRAME =    ($707);
+// textclass
+const
+  TEXTDTCLASS = 'text.datatype';
 
 
-    { Used to unload a new format frame of the animation (V44) }
-   ADTM_UNLOADNEWFORMATFRAME  = ($708);
-{ ***************************************************************************}
+  // 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; // Boolean. Should the text be word wrapped. Defaults to false.
 
 
-{  ADTM_LOADFRAME, ADTM_UNLOADFRAME }
 Type
 Type
- padtFrame = ^tadtFrame;
- tadtFrame = record
-    MethodID,
-    alf_TimeStamp,         {  Timestamp of frame to load }
-
-    {  The following fields are filled in by the ADTM_LOADFRAME method, }
-    {  and are read-only for any other methods. }
-
-    alf_Frame,                        {  Frame number }
-    alf_Duration  :  ULONG;           {  Duration of frame }
-
-    alf_BitMap    :  pBitMap;         {  Loaded BitMap }
-    alf_CMap      :  pColorMap;       {  Colormap, if changed }
-
-    alf_Sample    :  Pointer;         {  Sound data }
-    alf_SampleLength,
-    alf_Period    : ULONG;
+  // There is one line structure for every line of text in the document.
+  PLine = ^TLine;
+  TLine = record
+    ln_Link: TMinNode;    // to link the lines together
+    ln_Text: STRPTR;      // pointer to the text for this line
+    ln_TextLen: LongWord; // the character length of the text for this line
+    ln_XOffset: Word;     // where in the line the text starts
+    ln_YOffset: Word;     // line the text is on
+    ln_Width: Word;       // Width of line in pixels
+    ln_Height: Word;      // Height of line in pixels
+    ln_Flags: Word;       // info on the line LNF_*
+    ln_FgPen: ShortInt;   // foreground pen
+    ln_BgPen: ShortInt;   // background pen
+    ln_Style: LongWord;   // Font style
+    ln_Data: APTR;        // Link data...
+  end;
+const
+  // ln_Flags
+  LNF_LF        = 1 shl 0; // Line Feed
+  LNF_LINK      = 1 shl 1; // Segment is a link
+  LNF_OBJECT    = 1 shl 2; // ln_Data is a pointer to an DataTypes object
+  LNF_SELECTED  = 1 shl 3; // Object is selected
 
 
-    alf_UserData  : Pointer;          {  Used by load frame for extra data }
- end;
+  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
 
 
- { ADTM_LOADNEWFORMATFRAME, ADTM_UNLOADNEWFORMATFRAME }
-
- PadtNewFormatFrame = ^tadtNewFormatFrame;
-     tadtNewFormatFrame = record
-          MethodID : ULONG;
-          alf_TimeStamp : ULONG;     { Timestamp of frame to load }
-          { The following fields are filled in by the ADTM_NEWLOADFRAME method, }
-    { and are read-only for any other methods. }
-          alf_Frame : ULONG;         { Frame number }
-          alf_Duration : ULONG;      { Duration of frame }
-          alf_BitMap : PBitMap;      { Loaded BitMap }
-          alf_CMap : PColorMap;      { Colormap, if changed }
-          alf_Sample : PBYTE;
-          alf_SampleLength : ULONG;  { Sound data }
-          alf_Period : ULONG;
-          alf_UserData : APTR;       { Used by load frame for extra data }
-          alf_Size : ULONG;          { Size of this data structure (in bytes) }
-          alf_LeftSample : PBYTE;    { Sound for left channel, or NULL if none }
-          alf_RightSample : PBYTE;   { Sound for right channel, or NULL if none }
-          alf_SamplesPerSec : ULONG; { Replay speed; if > 0, this overrides alf_Period }
-       end;
-
-
-{  ADTM_START, ADTM_PAUSE, ADTM_STOP, ADTM_LOCATE }
- padtStart = ^tadtStart;
- tadtStart = record
-    MethodID,
-    asa_Frame : ULONG;             {  Frame # to start at }
- end;
+// animationclass
+const
+  ANIMATIONDTCLASS = 'animation.datatype';
+
+  // Animation attributes
+  ADTA_Dummy           = DTA_Dummy + 600;
+  ADTA_ModeID          = PDTA_ModeID;
+  ADTA_KeyFrame        = PDTA_BitMap;         // (PBitmap) Key frame (first frame) 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;        // (Bool) Remap animation (defaults to True)
+  ADTA_Screen          = PDTA_Screen;       // (PScreen) Screen to remap to
+  ADTA_NumSparse       = PDTA_NumSparse;    // (Word) Number of colors used for sparse remapping
+  ADTA_SparseTable     = PDTA_SparseTable;  // (PByte) Pointer to a table of pen numbers indicating which colors should be used when remapping the image.
+                                            // This array must contain as many entries as there are colors specified with ADTA_NumSparse
+  ADTA_Width           = ADTA_Dummy + 1;
+  ADTA_Height          = ADTA_Dummy + 2;
+  ADTA_Depth           = ADTA_Dummy + 3;
+  ADTA_Frames          = ADTA_Dummy + 4;   // (LongWord) Number of frames in the animation
+  ADTA_Frame           = ADTA_Dummy + 5;   // (LongWord)  Current frame
+  ADTA_FramesPerSecond = ADTA_Dummy + 6;   // (LongWord) Frames per second
+  ADTA_FrameIncrement  = ADTA_Dummy + 7;   // (LongInt) Amount to change frame by when fast forwarding or rewinding.  Defaults to 10.
+
+  ADTA_PreloadFrameCount = ADTA_Dummy + 8;   // (V44)
+
+  // Sound attributes
+  ADTA_Sample          = SDTA_Sample;
+  ADTA_SampleLength    = SDTA_SampleLength;
+  ADTA_Period          = SDTA_Period;
+  ADTA_Volume          = SDTA_Volume;
+  ADTA_Cycles          = SDTA_Cycles;
+  // V44
+  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
+  // Required ANHD structure describes an ANIM frame
+  PAnimHeader = ^TAnimHeader;
+  TAnimHeader = record
+    ah_Operation: Byte; { The compression method:
+                                   0  set directly (normal ILBM BODY),
+                                   1  XOR ILBM mode,
+                                   2  Long Delta mode,
+                                   3  Short Delta mode,
+                                   4  Generalized short/long Delta mode,
+                                   5  Byte Vertical Delta mode
+                                   6  Stereo op 5 (third party)
+                                  74  (ascii 'J') reserved for Eric Graham's
+                                      compression technique (details to be
+                                      released later). }
+    ah_Mask: Byte;      // (XOR mode only - plane mask where each bit is set =1 if there is data and =0 if not.)
+    ah_Height: Word;    // (XOR mode only - width and height of the area represented
+    ah_Width: Word;     //   by the BODY to eliminate unnecessary un-changed data)
+    ah_Left: SmallInt;  // (XOR mode only - position of rectangular
+    ah_Top: SmallInt;   // area representd by the BODY)
+    ah_AbsTime: LongWord;  // Timing for a frame relative to the time the first frame was displayed, in jiffies (1/60 sec)
+    ah_RelTime: LongWord;  // Timing for frame relative to time previous frame was displayed - in jiffies (1/60 sec)
+    ah_Interleave: Byte;   { Indicates how may frames back this data is to modify.  0 defaults to indicate two frames back
+                             (for double buffering). n indicates n frames back. The main intent here is to allow values
+                             of 1 for special applications where frame data would modify the immediately previous frame. }
+    ah_Pad0: Byte;         // Pad byte, not used at present.
+    ah_Flags: LongWord;    { 32 option bits used by options=4 and 5. At present only 6 are identified, but the
+                             rest are set =0 so they can be used to implement future ideas.  These are defined
+                             for option 4 only at this point.  It is recommended that all bits be set =0 for
+                             option 5 and that any bit settings used in the future (such as for XOR mode)
+                             be compatible with the option 4 bit settings. Player code should check undefined bits
+                             in options 4 and 5 to assure they are zero.
+                             The six bits for current use are:
+                              bit #       set =0                  set =1
+                              ===============================================
+                              0           short data              long data
+                              1           set                     XOR
+                              2           separate info           one info list
+                                          for each plane          for all planes
+                              3           not RLC                 RLC (run length coded)
+                              4           horizontal              vertical
+                              5           short info offsets      long info offsets}
+    ah_Pad: array[0..15] of Byte; // This is a pad for future use for future compression modes
+  end;
+const
+  // Methods
+  ADTM_Dummy       = $700;
+  ADTM_LOADFRAME   = $701; // Used to load a frame of the animation
+  ADTM_UNLOADFRAME = $702; // Used to unload a frame of the animation
+  ADTM_START       = $703; // Used to start the animation
+  ADTM_PAUSE       = $704; // Used to pause the animation (don't reset the timer)
+  ADTM_STOP        = $705; // Used to stop the animation
+  ADTM_LOCATE      = $706; // Used to locate a frame in the animation (as set by a slider...)
+  // New on V44
+  ADTM_LOADNEWFORMATFRAME   = $707; // Used to load a new format frame of the animation
+  ADTM_UNLOADNEWFORMATFRAME = $708; // Used to unload a new format frame of the animation
 
 
-VAR DataTypesBase : pLibrary = nil;
+type
+  // ADTM_LOADFRAME, ADTM_UNLOADFRAME
+  PadtFrame = ^TadtFrame;
+  TadtFrame = record
+    MethodID: LongWord;
+    alf_TimeStamp: LongWord;  // Timestamp of frame to load
+    // The following fields are filled in by the ADTM_LOADFRAME method, and are read-only for any other methods.
+    alf_Frame: LongWord;      // Frame number
+    alf_Duration: LongWord;   // Duration of frame
+    alf_BitMap: PBitMap;      // Loaded BitMap
+    alf_CMap: PColorMap;      // Colormap, if changed
+    alf_Sample: PShortInt;    // Sound data
+    alf_SampleLength: LongWord;
+    alf_Period: LongWord;
+    alf_UserData: APTR;       // Used by load frame for extra data
+  end;
+
+  // ADTM_LOADFRAME, ADTM_UNLOADFRAME
+  PadtNewFormatFrame = ^TadtNewFormatFrame;
+  TadtNewFormatFrame = record
+    MethodID: LongWord;
+    alf_TimeStamp: LongWord;     // Timestamp of frame to load
+    // // The following fields are filled in by the ADTM_NEWLOADFRAME method, and are read-only for any other methods.
+    alf_Frame: LongWord;         // Frame number
+    alf_Duration: LongWord;      // Duration of frame
+    alf_BitMap: PBitMap;         // Loaded BitMap
+    alf_CMap: PColorMap;         // Colormap, if changed
+    alf_Sample: PShortInt;
+    alf_SampleLength: LongWord;  // Sound data
+    alf_Period: LongWord;
+    alf_UserData: APTR;          // Used by load frame for extra data
+    alf_Size: LongWord;          // Size of this data structure (in bytes)
+    alf_LeftSample: PShortInt;   // Sound for left channel, or nil if none
+    alf_RightSample: PShortInt;  // Sound for right channel, or nil if none
+    alf_SamplesPerSec: LongWord; // Replay speed; if > 0, this overrides alf_Period
+  end;
+
+  // ADTM_START, ADTM_PAUSE, ADTM_STOP, ADTM_LOCATE
+  PadtStart = ^tadtStart;
+  TadtStart = record
+    MethodID: LongWord;
+    asa_Frame: LongWord; // Frame # to start at
+  end;
+
+
+
+var
+  DataTypesBase: PLibrary = nil;
 
 
 const
 const
-    DATATYPESNAME : PChar = 'datatypes.library';
-
-{
-    Just a note.
-    You will see a lot of pObject_ here, pObject is
-    defined in intuition.
+  DATATYPESNAME: PChar = 'datatypes.library';
+
+function AddDTObject(Win: PWindow location 'a0'; Req: PRequester location 'a1'; o: PObject_ location 'a2'; Pos: LongInt location 'd0'): LongInt; syscall DataTypesBase 072;
+procedure DisposeDTObject(o: PObject_ location 'a0'); syscall DataTypesBase 054;
+function DoAsyncLayout(o: PObject_ location 'a0'; gpl: pgpLayout location 'a1'): LongWord; syscall DataTypesBase 084;
+function DoDTMethodA(o: PObject_ location 'a0'; Win: PWindow location 'a1'; Req: PRequester location 'a2'; Msg: PLongInt location 'a3'): LongWord; syscall DataTypesBase 090;
+function GetDTAttrsA(o: PObject_ location 'a0'; Attrs: PTagItem location 'a2'): LongWord; syscall DataTypesBase 066;
+function GetDTMethods(Obj: PObject_ location 'a0'): Pointer; syscall DataTypesBase 102;
+function GetDTString(Id: LongWord location 'a0'): STRPTR; syscall DataTypesBase 138;
+function GetDTTriggerMethods(Obj: PObject_ location 'a0'): PDTMethod; syscall DataTypesBase 108;
+function NewDTObjectA(Name: STRPTR location 'd0'; Attrs: pTagItem location 'a0'): Pointer; syscall DataTypesBase 048;
+function ObtainDataTypeA(Typ: LongWord location 'd0'; Handle: Pointer location 'a0'; Attrs: PTagItem location 'a1'): pDataType; syscall DataTypesBase 036;
+function PrintDTObjectA(o: PObject_ location 'a0'; w: PWindow location 'a1'; r: PRequester location 'a2'; Msg: PdtPrint location 'a3'): LongWord; syscall DataTypesBase 114;
+procedure RefreshDTObjectA(o: PObject_ location 'a0'; Win: PWindow location 'a1'; Req: PRequester location 'a2'; Attrs: PTagItem location 'a3'); syscall DataTypesBase 078;
+procedure ReleaseDataType(Dt: PDataType location 'a0'); syscall DataTypesBase 042;
+function RemoveDTObject(Win: PWindow location 'a0'; o: PObject_ location 'a1'): LongInt; syscall DataTypesBase 096;
+function SetDTAttrsA(o: PObject_ location 'a0'; Win: PWindow location 'a1'; Req: PRequester location 'a2'; Attrs: PTagItem location 'a3'): LongWord; syscall DataTypesBase 060;
+
+function ObtainDTDrawInfoA(o: PObject_ location 'a0'; Attrs: PTagItem location 'a1'): Pointer; syscall DataTypesBase 120;
+function DrawDTObjectA(Rp: PRastPort location 'a0';  o: PObject_ location 'a1'; x: LongInt location 'd0'; y: LongInt location 'd1'; w: LongInt location 'd2'; h: LongInt location 'd3'; th: LongInt location 'd4'; tv: LongInt location 'd5'; Attrs: PTagItem location 'a2'): LongInt; syscall DataTypesBase 126;
+procedure ReleaseDTDrawInfo(o: PObject_ location 'a0'; Handle: Pointer location 'a1'); syscall DataTypesBase 132;
+
+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;
+
+implementation
+
+function ObtainDataType(Typ: LongWord; Handle: APTR; const TagList: array of PtrUInt): PDataType;
+begin
+  ObtainDataType := ObtainDataTypeA(Typ, Handle, @TagList);
+end;
 
 
-    In c it's object * but we can't have object in fpc.
-    typedef object ULONG
+function NewDTObject(Name: APTR; const TagList: array of PtrUInt): PObject_;
+begin
+  NewDTObject := NewDTObjectA(Name, @TagList);
+end;
 
 
-    pObject_ is just pULONG.
+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;
 
 
-FUNCTION AddDTObject(win : pWindow location 'a0'; req : pRequester location 'a1'; o : pObject_ location 'a2'; pos : LONGINT location 'd0') : LONGINT; syscall DataTypesBase 072;
-PROCEDURE DisposeDTObject(o : pObject_ location 'a0'); syscall DataTypesBase 054;
-FUNCTION DoAsyncLayout(o : pObject_ location 'a0'; gpl : pgpLayout location 'a1') : ULONG; syscall DataTypesBase 084;
-FUNCTION DoDTMethodA(o : pObject_ location 'a0'; win : pWindow location 'a1'; req : pRequester location 'a2'; msg : pLONGINT location 'a3') : ULONG; syscall DataTypesBase 090;
-FUNCTION GetDTAttrsA(o : pObject_ location 'a0'; attrs : pTagItem location 'a2') : ULONG; syscall DataTypesBase 066;
-FUNCTION GetDTMethods(obj : pObject_ location 'a0') : POINTER; syscall DataTypesBase 102;
-FUNCTION GetDTString(id : ULONG location 'a0') : pCHAR; syscall DataTypesBase 138;
-FUNCTION GetDTTriggerMethods(obj : pObject_ location 'a0') : pDTMethod; syscall DataTypesBase 108;
-FUNCTION NewDTObjectA(name : POINTER location 'd0'; attrs : pTagItem location 'a0') : POINTER; syscall DataTypesBase 048;
-FUNCTION ObtainDataTypeA(typ : ULONG location 'd0'; handle : POINTER location 'a0'; attrs : pTagItem location 'a1') : pDataType; syscall DataTypesBase 036;
-FUNCTION PrintDTObjectA(o : pObject_ location 'a0'; w : pWindow location 'a1'; r : pRequester location 'a2'; msg : pdtPrint location 'a3') : ULONG; syscall DataTypesBase 114;
-PROCEDURE RefreshDTObjectA(o : pObject_ location 'a0'; win : pWindow location 'a1'; req : pRequester location 'a2'; attrs : pTagItem location 'a3'); syscall DataTypesBase 078;
-PROCEDURE ReleaseDataType(dt : pDataType location 'a0'); syscall DataTypesBase 042;
-FUNCTION RemoveDTObject(win : pWindow location 'a0'; o : pObject_ location 'a1') : LONGINT; syscall DataTypesBase 096;
-FUNCTION SetDTAttrsA(o : pObject_ location 'a0'; win : pWindow location 'a1'; req : pRequester location 'a2'; attrs : pTagItem location 'a3') : ULONG; syscall DataTypesBase 060;
-
-FUNCTION ObtainDTDrawInfoA( o : pObject_ location 'a0'; attrs : pTagItem location 'a1') : POINTER; syscall DataTypesBase 120;
-FUNCTION DrawDTObjectA(rp : pRastPort location 'a0';  o : pObject_ location 'a1'; x : LONGINT location 'd0'; y : LONGINT location 'd1'; w : LONGINT location 'd2'; h : LONGINT location 'd3'; th : LONGINT location 'd4'; tv : LONGINT location 'd5'; attrs : pTagItem location 'a2') : LONGINT; syscall DataTypesBase 126;
-PROCEDURE ReleaseDTDrawInfo( o : pObject_ location 'a0'; handle : POINTER location 'a1'); syscall DataTypesBase 132;
-
-function GetDTAttrs(o : pObject_; Const argv : array of PtrUInt) : ULONG;
-function NewDTObject(name : POINTER; Const argv : array of PtrUInt): POINTER;
-function ObtainDataType(typ : ULONG; handle : POINTER; Const argv : array of PtrUInt) : pDataType;
-procedure RefreshDTObject(o : pObject_; win : pWindow; req : pRequester; Const argv : array of PtrUInt);
-function SetDTAttrs(o : pObject_; win : pWindow; req : pRequester; Const argv : array of PtrUInt) : ULONG;
-
-IMPLEMENTATION
-
-function GetDTAttrs(o : pObject_; Const argv : array of PtrUInt) : ULONG;
+procedure RefreshDTObject(Obj: PObject_; Window: PWindow; Req: PRequester; const TagList: array of PtrUInt);
 begin
 begin
-    GetDTAttrs := GetDTAttrsA(o,@argv);
+  RefreshDTObjectA(Obj, Window, Req, @TagList);
 end;
 end;
 
 
-function NewDTObject(name : POINTER; Const argv : array of PtrUInt): POINTER;
+function DoDTMethod(O: PObject_; Win: PWindow; Req: PRequester; const ArgList: array of PtrUInt): PtrUInt;
 begin
 begin
-    NewDTObject := NewDTObjectA(name,@argv);
+  DoDTMethod := DoDTMethodA(O, Win, Req, @ArgList);
 end;
 end;
 
 
-function ObtainDataType(typ : ULONG; handle : POINTER; Const argv : array of PtrUInt) : pDataType;
+function PrintDTObject(Obj: PObject_; Window: PWindow; Requester: PRequester; const ArgList: array of PtrUInt): LongWord;
 begin
 begin
-    ObtainDataType := ObtainDataTypeA(typ,handle,@argv);
+  PrintDTObject := PrintDTObjectA(Obj, Window, Requester, @ArgList);
 end;
 end;
-procedure RefreshDTObject(o : pObject_; win : pWindow; req : pRequester; Const argv : array of PtrUInt);
+
+function ObtainDTDrawInfo(O: PObject_; const TagList: array of PtrUInt): APTR;
 begin
 begin
-    RefreshDTObjectA(o,win,req,@argv);
+  ObtainDTDrawInfo := ObtainDTDrawInfoA(O, @TagList);
 end;
 end;
 
 
-function SetDTAttrs(o : pObject_; win : pWindow; req : pRequester; Const argv : array of PtrUInt) : ULONG;
+function DrawDTObject(Rp: PRastPort; O: PObject_; x, y, w, h, th, tv: LongInt; const TagList: array of PtrUInt): LongInt;
 begin
 begin
-    SetDTAttrs := SetDTAttrsA(o,win,req,@argv);
+  DrawDTObject := DrawDTObjectA(RP, O, x, y, w, h, th, tv, @TagList);
 end;
 end;
 
 
 
 
 const
 const
-    { Change VERSION and LIBVERSION to proper values }
-    VERSION : string[2] = '0';
-    LIBVERSION : longword = 0;
+  LIBVERSION : longword = 0;
 
 
 initialization
 initialization
   DataTypesBase := OpenLibrary(DATATYPESNAME,LIBVERSION);
   DataTypesBase := OpenLibrary(DATATYPESNAME,LIBVERSION);

+ 8 - 8
packages/arosunits/src/datatypes.pas

@@ -1,8 +1,8 @@
 {
 {
     This file is part of the Free Pascal run time library.
     This file is part of the Free Pascal run time library.
-    Copyright (c) 2014 by Free Pascal development team
+    Copyright (c) 2018 by Free Pascal development team
 
 
-    asl.library functions
+    datatypes.library functions
 
 
     See the file COPYING.FPC, included in this distribution,
     See the file COPYING.FPC, included in this distribution,
     for details about the copyright.
     for details about the copyright.
@@ -385,13 +385,13 @@ type
     dtg_AttrList: PTagItem; // Additional attributes
     dtg_AttrList: PTagItem; // Additional attributes
   end;
   end;
 
 
-  //* DTM_TRIGGER */
+  // DTM_TRIGGER
   PdtTrigger = ^TdtTrigger;
   PdtTrigger = ^TdtTrigger;
   TdtTrigger = record
   TdtTrigger = record
-    MethodID        : ULONG;
-    dtt_GInfo       : PGadgetInfo;
-    dtt_Function    : ULONG;
-    dtt_Data        : APTR;
+    MethodID: PtrUInt;
+    dtt_GInfo: PGadgetInfo;
+    dtt_Function: LongWord;
+    dtt_Data: APTR;
   end;
   end;
 
 
 const
 const
@@ -481,7 +481,7 @@ const
 const
 const
   PICTUREDTCLASS = 'picture.datatype';
   PICTUREDTCLASS = 'picture.datatype';
 
 
-Type
+type
   PBitMapHeader = ^TBitMapHeader;
   PBitMapHeader = ^TBitMapHeader;
   TBitMapHeader = record
   TBitMapHeader = record
     bmh_Width: Word;
     bmh_Width: Word;