summaryrefslogtreecommitdiff
path: root/packages/morphunits/src/datatypes.pas
diff options
context:
space:
mode:
Diffstat (limited to 'packages/morphunits/src/datatypes.pas')
-rw-r--r--packages/morphunits/src/datatypes.pas1475
1 files changed, 1475 insertions, 0 deletions
diff --git a/packages/morphunits/src/datatypes.pas b/packages/morphunits/src/datatypes.pas
new file mode 100644
index 0000000000..58ac85e53f
--- /dev/null
+++ b/packages/morphunits/src/datatypes.pas
@@ -0,0 +1,1475 @@
+{
+ This file is part of the Free Pascal run time library.
+ Copyright (c) 2005 Karoly Balogh
+
+ datatypes.library interface unit for MorphOS/PowerPC
+
+ Based on work of Nils Sjoholm member of the Amiga RTL
+ development team.
+
+ MorphOS port was done on a free Pegasos II/G4 machine
+ provided by Genesi S.a.r.l. <www.genesi.lu>
+
+ 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.
+
+ **********************************************************************}
+{$INLINE ON}
+{$PACKRECORDS 2}
+unit datatypes;
+
+interface
+
+uses exec, amigados, intuition, utility,
+ agraphics{, iffparse, amigaprinter, prtbase};
+
+const
+{***************************************************************************}
+
+ ID_DTYP = 1146378576;
+
+{***************************************************************************}
+
+ ID_DTHD = 1146374212;
+
+Type
+ pDataTypeHeader = ^tDataTypeHeader;
+ tDataTypeHeader = record
+ dth_Name, { Descriptive name of the data type }
+ dth_BaseName, { Base name of the data type }
+ dth_Pattern : PChar; { Match pattern for file name. }
+ dth_Mask : Pointer; { Comparision mask }
+ dth_GroupID, { Group that the DataType is in }
+ dth_ID : longword; { 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 }
+ end;
+
+const
+ DTHSIZE = 32;
+
+{***************************************************************************}
+
+{ 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;
+
+{****************************************************************************
+ *
+ * GROUP ID and ID
+ *
+ * This is used for filtering out objects that you don't want. For
+ * example, you could make a filter for the ASL file requester so
+ * that it only showed the files that were pictures, or even to
+ * narrow it down to only show files that were ILBM pictures.
+ *
+ * Note that the Group ID's are in lower case, and always the first
+ * four characters of the word.
+ *
+ * For ID's; If it is an IFF file, then the ID is the same as the
+ * FORM type. If it isn't an IFF file, then the ID would be the
+ * first four characters of name for the file type.
+ *
+ ****************************************************************************}
+
+{ 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 : longword; { Lock on the file }
+ dthc_FIB : pFileInfoBlock; { Pointer to a FileInfoBlock }
+ dthc_FileHandle : longword; { Pointer to the file handle (may be NULL) }
+{$WARNING FIX ME!!! IFF handle type}
+// dthc_IFF : pIFFHandle; { Pointer to an IFFHandle (may be NULL) }
+ dthc_IFF : Pointer; { Pointer to an IFFHandle (may be NULL) }
+ dthc_Buffer : PChar; { Buffer }
+ dthc_BufferLength : longword; { Length of the buffer }
+ end;
+
+{***************************************************************************}
+
+const
+ ID_TOOL = 1146377292;
+
+Type
+ pTool = ^tTool;
+ tTool = record
+ tn_Which, { Which tool is this }
+ tn_Flags : WORD; { Flags }
+ tn_Program : PChar; { Application to use }
+ end;
+
+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;
+
+{***************************************************************************}
+
+ ID_TAGS = 1146377287;
+
+{***************************************************************************}
+
+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 : PChar; { Name of comparision routine }
+ dtn_AttrList : pTagItem; { Object creation tags }
+ dtn_Length : longword; { Length of the memory block }
+ end;
+
+{***************************************************************************}
+
+ pToolNode = ^tToolNode;
+ tToolNode = Record
+ tn_Node : tNode; { Embedded node }
+ tn_Tool : tTool; { Embedded tool }
+ tn_Length : longword; { Length of the memory block }
+ end;
+
+{***************************************************************************}
+
+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);
+ { (Pointer) Object specific data. }
+
+ DTA_TextFont = (DTA_Dummy+23);
+ { (struct TextFont ) Default font to use for text within the
+ * object. }
+
+ DTA_Methods = (DTA_Dummy+24);
+ { (longword ) 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 (Pointer).
+ }
+ DTA_SourceAddress = (DTA_Dummy+39);
+
+ { New for V44. Size of a DTST_MEMORY source type
+ * object (longword).
+ }
+ 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);
+ { (PChar) 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;
+
+
+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 : PChar;
+ dtm_Method : longword;
+ 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 }
+type
+ pFrameInfo = ^tFrameInfo;
+ tFrameInfo = record
+ fri_PropertyFlags : longword;
+ fri_Resolution : tPoint;
+ 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;
+ 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 : 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, { Input }
+ dtf_FrameInfo : pFrameInfo; { Output }
+ dtf_SizeFrameInfo,
+ dtf_FrameFlags : longword;
+ end;
+
+{ DTM_GOTO }
+ pdtGoto = ^tdtGoto;
+ tdtGoto = record
+ MethodID : longword;
+ dtg_GInfo : pGadgetInfo;
+ dtg_NodeName : PChar; { 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 : Pointer;
+ end;
+
+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;
+{$WARNING FIX ME!!! TPrinterIO}
+{
+ 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,
+ dtd_Top,
+ dtd_Width,
+ dtd_Height,
+ dtd_TopHoriz,
+ dtd_TopVert : Longint;
+ dtd_AttrList : pTagItem; { Additional attributes }
+ end;
+
+{ DTM_WRITE }
+ pdtWrite = ^tdtWrite;
+ tdtWrite = record
+ MethodID : longword;
+ dtw_GInfo : pGadgetInfo; { Gadget information }
+ dtw_FileHandle : longword; { File handle to write to }
+ dtw_Mode : longword;
+ dtw_AttrList : pTagItem; { Additional attributes }
+ end;
+
+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);
+
+{ Color table to use with SetRGB32CM() (longword *) }
+ PDTA_CRegs = (DTA_Dummy + 204);
+
+{ 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 (longword *).
+ }
+ PDTA_GRegs = (DTA_Dummy + 205);
+
+{ Shared pen table; this table is initialized during the layout
+ * process while the picture is being remapped (UBYTE *).
+ }
+ PDTA_ColorTable = (DTA_Dummy + 206);
+
+{ 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);
+
+{ OBSOLETE; DO NOT USE }
+ PDTA_Allocated = (DTA_Dummy + 208);
+
+{ Number of colors used by the picture. (UWORD) }
+ PDTA_NumColors = (DTA_Dummy + 209);
+
+{ Number of colors allocated by the picture (UWORD) }
+ PDTA_NumAlloc = (DTA_Dummy + 210);
+
+ 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 (longword). (V44) }
+ PDTA_WhichPicture = (DTA_Dummy + 219);
+
+{ Get the number of pictures stored in the file (longword *). (V44) }
+ PDTA_GetNumPictures = (DTA_Dummy + 220);
+
+{ Maximum number of colours to use for dithering (longword). (V44) }
+ PDTA_MaxDitherPens = (DTA_Dummy + 221);
+
+{ Quality of the dithering algorithm to be used during colour
+ * quantization (longword). (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);
+
+ PDTA_Displayable = (DTA_Dummy + 259); { * defaults to TRUE * }
+
+
+{***************************************************************************}
+
+{ 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);
+
+{***************************************************************************}
+
+{ * Pixel formats * }
+
+ PBPAFMT_RGB = 0;
+ PBPAFMT_RGBA = 1;
+ PBPAFMT_ARGB = 2;
+ PBPAFMT_LUT8 = 3;
+ PBPAFMT_GREY8 = 4;
+
+
+{ Masking techniques }
+ mskNone = 0;
+ mskHasMask = 1;
+ mskHasTransparentColor = 2;
+ mskLasso = 3;
+ mskHasAlpha = 4;
+
+{ Compression techniques }
+ cmpNone = 0;
+ cmpByteRun1 = 1;
+ cmpByteRun2 = 2;
+
+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;
+
+{***************************************************************************}
+
+{ Color register structure }
+ pColorRegister = ^tColorRegister;
+ tColorRegister = record
+ red, green, blue : Byte;
+ end;
+
+{***************************************************************************}
+
+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);
+ { (longword) 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. }
+
+{ (longword) 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);
+ { (longword) 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);
+
+{ (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 : longword;
+ vh_SamplesPerSec : WORD;
+ vh_Octaves,
+ vh_Compression : Byte;
+ vh_Volume : longword;
+ end;
+
+{***************************************************************************}
+
+const
+
+{ 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 : PChar; { pointer to the text for this line }
+ ln_TextLen : longword; { 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 : longword; { Font style }
+ ln_Data : Pointer; { Link data... }
+ end;
+
+{ ***************************************************************************}
+
+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);
+ { (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);
+ { (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 : longword; { 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 : 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
+ 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...) }
+
+ { Used to load a new format frame of the animation (V44) }
+ ADTM_LOADNEWFORMATFRAME = ($707);
+
+ { Used to unload a new format frame of the animation (V44) }
+ ADTM_UNLOADNEWFORMATFRAME = ($708);
+{ ***************************************************************************}
+
+{ ADTM_LOADFRAME, ADTM_UNLOADFRAME }
+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 : longword; { Duration of frame }
+
+ alf_BitMap : pBitMap; { Loaded BitMap }
+ alf_CMap : pColorMap; { Colormap, if changed }
+
+ alf_Sample : Pointer; { Sound data }
+ alf_SampleLength,
+ alf_Period : longword;
+
+ alf_UserData : Pointer; { Used by load frame for extra data }
+ end;
+
+ { ADTM_LOADNEWFORMATFRAME, ADTM_UNLOADNEWFORMATFRAME }
+
+ 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 : PBYTE;
+ alf_SampleLength : longword; { Sound data }
+ alf_Period : longword;
+ alf_UserData : Pointer; { Used by load frame for extra data }
+ alf_Size : longword; { 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 : longword; { Replay speed; if > 0, this overrides alf_Period }
+ end;
+
+
+{ ADTM_START, ADTM_PAUSE, ADTM_STOP, ADTM_LOCATE }
+ padtStart = ^tadtStart;
+ tadtStart = record
+ MethodID,
+ asa_Frame : longword; { Frame # to start at }
+ end;
+
+{ *************************************************************************** }
+
+var
+ DataTypesBase : PLibrary;
+
+const
+ DATATYPESNAME : PChar = 'datatypes.library';
+
+
+function ObtainDataTypeA(type_ : CARDINAL location 'd0'; handle : POINTER location 'a0'; attrs : pTagItem location 'a1') : pDataType;
+SysCall DataTypesBase 036;
+
+function ObtainDataType(type_ : CARDINAL; handle : POINTER; attrs : array of LongWord) : pDataType; Inline;
+
+procedure ReleaseDataType(dt : pDataType location 'a0');
+SysCall DataTypesBase 042;
+
+function NewDTObjectA(name : PChar location 'd0'; attrs : pTagItem location 'a0') : CARDINAL;
+SysCall DataTypesBase 048;
+
+function NewDTObject(name : PChar; attrs : array of LongWord) : CARDINAL; Inline;
+
+procedure DisposeDTObject(o : CARDINAL location 'a0');
+SysCall DataTypesBase 054;
+
+function SetDTAttrsA(o : CARDINAL location 'a0'; win : pWindow location 'a1'; req : pRequester location 'a2'; attrs : pTagItem location 'a3') : CARDINAL;
+SysCall DataTypesBase 060;
+
+function SetDTAttrs(o : CARDINAL; win : pWindow; req : pRequester; attrs : array of LongWord) : CARDINAL; Inline;
+
+function GetDTAttrsA(o : CARDINAL location 'a0'; attrs : pTagItem location 'a2') : CARDINAL;
+SysCall DataTypesBase 066;
+
+function GetDTAttrs(o : CARDINAL; attrs : array of LongWord) : CARDINAL; Inline;
+
+function AddDTObject(win : pWindow location 'a0'; req : pRequester location 'a1'; o : CARDINAL location 'a2'; pos : LongInt location 'd0') : LongInt;
+SysCall DataTypesBase 072;
+
+procedure RefreshDTObjectA(o : CARDINAL location 'a0'; win : pWindow location 'a1'; req : pRequester location 'a2'; attrs : pTagItem location 'a3');
+SysCall DataTypesBase 078;
+
+procedure RefreshDTObject(o : CARDINAL; win : pWindow; req : pRequester; attrs : array of LongWord); Inline;
+
+function DoAsyncLayout(o : CARDINAL location 'a0'; gpl : pgpLayout location 'a1') : CARDINAL;
+SysCall DataTypesBase 084;
+
+function DoDTMethodA(o : CARDINAL location 'a0'; win : pWindow location 'a1'; req : pRequester location 'a2'; msg : pLongInt location 'a3') : CARDINAL;
+SysCall DataTypesBase 090;
+
+function DoDTMethod(o : CARDINAL; win : pWindow; req : pRequester; msg : array of LongInt) : CARDINAL; Inline;
+
+function RemoveDTObject(win : pWindow location 'a0'; o : CARDINAL location 'a1') : LongInt;
+SysCall DataTypesBase 096;
+
+function GetDTMethods(o : CARDINAL location 'a0') : pCARDINAL;
+SysCall DataTypesBase 102;
+
+function GetDTTriggerMethods(o : CARDINAL location 'a0') : pDTMethod;
+SysCall DataTypesBase 108;
+
+function PrintDTObjectA(o : CARDINAL location 'a0'; w : pWindow location 'a1'; r : pRequester location 'a2'; msg : pdtPrint location 'a3') : CARDINAL;
+SysCall DataTypesBase 114;
+
+function ObtainDTDrawInfoA(o : CARDINAL location 'a0'; attrs : pTagItem location 'a1') : POINTER;
+SysCall DataTypesBase 120;
+
+function ObtainDTDrawInfo(o : CARDINAL; attrs : array of LongWord) : POINTER; Inline;
+
+function DrawDTObjectA(rp : pRastPort location 'a0'; o : CARDINAL 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;
+
+function DrawDTObject(rp : pRastPort; o : CARDINAL; x : LongInt; y : LongInt; w : LongInt; h : LongInt; th : LongInt; tv : LongInt; attrs : array of LongWord) : LongInt; Inline;
+
+procedure ReleaseDTDrawInfo(o : CARDINAL location 'a0'; handle : POINTER location 'a1');
+SysCall DataTypesBase 132;
+
+function GetDTString(id : CARDINAL location 'd0') : pSHORTINT;
+SysCall DataTypesBase 138;
+
+procedure LockDataType(dt : pDataType location 'a0');
+SysCall DataTypesBase 240;
+
+function FindToolNodeA(tl : pList location 'a0'; attrs : pTagItem location 'a1') : pToolNode;
+SysCall DataTypesBase 246;
+
+function FindToolNode(tl : pList; attrs : array of LongWord) : pToolNode; Inline;
+
+function LaunchToolA(t : pTool location 'a0'; project : pSHORTINT location 'a1'; attrs : pTagItem location 'a2') : CARDINAL;
+SysCall DataTypesBase 252;
+
+function LaunchTool(t : pTool; project : pSHORTINT; attrs : array of LongWord) : CARDINAL; Inline;
+
+function FindMethod(methods : CARDINAL location 'a0'; id : CARDINAL location 'a1') : pCARDINAL;
+SysCall DataTypesBase 258;
+
+function FindTriggerMethod(triggermethods : pDTMethod location 'a0'; command : pSHORTINT location 'a1'; method : CARDINAL location 'd0') : pDTMethod;
+SysCall DataTypesBase 264;
+
+function CopyDTMethods(src : CARDINAL location 'a0'; include : CARDINAL location 'a1'; exclude : CARDINAL location 'a2') : pCARDINAL;
+SysCall DataTypesBase 270;
+
+function CopyDTTriggerMethods(src : pDTMethod location 'a0'; include : pDTMethod location 'a1'; exclude : pDTMethod location 'a2') : pDTMethod;
+SysCall DataTypesBase 276;
+
+procedure FreeDTMethods(m : POINTER location 'a0');
+SysCall DataTypesBase 282;
+
+function GetDTTriggerMethodDataFlags(triggermethod : CARDINAL location 'd0') : CARDINAL;
+SysCall DataTypesBase 288;
+
+function SaveDTObjectA(o : CARDINAL location 'a0'; win : pWindow location 'a1'; req : pRequester location 'a2'; file_ : PChar location 'a3'; mode : CARDINAL location 'd0'; saveicon : BOOLEAN location 'd1'; attrs : pTagItem location 'a4') : CARDINAL;
+SysCall DataTypesBase 294;
+
+function SaveDTObject(o : CARDINAL; win : pWindow; req : pRequester; file_ : PChar; mode : CARDINAL; saveicon : BOOLEAN; attrs : array of LongWord) : CARDINAL; Inline;
+
+function StartDragSelect(o : CARDINAL location 'a0') : CARDINAL;
+SysCall DataTypesBase 300;
+
+function DoDTDomainA(o : CARDINAL location 'a0'; win : pWindow location 'a1'; req : pRequester location 'a2'; rport : pRastPort location 'a3'; which : CARDINAL location 'd0'; domain : pIBox location 'a4'; attrs : pTagItem location 'a5') : CARDINAL;
+SysCall DataTypesBase 306;
+
+function DoDTDomain(o : CARDINAL; win : pWindow; req : pRequester; rport : pRastPort; which : CARDINAL; domain : pIBox; attrs : array of LongWord) : CARDINAL; Inline;
+
+
+
+function InitDatatypesLibrary : boolean;
+
+
+implementation
+
+
+function ObtainDataType(type_ : CARDINAL; handle : POINTER; attrs : array of LongWord) : pDataType; Inline;
+begin
+ ObtainDataType:=ObtainDataTypeA(type_, handle, @attrs);
+end;
+
+function NewDTObject(name : PChar; attrs : array of LongWord) : CARDINAL; Inline;
+begin
+ NewDTObject:=NewDTObjectA(name, @attrs);
+end;
+
+function SetDTAttrs(o : CARDINAL; win : pWindow; req : pRequester; attrs : array of LongWord) : CARDINAL; Inline;
+begin
+ SetDTAttrs:=SetDTAttrsA(o, win, req, @attrs);
+end;
+
+function GetDTAttrs(o : CARDINAL; attrs : array of LongWord) : CARDINAL; Inline;
+begin
+ GetDTAttrs:=GetDTAttrsA(o, @attrs);
+end;
+
+function DoDTMethod(o : CARDINAL; win : pWindow; req : pRequester; msg : array of LongInt) : CARDINAL; Inline;
+begin
+ DoDTMethod:=DoDTMethodA(o, win, req, @msg);
+end;
+
+procedure RefreshDTObject(o : CARDINAL; win : pWindow; req : pRequester; attrs : array of LongWord); Inline;
+begin
+ RefreshDTObjectA(o, win, req, @attrs);
+end;
+
+function ObtainDTDrawInfo(o : CARDINAL; attrs : array of LongWord) : POINTER; Inline;
+begin
+ ObtainDTDrawInfo:=ObtainDTDrawInfoA(o, @attrs);
+end;
+
+function DrawDTObject(rp : pRastPort; o : CARDINAL; x : LongInt; y : LongInt; w : LongInt; h : LongInt; th : LongInt; tv : LongInt; attrs : array of LongWord) : LongInt; Inline;
+begin
+ DrawDTObject:=DrawDTObjectA(rp, o, x, y, w, h, th, tv, @attrs);
+end;
+
+function FindToolNode(tl : pList; attrs : array of LongWord) : pToolNode; Inline;
+begin
+ FindToolNode:=FindToolNodeA(tl, @attrs);
+end;
+
+function LaunchTool(t : pTool; project : pSHORTINT; attrs : array of LongWord) : CARDINAL; Inline;
+begin
+ LaunchTool:=LaunchToolA(t, project, @attrs);
+end;
+
+function SaveDTObject(o : CARDINAL; win : pWindow; req : pRequester; file_ : PChar; mode : CARDINAL; saveicon : BOOLEAN; attrs : array of LongWord) : CARDINAL; Inline;
+begin
+ SaveDTObject:=SaveDTObjectA(o, win, req, file_, mode, saveicon, @attrs);
+end;
+
+function DoDTDomain(o : CARDINAL; win : pWindow; req : pRequester; rport : pRastPort; which : CARDINAL; domain : pIBox; attrs : array of LongWord) : CARDINAL; Inline;
+begin
+ DoDTDomain:=DoDTDomainA(o, win, req, rport, which, domain, @attrs);
+end;
+
+
+const
+ { Change VERSION and LIBVERSION to proper values }
+ VERSION : string[2] = '50';
+ LIBVERSION : longword = 50;
+
+var
+ datatypes_exit : Pointer;
+
+
+procedure CloseDatatypesLibrary;
+begin
+ ExitProc := datatypes_exit;
+ if DatatypesBase <> nil then begin
+ CloseLibrary(PLibrary(DatatypesBase));
+ DatatypesBase := nil;
+ end;
+end;
+
+function InitDatatypesLibrary : boolean;
+begin
+ DatatypesBase := nil;
+ DatatypesBase := OpenLibrary(DATATYPESNAME,LIBVERSION);
+ if DatatypesBase <> nil then begin
+ datatypes_exit := ExitProc;
+ ExitProc := @CloseDatatypesLibrary;
+ InitDatatypesLibrary:=True;
+ end else begin
+ InitDatatypesLibrary:=False;
+ end;
+end;
+
+
+end. { UNIT DATATYPES }