Browse Source

* initial release

nils 22 years ago
parent
commit
c4bd066458
37 changed files with 14078 additions and 0 deletions
  1. 37 0
      packages/extra/amunits/inc/useamigasmartlink.inc
  2. 45 0
      packages/extra/amunits/inc/useautoopenlib.inc
  3. 44 0
      packages/extra/amunits/otherlibs/amarquee/examples/amarqueetest.pas
  4. 1102 0
      packages/extra/amunits/otherlibs/amarquee/units/amarquee.pas
  5. 107 0
      packages/extra/amunits/otherlibs/gtlayout/examples/gttest.pas
  6. 1246 0
      packages/extra/amunits/otherlibs/gtlayout/units/gtlayout.pas
  7. 664 0
      packages/extra/amunits/otherlibs/identify/units/identify.pas
  8. 86 0
      packages/extra/amunits/otherlibs/picasso/examples/bestmodeid.pas
  9. 62 0
      packages/extra/amunits/otherlibs/picasso/examples/modelist.pas
  10. 92 0
      packages/extra/amunits/otherlibs/picasso/examples/openpip.pas
  11. 215 0
      packages/extra/amunits/otherlibs/picasso/examples/openscreen.pas
  12. 90 0
      packages/extra/amunits/otherlibs/picasso/examples/p96checkboards.pas
  13. 64 0
      packages/extra/amunits/otherlibs/picasso/examples/requestmodeid.pas
  14. 0 0
      packages/extra/amunits/otherlibs/picasso/examples/symbol.blue
  15. 0 0
      packages/extra/amunits/otherlibs/picasso/examples/symbol.green
  16. 0 0
      packages/extra/amunits/otherlibs/picasso/examples/symbol.red
  17. 169 0
      packages/extra/amunits/otherlibs/picasso/examples/writetruecolordata.pas
  18. 903 0
      packages/extra/amunits/otherlibs/picasso/units/picasso96api.pas
  19. 411 0
      packages/extra/amunits/otherlibs/reqtools/examples/rtdemo.pas
  20. 1164 0
      packages/extra/amunits/otherlibs/reqtools/units/reqtools.pas
  21. 94 0
      packages/extra/amunits/otherlibs/triton/examples/checkbox.pas
  22. 1158 0
      packages/extra/amunits/otherlibs/triton/examples/demo.pas
  23. 372 0
      packages/extra/amunits/otherlibs/triton/examples/envprint.pas
  24. 286 0
      packages/extra/amunits/otherlibs/triton/examples/gadgetdemo.pas
  25. 285 0
      packages/extra/amunits/otherlibs/triton/examples/linklib.pas
  26. 106 0
      packages/extra/amunits/otherlibs/triton/examples/listview.pas
  27. 78 0
      packages/extra/amunits/otherlibs/triton/examples/palette.pas
  28. 124 0
      packages/extra/amunits/otherlibs/triton/examples/progindex.pas
  29. 80 0
      packages/extra/amunits/otherlibs/triton/examples/scroller.pas
  30. 92 0
      packages/extra/amunits/otherlibs/triton/examples/slider.pas
  31. 74 0
      packages/extra/amunits/otherlibs/triton/examples/string.pas
  32. 162 0
      packages/extra/amunits/otherlibs/triton/examples/toolmanager1.pas
  33. 168 0
      packages/extra/amunits/otherlibs/triton/examples/toolmanager2.pas
  34. 169 0
      packages/extra/amunits/otherlibs/triton/examples/toolmanager3.pas
  35. 171 0
      packages/extra/amunits/otherlibs/triton/examples/tritongadgets.pas
  36. 1477 0
      packages/extra/amunits/otherlibs/triton/units/triton.pas
  37. 2681 0
      packages/extra/amunits/otherlibs/triton/units/tritonmacros.pas

+ 37 - 0
packages/extra/amunits/inc/useamigasmartlink.inc

@@ -0,0 +1,37 @@
+
+{  useamigasmartlink.inc }
+
+{
+    This file is part of the Free Pascal run time library.
+
+    A file in Amiga system run time library.
+    Copyright (c) 2003 by Nils Sjoholm
+    member of the Amiga RTL development team.
+
+    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.
+
+ **********************************************************************}
+
+{
+   This includefile sets the define use_amiga_smartlink.
+   
+   This way I can be sure that all units that reads
+   this includefile is compiled with smartlink.
+
+   If you don't want smartlink just put a space before 
+   $define use_amiga_smartlink.
+
+   11 Jan 2003.
+
+   [email protected]
+
+}
+
+{$ifndef use_amiga_smartlink}
+   {$define use_amiga_smartlink}
+{$endif}

+ 45 - 0
packages/extra/amunits/inc/useautoopenlib.inc

@@ -0,0 +1,45 @@
+
+{  useautoopenlib.inc }
+
+{
+    This file is part of the Free Pascal run time library.
+
+    A file in Amiga system run time library.
+    Copyright (c) 2003 by Nils Sjoholm
+    member of the Amiga RTL development team.
+
+    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.
+
+ **********************************************************************}
+
+{
+   This includefile sets the define use_auto_openlib.
+   
+   It is set as standard and it means that all units 
+   you use in your program will open the library itself.
+   You don't have to worry about that.
+
+   If you don't like the idea of autoopening of libraries
+   or if you want to save on memoryuse cause some library
+   will get opened and never used then just put a space 
+   before $define use_auto_openlib.
+   
+   Be aware of that you have to open the library yourself.
+   
+   You don't have to open exec, amigados, utility and
+   intuition they are opened by default.
+
+   11 Jan 2003.
+
+   [email protected]
+
+}
+
+{$ifndef use_auto_openlib}
+   {$define use_auto_openlib}
+{$endif}

+ 44 - 0
packages/extra/amunits/otherlibs/amarquee/examples/amarqueetest.pas

@@ -0,0 +1,44 @@
+Program amarqueetest;
+
+{FPC Pascal test program that uses amarquee.library.  Doesn't do much...}
+{just connects and sets a variable, then disconnects.}
+{
+   Translated from PCQ pascal to FPC Pascal
+   25 Aug 2000.
+
+   Update for fpc 1.0.7
+   30 Nov 2002.
+
+   [email protected]
+}
+
+uses amarquee, utility;
+
+Var
+  session : pQSession;
+  setOpVal : longint;
+  freeSessionVal : longint;
+const
+  errid : longint = 0;
+begin
+
+
+    {Connect to localhost}
+    session := QNewSessionTags('localhost', 2957, 'pascal test',[QSESSION_ERRORCODEPTR,
+                                                                @errid,TAG_DONE]);
+    if session = nil then begin
+      writeln('Could not create connection to localhost/2957');
+      writeln('the error was ',QErrorName(errid));
+      halt(20);
+      end;
+
+    {Set a variable}
+    setOpVal := QSetOp(session, 'testVal',pchar('just a test'#0), 12);
+    if setOpVal = 0 then begin
+      writeln('Warning, QSetOp failed.');
+      end;
+        
+    {Close the connection}
+    freeSessionVal := QFreeSession(session);
+    
+end.

+ 1102 - 0
packages/extra/amunits/otherlibs/amarquee/units/amarquee.pas

@@ -0,0 +1,1102 @@
+{
+    This file is part of the Free Pascal run time library.
+
+    A file in Amiga system run time library.
+    Copyright (c) 1998-2000 by Nils Sjoholm
+    member of the Amiga RTL development team.
+
+    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.
+
+ **********************************************************************}
+
+{
+  History:
+  
+  First translation of AMarquee.h to FPC pascal.
+  No testing has been done so there could be bugs
+  in here. If you find any bugs please let me know.
+  25 Aug 2000.
+
+  Added functions and procedures with array of const.
+  For use with fpc 1.0.7
+  30 Nov 2002.
+  
+  Added the defines use_amiga_smartlink and
+  use_auto_openlib.
+  12 Jan 2003.
+  
+  [email protected]
+
+}
+
+{$mode objfpc}
+{$I useamigasmartlink.inc}
+{$ifdef use_amiga_smartlink}
+    {$smartlink on}
+{$endif use_amiga_smartlink}
+unit amarquee;
+
+
+interface
+
+
+uses exec, utility;
+
+
+
+  { This library contains definitions and structures necessary to use amarquee.library.  }
+  { Different error types that can be returned to the client in QMessages  }
+  { Everything is okay  }
+
+  const
+     AMARQUEENAME : PChar = 'amarquee.library';
+
+     QERROR_NO_ERROR = 0;
+  { Don't know what the error was.  }
+     QERROR_UNKNOWN = -(1);
+  { Keystring could not be parsed or "dir" does not exist  }
+     QERROR_MALFORMED_KEY = -(2);
+  { Server did not have enough mem available to complete request  }
+     QERROR_NO_SERVER_MEM = -(3);
+  { The connection to the server went south  }
+     QERROR_NO_CONNECTION = -(4);
+  { You're not allowed to do that!  }
+     QERROR_UNPRIVILEGED = -(5);
+  { Feature you requested does not exist yet  }
+     QERROR_UNIMPLEMENTED = -(6);
+  { Your computer didn't have enough memory available to complete an action  }
+     QERROR_NO_CLIENT_MEM = -(7);
+  { This message is a "wall" text message from a server admin  }
+     QERROR_SYS_MESSAGE = -(8);
+  { This message is a "send done" notification from your client TCP thread (new for v47)  }
+     QERROR_SEND_DONE = -(9);
+  { These error types may be returned by QFreeSession() or set to the error code
+  variable (set with the QSESSION_ERRORCODEPTR tag), after a QSession
+  allocation attempt fails.  }
+  { TCP stack wasn't running  }
+     QERROR_NO_TCP_STACK = -(20);
+  { Hostname lookup of server failed  }
+     QERROR_HOSTNAME_LOOKUP = -(21);
+  { TCP thread got a control-C  }
+     QERROR_ABORTED = -(22);
+  { No AMarquee server at requested host/port  }
+     QERROR_NO_SERVER = -(23);
+  { The program wasn't launched by inetd  }
+     QERROR_NO_INETD = -(24);
+  { The server wouldn't accept our connection  }
+     QERROR_ACCESS_DENIED = -(25);
+  { The client is out of memory  }
+     QERROR_NO_MEMORY = -(26);
+  { No server at requested host/port  }
+     QERROR_NO_TCPSERVER = -(27);
+  { Flags to use with QGo()  }
+  { Request notification via sync packet when all has settled on the server side  }
+     QGOF_SYNC = 1 shl 0;
+  { Request notification via QERROR_SEND_DONE message when the TCP thread has finished sending this transaction (new for v47)  }
+     QGOF_NOTIFY = 1 shl 1;
+  { Flags representing special privileges; used with QRequestPrivileges(), etc  }
+  { license to kill!  }
+     QPRIV_KILLCLIENTS = 1 shl 0;
+  { Ability to set env vars, etc, on the server  }
+     QPRIV_ADMIN = 1 shl 1;
+  { Ability to receive special sysadmin messages  }
+     QPRIV_GETSYSMESSAGES = 1 shl 2;
+  { Ability to send special sysadmin messages  }
+     QPRIV_SENDSYSMESSAGES = 1 shl 3;
+  { all possible QPRIV_  bits  }
+     QPRIV_ALL = $0F;
+  { Wait() on this for QMessages!  }
+  {                                                                   }
+  { Invisible, private info is here... don't trust sizeof(QSession)!  }
+  {                                                                   }
+
+  type
+     PQSession = ^TQSession;
+     TQSession = record
+          qMsgPort : PMsgPort;
+       end;
+
+  { All events from AMarquee come in this package!  }
+  { Don't directly use the contents of qm_Msg!  }
+  { Message ID # of transaction related to this opCode, or -1 if no ID is applicable.  }
+  { One of the QERROR_  codes defined in AMarquee headers.  }
+  { Pathname of a node, or NULL if not applicable.  }
+  { Pointer to beginning of data buffer, or NULL if not applicable.  }
+  { Length of qm_Data buffer, or 0 if not applicable.  }
+  { Length of the data buffer stored on the AMarquee server.  }
+  { Line # of the server source code that generated the error.  Useful for debugging.  }
+  { Private info used by FreeQMessage()  }
+  { Added for v48; more private info used by FreeQMessage()  }
+  { Added for v50. The session this message comes from. Necessary with shared msgports   }
+     PQMessage = ^TQMessage;
+     TQMessage = record
+          qm_Msg : tMessage;
+          qm_ID : LONG;
+          qm_Status : longint;
+          qm_Path : Pchar;
+          qm_Data : pointer;
+          qm_DataLen : ULONG;
+          qm_ActualLen : ULONG;
+          qm_ErrorLine : ULONG;
+          qm_Private : pointer;
+          qm_Private2 : pointer;
+          qm_Session : PQSession;
+       end;
+
+  { The theoretical maximum number of bytes your server may allocate.  }
+  { The number of bytes currently allocated by your server.  }
+  { The number of bytes that may actually be allocated by your server.  }
+  { Bit-chord of QPRIV_  bits, showing what special privs you have.  }
+  { Bit-chord of QPRIV_  bits, showing what special privs you could get if you asked.  }
+     PQRunInfo = ^TQRunInfo;
+     TQRunInfo = record
+          qr_Allowed : LONG;
+          qr_Alloced : LONG;
+          qr_Avail : LONG;
+          qr_CurrentPrivs : ULONG;
+          qr_PossiblePrivs : ULONG;
+       end;
+
+  { Used internally  }
+  { the message port to listen on  }
+     PQSharedMessagePort = ^TQSharedMessagePort;
+     TQSharedMessagePort = record
+          qs_private : tSignalSemaphore;
+          qs_mp : PMsgPort;
+       end;
+
+  { the QRAWSESSION_PROTOCOLSTOPHOOK Hook function receive a pointer to the Hook in A0, the QSession
+  pointer in A2 and a pointer to a QProtocolStopMarkerMessage in A1. Return the length of the buffer
+  to send to the client. Return a length of 0 if not enough data is present. With this function
+  it's easy to make sure that no structs or other datatypes get stripped.  }
+     PQProtocolStopMarkerMessage = ^TQProtocolStopMarkerMessage;
+     TQProtocolStopMarkerMessage = record
+          buffer : STRPTR;
+          length : ULONG;
+          userdata : ULONG;
+          id : LONG;
+       end;
+
+  { Tags to use with QNewSocketSession(Async)  }
+  { (ULONG maxBufSize) The maximum buffer size to use (same as QSetMaxRawBufSize())  }
+
+  const
+     QRAWSESSION_MAXBUFFERSIZE = $a0000001;
+  { (struct Hook  stopmarkerfunc) A hook with the function which sets the stop marker for a block of data  }
+     QRAWSESSION_PROTOCOLSTOPHOOK = $a0000002;
+  { (BOOL b) default TRUE. Shall the last data before the connection is broken be sent to the client even though the PROTOCOLSTOPHOOK hook specify it shouldn't ? }
+     QRAWSESSION_RECEIVE_EXCEEDING_DATA = $a0000003;
+  { (ULONG u) The initial value of the userdata field in struct QProtocolStopMarkerMessage  }
+     QRAWSESSION_PROTOCOLSTOPHOOK_USERDATA = $a0000004;
+  { Tags to use with QNew Session(Async) and QNewSocket Session(Async)  }
+  { (LONG  errorCode) A pointer to the variable that will hold the error code  }
+     QSESSION_ERRORCODEPTR = $b0000001;
+  { (struct QSharedMessagePort  mp) A shared message port created with QCreateSharedMessagePort()  }
+     QSESSION_SHAREDMSGPORT = $b0000002;
+
+VAR AMarqueeBase : pLibrary;
+
+FUNCTION QFreeSession(session : pQSession) : LONGINT;
+FUNCTION QDebugOp(session : pQSession; string_ : pCHar) : LONGINT;
+FUNCTION QGetOp(session : pQSession; path : pCHar; maxBytes : LONGINT) : LONGINT;
+FUNCTION QDeleteOp(session : pQSession; path : pCHar) : LONGINT;
+FUNCTION QRenameOp(session : pQSession; path : pCHar; label_ : pCHar) : LONGINT;
+FUNCTION QSubscribeOp(session : pQSession; path : pCHar; maxBytes : LONGINT) : LONGINT;
+FUNCTION QSetOp(session : pQSession; path : pCHar; buf : POINTER; len : ULONG) : LONGINT;
+FUNCTION QClearSubscriptionsOp(session : pQSession; which : LONGINT) : LONGINT;
+FUNCTION QPingOp(session : pQSession) : LONGINT;
+FUNCTION QInfoOp(session : pQSession) : LONGINT;
+FUNCTION QSetAccessOp(session : pQSession; hosts : pCHar) : LONGINT;
+PROCEDURE FreeQMessage(session : pQSession; qmsg : pQMessage);
+FUNCTION QGo(session : pQSession; sync : ULONG) : LONGINT;
+FUNCTION QStreamOp(session : pQSession; path : pCHar; buf : POINTER; len : ULONG) : LONGINT;
+FUNCTION QSetMessageAccessOp(session : pQSession; access : pCHar; maxbytes : LONGINT) : LONGINT;
+FUNCTION QMessageOp(session : pQSession; hosts : pCHar; buffer : POINTER; len : ULONG) : LONGINT;
+FUNCTION QNumQueuedPackets(session : pQSession) : ULONG;
+FUNCTION QNumQueuedBytes(session : pQSession) : ULONG;
+FUNCTION QErrorName(session : LONGINT) : pCHar;
+FUNCTION QRequestPrivilegesOp(session : pQSession; privBits : ULONG) : LONGINT;
+FUNCTION QReleasePrivilegesOp(session : pQSession; privBits : ULONG) : LONGINT;
+FUNCTION QKillClientsOp(session : pQSession; hosts : pCHar) : LONGINT;
+FUNCTION QSetParameterOp(session : pQSession; paramName : pCHar; newValue : pCHar) : LONGINT;
+FUNCTION QGetParameterOp(session : pQSession; paramName : pCHar) : LONGINT;
+FUNCTION QSysMessageOp(session : pQSession; hosts : pCHar; message : pCHar) : LONGINT;
+FUNCTION QGetAndSubscribeOp(session : pQSession; path : pCHar; maxBytes : LONGINT) : LONGINT;
+FUNCTION QDetachSession(session : pQSession; flags : ULONG) : BOOLEAN;
+FUNCTION QReattachSession(session : pQSession; flags : ULONG) : BOOLEAN;
+FUNCTION QNewSocketSession(host : pCHar; port : LONGINT; tags : pTagItem) : pQSession;
+FUNCTION QSendRawOp(session : pQSession; buf : POINTER; len : ULONG) : LONGINT;
+FUNCTION QNewSocketSessionAsync(host : pCHar; port : LONGINT; tags : pTagItem) : pQSession;
+FUNCTION QNewSocketServerSession( port : pLONGINT; tags : pTagItem) : pQSession;
+FUNCTION QSetKeyAccessOp(session : pQSession; path : pCHar; hosts : pCHar) : LONGINT;
+FUNCTION QGetHostName(session : pQSession) : pCHar;
+FUNCTION QGetProgName(session : pQSession) : pCHar;
+PROCEDURE QSetMaxRawBufSize(session : pQSession; maxBufSize : ULONG);
+FUNCTION QNewSession(host : pCHar; port : LONGINT; name : pCHar; taglist : pTagItem) : pQSession;
+FUNCTION QNewSessionAsync(host : pCHar; port : LONGINT; name : pCHar; taglist : pTagItem) : pQSession;
+FUNCTION QNewHostSession(hostnames : pCHar; port : pLONGINT; names : pCHar; taglist : pTagItem) : pQSession;
+FUNCTION QNewServerSession(hostNames : pCHar; progNames : pCHar; taglist : pTagItem) : pQSession;
+FUNCTION QCreateSharedMessagePort : pQSharedMessagePort;
+PROCEDURE QDeleteSharedMessagePort(mp : pQSharedMessagePort);
+FUNCTION QGetLocalIP(session : pQSession) : pCHAR;
+
+{
+     This is functions and procedures with array of const.
+     For use with fpc 1.0 and above.
+
+}
+FUNCTION QNewSocketSessiontags(host : pCHar; port : LONGINT; const argv : Array Of Const) : pQSession;
+FUNCTION QNewSocketSessionAsyncTags(host : pCHar; port : LONGINT; const argv : Array Of Const) : pQSession;
+FUNCTION QNewSocketServerSessionTags( port : pLONGINT; const argv : Array Of Const) : pQSession;
+FUNCTION QNewSessionTags(host : pCHar; port : LONGINT; name : pCHar; const argv : Array Of Const) : pQSession;
+FUNCTION QNewSessionAsyncTags(host : pCHar; port : LONGINT; name : pCHar; const argv : Array Of Const) : pQSession;
+FUNCTION QNewHostSessionTags(hostnames : pCHar; port : pLONGINT; names : pCHar; const argv : Array Of Const) : pQSession;
+FUNCTION QNewServerSessionTags(hostNames : pCHar; progNames : pCHar; const argv : Array Of Const) : pQSession;
+
+
+FUNCTION QDebugOp(session : pQSession; string_ : string) : LONGINT;
+FUNCTION QGetOp(session : pQSession; path : string; maxBytes : LONGINT) : LONGINT;
+FUNCTION QDeleteOp(session : pQSession; path : string) : LONGINT;
+FUNCTION QRenameOp(session : pQSession; path : string; label_ : string) : LONGINT;
+FUNCTION QSubscribeOp(session : pQSession; path : string; maxBytes : LONGINT) : LONGINT;
+FUNCTION QSetOp(session : pQSession; path : string; buf : POINTER; len : ULONG) : LONGINT;
+FUNCTION QSetAccessOp(session : pQSession; hosts : string) : LONGINT;
+FUNCTION QStreamOp(session : pQSession; path : string; buf : POINTER; len : ULONG) : LONGINT;
+FUNCTION QSetMessageAccessOp(session : pQSession; access : string; maxbytes : LONGINT) : LONGINT;
+FUNCTION QMessageOp(session : pQSession; hosts : string; buffer : POINTER; len : ULONG) : LONGINT;
+FUNCTION QKillClientsOp(session : pQSession; hosts : string) : LONGINT;
+FUNCTION QSetParameterOp(session : pQSession; paramName : string; newValue : string) : LONGINT;
+FUNCTION QGetParameterOp(session : pQSession; paramName : string) : LONGINT;
+FUNCTION QSysMessageOp(session : pQSession; hosts : string; message : string) : LONGINT;
+FUNCTION QGetAndSubscribeOp(session : pQSession; path : string; maxBytes : LONGINT) : LONGINT;
+FUNCTION QNewSocketSession(host : string; port : LONGINT; tags : pTagItem) : pQSession;
+FUNCTION QNewSocketSessionAsync(host : string; port : LONGINT; tags : pTagItem) : pQSession;
+FUNCTION QSetKeyAccessOp(session : pQSession; path : string; hosts : string) : LONGINT;
+FUNCTION QNewSession(host : string; port : LONGINT; name : string; taglist : pTagItem) : pQSession;
+FUNCTION QNewSessionAsync(host : string; port : LONGINT; name : string; taglist : pTagItem) : pQSession;
+FUNCTION QNewHostSession(hostnames : string; port : pLONGINT; names : string; taglist : pTagItem) : pQSession;
+FUNCTION QNewServerSession(hostNames : string; progNames : string; taglist : pTagItem) : pQSession;
+
+{
+     This is functions and procedures with array of const.
+     For use with fpc 1.0 and above.
+}
+
+FUNCTION QNewSocketSessionTags(host : string; port : LONGINT; const argv : Array Of Const) : pQSession;
+FUNCTION QNewSocketSessionAsyncTags(host : string; port : LONGINT; const argv : Array Of Const) : pQSession;
+FUNCTION QNewSessionTags(host : string; port : LONGINT; name : string; const argv : Array Of Const) : pQSession;
+FUNCTION QNewSessionAsyncTags(host : string; port : LONGINT; name : string; const argv : Array Of Const) : pQSession;
+FUNCTION QNewHostSessionTags(hostnames : string; port : pLONGINT; names : string; const argv : Array Of Const) : pQSession;
+FUNCTION QNewServerSessionTags(hostNames : string; progNames : string; const argv : Array Of Const) : pQSession;
+
+
+IMPLEMENTATION
+
+uses msgbox ,pastoc, tagsarray;
+
+FUNCTION QFreeSession(session : pQSession) : LONGINT;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	session,A0
+	MOVEA.L	AMarqueeBase,A6
+	JSR	-036(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+FUNCTION QDebugOp(session : pQSession; string_ : pCHar) : LONGINT;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	session,A0
+	MOVEA.L	string_,A1
+	MOVEA.L	AMarqueeBase,A6
+	JSR	-042(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+FUNCTION QGetOp(session : pQSession; path : pCHar; maxBytes : LONGINT) : LONGINT;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	session,A0
+	MOVEA.L	path,A1
+	MOVE.L	maxBytes,D0
+	MOVEA.L	AMarqueeBase,A6
+	JSR	-048(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+FUNCTION QDeleteOp(session : pQSession; path : pCHar) : LONGINT;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	session,A0
+	MOVEA.L	path,A1
+	MOVEA.L	AMarqueeBase,A6
+	JSR	-054(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+FUNCTION QRenameOp(session : pQSession; path : pCHar; label_ : pCHar) : LONGINT;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	session,A0
+	MOVEA.L	path,A1
+	MOVE.L	label_,D0
+	MOVEA.L	AMarqueeBase,A6
+	JSR	-060(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+FUNCTION QSubscribeOp(session : pQSession; path : pCHar; maxBytes : LONGINT) : LONGINT;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	session,A0
+	MOVEA.L	path,A1
+	MOVE.L	maxBytes,D0
+	MOVEA.L	AMarqueeBase,A6
+	JSR	-066(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+FUNCTION QSetOp(session : pQSession; path : pCHar; buf : POINTER; len : ULONG) : LONGINT;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	session,A0
+	MOVEA.L	path,A1
+	MOVE.L	buf,D0
+	MOVE.L	len,D1
+	MOVEA.L	AMarqueeBase,A6
+	JSR	-072(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+FUNCTION QClearSubscriptionsOp(session : pQSession; which : LONGINT) : LONGINT;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	session,A0
+	MOVE.L	which,D0
+	MOVEA.L	AMarqueeBase,A6
+	JSR	-078(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+FUNCTION QPingOp(session : pQSession) : LONGINT;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	session,A0
+	MOVEA.L	AMarqueeBase,A6
+	JSR	-084(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+FUNCTION QInfoOp(session : pQSession) : LONGINT;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	session,A0
+	MOVEA.L	AMarqueeBase,A6
+	JSR	-090(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+FUNCTION QSetAccessOp(session : pQSession; hosts : pCHar) : LONGINT;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	session,A0
+	MOVEA.L	hosts,A1
+	MOVEA.L	AMarqueeBase,A6
+	JSR	-096(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+PROCEDURE FreeQMessage(session : pQSession; qmsg : pQMessage);
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	session,A0
+	MOVEA.L	qmsg,A1
+	MOVEA.L	AMarqueeBase,A6
+	JSR	-102(A6)
+	MOVEA.L	(A7)+,A6
+  END;
+END;
+
+FUNCTION QGo(session : pQSession; sync : ULONG) : LONGINT;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	session,A0
+	MOVE.L	sync,D0
+	MOVEA.L	AMarqueeBase,A6
+	JSR	-108(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+FUNCTION QStreamOp(session : pQSession; path : pCHar; buf : POINTER; len : ULONG) : LONGINT;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	session,A0
+	MOVEA.L	path,A1
+	MOVE.L	buf,D0
+	MOVE.L	len,D1
+	MOVEA.L	AMarqueeBase,A6
+	JSR	-120(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+FUNCTION QSetMessageAccessOp(session : pQSession; access : pCHar; maxbytes : LONGINT) : LONGINT;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	session,A0
+	MOVEA.L	access,A1
+	MOVE.L	maxbytes,D0
+	MOVEA.L	AMarqueeBase,A6
+	JSR	-132(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+FUNCTION QMessageOp(session : pQSession; hosts : pCHar; buffer : POINTER; len : ULONG) : LONGINT;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	session,A0
+	MOVEA.L	hosts,A1
+	MOVE.L	buffer,D0
+	MOVE.L	len,D1
+	MOVEA.L	AMarqueeBase,A6
+	JSR	-138(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+FUNCTION QNumQueuedPackets(session : pQSession) : ULONG;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	session,A0
+	MOVEA.L	AMarqueeBase,A6
+	JSR	-150(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+FUNCTION QNumQueuedBytes(session : pQSession) : ULONG;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	session,A0
+	MOVEA.L	AMarqueeBase,A6
+	JSR	-156(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+FUNCTION QErrorName(session : LONGINT) : pCHar;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVE.L	session,D0
+	MOVEA.L	AMarqueeBase,A6
+	JSR	-162(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+FUNCTION QRequestPrivilegesOp(session : pQSession; privBits : ULONG) : LONGINT;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	session,A0
+	MOVE.L	privBits,D0
+	MOVEA.L	AMarqueeBase,A6
+	JSR	-168(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+FUNCTION QReleasePrivilegesOp(session : pQSession; privBits : ULONG) : LONGINT;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	session,A0
+	MOVE.L	privBits,D0
+	MOVEA.L	AMarqueeBase,A6
+	JSR	-174(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+FUNCTION QKillClientsOp(session : pQSession; hosts : pCHar) : LONGINT;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	session,A0
+	MOVEA.L	hosts,A1
+	MOVEA.L	AMarqueeBase,A6
+	JSR	-180(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+FUNCTION QSetParameterOp(session : pQSession; paramName : pCHar; newValue : pCHar) : LONGINT;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	session,A0
+	MOVEA.L	paramName,A1
+	MOVE.L	newValue,D0
+	MOVEA.L	AMarqueeBase,A6
+	JSR	-186(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+FUNCTION QGetParameterOp(session : pQSession; paramName : pCHar) : LONGINT;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	session,A0
+	MOVEA.L	paramName,A1
+	MOVEA.L	AMarqueeBase,A6
+	JSR	-192(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+FUNCTION QSysMessageOp(session : pQSession; hosts : pCHar; message : pCHar) : LONGINT;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	session,A0
+	MOVEA.L	hosts,A1
+	MOVE.L	message,D0
+	MOVEA.L	AMarqueeBase,A6
+	JSR	-198(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+FUNCTION QGetAndSubscribeOp(session : pQSession; path : pCHar; maxBytes : LONGINT) : LONGINT;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	session,A0
+	MOVEA.L	path,A1
+	MOVE.L	maxBytes,D0
+	MOVEA.L	AMarqueeBase,A6
+	JSR	-210(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+FUNCTION QDetachSession(session : pQSession; flags : ULONG) : BOOLEAN;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	session,A0
+	MOVE.L	flags,D0
+	MOVEA.L	AMarqueeBase,A6
+	JSR	-216(A6)
+	MOVEA.L	(A7)+,A6
+	TST.W	D0
+	BEQ.B	@end
+	MOVEQ	#1,D0
+  @end:	MOVE.B	D0,@RESULT
+  END;
+END;
+
+FUNCTION QReattachSession(session : pQSession; flags : ULONG) : BOOLEAN;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	session,A0
+	MOVE.L	flags,D0
+	MOVEA.L	AMarqueeBase,A6
+	JSR	-222(A6)
+	MOVEA.L	(A7)+,A6
+	TST.W	D0
+	BEQ.B	@end
+	MOVEQ	#1,D0
+  @end:	MOVE.B	D0,@RESULT
+  END;
+END;
+
+FUNCTION QNewSocketSession(host : pCHar; port : LONGINT; tags : pTagItem) : pQSession;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	host,A0
+	MOVE.L	port,D0
+	MOVEA.L	tags,A1
+	MOVEA.L	AMarqueeBase,A6
+	JSR	-228(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+FUNCTION QSendRawOp(session : pQSession; buf : POINTER; len : ULONG) : LONGINT;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	session,A0
+	MOVEA.L	buf,A1
+	MOVE.L	len,D0
+	MOVEA.L	AMarqueeBase,A6
+	JSR	-234(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+FUNCTION QNewSocketSessionAsync(host : pCHar; port : LONGINT; tags : pTagItem) : pQSession;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	host,A0
+	MOVE.L	port,D0
+	MOVEA.L	tags,A1
+	MOVEA.L	AMarqueeBase,A6
+	JSR	-240(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+FUNCTION QNewSocketServerSession(port : pLONGINT; tags : pTagItem) : pQSession;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	port,A0
+	MOVEA.L	tags,A1
+	MOVEA.L	AMarqueeBase,A6
+	JSR	-246(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+FUNCTION QSetKeyAccessOp(session : pQSession; path : pCHar; hosts : pCHar) : LONGINT;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	session,A0
+	MOVEA.L	path,A1
+	MOVE.L	hosts,D0
+	MOVEA.L	AMarqueeBase,A6
+	JSR	-252(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+FUNCTION QGetHostName(session : pQSession) : pCHar;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	session,A0
+	MOVEA.L	AMarqueeBase,A6
+	JSR	-258(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+FUNCTION QGetProgName(session : pQSession) : pCHar;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	session,A0
+	MOVEA.L	AMarqueeBase,A6
+	JSR	-264(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+PROCEDURE QSetMaxRawBufSize(session : pQSession; maxBufSize : ULONG);
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	session,A0
+	MOVE.L	maxBufSize,D0
+	MOVEA.L	AMarqueeBase,A6
+	JSR	-270(A6)
+	MOVEA.L	(A7)+,A6
+  END;
+END;
+
+FUNCTION QNewSession(host : pCHar; port : LONGINT; name : pCHar; taglist : pTagItem) : pQSession;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	host,A0
+	MOVE.L	port,D0
+	MOVEA.L	name,A1
+	MOVE.L	taglist,D1
+	MOVEA.L	AMarqueeBase,A6
+	JSR	-276(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+FUNCTION QNewSessionAsync(host : pCHar; port : LONGINT; name : pCHar; taglist : pTagItem) : pQSession;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	host,A0
+	MOVE.L	port,D0
+	MOVEA.L	name,A1
+	MOVE.L	taglist,D1
+	MOVEA.L	AMarqueeBase,A6
+	JSR	-282(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+FUNCTION QNewHostSession(hostnames : pCHar; port : pLONGINT; names : pCHar; taglist : pTagItem) : pQSession;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	hostnames,A0
+	MOVEA.L	port,A1
+	MOVE.L	names,D0
+	MOVE.L	taglist,D1
+	MOVEA.L	AMarqueeBase,A6
+	JSR	-288(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+FUNCTION QNewServerSession(hostNames : pCHar; progNames : pCHar; taglist : pTagItem) : pQSession;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	hostNames,A0
+	MOVEA.L	progNames,A1
+	MOVE.L	taglist,D0
+	MOVEA.L	AMarqueeBase,A6
+	JSR	-294(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+FUNCTION QCreateSharedMessagePort : pQSharedMessagePort;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	AMarqueeBase,A6
+	JSR	-300(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+PROCEDURE QDeleteSharedMessagePort(mp : pQSharedMessagePort);
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	mp,A0
+	MOVEA.L	AMarqueeBase,A6
+	JSR	-306(A6)
+	MOVEA.L	(A7)+,A6
+  END;
+END;
+
+
+FUNCTION QGetLocalIP(session : pQSession) : pCHAR;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	session,A0
+	MOVEA.L	AMarqueeBase,A6
+	JSR	-312(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+
+FUNCTION QDebugOp(session : pQSession; string_ : string) : LONGINT;
+begin
+    QDebugOp := QDebugOp(session,pas2c(string_));
+end;
+
+FUNCTION QGetOp(session : pQSession; path : string; maxBytes : LONGINT) : LONGINT;
+begin
+    QGetOp := QGetOp(session,pas2c(path),maxBytes);
+end;
+
+FUNCTION QDeleteOp(session : pQSession; path : string) : LONGINT;
+begin
+    QDeleteOp := QDeleteOp(session,pas2c(path));
+end;
+
+FUNCTION QRenameOp(session : pQSession; path : string; label_ : string) : LONGINT;
+begin
+    QRenameOp := QRenameOp(session,pas2c(path),pas2c(label_));
+end;
+
+FUNCTION QSubscribeOp(session : pQSession; path : string; maxBytes : LONGINT) : LONGINT;
+begin
+    QSubscribeOp := QSubscribeOp(session,pas2c(path),maxBytes);
+end;
+
+FUNCTION QSetOp(session : pQSession; path : string; buf : POINTER; len : ULONG) : LONGINT;
+begin
+    QSetOp := QSetOp(session,pas2c(path),buf,len);
+end;
+
+FUNCTION QSetAccessOp(session : pQSession; hosts : string) : LONGINT;
+begin
+    QSetAccessOp := QSetAccessOp(session,pas2c(hosts));
+end;
+
+FUNCTION QStreamOp(session : pQSession; path : string; buf : POINTER; len : ULONG) : LONGINT;
+begin
+    QStreamOp := QStreamOp(session,pas2c(path),buf,len);
+end;
+
+FUNCTION QSetMessageAccessOp(session : pQSession; access : string; maxbytes : LONGINT) : LONGINT;
+begin
+    QSetMessageAccessOp := QSetMessageAccessOp(session,pas2c(access),maxBytes);
+end;
+
+FUNCTION QMessageOp(session : pQSession; hosts : string; buffer : POINTER; len : ULONG) : LONGINT;
+begin
+    QMessageOp := QMessageOp(session,pas2c(hosts),buffer,len);
+end;
+
+FUNCTION QKillClientsOp(session : pQSession; hosts : string) : LONGINT;
+begin
+    QKillClientsOp := QKillClientsOp(session,pas2c(hosts));
+end;
+
+FUNCTION QSetParameterOp(session : pQSession; paramName : string; newValue : string) : LONGINT;
+begin
+    QSetParameterOp := QSetParameterOp(session,pas2c(paramName),pas2c(newValue));
+end;
+
+FUNCTION QGetParameterOp(session : pQSession; paramName : string) : LONGINT;
+begin
+    QGetParameterOp := QGetParameterOp(session,pas2c(paramName));
+end;
+
+FUNCTION QSysMessageOp(session : pQSession; hosts : string; message : string) : LONGINT;
+begin
+    QSysMessageOp := QSysMessageOp(session,pas2c(hosts),pas2c(message));
+end;
+
+FUNCTION QGetAndSubscribeOp(session : pQSession; path : string; maxBytes : LONGINT) : LONGINT;
+begin
+    QGetAndSubscribeOp := QGetAndSubscribeOp(session,pas2c(path),maxBytes);
+end;
+
+FUNCTION QNewSocketSession(host : string; port : LONGINT; tags : pTagItem) : pQSession;
+begin
+    QNewSocketSession := QNewSocketSession(pas2c(host),port,tags);
+end;
+
+FUNCTION QNewSocketSessionAsync(host : string; port : LONGINT; tags : pTagItem) : pQSession;
+begin
+    QNewSocketSessionAsync := QNewSocketSessionAsync(pas2c(host),port,tags);
+end;
+
+FUNCTION QSetKeyAccessOp(session : pQSession; path : string; hosts : string) : LONGINT;
+begin
+    QSetKeyAccessOp := QSetKeyAccessOp(session,pas2c(path),pas2c(hosts));
+end;
+
+FUNCTION QNewSession(host : string; port : LONGINT; name : string; taglist : pTagItem) : pQSession;
+begin
+    QNewSession := QNewSession(pas2c(host),port,pas2c(name),taglist);
+end;
+
+FUNCTION QNewSessionAsync(host : string; port : LONGINT; name : string; taglist : pTagItem) : pQSession;
+begin
+    QNewSessionAsync := QNewSessionAsync(pas2c(host),port,pas2c(name),taglist);
+end;
+
+FUNCTION QNewHostSession(hostnames : string; port : pLONGINT; names : string; taglist : pTagItem) : pQSession;
+begin
+    QNewHostSession := QNewHostSession(pas2c(hostnames),port,pas2c(names),taglist);
+end;
+
+FUNCTION QNewServerSession(hostNames : string; progNames : string; taglist : pTagItem) : pQSession;
+begin
+    QNewServerSession := QNewServerSession(pas2c(hostnames),pas2c(prognames),taglist);
+end;
+
+FUNCTION QNewSocketSessiontags(host : pCHar; port : LONGINT; const argv : Array Of Const) : pQSession;
+begin
+    QNewSocketSessiontags := QNewSocketSession(host,port,readintags(argv));
+end;
+
+FUNCTION QNewSocketSessionAsyncTags(host : pCHar; port : LONGINT; const argv : Array Of Const) : pQSession;
+begin
+    QNewSocketSessionAsyncTags := QNewSocketSessionAsync(host,port,readintags(argv));
+end;
+
+FUNCTION QNewSocketServerSessionTags( port : pLONGINT; const argv : Array Of Const) : pQSession;
+begin
+    QNewSocketServerSessionTags := QNewSocketServerSession(port,readintags(argv));
+end;
+
+FUNCTION QNewSessionTags(host : pCHar; port : LONGINT; name : pCHar; const argv : Array Of Const) : pQSession;
+begin
+    QNewSessionTags := QNewSession(host,port,name,readintags(argv));
+end;
+
+FUNCTION QNewSessionAsyncTags(host : pCHar; port : LONGINT; name : pCHar; const argv : Array Of Const) : pQSession;
+begin
+    QNewSessionAsyncTags := QNewSessionAsync(host,port,name,readintags(argv));
+end;
+
+FUNCTION QNewHostSessionTags(hostnames : pCHar; port : pLONGINT; names : pCHar; const argv : Array Of Const) : pQSession;
+begin
+    QNewHostSessionTags := QNewHostSession(hostnames,port,names,readintags(argv));
+end;
+
+FUNCTION QNewServerSessionTags(hostNames : pCHar; progNames : pCHar; const argv : Array Of Const) : pQSession;
+begin
+    QNewServerSessionTags := QNewServerSession(hostnames,prognames,readintags(argv));
+end;
+
+
+FUNCTION QNewSocketSessionTags(host : string; port : LONGINT; const argv : Array Of Const) : pQSession;
+begin
+    QNewSocketSessionTags := QNewSocketSession(host,port,readintags(argv));
+end;
+
+FUNCTION QNewSocketSessionAsyncTags(host : string; port : LONGINT; const argv : Array Of Const) : pQSession;
+begin
+    QNewSocketSessionAsyncTags := QNewSocketSessionAsync(host,port,readintags(argv));
+end;
+
+FUNCTION QNewSessionTags(host : string; port : LONGINT; name : string; const argv : Array Of Const) : pQSession;
+begin
+    QNewSessionTags := QNewSession(host,port,name,readintags(argv));
+end;
+
+FUNCTION QNewSessionAsyncTags(host : string; port : LONGINT; name : string; const argv : Array Of Const) : pQSession;
+begin
+    QNewSessionAsyncTags := QNewSessionAsync(host,port,name,readintags(argv));
+end;
+
+FUNCTION QNewHostSessionTags(hostnames : string; port : pLONGINT; names : string; const argv : Array Of Const) : pQSession;
+begin
+    QNewHostSessionTags := QNewHostSession(hostnames,port,names,readintags(argv));
+end;
+
+FUNCTION QNewServerSessionTags(hostNames : string; progNames : string; const argv : Array Of Const) : pQSession;
+begin
+    QNewServerSessionTags := QNewServerSession(hostnames,prognames,readintags(argv));
+end;
+
+
+{$I useautoopenlib.inc}
+{$ifdef use_auto_openlib}
+   {$Info Compiling autoopening of amarquee.library}
+var
+    amarquee_exit : pointer;
+
+const
+    VERSION : string[2] = '50';
+
+procedure CloseAmarqueeLibrary;
+begin
+    ExitProc := amarquee_exit;
+    if AmarqueeBase <> nil then begin
+        CloseLibrary(AmarqueeBase);
+        AmarqueeBase := nil;
+    end;
+end;
+
+begin
+    AmarqueeBase := nil;
+    AmarqueeBase := OpenLibrary(AmarqueeNAME,50);
+    if AmarqueeBase <> nil then begin
+       Amarquee_exit := ExitProc;
+       ExitProc := @CloseAmarqueeLibrary;
+    end else begin
+        MessageBox('FPC Pascal Error',
+                   'Can''t open Amarquee.library version ' +
+                   VERSION +
+                   chr(10) + 
+                   'Deallocating resources and closing down',
+                   'Oops');
+       halt(20);
+    end;
+{$else}
+   {$Warning No autoopening of amarquee.library compiled}
+   {$Info Make sure you open amarquee.library yourself}
+{$endif use_auto_openlib}
+
+END. (* UNIT AMARQUEE *)
+
+{
+  $Log$
+  Revision 1.1  2003-01-12 20:40:47  nils
+    * initial release
+
+}
+
+

+ 107 - 0
packages/extra/amunits/otherlibs/gtlayout/examples/gttest.pas

@@ -0,0 +1,107 @@
+program gttest;
+
+{
+
+    This is just a small test of gtlayout.library.
+    It's from gtlayout.doc.
+
+    No problems so far.
+    16 Jul 2000.
+
+    Added MessageBox for report.
+    31 Jul 2000.
+
+    Updated to use fpc 1.0.7
+    07 Jan 2003.
+    
+    [email protected]
+
+}
+
+uses intuition, exec, gadtools, utility, gtlayout, msgbox;
+
+const
+    ltrue : longint = 1;
+    lfalse : longint = 0;
+
+var
+    handle : pLayoutHandle;
+    win : pWindow;
+    msg : pIntuiMessage;
+    msgQuali : ulong;
+    msgclass : ulong;
+    msgcode : word;
+    msggadget : pGadget;
+    done : boolean;
+
+procedure CleanUp(why : string; rc : integer);
+begin
+    LT_DeleteHandle(handle);
+    if why <> '' then MessageBox('GTLayout Report',why,'OK');
+    halt(rc);
+end;
+
+begin
+    done := false;
+    handle := LT_CreateHandleTags(nil,[
+                    LAHN_AutoActivate, lfalse,
+                    TAG_DONE]);
+
+    if handle = nil then CleanUp('Could''t create a handle',20);
+
+    LT_New(handle,[LA_Type,VERTICAL_KIND,       { A vertical group. }
+                   LA_LabelText,'Main Group',
+                   TAG_DONE]);
+
+    LT_New(handle,[LA_Type,BUTTON_KIND,         { A plain button. }
+                   LA_LabelText,'A button',
+                   LA_ID,11,
+                   TAG_DONE]);
+
+    LT_New(handle,[LA_Type,XBAR_KIND,TAG_DONE]); { A separator bar. }
+
+    LT_New(handle,[LA_Type,BUTTON_KIND,          { A plain button. }
+                   LA_LabelText,'Another button',
+                   LA_ID,22,
+                   TAG_DONE]);
+
+    LT_New(handle,[LA_Type,CHECKBOX_KIND,LA_LabelText,'test',LA_ID,33,LA_BOOL,1,TAG_DONE]);
+
+    LT_New(handle,[La_Type,END_KIND,TAG_DONE]);  { This ends the current group. }
+
+    win := LT_Build(handle,[LAWN_Title,'Window title',
+                            LAWN_IDCMP, IDCMP_CLOSEWINDOW,
+                            WA_CloseGadget, ltrue,
+                            TAG_DONE]);
+
+    if win = nil then CleanUp('Can''t open the window',20);
+
+    repeat
+        msg := pIntuiMessage(WaitPort(win^.UserPort));
+        msg := GT_GetIMsg(win^.UserPort);
+        while msg <> nil do begin
+            msgclass := msg^.IClass;
+            msgcode := msg^.Code;
+            msgQuali := msg^.Qualifier;
+            msggadget := msg^.IAddress;
+            GT_ReplyIMsg(msg);
+            LT_HandleInput(handle,msgQuali,msgclass,msgcode,@msggadget);
+            case msgclass of
+                 IDCMP_CLOSEWINDOW : begin
+                                     writeln(LT_GetAttributesA(handle,33,nil));
+                                     done := true;
+                                     end;
+                 IDCMP_GADGETUP: begin
+                                 case msggadget^.GadgetId of
+                                      11 : writeln('First gadget');
+                                      22 : writeln('Second gadget');
+                                 end;
+                                 end;
+            end;
+            msg := GT_GetIMsg(win^.UserPort);
+         end;
+     until done;
+     CleanUp('all ok',0);
+end.
+
+

+ 1246 - 0
packages/extra/amunits/otherlibs/gtlayout/units/gtlayout.pas

@@ -0,0 +1,1246 @@
+{
+    This file is part of the Free Pascal run time library.
+
+    A file in Amiga system run time library.
+    Copyright (c) 2000-2003 by Nils Sjoholm
+    member of the Amiga RTL development team.
+
+    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.
+
+ **********************************************************************}
+
+{
+    History:
+
+    This is just a quick translation of gtlayout.h.
+    I have made a small testprogram and all is well.
+    16 Jul 2000.
+
+    Added MessageBox for error report.
+    31 Jul 2000.
+
+    Added functions and procedures with array of const.
+    For use with fpc 1.0.
+    06 Jan 2003.
+    
+    Added the defines use_amiga_smartlink and
+    use_auto_openlib.
+    12 Jan 2003.
+
+    [email protected]
+
+}
+{$mode objfpc}
+
+{$I useamigasmartlink.inc}
+{$ifdef use_amiga_smartlink}
+    {$smartlink on}
+{$endif use_amiga_smartlink}
+
+
+UNIT GTLAYOUT;
+
+
+INTERFACE
+
+USES Exec,intuition,utility, gadtools,graphics;
+
+
+
+  { Kinds of objects supported in addition to the normal GadTools kinds  }
+
+  const
+
+     GTLAYOUTNAME : PCHar = 'gtlayout.library';
+
+     HORIZONTAL_KIND = 45;
+     VERTICAL_KIND = 46;
+     END_KIND = 47;
+     FRAME_KIND = 48;
+     BOX_KIND = 49;
+     FRACTION_KIND = 50;
+     XBAR_KIND = 51;
+     YBAR_KIND = 52;
+     PASSWORD_KIND = 53;
+     GAUGE_KIND = 54;
+     TAPEDECK_KIND = 55;
+     LEVEL_KIND = 56;
+     BOOPSI_KIND = 57;
+     POPUP_KIND = 58;
+     TAB_KIND = 59;
+     BLANK_KIND = 60;
+     IMAGE_KIND = 61;
+ 
+  { Where to place a gadget label  }
+
+     PLACE_Left   = 0;
+     PLACE_Right  = 1;
+     PLACE_Above  = 2;
+     PLACE_In     = 3;
+     PLACE_Below  = 4;
+
+    { How to align text lines in BOX_KIND gadgets  }
+
+     ALIGNTEXT_Left      = 0;
+     ALIGNTEXT_Centered  = 1;
+     ALIGNTEXT_Right     = 2;
+     ALIGNTEXT_Pad       = 3;
+
+    { The button images available for TAPEDECK_KIND gadgets.  }
+
+    	TDBT_Backward   = 0;
+	TDBT_Forward    = 1;
+	TDBT_Previous   = 2;
+	TDBT_Next       = 3;
+	TDBT_Stop       = 4;
+	TDBT_Pause      = 5;
+	TDBT_Record     = 6;
+	TDBT_Rewind     = 7;
+	TDBT_Eject      = 8;
+	TDBT_Play       = 9;
+
+	TDBTLAST        = 10;
+
+    { The frame types for groups.  }
+        FRAMETYPE_None    = 0;
+        FRAMETYPE_Label   = 1;
+	FRAMETYPE_Tab     = 2;
+
+    { How to align the window opened by LT_Build() on the screen.  }
+       ALIGNF_Right = 1 shl 0;
+       ALIGNF_Left = 1 shl 1;
+       ALIGNF_Top = 1 shl 2;
+       ALIGNF_Bottom = 1 shl 3;
+       ALIGNF_ExtraRight = 1 shl 4;
+       ALIGNF_ExtraLeft = 1 shl 5;
+       ALIGNF_ExtraTop = 1 shl 6;
+       ALIGNF_ExtraBottom = 1 shl 7;
+
+{ Generic tags, applicable for several object types }
+     LA_Chars		= TAG_USER+2;
+     LA_LabelPlace		= TAG_USER+3;
+     LA_ExtraSpace		= TAG_USER+4;
+     LA_NoKey		= TAG_USER+30;
+     LA_HighLabel		= TAG_USER+31;
+     LA_LabelText		= TAG_USER+37;
+     LA_LabelID		= TAG_USER+38;
+     LA_ID			= TAG_USER+39;
+     LA_Type			= TAG_USER+40;
+     LA_PageSelector		= TAG_USER+79;
+     LA_LabelChars		= TAG_USER+107;
+     LA_DefaultSize		= TAG_USER+170;
+     LA_LayoutSpace		= TAG_USER+189;
+
+{ Storage type tags }
+     LA_BYTE			= TAG_USER+63;
+     LA_UBYTE		= TAG_USER+64;
+     LA_WORD			= TAG_USER+65;
+     LA_BOOL			= TAG_USER+65;
+     LA_UWORD		= TAG_USER+66;
+     LA_LONG			= TAG_USER+67;
+     LA_ULONG		= TAG_USER+68;
+     LA_STRPTR		= TAG_USER+69;
+
+{ for use with LT_GetAttributes() only }
+     LA_Left			= TAG_USER+16;
+     LA_Top			= TAG_USER+17;
+     LA_Width		= TAG_USER+18;
+     LA_Height		= TAG_USER+19;
+     LA_LabelLeft		= TAG_USER+114;
+     LA_LabelTop		= TAG_USER+115;
+
+{ BOOPSI_KIND }
+     LABO_TagCurrent		= TAG_USER+119;
+     LABO_TagTextAttr	= TAG_USER+120;
+     LABO_TagDrawInfo	= TAG_USER+121;
+     LABO_TagLink		= TAG_USER+129;
+     LABO_TagScreen		= TAG_USER+132;
+     LABO_Link		= TAG_USER+7;
+     LABO_ClassInstance	= TAG_USER+122;
+     LABO_ClassName		= TAG_USER+123;
+     LABO_ClassLibraryName	= TAG_USER+124;
+     LABO_ExactWidth		= TAG_USER+127;
+     LABO_ExactHeight	= TAG_USER+128;
+     LABO_RelFontHeight	= TAG_USER+131;
+     LABO_Object		= TAG_USER+133;
+     LABO_FullWidth		= TAG_USER+135;
+     LABO_FullHeight		= TAG_USER+136;
+     LABO_ActivateHook	= TAG_USER+141;
+
+{ BOX_KIND }
+     LABX_Labels		= TAG_USER+12;
+     LABX_Lines		= TAG_USER+13;
+     LABX_Chars		= TAG_USER+2;
+     LABX_Rows		= TAG_USER+1;
+     LABX_Index		= TAG_USER+14;
+     LABX_Text		= TAG_USER+15;
+     LABX_AlignText		= TAG_USER+27;
+     LABX_DrawBox		= TAG_USER+11;
+     LABX_FirstLabel		= TAG_USER+44;
+     LABX_LastLabel		= TAG_USER+45;
+     LABX_ReserveSpace	= TAG_USER+72;
+     LABX_LabelTable		= TAG_USER+98;
+     LABX_FirstLine		= TAG_USER+152;
+     LABX_LastLine		= TAG_USER+153;
+     LABX_LineTable		= TAG_USER+156;
+     LABX_Line		= TAG_USER+161;
+     LABX_LineID		= TAG_USER+162;
+     LABX_TextPen		= TAG_USER+172;
+     LABX_BackPen		= TAG_USER+173;
+     LABX_Spacing		= TAG_USER+180;
+
+{ BUTTON_KIND }
+     LABT_ReturnKey		= TAG_USER+34;
+     LABT_DefaultButton	= TAG_USER+34;
+     LABT_EscKey		= TAG_USER+56;
+     LABT_ExtraFat		= TAG_USER+29;
+     LABT_Lines		= TAG_USER+140;
+     LABT_FirstLine		= TAG_USER+44;
+     LABT_LastLine		= TAG_USER+45;
+     LABT_DefaultCorrection	= TAG_USER+145;
+     LABT_Smaller		= TAG_USER+147;
+
+{ CYCLE_KIND }
+     LACY_FirstLabel		= TAG_USER+44;
+     LACY_LastLabel		= TAG_USER+45;
+     LACY_LabelTable		= TAG_USER+98;
+     LACY_AutoPageID		= TAG_USER+103;
+     LACY_TabKey		= TAG_USER+118;
+
+{ FRACTION_KIND }
+     LAFR_IncrementerHook	= TAG_USER+85;
+
+{ FRAME_KIND }
+     LAFR_InnerWidth		= TAG_USER+9;
+     LAFR_InnerHeight	= TAG_USER+10;
+     LAFR_DrawBox		= TAG_USER+11;
+     LAFR_RefreshHook	= TAG_USER+117;
+     LAFR_GenerateEvents	= TAG_USER+155;
+     LAFR_ResizeX		= TAG_USER+109;
+     LAFR_ResizeY		= TAG_USER+110;
+
+{ GAUGE_KIND }
+     LAGA_Percent		= TAG_USER+36;
+     LAGA_InfoLength		= TAG_USER+70;
+     LAGA_InfoText		= TAG_USER+71;
+     LAGA_NoTicks		= TAG_USER+143;
+     LAGA_Discrete		= TAG_USER+144;
+     LAGA_Tenth		= TAG_USER+144;
+
+{ IMAGE_KIND }
+     LAIM_Image		= TAG_USER+181;
+     LAIM_BitMap		= TAG_USER+182;
+     LAIM_BitMapLeft		= TAG_USER+183;
+     LAIM_BitMapTop		= TAG_USER+184;
+     LAIM_BitMapWidth	= TAG_USER+185;
+     LAIM_BitMapHeight	= TAG_USER+186;
+     LAIM_BitMapMask		= TAG_USER+187;
+
+{ INTEGER_KIND }
+     LAIN_LastGadget		= TAG_USER+28;
+     LAIN_Min		= TAG_USER+23;
+     LAIN_Max		= TAG_USER+24;
+     LAIN_UseIncrementers	= TAG_USER+57;
+     LAIN_Incrementers	= TAG_USER+57;
+     LAIN_HistoryLines	= TAG_USER+59;
+     LAIN_HistoryHook	= TAG_USER+80;
+     LAIN_IncrementerHook	= TAG_USER+85;
+     LAIN_Activate		= TAG_USER+148;
+
+{ LISTVIEW_KIND }
+     LALV_ExtraLabels	= TAG_USER+26;
+     LALV_Labels		= TAG_USER+33;
+     LALV_CursorKey		= TAG_USER+35;
+     LALV_Columns		= TAG_USER+2;
+     LALV_Lines		= TAG_USER+1;
+     LALV_Link		= TAG_USER+7;
+     LALV_FirstLabel		= TAG_USER+44;
+     LALV_LastLabel		= TAG_USER+45;
+     LALV_MaxGrowX		= TAG_USER+77;
+     LALV_MaxGrowY		= TAG_USER+78;
+     LALV_LabelTable		= TAG_USER+98;
+     LALV_LockSize		= TAG_USER+106;
+     LALV_ResizeX		= TAG_USER+109;
+     LALV_ResizeY		= TAG_USER+110;
+     LALV_MinChars		= TAG_USER+111;
+     LALV_MinLines		= TAG_USER+112;
+     LALV_FlushLabelLeft	= TAG_USER+113;
+     LALV_TextAttr		= TAG_USER+138;
+     LALV_AutoPageID		= TAG_USER+103;
+     LALV_Selected		= TAG_USER+167;
+     LALV_AdjustForString	= TAG_USER+174;
+
+{ LEVEL_KIND }
+     LAVL_Min		= GTSL_Min;
+     LAVL_Max		= GTSL_Max;
+     LAVL_Level		= GTSL_Level;
+     LAVL_LevelFormat	= GTSL_LevelFormat;
+     LAVL_LevelPlace		= GTSL_LevelPlace;
+     LAVL_DispFunc		= GTSL_DispFunc;
+     LAVL_FullCheck		= TAG_USER+22;
+     LAVL_Freedom		= TAG_USER+177	{ (I)  New in V41 };
+     LAVL_Ticks		= TAG_USER+178	{ (I)  New in V41 };
+     LAVL_NumTicks		= TAG_USER+179	{ (IS) New in V41 };
+     LAVL_Lines		= TAG_USER+1;
+
+{ MX_KIND }
+     LAMX_FirstLabel		= TAG_USER+44;
+     LAMX_LastLabel		= TAG_USER+45;
+     LAMX_LabelTable		= TAG_USER+98;
+     LAMX_TabKey		= TAG_USER+118;
+     LAMX_AutoPageID		= TAG_USER+103;
+
+{ PALETTE_KIND }
+     LAPA_SmallPalette	= TAG_USER+32;
+     LAPA_Lines		= TAG_USER+1;
+     LAPA_UsePicker		= TAG_USER+137;
+     LAPA_Picker		= TAG_USER+137;
+
+{ PASSWORD_KIND }
+     LAPW_String             = GTST_String;
+     LAPW_LastGadget		= TAG_USER+28;
+     LAPW_HistoryLines	= TAG_USER+59;
+     LAPW_HistoryHook	= TAG_USER+80;
+     LAPW_Activate		= TAG_USER+148;
+     LAPW_MaxChars		= GTST_MaxChars;
+
+{ POPUP_KIND }
+     LAPU_FirstLabel		= TAG_USER+44;
+     LAPU_LastLabel		= TAG_USER+45;
+     LAPU_LabelTable		= TAG_USER+98;
+     LAPU_AutoPageID		= TAG_USER+103;
+     LAPU_TabKey		= TAG_USER+118;
+     LAPU_Labels		= GTCY_Labels;
+     LAPU_Active		= GTCY_Active;
+     LAPU_CentreActive	= TAG_USER+163;
+
+{ SLIDER_KIND }
+     LASL_FullCheck		= TAG_USER+22;
+
+{ SCROLLER_KIND }
+     LASC_Thin		= TAG_USER+62;
+     LASC_FullSize		= TAG_USER+188;
+
+{ STRING_KIND }
+     LAST_LastGadget		= TAG_USER+28;
+     LAST_Link		= TAG_USER+7;
+     LAST_Picker		= TAG_USER+5;
+     LAST_UsePicker		= TAG_USER+5;
+     LAST_HistoryLines	= TAG_USER+59;
+     LAST_HistoryHook	= TAG_USER+80;
+     LAST_CursorPosition	= TAG_USER+105;
+     LAST_Activate		= TAG_USER+148;
+     LAST_ValidateHook	= TAG_USER+165;
+
+{ TAB_KIND }
+     LATB_FirstLabel		= TAG_USER+44;
+     LATB_LastLabel		= TAG_USER+45;
+     LATB_LabelTable		= TAG_USER+98;
+     LATB_AutoPageID		= TAG_USER+103;
+     LATB_TabKey		= TAG_USER+118;
+     LATB_Labels		= GTCY_Labels;
+     LATB_Active		= GTCY_Active;
+     LATB_FullWidth		= TAG_USER+149;
+     LATB_FullSize		= TAG_USER+149;
+
+{ TAPEDECK_KIND }
+     LATD_ButtonType		= TAG_USER+86;
+     LATD_Toggle		= TAG_USER+87;
+     LATD_Pressed		= TAG_USER+88;
+     LATD_Smaller		= TAG_USER+89;
+     LATD_Tick		= TAG_USER+139;
+
+{ TEXT_KIND }
+     LATX_Picker		= TAG_USER+5;
+     LATX_UsePicker		= TAG_USER+5;
+     LATX_LockSize		= TAG_USER+106;
+
+{ VERTICAL_KIND and HORIZONTAL_KIND }
+     LAGR_Spread		= TAG_USER+6;
+     LAGR_SameSize		= TAG_USER+8;
+     LAGR_LastAttributes	= TAG_USER+46;
+     LAGR_ActivePage		= TAG_USER+58;
+     LAGR_Frame		= TAG_USER+104;
+     LAGR_IndentX		= TAG_USER+130;
+     LAGR_IndentY		= TAG_USER+134;
+     LAGR_NoIndent		= TAG_USER+146;
+     LAGR_SameWidth		= TAG_USER+150;
+     LAGR_SameHeight		= TAG_USER+151;
+     LAGR_FrameGroup		= TAG_USER+168;
+     LAGR_AlignRight		= TAG_USER+171;
+
+{ XBAR_KIND }
+     LAXB_FullSize		= TAG_USER+50;
+     LAXB_FullWidth		= TAG_USER+50;
+
+{ Applicable for layout handle only }
+     LAHN_TextAttr		= TAG_USER+41;
+     LAHN_AutoActivate	= TAG_USER+42;
+     LAHN_LocaleHook		= TAG_USER+4;
+     LAHN_CloningPermitted	= TAG_USER+61;
+     LAHN_EditHook		= TAG_USER+74;
+     LAHN_ExactClone		= TAG_USER+75;
+     LAHN_MenuGlyphs		= TAG_USER+76;
+     LAHN_Parent		= TAG_USER+83;
+     LAHN_BlockParent	= TAG_USER+84;
+     LAHN_SimpleClone	= TAG_USER+90;
+     LAHN_ExitFlush		= TAG_USER+108;
+     LAHN_UserData		= TAG_USER+116;
+     LAHN_RawKeyFilter	= TAG_USER+142;
+     LAHN_DontPickShortcuts	= TAG_USER+154;
+     LAHN_NoKeys		= TAG_USER+154;
+     LAHN_PubScreen		= TAG_USER+157;
+     LAHN_PubScreenName	= TAG_USER+158;
+     LAHN_PubScreenFallBack	= TAG_USER+159;
+     LAHN_CloneScreenTitle	= TAG_USER+175;
+     LAHN_CloneScreenTitleID	= TAG_USER+176;
+     LAHN_TopGroupType	= TAG_USER+190;
+
+{ Applicable for menus only. }
+     LAMN_FirstLabel		= LABX_FirstLabel;
+     LAMN_LastLabel		= LABX_LastLabel;
+     LAMN_LabelTable		= TAG_USER+98;
+     LAMN_TitleText		= TAG_USER+17000;
+     LAMN_TitleID		= TAG_USER+17001;
+     LAMN_ItemText		= TAG_USER+17002;
+     LAMN_ItemID		= TAG_USER+17003;
+     LAMN_SubText		= TAG_USER+17004;
+     LAMN_SubID		= TAG_USER+17005;
+     LAMN_KeyText		= TAG_USER+17006;
+     LAMN_KeyID		= TAG_USER+17007;
+     LAMN_CommandText	= TAG_USER+17008;
+     LAMN_CommandID		= TAG_USER+17009;
+     LAMN_MutualExclude	= TAG_USER+17010;
+     LAMN_UserData		= TAG_USER+17011;
+     LAMN_Disabled		= TAG_USER+17012;
+     LAMN_CheckIt		= TAG_USER+17013;
+     LAMN_Checked		= TAG_USER+17014;
+     LAMN_Toggle		= TAG_USER+17015;
+     LAMN_Code		= TAG_USER+17016;
+     LAMN_Qualifier		= TAG_USER+17017;
+     LAMN_Char		= TAG_USER+17018;
+     LAMN_ID			= TAG_USER+17019;
+     LAMN_AmigaGlyph		= TAG_USER+17020;
+     LAMN_CheckmarkGlyph	= TAG_USER+17021;
+     LAMN_Error		= TAG_USER+17022;
+     LAMN_Screen		= TAG_USER+17023;
+     LAMN_TextAttr		= TAG_USER+17024;
+     LAMN_LayoutHandle	= TAG_USER+17025;
+     LAMN_Handle		= TAG_USER+17025;
+     LAMN_ExtraSpace		= TAG_USER+17026;
+     LAMN_FullMenuNum	= TAG_USER+160;
+
+{ Applicable for window only }
+     LAWN_Menu		= TAG_USER+25;
+     LAWN_UserPort		= TAG_USER+47;
+     LAWN_Left		= TAG_USER+48;
+     LAWN_Top		= TAG_USER+49;
+     LAWN_Zoom		= TAG_USER+50;
+     LAWN_MaxPen		= TAG_USER+52;
+     LAWN_BelowMouse		= TAG_USER+53;
+     LAWN_MoveToWindow	= TAG_USER+54;
+     LAWN_AutoRefresh	= TAG_USER+55;
+     LAWN_HelpHook		= TAG_USER+73;
+     LAWN_Parent		= TAG_USER+81;
+     LAWN_BlockParent	= TAG_USER+82;
+     LAWN_SmartZoom		= TAG_USER+91;
+     LAWN_Title		= TAG_USER+92;
+     LAWN_TitleText		= TAG_USER+92;
+     LAWN_Bounds		= TAG_USER+93;
+     LAWN_ExtraWidth		= TAG_USER+94;
+     LAWN_ExtraHeight	= TAG_USER+95;
+     LAWN_IDCMP		= TAG_USER+96;
+     LAWN_AlignWindow	= TAG_USER+97;
+     LAWN_TitleID		= TAG_USER+99;
+     LAWN_FlushLeft		= TAG_USER+14000	{ NOTEZ-BIEN: = TAG_USER+99 = WA_Dummy and can clash };
+     LAWN_FlushTop		= TAG_USER+14001	{             with Intuition!                      };
+     LAWN_Show		= TAG_USER+14002;
+     LAWN_MenuTemplate	= TAG_USER+14003;
+     LAWN_MenuTags		= TAG_USER+14004;
+     LAWN_NoInitialRefresh	= TAG_USER+164;
+     LAWN_LimitWidth		= TAG_USER+165;
+     LAWN_LimitHeight	= TAG_USER+166;
+     LAWN_UserData		= TAG_USER+169;
+
+{ Private tags; do not use, or you'll run into trouble! }
+     LA_Private1		= TAG_USER+100;
+     LA_Private2		= TAG_USER+101;
+
+{ Last tag item value used }
+     LAST_TAG		= TAG_USER+190;
+
+    { Identifies the absence of a link for a listview or a string gadget  }
+       NIL_LINK = -(2);
+    {                                                                            }
+    { String gadget type history hook support: you will either get
+       the following value passed as the message parameter to your
+       hook function, or a pointer to a null-terminated string you should
+       copy and create a Node from, which you should then add to the tail
+       of your history list. Place a pointer to your history list in the
+       Hook.h_Data entry.
+      }
+       HISTORYHOOK_DiscardOldest = 0;
+    {                                                                            }
+    { Refresh hook support: you will get the following structure
+       passed as the message and a pointer to the LayoutHandle as
+       the object.
+      }
+
+    type
+
+       tRefreshMsg = record
+            ID : LONG;
+            Left : WORD;
+            Top : WORD;
+            Width : WORD;
+            Height : WORD;
+         end;
+
+       pRefreshMsg = ^tRefreshMsg;
+    {                                                                            }
+    { Incrementer hook support: you will get the current value
+       passed as the object and one of the following values as
+       the message. Return the number to be used.
+      }
+const
+      INCREMENTERMSG_Decrement = -1;	{ Decrement value }
+      INCREMENTERMSG_Initial   =  0;	{ Initial value passed upon gadget creation }
+      INCREMENTERMSG_Increment =  1;	{ Increment value }
+
+
+    const
+       TICKS_None  = 0;	{/* No ticks please */}
+       TICKS_Left  = 1;	{/* Place ticks left of the slider (FREEVERT only) */}
+       TICKS_Both  = 2;		{/* Place ticks on both sides of the slider */}
+       TICKS_Above = TICKS_Left;
+    {                                                                            }
+    { The central data structure of the layout process.  }
+    { Requires gtlayout.library V9  }
+    { Requires gtlayout.library V13  }
+    { Hands off, private fields follow....  }
+
+    type
+
+       tLayoutHandle = record
+            Screen : PScreen;
+            DrawInfo : PDrawInfo;
+            Window : PWindow;
+            VisualInfo : Pointer;
+            AmigaGlyph : PImage;
+            CheckGlyph : PImage;
+            UserData : Pointer;
+            Menu : PMenu;
+         end;
+
+       pLayoutHandle = ^tLayoutHandle;
+
+    { Help key hook support: the hook will be called with a "struct IBox  "
+       as the object and a "struct HelpMsg  ". The IBox describes the object
+       the mouse was positioned over, such as a button, a listview, etc.
+       The "ObjectID" will indicate the ID of the object the mouse was
+       positioned over. The ID will be -1 if no object was to be found.
+      }
+    { Window layout handle  }
+    { ID of the object, -1 for full window  }
+
+       tHelpMsg = record
+            Handle : PLayoutHandle;
+            ObjectID : LONG;
+         end;
+
+       pHelpMsg = ^tHelpMsg;
+    {   pUWord = ^UWord; }
+       ppGadget = ^pGadget;
+
+PROCEDURE LT_LevelWidth(par1 : pLayoutHandle; par2 : pCHAR; par3 : POINTER; par4 : LONGINT; par5 : LONGINT; VAR par6 : LONGINT; VAR par7 : LONGINT; last : LONGINT);
+PROCEDURE LT_DeleteHandle(last : pLayoutHandle);
+FUNCTION LT_CreateHandle(par1 : pScreen; last : pTextAttr) : pLayoutHandle;
+FUNCTION LT_CreateHandleTagList(par1 : pScreen; tags : pTagItem) : pLayoutHandle;
+FUNCTION LT_Rebuild(par1 : pLayoutHandle; par2 : pIBox; par3 : LONGINT; par4 : LONGINT; last : LONGINT) : BOOLEAN;
+PROCEDURE LT_HandleInput(par1 : pLayoutHandle; par2 : ulong; var par3 : ulong; var par4 : UWORD; last :ppGadget);
+PROCEDURE LT_BeginRefresh(last : pLayoutHandle);
+PROCEDURE LT_EndRefresh(par1 : pLayoutHandle; last : LONGINT);
+FUNCTION LT_GetAttributesA(par1 : pLayoutHandle; par2 : LONGINT; tags : pTagItem) : LONGINT;
+PROCEDURE LT_SetAttributesA(par1 : pLayoutHandle; par2 : LONGINT; tags : pTagItem);
+PROCEDURE LT_AddA(par1 : pLayoutHandle; par2 : LONGINT; par3 : pCHAR; par4 : LONGINT; tags : pTagItem);
+PROCEDURE LT_NewA(par1 : pLayoutHandle; tags : pTagItem);
+PROCEDURE LT_EndGroup(last : pLayoutHandle);
+FUNCTION LT_LayoutA(par1 : pLayoutHandle; par2 : pCHAR; par3 : pIBox; par4 : LONGINT; par5 : LONGINT; par6 : ulong; par7 : LONGINT; tags : pTagItem) : pWindow;
+FUNCTION LT_LayoutMenusA(par1 : pLayoutHandle; par2 : pNewMenu; tags : pTagItem) : pMenu;
+FUNCTION LT_LabelWidth(par1 : pLayoutHandle; last : pCHAR) : LONGINT;
+FUNCTION LT_LabelChars(par1 : pLayoutHandle; last : pCHAR) : LONGINT;
+PROCEDURE LT_LockWindow(last : pWindow);
+PROCEDURE LT_UnlockWindow(last : pWindow);
+PROCEDURE LT_DeleteWindowLock(last : pWindow);
+PROCEDURE LT_ShowWindow(par1 : pLayoutHandle; last : LONGINT);
+PROCEDURE LT_Activate(par1 : pLayoutHandle; last : LONGINT);
+FUNCTION LT_PressButton(par1 : pLayoutHandle; last : LONGINT) : BOOLEAN;
+FUNCTION LT_GetCode(par1 : ulong; par2 : ulong; par3 : ulong; last : pGadget) : LONGINT;
+FUNCTION LT_GetIMsg(last : pLayoutHandle) : pIntuiMessage;
+PROCEDURE LT_ReplyIMsg(last : pIntuiMessage);
+FUNCTION LT_BuildA(par1 : pLayoutHandle; tags : pTagItem) : pWindow;
+FUNCTION LT_RebuildTagList(par1 : pLayoutHandle; par2 : LONGINT; tags : pTagItem) : BOOLEAN;
+PROCEDURE LT_UpdateStrings(last : pLayoutHandle);
+PROCEDURE LT_DisposeMenu(last : pMenu);
+FUNCTION LT_NewMenuTemplate(par1 : pScreen; par2 : pTextAttr; par3 : pImage; par4 : pImage; VAR par5 : LONGINT; last : pNewMenu) : pMenu;
+FUNCTION LT_NewMenuTagList(tags : pTagItem) : pMenu;
+PROCEDURE LT_MenuControlTagList(par1 : pWindow; par2 : pMenu; tags : pTagItem);
+FUNCTION LT_GetMenuItem(par1 : pMenu; last : ulong) : pMenuItem;
+FUNCTION LT_FindMenuCommand(par1 : pMenu; par2 : ulong; par3 : ulong; last : pGadget) : pMenuItem;
+PROCEDURE LT_NewLevelWidth(par1 : pLayoutHandle; par2 : pCHAR; par3 : POINTER; par4 : LONGINT; par5 : LONGINT; VAR par6 : LONGINT; VAR par7 : LONGINT; last : LONGINT);
+PROCEDURE LT_Refresh(last : pLayoutHandle);
+PROCEDURE LT_CatchUpRefresh(last : pLayoutHandle);
+FUNCTION LT_GetWindowUserData(par1 : pWindow; last : POINTER) : POINTER;
+
+{
+     This is functions and procedures with array of const.
+     For use with fpc 1.0.7 and above.
+}
+
+FUNCTION LT_CreateHandleTags(screen : pScreen; const tagList : Array Of Const) : pLayoutHandle;
+FUNCTION LT_GetAttributes(handle : pLayoutHandle; id : LONGINT; const tagList : Array Of Const) : LONGINT;
+PROCEDURE LT_SetAttributes(handle : pLayoutHandle; id : LONGINT; const tagList : Array Of Const);
+PROCEDURE LT_Add(handle : pLayoutHandle; _type : LONGINT; _label : pCHAR; id : LONGINT; const tagList : Array Of Const);
+PROCEDURE LT_New(handle : pLayoutHandle; const tagList : Array Of Const);
+FUNCTION LT_Layout(handle : pLayoutHandle; title : pCHAR; bounds : pIBox; extraWidth : LONGINT; extraHeight : LONGINT; idcmp : CARDINAL; align : LONGINT; const tagParams : Array Of Const) : pWindow;
+FUNCTION LT_LayoutMenus(handle : pLayoutHandle; menuTemplate : pNewMenu; const tagParams : Array Of Const) : pMenu;
+FUNCTION LT_Build(handle : pLayoutHandle; const tagParams : Array Of Const) : pWindow;
+FUNCTION LT_RebuildTags(handle : pLayoutHandle; clear : LONGINT; const tags : Array Of Const) : BOOLEAN;
+FUNCTION LT_NewMenuTags(const tagList : Array Of Const) : pMenu;
+PROCEDURE LT_MenuControlTags(window : pWindow; intuitionMenu : pMenu; const tags : Array Of Const);
+
+
+VAR GTLayoutBase : pLibrary;
+
+
+IMPLEMENTATION
+
+uses msgbox,tagsarray;
+
+PROCEDURE LT_LevelWidth(par1 : pLayoutHandle; par2 : pCHAR; par3 : POINTER; par4 : LONGINT; par5 : LONGINT; VAR par6 : LONGINT; VAR par7 : LONGINT; last : LONGINT);
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	par1,A0
+	MOVEA.L	par2,A1
+	MOVEA.L	par3,A2
+	MOVE.L	par4,D0
+	MOVE.L	par5,D1
+	MOVEA.L	par6,A3
+	MOVEA.L	par7,A5
+	MOVE.L	last,D2
+	MOVEA.L	GTLayoutBase,A6
+	JSR	-030(A6)
+	MOVEA.L	(A7)+,A6
+  END;
+END;
+
+PROCEDURE LT_DeleteHandle(last : pLayoutHandle);
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	last,A0
+	MOVEA.L	GTLayoutBase,A6
+	JSR	-036(A6)
+	MOVEA.L	(A7)+,A6
+  END;
+END;
+
+FUNCTION LT_CreateHandle(par1 : pScreen; last : pTextAttr) : pLayoutHandle;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	par1,A0
+	MOVEA.L	last,A1
+	MOVEA.L	GTLayoutBase,A6
+	JSR	-042(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+FUNCTION LT_CreateHandleTagList(par1 : pScreen; tags : pTagItem) : pLayoutHandle;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	par1,A0
+	MOVEA.L	tags,A1
+	MOVEA.L	GTLayoutBase,A6
+	JSR	-048(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+FUNCTION LT_Rebuild(par1 : pLayoutHandle; par2 : pIBox; par3 : LONGINT; par4 : LONGINT; last : LONGINT) : BOOLEAN;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	par1,A0
+	MOVEA.L	par2,A1
+	MOVEA.L	par3,A2
+	MOVE.L	par4,D0
+	MOVE.L	last,D1
+	MOVEA.L	GTLayoutBase,A6
+	JSR	-054(A6)
+	MOVEA.L	(A7)+,A6
+	TST.W	D0
+	BEQ.B	@end
+	MOVEQ	#1,D0
+  @end:	MOVE.B	D0,@RESULT
+  END;
+END;
+
+PROCEDURE LT_HandleInput(par1 : pLayoutHandle; par2 : ulong; var par3 : ulong;var  par4 : UWORD; last : ppGadget);
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	par1,A0
+	MOVE.L	par2,D0
+	MOVEA.L	par3,A1
+	MOVEA.L	par4,A2
+	MOVEA.L	last,A3
+	MOVEA.L	GTLayoutBase,A6
+	JSR	-060(A6)
+	MOVEA.L	(A7)+,A6
+  END;
+END;
+
+PROCEDURE LT_BeginRefresh(last : pLayoutHandle);
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	last,A0
+	MOVEA.L	GTLayoutBase,A6
+	JSR	-066(A6)
+	MOVEA.L	(A7)+,A6
+  END;
+END;
+
+PROCEDURE LT_EndRefresh(par1 : pLayoutHandle; last : LONGINT);
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	par1,A0
+	MOVE.L	last,D0
+	MOVEA.L	GTLayoutBase,A6
+	JSR	-072(A6)
+	MOVEA.L	(A7)+,A6
+  END;
+END;
+
+FUNCTION LT_GetAttributesA(par1 : pLayoutHandle; par2 : LONGINT; tags : pTagItem) : LONGINT;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	par1,A0
+	MOVE.L	par2,D0
+	MOVEA.L	tags,A1
+	MOVEA.L	GTLayoutBase,A6
+	JSR	-078(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+PROCEDURE LT_SetAttributesA(par1 : pLayoutHandle; par2 : LONGINT; tags : pTagItem);
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	par1,A0
+	MOVE.L	par2,D0
+	MOVEA.L	tags,A1
+	MOVEA.L	GTLayoutBase,A6
+	JSR	-084(A6)
+	MOVEA.L	(A7)+,A6
+  END;
+END;
+
+PROCEDURE LT_AddA(par1 : pLayoutHandle; par2 : LONGINT; par3 : pCHAR; par4 : LONGINT; tags : pTagItem);
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	par1,A0
+	MOVE.L	par2,D0
+	MOVE.L	par3,D1
+	MOVE.L	par4,D2
+	MOVEA.L	tags,A1
+	MOVEA.L	GTLayoutBase,A6
+	JSR	-090(A6)
+	MOVEA.L	(A7)+,A6
+  END;
+END;
+
+PROCEDURE LT_NewA(par1 : pLayoutHandle; tags : pTagItem);
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	par1,A0
+	MOVEA.L	tags,A1
+	MOVEA.L	GTLayoutBase,A6
+	JSR	-096(A6)
+	MOVEA.L	(A7)+,A6
+  END;
+END;
+
+PROCEDURE LT_EndGroup(last : pLayoutHandle);
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	last,A0
+	MOVEA.L	GTLayoutBase,A6
+	JSR	-102(A6)
+	MOVEA.L	(A7)+,A6
+  END;
+END;
+
+FUNCTION LT_LayoutA(par1 : pLayoutHandle; par2 : pCHAR; par3 : pIBox; par4 : LONGINT; par5 : LONGINT; par6 : ulong; par7 : LONGINT; tags : pTagItem) : pWindow;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	par1,A0
+	MOVEA.L	par2,A1
+	MOVEA.L	par3,A2
+	MOVE.L	par4,D0
+	MOVE.L	par5,D1
+	MOVE.L	par6,D2
+	MOVE.L	par7,D3
+	MOVEA.L	tags,A3
+	MOVEA.L	GTLayoutBase,A6
+	JSR	-108(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+FUNCTION LT_LayoutMenusA(par1 : pLayoutHandle; par2 : pNewMenu; tags : pTagItem) : pMenu;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	par1,A0
+	MOVEA.L	par2,A1
+	MOVEA.L	tags,A2
+	MOVEA.L	GTLayoutBase,A6
+	JSR	-114(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+FUNCTION LT_LabelWidth(par1 : pLayoutHandle; last : pCHAR) : LONGINT;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	par1,A0
+	MOVEA.L	last,A1
+	MOVEA.L	GTLayoutBase,A6
+	JSR	-138(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+FUNCTION LT_LabelChars(par1 : pLayoutHandle; last : pCHAR) : LONGINT;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	par1,A0
+	MOVEA.L	last,A1
+	MOVEA.L	GTLayoutBase,A6
+	JSR	-144(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+PROCEDURE LT_LockWindow(last : pWindow);
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	last,A0
+	MOVEA.L	GTLayoutBase,A6
+	JSR	-150(A6)
+	MOVEA.L	(A7)+,A6
+  END;
+END;
+
+PROCEDURE LT_UnlockWindow(last : pWindow);
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	last,A0
+	MOVEA.L	GTLayoutBase,A6
+	JSR	-156(A6)
+	MOVEA.L	(A7)+,A6
+  END;
+END;
+
+PROCEDURE LT_DeleteWindowLock(last : pWindow);
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	last,A0
+	MOVEA.L	GTLayoutBase,A6
+	JSR	-162(A6)
+	MOVEA.L	(A7)+,A6
+  END;
+END;
+
+PROCEDURE LT_ShowWindow(par1 : pLayoutHandle; last : LONGINT);
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	par1,A0
+	MOVEA.L	last,A1
+	MOVEA.L	GTLayoutBase,A6
+	JSR	-168(A6)
+	MOVEA.L	(A7)+,A6
+  END;
+END;
+
+PROCEDURE LT_Activate(par1 : pLayoutHandle; last : LONGINT);
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	par1,A0
+	MOVE.L	last,D0
+	MOVEA.L	GTLayoutBase,A6
+	JSR	-174(A6)
+	MOVEA.L	(A7)+,A6
+  END;
+END;
+
+FUNCTION LT_PressButton(par1 : pLayoutHandle; last : LONGINT) : BOOLEAN;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	par1,A0
+	MOVE.L	last,D0
+	MOVEA.L	GTLayoutBase,A6
+	JSR	-180(A6)
+	MOVEA.L	(A7)+,A6
+	TST.W	D0
+	BEQ.B	@end
+	MOVEQ	#1,D0
+  @end:	MOVE.B	D0,@RESULT
+  END;
+END;
+
+FUNCTION LT_GetCode(par1 : ulong; par2 : ulong; par3 : ulong; last : pGadget) : LONGINT;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVE.L	par1,D0
+	MOVE.L	par2,D1
+	MOVE.L	par3,D2
+	MOVEA.L	last,A0
+	MOVEA.L	GTLayoutBase,A6
+	JSR	-186(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+FUNCTION LT_GetIMsg(last : pLayoutHandle) : pIntuiMessage;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	last,A0
+	MOVEA.L	GTLayoutBase,A6
+	JSR	-192(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+PROCEDURE LT_ReplyIMsg(last : pIntuiMessage);
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	last,A0
+	MOVEA.L	GTLayoutBase,A6
+	JSR	-198(A6)
+	MOVEA.L	(A7)+,A6
+  END;
+END;
+
+FUNCTION LT_BuildA(par1 : pLayoutHandle; tags : pTagItem) : pWindow;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	par1,A0
+	MOVEA.L	tags,A1
+	MOVEA.L	GTLayoutBase,A6
+	JSR	-204(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+FUNCTION LT_RebuildTagList(par1 : pLayoutHandle; par2 : LONGINT; tags : pTagItem) : BOOLEAN;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	par1,A0
+	MOVE.L	par2,D0
+	MOVEA.L	tags,A1
+	MOVEA.L	GTLayoutBase,A6
+	JSR	-210(A6)
+	MOVEA.L	(A7)+,A6
+	TST.W	D0
+	BEQ.B	@end
+	MOVEQ	#1,D0
+  @end:	MOVE.B	D0,@RESULT
+  END;
+END;
+
+PROCEDURE LT_UpdateStrings(last : pLayoutHandle);
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	last,A0
+	MOVEA.L	GTLayoutBase,A6
+	JSR	-216(A6)
+	MOVEA.L	(A7)+,A6
+  END;
+END;
+
+PROCEDURE LT_DisposeMenu(last : pMenu);
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	last,A0
+	MOVEA.L	GTLayoutBase,A6
+	JSR	-222(A6)
+	MOVEA.L	(A7)+,A6
+  END;
+END;
+
+FUNCTION LT_NewMenuTemplate(par1 : pScreen; par2 : pTextAttr; par3 : pImage; par4 : pImage; VAR par5 : LONGINT; last : pNewMenu) : pMenu;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	par1,A0
+	MOVEA.L	par2,A1
+	MOVEA.L	par3,A2
+	MOVEA.L	par4,A3
+	MOVE.L	par5,D0
+	MOVE.L	last,D1
+	MOVEA.L	GTLayoutBase,A6
+	JSR	-228(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+FUNCTION LT_NewMenuTagList(tags : pTagItem) : pMenu;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	tags,A0
+	MOVEA.L	GTLayoutBase,A6
+	JSR	-234(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+PROCEDURE LT_MenuControlTagList(par1 : pWindow; par2 : pMenu; tags : pTagItem);
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	par1,A0
+	MOVEA.L	par2,A1
+	MOVEA.L	tags,A2
+	MOVEA.L	GTLayoutBase,A6
+	JSR	-240(A6)
+	MOVEA.L	(A7)+,A6
+  END;
+END;
+
+FUNCTION LT_GetMenuItem(par1 : pMenu; last : ulong) : pMenuItem;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	par1,A0
+	MOVE.L	last,D0
+	MOVEA.L	GTLayoutBase,A6
+	JSR	-246(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+FUNCTION LT_FindMenuCommand(par1 : pMenu; par2 : ulong; par3 : ulong; last : pGadget) : pMenuItem;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	par1,A0
+	MOVE.L	par2,D0
+	MOVE.L	par3,D1
+	MOVEA.L	last,A1
+	MOVEA.L	GTLayoutBase,A6
+	JSR	-252(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+PROCEDURE LT_NewLevelWidth(par1 : pLayoutHandle; par2 : pCHAR; par3 : POINTER; par4 : LONGINT; par5 : LONGINT; VAR par6 : LONGINT; VAR par7 : LONGINT; last : LONGINT);
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	par1,A0
+	MOVEA.L	par2,A1
+	MOVEA.L	par3,A2
+	MOVE.L	par4,D0
+	MOVE.L	par5,D1
+	MOVEA.L	par6,A3
+	MOVE.L	par7,D3
+	MOVE.L	last,D2
+	MOVEA.L	GTLayoutBase,A6
+	JSR	-258(A6)
+	MOVEA.L	(A7)+,A6
+  END;
+END;
+
+PROCEDURE LT_Refresh(last : pLayoutHandle);
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	last,A0
+	MOVEA.L	GTLayoutBase,A6
+	JSR	-264(A6)
+	MOVEA.L	(A7)+,A6
+  END;
+END;
+
+PROCEDURE LT_CatchUpRefresh(last : pLayoutHandle);
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	last,A0
+	MOVEA.L	GTLayoutBase,A6
+	JSR	-270(A6)
+	MOVEA.L	(A7)+,A6
+  END;
+END;
+
+FUNCTION LT_GetWindowUserData(par1 : pWindow; last : POINTER) : POINTER;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	par1,A0
+	MOVEA.L	last,A1
+	MOVEA.L	GTLayoutBase,A6
+	JSR	-276(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+
+{
+ Functions and procedures with array of const go here
+}
+FUNCTION LT_CreateHandleTags(screen : pScreen; const tagList : Array Of Const) : pLayoutHandle;
+begin
+    LT_CreateHandleTags := LT_CreateHandleTagList(screen , readintags(tagList));
+end;
+
+FUNCTION LT_GetAttributes(handle : pLayoutHandle; id : LONGINT; const tagList : Array Of Const) : LONGINT;
+begin
+    LT_GetAttributes := LT_GetAttributesA(handle , id , readintags(tagList));
+end;
+
+PROCEDURE LT_SetAttributes(handle : pLayoutHandle; id : LONGINT; const tagList : Array Of Const);
+begin
+    LT_SetAttributesA(handle , id , readintags(tagList));
+end;
+
+PROCEDURE LT_Add(handle : pLayoutHandle; _type : LONGINT; _label : pCHAR; id : LONGINT; const tagList : Array Of Const);
+begin
+    LT_AddA(handle , _type , _label , id , readintags(tagList));
+end;
+
+PROCEDURE LT_New(handle : pLayoutHandle; const tagList : Array Of Const);
+begin
+    LT_NewA(handle , readintags(tagList));
+end;
+
+FUNCTION LT_Layout(handle : pLayoutHandle; title : pCHAR; bounds : pIBox; extraWidth : LONGINT; extraHeight : LONGINT; idcmp : CARDINAL; align : LONGINT; const tagParams : Array Of Const) : pWindow;
+begin
+    LT_Layout := LT_LayoutA(handle , title , bounds , extraWidth , extraHeight , idcmp , align , readintags(tagParams));
+end;
+
+FUNCTION LT_LayoutMenus(handle : pLayoutHandle; menuTemplate : pNewMenu; const tagParams : Array Of Const) : pMenu;
+begin
+    LT_LayoutMenus := LT_LayoutMenusA(handle , menuTemplate , readintags(tagParams));
+end;
+
+FUNCTION LT_Build(handle : pLayoutHandle; const tagParams : Array Of Const) : pWindow;
+begin
+    LT_Build := LT_BuildA(handle , readintags(tagParams));
+end;
+
+FUNCTION LT_RebuildTags(handle : pLayoutHandle; clear : LONGINT; const tags : Array Of Const) : BOOLEAN;
+begin
+    LT_RebuildTags := LT_RebuildTagList(handle , clear , readintags(tags));
+end;
+
+FUNCTION LT_NewMenuTags(const tagList : Array Of Const) : pMenu;
+begin
+    LT_NewMenuTags := LT_NewMenuTagList(readintags(tagList));
+end;
+
+PROCEDURE LT_MenuControlTags(window : pWindow; intuitionMenu : pMenu; const tags : Array Of Const);
+begin
+    LT_MenuControlTagList(window , intuitionMenu , readintags(tags));
+end;
+
+
+{$I useautoopenlib.inc}
+{$ifdef use_auto_openlib}
+   {$Info Compiling autoopening of gtlayout.library}
+
+var
+    gtlayout_exit : pointer;
+
+procedure CloseGTLayoutLibrary;
+begin
+    ExitProc := gtlayout_exit;
+    if GTLayoutBase <> nil then begin
+        CloseLibrary(GTLayoutBase);
+        GTLayoutBase := nil;
+    end;
+end;
+
+const
+    VERSION : string[1] = '0';
+
+begin
+    GTLayoutBase := nil;
+    GTLayOutBase := OpenLibrary(GTLAYOUTNAME,0);
+    if GTLayoutBase <> nil then begin
+        gtlayout_exit := ExitProc;
+        ExitProc := @CloseGTLayoutLibrary;
+    end else begin
+        MessageBox('FPC Pascal Error',
+                    'Can''t open gtlayout.library version ' + 
+                    VERSION +
+                    chr(10) + 
+                    'Deallocating resources and closing down',
+                    'Oops');
+        halt(20);
+    end;
+{$else}
+   {$Warning No autoopening of gtlayout.library compiled}
+   {$Info Make sure you open gtlayout.library yourself}
+{$endif use_auto_openlib}
+
+END. (* UNIT GTLAYOUT *)

+ 664 - 0
packages/extra/amunits/otherlibs/identify/units/identify.pas

@@ -0,0 +1,664 @@
+{
+    This file is part of the Free Pascal run time library.
+
+    A file in Amiga system run time library.
+    Copyright (c) 2001 by Nils Sjoholm
+    member of the Amiga RTL development team.
+
+    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.
+
+ **********************************************************************}
+
+{
+    History:
+
+    First version of this unit.
+    13 Mar 2001.
+
+    Updated to use fpc 1.0.7
+    Added array of const and some
+    overlay functions.
+    08 Jan 2003
+    
+    Added the defines use_amiga_smartlink and
+    use_auto_openlib.
+    12 Jan 2003.
+
+    [email protected]
+}
+
+{$mode objfpc}
+
+{$I useamigasmartlink.inc}
+{$ifdef use_amiga_smartlink}
+    {$smartlink on}
+{$endif use_amiga_smartlink}
+
+UNIT IDENTIFY;
+
+INTERFACE
+USES Exec, utility;
+
+{
+** $VER: identify.h 13.0 (11.09.2001)
+**
+** identify.library definitions
+**
+** (C) Copyright 1996-2000 Richard Koerber
+** All Rights Reserved.
+}
+
+CONST  _IDTAGS      = $CD450000;
+
+{ --------------------------------------------------------------------------}
+{ Generic library informations }
+
+CONST  IDENTIFYVERSION = 13;
+       IDENTIFYNAME    : PChar = 'identify.library';
+
+TYPE   pIdentifyBase = ^tIdentifyBase;
+       TIdentifyBase  = Record
+          ifyb_LibNode  :tLibrary;
+       End;
+
+CONST  IDENTIFYBUFLEN = 50;  { default buffer length }
+
+{ --------------------------------------------------------------------------}
+{ Expansion() tags }
+
+       IDTAG_ConfigDev   = _IDTAGS+$00; { "p_ConfigDev" ConfigDev }
+                                        { structure to be evaluated }
+       IDTAG_ManufID     = _IDTAGS+$01; { UWORD manufacturer ID if no }
+                                        { ConfigDev is available }
+       IDTAG_ProdID      = _IDTAGS+$02; { UBYTE product ID if no }
+                                        { ConfigDev is available }
+       IDTAG_StrLength   = _IDTAGS+$03; { UWORD of maximum buffer length, }
+                                        { including termination. Default }
+                                        { is 50. }
+       IDTAG_ManufStr    = _IDTAGS+$04; { STRPTR of manufacturer name }
+                                        { puffer, or NULL }
+       IDTAG_ProdStr     = _IDTAGS+$05; { STRPTR of product name }
+                                        { puffer, or NULL }
+       IDTAG_ClassStr    = _IDTAGS+$06; { STRPTR of product class }
+                                        { puffer, or NULL }
+       IDTAG_DeadStr     = _IDTAGS+$07; { STRPTR deadend or recoverable alert? }
+       IDTAG_SubsysStr   = _IDTAGS+$08; { STRPTR alert subsystem }
+       IDTAG_GeneralStr  = _IDTAGS+$09; { STRPTR alert general cause }
+       IDTAG_SpecStr     = _IDTAGS+$0A; { STRPTR alert specific cause }
+       IDTAG_FuncNameStr = _IDTAGS+$0B; { STRPTR function name }
+       IDTAG_Expansion   = _IDTAGS+$0C; { "pp_ConfigDev" ConfigDev for a }
+                                        { complete expansion check. Init }
+                                        { the variable with NULL and pass }
+                                        { a pointer to it using this tag. }
+       IDTAG_Secondary   = _IDTAGS+$0D; { BOOL warn for secondary expansion }
+                                        { boards (defaults to FALSE) }
+       IDTAG_ClassID     = _IDTAGS+$0E; { ULONG * class ID of the provided }
+                                        { expansion board (see below) [V8] }
+       IDTAG_Localize    = _IDTAGS+$0F; { BOOL return localized strings }
+                                        { (defaults to TRUE) [V8] }
+       IDTAG_NULL4NA     = _IDTAGS+$10; { BOOL return NULL for not available, }
+                                        { else return a string (defaults to }
+                                        { FALSE) [V8] }
+
+{ --------------------------------------------------------------------------}
+{ Hardware description types }
+
+       IDHW_SYSTEM      = 0;   { System (Amiga,DraCo,...)            [V2] }
+       IDHW_CPU         = 1;   { CPU (68000,68010,...,68060) }
+       IDHW_FPU         = 2;   { FPU (---,68881,68882,68040,68060) }
+       IDHW_MMU         = 3;   { MMU (---,68852,68030,68040,68060) }
+       IDHW_OSVER       = 4;   { OS Version (Vx.x) }
+       IDHW_EXECVER     = 5;   { Exec Version (Vx.x) }
+       IDHW_WBVER       = 6;   { Workbench Version (---,Vx.x) }
+       IDHW_ROMSIZE     = 7;   { OS ROM Size (xKB, xMB) }
+       IDHW_CHIPSET     = 8;   { Chipset (OCS,ECS,AGA,DraCo) }
+       IDHW_GFXSYS      = 9;   { Graphic OS (AmigaOS, CyberGraphX, ...) }
+       IDHW_CHIPRAM     = 10;  { Chip RAM (xKB, xMB, xGB) }
+       IDHW_FASTRAM     = 11;  { Fast RAM (xKB, xMB, xGB) }
+       IDHW_RAM         = 12;  { Total RAM (xKB, xMB, xGB) }
+       IDHW_SETPATCHVER = 13;  { SetPatch Version (---,Vx.x)         [V4] }
+       IDHW_AUDIOSYS    = 14;  { Audio OS (AmigaOS, AHI, ...)        [V5] }
+       IDHW_OSNR        = 15;  { AmigaOS (2.04, 3.1, ...) }
+       IDHW_VMMCHIPRAM  = 16;  { VMM Chip RAM ( *KB, *MB, *GB) }
+       IDHW_VMMFASTRAM  = 17;  { VMM Fast RAM ( *KB, *MB, *GB) }
+       IDHW_VMMRAM      = 18;  { VMM Total RAM ( *KB, *MB, *GB) }
+       IDHW_PLNCHIPRAM  = 19;  { Plain Chip RAM ( *KB, *MB, *GB) }
+       IDHW_PLNFASTRAM  = 20;  { Plain Fast RAM ( *KB, *MB, *GB) }
+       IDHW_PLNRAM      = 21;  { Plain Total RAM (*KB, *MB, *GB) }
+       IDHW_VBR         = 22;  { Vector Base Register                [V6] }
+       IDHW_LASTALERT   = 23;  { Last Alert code }
+       IDHW_VBLANKFREQ  = 24;  { VBlank Frequency }
+       IDHW_POWERFREQ   = 25;  { Power Frequency }
+       IDHW_ECLOCK      = 26;  { EClock }
+       IDHW_SLOWRAM     = 27;  { Plain Slow RAM ( *KB, *MB, *GB) }
+       IDHW_GARY        = 28;  { Gary (---,Normal,...) }
+       IDHW_RAMSEY      = 29;  { RAMSEY (---,D,F) }
+       IDHW_BATTCLOCK   = 30;  { Battery Backed Up Clock (---,Found) }
+       IDHW_CHUNKYPLANAR = 31; { Chunky To Planar Hardware (---,Found) [V7] }
+       IDHW_POWERPC     = 32;  { PowerPC present? (---,Found) }
+       IDHW_PPCCLOCK    = 33;  { PowerPC clock (unit MHz) }
+       IDHW_CPUREV      = 34;  { CPU revision                          [V8] }
+       IDHW_CPUCLOCK    = 35;  { CPU clock (unit MHz) }
+       IDHW_FPUCLOCK    = 36;  { FPU clock (unit MHz) }
+       IDHW_RAMACCESS   = 37;  { Main board RAM access time (unit ns) }
+       IDHW_RAMWIDTH    = 38;  { Main board RAM width (bit) }
+       IDHW_RAMCAS      = 39;  { Main board RAM CAS mode }
+       IDHW_RAMBANDWIDTH = 40; { Main board RAM bandwidth }
+       IDHW_TCPIP       = 41;  { TCP/IP stack                          [V9] }
+       IDHW_PPCOS       = 42;  { PowerPC OS }
+       IDHW_AGNUS       = 43;  { Agnus chip revision }
+       IDHW_AGNUSMODE   = 44;  { Agnus chip mode }
+       IDHW_DENISE      = 45;  { Denise chip version                   [V10] }
+       IDHW_DENISEREV   = 46;  { Denise chip revision }
+       IDHW_BOINGBAG    = 47;  { BoingBag number                       [V12] }
+       IDHW_NUMBEROF    = 48;  { Number of types, PRIVATE! }
+
+{ --------------------------------------------------------------------------}
+{ IDHW_SYSTEM numerical result codes }
+
+       IDSYS_AMIGA1000  = 0;    { Amiga 1000 }
+       IDSYS_AMIGAOCS   = 1;    { OCS Amiga 500/2000 }
+       IDSYS_AMIGAECS   = 2;    { ECS Amiga 500/2000 }
+       IDSYS_AMIGA500   = 3;    { Amiga 500 }
+       IDSYS_AMIGA2000  = 4;    { Amiga 2000 }
+       IDSYS_AMIGA3000  = 5;    { Amiga 3000 }
+       IDSYS_CDTV       = 6;    { CDTV }
+       IDSYS_AMIGA600   = 7;    { Amiga 600 }
+       IDSYS_CD32       = 8;    { CD32 }
+       IDSYS_AMIGA1200  = 9;    { Amiga 1200 }
+       IDSYS_AMIGA4000  = 10;   { Amiga 4000 }
+       IDSYS_DRACO      = 11;   { DraCo }
+       IDSYS_UAE        = 12;   { Ubiquitous Amiga Emulator }
+       IDSYS_AMIGA4000T = 13;   { Amiga 4000 Tower }
+
+{ --------------------------------------------------------------------------}
+{ IDHW_CPU numerical result codes }
+
+       IDCPU_68000     = 0;     { 68000 }
+       IDCPU_68010     = 1;     { 68010 }
+       IDCPU_68020     = 2;     { 68020 }
+       IDCPU_68030     = 3;     { 68030 }
+       IDCPU_68EC030   = 4;     { 68EC030 (without MMU) }
+       IDCPU_68040     = 5;     { 68040 }
+       IDCPU_68LC040   = 6;     { 68LC040 (without FPU) }
+       IDCPU_68060     = 7;     { 68060 }
+       IDCPU_68LC060   = 8;     { 68LC060 (without FPU) }
+
+{ --------------------------------------------------------------------------}
+{ IDHW_FPU numerical result codes }
+
+       IDFPU_NONE      = 0;     { no FPU }
+       IDFPU_68881     = 1;     { 68881 }
+       IDFPU_68882     = 2;     { 68882 }
+       IDFPU_68040     = 3;     { 68040 }
+       IDFPU_68060     = 4;     { 68060 }
+
+{ --------------------------------------------------------------------------}
+{ IDHW_MMU numerical result codes }
+
+       IDMMU_NONE      = 0;     { no MMU }
+       IDMMU_68851     = 1;     { 68851 }
+       IDMMU_68030     = 2;     { 68030 }
+       IDMMU_68040     = 3;     { 68040 }
+       IDMMU_68060     = 4;     { 68060 }
+
+{ --------------------------------------------------------------------------}
+{ IDHW_OSNR numerical result codes }
+
+       IDOS_UNKNOWN    = 0;     { <V36 or >V40 }
+       IDOS_2_0        = 1;     { OS2.0  (V36) }
+       IDOS_2_04       = 2;     { OS2.04 (V37) }
+       IDOS_2_1        = 3;     { OS2.1  (V38) }
+       IDOS_3_0        = 4;     { OS3.0  (V39) }
+       IDOS_3_1        = 5;     { OS3.1  (V40) }
+       IDOS_3_5        = 6;     { OS3.5  (V44) }
+       IDOS_3_9        = 7;     { OS3.9  (V45) }
+
+{ --------------------------------------------------------------------------}
+{ IDHW_CHIPSET numerical result codes }
+
+       IDCS_OCS        = 0;     { OCS }
+       IDCS_ECS        = 1;     { ECS }
+       IDCS_AGA        = 2;     { AGA }
+       IDCS_ALTAIS     = 3;     { DraCo Altais }
+       IDCS_NECS       = 4;     { Nearly ECS (no HR-Agnus or HR-Denise) }
+
+{ --------------------------------------------------------------------------}
+{ IDHW_GFXSYS numerical result codes }
+
+       IDGOS_AMIGAOS   = 0;     { Plain AmigaOS }
+       IDGOS_EGS       = 1;     { EGS }
+       IDGOS_RETINA    = 2;     { Retina }
+       IDGOS_GRAFFITI  = 3;     { Graffiti }
+       IDGOS_TIGA      = 4;     { TIGA }
+       IDGOS_PROBENCH  = 5;     { Merlin ProBench }
+       IDGOS_PICASSO   = 6;     { Picasso }
+       IDGOS_CGX       = 7;     { CyberGraphX }
+       IDGOS_CGX3      = 8;     { CyberGraphX 3D }
+       IDGOS_PICASSO96 = 9;     { Picasso96 }
+       IDGOS_CGX4      = 10;    { CyberGraphX V4 }
+
+{ --------------------------------------------------------------------------}
+{ IDHW_AUDIOSYS numerical result codes }
+
+       IDAOS_AMIGAOS   = 0;     { Plain AmigaOS }
+       IDAOS_MAESTIX   = 1;     { MaestroPro driver }
+       IDAOS_TOCCATA   = 2;     { Toccata driver }
+       IDAOS_PRELUDE   = 3;     { Prelude driver }
+       IDAOS_AHI       = 4;     { AHI }
+       IDAOS_MACROAUDIO = 5;    { MacroAudio }
+
+{ --------------------------------------------------------------------------}
+{ IDHW_GARY numerical result codes }
+
+       IDGRY_NONE      = 0;     { No Gary available }
+       IDGRY_NORMAL    = 1;     { Normal Gary }
+       IDGRY_ENHANCED  = 2;     { Enhanced Gary }
+
+{ --------------------------------------------------------------------------}
+{ IDHW_RAMSEY numerical result codes }
+
+       IDRSY_NONE      = 0;     { No RamSey available }
+       IDRSY_REVD      = 1;     { RamSey Revision D }
+       IDRSY_REVF      = 2;     { RamSey Revision F }
+
+{ --------------------------------------------------------------------------}
+{ IDHW_POWERPC numerical result codes }
+
+       IDPPC_NONE      = 0;     {  No PowerPC implemented }
+       IDPPC_OTHER     = 1;     {  Another PowerPC }
+       IDPPC_602       = 2;     {  602 }
+       IDPPC_603       = 3;     {  603 }
+       IDPPC_603E      = 4;     {  603e }
+       IDPPC_603P      = 5;     {  603p }
+       IDPPC_604       = 6;     {  604 }
+       IDPPC_604E      = 7;     {  604e }
+       IDPPC_620       = 8;     {  620 }
+
+{ --------------------------------------------------------------------------}
+{ IDHW_RAMCAS numerical result codes }
+
+       IDCAS_NONE      = 0;     {  Not available }
+       IDCAS_NORMAL    = 1;     {  Normal access }
+       IDCAS_DOUBLE    = 2;     {  Double access }
+
+{ --------------------------------------------------------------------------}
+{ IDHW_TCPIP numerical result codes }
+
+       IDTCP_NONE      = 0;     {  Not available }
+       IDTCP_AMITCP    = 1;     {  AmiTCP }
+       IDTCP_MIAMI     = 2;     {  Miami }
+       IDTCP_TERMITE   = 3;     {  TermiteTCP }
+       IDTCP_GENESIS   = 4;     {  GENESiS }
+       IDTCP_MIAMIDX   = 5;     {  MiamiDx }
+
+{ --------------------------------------------------------------------------}
+{ IDHW_PPCOS numerical result codes }
+
+       IDPOS_NONE      = 0;     {  None }
+       IDPOS_POWERUP   = 1;     {  PowerUP (Phase 5) }
+       IDPOS_WARPOS    = 2;     {  WarpOS (Haage&Partner) }
+
+{ --------------------------------------------------------------------------}
+{ IDHW_AGNUS numerical result codes }
+
+       IDAG_NONE       = 0;     {  None }
+       IDAG_UNKNOWN    = 1;     {  Unknown Agnus }
+       IDAG_8361       = 2;     {  Agnus 8361 }
+       IDAG_8367       = 3;     {  Agnus 8367 }
+       IDAG_8370       = 4;     {  Agnus 8370 }
+       IDAG_8371       = 5;     {  Agnus 8371 }
+       IDAG_8372_R4    = 6;     {  Agnus 8372 Rev. 1-4 }
+       IDAG_8372_R5    = 7;     {  Agnus 8372 Rev. 5 }
+       IDAG_8374_R2    = 8;     {  Alice 8374 Rev. 1-2 }
+       IDAG_8374_R3    = 9;     {  Alice 8374 Rev. 3-4 }
+
+{ --------------------------------------------------------------------------}
+{ IDHW_DENISE numerical result codes }
+
+       IDDN_NONE       = 0;     {  None }
+       IDDN_UNKNOWN    = 1;     {  Unknown Denise (new model?! :-) }
+       IDDN_8362       = 2;     {  Denise 8362 }
+       IDDN_8373       = 3;     {  Denise 8373 }
+       IDDN_8364       = 4;     {  Lisa 8364 }
+
+{ --------------------------------------------------------------------------}
+{ IDHW_AGNUSMODE numerical result codes }
+
+       IDAM_NONE       = 0;     {  None }
+       IDAM_NTSC       = 1;     {  NTSC Agnus }
+       IDAM_PAL        = 2;     {  PAL Agnus }
+
+{ --------------------------------------------------------------------------}
+{ IDTAG_ClassID numerical result codes }
+
+       IDCID_UNKNOWN     = 0;   {  unknown functionality }
+       IDCID_MISC        = 1;   {  miscellaneous expansion }
+       IDCID_TURBO       = 2;   {  accelerator }
+       IDCID_TURBORAM    = 3;   {  accelerator RAM }
+       IDCID_TURBOHD     = 4;   {  accelerator + some HD controller }
+       IDCID_TURBOIDE    = 5;   {  accelerator + AT-IDE controller }
+       IDCID_TURBOSCSIHD = 6;   {  accelerator + SCSI host adapter }
+       IDCID_NET         = 7;   {  some network }
+       IDCID_ARCNET      = 8;   {  ArcNet }
+       IDCID_ETHERNET    = 9;   {  Ethernet }
+       IDCID_AUDIO       = 10;  {  audio }
+       IDCID_VIDEO       = 11;  {  video (video digitizer etc) }
+       IDCID_MULTIMEDIA  = 12;  {  multimedia (audio, video, etc) }
+       IDCID_DSP         = 13;  {  multi purpose DSP }
+       IDCID_BUSBRIDGE   = 14;  {  ISA bus bridge }
+       IDCID_BRIDGE      = 15;  {  PC bridge }
+       IDCID_EMULATOR    = 16;  {  some Emulator hardware }
+       IDCID_MACEMU      = 17;  {  Macintosh emulator hardware }
+       IDCID_ATARIEMU    = 18;  {  Atari emulator hardware }
+       IDCID_GFX         = 19;  {  graphics (register) }
+       IDCID_GFXRAM      = 20;  {  graphics (video RAM) }
+       IDCID_HD          = 21;  {  some HD controller }
+       IDCID_HDRAM       = 22;  {  some HD controller + RAM }
+       IDCID_IDEHD       = 23;  {  IDE controller }
+       IDCID_IDEHDRAM    = 24;  {  IDE controller + RAM }
+       IDCID_SCSIHD      = 25;  {  SCSI host adapter }
+       IDCID_RAMSCSIHD   = 26;  {  SCSI host adapter + RAM }
+       IDCID_CDROM       = 27;  {  CD-ROM interface }
+       IDCID_MODEM       = 28;  {  internal modem }
+       IDCID_ISDN        = 29;  {  internal ISDN terminal adapter }
+       IDCID_MULTIIO     = 30;  {  multi I/O (serial + parallel) }
+       IDCID_SERIAL      = 31;  {  multi serial (no parallel) }
+       IDCID_PARALLEL    = 32;  {  multi parallel (no serial) }
+       IDCID_SCANIF      = 33;  {  scanner interface }
+       IDCID_TABLET      = 34;  {  drawing tablet interface }
+       IDCID_RAM         = 35;  {  plain RAM expansion }
+       IDCID_FLASHROM    = 36;  {  Flash ROM }
+       IDCID_SCSIIDE     = 37;  {  combined SCSI/IDE controller }
+       IDCID_RAMFPU      = 38;  {  RAM expansion + FPU }
+       IDCID_GUESS       = 39;  {  name was unknown but guessed }
+       IDCID_KICKSTART   = 40;  {  KickStart }
+       IDCID_RAM32       = 41;  {  32bit RAM expansion }
+       IDCID_TURBOANDRAM = 42;  {  accelerator + RAM expansion }
+       IDCID_ACCESS      = 43;  {  access control }
+       IDCID_INTERFACE   = 44;  {  some interface }
+       IDCID_MFMHD       = 45;  {  MFM HD controller }
+       IDCID_FLOPPY      = 46;  {  floppy disk controller }
+        { Be prepared to get other numbers as well. In this case you }
+        { should assume IDCID_MISC. }
+
+{ --------------------------------------------------------------------------}
+{ Error codes }
+
+{ Positive error codes are DOS errors! }
+       IDERR_OKAY = 0;       { No error }
+       IDERR_NOLENGTH = -1;  { Buffer length is 0 ?? }
+       IDERR_BADID = -2;     { Missing or bad board ID }
+       IDERR_NOMEM = -3;     { Not enough memory }
+       IDERR_NOFD = -4;      { No fitting FD file found }
+       IDERR_OFFSET = -5;    { Function offset not found }
+       IDERR_DONE = -6;      { Done with traversing (not an error) }
+       IDERR_SECONDARY = -7; { Secondary expansion board (not an error) }
+
+{ --------------------------------------------------------------------------}
+{ That's all... }
+
+
+
+
+VAR IdentifyBase : pLibrary;
+
+FUNCTION IdExpansion(TagList : pTagItem) : LONGINT;
+FUNCTION IdHardware(Type_ : Ulong; TagList : pTagItem) : pCHAR;
+FUNCTION IdAlert(ID : Ulong; TagList : pTagItem) : LONGINT;
+FUNCTION IdFunction(LibName : pCHAR; Offset : LONGINT; TagList : pTagItem) : LONGINT;
+FUNCTION IdHardwareNum(Type_ : Ulong; TagList : pTagItem) : Ulong;
+PROCEDURE IdHardwareUpdate;
+FUNCTION IdFormatString(String_ : pCHAR; Buffer : pCHAR; Length : Ulong; Tags : pTagItem) : Ulong;
+FUNCTION IdEstimateFormatSize(String_ : pCHAR; Tags : pTagItem) : Ulong;
+
+{
+     This is functions and procedures with array of const.
+     For use with fpc 1.0 and above.
+}
+
+FUNCTION IdExpansionTags(const TagList : Array Of Const) : LONGINT;
+FUNCTION IdHardwareTags(Type_ : CARDINAL; const TagList : Array Of Const) : pCHAR;
+FUNCTION IdAlertTags(ID : CARDINAL; const TagList : Array Of Const) : LONGINT;
+FUNCTION IdFunctionTags(LibName : pCHAR; Offset : LONGINT; const TagList : Array Of Const) : LONGINT;
+FUNCTION IdHardwareNumTags(Type_ : CARDINAL; const TagList : Array Of Const) : CARDINAL;
+FUNCTION IdFormatStringTags(String_ : pCHAR; Buffer : pCHAR; Length : CARDINAL; const Tags : Array Of Const) : CARDINAL;
+FUNCTION IdEstimateFormatSizeTags(String_ : pCHAR; const Tags : Array Of Const) : CARDINAL;
+
+{
+     Overlay functions
+}
+
+FUNCTION IdFunction(LibName : string; Offset : LONGINT; TagList : pTagItem) : LONGINT;
+FUNCTION IdFormatString(String_ : string; Buffer : pCHAR; Length : Ulong; Tags : pTagItem) : Ulong;
+FUNCTION IdEstimateFormatSize(String_ : string; Tags : pTagItem) : Ulong;
+FUNCTION IdFunctionTags(LibName : string; Offset : LONGINT; const TagList : Array Of Const) : LONGINT;
+FUNCTION IdFormatStringTags(String_ : string; Buffer : pCHAR; Length : CARDINAL; const Tags : Array Of Const) : CARDINAL;
+FUNCTION IdEstimateFormatSizeTags(String_ : string; const Tags : Array Of Const) : CARDINAL;
+
+IMPLEMENTATION
+
+uses msgbox,tagsarray,pastoc;
+
+FUNCTION IdExpansion(TagList : pTagItem) : LONGINT;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	TagList,A0
+	MOVEA.L	IdentifyBase,A6
+	JSR	-030(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+FUNCTION IdHardware(Type_ : Ulong; TagList : pTagItem) : pCHAR;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVE.L	Type_,D0
+	MOVEA.L	TagList,A0
+	MOVEA.L	IdentifyBase,A6
+	JSR	-036(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+FUNCTION IdAlert(ID : Ulong; TagList : pTagItem) : LONGINT;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVE.L	ID,D0
+	MOVEA.L	TagList,A0
+	MOVEA.L	IdentifyBase,A6
+	JSR	-042(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+FUNCTION IdFunction(LibName : pCHAR; Offset : LONGINT; TagList : pTagItem) : LONGINT;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	LibName,A0
+	MOVE.L	Offset,D0
+	MOVEA.L	TagList,A1
+	MOVEA.L	IdentifyBase,A6
+	JSR	-048(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+FUNCTION IdHardwareNum(Type_ : Ulong; TagList : pTagItem) : Ulong;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVE.L	Type_,D0
+	MOVEA.L	TagList,A0
+	MOVEA.L	IdentifyBase,A6
+	JSR	-054(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+PROCEDURE IdHardwareUpdate;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	IdentifyBase,A6
+	JSR	-060(A6)
+	MOVEA.L	(A7)+,A6
+  END;
+END;
+
+FUNCTION IdFormatString(String_ : pCHAR; Buffer : pCHAR; Length : Ulong; Tags : pTagItem) : Ulong;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	String_,A0
+	MOVEA.L	Buffer,A1
+	MOVE.L	Length,D0
+	MOVEA.L	Tags,A2
+	MOVEA.L	IdentifyBase,A6
+	JSR	-066(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+FUNCTION IdEstimateFormatSize(String_ : pCHAR; Tags : pTagItem) : Ulong;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	String_,A0
+	MOVEA.L	Tags,A1
+	MOVEA.L	IdentifyBase,A6
+	JSR	-072(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+{
+ Functions and procedures with array of const go here
+}
+FUNCTION IdExpansionTags(const TagList : Array Of Const) : LONGINT;
+begin
+    IdExpansionTags := IdExpansion(readintags(TagList));
+end;
+
+FUNCTION IdHardwareTags(Type_ : CARDINAL; const TagList : Array Of Const) : pCHAR;
+begin
+    IdHardwareTags := IdHardware(Type_ , readintags(TagList));
+end;
+
+FUNCTION IdAlertTags(ID : CARDINAL; const TagList : Array Of Const) : LONGINT;
+begin
+    IdAlertTags := IdAlert(ID , readintags(TagList));
+end;
+
+FUNCTION IdFunctionTags(LibName : pCHAR; Offset : LONGINT; const TagList : Array Of Const) : LONGINT;
+begin
+    IdFunctionTags := IdFunction(LibName , Offset , readintags(TagList));
+end;
+
+FUNCTION IdHardwareNumTags(Type_ : CARDINAL; const TagList : Array Of Const) : CARDINAL;
+begin
+    IdHardwareNumTags := IdHardwareNum(Type_ , readintags(TagList));
+end;
+
+FUNCTION IdFormatStringTags(String_ : pCHAR; Buffer : pCHAR; Length : CARDINAL; const Tags : Array Of Const) : CARDINAL;
+begin
+    IdFormatStringTags := IdFormatString(String_ , Buffer , Length , readintags(Tags));
+end;
+
+FUNCTION IdEstimateFormatSizeTags(String_ : pCHAR; const Tags : Array Of Const) : CARDINAL;
+begin
+    IdEstimateFormatSizeTags := IdEstimateFormatSize(String_ , readintags(Tags));
+end;
+
+{
+     Overlay functions
+}
+
+FUNCTION IdFunction(LibName : string; Offset : LONGINT; TagList : pTagItem) : LONGINT;
+begin
+    IdFunction := IdFunction(pas2c(LibName),Offset,TagList);
+end;
+
+FUNCTION IdFormatString(String_ : string; Buffer : pCHAR; Length : Ulong; Tags : pTagItem) : Ulong;
+begin
+    IdFormatString := IdFormatString(pas2c(String_),Buffer,Length,Tags);
+end;
+
+FUNCTION IdEstimateFormatSize(String_ : string; Tags : pTagItem) : Ulong;
+begin
+    IdEstimateFormatSize := IdEstimateFormatSize(pas2c(String_),Tags);
+end;
+
+FUNCTION IdFunctionTags(LibName : string; Offset : LONGINT; const TagList : Array Of Const) : LONGINT;
+begin
+    IdFunctionTags := IdFunction(pas2c(LibName),Offset,readintags(TagList));
+end;
+
+FUNCTION IdFormatStringTags(String_ : string; Buffer : pCHAR; Length : CARDINAL; const Tags : Array Of Const) : CARDINAL;
+begin
+    IdFormatStringTags := IdFormatString(pas2c(String_),Buffer,Length,readintags(Tags));
+end;
+
+FUNCTION IdEstimateFormatSizeTags(String_ : string; const Tags : Array Of Const) : CARDINAL;
+begin
+    IdEstimateFormatSizeTags := IdEstimateFormatSize(pas2c(String_),readintags(Tags));
+end;
+
+{$I useautoopenlib.inc}
+{$ifdef use_auto_openlib}
+   {$Info Compiling autoopening of identify.library}
+
+var
+    identify_exit : Pointer;
+
+procedure CloseIdentifyLibrary;
+begin
+    ExitProc := identify_exit;
+    if IdentifyBase <> nil then begin
+       CloseLibrary(IdentifyBase);
+       IdentifyBase := nil;
+    end;
+end;
+
+const
+    VERSION : string[2] = '12';
+    LIBVERSION : Cardinal = 12;
+
+begin
+    IdentifyBase := nil;
+    IdentifyBase := OpenLibrary(IDENTIFYNAME,LIBVERSION);
+    if IdentifyBase <> nil then begin
+       identify_exit := ExitProc;
+       ExitProc := @CloseIdentifyLibrary;
+    end else begin
+        MessageBox('FPC Pascal Error',
+                   'Can''t open identify.library version ' +
+                   VERSION +
+                   chr(10) + 
+                   'Deallocating resources and closing down',
+                   'Oops');
+       halt(20);
+    end;
+{$else}
+   {$Warning No autoopening of identify.library compiled}
+   {$Info Make sure you open identify.library yourself}
+{$endif use_auto_openlib}
+
+
+END. (* UNIT IDENTIFY *)

+ 86 - 0
packages/extra/amunits/otherlibs/picasso/examples/bestmodeid.pas

@@ -0,0 +1,86 @@
+
+PROGRAM BestModeID;
+
+{***********************************************************************
+* This is example shows how to use p96BestModeIDTagList()
+*
+* tabt (Mon Aug 28 14:07:40 1995)
+***********************************************************************}
+
+{
+    Translated to fpc pascal.
+    1 Mars 2001.
+
+    Updated for fpc 1.0.7
+    08 Jan 2003.
+
+    [email protected]
+}
+
+uses exec, amigados, graphics, picasso96api, utility;
+
+Const
+   
+    template    :   pchar  =    'Width=W/N,Height=H/N,Depth=D/N';
+    vecarray    :   Array[0..2] of long = (0,0,0);
+
+    fmtstrings  :   Array [1..(Ord(RGBFB_MaxFormats)-2)] OF pchar = (
+                    'RGBFB_NONE',
+                    'RGBFB_CLUT',
+                    'RGBFB_R8G8B8',
+                    'RGBFB_B8G8R8',
+                    'RGBFB_R5G6B5PC',
+                    'RGBFB_R5G5B5PC',
+                    'RGBFB_A8R8G8B8',
+                    'RGBFB_A8B8G8R8',
+                    'RGBFB_R8G8B8A8',
+                    'RGBFB_B8G8R8A8',
+                    'RGBFB_R5G6B5',
+                    'RGBFB_R5G5B5',
+                    'RGBFB_B5G6R5PC',
+                    'RGBFB_B5G5R5PC');
+Var
+    DisplayID,
+    width,
+    height,
+    depth       :   longint;
+    rda         :   pRDArgs;
+
+Begin
+
+   width:=640;
+   height:=480;
+   depth:=24;
+
+   rda:=ReadArgs (template,Addr(vecarray),Nil);
+   If rda<>Nil Then Begin
+      If vecarray[0]<> 0 then width := long(@vecarray[0]);
+      If vecarray[1]<> 0 then height := long(@vecarray[1]);
+      If vecarray[2]<> 0 then depth := long(@vecarray[2]);
+      FreeArgs(rda);
+   End;
+
+   
+
+   DisplayID:=p96BestModeIDTags([P96BIDTAG_NominalWidth, width,
+                                 P96BIDTAG_NominalHeight, height,
+                                 P96BIDTAG_Depth, depth,
+                                 P96BIDTAG_FormatsForbidden, (RGBFF_R5G5B5 or RGBFF_R5G5B5PC or RGBFF_B5G5R5PC),
+                                 TAG_DONE]);;
+   If DisplayID>0 Then Begin
+      Writeln ('DisplayID: ', hexstr(DisplayID,8));
+      If DisplayID<>INVALID_ID Then Begin
+         Writeln ('Width: ', p96GetModeIDAttr(DisplayID, P96IDA_WIDTH));
+         Writeln ('Height: ', p96GetModeIDAttr(DisplayID, P96IDA_HEIGHT));
+         Writeln ('Depth: ', p96GetModeIDAttr(DisplayID, P96IDA_DEPTH));
+         Writeln ('BytesPerPixel: ', p96GetModeIDAttr(DisplayID, P96IDA_BYTESPERPIXEL));
+         Writeln ('BitsPerPixel: ', p96GetModeIDAttr(DisplayID, P96IDA_BITSPERPIXEL));
+         Writeln ('RGBFormat: ', fmtstrings[p96GetModeIDAttr(DisplayID,P96IDA_RGBFORMAT)+1]);
+         If p96GetModeIDAttr(DisplayID, P96IDA_ISP96)<>0 Then
+            Writeln ('Is P96: yes')
+         Else
+           Writeln ('Is P96: no');
+      End;
+   End Else
+       Writeln ('DisplayID is 0.');
+End.

+ 62 - 0
packages/extra/amunits/otherlibs/picasso/examples/modelist.pas

@@ -0,0 +1,62 @@
+Program ModeList;
+
+
+{ ***********************************************************************
+  * This is example shows how to use p96AllocModeListTagList()
+  *
+  * tabt (Sat Dec 28 03:44:35 1996)
+  *********************************************************************** }
+
+{
+    Translated to fpc pascal.
+    2 Mars 2001.
+
+    Updated for fpc 1.0.7
+    08 Jan 2003.
+
+    [email protected]
+}
+
+uses exec, amigados, picasso96api, utility;
+Const
+    template    :   pchar  =   'Width=W/N,Height=H/N,Depth=D/N';
+    vecarray    :   Array[0..2] of long = (0,0,0);
+
+Var
+    ml          :   pList;
+    width,
+    height,
+    depth       :   longint;
+    rda         :   pRDArgs;
+    mn          :   pP96Mode;
+
+Begin
+  width:=640;
+  height:=480;
+  depth:=8;
+
+  rda:=ReadArgs (template,@vecarray,Nil);
+  If rda<>Nil Then Begin
+      If vecarray[0] <> 0 then width := long(@vecarray[0]);
+      If vecarray[1] <> 0 then height := long(@vecarray[1]);
+      If vecarray[2] <> 0 then depth := long(@vecarray[2]);
+      FreeArgs(rda);
+  End;
+
+  ml:=p96AllocModeListTags([P96MA_MinWidth, width,
+                            P96MA_MinHeight, height,
+                            P96MA_MinDepth, depth,
+                            TAG_DONE]);
+
+  If ml<>Nil Then Begin
+     mn := pointer(ml^.lh_Head);
+     If mn <> Nil Then Begin
+        While mn^.Node.ln_Succ <> Nil Do Begin
+            Writeln (mn^.Description);
+            mn := pointer(mn^.Node.ln_Succ);
+        End;
+     End;
+     p96FreeModeList(ml);
+  End Else
+     Writeln ('Unable to allocate list.');
+End.

+ 92 - 0
packages/extra/amunits/otherlibs/picasso/examples/openpip.pas

@@ -0,0 +1,92 @@
+Program OpenPIP;
+
+
+{ ***********************************************************************
+  * This is an example that shows how to open a p96 PIP Window
+  * to get input events and how to paint in that window.
+  *
+  *********************************************************************** }
+
+{
+    Translated to fpc pascal.
+    3 Mars 2001.
+
+    Updated for fpc 1.0.7
+    08 Jan 2003.
+
+    [email protected]
+}
+
+uses exec, amigados, graphics, intuition, picasso96api, utility,strings;
+
+
+Const
+    WB          :   Pchar = 'Workbench';
+    template    :   Pchar = 'Width=W/N,Height=H/N,Pubscreen=PS/K';
+    vecarray    :   Array[0..2] of long = (0,0,0);
+    ltrue       :   longint = 1;
+Var
+    PubScreenName   :   Array [0..80] Of Char;
+    height,
+    width           :   longint;
+    wd              :   pWindow;
+    imsg            :   pIntuiMessage;
+    goahead         :   Boolean;
+    rp              :   pRastPort;
+    x,
+    y               :   Word;
+    rda             :   pRDArgs;
+
+Begin
+    width := 256;
+    height := 256;
+    StrCopy(@PubScreenName,WB);
+
+    rda:=ReadArgs(template,@vecarray,Nil);
+    If rda<>Nil Then Begin
+       If vecarray[0] <> 0 then width := long(@vecarray[0]);
+       If vecarray[1] <> 0 then height := long(@vecarray[1]);
+       If vecarray[2] <> 0 then StrCopy(@PubScreenName,@vecarray[2]);
+       FreeArgs(rda);
+    End;
+
+
+    wd := p96PIP_OpenTags([P96PIP_SourceFormat, long(RGBFB_R5G5B5),
+                           P96PIP_SourceWidth,256,
+                           P96PIP_SourceHeight,256,
+                           WA_Title,'Picasso96 API PIP Test',
+                           WA_Activate,lTRUE,
+                           WA_RMBTrap,lTRUE,
+                           WA_Width,Width,
+                           WA_Height,Height,
+                           WA_DragBar, lTRUE,
+                           WA_DepthGadget,lTRUE,
+                           WA_SimpleRefresh,lTRUE,
+                           WA_SizeGadget,lTRUE,
+                           WA_CloseGadget,lTRUE,
+                           WA_IDCMP,IDCMP_CLOSEWINDOW,
+                           WA_PubScreenName,@PubScreenName,
+                           TAG_DONE]);
+
+    If wd <> Nil Then Begin
+        goahead:=True;
+        rp:=Nil;
+
+        p96PIP_GetTags(wd,[P96PIP_SourceRPort, @rp, TAG_END]);
+        If rp<>Nil Then Begin
+            For y:=0 To (Height-1) Do
+            For x:=0 To (Width-1) Do
+               p96WritePixel (rp,x,y,(x*256+y)*256);
+        End Else Writeln ('No PIP rastport.');
+        While goahead Do Begin
+            WaitPort (wd^.UserPort);
+            imsg := pIntuiMessage(GetMsg (wd^.UserPort));
+            While imsg<>Nil Do Begin
+                If imsg^.IClass=IDCMP_CLOSEWINDOW Then goahead:=False;
+                ReplyMsg (pMessage(imsg));
+                imsg:=pIntuiMessage(GetMsg (wd^.UserPort));
+            End;
+        End;
+        p96PIP_Close(wd);
+    End Else Writeln ('Unable to open PIP.'); 
+End.

+ 215 - 0
packages/extra/amunits/otherlibs/picasso/examples/openscreen.pas

@@ -0,0 +1,215 @@
+
+PROGRAM OpenScreen;
+
+{***********************************************************************
+* This is an example that shows how to open a p96 Screen and a Window 
+* to get input events and how to paint on that screen.
+* Program terminates when space bar or any mouse button is pressed!
+*
+* alex (Sun Dec 29 01:42:59 1996)
+***********************************************************************}
+
+{
+    Translated to fpc pascal.
+    14 Mars 2001.
+
+    Updated for fpc 1.0.7
+    08 Jan 2003.
+
+    [email protected]
+}
+
+
+uses exec, amigados, graphics, intuition, picasso96api, utility,systemvartags;
+
+Const
+    
+    Pens        :   Array [0..0] Of integer = (NOT(0));
+    template    :   pchar  =   'Width=W/N,Height=H/N,Depth=D/N';
+    ScreenTitle :   pchar  =   'Picasso96 API Test';
+    vecarray    :   Array[0..2] of longint = (0,0,0);
+    ltrue       :   longint = 1;
+
+Var
+    
+    sc      :   pScreen;
+    wdf,
+    wdp     :   pWindow;
+    rpf,
+    rpp     :   pRastPort;
+    terminate   :   Boolean;
+    signals     :   longint;
+    format      :   RGBFTYPE;
+    x1, y1,
+    x2, y2,
+    x3, y3      :   word;
+    imsg        :   pIntuiMessage;
+    msg         :   pMessage;
+    Dimensions  :   Array [0..3] Of word;
+    Width,
+    Height,
+    Depth       :   longint;
+    rda         :   pRDArgs;
+
+procedure CleanUp(str : string);
+begin
+    if assigned(wdp) then CloseWindow(wdp);
+    if assigned(wdf) then CloseWindow(wdf);
+    if assigned(sc) then p96CloseScreen(sc);
+    if str <> '' then writeln(str);
+    halt;
+end;
+
+BEGIN
+    Width:=640;
+    Height:=480;
+    Depth:=8;
+
+    rda := ReadArgs(template,@vecarray,Nil);
+    If rda<>Nil Then Begin
+       If vecarray[0] <> 0 then Width := long(@vecarray[0]);
+       If vecarray[1] <> 0 then Height := long(@vecarray[1]);
+       If vecarray[2] <> 0 then Depth := long(@vecarray[2]);
+       FreeArgs(rda);
+    End;
+
+    sc:=p96OpenScreenTags([P96SA_Width, Width,
+			   P96SA_Height, Height,
+			   P96SA_Depth, Depth,
+			   P96SA_AutoScroll, lTRUE,
+			   P96SA_Pens, @Pens,
+			   P96SA_Title, ScreenTitle,
+			   TAG_DONE]);
+
+
+    If sc=Nil Then CleanUp('Unable to open screen.');
+  
+    Dimensions[0]:=0;
+    Dimensions[1]:=sc^.BarHeight+1;
+    Dimensions[2]:=sc^.Width;
+    Dimensions[3]:=sc^.Height-sc^.BarHeight-1;
+
+    wdp:=OpenWindowTags(NIL,[WA_CustomScreen, sc,
+                             WA_Title,'Writepixel',
+                             WA_Left, (sc^.Width DIV 2-200) DIV 2+sc^.Width DIV 2,
+                             WA_Top, (sc^.Height-sc^.BarHeight-300) DIV 2,
+                             WA_Zoom, @Dimensions,
+                             WA_Width, 200,
+	                     WA_Height, 300,
+	                     WA_MinWidth, 100,
+	                     WA_MinHeight, 100,
+	                     WA_MaxWidth, -1,
+	                     WA_MaxHeight, -1,
+	                     WA_SimpleRefresh, lTRUE,
+	                     WA_RMBTrap, lTRUE,
+	                     WA_Activate, lTRUE,
+	                     WA_CloseGadget, lTRUE,
+	                     WA_DepthGadget, lTRUE,
+	                     WA_DragBar, lTRUE,
+	                     WA_SizeGadget, lTRUE,
+	                     WA_SizeBBottom, lTRUE,
+	                     WA_GimmeZeroZero, lTRUE,
+	                     WA_ScreenTitle,ScreenTitle,
+	                     WA_IDCMP, IDCMP_RAWKEY + IDCMP_CLOSEWINDOW,
+	                     TAG_DONE]);
+
+    If wdp = Nil Then CleanUp('Unable to open window 1.');
+    
+    wdf:=OpenWindowTags(NIL,[WA_CustomScreen,sc,
+                             WA_Title, 'FillRect',
+                             WA_Left,(sc^.Width div 2-200) div 2,
+                             WA_Top,(sc^.Height-sc^.BarHeight-300)div 2,
+                             WA_Zoom, @Dimensions,
+                             WA_Width, 200,
+	                     WA_Height, 300,
+	                     WA_MinWidth, 100,
+	                     WA_MinHeight, 100,
+	                     WA_MaxWidth, -1,
+	                     WA_MaxHeight, -1,
+	                     WA_SimpleRefresh, lTRUE,
+	                     WA_RMBTrap, lTRUE,
+	                     WA_Activate, lTRUE,
+	                     WA_CloseGadget, lTRUE,
+	                     WA_DepthGadget, lTRUE,
+	                     WA_DragBar, lTRUE,
+	                     WA_SizeGadget, lTRUE,
+	                     WA_SizeBBottom, lTRUE,
+	                     WA_GimmeZeroZero, lTRUE,
+	                     WA_ScreenTitle, ScreenTitle,
+	                     WA_IDCMP, IDCMP_RAWKEY or IDCMP_CLOSEWINDOW,
+	                     TAG_DONE]);
+
+    If wdf = Nil Then CleanUp('Unable to open window 2.');
+    
+    rpf:=wdf^.RPort;
+    rpp:=wdp^.RPort;
+    terminate:=False;
+    signals:= longint((1 shl wdf^.UserPort^.mp_SigBit) or (1 shl wdp^.UserPort^.mp_SigBit));
+    format:= RGBFTYPE(p96GetBitMapAttr (sc^.RastPort.BitMap, P96BMA_RGBFORMAT));
+    
+    Randomize;
+
+    Repeat
+       x1:=Random (wdf^.Width);
+       y1:=Random (wdf^.Height);
+       x2:=Random (wdf^.Width);
+       y2:=Random (wdf^.Height);
+       If x2<x1 Then Begin
+         x3:=x2;
+         x2:=x1;
+         x1:=x3;
+       End;
+       If y2<y1 Then Begin
+         y3:=y2;
+         y2:=y1;
+         y1:=y3;
+       End;
+
+       x3:=Random (wdp^.Width);
+       y3:=Random (wdp^.Height);
+      
+       If format=RGBFB_CLUT Then Begin 
+          SetAPen (rpf, Random (255));
+          RectFill (rpf,x1,y1,x2,y2);
+          SetAPen (rpp, Random (255));
+          WritePixel (rpp,x3,y3);
+       End Else Begin 
+          p96RectFill (rpf, x1, y1, x2, y2,(Random(255) shl 16)+(Random(255) shl 8)+(Random (255)));
+          p96WritePixel (rpp, x3, y3, ((Random(255)) shl 16) or ((Random(255)) shl 8) or (Random(255)));
+       End; 
+
+       Repeat
+         imsg:=pIntuiMessage(GetMsg (wdf^.UserPort));
+         If imsg<>Nil Then Begin
+            If ((imsg^.IClass=IDCMP_CLOSEWINDOW) Or ((imsg^.IClass=IDCMP_RAWKEY) And ((imsg^.Code=$40) or (imsg^.Code=$45)))) Then
+                terminate:=True;
+            ReplyMsg (pMessage(imsg));
+         End;
+       Until imsg=Nil;
+       Repeat
+          imsg:=pIntuiMessage(GetMsg (wdp^.UserPort));
+          If imsg<>Nil Then Begin
+             If ((imsg^.IClass=IDCMP_CLOSEWINDOW) Or ((imsg^.IClass=IDCMP_RAWKEY) And ((imsg^.Code=$40) or (imsg^.Code=$45)))) Then
+                terminate:=True;
+             ReplyMsg (pMessage(imsg));
+          End;
+       Until imsg=Nil;
+
+      Until terminate;
+
+      Forbid;
+      Repeat
+         msg:=GetMsg (wdf^.UserPort);
+         If msg<>Nil Then
+            ReplyMsg (msg);
+      Until msg=Nil;
+      Repeat
+         msg:=GetMsg (wdp^.UserPort);
+         If msg<>Nil Then
+            ReplyMsg (msg);
+      Until msg=Nil;
+      Permit;
+
+    CleanUp('');
+END.
+

+ 90 - 0
packages/extra/amunits/otherlibs/picasso/examples/p96checkboards.pas

@@ -0,0 +1,90 @@
+Program P96CheckBoards;
+
+{***********************************************************************
+* This is example shows how to use p96GetRTGDataTagList and p96GetBoardDataTagList
+*
+* tabt (Sat Sep 12 23:06:28 1998)
+***********************************************************************}
+
+{
+    Translated to fpc pascal.
+    15 Mars 2001.
+
+    Updated for fpc 1.0.7
+    08 Jan 2003.
+
+    [email protected]
+}
+
+
+uses exec, amigados, graphics, picasso96api,utility,amigalib;
+
+var
+   NumBoards : Longint;
+   i, clock  : Longint;
+   tmp       : Longint;
+   RGBFormats,
+   MemorySize,
+   FreeMemory,
+   LargestFreeMemory,
+   MemoryClock,
+   MoniSwitch  : Longint;
+   BoardName   : Pchar;
+   boardtmp    : array[0..200] of char;
+
+FUNCTION GetMonitorValue(value : longint): STRING;
+BEGIN
+    IF value = 0 THEN GetMonitorValue := 'not set'
+    ELSE GetMonitorValue := 'set';
+END;
+
+begin
+   BoardName := @boardtmp;
+
+   tmp := p96GetRTGDataTags([P96RD_NumberOfBoards, @NumBoards, TAG_END]);
+
+   writeln('Looking through all boards installed for Picasso96');
+
+   for i := 0 to NumBoards-1 do begin
+       p96GetBoardDataTags(i,[P96BD_BoardName, @BoardName,
+			      P96BD_RGBFormats, @RGBFormats,
+			      P96BD_TotalMemory, @MemorySize,
+			      P96BD_FreeMemory, @FreeMemory,
+			      P96BD_LargestFreeMemory, @LargestFreeMemory,
+			      P96BD_MemoryClock, @MemoryClock,
+			      P96BD_MonitorSwitch, @MoniSwitch,
+			      TAG_END]);
+
+      writeln('--------------------------------------------------');
+      printf('Board %ld:      %s'#10,[ i, BoardName]);
+      printf('Total size of memory:     %8ld'#10,[ MemorySize]);
+      printf('Size of free memory:      %8ld'#10,[ FreeMemory]);
+      printf('Largest free chunk:       %8ld'#10,[ LargestFreeMemory]);
+      printf('Monitor switch:   %s'#10,[ GetMonitorValue(MoniSwitch)]);
+      writeln('This board supports:');
+      writeln(#9,'following rgb formats:');
+
+      if (RGBFormats and RGBFF_NONE) <> 0 then writeln(#9,#9,'PLANAR');
+      if (RGBFormats and RGBFF_CLUT) <> 0 then writeln(#9,#9,'CHUNKY');
+      if (RGBFormats and RGBFF_R5G5B5) <> 0 then writeln(#9,#9,'tR5G5B5');
+      if (RGBFormats and RGBFF_R5G5B5PC) <> 0 then writeln(#9,#9,'R5G5B5PC');
+      if (RGBFormats and RGBFF_B5G5R5PC) <> 0 then writeln(#9,#9,'B5G5R5PC');
+      if (RGBFormats and RGBFF_R5G6B5) <> 0 then writeln(#9,#9,'R5G6B5');
+      if (RGBFormats and RGBFF_R5G6B5PC) <> 0 then writeln(#9,#9,'R5G6B5PC');
+      if (RGBFormats and RGBFF_B5G6R5PC) <> 0 then writeln(#9,#9,'B5G6R5PC');
+      if (RGBFormats and RGBFF_R8G8B8) <> 0 then writeln(#9,#9,'R8G8B8');
+      if (RGBFormats and RGBFF_B8G8R8) <> 0 then writeln(#9,#9,'B8G8R8');
+      if (RGBFormats and RGBFF_A8R8G8B8) <> 0 then writeln(#9,#9,'A8R8G8B8');
+      if (RGBFormats and RGBFF_A8B8G8R8) <> 0 then writeln(#9,#9,'A8B8G8R8');
+      if (RGBFormats and RGBFF_R8G8B8A8) <> 0 then writeln(#9,#9,'R8G8B8A8');
+      if (RGBFormats and RGBFF_B8G8R8A8) <> 0 then writeln(#9,#9,'B8G8R8A8');
+      if (RGBFormats and RGBFF_Y4U2V2) <> 0 then writeln(#9,#9,'Y4U2V2');
+      if (RGBFormats and RGBFF_Y4U1V1) <> 0 then writeln(#9,#9,'Y4U1V1');
+
+      clock := (MemoryClock+50000) div 100000;
+      write(#9);
+      printf('memory clock set to %ld.%1ld MHz,'#10,[(clock div 10),(clock mod 10)]);
+
+   end;
+end.
+

+ 64 - 0
packages/extra/amunits/otherlibs/picasso/examples/requestmodeid.pas

@@ -0,0 +1,64 @@
+Program RequestModeID;
+
+
+{ ***********************************************************************
+  * This is example shows how to use p96RequestModeIDTagList()
+  *
+  * tabt (Sat Dec 28 03:44:35 1996)
+  *********************************************************************** }
+
+{
+    Translated to fpc pascal.
+    3 Mars 2001.
+
+    Updated for fpc 1.0.7
+    08 Jan 2003.
+
+    [email protected]
+}
+
+uses exec, amigados, graphics, intuition, picasso96api, utility;
+
+Const
+    template    :   pchar = 'Width=W/N,Height=H/N,Depth=D/N';
+
+    vecarray    :   Array[0..2] of longint = (0,0,0);
+
+Var
+    width,
+    height,
+    depth,
+    DisplayID   :   longint;
+    dim         :   tDimensionInfo;
+    rda         :   pRDArgs;
+
+
+Begin
+    width:=640;
+    height:=480;
+    depth:=15;
+
+    rda:=ReadArgs (template,@vecarray,Nil);
+    If rda<>Nil Then Begin
+       If vecarray[0] <> 0 then width := long(@vecarray[0]);
+       If vecarray[1] <> 0 then height := long(@vecarray[1]);
+       If vecarray[2] <> 0 then depth := long(@vecarray[2]);
+       FreeArgs(rda);
+    End;
+
+    DisplayID := p96RequestModeIDTags([P96MA_MinWidth, width,
+				       P96MA_MinHeight, height,
+				       P96MA_MinDepth, depth,
+				       P96MA_WindowTitle, 'RequestModeID Test',
+				       P96MA_FormatsAllowed, (RGBFF_CLUT or RGBFF_R5G6B5 or RGBFF_R8G8B8 or RGBFF_A8R8G8B8),
+				       TAG_DONE]);
+
+    Writeln ('DisplayID:', hexstr(DisplayID,8));
+   
+    If DisplayID <> INVALID_ID Then Begin
+        If GetDisplayInfoData(Nil, @dim ,SizeOf(tDimensionInfo),DTAG_DIMS,DisplayID) <> 0 Then
+            Writeln('Dimensions: ',dim.Nominal.MaxX-dim.Nominal.MinX+1,'x',dim.Nominal.MaxY-dim.Nominal.MinY+1,'x',dim.MaxDepth)
+        Else
+            Writeln('No Dimensioninfo.');
+    End Else Writeln('DisplayID invalid.');
+End.

File diff suppressed because it is too large
+ 0 - 0
packages/extra/amunits/otherlibs/picasso/examples/symbol.blue


File diff suppressed because it is too large
+ 0 - 0
packages/extra/amunits/otherlibs/picasso/examples/symbol.green


File diff suppressed because it is too large
+ 0 - 0
packages/extra/amunits/otherlibs/picasso/examples/symbol.red


+ 169 - 0
packages/extra/amunits/otherlibs/picasso/examples/writetruecolordata.pas

@@ -0,0 +1,169 @@
+Program WriteTrueColorData;
+
+{ ***********************************************************************
+  * This is an example that shows how to use p96WriteTrueColorData
+  * Program terminates when space bar or any mouse button is pressed!
+  *
+  * alx (Mon Dec 30 12:09:35 1996)
+  *********************************************************************** }
+
+{
+    Translated to fpc pascal.
+    14 Mars 2001.
+
+    Updated for fpc 1.0.7
+    08 Jan 2003.
+
+    [email protected]
+}
+
+uses exec, amigados, intuition, graphics, picasso96api, utility,systemvartags;
+
+
+Const
+    DataWidth   =   160;
+    DataHeight  =   160;
+    template    :   PChar = 'Width=W/N,Height=H/N,Depth=D/N';
+    vecarray    :   Array[0..2] of long = (0,0,0);
+    ltrue       :   longint = 1;
+Var
+    rda         :   pRDArgs;
+
+{ p96WriteTrueColorData only works on True- and HiColorModes }
+
+Const
+    HiColorFormats      =   (RGBFF_R5G6B5 or RGBFF_R5G5B5 or RGBFF_R5G6B5PC or RGBFF_R5G5B5PC or RGBFF_B5G6R5PC or RGBFF_B5G5R5PC);
+    TrueColorFormats    =   (RGBFF_R8G8B8 or RGBFF_B8G8R8);
+    TrueAlphaFormats    =   (RGBFF_R8G8B8A8 or RGBFF_B8G8R8A8 or RGBFF_A8R8G8B8 or RGBFF_A8B8G8R8);
+    UsefulFormats       =   (HiColorFormats or TrueColorFormats or TrueAlphaFormats);
+
+    Pens    :   Array [0..0] Of integer = (NOT(0));
+
+Var
+    sc          :   pScreen;
+    win         :   pWindow;
+    i,
+    DisplayID   :   Longint;
+    width,
+    height,
+    depth       :   Longint;
+   
+    quit        :   Boolean;
+    reddata,
+    greendata,
+    bluedata    :   Pointer;
+    tci         :   tTrueColorInfo;
+    fh          :   FileHandle;
+    imsg        :   pIntuiMessage;
+   
+
+procedure CleanUp(why : string);
+begin
+    if assigned(win) then CloseWindow(win);
+    if assigned(sc) then p96CloseScreen(sc);
+    if why <> '' then writeln(why);
+end;
+
+Begin
+
+ width:=640;
+ height:=480;
+ depth:=24;
+
+ rda:=ReadArgs (template,@vecarray,Nil);
+ If rda<>Nil Then
+ Begin
+  If vecarray[0]<>0 then width := long(@vecarray[0]);
+  If vecarray[1]<>0 then height := long(@vecarray[1]);
+  If vecarray[2]<>0 then depth := long(@vecarray[2]);
+  FreeArgs(rda);
+ End;
+
+ DisplayID := p96BestModeIDTags([P96BIDTAG_NominalWidth, width,
+			         P96BIDTAG_NominalHeight, height,
+			         P96BIDTAG_Depth, depth,
+			         P96BIDTAG_FormatsAllowed, UsefulFormats,
+			         TAG_DONE]);
+
+
+ sc := p96OpenScreenTags([P96SA_DisplayID, DisplayID,
+			  P96SA_Width, width,
+			  P96SA_Height, height,
+			  P96SA_Depth, depth,
+			  P96SA_AutoScroll, lTRUE,
+			  P96SA_Pens, @Pens,
+			  P96SA_Title, 'WriteTrueColorData Test',
+			  TAG_DONE]);
+
+if sc = nil then CleanUp('Can''t open screen');
+
+ 
+   
+
+ win := OpenWindowTags(Nil,[WA_CustomScreen, sc,
+			    WA_Backdrop, lTRUE,
+			    WA_Borderless, lTRUE,
+			    WA_SimpleRefresh, lTRUE,
+			    WA_RMBTrap, lTRUE,
+			    WA_Activate, lTRUE,
+			    WA_IDCMP, IDCMP_RAWKEY or IDCMP_MOUSEBUTTONS,
+			    TAG_END]);
+
+ if win = nil then CleanUp('Can''t open window');  
+ 
+ quit:=False;
+ reddata:=AllocVec(DataWidth*DataHeight, MEMF_ANY);
+ greendata:=AllocVec(DataWidth*DataHeight, MEMF_ANY);
+ bluedata:=AllocVec(DataWidth*DataHeight, MEMF_ANY);
+ If (reddata<>Nil) And (greendata<>Nil) And (bluedata<>Nil) Then Begin
+      tci.PixelDistance:=1;
+      tci.BytesPerRow:=DataWidth;
+      tci.RedData:=reddata;
+      tci.GreenData:=greendata;
+      tci.BlueData:=bluedata;
+
+      fh:=DOSOpen ('Symbol.red',MODE_OLDFILE);
+      If fh = 0 Then Begin
+       i:=DOSRead(fh, reddata, DataWidth*DataHeight);
+       DOSClose(fh);
+      End;
+
+      fh:=DOSOpen ('Symbol.green',MODE_OLDFILE);
+      If fh = 0 Then Begin
+       i:=DOSRead(fh, greendata, DataWidth*DataHeight);
+       DOSClose(fh);
+      End;
+
+      fh:=DOSOpen ('Symbol.blue',MODE_OLDFILE);
+      If fh = 0 Then Begin
+       i:=DOSRead(fh, bluedata, DataWidth*DataHeight);
+       DOSClose(fh);
+      End;
+
+      { paint something on the screen }
+
+      p96WriteTrueColorData(@tci,0,0,win^.RPort,50,50,DataWidth,DataHeight);
+
+     End;
+
+     FreeVec(reddata);
+     FreeVec(greendata);
+     FreeVec(bluedata);
+
+     { wait for input }
+
+     While Not(quit) Do Begin
+         WaitPort(win^.UserPort);
+         imsg:=pIntuiMessage(GetMsg (win^.UserPort));
+         While(imsg<>Nil) Do Begin
+            If ((imsg^.IClass=IDCMP_MOUSEBUTTONS) or ((imsg^.IClass=IDCMP_RAWKEY) And (imsg^.Code=$40))) Then Begin
+        { press MOUSEBUTTONS or SPACE bar to end program }
+            quit:=True;
+            End;
+            ReplyMsg(pMessage(imsg));
+            imsg:=pIntuiMessage(GetMsg (win^.UserPort));
+         End;
+     End;
+
+  CleanUp(''); 
+End.

+ 903 - 0
packages/extra/amunits/otherlibs/picasso/units/picasso96api.pas

@@ -0,0 +1,903 @@
+{
+    This file is part of the Free Pascal run time library.
+
+    A file in Amiga system run time library.
+    Copyright (c) 2001-2003 by Nils Sjoholm
+    member of the Amiga RTL development team.
+
+    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.
+
+ **********************************************************************}
+
+ {
+    History:
+
+    First version of unit Picasso96Api
+    27 Feb. 2001.
+
+    Updated to fpc 1.0.7
+    08 Jan 2003
+    
+    Added the defines use_amiga_smartlink and
+    use_auto_openlib.
+    12 Jan 2003.
+
+    [email protected]
+
+}
+{$mode objfpc}
+{$I useamigasmartlink.inc}
+{$ifdef use_amiga_smartlink}
+    {$smartlink on}
+{$endif use_amiga_smartlink}
+
+UNIT PICASSO96API;
+
+INTERFACE
+USES Exec, utility, graphics, intuition;
+
+  {  Picasso96.h -- include File
+      (C) Copyright 1996-98 Alexander Kneer & Tobias Abt
+      All Rights Reserved.
+    }
+
+ const
+       P96NAME  : PChar = 'Picasso96API.library';
+{************************************************************************}
+{ Types for RGBFormat used
+ }
+
+  type
+
+     RGBFTYPE = (
+       RGBFB_NONE,
+       RGBFB_CLUT,
+       RGBFB_R8G8B8,
+       RGBFB_B8G8R8,
+       RGBFB_R5G6B5PC,
+       RGBFB_R5G5B5PC,
+       RGBFB_A8R8G8B8,
+       RGBFB_A8B8G8R8,
+       RGBFB_R8G8B8A8,
+       RGBFB_B8G8R8A8,
+       RGBFB_R5G6B5,
+       RGBFB_R5G5B5,
+       RGBFB_B5G6R5PC,
+       RGBFB_B5G5R5PC,
+       RGBFB_Y4U2V2,
+       RGBFB_Y4U1V1,
+       RGBFB_MaxFormats);
+
+                                                                      
+
+  const
+     RGBFF_NONE = 1 shl 0;
+     RGBFF_CLUT = 1 shl 1;
+     RGBFF_R8G8B8 = 1 shl 2;
+     RGBFF_B8G8R8 = 1 shl 3;
+     RGBFF_R5G6B5PC = 1 shl 4;
+     RGBFF_R5G5B5PC = 1 shl 5;
+     RGBFF_A8R8G8B8 = 1 shl 6;
+     RGBFF_A8B8G8R8 = 1 shl 7;
+     RGBFF_R8G8B8A8 = 1 shl 8;
+     RGBFF_B8G8R8A8 = 1 shl 9;
+     RGBFF_R5G6B5 = 1 shl 10;
+     RGBFF_R5G5B5 = 1 shl 11;
+     RGBFF_B5G6R5PC = 1 shl 12;
+     RGBFF_B5G5R5PC = 1 shl 13;
+     RGBFF_Y4U2V2 = 1 shl 14;
+     RGBFF_Y4U1V1 = 1 shl 15;
+     RGBFF_HICOLOR = ((((RGBFF_R5G6B5PC or RGBFF_R5G5B5PC) or RGBFF_R5G6B5) or RGBFF_R5G5B5) or RGBFF_B5G6R5PC) or RGBFF_B5G5R5PC;
+     RGBFF_TRUECOLOR = RGBFF_R8G8B8 or RGBFF_B8G8R8;
+     RGBFF_TRUEALPHA = ((RGBFF_A8R8G8B8 or RGBFF_A8B8G8R8) or RGBFF_R8G8B8A8) or RGBFF_B8G8R8A8;
+    {                                                                       }
+    { Flags for p96AllocBitMap
+    }
+    BMF_USERPRIVATE = $8000;
+    { private user bitmap that will never
+  	be put to a board, but may be used as a temporary render buffer and accessed
+  	with OS blit functions, too. Bitmaps allocated with this flag do not need to
+  	be locked.  }
+     
+  {                                                                       }
+  { Attributes for p96GetBitMapAttr
+    }
+     P96BMA_WIDTH = 0;
+      P96BMA_HEIGHT = 1;
+      P96BMA_DEPTH = 2;
+      P96BMA_MEMORY = 3;
+      P96BMA_BYTESPERROW = 4;
+      P96BMA_BYTESPERPIXEL = 5;
+      P96BMA_BITSPERPIXEL = 6;
+      P96BMA_RGBFORMAT = 7;
+      P96BMA_ISP96 = 8;
+      P96BMA_ISONBOARD = 9;
+      P96BMA_BOARDMEMBASE = 10;
+      P96BMA_BOARDIOBASE = 11;
+      P96BMA_BOARDMEMIOBASE = 12;
+ 
+  {                                                                       }
+  { Attributes for p96GetModeIDAttr
+    }
+    
+       P96IDA_WIDTH = 0;
+       P96IDA_HEIGHT = 1;
+       P96IDA_DEPTH = 2;
+       P96IDA_BYTESPERPIXEL = 3;
+       P96IDA_BITSPERPIXEL = 4;
+       P96IDA_RGBFORMAT = 5;
+       P96IDA_ISP96 = 6;
+       P96IDA_BOARDNUMBER = 7;
+       P96IDA_STDBYTESPERROW = 8;
+       P96IDA_BOARDNAME = 9;
+       P96IDA_COMPATIBLEFORMATS = 10;
+       P96IDA_VIDEOCOMPATIBLE = 11;
+       P96IDA_PABLOIVCOMPATIBLE = 12;
+       P96IDA_PALOMAIVCOMPATIBLE = 13;
+ 
+     {                                                                       }
+     { Tags for p96BestModeIDTagList
+     }
+     P96BIDTAG_Dummy = TAG_USER + 96;
+     P96BIDTAG_FormatsAllowed = P96BIDTAG_Dummy + $0001;
+     P96BIDTAG_FormatsForbidden = P96BIDTAG_Dummy + $0002;
+     P96BIDTAG_NominalWidth = P96BIDTAG_Dummy + $0003;
+     P96BIDTAG_NominalHeight = P96BIDTAG_Dummy + $0004;
+     P96BIDTAG_Depth = P96BIDTAG_Dummy + $0005;
+     P96BIDTAG_VideoCompatible = P96BIDTAG_Dummy + $0006;
+     P96BIDTAG_PabloIVCompatible = P96BIDTAG_Dummy + $0007;
+     P96BIDTAG_PalomaIVCompatible = P96BIDTAG_Dummy + $0008;
+     {                                                                       }
+     { Tags for p96RequestModeIDTagList
+     }
+     P96MA_Dummy = (TAG_USER + $10000) + 96;
+     P96MA_MinWidth = P96MA_Dummy + $0001;
+     P96MA_MinHeight = P96MA_Dummy + $0002;
+     P96MA_MinDepth = P96MA_Dummy + $0003;
+     P96MA_MaxWidth = P96MA_Dummy + $0004;
+     P96MA_MaxHeight = P96MA_Dummy + $0005;
+     P96MA_MaxDepth = P96MA_Dummy + $0006;
+     P96MA_DisplayID = P96MA_Dummy + $0007;
+     P96MA_FormatsAllowed = P96MA_Dummy + $0008;
+     P96MA_FormatsForbidden = P96MA_Dummy + $0009;
+     P96MA_WindowTitle = P96MA_Dummy + $000a;
+     P96MA_OKText = P96MA_Dummy + $000b;
+     P96MA_CancelText = P96MA_Dummy + $000c;
+     P96MA_Window = P96MA_Dummy + $000d;
+     P96MA_PubScreenName = P96MA_Dummy + $000e;
+     P96MA_Screen = P96MA_Dummy + $000f;
+     P96MA_VideoCompatible = P96MA_Dummy + $0010;
+     P96MA_PabloIVCompatible = P96MA_Dummy + $0011;
+     P96MA_PalomaIVCompatible = P96MA_Dummy + $0012;
+     {                                                                       }
+     { Tags for p96OpenScreenTagList
+     }
+     P96SA_Dummy = (TAG_USER + $20000) + 96;
+     P96SA_Left = P96SA_Dummy + $0001;
+     P96SA_Top = P96SA_Dummy + $0002;
+     P96SA_Width = P96SA_Dummy + $0003;
+     P96SA_Height = P96SA_Dummy + $0004;
+     P96SA_Depth = P96SA_Dummy + $0005;
+     P96SA_DetailPen = P96SA_Dummy + $0006;
+     P96SA_BlockPen = P96SA_Dummy + $0007;
+     P96SA_Title = P96SA_Dummy + $0008;
+     P96SA_Colors = P96SA_Dummy + $0009;
+     P96SA_ErrorCode = P96SA_Dummy + $000a;
+     P96SA_Font = P96SA_Dummy + $000b;
+     P96SA_SysFont = P96SA_Dummy + $000c;
+     P96SA_Type = P96SA_Dummy + $000d;
+     P96SA_BitMap = P96SA_Dummy + $000e;
+     P96SA_PubName = P96SA_Dummy + $000f;
+     P96SA_PubSig = P96SA_Dummy + $0010;
+     P96SA_PubTask = P96SA_Dummy + $0011;
+     P96SA_DisplayID = P96SA_Dummy + $0012;
+     P96SA_DClip = P96SA_Dummy + $0013;
+     P96SA_ShowTitle = P96SA_Dummy + $0014;
+     P96SA_Behind = P96SA_Dummy + $0015;
+     P96SA_Quiet = P96SA_Dummy + $0016;
+     P96SA_AutoScroll = P96SA_Dummy + $0017;
+     P96SA_Pens = P96SA_Dummy + $0018;
+     P96SA_SharePens = P96SA_Dummy + $0019;
+     P96SA_BackFill = P96SA_Dummy + $001a;
+     P96SA_Colors32 = P96SA_Dummy + $001b;
+     P96SA_VideoControl = P96SA_Dummy + $001c;
+     P96SA_RGBFormat = P96SA_Dummy + $001d;
+     P96SA_NoSprite = P96SA_Dummy + $001e;
+     P96SA_NoMemory = P96SA_Dummy + $001f;
+     P96SA_RenderFunc = P96SA_Dummy + $0020;
+     P96SA_SaveFunc = P96SA_Dummy + $0021;
+     P96SA_UserData = P96SA_Dummy + $0022;
+     P96SA_Alignment = P96SA_Dummy + $0023;
+     P96SA_FixedScreen = P96SA_Dummy + $0024;
+     P96SA_Exclusive = P96SA_Dummy + $0025;
+     P96SA_ConstantBytesPerRow = P96SA_Dummy + $0026;
+     {                                                                       }
+     { 
+     }
+     MODENAMELENGTH = 48;
+
+  type
+
+     pubyte = ^ubyte;
+
+     PP96Mode = ^TP96Mode;
+     TP96Mode = record
+          Node : tNode;
+          Description : array[0..(MODENAMELENGTH)-1] of char;
+          Width : UWORD;
+          Height : UWORD;
+          Depth : UWORD;
+          DisplayID : ULONG;
+       end;
+
+     {                                                                       }
+     { Structure to describe graphics data
+    
+       short description of the entries:
+       Memory:        pointer to graphics data
+       BytesPerRow:   distance in bytes between one pixel and its neighbour up
+                      or down.
+       pad:           private, not used.
+       RGBFormat:     RGBFormat of the data.
+    }
+     PRenderInfo = ^TRenderInfo;
+     TRenderInfo = record
+          Memory : APTR;
+          BytesPerRow : WORD;
+          pad : WORD;
+          RGBFormat : RGBFTYPE;
+       end;
+
+     {                                                                       }
+     { Structure for p96WriteTrueColorData() and p96ReadTrueColorData()
+    
+       short description of the entries:
+       PixelDistance: distance in bytes between the red (must be the same as
+                      for the green or blue) component of one pixel and its
+                      next neighbour to the left or right.
+       BytesPerRow:   distance in bytes between the red (must be the same as
+                      for the green or blue) component of one pixel and its
+                      next neighbour up or down.
+       RedData:       pointer to the red component of the upper left pixel.
+       GreenData, BlueData: the same as above.
+    
+       examples (for an array width of 640 pixels):
+       a) separate arrays for each color:
+           (1, 640, red, green, blue );
+       b) plain 24 bit RGB data:
+           (3, 640 3, array, array+1, array+2 );
+       c) 24 bit data, arranged as ARGB:
+           (4, 640 4, array+1, array+2, array+3 );
+     }
+     PTrueColorInfo = ^TTrueColorInfo;
+     TTrueColorInfo = record
+          PixelDistance : ULONG;
+          BytesPerRow : ULONG;
+          RedData : PUBYTE;
+          GreenData : PUBYTE;
+          BlueData : PUBYTE;
+       end;
+
+     {                                                                       }
+     { Tags for PIPs
+     }
+
+  const
+     P96PIP_Dummy = (TAG_USER + $30000) + 96;
+     { RGBFTYPE (I)  }
+     P96PIP_SourceFormat = P96PIP_Dummy + 1;
+     { struct BitMap   (G)  }
+     P96PIP_SourceBitMap = P96PIP_Dummy + 2;
+     { struct RastPort   (G)  }
+     P96PIP_SourceRPort = P96PIP_Dummy + 3;
+     { ULONG (I)  }
+     P96PIP_SourceWidth = P96PIP_Dummy + 4;
+     { ULONG (I)  }
+     P96PIP_SourceHeight = P96PIP_Dummy + 5;
+     { ULONG (I) default: PIPT_MemoryWindow  }
+     P96PIP_Type = P96PIP_Dummy + 6;
+     { LONG  (I)  }
+     P96PIP_ErrorCode = P96PIP_Dummy + 7;
+     { ULONG (IGS) default: 0  }
+     P96PIP_Brightness = P96PIP_Dummy + 8;
+     { ULONG (I) default: 0  }
+     P96PIP_Left = P96PIP_Dummy + 9;
+     { ULONG (I) default: 0  }
+     P96PIP_Top = P96PIP_Dummy + 10;
+     { ULONG (I) default: inner width of window  }
+     P96PIP_Width = P96PIP_Dummy + 11;
+     { ULONG (I) default: inner height of window  }
+     P96PIP_Height = P96PIP_Dummy + 12;
+     { ULONG (I) default: PIPRel_Width|PIPRel_Height  }
+     P96PIP_Relativity = P96PIP_Dummy + 13;
+     { struct ColorSpec   (IS)
+       ti_Data is an array of struct ColorSpec,
+       terminated by ColorIndex = -1.  Specifies
+       initial screen palette colors.
+       Also see P96PIP_Colors32.
+       This only works with CLUT PIPs on non-CLUT
+       screens. For CLUT PIPs on CLUT screens the
+       PIP colors share the screen palette.
+      }
+     P96PIP_Colors = P96PIP_Dummy + 14;
+     { ULONG  (IS)
+       Tag to set the palette colors at 32 bits-per-gun.
+       ti_Data is a pointer   to a table to be passed to
+       the graphics.library/LoadRGB32() function.
+       This format supports both runs of color
+       registers and sparse registers.  See the
+       autodoc for that function for full details.
+       Any color set here has precedence over
+       the same register set by P96PIP_Colors.
+       This only works with CLUT PIPs on non-CLUT
+       screens. For CLUT PIPs on CLUT screens the
+       PIP colors share the screen palette.
+     }
+     P96PIP_Colors32 = P96PIP_Dummy + 15;
+     P96PIP_NoMemory = P96PIP_Dummy + 16;
+     P96PIP_RenderFunc = P96PIP_Dummy + 17;
+     P96PIP_SaveFunc = P96PIP_Dummy + 18;
+     P96PIP_UserData = P96PIP_Dummy + 19;
+     P96PIP_Alignment = P96PIP_Dummy + 20;
+     P96PIP_ConstantBytesPerRow = P96PIP_Dummy + 21;
+     P96PIP_AllowCropping = P96PIP_Dummy + 22;
+     P96PIP_InitialIntScaling = P96PIP_Dummy + 23;
+
+     PIPT_MemoryWindow = 0;
+     PIPT_VideoWindow = 1;
+     PIPT_NUMTYPES = 2;
+
+     P96PIPT_MemoryWindow = PIPT_MemoryWindow;
+     P96PIPT_VideoWindow = PIPT_VideoWindow;
+     { P96PIP_Left is relative to the right side (negative value)  }
+     PIPRel_Right = 1;
+     { P96PIP_Top is relative to the bottom (negative value)  }
+     PIPRel_Bottom = 2;
+     { P96PIP_Width is amount of pixels not used by PIP at the
+       right side of the window (negative value)  }
+     PIPRel_Width = 4;
+     { P96PIP_Height is amount of pixels not used by PIP at the
+       window bottom (negative value)  }
+     PIPRel_Height = 8;
+     { couldn't get normal memory  }
+     PIPERR_NOMEMORY = 1;
+     { Failed to attach to a screen  }
+     PIPERR_ATTACHFAIL = 2;
+     { PIP not available for other reason	 }
+     PIPERR_NOTAVAILABLE = 3;
+     { couldn't get a free pen for occlusion  }
+     PIPERR_OUTOFPENS = 4;
+     { type, width, height or format invalid  }
+     PIPERR_BADDIMENSIONS = 5;
+     { couldn't open window  }
+     PIPERR_NOWINDOW = 6;
+     { specified alignment is not ok  }
+     PIPERR_BADALIGNMENT = 7;
+     { pip would be cropped, but isn't allowed to  }
+     PIPERR_CROPPED = 8;
+     {                                                                       }
+     { Tags for P96GetRTGDataTagList
+     }
+     P96RD_Dummy = (TAG_USER + $40000) + 96;
+     P96RD_NumberOfBoards = P96RD_Dummy + 1;
+     {                                                                       }
+     { Tags for P96GetBoardDataTagList
+     }
+     P96BD_Dummy = (TAG_USER + $50000) + 96;
+     P96BD_BoardName = P96BD_Dummy + 1;
+     P96BD_ChipName = P96BD_Dummy + 2;
+     P96BD_TotalMemory = P96BD_Dummy + 4;
+     P96BD_FreeMemory = P96BD_Dummy + 5;
+     P96BD_LargestFreeMemory = P96BD_Dummy + 6;
+     P96BD_MonitorSwitch = P96BD_Dummy + 7;
+     P96BD_RGBFormats = P96BD_Dummy + 8;
+     P96BD_MemoryClock = P96BD_Dummy + 9;
+     {                                                                       }
+     {                                                                       }
+
+
+VAR P96Base : pLibrary;
+
+FUNCTION p96AllocBitMap(SizeX : Ulong; SizeY : Ulong; Depth : Ulong; Flags : Ulong; Friend : pBitMap; RGBFormat : RGBFTYPE) : pBitMap;
+PROCEDURE p96FreeBitMap(BitMap : pBitMap);
+FUNCTION p96GetBitMapAttr(BitMap : pBitMap; Attribute : Ulong) : Ulong;
+FUNCTION p96LockBitMap(BitMap : pBitMap; Buffer : pCHAR; Size : Ulong) : LONGINT;
+PROCEDURE p96UnlockBitMap(BitMap : pBitMap; Lock : LONGINT);
+FUNCTION p96BestModeIDTagList(Tags : pTagItem) : Ulong;
+FUNCTION p96RequestModeIDTagList(Tags : pTagItem) : Ulong;
+FUNCTION p96AllocModeListTagList(Tags : pTagItem) : pList;
+PROCEDURE p96FreeModeList(List : pList);
+FUNCTION p96GetModeIDAttr(Mode : Ulong; Attribute : Ulong) : Ulong;
+FUNCTION p96OpenScreenTagList(Tags : pTagItem) : pScreen;
+FUNCTION p96CloseScreen(Screen : pScreen) : BOOLEAN;
+PROCEDURE p96WritePixelArray(ri : pRenderInfo; SrcX : WORD; SrcY : WORD; rp : pRastPort; DestX : WORD; DestY : WORD; SizeX : WORD; SizeY : WORD);
+PROCEDURE p96ReadPixelArray(ri : pRenderInfo; DestX : WORD; DestY : WORD; rp : pRastPort; SrcX : WORD; SrcY : WORD; SizeX : WORD; SizeY : WORD);
+FUNCTION p96WritePixel(rp : pRastPort; x : WORD; y : WORD; color : Ulong) : Ulong;
+FUNCTION p96ReadPixel(rp : pRastPort; x : WORD; y : WORD) : Ulong;
+PROCEDURE p96RectFill(rp : pRastPort; MinX : WORD; MinY : WORD; MaxX : WORD; MaxY : WORD; color : Ulong);
+PROCEDURE p96WriteTrueColorData(tci : pTrueColorInfo; SrcX : WORD; SrcY : WORD; rp : pRastPort; DestX : WORD; DestY : WORD; SizeX : WORD; SizeY : WORD);
+PROCEDURE p96ReadTrueColorData(tci : pTrueColorInfo; DestX : WORD; DestY : WORD; rp : pRastPort; SrcX : WORD; SrcY : WORD; SizeX : WORD; SizeY : WORD);
+FUNCTION p96PIP_OpenTagList(Tags : pTagItem) : pWindow;
+FUNCTION p96PIP_Close(Window : pWindow) : BOOLEAN;
+FUNCTION p96PIP_SetTagList(Window : pWindow; Tags : pTagItem) : LONGINT;
+FUNCTION p96PIP_GetTagList(Window : pWindow; Tags : pTagItem) : LONGINT;
+FUNCTION p96GetRTGDataTagList(Tags : pTagItem) : LONGINT;
+FUNCTION p96GetBoardDataTagList(Board : Ulong; Tags : pTagItem) : LONGINT;
+FUNCTION p96EncodeColor(RGBFormat : RGBFTYPE; Color : Ulong) : Ulong;
+
+{
+ Functions and procedures with array of const go here
+}
+FUNCTION p96BestModeIDTags(const Tags : Array Of Const) : CARDINAL;
+FUNCTION p96RequestModeIDTags(const Tags : Array Of Const) : CARDINAL;
+FUNCTION p96AllocModeListTags(const Tags : Array Of Const) : pList;
+FUNCTION p96OpenScreenTags(const Tags : Array Of Const) : pScreen;
+FUNCTION p96PIP_OpenTags(const Tags : Array Of Const) : pWindow;
+FUNCTION p96PIP_SetTags(Window : pWindow; const Tags : Array Of Const) : LONGINT;
+FUNCTION p96PIP_GetTags(Window : pWindow; const Tags : Array Of Const) : LONGINT;
+FUNCTION p96GetRTGDataTags(const Tags : Array Of Const) : LONGINT;
+FUNCTION p96GetBoardDataTags(Board : CARDINAL; const Tags : Array Of Const) : LONGINT;
+
+
+IMPLEMENTATION
+
+uses msgbox,tagsarray;
+
+FUNCTION p96AllocBitMap(SizeX : Ulong; SizeY : Ulong; Depth : Ulong; Flags : Ulong; Friend : pBitMap; RGBFormat : RGBFTYPE) : pBitMap;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVE.L	SizeX,D0
+	MOVE.L	SizeY,D1
+	MOVE.L	Depth,D2
+	MOVE.L	Flags,D3
+	MOVEA.L	Friend,A0
+	MOVE.L	RGBFormat,D7
+	MOVEA.L	P96Base,A6
+	JSR	-030(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+PROCEDURE p96FreeBitMap(BitMap : pBitMap);
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	BitMap,A0
+	MOVEA.L	P96Base,A6
+	JSR	-036(A6)
+	MOVEA.L	(A7)+,A6
+  END;
+END;
+
+FUNCTION p96GetBitMapAttr(BitMap : pBitMap; Attribute : Ulong) : Ulong;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	BitMap,A0
+	MOVE.L	Attribute,D0
+	MOVEA.L	P96Base,A6
+	JSR	-042(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+FUNCTION p96LockBitMap(BitMap : pBitMap; Buffer : pCHAR; Size : Ulong) : LONGINT;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	BitMap,A0
+	MOVEA.L	Buffer,A1
+	MOVE.L	Size,D0
+	MOVEA.L	P96Base,A6
+	JSR	-048(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+PROCEDURE p96UnlockBitMap(BitMap : pBitMap; Lock : LONGINT);
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	BitMap,A0
+	MOVE.L	Lock,D0
+	MOVEA.L	P96Base,A6
+	JSR	-054(A6)
+	MOVEA.L	(A7)+,A6
+  END;
+END;
+
+FUNCTION p96BestModeIDTagList(Tags : pTagItem) : Ulong;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	Tags,A0
+	MOVEA.L	P96Base,A6
+	JSR	-060(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+FUNCTION p96RequestModeIDTagList(Tags : pTagItem) : Ulong;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	Tags,A0
+	MOVEA.L	P96Base,A6
+	JSR	-066(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+FUNCTION p96AllocModeListTagList(Tags : pTagItem) : pList;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	Tags,A0
+	MOVEA.L	P96Base,A6
+	JSR	-072(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+PROCEDURE p96FreeModeList(List : pList);
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	List,A0
+	MOVEA.L	P96Base,A6
+	JSR	-078(A6)
+	MOVEA.L	(A7)+,A6
+  END;
+END;
+
+FUNCTION p96GetModeIDAttr(Mode : Ulong; Attribute : Ulong) : Ulong;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVE.L	Mode,D0
+	MOVE.L	Attribute,D1
+	MOVEA.L	P96Base,A6
+	JSR	-084(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+FUNCTION p96OpenScreenTagList(Tags : pTagItem) : pScreen;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	Tags,A0
+	MOVEA.L	P96Base,A6
+	JSR	-090(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+FUNCTION p96CloseScreen(Screen : pScreen) : BOOLEAN;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	Screen,A0
+	MOVEA.L	P96Base,A6
+	JSR	-096(A6)
+	MOVEA.L	(A7)+,A6
+	TST.W	D0
+	BEQ.B	@end
+	MOVEQ	#1,D0
+  @end:	MOVE.B	D0,@RESULT
+  END;
+END;
+
+PROCEDURE p96WritePixelArray(ri : pRenderInfo; SrcX : WORD; SrcY : WORD; rp : pRastPort; DestX : WORD; DestY : WORD; SizeX : WORD; SizeY : WORD);
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	ri,A0
+	MOVE.L	SrcX,D0
+	MOVE.L	SrcY,D1
+	MOVEA.L	rp,A1
+	MOVE.L	DestX,D2
+	MOVE.L	DestY,D3
+	MOVE.L	SizeX,D4
+	MOVE.L	SizeY,D5
+	MOVEA.L	P96Base,A6
+	JSR	-102(A6)
+	MOVEA.L	(A7)+,A6
+  END;
+END;
+
+PROCEDURE p96ReadPixelArray(ri : pRenderInfo; DestX : WORD; DestY : WORD; rp : pRastPort; SrcX : WORD; SrcY : WORD; SizeX : WORD; SizeY : WORD);
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	ri,A0
+	MOVE.L	DestX,D0
+	MOVE.L	DestY,D1
+	MOVEA.L	rp,A1
+	MOVE.L	SrcX,D2
+	MOVE.L	SrcY,D3
+	MOVE.L	SizeX,D4
+	MOVE.L	SizeY,D5
+	MOVEA.L	P96Base,A6
+	JSR	-108(A6)
+	MOVEA.L	(A7)+,A6
+  END;
+END;
+
+FUNCTION p96WritePixel(rp : pRastPort; x : WORD; y : WORD; color : Ulong) : Ulong;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	rp,A1
+	MOVE.L	x,D0
+	MOVE.L	y,D1
+	MOVE.L	color,D2
+	MOVEA.L	P96Base,A6
+	JSR	-114(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+FUNCTION p96ReadPixel(rp : pRastPort; x : WORD; y : WORD) : Ulong;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	rp,A1
+	MOVE.L	x,D0
+	MOVE.L	y,D1
+	MOVEA.L	P96Base,A6
+	JSR	-120(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+PROCEDURE p96RectFill(rp : pRastPort; MinX : WORD; MinY : WORD; MaxX : WORD; MaxY : WORD; color : Ulong);
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	rp,A1
+	MOVE.L	MinX,D0
+	MOVE.L	MinY,D1
+	MOVE.L	MaxX,D2
+	MOVE.L	MaxY,D3
+	MOVE.L	color,D4
+	MOVEA.L	P96Base,A6
+	JSR	-126(A6)
+	MOVEA.L	(A7)+,A6
+  END;
+END;
+
+PROCEDURE p96WriteTrueColorData(tci : pTrueColorInfo; SrcX : WORD; SrcY : WORD; rp : pRastPort; DestX : WORD; DestY : WORD; SizeX : WORD; SizeY : WORD);
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	tci,A0
+	MOVE.L	SrcX,D0
+	MOVE.L	SrcY,D1
+	MOVEA.L	rp,A1
+	MOVE.L	DestX,D2
+	MOVE.L	DestY,D3
+	MOVE.L	SizeX,D4
+	MOVE.L	SizeY,D5
+	MOVEA.L	P96Base,A6
+	JSR	-132(A6)
+	MOVEA.L	(A7)+,A6
+  END;
+END;
+
+PROCEDURE p96ReadTrueColorData(tci : pTrueColorInfo; DestX : WORD; DestY : WORD; rp : pRastPort; SrcX : WORD; SrcY : WORD; SizeX : WORD; SizeY : WORD);
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	tci,A0
+	MOVE.L	DestX,D0
+	MOVE.L	DestY,D1
+	MOVEA.L	rp,A1
+	MOVE.L	SrcX,D2
+	MOVE.L	SrcY,D3
+	MOVE.L	SizeX,D4
+	MOVE.L	SizeY,D5
+	MOVEA.L	P96Base,A6
+	JSR	-138(A6)
+	MOVEA.L	(A7)+,A6
+  END;
+END;
+
+FUNCTION p96PIP_OpenTagList(Tags : pTagItem) : pWindow;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	Tags,A0
+	MOVEA.L	P96Base,A6
+	JSR	-144(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+FUNCTION p96PIP_Close(Window : pWindow) : BOOLEAN;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	Window,A0
+	MOVEA.L	P96Base,A6
+	JSR	-150(A6)
+	MOVEA.L	(A7)+,A6
+	TST.W	D0
+	BEQ.B	@end
+	MOVEQ	#1,D0
+  @end:	MOVE.B	D0,@RESULT
+  END;
+END;
+
+FUNCTION p96PIP_SetTagList(Window : pWindow; Tags : pTagItem) : LONGINT;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	Window,A0
+	MOVEA.L	Tags,A1
+	MOVEA.L	P96Base,A6
+	JSR	-156(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+FUNCTION p96PIP_GetTagList(Window : pWindow; Tags : pTagItem) : LONGINT;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	Window,A0
+	MOVEA.L	Tags,A1
+	MOVEA.L	P96Base,A6
+	JSR	-162(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+FUNCTION p96GetRTGDataTagList(Tags : pTagItem) : LONGINT;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	Tags,A0
+	MOVEA.L	P96Base,A6
+	JSR	-180(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+FUNCTION p96GetBoardDataTagList(Board : Ulong; Tags : pTagItem) : LONGINT;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVE.L	Board,D0
+	MOVEA.L	Tags,A0
+	MOVEA.L	P96Base,A6
+	JSR	-186(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+FUNCTION p96EncodeColor(RGBFormat : RGBFTYPE; Color : Ulong) : Ulong;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVE.L	RGBFormat,D0
+	MOVE.L	Color,D1
+	MOVEA.L	P96Base,A6
+	JSR	-192(A6)
+	MOVEA.L	(A7)+,A6
+	MOVE.L	D0,@RESULT
+  END;
+END;
+
+
+{
+ Functions and procedures with array of const go here
+}
+FUNCTION p96BestModeIDTags(const Tags : Array Of Const) : CARDINAL;
+begin
+    p96BestModeIDTags := p96BestModeIDTagList(readintags(Tags));
+end;
+
+FUNCTION p96RequestModeIDTags(const Tags : Array Of Const) : CARDINAL;
+begin
+    p96RequestModeIDTags := p96RequestModeIDTagList(readintags(Tags));
+end;
+
+FUNCTION p96AllocModeListTags(const Tags : Array Of Const) : pList;
+begin
+    p96AllocModeListTags := p96AllocModeListTagList(readintags(Tags));
+end;
+
+FUNCTION p96OpenScreenTags(const Tags : Array Of Const) : pScreen;
+begin
+    p96OpenScreenTags := p96OpenScreenTagList(readintags(Tags));
+end;
+
+FUNCTION p96PIP_OpenTags(const Tags : Array Of Const) : pWindow;
+begin
+    p96PIP_OpenTags := p96PIP_OpenTagList(readintags(Tags));
+end;
+
+FUNCTION p96PIP_SetTags(Window : pWindow; const Tags : Array Of Const) : LONGINT;
+begin
+    p96PIP_SetTags := p96PIP_SetTagList(Window , readintags(Tags));
+end;
+
+FUNCTION p96PIP_GetTags(Window : pWindow; const Tags : Array Of Const) : LONGINT;
+begin
+    p96PIP_GetTags := p96PIP_GetTagList(Window , readintags(Tags));
+end;
+
+FUNCTION p96GetRTGDataTags(const Tags : Array Of Const) : LONGINT;
+begin
+    p96GetRTGDataTags := p96GetRTGDataTagList(readintags(Tags));
+end;
+
+FUNCTION p96GetBoardDataTags(Board : CARDINAL; const Tags : Array Of Const) : LONGINT;
+begin
+    p96GetBoardDataTags := p96GetBoardDataTagList(Board , readintags(Tags));
+end;
+
+
+{$I useautoopenlib.inc}
+{$ifdef use_auto_openlib}
+   {$Info Compiling autoopening of picasso96api.library}
+
+var
+    picasso96_exit : pointer;
+
+procedure ClosePicasso96Library;
+begin
+    ExitProc := picasso96_exit;
+    if P96Base <> nil then begin
+       CloseLibrary(P96Base);
+       P96Base := nil;
+    end;
+end;
+
+const
+    VERSION : string[2] = '2';
+    LIBVERSION = 2;
+
+begin
+    P96Base := nil;
+    P96Base := OpenLibrary(P96NAME,LIBVERSION);
+    if P96Base <> nil then begin
+       picasso96_exit := ExitProc;
+       ExitProc := @ClosePicasso96Library;
+    end else begin
+        MessageBox('FPC Pascal Error',
+                   'Can''t open Piccaso96Api.library version ' +
+                   VERSION +
+                   chr(10) + 
+                   'Deallocating resources and closing down',
+                   'Oops');
+       halt(20);
+    end;
+{$else}
+   {$Warning No autoopening of picasso96api.library compiled}
+   {$Info Make sure you open picasso96api.library yourself}
+{$endif use_auto_openlib}
+
+END. (* UNIT PICASSO96API *)

+ 411 - 0
packages/extra/amunits/otherlibs/reqtools/examples/rtdemo.pas

@@ -0,0 +1,411 @@
+PROGRAM RTDemo;
+
+
+(*
+**  This is a straight translation from demo.c
+**  in the reqtools archive.
+**
+**  Check this demo for tips on how to use
+**  reqtools in FPC Pascal.
+**
+**  [email protected]  (Nils Sjoholm)
+**
+*)
+
+{
+    History:
+    
+    Changed to use the new stuff in unit reqtools.pas.
+    Removed the array values, will use unit longarray
+    instead. Cleaned up the code a bit.
+    
+    09 Dec 2002.
+    [email protected]
+    
+}
+
+uses reqtools, strings, utility,longarray;
+
+
+
+CONST
+    DISKINSERTED=$00008000;
+
+
+VAR
+    filereq         : prtFileRequester;
+    fontreq         : prtFontRequester;
+    scrnreq         : prtScreenModeRequester;
+    filelist        : prtFileList;
+    buffer          : PChar;
+    filename        : PChar;
+    dummy           : PChar;
+    dummy2          : PChar;
+    longnum         : Longint;
+    ret             : Longint;
+    color           : Longint;
+    undertag        : Array [0..1] of tTagItem;
+
+FUNCTION GetScrollValue(value : INTEGER): STRING;
+BEGIN
+    IF value = 0 THEN GetScrollValue := 'Off'
+    ELSE GetScrollValue := 'On';
+END;
+
+PROCEDURE CleanUp;
+BEGIN
+    if assigned(dummy) then StrDispose(dummy);
+    if assigned(dummy2) then StrDispose(dummy2);
+    if assigned(buffer) then StrDispose(buffer);
+    if assigned(filename) then StrDispose(filename);
+END;
+
+BEGIN
+    dummy:= StrAlloc(400);
+    dummy2 := StrAlloc(200);
+
+    undertag[0].ti_Tag  := RT_UnderScore;
+    undertag[0].ti_Data := Longint(byte('_'));
+    undertag[1].ti_Tag  := TAG_END;
+
+    rtEZRequestA('ReqTools 2.0 Demo' + #10 +
+           '~~~~~~~~~~~~~~~~~' + #10 +
+           '''reqtools.library'' offers several' + #10 +
+           'different types of requesters:','Let''s see them', NIL, NIL, NIL);
+
+    rtEZRequestA('NUMBER 1:' + #10 + 'The larch :-)',
+                     'Be serious!', NIL, NIL, NIL);
+
+    rtEZRequestA('NUMBER 1:' + #10 + 'String requester' + #10 + 'function:rtGetString()',
+                     'Show me', NIL, NIL, NIL);
+
+    buffer:= StrAlloc(128);      { This should alloc'd to maxchars + 1 }
+
+    StrPCopy(buffer, 'A bit of text');
+
+    ret := rtGetStringA (buffer, 127, 'Enter anything:', NIL, NIL);
+
+    IF (ret=0) THEN
+        rtEZRequestA('You entered nothing','I''m sorry', NIL, NIL, NIL)
+    ELSE
+        rtEZRequestA('You entered this string:' + #10 + '%s','So I did', NIL,
+        readinlongs([buffer]),NIL);
+
+    ret := rtGetString(buffer, 127, 'Enter anything:', NIL,[
+                RTGS_GadFmt, ' _Ok |New _2.0 feature!|_Cancel',
+                RTGS_TextFmt,'These are two new features of ReqTools 2.0:' + #10
+                + 'Text above the entry gadget and more than' + #10 + 'one response gadget.',
+                TAG_MORE, @undertag]);
+
+
+
+    IF ret=2 THEN
+        rtEZRequestA('Yep, this is a new' + #10 + 'ReqTools 2.0 feature!',
+                       'Oh boy!',NIL,NIL,NIL);
+
+    ret := rtGetString(buffer, 127, 'Enter anything:',NIL,[
+                        RTGS_GadFmt,' _Ok | _Abort |_Cancel',
+                        RTGS_TextFmt,'New is also the ability to switch off the' + #10 +
+                        'backfill pattern.  You can also center the' + #10 +
+                        'text above the entry gadget.' + #10 +
+                        'These new features are also available in' + #10 +
+                        'the rtGetLong() requester.',
+                        RTGS_BackFill, FALSE,
+                        RTGS_Flags, GSREQF_CENTERTEXT + GSREQF_HIGHLIGHTTEXT,
+                        TAG_MORE, @undertag]);
+
+    IF ret = 2 THEN
+        rtEZRequestA('What!! You pressed abort!?!' + #10 + 'You must be joking :-)',
+                             'Ok, Continue',NIL,NIL,NIL);
+
+    rtEZRequestA ('NUMBER 2:' + #10 + 'Number requester' + #10 + 'function:rtGetLong()',
+                     'Show me', NIL, NIL, NIL);
+
+    ret := rtGetLong(longnum, 'Enter a number:',NIL,[
+                      RTGL_ShowDefault, FALSE,
+                      RTGL_Min, 0,
+                      RTGL_Max, 666,
+                      TAG_DONE]);
+
+    IF(ret=0) THEN
+        rtEZRequestA('You entered nothing','I''m sorry', NIL, NIL, NIL)
+    ELSE
+        rtEZRequestA('The number You entered was:'  + #10 + '%ld' ,
+                     'So it was', NIL, readinlongs([longnum]), NIL);
+
+    rtEZRequestA ('NUMBER 3:' + #10 + 'Notification requester, the requester' + #10 +
+                         'you''ve been using all the time!' + #10 +
+                         'function: rtEZRequestA()','Show me more', NIL, NIL, NIL);
+
+    rtEZRequestA ('Simplest usage: some body text and' + #10 + 'a single centered gadget.',
+                         'Got it', NIL, NIL, NIL);
+
+    ret := 0;
+    WHILE ret = 0 DO BEGIN
+        ret := rtEZRequestA ('You can also use two gadgets to' + #10 +
+                             'ask the user something' + #10 +
+                             'Do you understand?',
+                             'Of course|Not really', NIL, NIL, NIL);
+        IF ret = 0 THEN rtEZRequestA ('You are not one of the brightest are you?' +
+                                       #10 + 'We''ll try again...',
+                                      'Ok', NIL, NIL, NIL);
+    END;
+
+    rtEZRequestA ('Great, we''ll continue then.', 'Fine', NIL, NIL, NIL);
+
+    ret:=rtEZRequestA ('You can also put up a requester with' + #10 +
+                       'three choices.' + #10 +
+                       'How do you like the demo so far ?',
+                       'Great|So so|Rubbish', NIL, NIL, NIL);
+    CASE ret OF
+        0:  rtEZRequestA ('Too bad, I really hoped you' + #10 + 'would like it better.',
+                               'So what', NIL, NIL, NIL);
+
+        1:  rtEZRequestA ('I''m glad you like it so much.','Fine', NIL, NIL, NIL);
+
+        2:  rtEZRequestA ('Maybe if you run the demo again' + #10 + 'you''ll REALLY like it.',
+                               'Perhaps', NIL, NIL, NIL);
+    END;
+
+    ret := rtEZRequest('The number of responses is not limited to three' + #10 +
+                            'as you can see.  The gadgets are labeled with' + #10 +
+                            'the ''Return'' code from rtEZRequestA().' + #10 +
+                            'Pressing ''Return'' will choose 4, note that' + #10 +
+                            '4''s button text is printed in boldface.',
+                            '1|2|3|4|5|0', NIL, NIL,[
+                            RTEZ_DefaultResponse, 4,
+                            TAG_DONE]);
+
+    rtEZRequestA('You picked ''%ld''.', 'How true', NIL, readinlongs([ret]),NIL);
+
+    {
+      If i used just a string for this text is will be truncated
+      after 255 chars. There are no strpcat in strings so we
+      have to use two buffers and then use strcat.
+      Could also try ansistring.
+    }
+    strpcopy(dummy,'New for Release 2.0 of ReqTools (V38) is' + #10 +
+                   'the possibility to define characters in the' + #10 +
+                   'buttons as keyboard shortcuts.' + #10 +
+                   'As you can see these characters are underlined.' + #10 +
+                   'Pressing shift while still holding down the key' + #10 +
+                   'will cancel the shortcut.' + #10);
+    {
+      The second buffer.
+    }
+    strpcopy(dummy2,'Note that in other requesters a string gadget may' + #10 +
+                   'be active.  To use the keyboard shortcuts there' + #10 +
+                   'you have to keep the Right Amiga key pressed down.');
+    {
+      Now put them together
+    }
+    strcat(dummy,dummy2);
+
+    rtEZRequestA(dummy,'_Great|_Fantastic|_Swell|Oh _Boy',NIL,NIL,@undertag);
+
+    rtEZRequestA('You may also use C-style formatting codes in the body text.' + #10 +
+                        'Like this:' + #10 +  + #10 +
+                        'The number %%ld is written %%s. will give:' + #10 +  + #10 +
+                        'The number %ld is written %s.' + #10 +  + #10 +
+                        'if you also pass ''5'' and ''five'' to rtEZRequestA().',
+                        '_Proceed',NIL,readinlongs([5,'five']),@undertag);
+
+    ret := rtEZRequest('It is also possible to pass extra IDCMP flags' + #10 +
+                        'that will satisfy rtEZRequest(). This requester' + #10 +
+                        'has had DISKINSERTED passed to it.' + #10 +
+                        '(Try inserting a disk).', '_Continue', NIL,NIL,[
+                        RT_IDCMPFlags, DISKINSERTED,
+                        TAG_MORE,@undertag]);
+
+    IF ((ret = DISKINSERTED)) THEN
+        rtEZRequestA('You inserted a disk.', 'I did', NIL, NIL, NIL)
+    ELSE
+        rtEZRequestA('You Used the ''Continue'' gadget' + #10 +
+                          'to satisfy the requester.','I did', NIL, NIL, NIL);
+
+    rtEZRequest('Finally, it is possible to specify the position' + #10 +
+                        'of the requester.' + #10 +
+                        'E.g. at the top left of the screen, like this.' + #10 +
+                        'This works for all requesters, not just rtEZRequest()!',
+                        '_Amazing', NIL,NIL,[
+			RT_ReqPos, REQPOS_TOPLEFTSCR,
+                        TAG_MORE,@undertag]);
+
+    rtEZRequest('Alternatively, you can center the' + #10 +
+                        'requester on the screen.' + #10 +
+                        'Check out ''reqtools.doc'' for all the possibilities.',
+                        'I''ll do that', NIL,NIL,[
+                        RT_ReqPos, REQPOS_CENTERSCR,
+                        TAG_MORE,@undertag]);
+
+
+    ret := rtEZRequestA('NUMBER 4:' + #10 + 'File requester' + #10 + 'function: rtFileRequest()',
+                          '_Demonstrate', NIL, NIL, @undertag);
+
+    filereq := rtAllocRequestA(RT_FILEREQ, NIL);
+
+    IF (filereq<>NIL) THEN BEGIN
+        filename := StrAlloc(80);
+        strpcopy (filename, '');
+        {
+          We have to cast rtFileRequester to an Longint
+          to keep the compiler happy.
+        }
+        ret := Longint(rtFileRequestA(filereq, filename, 'Pick a file', NIL));
+        IF (ret)<>0 THEN begin
+            rtEZRequestA('You picked the file:' + #10 + '%s' + #10 + 'in directory:'
+                                + #10 + '%s', 'Right', NIL, readinlongs([
+				                          filename,filereq^.Dir]),NIL);
+        END
+        ELSE
+            rtEZRequestA('You didn''t pick a file.', 'No', NIL, NIL, NIL);
+
+        rtEZRequestA('The file requester has the ability' + #10 +
+                     'to allow you to pick more than one' + #10 +
+                     'file (use Shift to extend-select).' + #10 +
+                     'Note the extra gadgets you get.',
+                     '_Interesting', NIL,NIL, @undertag);
+
+        filelist := rtFileRequest(filereq,filename,'Pick some files',[
+                                   RTFI_Flags, FREQF_MULTISELECT,
+                                   TAG_END]);
+
+        IF filelist <> NIL THEN BEGIN
+            rtEZRequestA('You selected some files, this is' + #10 +
+                          'the first one:' + #10 +
+                          '"%s"' + #10 +
+                          'All the files are returned as a linked' + #10 +
+                          'list (see demo.c and reqtools.h).',
+                          'Aha', NIL, readinlongs([filelist^.Name]),NIL);
+            (* Traverse all selected files *)
+            (*
+            tempflist = flist;
+            while (tempflist) {
+                DoSomething (tempflist->Name, tempflist->StrLen);
+                tempflist = tempflist->Next;
+                }
+            *)
+            (* Free filelist when no longer needed! *)
+            rtFreeFileList(filelist);
+        END;
+        rtFreeRequest(filereq);
+    END
+    ELSE
+        rtEZRequestA('Out of memory!', 'Oh boy!', NIL, NIL, NIL);
+
+    rtEZRequestA('The file requester can be used' + #10 + 'as a directory requester as well.',
+                    'Let''s _see that', NIL, NIL, @undertag);
+
+    filereq := rtAllocRequestA(RT_FILEREQ, NIL);
+    IF (filereq<>NIL) THEN BEGIN
+
+         ret := Longint(rtFileRequest(filereq, filename, 'Pick a directory',[
+                                       RTFI_Flags, FREQF_NOFILES,
+                                       TAG_END]));
+
+         IF(ret=1) THEN begin
+             rtEZRequestA('You picked the directory:' + #10 +'%s',
+                          'Right', NIL, readinlongs([filereq^.Dir]), NIL);
+         end ELSE
+             rtEZRequestA('You didn''t pick a directory.', 'No', NIL, NIL, NIL);
+
+         rtFreeRequest(filereq);
+    END
+    ELSE
+         ret := rtEZRequestA('Out of memory','No',NIL,NIL,NIL);
+
+    rtEZRequestA('NUMBER 5:' + #10 +' Font requester' + #10 + 'function:rtFontRequest()',
+                          'Show', NIL, NIL, NIL);
+
+    fontreq := rtAllocRequestA(RT_FONTREQ, NIL);
+    IF (fontreq<>NIL) THEN BEGIN
+         fontreq^.Flags := FREQF_STYLE OR FREQF_COLORFONTS;
+         ret := rtFontRequestA (fontreq, 'Pick a font', NIL);
+         IF(ret<>0) THEN begin
+             rtEZRequestA('You picked the font:' + #10 + '%s' + #10 + 'with size:' +
+                          #10 + '%ld',
+                         'Right', NIL, readinlongs([fontreq^.Attr.ta_Name,
+			                            fontreq^.Attr.ta_YSize]),NIL);
+         end ELSE
+             ret := rtEZRequestA('You didn''t pick a font','I know', NIL, NIL, NIL);
+         rtFreeRequest(fontreq);
+    END
+    ELSE
+         rtEZRequestA('Out of memory!', 'Oh boy!', NIL, NIL, NIL);
+
+    rtEZRequestA('NUMBER 6:' + #10 + 'Palette requester' + #10 + 'function:rtPaletteRequest()',
+                 '_Proceed', NIL,NIL, @undertag);
+
+    color := rtPaletteRequestA('Change palette',NIL,NIL);
+    IF (color = -1) THEN
+        rtEZRequestA('You canceled.' + #10 + 'No nice colors to be picked ?',
+                         'Nah', NIL, NIL, NIL)
+    ELSE begin
+        rtEZRequestA('You picked color number %ld.', 'Sure did',
+                         NIL, readinlongs([color]), NIL);
+    END;
+
+    rtEZRequestA('NUMBER 7: (ReqTools 2.0)' + #10 +
+                 'Volume requester' + #10 +
+                 'function: rtFileRequest() with' + #10 +
+                 'RTFI_VolumeRequest tag.',
+                 '_Show me', NIL, NIL, @undertag);
+
+    filereq := rtAllocRequestA(RT_FILEREQ,NIL);
+    IF (filereq <> NIL) THEN BEGIN
+
+        ret := Longint(rtFileRequest(filereq,NIL,'Pick a volume!',[
+                                      RTFI_VolumeRequest,0,
+                                      TAG_END]));
+        IF (ret = 1) THEN begin
+            rtEZRequestA('You picked the volume:' + #10 + '%s',
+                        'Right',NIL,readinlongs([filereq^.Dir]),NIL);
+        end
+        ELSE
+            rtEZRequestA('You didn''t pick a volume.','I did not',NIL,NIL,NIL);
+        rtFreeRequest(filereq);
+    END
+    ELSE
+        rtEZRequestA('Out of memory','Oh boy!',NIL,NIL,NIL);
+
+    rtEZRequestA('NUMBER 8: (ReqTools 2.0)' + #10 +
+                 'Screen mode requester' + #10 +
+                 'function: rtScreenModeRequest()' + #10 +
+                 'Only available on Kickstart 2.0!',
+                 '_Proceed', NIL, NIL, @undertag);
+
+    scrnreq := rtAllocRequestA (RT_SCREENMODEREQ, NIL);
+    IF (scrnreq<>NIL) THEN BEGIN
+
+        ret := rtScreenModeRequest( scrnreq, 'Pick a screen mode:',[
+                                     RTSC_Flags, SCREQF_DEPTHGAD OR SCREQF_SIZEGADS OR
+                                     SCREQF_AUTOSCROLLGAD OR SCREQF_OVERSCANGAD,
+                                     TAG_END]);
+
+        IF(ret=1) THEN BEGIN
+            rtEZRequestA('You picked this mode:' + #10 +
+                         'ModeID  : 0x%lx' + #10 +
+                         'Size    : %ld x %ld' + #10 +
+                         'Depth   : %ld' + #10 +
+                         'Overscan: %ld' + #10 +
+                         'AutoScroll %s',
+                         'Right', NIL, 
+			 readinlongs([scrnreq^.DisplayID,
+                                      scrnreq^.DisplayWidth,
+                                      scrnreq^.DisplayHeight,
+                                      scrnreq^.DisplayDepth,
+                                      scrnreq^.OverscanType,
+                                      GetScrollValue(scrnreq^.AutoScroll)]),NIL);
+        END
+        ELSE
+            rtEZRequestA('You didn''t pick a screen mode.', 'Sorry', NIL, NIL, NIL);
+        rtFreeRequest (scrnreq);
+    END
+    ELSE
+    rtEZRequestA('Out of memory!', 'Oh boy!', NIL, NIL, NIL);
+
+
+    rtEZRequestA('That''s it!' + #10 + 'Hope you enjoyed the demo', '_Sure did', NIL,
+                    NIL,@undertag);
+    CleanUp;
+END.

+ 1164 - 0
packages/extra/amunits/otherlibs/reqtools/units/reqtools.pas

@@ -0,0 +1,1164 @@
+{
+    This file is part of the Free Pascal run time library.
+
+    A file in Amiga system run time library.
+    Copyright (c) 1998-2002 by Nils Sjoholm
+    member of the Amiga RTL development team.
+
+    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.
+
+ **********************************************************************}
+{
+    History:
+    Added overlay functions for Pchar->Strings, functions
+    and procedures.
+    14 Jul 2000.
+
+    Added MessageBox for error report.
+    31 Jul 2000.
+
+    Added functions and procedures with array of const.
+    For use with fpc 1.0.
+    07 Dec 2002.   
+
+    Added the defines use_amiga_smartlink and
+    use_auto_openlib.
+    12 Jan 2003.
+    
+    [email protected]
+}
+
+{$mode objfpc}
+{$I useamigasmartlink.inc}
+{$ifdef use_amiga_smartlink}
+    {$smartlink on}
+{$endif use_amiga_smartlink}
+
+UNIT REQTOOLS;
+
+
+INTERFACE
+
+USES Exec, intuition, amigados, diskfont, graphics, utility;
+
+
+
+{***********************
+*                      *
+*     Preferences      *
+*                      *
+***********************}
+
+CONST   RTPREF_FILEREQ          = 0;
+        RTPREF_FONTREQ          = 1;
+        RTPREF_PALETTEREQ       = 2;
+        RTPREF_SCREENMODEREQ    = 3;
+        RTPREF_VOLUMEREQ        = 4;
+        RTPREF_OTHERREQ         = 5;
+        RTPREF_NR_OF_REQ        = 6;
+
+Type
+    pReqDefaults = ^tReqDefaults;
+    tReqDefaults = Record
+        Size       : ULONG;
+        ReqPos     : ULONG;
+        LeftOffset : WORD;
+        TopOffset  : WORD;
+        MinEntries : WORD;
+        MaxEntries : WORD;
+    END;
+
+    pReqToolsPrefs = ^tReqToolsPrefs;
+    tReqToolsPrefs = Record
+    { Size of preferences (_without_ this field and the semaphore) }
+        PrefsSize      : ULONG;
+        PrefsSemaphore : tSignalSemaphore;
+    { Start of real preferences }
+        Flags          : ULONG;
+        ReqDefaults   : ARRAY [0..RTPREF_NR_OF_REQ-1] OF tReqDefaults;
+    END;
+
+CONST
+     RTPREFS_SIZE = 100;
+
+{ Flags }
+
+     RTPRB_DIRSFIRST       = 0;
+     RTPRF_DIRSFIRST       = 1;
+     RTPRB_DIRSMIXED       = 1;
+     RTPRF_DIRSMIXED       = 2;
+     RTPRB_IMMSORT         = 2;
+     RTPRF_IMMSORT         = 4;
+     RTPRB_NOSCRTOFRONT    = 3;
+     RTPRF_NOSCRTOFRONT    = 8;
+     RTPRB_NOLED           = 4;
+     RTPRF_NOLED           = 16;
+     RTPRB_DEFAULTFONT     = 5;
+     RTPRF_DEFAULTFONT     = 32;
+     RTPRB_DOWHEEL         = 6;
+     RTPRF_DOWHEEL         = 64;
+     RTPRB_FKEYS           = 7;
+     RTPRF_FKEYS           = 128;
+     RTPRB_FANCYWHEEL      = 8;
+     RTPRF_FANCYWHEEL      = 256;
+     RTPRB_MMBPARENT       = 9;
+     RTPRF_MMBPARENT       = 512;
+
+{***********************
+*                      *
+*     Library Base     *
+*                      *
+***********************}
+
+Const
+    
+    REQTOOLSNAME  : PChar = 'reqtools.library';
+    REQTOOLSVERSION = 38;
+
+Type
+
+    pReqToolsBase = ^tReqToolsBase;
+    tReqToolsBase = Record
+        LibNode           : pLibrary;
+        RTFlags           : Byte;
+        Pad               : Array[0..2] of Byte;
+        SegList           : BPTR;
+
+        { The following library bases may be read and used by your program }
+
+        IntuitionBase     : pLibrary;
+        GfxBase           : pLibrary;
+        DOSBase           : pLibrary;
+
+        { Next two library bases are only (and always) valid on Kickstart 2.0!
+          (1.3 version of reqtools also initializes these when run on 2.0) }
+
+        GadToolsBase      : pLibrary;
+        UtilityBase       : pLibrary;
+
+        { PRIVATE FIELDS, THESE WILL CHANGE FROM RELEASE TO RELEASE! }
+
+        { The RealOpenCnt is for the buffered AvailFonts feature.  Since
+          Kickstart 3.0 offers low memory handlers a release of ReqTools for 3.0
+          will not use this field and start using the normal OpenCnt again. }
+
+        RealOpenCnt       : WORD;
+        AvailFontsLock    : WORD;
+        AvailFontsHeader : pAvailFontsHeader;
+        FontsAssignType   : ULONG;
+        FontsAssignLock   : BPTR;
+        FontsAssignList   : pAssignList;
+        ReqToolsPrefs    : tReqToolsPrefs;
+        prefspad          : WORD;
+    end;
+  
+
+Const
+
+{ types of requesters, for rtAllocRequestA() }
+
+    RT_FILEREQ       = 0;
+    RT_REQINFO       = 1;
+    RT_FONTREQ       = 2;
+    { (V38) }
+    RT_SCREENMODEREQ = 3;
+
+{***********************
+*                      *
+*    File requester    *
+*                      *
+***********************}
+
+type
+
+{ structure _MUST_ be allocated with rtAllocRequest() }
+
+    prtFileRequester = ^trtFileRequester;
+    trtFileRequester  = Record
+         ReqPos      : ULONG;
+         LeftOffset  : WORD;
+         TopOffset   : WORD;
+         Flags       : ULONG;
+
+         { OBSOLETE IN V38! DON'T USE! } Hook: pHook;
+
+         Dir         : STRPTR;     { READ ONLY! Change with rtChangeReqAttrA()! }
+         MatchPat    : STRPTR;     { READ ONLY! Change with rtChangeReqAttrA()! }
+         DefaultFont : pTextFont;
+         WaitPointer : ULONG;
+         { (V38) }
+         LockWindow  : ULONG;
+         ShareIDCMP  : ULONG;
+         IntuiMsgFunc: pHook;
+         reserved1   : WORD;
+         reserved2   : WORD;
+         reserved3   : WORD;
+         ReqHeight   : WORD;     { READ ONLY! Use RTFI_Height tag! }
+         { Private data follows! HANDS OFF }
+    end;
+   
+
+{ returned by rtFileRequestA() if multiselect is enabled,
+  free list with rtFreeFileList() }
+
+    prtFileList = ^trtFileList;
+    trtFileList = Record
+         Next    : prtFileList;
+         StrLen  : ULONG;        { -1 for directories }
+         Name    : STRPTR;
+    end;
+   
+{ structure passed to RTFI_FilterFunc callback hook by
+   volume requester (see RTFI_VolumeRequest tag) }
+
+    prtVolumeEntry = ^trtVolumeEntry;
+    trtVolumeEntry = Record
+        Type_ : ULONG;           { DLT_DEVICE or DLT_DIRECTORY }
+        Name  : STRPTR;
+    END;
+
+{***********************
+*                      *
+*    Font requester    *
+*                      *
+***********************}
+
+{ structure _MUST_ be allocated with rtAllocRequest() }
+
+    prtFontRequester = ^trtFontRequester;
+    trtFontRequester = Record
+         ReqPos        : ULONG;
+         LeftOffset    : WORD;
+         TopOffset     : WORD;
+         Flags         : ULONG;
+         { OBSOLETE IN V38! DON'T USE! } Hook: pHook;
+         Attr          : tTextAttr; { READ ONLY! }
+         DefaultFont   : pTextFont;
+         WaitPointer   : ULONG;
+         { (V38) }
+         LockWindow    : ULONG;
+         ShareIDCMP    : ULONG;
+         IntuiMsgFunc  : pHook;
+         reserved1     : WORD;
+         reserved2     : WORD;
+         reserved3     : WORD;
+         ReqHeight     : WORD; { READ ONLY!  Use RTFO_Height tag! }
+         { Private data follows! HANDS OFF }
+    end;
+    
+
+{*************************
+*                        *
+*  ScreenMode requester  *
+*                        *
+*************************}
+
+{ structure _MUST_ be allocated with rtAllocRequest() }
+
+    prtScreenModeRequester = ^trtScreenModeRequester;
+    trtScreenModeRequester = Record
+         ReqPos      : ULONG;
+         LeftOffset  : WORD;
+         TopOffset   : WORD;
+         Flags       : ULONG;
+         private1    : ULONG;
+         DisplayID   : ULONG;  { READ ONLY! }
+         DisplayWidth: WORD;    { READ ONLY! }
+         DisplayHeight: WORD;   { READ ONLY! }
+         DefaultFont : pTextFont;
+         WaitPointer : ULONG;
+         LockWindow  : ULONG;
+         ShareIDCMP  : ULONG;
+         IntuiMsgFunc: pHook;
+         reserved1   : WORD;
+         reserved2   : WORD;
+         reserved3   : WORD;
+         ReqHeight   : WORD;    { READ ONLY!  Use RTSC_Height tag! }
+         DisplayDepth: WORD;    { READ ONLY! }
+         OverscanType: WORD;    { READ ONLY! }
+         AutoScroll  : ULONG;  { READ ONLY! }
+         { Private data follows! HANDS OFF }
+    end;
+    
+
+{***********************
+*                      *
+*    Requester Info    *
+*                      *
+***********************}
+
+{ for rtEZRequestA(), rtGetLongA(), rtGetStringA() and rtPaletteRequestA(),
+   _MUST_ be allocated with rtAllocRequest() }
+
+    prtReqInfo = ^trtReqInfo;
+    trtReqInfo = Record
+         ReqPos      : ULONG;
+         LeftOffset  : WORD;
+         TopOffset   : WORD;
+         Width       : ULONG;        { not for rtEZRequestA() }
+         ReqTitle    : STRPTR;         { currently only for rtEZRequestA() }
+         Flags       : ULONG;        { currently only for rtEZRequestA() }
+         DefaultFont : pTextFont;    { currently only for rtPaletteRequestA() }
+         WaitPointer : ULONG;
+         { (V38) }
+         LockWindow  : ULONG;
+         ShareIDCMP  : ULONG;
+         IntuiMsgFunc: pHook;
+         { structure may be extended in future }
+     end;
+    
+
+{***********************
+*                      *
+*     Handler Info     *
+*                      *
+***********************}
+
+{ for rtReqHandlerA(), will be allocated for you when you use
+   the RT_ReqHandler tag, never try to allocate this yourself! }
+
+    prtHandlerInfo = ^trtHandlerInfo;
+    trtHandlerInfo = Record
+         private1  : ULONG;
+         WaitMask  : ULONG;
+         DoNotWait : ULONG;
+         { Private data follows, HANDS OFF }
+    end;
+    
+
+Const
+
+{ possible return codes from rtReqHandlerA() }
+
+    CALL_HANDLER = $80000000;
+
+{*************************************
+*                                    *
+*                TAGS                *
+*                                    *
+*************************************}
+
+    RT_TagBase = TAG_USER;
+
+{ *** tags understood by most requester functions *** }
+
+RT_Window       = $80000001; { Optional pointer to window }
+RT_IDCMPFlags   = $80000002; { idcmp flags requester should abort on (useful for 
+IDCMP_DISKINSERTED) }
+RT_ReqPos       = $80000003; { position of requester window (see below) - default 
+REQPOS_POINTER }
+RT_LeftOffset   = $80000004; { signal mask to wait for abort signal }
+RT_TopOffset    = $80000005; { topedge offset of requester relative to position 
+specified by RT_ReqPos }
+RT_PubScrName   = $80000006; { name of public screen to put requester on (Kickstart 
+2.0 only!) }
+RT_Screen       = $80000007; { address of screen to put requester on }
+RT_ReqHandler   = $80000008; { tagdata must hold the address of (!) an APTR variable }
+RT_DefaultFont  = $80000009; { font to use when screen font is rejected, _MUST_ be 
+fixed-width font! pTextFont , not pTextAttr ) - default GfxBase^.DefaultFont }
+
+RT_WaitPointer  = $8000000A; { boolean to set the standard wait pointer in window - 
+default FALSE }
+RT_Underscore   = $8000000B; { (V38) char preceding keyboard shortcut characters (will 
+be underlined) }
+RT_ShareIDCMP   = $8000000C; { (V38) share IDCMP port with window - default FALSE }
+RT_LockWindow   = $8000000D; { (V38) lock window and set standard wait pointer - 
+default FALSE }
+RT_ScreenToFront= $8000000E; { (V38) boolean to make requester's screen pop to front - 
+default TRUE }
+RT_TextAttr     = $8000000F; { (V38) Requester should use this font - default: screen 
+font }
+RT_IntuiMsgFunc = $80000010; { (V38) call this hook for every IDCMP message not for 
+requester }
+RT_Locale       = $80000011; { (V38) Locale ReqTools should use for text }
+
+{ *** tags specific to rtEZRequestA *** }
+RTEZ_ReqTitle   = $80000014; { title of requester window - english default "Request" 
+or "Information" }
+                             { ($80000015) reserved }
+RTEZ_Flags      = $80000016; { various flags (see below) }
+RTEZ_DefaultResponse
+                = $80000017; { default response (activated by pressing RETURN) - 
+default TRUE }
+
+
+{ *** tags specific to rtGetLongA *** }
+RTGL_Min        = $8000001E; { minimum allowed value - default MININT }
+RTGL_Max        = $8000001F; { maximum allowed value - default MAXINT }
+RTGL_Width      = $80000020; { suggested width of requester window (in pixels) }
+RTGL_ShowDefault= $80000021; { boolean to show the default value - default TRUE }
+RTGL_GadFmt     = $80000022; { (V38) string with possible responses - english default 
+" _Ok |_Cancel" }
+RTGL_GadFmtArgs = $80000023; { (V38) optional arguments for RTGL_GadFmt }
+RTGL_Invisible  = $80000024; { (V38) invisible typing - default FALSE }
+RTGL_Backfill   = $80000025; { (V38) window backfill - default TRUE }
+RTGL_TextFmt    = $80000026; { (V38) optional text above gadget }
+RTGL_TextFmtArgs= $80000027; { (V38) optional arguments for RTGS_TextFmt }
+RTGL_Flags = RTEZ_Flags;     { (V38) various flags (see below) }
+
+
+{ *** tags specific to rtGetStringA *** }
+RTGS_Width      = RTGL_Width;       { suggested width of requester window (in pixels) 
+}
+RTGS_AllowEmpty = $80000050;        { allow empty string to be accepted - default 
+FALSE }
+RTGS_GadFmt     = RTGL_GadFmt;      { (V38) string with possible responses - english 
+default " _Ok |_Cancel" }
+RTGS_GadFmtArgs = RTGL_GadFmtArgs;  { (V38) optional arguments for RTGS_GadFmt }
+RTGS_Invisible  = RTGL_Invisible;   { (V38) invisible typing - default FALSE }
+RTGS_Backfill   = RTGL_Backfill;    { (V38) window backfill - default TRUE }
+RTGS_TextFmt    = RTGL_TextFmt;     { (V38) optional text above gadget }
+RTGS_TextFmtArgs= RTGL_TextFmtArgs; { (V38) optional arguments for RTGS_TextFmt }
+RTGS_Flags      = RTEZ_Flags;       { (V38) various flags (see below) }
+
+
+{ *** tags specific to rtFileRequestA *** }
+RTFI_Flags      = $80000028; { various flags (see below) }
+RTFI_Height     = $80000029; { suggested height of file requester }
+RTFI_OkText     = $8000002A; { replacement text for 'Ok' gadget (max 6 chars) }
+RTFI_VolumeRequest=$8000002B;{ (V38) bring up volume requester, tag data holds flags 
+(see below) }
+RTFI_FilterFunc = $8000002C; { (V38) call this hook for every file in the directory }
+RTFI_AllowEmpty = $8000002D; { (V38) allow empty file to be accepted - default FALSE }
+
+
+{ *** tags specific to rtFontRequestA *** }
+RTFO_Flags      = RTFI_Flags;  { various flags (see below) }
+RTFO_Height     = RTFI_Height; { suggested height of font requester }
+RTFO_OkText     = RTFI_OkText; { replacement text for 'Ok' gadget (max 6 chars) }
+RTFO_SampleHeight=$8000003C;   { suggested height of font sample display - default 24 
+}
+RTFO_MinHeight  = $8000003D;   { minimum height of font displayed }
+RTFO_MaxHeight  = $8000003E;   { maximum height of font displayed }
+{ [($8000003F) to ($80000042) used below] }
+RTFO_FilterFunc = RTFI_FilterFunc;{ (V38) call this hook for every font }
+
+
+{ *** (V38) tags for rtScreenModeRequestA *** }
+RTSC_Flags         = RTFI_Flags;{ various flags (see below) }
+RTSC_Height        = RTFI_Height;{ suggested height of screenmode requester }
+RTSC_OkText        = RTFI_OkText;{ replacement text for 'Ok' gadget (max 6 chars) }
+RTSC_PropertyFlags = $8000005A;{ property flags (see also RTSC_PropertyMask) }
+RTSC_PropertyMask  = $8000005B;{ property mask - default all bits in 
+RTSC_PropertyFlags considered }
+RTSC_MinWidth      = $8000005C;{ minimum display width allowed }
+RTSC_MaxWidth      = $8000005D;{ maximum display width allowed }
+RTSC_MinHeight     = $8000005E;{ minimum display height allowed }
+RTSC_MaxHeight     = $8000005F;{ maximum display height allowed }
+RTSC_MinDepth      = $80000060;{ minimum display depth allowed }
+RTSC_MaxDepth      = $80000061;{ maximum display depth allowed }
+RTSC_FilterFunc    = RTFI_FilterFunc;{ call this hook for every display mode id }
+
+
+{ *** tags for rtChangeReqAttrA *** }
+RTFI_Dir = $80000032;{ file requester - set directory }
+RTFI_MatchPat = $80000033;{ file requester - set wildcard pattern }
+RTFI_AddEntry = $80000034;{ file requester - add a file or directory to the buffer }
+RTFI_RemoveEntry = $80000035;{ file requester - remove a file or directory from the 
+buffer }
+RTFO_FontName = $8000003F;{ font requester - set font name of selected font }
+RTFO_FontHeight = $80000040;{ font requester - set font size }
+RTFO_FontStyle = $80000041;{ font requester - set font style }
+RTFO_FontFlags = $80000042;{ font requester - set font flags }
+RTSC_ModeFromScreen = $80000050;{ (V38) screenmode requester - get display attributes 
+from screen }
+RTSC_DisplayID = $80000051;{ (V38) screenmode requester - set display mode id (32-bit 
+extended) }
+RTSC_DisplayWidth = $80000052;{ (V38) screenmode requester - set display width }
+RTSC_DisplayHeight = $80000053;{ (V38) screenmode requester - set display height }
+RTSC_DisplayDepth = $80000054;{ (V38) screenmode requester - set display depth }
+RTSC_OverscanType = $80000055;{ (V38) screenmode requester - set overscan type, 0 for 
+regular size }
+RTSC_AutoScroll = $80000056;{ (V38) screenmode requester - set autoscroll }
+
+
+{ *** tags for rtPaletteRequestA *** }
+{ initially selected color - default 1 }
+    RTPA_Color = $80000046;
+
+{ *** tags for rtReqHandlerA *** }
+{ end requester by software control, set tagdata to REQ_CANCEL, REQ_OK or
+  in case of rtEZRequest to the return value }
+    RTRH_EndRequest = $800003C;
+
+{ *** tags for rtAllocRequestA *** }
+{ no tags defined yet }
+
+{************
+* RT_ReqPos *
+************}
+    REQPOS_POINTER    = 0;
+    REQPOS_CENTERWIN  = 1;
+    REQPOS_CENTERSCR  = 2;
+    REQPOS_TOPLEFTWIN = 3;
+    REQPOS_TOPLEFTSCR = 4;
+    
+{******************
+* RTRH_EndRequest *
+******************}
+    REQ_CANCEL = 0;
+    REQ_OK     = 1;
+
+{***************************************
+* flags for RTFI_Flags and RTFO_Flags  *
+* or filereq->Flags and fontreq->Flags *
+***************************************}
+    FREQB_NOBUFFER = 2;
+    FREQF_NOBUFFER = 4;
+
+{*****************************************
+* flags for RTFI_Flags or filereq->Flags *
+*****************************************}
+    FREQB_MULTISELECT = 0;
+    FREQF_MULTISELECT = 1;
+    FREQB_SAVE        = 1;
+    FREQF_SAVE        = 2;
+    FREQB_NOFILES     = 3;
+    FREQF_NOFILES     = 8;
+    FREQB_PATGAD      = 4;
+    FREQF_PATGAD      = 16;
+    FREQB_SELECTDIRS  = 12;
+    FREQF_SELECTDIRS  = 4096;
+
+{*****************************************
+* flags for RTFO_Flags or fontreq->Flags *
+*****************************************}
+    FREQB_FIXEDWIDTH    = 5;
+    FREQF_FIXEDWIDTH    = 32;
+    FREQB_COLORFONTS    = 6;
+    FREQF_COLORFONTS    = 64;
+    FREQB_CHANGEPALETTE = 7;
+    FREQF_CHANGEPALETTE = 128;
+    FREQB_LEAVEPALETTE  = 8;
+    FREQF_LEAVEPALETTE  = 256;
+    FREQB_SCALE         = 9;
+    FREQF_SCALE         = 512;
+    FREQB_STYLE         = 10;
+    FREQF_STYLE         = 1024;
+
+{*****************************************************
+* (V38) flags for RTSC_Flags or screenmodereq->Flags *
+*****************************************************}
+    SCREQB_SIZEGADS      = 13;
+    SCREQF_SIZEGADS      = 8192;
+    SCREQB_DEPTHGAD      = 14;
+    SCREQF_DEPTHGAD      = 16384;
+    SCREQB_NONSTDMODES   = 15;
+    SCREQF_NONSTDMODES   = 32768;
+    SCREQB_GUIMODES      = 16;
+    SCREQF_GUIMODES      = 65536;
+    SCREQB_AUTOSCROLLGAD = 18;
+    SCREQF_AUTOSCROLLGAD = 262144;
+    SCREQB_OVERSCANGAD   = 19;
+    SCREQF_OVERSCANGAD   = 524288;
+
+{*****************************************
+* flags for RTEZ_Flags or reqinfo->Flags *
+*****************************************}
+    EZREQB_NORETURNKEY = 0;
+    EZREQF_NORETURNKEY = 1;
+    EZREQB_LAMIGAQUAL  = 1;
+    EZREQF_LAMIGAQUAL  = 2;
+    EZREQB_CENTERTEXT  = 2;
+    EZREQF_CENTERTEXT  = 4;
+
+{***********************************************
+* (V38) flags for RTGL_Flags or reqinfo->Flags *
+***********************************************}
+    GLREQB_CENTERTEXT    = EZREQB_CENTERTEXT;
+    GLREQF_CENTERTEXT    = EZREQF_CENTERTEXT;
+    GLREQB_HIGHLIGHTTEXT = 3;
+    GLREQF_HIGHLIGHTTEXT = 8;
+
+{***********************************************
+* (V38) flags for RTGS_Flags or reqinfo->Flags *
+***********************************************}
+    GSREQB_CENTERTEXT    = EZREQB_CENTERTEXT;
+    GSREQF_CENTERTEXT    = EZREQF_CENTERTEXT;
+    GSREQB_HIGHLIGHTTEXT = GLREQB_HIGHLIGHTTEXT;
+    GSREQF_HIGHLIGHTTEXT = GLREQF_HIGHLIGHTTEXT;
+
+{*****************************************
+* (V38) flags for RTFI_VolumeRequest tag *
+*****************************************}
+    VREQB_NOASSIGNS   = 0;
+    VREQF_NOASSIGNS   = 1;
+    VREQB_NODISKS     = 1;
+    VREQF_NODISKS     = 2;
+    VREQB_ALLDISKS    = 2;
+    VREQF_ALLDISKS    = 4;
+
+{*
+   Following things are obsolete in ReqTools V38.
+   DON'T USE THESE IN NEW CODE!
+*}
+    REQHOOK_WILDFILE  = 0;
+    REQHOOK_WILDFONT  = 1;
+    FREQB_DOWILDFUNC  = 11;
+    FREQF_DOWILDFUNC  = 2048;
+
+VAR ReqToolsBase : pLibrary;
+   
+
+FUNCTION rtAllocRequestA(typ : ULONG; taglist : pTagItem) : POINTER;
+FUNCTION rtChangeReqAttrA(req : POINTER; taglist : pTagItem) : LONGINT;
+PROCEDURE rtCloseWindowSafely(win : pWindow);
+FUNCTION rtEZRequestA(bodyfmt : PChar; gadfmt : PChar; reqinfo : prtReqInfo; argarray : POINTER; taglist : pTagItem) : ULONG;
+FUNCTION rtFileRequestA(filereq : prtFileRequester; filebuf : PChar; title : PChar; taglist : pTagItem) : POINTER;
+FUNCTION rtFontRequestA(fontreq : prtFontRequester; title : PChar; taglist : pTagItem) : ULONG;
+PROCEDURE rtFreeFileList(filelist : prtFileList);
+PROCEDURE rtFreeReqBuffer(req : POINTER);
+PROCEDURE rtFreeRequest(req : POINTER);
+FUNCTION rtGetLongA(VAR longptr : ULONG; title : PChar; reqinfo : prtReqInfo; taglist : pTagItem) : ULONG;
+FUNCTION rtGetStringA(buffer : pCHAR; maxchars : ULONG; title : PChar; reqinfo : prtReqInfo; taglist : pTagItem) : ULONG;
+FUNCTION rtGetVScreenSize(screen : pScreen; VAR widthptr : ULONG; VAR heightptr : ULONG) : ULONG;
+FUNCTION rtLockWindow(win : pWindow) : POINTER;
+FUNCTION rtPaletteRequestA(title : PChar; reqinfo : prtReqInfo; taglist : pTagItem) : LONGINT;
+FUNCTION rtReqHandlerA(handlerinfo : prtHandlerInfo; sigs : ULONG; taglist : pTagItem) : ULONG;
+FUNCTION rtScreenModeRequestA(screenmodereq : prtScreenModeRequester; title : PChar; taglist : pTagItem) : ULONG;
+PROCEDURE rtScreenToFrontSafely(screen : pScreen);
+PROCEDURE rtSetReqPosition(reqpos : ULONG; newwindow : pNewWindow; screen : pScreen; window : pWindow);
+PROCEDURE rtSetWaitPointer(window : pWindow);
+PROCEDURE rtSpread(VAR posarray : ULONG; VAR sizearray : ULONG; length : ULONG; min : ULONG; max : ULONG; num : ULONG);
+PROCEDURE rtUnlockWindow(win : pWindow; winlock : POINTER);
+
+{
+     This is functions and procedures with array of const.
+     For use with fpc 1.0 and above.
+}
+
+FUNCTION rtAllocRequest(typ : ULONG; const argv : Array Of Const) : POINTER;
+FUNCTION rtChangeReqAttr(req : POINTER; const argv : Array Of Const) : LONGINT;
+FUNCTION rtEZRequest(bodyfmt : PChar; gadfmt : PChar; reqinfo : prtReqInfo; argarray : POINTER; const argv : Array Of Const) : ULONG;
+FUNCTION rtFileRequest(filereq : prtFileRequester; filebuf : PChar; title : PChar; const argv : Array Of Const) : POINTER;
+FUNCTION rtFontRequest(fontreq : prtFontRequester; title : PChar; const argv : Array Of Const) : ULONG;
+FUNCTION rtGetLong(VAR longptr : ULONG; title : PChar; reqinfo : prtReqInfo; const argv : Array Of Const) : ULONG;
+FUNCTION rtGetString(buffer : pCHAR; maxchars : ULONG; title : PChar; reqinfo : prtReqInfo; const argv : Array Of Const) : ULONG;
+FUNCTION rtPaletteRequest(title : PChar; reqinfo : prtReqInfo; const argv : Array Of Const) : LONGINT;
+FUNCTION rtReqHandler(handlerinfo : prtHandlerInfo; sigs : ULONG; const argv : Array Of Const) : ULONG;
+FUNCTION rtScreenModeRequest(screenmodereq : prtScreenModeRequester; title : PChar; const argv : Array Of Const) : ULONG;
+
+{overlay functions}
+
+FUNCTION rtEZRequestA(bodyfmt : PChar; gadfmt : String; reqinfo : prtReqInfo; argarray : POINTER; taglist : pTagItem) : ULONG;
+FUNCTION rtEZRequestA(bodyfmt : String; gadfmt : PChar; reqinfo : prtReqInfo; argarray : POINTER; taglist : pTagItem) : ULONG;
+FUNCTION rtEZRequestA(bodyfmt : String; gadfmt : String; reqinfo : prtReqInfo; argarray : POINTER; taglist : pTagItem) : ULONG;
+FUNCTION rtFileRequestA(filereq : prtFileRequester; filebuf : PChar; title : String; taglist : pTagItem) : POINTER;
+FUNCTION rtFontRequestA(fontreq : prtFontRequester; title : String; taglist : pTagItem) : ULONG;
+FUNCTION rtGetLongA(VAR longptr : ULONG; title : String; reqinfo : prtReqInfo; taglist : pTagItem) : ULONG;
+FUNCTION rtGetStringA(buffer : pCHAR; maxchars : ULONG; title : String; reqinfo : prtReqInfo; taglist : pTagItem) : ULONG;
+FUNCTION rtPaletteRequestA(title : String; reqinfo : prtReqInfo; taglist : pTagItem) : LONGINT;
+FUNCTION rtScreenModeRequestA(screenmodereq : prtScreenModeRequester; title : String; taglist : pTagItem) : ULONG;
+
+{
+     This is functions and procedures with array of const.
+     For use with fpc 1.0 and above. + overlay
+}
+
+FUNCTION rtEZRequest(bodyfmt : PChar; gadfmt : String; reqinfo : prtReqInfo; argarray : POINTER; const argv : Array Of Const) : ULONG;
+FUNCTION rtEZRequest(bodyfmt : String; gadfmt : PChar; reqinfo : prtReqInfo; argarray : POINTER; const argv : Array Of Const) : ULONG;
+FUNCTION rtEZRequest(bodyfmt : String; gadfmt : String; reqinfo : prtReqInfo; argarray : POINTER; const argv : Array Of Const) : ULONG;
+FUNCTION rtFileRequest(filereq : prtFileRequester; filebuf : PChar; title : String; const argv : Array Of Const) : POINTER;
+FUNCTION rtFontRequest(fontreq : prtFontRequester; title : String; const argv : Array Of Const) : ULONG;
+FUNCTION rtGetLong(VAR longptr : ULONG; title : String; reqinfo : prtReqInfo; const argv : Array Of Const) : ULONG;
+FUNCTION rtGetString(buffer : pCHAR; maxchars : ULONG; title : String; reqinfo : prtReqInfo; const argv : Array Of Const) : ULONG;
+FUNCTION rtPaletteRequest(title : String; reqinfo : prtReqInfo; const argv : Array Of Const) : LONGINT;
+FUNCTION rtScreenModeRequest(screenmodereq : prtScreenModeRequester; title : String; const argv : Array Of Const) : ULONG;
+
+
+
+
+IMPLEMENTATION
+
+uses msgbox,pastoc,tagsarray;
+
+FUNCTION rtAllocRequestA(typ : ULONG; taglist : pTagItem) : POINTER;
+BEGIN
+  ASM
+    MOVE.L  A6,-(A7)
+    MOVE.L  typ,D0
+    MOVEA.L taglist,A0
+    MOVEA.L ReqToolsBase,A6
+    JSR -030(A6)
+    MOVEA.L (A7)+,A6
+    MOVE.L  D0,@RESULT
+  END;
+END;
+
+FUNCTION rtChangeReqAttrA(req : POINTER; taglist : pTagItem) : LONGINT;
+BEGIN
+  ASM
+    MOVE.L  A6,-(A7)
+    MOVEA.L req,A1
+    MOVEA.L taglist,A0
+    MOVEA.L ReqToolsBase,A6
+    JSR -048(A6)
+    MOVEA.L (A7)+,A6
+    MOVE.L  D0,@RESULT
+  END;
+END;
+
+PROCEDURE rtCloseWindowSafely(win : pWindow);
+BEGIN
+  ASM
+    MOVE.L  A6,-(A7)
+    MOVEA.L win,A0
+    MOVEA.L ReqToolsBase,A6
+    JSR -150(A6)
+    MOVEA.L (A7)+,A6
+  END;
+END;
+
+FUNCTION rtEZRequestA(bodyfmt : PChar; gadfmt : PChar; reqinfo : prtReqInfo; argarray 
+: POINTER; taglist : pTagItem) : ULONG;
+BEGIN
+  ASM
+    MOVE.L  A6,-(A7)
+    MOVEA.L bodyfmt,A1
+    MOVEA.L gadfmt,A2
+    MOVEA.L reqinfo,A3
+    MOVEA.L argarray,A4
+    MOVEA.L taglist,A0
+    MOVEA.L ReqToolsBase,A6
+    JSR -066(A6)
+    MOVEA.L (A7)+,A6
+    MOVE.L  D0,@RESULT
+  END;
+END;
+
+FUNCTION rtFileRequestA(filereq : prtFileRequester; filebuf : PChar; title : PChar; 
+taglist : pTagItem) : POINTER;
+BEGIN
+  ASM
+    MOVE.L  A6,-(A7)
+    MOVEA.L filereq,A1
+    MOVEA.L filebuf,A2
+    MOVEA.L title,A3
+    MOVEA.L taglist,A0
+    MOVEA.L ReqToolsBase,A6
+    JSR -054(A6)
+    MOVEA.L (A7)+,A6
+    MOVE.L  D0,@RESULT
+  END;
+END;
+
+FUNCTION rtFontRequestA(fontreq : prtFontRequester; title : PChar; taglist : pTagItem) 
+: ULONG;
+BEGIN
+  ASM
+    MOVE.L  A6,-(A7)
+    MOVEA.L fontreq,A1
+    MOVEA.L title,A3
+    MOVEA.L taglist,A0
+    MOVEA.L ReqToolsBase,A6
+    JSR -096(A6)
+    MOVEA.L (A7)+,A6
+    MOVE.L  D0,@RESULT
+  END;
+END;
+
+PROCEDURE rtFreeFileList(filelist : prtFileList);
+BEGIN
+  ASM
+    MOVE.L  A6,-(A7)
+    MOVEA.L filelist,A0
+    MOVEA.L ReqToolsBase,A6
+    JSR -060(A6)
+    MOVEA.L (A7)+,A6
+  END;
+END;
+
+PROCEDURE rtFreeReqBuffer(req : POINTER);
+BEGIN
+  ASM
+    MOVE.L  A6,-(A7)
+    MOVEA.L req,A1
+    MOVEA.L ReqToolsBase,A6
+    JSR -042(A6)
+    MOVEA.L (A7)+,A6
+  END;
+END;
+
+PROCEDURE rtFreeRequest(req : POINTER);
+BEGIN
+  ASM
+    MOVE.L  A6,-(A7)
+    MOVEA.L req,A1
+    MOVEA.L ReqToolsBase,A6
+    JSR -036(A6)
+    MOVEA.L (A7)+,A6
+  END;
+END;
+
+FUNCTION rtGetLongA(VAR longptr : ULONG; title : PChar; reqinfo : prtReqInfo; taglist 
+: pTagItem) : ULONG;
+BEGIN
+  ASM
+    MOVE.L  A6,-(A7)
+    MOVEA.L longptr,A1
+    MOVEA.L title,A2
+    MOVEA.L reqinfo,A3
+    MOVEA.L taglist,A0
+    MOVEA.L ReqToolsBase,A6
+    JSR -078(A6)
+    MOVEA.L (A7)+,A6
+    MOVE.L  D0,@RESULT
+  END;
+END;
+
+
+FUNCTION rtGetStringA(buffer : pCHAR; maxchars : ULONG; title : PChar; reqinfo : 
+prtReqInfo; taglist : pTagItem) : ULONG;
+BEGIN
+  ASM
+    MOVE.L  A6,-(A7)
+    MOVEA.L buffer,A1
+    MOVE.L  maxchars,D0
+    MOVEA.L title,A2
+    MOVEA.L reqinfo,A3
+    MOVEA.L taglist,A0
+    MOVEA.L ReqToolsBase,A6
+    JSR -072(A6)
+    MOVEA.L (A7)+,A6
+    MOVE.L  D0,@RESULT
+  END;
+END;
+
+FUNCTION rtGetVScreenSize(screen : pScreen; VAR widthptr : ULONG; VAR heightptr : 
+ULONG) : ULONG;
+BEGIN
+  ASM
+    MOVE.L  A6,-(A7)
+    MOVEA.L screen,A0
+    MOVEA.L widthptr,A1
+    MOVEA.L heightptr,A2
+    MOVEA.L ReqToolsBase,A6
+    JSR -120(A6)
+    MOVEA.L (A7)+,A6
+    MOVE.L  D0,@RESULT
+  END;
+END;
+
+FUNCTION rtLockWindow(win : pWindow) : POINTER;
+BEGIN
+  ASM
+    MOVE.L  A6,-(A7)
+    MOVEA.L win,A0
+    MOVEA.L ReqToolsBase,A6
+    JSR -156(A6)
+    MOVEA.L (A7)+,A6
+    MOVE.L  D0,@RESULT
+  END;
+END;
+
+FUNCTION rtPaletteRequestA(title : PChar; reqinfo : prtReqInfo; taglist : pTagItem) : 
+LONGINT;
+BEGIN
+  ASM
+    MOVE.L  A6,-(A7)
+    MOVEA.L title,A2
+    MOVEA.L reqinfo,A3
+    MOVEA.L taglist,A0
+    MOVEA.L ReqToolsBase,A6
+    JSR -102(A6)
+    MOVEA.L (A7)+,A6
+    MOVE.L  D0,@RESULT
+  END;
+END;
+
+FUNCTION rtReqHandlerA(handlerinfo : prtHandlerInfo; sigs : ULONG; taglist : pTagItem) 
+: ULONG;
+BEGIN
+  ASM
+    MOVE.L  A6,-(A7)
+    MOVEA.L handlerinfo,A1
+    MOVE.L  sigs,D0
+    MOVEA.L taglist,A0
+    MOVEA.L ReqToolsBase,A6
+    JSR -108(A6)
+    MOVEA.L (A7)+,A6
+    MOVE.L  D0,@RESULT
+  END;
+END;
+
+FUNCTION rtScreenModeRequestA(screenmodereq : prtScreenModeRequester; title : PChar; 
+taglist : pTagItem) : ULONG;
+BEGIN
+  ASM
+    MOVE.L  A6,-(A7)
+    MOVEA.L screenmodereq,A1
+    MOVEA.L title,A3
+    MOVEA.L taglist,A0
+    MOVEA.L ReqToolsBase,A6
+    JSR -144(A6)
+    MOVEA.L (A7)+,A6
+    MOVE.L  D0,@RESULT
+  END;
+END;
+
+PROCEDURE rtScreenToFrontSafely(screen : pScreen);
+BEGIN
+  ASM
+    MOVE.L  A6,-(A7)
+    MOVEA.L screen,A0
+    MOVEA.L ReqToolsBase,A6
+    JSR -138(A6)
+    MOVEA.L (A7)+,A6
+  END;
+END;
+
+PROCEDURE rtSetReqPosition(reqpos : ULONG; newwindow : pNewWindow; screen : pScreen; 
+window : pWindow);
+BEGIN
+  ASM
+    MOVE.L  A6,-(A7)
+    MOVE.L  reqpos,D0
+    MOVEA.L newwindow,A0
+    MOVEA.L screen,A1
+    MOVEA.L window,A2
+    MOVEA.L ReqToolsBase,A6
+    JSR -126(A6)
+    MOVEA.L (A7)+,A6
+  END;
+END;
+
+PROCEDURE rtSetWaitPointer(window : pWindow);
+BEGIN
+  ASM
+    MOVE.L  A6,-(A7)
+    MOVEA.L window,A0
+    MOVEA.L ReqToolsBase,A6
+    JSR -114(A6)
+    MOVEA.L (A7)+,A6
+  END;
+END;
+
+PROCEDURE rtSpread(VAR posarray : ULONG; VAR sizearray : ULONG; length : ULONG; min : 
+ULONG; max : ULONG; num : ULONG);
+BEGIN
+  ASM
+    MOVE.L  A6,-(A7)
+    MOVEA.L posarray,A0
+    MOVEA.L sizearray,A1
+    MOVE.L  length,D0
+    MOVE.L  min,D1
+    MOVE.L  max,D2
+    MOVE.L  num,D3
+    MOVEA.L ReqToolsBase,A6
+    JSR -132(A6)
+    MOVEA.L (A7)+,A6
+  END;
+END;
+
+PROCEDURE rtUnlockWindow(win : pWindow; winlock : POINTER);
+BEGIN
+  ASM
+    MOVE.L  A6,-(A7)
+    MOVEA.L win,A0
+    MOVEA.L winlock,A1
+    MOVEA.L ReqToolsBase,A6
+    JSR -162(A6)
+    MOVEA.L (A7)+,A6
+  END;
+END;
+
+FUNCTION rtEZRequestA(bodyfmt : PChar; gadfmt : String; reqinfo : prtReqInfo; argarray 
+: POINTER; taglist : pTagItem) : ULONG;
+BEGIN
+    rtEZRequestA := rtEZRequestA(bodyfmt,pas2c(gadfmt),reqinfo,argarray,taglist);
+END;
+
+FUNCTION rtEZRequestA(bodyfmt : String; gadfmt : PChar; reqinfo : prtReqInfo; argarray 
+: POINTER; taglist : pTagItem) : ULONG;
+BEGIN
+    rtEZRequestA := rtEZRequestA(pas2c(bodyfmt),gadfmt,reqinfo,argarray,taglist);
+END;
+
+FUNCTION rtEZRequestA(bodyfmt : String; gadfmt : String; reqinfo : prtReqInfo; 
+argarray : POINTER; taglist : pTagItem) : ULONG;
+BEGIN
+    rtEZRequestA := 
+rtEZRequestA(pas2c(bodyfmt),pas2c(gadfmt),reqinfo,argarray,taglist);
+END;
+
+FUNCTION rtFileRequestA(filereq : prtFileRequester; filebuf : PChar; title : String; 
+taglist : pTagItem) : POINTER;
+BEGIN
+    rtFileRequestA := rtFileRequestA(filereq,filebuf,pas2c(title),taglist);
+END;
+
+FUNCTION rtFontRequestA(fontreq : prtFontRequester; title : String; taglist : 
+pTagItem) : ULONG;
+BEGIN
+    rtFontRequestA := rtFontRequestA(fontreq,pas2c(title),taglist);
+END;
+
+FUNCTION rtGetLongA(VAR longptr : ULONG; title : String; reqinfo : prtReqInfo; taglist 
+: pTagItem) : ULONG;
+BEGIN
+    rtGetLongA := rtGetLongA(longptr,pas2c(title),reqinfo,taglist);
+END;
+
+FUNCTION rtGetStringA(buffer : pCHAR; maxchars : ULONG; title : String; reqinfo : 
+prtReqInfo; taglist : pTagItem) : ULONG;
+BEGIN
+    rtGetStringA := rtGetStringA(buffer,maxchars,pas2c(title),reqinfo,taglist);
+END;
+
+FUNCTION rtPaletteRequestA(title : String; reqinfo : prtReqInfo; taglist : pTagItem) :
+LONGINT;
+BEGIN
+    rtPaletteRequestA := rtPaletteRequestA(pas2c(title),reqinfo,taglist);
+END;
+
+FUNCTION rtScreenModeRequestA(screenmodereq : prtScreenModeRequester; title : String;
+taglist : pTagItem) : ULONG;
+BEGIN
+    rtScreenModeRequestA := rtScreenModeRequestA(screenmodereq,pas2c(title),taglist);
+END;
+
+
+FUNCTION rtAllocRequest(typ : ULONG; const argv : Array Of Const) : POINTER;
+begin
+    rtAllocRequest := rtAllocRequestA(typ,readintags(argv));
+end;
+
+FUNCTION rtChangeReqAttr(req : POINTER; const argv : Array Of Const) : LONGINT;
+begin
+    rtChangeReqAttr := rtChangeReqAttrA(req,readintags(argv));
+end;
+
+FUNCTION rtEZRequest(bodyfmt : PChar; gadfmt : PChar; reqinfo : prtReqInfo; argarray : POINTER; const argv : Array Of Const) : ULONG;
+begin
+    rtEZRequest := rtEZRequestA(bodyfmt,gadfmt,reqinfo,argarray,readintags(argv));
+end;
+
+FUNCTION rtFileRequest(filereq : prtFileRequester; filebuf : PChar; title : PChar; const argv : Array Of Const) : POINTER;
+begin
+    rtFileRequest := rtFileRequestA(filereq,filebuf,title,readintags(argv));
+end;
+
+FUNCTION rtFontRequest(fontreq : prtFontRequester; title : PChar; const argv : Array Of Const) : ULONG;
+begin
+    rtFontRequest := rtFontRequestA(fontreq,title,readintags(argv));
+end;
+
+FUNCTION rtGetLong(VAR longptr : ULONG; title : PChar; reqinfo : prtReqInfo; const argv : Array Of Const) : ULONG;
+begin
+    rtGetLong := rtGetLongA(longptr,title,reqinfo,readintags(argv));
+end;
+
+FUNCTION rtGetString(buffer : pCHAR; maxchars : ULONG; title : PChar; reqinfo : prtReqInfo; const argv : Array Of Const) : ULONG;
+begin
+    rtGetString := rtGetStringA(buffer,maxchars,title,reqinfo,readintags(argv));
+end;
+
+FUNCTION rtPaletteRequest(title : PChar; reqinfo : prtReqInfo; const argv : Array Of Const) : LONGINT;
+begin
+    rtPaletteRequest := rtPaletteRequestA(title,reqinfo,readintags(argv));
+end;
+
+FUNCTION rtReqHandler(handlerinfo : prtHandlerInfo; sigs : ULONG; const argv : Array Of Const) : ULONG;
+begin
+    rtReqHandler := rtReqHandlerA(handlerinfo,sigs,readintags(argv));
+end;
+
+FUNCTION rtScreenModeRequest(screenmodereq : prtScreenModeRequester; title : PChar; const argv : Array Of Const) : ULONG;
+begin
+    rtScreenModeRequest := rtScreenModeRequestA(screenmodereq,title,readintags(argv));
+end;
+
+FUNCTION rtEZRequest(bodyfmt : PChar; gadfmt : String; reqinfo : prtReqInfo; argarray : POINTER; const argv : Array Of Const) : ULONG;
+begin
+    rtEZRequest := rtEZRequestA(bodyfmt,gadfmt,reqinfo,argarray,readintags(argv));
+end;
+
+FUNCTION rtEZRequest(bodyfmt : String; gadfmt : PChar; reqinfo : prtReqInfo; argarray : POINTER; const argv : Array Of Const) : ULONG;
+begin
+    rtEZRequest := rtEZRequestA(bodyfmt,gadfmt,reqinfo,argarray,readintags(argv));
+end;
+
+FUNCTION rtEZRequest(bodyfmt : String; gadfmt : String; reqinfo : prtReqInfo; argarray : POINTER; const argv : Array Of Const) : ULONG;
+begin
+    rtEZRequest := rtEZRequestA(bodyfmt,gadfmt,reqinfo,argarray,readintags(argv));
+end;
+
+FUNCTION rtFileRequest(filereq : prtFileRequester; filebuf : PChar; title : String; const argv : Array Of Const) : POINTER;
+begin
+     rtFileRequest :=  rtFileRequestA(filereq,filebuf,title,readintags(argv));
+end;
+
+FUNCTION rtFontRequest(fontreq : prtFontRequester; title : String; const argv : Array Of Const) : ULONG;
+begin
+     rtFontRequest := rtFontRequestA(fontreq,title,readintags(argv));
+end;
+
+FUNCTION rtGetLong(VAR longptr : ULONG; title : String; reqinfo : prtReqInfo; const argv : Array Of Const) : ULONG;
+begin
+     rtGetLong := rtGetLongA(longptr,title,reqinfo,readintags(argv));
+end;
+
+FUNCTION rtGetString(buffer : pCHAR; maxchars : ULONG; title : String; reqinfo : prtReqInfo; const argv : Array Of Const) : ULONG;
+begin
+     rtGetString := rtGetStringA(buffer,maxchars,title,reqinfo,readintags(argv));
+end;
+
+FUNCTION rtPaletteRequest(title : String; reqinfo : prtReqInfo; const argv : Array Of Const) : LONGINT;
+begin
+     rtPaletteRequest := rtPaletteRequestA(title,reqinfo,readintags(argv));
+end;
+
+FUNCTION rtScreenModeRequest(screenmodereq : prtScreenModeRequester; title : String; const argv : Array Of Const) : ULONG;
+begin
+     rtScreenModeRequest := rtScreenModeRequestA(screenmodereq,title,readintags(argv));
+end;
+{$I useautoopenlib.inc}
+{$ifdef use_auto_openlib}
+   {$Info Compiling autoopening of reqtools.library}
+
+var
+   reqtools_exit : Pointer;
+
+PROCEDURE CloseReqToolsLibrary;
+BEGIN
+     ExitProc := reqtools_exit;
+     if ReqToolsBase <> nil then begin
+        CloseLibrary(ReqToolsBase);
+        ReqToolsBase := nil;
+     end;
+END;
+
+const
+    VERSION : string[2] = '38';
+
+BEGIN
+    ReqToolsBase := nil;
+    ReqToolsBase := OpenLibrary(REQTOOLSNAME,REQTOOLSVERSION);
+    IF ReqToolsBase <> NIL THEN begin
+        reqtools_exit := ExitProc;
+        ExitProc := @CloseReqToolsLibrary;
+    end else begin
+         MessageBox('FPC Pascal Error',
+                    'Can''t open reqtools.library version ' +
+                    VERSION +
+                    chr(10) +
+                    'Deallocating resources and closing down',
+                    'Oops');
+        halt(20);
+    end;
+{$else}
+   {$Warning No autoopening of reqtools.library compiled}
+   {$Info Make sure you open reqtools.library yourself}
+{$endif use_auto_openlib}
+
+
+
+END. (* UNIT REQTOOLS *)
+
+
+

+ 94 - 0
packages/extra/amunits/otherlibs/triton/examples/checkbox.pas

@@ -0,0 +1,94 @@
+PROGRAM CheckBoxGad;
+
+uses triton, tritonmacros, utility;
+
+{
+   A demo in FPC Pascal using triton.library
+
+   Updated for fpc 1.0.7
+   09 Jan 2003
+
+   [email protected]
+}
+
+
+
+VAR
+     App      : pTR_App;
+     Project  : pTR_Project;
+     close_me : BOOLEAN;
+     trmsg    : pTR_Message;
+     dummy    : Longint;
+
+procedure CleanUp(why : string; err : longint);
+begin
+    if assigned(Project) then TR_CloseProject(Project);
+    if assigned(App) then TR_DeleteApp(App);
+    if why <> '' then writeln(why);
+    halt(err);
+end;
+
+begin
+
+     App := TR_CreateAppTags([TRCA_Name,'Triton CheckBox',
+                              TRCA_Release,'1.0',
+                              TRCA_Date,'03-06-1998',
+                              TAG_DONE]);
+     
+     if App = nil then CleanUp('Can''t create application',20);
+     
+      ProjectStart;
+      WindowID(1);
+      WindowTitle('CheckBox');
+         VertGroupA;
+            Space;
+            HorizGroupAC;
+               Space;
+               TextID('_CheckBox',10);
+               Space;
+               CheckBox(10);
+               Space;
+            EndGroup;
+            Space;
+         EndGroup;
+      EndProject;
+
+  Project := TR_OpenProject(App,@tritontags);
+    IF Project = NIL THEN CleanUp('Can''t create Project',20);
+      close_me := FALSE;
+      WHILE NOT close_me DO BEGIN
+        dummy := TR_Wait(App,0);
+        REPEAT
+          trmsg := TR_GetMsg(App);
+          IF trmsg <> NIL THEN BEGIN
+            IF (trmsg^.trm_Project = Project) THEN BEGIN
+               CASE trmsg^.trm_Class OF
+                 TRMS_CLOSEWINDOW : begin
+                                     if TR_GetCheckBox(Project,10) then 
+writeln('CheckBox was on')
+                                        else writeln('CheckBox was off');
+                                     close_me := True;
+                                    end;
+                 TRMS_ERROR:        WriteLN(TR_GetErrorString(trmsg^.trm_Data));
+                 TRMS_NEWVALUE    : begin
+                                      IF trmsg^.trm_ID = 10 then begin
+                                          if trmsg^.trm_Data = 0 then 
+writeln('CheckBox off')
+                                            else writeln('CheckBox on');
+                                      end;
+                                    end;
+               END;
+            END;
+            TR_ReplyMsg(trmsg);
+          END;
+        UNTIL close_me OR (trmsg = NIL);
+      END;
+   CleanUp('',0);
+end.
+
+{
+  $Log
+}
+
+
+

+ 1158 - 0
packages/extra/amunits/otherlibs/triton/examples/demo.pas

@@ -0,0 +1,1158 @@
+PROGRAM Main;
+
+(*
+ *  OpenTriton -- A free release of the triton.library source code
+ *  Copyright (C) 1993-1998  Stefan Zeiger
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  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.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ *  demo.c - Triton demo program
+ *
+ *)
+
+uses exec, triton, tritonmacros, utility, amigalib, amigados,workbench;
+
+{
+   A demo in FPC Pascal using triton.library
+
+   This is the main demo for triton.
+
+   Updated for fpc 1.0.7.
+   Added const NULL. Instead of typing longint(nil) just type null.
+   After changes to tritonmacros (more overlays with SetTRTag)
+   I could remove all longstr and other casts to longint.
+   09 Jan 2003.
+
+   [email protected]
+}
+
+
+
+VAR
+    App            : pTR_App;
+    Main_Project   : pTR_Project;
+
+const
+    NULL : longint = longint(nil);
+
+Function IntToStr (I : Longint) : String;
+
+     Var S : String;
+
+     begin
+      Str (I,S);
+      IntToStr:=S;
+     end;
+
+
+PROCEDURE do_text;
+VAR
+    close_me     : BOOLEAN;
+    trmsg        : pTR_Message;
+    text_project : pTR_Project;
+
+BEGIN
+    ProjectStart;
+    WindowID(5); WindowTitle('Text'); WindowPosition(TRWP_CENTERDISPLAY);
+    VertGroupA;
+    Space; CenteredText('Normal text');
+    Space; CenteredTextH('Highlighted text');
+    Space; CenteredText3('3-dimensional text');
+    Space; CenteredTextB('Bold text');
+    Space; CenteredText('A _shortcut');
+    Space; CenteredInteger(42);
+    Space; HorizGroupAC;
+             Space;
+             ClippedText('This is a very long text which is truncated to fit with TRTX_CLIPPED.');
+             Space; EndGroup;
+    Space; EndGroup; EndProject;
+
+    text_project := TR_OpenProject(App,@tritontags);
+    IF text_project <> NIL THEN BEGIN
+      TR_LockProject(Main_Project);
+      close_me := FALSE;
+      WHILE NOT close_me DO BEGIN
+        TR_Wait(app,0);
+        REPEAT
+          trmsg := TR_GetMsg(app);
+          IF trmsg <> NIL THEN BEGIN
+            IF (trmsg^.trm_Project = text_project) THEN BEGIN
+               CASE trmsg^.trm_Class OF
+                 TRMS_CLOSEWINDOW : close_me := True;
+                 TRMS_ERROR:        WriteLN(TR_GetErrorString(trmsg^.trm_Data));
+               ELSE
+               END;
+            END;
+            TR_ReplyMsg(trmsg);
+          END;
+        UNTIL close_me OR (trmsg = NIL);
+      END;
+      TR_UnlockProject(Main_Project);
+      TR_CloseProject(text_project);
+    END ELSE WriteLN(TR_GetErrorString(TR_GetLastError(App)));
+END;
+
+
+
+PROCEDURE do_groups;
+VAR
+    close_me       : BOOLEAN;
+    trmsg          : pTR_Message;
+    groups_project : pTR_Project;
+
+BEGIN
+    ProjectStart;
+    WindowTitle('Groups'); WindowPosition(TRWP_CENTERDISPLAY); WindowUnderscore('~'); WindowID(1);
+
+    HorizGroupA; Space; VertGroupA;
+    Space;
+
+    NamedFrameBox('TRGR_PROPSHARE (default)'); ObjectBackfillWin; VertGroupA; Space; HorizGroupC;
+      Space;
+      Button('Short',1);
+      Space;
+      Button('And much, much longer...',2);
+      Space;
+      EndGroup; Space; EndGroup;
+
+    Space;
+
+    NamedFrameBox('TRGR_EQUALSHARE'); ObjectBackfillWin; VertGroupA; Space; HorizGroupEC;
+      Space;
+      Button('Short',3);
+      Space;
+      Button('And much, much longer...',4);
+      Space;
+      EndGroup; Space; EndGroup;
+
+    Space;
+
+    NamedFrameBox('TRGR_PROPSPACES'); ObjectBackfillWin; VertGroupA; Space; HorizGroupSC;
+      Space;
+      Button('Short',5);
+      Space;
+      Button('And much, much longer...',6);
+      Space;
+      EndGroup; Space; EndGroup;
+
+    Space;
+
+    NamedFrameBox('TRGR_ARRAY'); ObjectBackfillWin; VertGroupA; Space; LineArray;
+      BeginLine;
+        Space;
+        Button('Short',7);
+        Space;
+        Button('And much, much longer...',8);
+        Space;
+        EndLine;
+      Space;
+      BeginLine;
+        Space;
+        Button('Not so short',9);
+        Space;
+        Button('And a bit longer...',10);
+        Space;
+        EndLine;
+      Space;
+      BeginLineI;
+        NamedSeparator('An independent line');
+        EndLine;
+      Space;
+      BeginLine;
+        Space;
+        Button('foo bar',12);
+        Space;
+        Button('42',13);
+        Space;
+        EndLine;
+      EndArray; Space; EndGroup;
+
+    Space;
+    EndGroup; Space; EndGroup;
+    EndProject;
+
+    groups_project := TR_OpenProject(App,@tritontags);
+    IF groups_project <> NIL THEN BEGIN
+      TR_LockProject(Main_Project);
+      close_me := FALSE;
+      WHILE NOT close_me DO BEGIN
+        TR_Wait(app,0);
+        REPEAT
+          trmsg := TR_GetMsg(app);
+          IF trmsg <> NIL THEN BEGIN
+            IF (trmsg^.trm_Project = groups_project) THEN BEGIN
+               CASE trmsg^.trm_Class OF
+                  TRMS_CLOSEWINDOW : close_me := True;
+                  TRMS_ERROR:        WriteLN(TR_GetErrorString(trmsg^.trm_Data));
+               ELSE
+               END;
+            END;
+            TR_ReplyMsg(trmsg);
+          END;
+        UNTIL close_me OR (trmsg = NIL);
+      END;
+      TR_UnlockProject(Main_Project);
+      TR_CloseProject(groups_project);
+      END ELSE WriteLN(TR_GetErrorString(TR_GetLastError(App)));
+END;
+
+PROCEDURE do_menus;
+VAR
+    close_me      : BOOLEAN;
+    trmsg         : pTR_Message;
+    menus_project : pTR_Project;
+
+BEGIN
+    ProjectStart;
+       SetTRTag(TRWI_ID,                 2);
+       SetTRTag(TRWI_Title,              'Menus');
+       SetTRTag(TRMN_Title,              'A menu');
+        SetTRTag(TRMN_Item,              'A simple item'); SetTRTag(TRAT_ID, 1);
+        SetTRTag(TRMN_Item,              'Another item'); SetTRTag(TRAT_ID, 2);
+        SetTRTag(TRMN_Item,              'And now... a barlabel'); SetTRTag(TRAT_ID, 3);
+        SetTRTag(TRMN_Item,              TRMN_BARLABEL);
+        SetTRTag(TRMN_Item,              '1_An item with a shortcut'); SetTRTag(TRAT_ID, 4);
+        SetTRTag(TRMN_Item,              '2_Another one'); SetTRTag(TRAT_ID, 5);
+        SetTRTag(TRMN_Item,              '3_And number 3'); SetTRTag(TRAT_ID, 6);
+        SetTRTag(TRMN_Item,              TRMN_BARLABEL);
+        SetTRTag(TRMN_Item,              '_F1_And under OS3.0: Extended command keys'); SetTRTag(TRAT_ID, 6);
+        SetTRTag(TRMN_Item,              '_F2_Another one'); SetTRTag(TRAT_ID, 7);
+        SetTRTag(TRMN_Item,              TRMN_BARLABEL);
+        SetTRTag(TRMN_Item,              'How do you like submenus?');
+         SetTRTag(TRMN_Sub,              'G_Great!'); SetTRTag(TRAT_ID, 8);
+         SetTRTag(TRMN_Sub,              'F_Fine'); SetTRTag(TRAT_ID, 9);
+         SetTRTag(TRMN_Sub,              'D_Don''t know'); SetTRTag(TRAT_ID, 10);
+         SetTRTag(TRMN_Sub,              'N_Not so fine'); SetTRTag(TRAT_ID, 11);
+         SetTRTag(TRMN_Sub,              'P_Puke!'); SetTRTag(TRAT_ID, 12);
+
+       SetTRTag(TRMN_Title,              'Another menu');
+        SetTRTag(TRMN_Item,              'This item is ghosted'); SetTRTag(TRMN_Flags, TRMF_DISABLED); SetTRTag(TRAT_ID, 100);
+        SetTRTag(TRMN_Item,              TRMN_BARLABEL);
+        SetTRTag(TRMN_Item,              'Item 1 is checked'); SetTRTag(TRMN_Flags, TRMF_CHECKED); SetTRTag(TRAT_ID, 13);
+        SetTRTag(TRMN_Item,              'Item 2 can be checked, too'); SetTRTag(TRMN_Flags, TRMF_CHECKIT); SetTRTag(TRAT_ID, 14);
+
+       SetTRTag(TRMN_Title,              'Ghosted menu');
+       SetTRTag(TRMN_Flags,              TRMF_DISABLED);
+        SetTRTag(TRMN_Item,              'Item 1'); SetTRTag(TRAT_ID, 101);
+        SetTRTag(TRMN_Item,              'Item 2'); SetTRTag(TRAT_ID, 102);
+
+       EndProject;
+
+    menus_project := TR_OpenProject(App,@tritontags);
+    IF menus_project <> NIL THEN BEGIN
+      TR_LockProject(Main_Project);
+      close_me := FALSE;
+      WHILE NOT close_me DO BEGIN
+        TR_Wait(app,0);
+        REPEAT
+          trmsg := TR_GetMsg(app);
+          IF trmsg <> NIL THEN BEGIN
+            IF (trmsg^.trm_Project = menus_project) THEN BEGIN
+               CASE trmsg^.trm_Class OF
+                 TRMS_CLOSEWINDOW : close_me := True;
+                 TRMS_ERROR       : WriteLN(TR_GetErrorString(trmsg^.trm_Data));
+                 TRMS_NEWVALUE    : writeln('The new value of object ',trmsg^.trm_ID,' is ',trmsg^.trm_Data);
+                 TRMS_ACTION      : writeln('Object ',trmsg^.trm_ID,' has triggered an action.');
+               ELSE
+               END;
+            END;
+            TR_ReplyMsg(trmsg);
+          END;
+        UNTIL close_me OR (trmsg = NIL);
+      END;
+      TR_UnlockProject(Main_Project);
+      TR_CloseProject(menus_project);
+    END ELSE WriteLN(TR_GetErrorString(TR_GetLastError(App)));
+END;
+
+PROCEDURE do_gadgets;
+CONST
+  cycle_entries : ARRAY [0..10] OF PChar = (
+                  'Entry 0',
+                  '1',
+                  '2',
+                  '3',
+                  '4',
+                  '5',
+                  '6',
+                  '7',
+                  '8',
+                  '9',
+                  NIL);
+
+
+  mx_entries : ARRAY [0..3] OF PChar = (
+                  'Choice 0',
+                  'Choice 1',
+                  'Choice 2',
+                  NIL);
+VAR
+    close_me        : BOOLEAN;
+    trmsg           : pTR_Message;
+    gadgets_project : pTR_Project;
+
+BEGIN
+    ProjectStart;
+    SetTRTag(TRWI_ID,  3);
+    SetTRTag(TRWI_Title,'Gadgets');
+    SetTRTag(TRWI_Position,TRWP_CENTERDISPLAY);
+
+  SetTRTag(TRGR_Vert,                   TRGR_PROPSHARE OR TRGR_ALIGN);
+
+    SetTRTag(TROB_Space,                NULL);
+
+    SetTRTag(TRGR_Horiz,                TRGR_EQUALSHARE OR TRGR_CENTER);
+      SetTRTag(TROB_Space,              NULL);
+      SetTRTag(TROB_Line,               TROF_HORIZ);
+      SetTRTag(TROB_Space,              NULL);
+      SetTRTag(TROB_Text,               NULL); SetTRTag(TRAT_Text,  'GadTools'); SetTRTag(TRAT_Flags,  TRTX_TITLE);
+      SetTRTag(TROB_Space,              NULL);
+      SetTRTag(TROB_Line,               TROF_HORIZ);
+      SetTRTag(TROB_Space,              NULL);
+    SetTRTag(TRGR_End,                  NULL);
+
+    SetTRTag(TROB_Space,                NULL);
+
+    SetTRTag(TRGR_Horiz,                TRGR_EQUALSHARE OR TRGR_ALIGN OR TRGR_CENTER);
+      SetTRTag(TRGR_Horiz,              TRGR_PROPSPACES OR TRGR_ALIGN OR TRGR_CENTER);
+        SetTRTag(TROB_Space,            NULL);
+        SetTRTag(TROB_CheckBox,         NULL);
+          SetTRTag(TRAT_ID,             1);
+          SetTRTag(TRAT_Value,          true);
+      SetTRTag(TRGR_End,                NULL);
+      SetTRTag(TROB_Space,              NULL);
+      SetTRTag(TRGR_Horiz,              TRGR_PROPSPACES OR TRGR_ALIGN OR TRGR_CENTER);
+        SetTRTag(TROB_Text,             NULL);
+          SetTRTag(TRAT_Text,           '_Checkbox');
+          SetTRTag(TRAT_ID,             1);
+        SetTRTag(TROB_Space,            NULL);
+      SetTRTag(TRGR_End,                NULL);
+    SetTRTag(TRGR_End,                  NULL);
+
+    SetTRTag(TROB_Space,                NULL);
+
+    SetTRTag(TRGR_Horiz,                TRGR_EQUALSHARE OR TRGR_ALIGN OR TRGR_CENTER);
+      SetTRTag(TRGR_Horiz,              TRGR_PROPSHARE OR TRGR_ALIGN OR TRGR_CENTER);
+        SetTRTag(TROB_Space,            NULL);
+        SetTRTag(TROB_Slider,           NULL);
+          SetTRTag(TRAT_ID,             4);
+          SetTRTag(TRSL_Min,            1);
+          SetTRTag(TRSL_Max,            3);
+          SetTRTag(TRAT_Value,          1);
+      SetTRTag(TRGR_End,                NULL);
+      SetTRTag(TROB_Space,              NULL);
+      SetTRTag(TRGR_Horiz,              TRGR_PROPSPACES OR TRGR_ALIGN OR TRGR_CENTER);
+        SetTRTag(TROB_Text,             NULL);
+          SetTRTag(TRAT_Text,           '_Slider: ');
+          SetTRTag(TRAT_ID,             4);
+        SetTRTag(TROB_Text,             NULL);
+          SetTRTag(TRAT_Value,          1);
+          SetTRTag(TRAT_ID,             4);
+          SetTRTag(TRAT_MinWidth,       3);
+      SetTRTag(TROB_Space,              NULL);
+      SetTRTag(TRGR_End,                NULL);
+    SetTRTag(TRGR_End,                  NULL);
+
+    SetTRTag(TROB_Space,                NULL);
+
+    SetTRTag(TRGR_Horiz,                TRGR_EQUALSHARE OR TRGR_ALIGN OR TRGR_CENTER);
+      SetTRTag(TRGR_Horiz,              TRGR_PROPSHARE OR TRGR_ALIGN OR TRGR_CENTER);
+        SetTRTag(TROB_Space,            NULL);
+        SetTRTag(TROB_Scroller,         NULL);
+          SetTRTag(TRAT_ID,             5);
+          SetTRTag(TRAT_Value,          2);
+          SetTRTag(TRSC_Total,          7);
+          SetTRTag(TRSC_Visible,        3);
+      SetTRTag(TRGR_End,                NULL);
+      SetTRTag(TROB_Space,              NULL);
+      SetTRTag(TRGR_Horiz,              TRGR_PROPSPACES OR TRGR_ALIGN OR TRGR_CENTER);
+        SetTRTag(TROB_Text,             NULL);
+          SetTRTag(TRAT_Text,           'Sc_roller: ');
+          SetTRTag(TRAT_ID,             5);
+        SetTRTag(TROB_Text,             NULL);
+          SetTRTag(TRAT_Value,          2);
+          SetTRTag(TRAT_ID,             5);
+          SetTRTag(TRAT_MinWidth,       3);
+      SetTRTag(TROB_Space,              NULL);
+      SetTRTag(TRGR_End,                NULL);
+    SetTRTag(TRGR_End,                  NULL);
+
+    SetTRTag(TROB_Space,                NULL);
+
+    SetTRTag(TRGR_Horiz,                TRGR_EQUALSHARE OR TRGR_ALIGN OR TRGR_CENTER);
+      SetTRTag(TRGR_Horiz,              TRGR_PROPSHARE OR TRGR_ALIGN OR TRGR_CENTER);
+        SetTRTag(TROB_Space,            NULL);
+        SetTRTag(TROB_Palette,          NULL);
+          SetTRTag(TRAT_ID,             3);
+          SetTRTag(TRAT_Value,          1);
+      SetTRTag(TRGR_End,                NULL);
+      SetTRTag(TROB_Space,              NULL);
+      SetTRTag(TRGR_Horiz,              TRGR_PROPSPACES OR TRGR_ALIGN OR TRGR_CENTER);
+        SetTRTag(TROB_Text,             NULL);
+          SetTRTag(TRAT_Text,           '_Palette: ');
+          SetTRTag(TRAT_ID,             3);
+        SetTRTag(TROB_Text,             NULL);
+          SetTRTag(TRAT_Value,          1);
+          SetTRTag(TRAT_ID,             3);
+          SetTRTag(TRAT_MinWidth,       3);
+      SetTRTag(TROB_Space,              NULL);
+      SetTRTag(TRGR_End,                NULL);
+    SetTRTag(TRGR_End,                  NULL);
+
+    SetTRTag(TROB_Space,                NULL);
+
+    SetTRTag(TRGR_Horiz,                TRGR_EQUALSHARE OR TRGR_ALIGN OR TRGR_CENTER);
+      SetTRTag(TRGR_Horiz,              TRGR_PROPSHARE OR TRGR_ALIGN OR TRGR_CENTER);
+        SetTRTag(TROB_Space,            NULL);
+        SetTRTag(TROB_Cycle,            @cycle_entries);
+          SetTRTag(TRAT_ID,             6);
+          SetTRTag(TRAT_Value,          4);
+      SetTRTag(TRGR_End,                NULL);
+      SetTRTag(TROB_Space,              NULL);
+      SetTRTag(TRGR_Horiz,              TRGR_PROPSPACES OR TRGR_ALIGN OR TRGR_CENTER);
+        SetTRTag(TROB_Text,             NULL);
+          SetTRTag(TRAT_Text,           'C_ycle: ');
+          SetTRTag(TRAT_ID,             6);
+        SetTRTag(TROB_Text,             NULL);
+          SetTRTag(TRAT_Value,          4);
+          SetTRTag(TRAT_ID,             6);
+          SetTRTag(TRAT_MinWidth,       3);
+      SetTRTag(TROB_Space,              NULL);
+      SetTRTag(TRGR_End,                NULL);
+    SetTRTag(TRGR_End,                  NULL);
+
+    SetTRTag(TROB_Space,                NULL);
+
+    SetTRTag(TRGR_Horiz,                TRGR_EQUALSHARE OR TRGR_ALIGN OR TRGR_CENTER);
+      SetTRTag(TRGR_Horiz,              TRGR_PROPSPACES OR TRGR_ALIGN OR TRGR_CENTER);
+        SetTRTag(TROB_Space,            NULL);
+        SetTRTag(TROB_Cycle,            @mx_entries);
+          SetTRTag(TRAT_ID,             13);
+          SetTRTag(TRAT_Value,          1);
+          SetTRTag(TRAT_Flags,          TRCY_MX);
+      SetTRTag(TRGR_End,                NULL);
+      SetTRTag(TROB_Space,              NULL);
+      SetTRTag(TRGR_Horiz,              TRGR_PROPSPACES OR TRGR_ALIGN OR TRGR_CENTER);
+        SetTRTag(TROB_Text,             NULL);
+          SetTRTag(TRAT_Text,           '_MX: ');
+          SetTRTag(TRAT_ID,             13);
+        SetTRTag(TROB_Text,             NULL);
+          SetTRTag(TRAT_Value,          1);
+          SetTRTag(TRAT_ID,             13);
+          SetTRTag(TRAT_MinWidth,       3);
+        SetTRTag(TROB_Space,            NULL);
+      SetTRTag(TRGR_End,                NULL);
+    SetTRTag(TRGR_End,                  NULL);
+
+    SetTRTag(TROB_Space,                NULL);
+
+    SetTRTag(TRGR_Horiz,                TRGR_EQUALSHARE OR TRGR_ALIGN OR TRGR_CENTER);
+      SetTRTag(TRGR_Horiz,              TRGR_PROPSHARE OR TRGR_ALIGN OR TRGR_CENTER);
+        SetTRTag(TROB_Space,            NULL);
+        SetTRTag(TROB_String,           'foo bar');
+          SetTRTag(TRAT_ID,             7);
+      SetTRTag(TRGR_End,                NULL);
+      SetTRTag(TROB_Space,              NULL);
+      SetTRTag(TRGR_Horiz,              TRGR_PROPSPACES OR TRGR_ALIGN OR TRGR_CENTER);
+        SetTRTag(TROB_Text,             NULL);
+          SetTRTag(TRAT_Text,           'S_tring');
+          SetTRTag(TRAT_ID,             7);
+      SetTRTag(TROB_Space,              NULL);
+      SetTRTag(TRGR_End,                NULL);
+    SetTRTag(TRGR_End,                  NULL);
+
+    SetTRTag(TROB_Space,                NULL);
+
+    SetTRTag(TRGR_Horiz,                TRGR_EQUALSHARE OR TRGR_ALIGN OR TRGR_CENTER);
+      SetTRTag(TRGR_Horiz,              TRGR_PROPSHARE OR TRGR_ALIGN OR TRGR_CENTER);
+        SetTRTag(TROB_Space,            NULL);
+        SetTRTag(TROB_String,           '');
+          SetTRTag(TRAT_Flags,          TRST_INVISIBLE);
+          SetTRTag(TRAT_ID,             15);
+      SetTRTag(TRGR_End,                NULL);
+      SetTRTag(TROB_Space,              NULL);
+      SetTRTag(TRGR_Horiz,              TRGR_PROPSPACES OR TRGR_ALIGN OR TRGR_CENTER);
+        SetTRTag(TROB_Text,             NULL);
+          SetTRTag(TRAT_Text,           'Pass_word');
+          SetTRTag(TRAT_ID,             15);
+      SetTRTag(TROB_Space,              NULL);
+      SetTRTag(TRGR_End,                NULL);
+    SetTRTag(TRGR_End,                  NULL);
+
+    SetTRTag(TROB_Space,                NULL);
+
+    SetTRTag(TRGR_Horiz,                TRGR_EQUALSHARE OR TRGR_ALIGN OR TRGR_CENTER);
+      SetTRTag(TRGR_Horiz,              TRGR_PROPSHARE OR TRGR_ALIGN OR TRGR_CENTER);
+        SetTRTag(TROB_Space,            NULL);
+        SetTRTag(TROB_String,           '0.42');
+          SetTRTag(TRAT_Flags,          TRST_FLOAT);
+          SetTRTag(TRST_Filter,         '01234567.,');
+          SetTRTag(TRAT_ID,             16);
+      SetTRTag(TRGR_End,                NULL);
+      SetTRTag(TROB_Space,              NULL);
+      SetTRTag(TRGR_Horiz,              TRGR_PROPSPACES OR TRGR_ALIGN OR TRGR_CENTER);
+        SetTRTag(TROB_Text,             NULL);
+          SetTRTag(TRAT_Text,           '_Octal float');
+          SetTRTag(TRAT_ID,             16);
+      SetTRTag(TROB_Space,              NULL);
+      SetTRTag(TRGR_End,                NULL);
+    SetTRTag(TRGR_End,                  NULL);
+
+    SetTRTag(TROB_Space,                NULL);
+
+    SetTRTag(TRGR_Horiz,                TRGR_EQUALSHARE OR TRGR_CENTER);
+      SetTRTag(TROB_Space,              NULL);
+      SetTRTag(TROB_Line,               TROF_HORIZ);
+      SetTRTag(TROB_Space,              NULL);
+      SetTRTag(TROB_Text,               NULL); SetTRTag(TRAT_Text,  'BOOPSI'); SetTRTag(TRAT_Flags,  TRTX_TITLE);
+      SetTRTag(TROB_Space,              NULL);
+      SetTRTag(TROB_Line,               TROF_HORIZ);
+      SetTRTag(TROB_Space,              NULL);
+    SetTRTag(TRGR_End,                  NULL);
+
+    SetTRTag(TROB_Space,                NULL);
+
+    SetTRTag(TRGR_Horiz,                TRGR_PROPSHARE OR TRGR_ALIGN OR TRGR_CENTER);
+      SetTRTag(TROB_Space,              NULL);
+      SetTRTag(TROB_Button,             NULL); SetTRTag(TRAT_ID, 2); SetTRTag(TRAT_Text,  '_Button');
+      SetTRTag(TROB_Space,              NULL);
+    SetTRTag(TRGR_End,                  NULL);
+
+    SetTRTag(TROB_Space,                NULL);
+
+    SetTRTag(TRGR_Horiz,                TRGR_PROPSPACES OR TRGR_ALIGN OR TRGR_CENTER);
+      SetTRTag(TROB_Space,              NULL);
+      SetTRTag(TROB_Text,               NULL); SetTRTag(TRAT_Text,  '_File:'); SetTRTag(TRAT_ID, 10);
+      SetTRTag(TROB_Space,              NULL);
+      SetTRTag(TROB_Button,             TRBT_GETFILE); SetTRTag(TRAT_ID, 10); SetTRTag(TRAT_Text,  '');
+      SetTRTag(TROB_Space,              NULL);
+      SetTRTag(TROB_Text,               NULL); SetTRTag(TRAT_Text,  '_Drawer:'); SetTRTag(TRAT_ID, 11);
+      SetTRTag(TROB_Space,              NULL);
+      SetTRTag(TROB_Button,             TRBT_GETDRAWER); SetTRTag(TRAT_ID, 11); SetTRTag(TRAT_Text,  '');
+      SetTRTag(TROB_Space,              NULL);
+      SetTRTag(TROB_Text,               NULL); SetTRTag(TRAT_Text,  '_Entry:'); SetTRTag(TRAT_ID, 12);
+      SetTRTag(TROB_Space,              NULL);
+      SetTRTag(TROB_Button,             TRBT_GETENTRY); SetTRTag(TRAT_ID, 12); SetTRTag(TRAT_Text,  '');
+      SetTRTag(TROB_Space,              NULL);
+    SetTRTag(TRGR_End,                  NULL);
+
+    SetTRTag(TROB_Space,                NULL);
+
+    SetTRTag(TRGR_End,                  NULL);
+
+  EndProject;
+    gadgets_project := TR_OpenProject(App,@tritontags);
+    IF gadgets_project <> NIL THEN BEGIN
+      TR_LockProject(Main_Project);
+      close_me := FALSE;
+      WHILE NOT close_me DO BEGIN
+        TR_Wait(app,0);
+        REPEAT
+          trmsg := TR_GetMsg(app);
+          IF trmsg <> NIL THEN BEGIN
+            IF (trmsg^.trm_Project = gadgets_project) THEN BEGIN
+               CASE trmsg^.trm_Class OF
+                 TRMS_CLOSEWINDOW : close_me := True;
+                 TRMS_ERROR:        WriteLN(TR_GetErrorString(trmsg^.trm_Data));
+               ELSE
+               END;
+            END;
+            TR_ReplyMsg(trmsg);
+          END;
+        UNTIL close_me OR (trmsg = NIL);
+      END;
+      TR_UnlockProject(Main_Project);
+      TR_CloseProject(gadgets_project);
+    END ELSE WriteLN(TR_GetErrorString(TR_GetLastError(App)));
+END;
+
+
+PROCEDURE do_backfill;
+VAR
+    close_me         : BOOLEAN;
+    trmsg            : pTR_Message;
+    backfill_project : pTR_Project;
+
+BEGIN
+ProjectStart;
+  WindowID(7); WindowTitle('Backfill'); WindowPosition(TRWP_CENTERDISPLAY);
+  VertGroupA;
+    Space;  CenteredText('Each window and');
+    SpaceS; CenteredText('FrameBox can have');
+    SpaceS; CenteredText('one of the following');
+    SpaceS; CenteredText('backfill patterns');
+    Space;  HorizGroupA;
+              Space; GroupBox; ObjectBackfillS; SpaceB;
+              Space; GroupBox; ObjectBackfillSA; SpaceB;
+              Space; GroupBox; ObjectBackfillSF; SpaceB;
+              Space; EndGroup;
+    Space;  HorizGroupA;
+              Space; GroupBox; ObjectBackfillSB; SpaceB;
+              Space; GroupBox; ObjectBackfillA; SpaceB;
+              Space; GroupBox; ObjectBackfillAF; SpaceB;
+              Space; EndGroup;
+    Space;  HorizGroupA;
+              Space; GroupBox; ObjectBackfillAB; SpaceB;
+              Space; GroupBox; ObjectBackfillF; SpaceB;
+              Space; GroupBox; ObjectBackfillFB; SpaceB;
+              Space; EndGroup;
+    Space; EndGroup; EndProject;
+
+    backfill_project := TR_OpenProject(App,@tritontags);
+    IF backfill_project <> NIL THEN BEGIN
+      TR_LockProject(Main_Project);
+      close_me := FALSE;
+      WHILE NOT close_me DO BEGIN
+        TR_Wait(app,0);
+        REPEAT
+          trmsg := TR_GetMsg(app);
+          IF trmsg <> NIL THEN BEGIN
+            IF (trmsg^.trm_Project = backfill_project) THEN BEGIN
+               CASE trmsg^.trm_Class OF
+                 TRMS_CLOSEWINDOW : close_me := True;
+                 TRMS_ERROR:        WriteLN(TR_GetErrorString(trmsg^.trm_Data));
+               ELSE
+               END;
+            END;
+            TR_ReplyMsg(trmsg);
+          END;
+        UNTIL close_me OR (trmsg = NIL);
+      END;
+      TR_UnlockProject(Main_Project);
+      TR_CloseProject(backfill_project);
+    END ELSE WriteLN(TR_GetErrorString(TR_GetLastError(App)));
+END;
+
+
+PROCEDURE do_disabling;
+VAR
+    close_me          : BOOLEAN;
+    trmsg             : pTR_Message;
+    disabling_project : pTR_Project;
+
+BEGIN
+  ProjectStart;
+  SetTRTag(TRWI_ID,4); SetTRTag(TRWI_Title,'Disabling'); SetTRTag(TRWI_Position,TRWP_CENTERDISPLAY);
+  SetTRTag(TRGR_Vert,                   TRGR_PROPSHARE OR TRGR_ALIGN);
+
+    SetTRTag(TROB_Space,                NULL);
+
+    SetTRTag(TRGR_Horiz,                TRGR_PROPSHARE OR TRGR_ALIGN OR TRGR_CENTER);
+      SetTRTag(TROB_Space,              NULL);
+      SetTRTag(TROB_CheckBox,           NULL); SetTRTag(TRAT_ID, 1); SetTRTag(TRAT_Value, true);
+      SetTRTag(TROB_Space,              NULL);
+      SetTRTag(TROB_Text,               NULL); SetTRTag(TRAT_Text,  '_Disabled'); SetTRTag(TRAT_ID, 1);
+      SetTRTag(TRGR_Horiz,              TRGR_PROPSPACES);
+        SetTRTag(TROB_Space,            NULL);
+        SetTRTag(TRGR_End,              NULL);
+      SetTRTag(TRGR_End,                NULL);
+
+    SetTRTag(TROB_Space,                NULL);
+
+    SetTRTag(TRGR_Horiz,                TRGR_EQUALSHARE OR TRGR_CENTER);
+      SetTRTag(TROB_Space,              NULL);
+      SetTRTag(TROB_Line,               TROF_HORIZ);
+      SetTRTag(TROB_Space,              NULL);
+      SetTRTag(TRGR_End,                NULL);
+
+    SetTRTag(TROB_Space,                NULL);
+
+    SetTRTag(TRGR_Horiz,                TRGR_PROPSHARE OR TRGR_ALIGN OR TRGR_CENTER);
+      SetTRTag(TROB_Space,              NULL);
+      SetTRTag(TROB_CheckBox,           NULL); SetTRTag(TRAT_Value, true); SetTRTag(TRAT_ID, 2); SetTRTag(TRAT_Disabled, true);
+      SetTRTag(TROB_Space,              NULL);
+      SetTRTag(TROB_Text,               NULL); SetTRTag(TRAT_Text,  '_Checkbox'); SetTRTag(TRAT_ID, 2);
+      SetTRTag(TROB_Space,              NULL);
+    SetTRTag(TRGR_End,                  NULL);
+
+    SetTRTag(TROB_Space,                NULL);
+
+    SetTRTag(TRGR_Horiz,                TRGR_PROPSHARE OR TRGR_ALIGN OR TRGR_CENTER);
+      SetTRTag(TROB_Space,              NULL);
+      SetTRTag(TROB_Button,             NULL); SetTRTag(TRAT_Text,  '_Button'); SetTRTag(TRAT_ID, 3); SetTRTag(TRAT_Disabled, true);
+      SetTRTag(TROB_Space,              NULL);
+    SetTRTag(TRGR_End,                  NULL);
+
+    SetTRTag(TROB_Space,                NULL);
+
+  SetTRTag(TRGR_End,                    NULL);
+
+  EndProject;
+
+    disabling_project := TR_OpenProject(App,@tritontags);
+    IF disabling_project <> NIL THEN BEGIN
+      TR_LockProject(Main_Project);
+      close_me := FALSE;
+      WHILE NOT close_me DO BEGIN
+        TR_Wait(app,0);
+        REPEAT
+          trmsg := TR_GetMsg(app);
+          IF trmsg <> NIL THEN BEGIN
+            IF (trmsg^.trm_Project = disabling_project) THEN BEGIN
+               CASE trmsg^.trm_Class OF
+                 TRMS_CLOSEWINDOW : close_me := True;
+                 TRMS_ERROR:        WriteLN(TR_GetErrorString(trmsg^.trm_Data));
+                 TRMS_NEWVALUE: BEGIN
+                                  IF trmsg^.trm_ID =1 THEN BEGIN
+                                    TR_SetAttribute(disabling_project,2,TRAT_Disabled,trmsg^.trm_Data);
+                                    TR_SetAttribute(disabling_project,3,TRAT_Disabled,trmsg^.trm_Data);
+                                  END;
+                                END;
+               ELSE
+               END;
+            END;
+            TR_ReplyMsg(trmsg);
+          END;
+        UNTIL close_me OR (trmsg = NIL);
+      END;
+      TR_UnlockProject(Main_Project);
+      TR_CloseProject(disabling_project);
+    END ELSE WriteLN(TR_GetErrorString(TR_GetLastError(App)));
+END;
+
+
+PROCEDURE do_notification;
+VAR
+    close_me             : BOOLEAN;
+    trmsg                : pTR_Message;
+    notification_project : pTR_Project;
+
+BEGIN
+ProjectStart;
+  WindowID(6); WindowTitle('Notification'); WindowPosition(TRWP_CENTERDISPLAY);
+  VertGroupA;
+    Space;
+    NamedSeparatorI('_Checkmarks',1);
+    Space;
+
+    HorizGroupSAC;
+      Space; CheckBox(1);
+      Space; CheckBox(1);
+      Space; CheckBox(1);
+      Space; EndGroup;
+
+    Space;
+
+    HorizGroupSAC;
+      Space; CheckBox(1);
+      Space; CheckBox(1);
+      Space; CheckBox(1);
+      Space; EndGroup;
+
+    Space;
+    HorizGroupSAC;
+      Space; CheckBox(1);
+      Space; CheckBox(1);
+      Space; CheckBox(1);
+      Space; EndGroup;
+
+    Space;
+    NamedSeparatorI('_Slider and Progress indicator',2);
+    Space;
+
+    HorizGroupAC;
+      Space;
+      SliderGadget(0,10,8,2);
+      Space;
+      Integer3(8);SetTRTag(TRAT_ID,2);SetTRTag(TRAT_MinWidth,3);
+      Space;
+      EndGroup;
+
+    Space;
+
+    HorizGroupAC;
+      Space;
+      TextN('0%');
+      Space;
+      Progress(10,8,2);
+      Space;
+      TextN('100%');
+      Space;
+      EndGroup;
+
+    Space;
+  EndGroup; EndProject;
+
+    notification_project := TR_OpenProject(App,@tritontags);
+    IF notification_project <> NIL THEN BEGIN
+      TR_LockProject(Main_Project);
+      close_me := FALSE;
+      WHILE NOT close_me DO BEGIN
+        TR_Wait(app,0);
+        REPEAT
+          trmsg := TR_GetMsg(app);
+          IF trmsg <> NIL THEN BEGIN
+            IF (trmsg^.trm_Project = notification_project) THEN BEGIN
+               CASE trmsg^.trm_Class OF
+                 TRMS_CLOSEWINDOW : close_me := True;
+                 TRMS_ERROR:        WriteLN(TR_GetErrorString(trmsg^.trm_Data));
+               ELSE
+               END;
+            END;
+            TR_ReplyMsg(trmsg);
+          END;
+        UNTIL close_me OR (trmsg = NIL);
+      END;
+      TR_UnlockProject(Main_Project);
+      TR_CloseProject(notification_project);
+    END ELSE WriteLN(TR_GetErrorString(TR_GetLastError(App)));
+END;
+
+
+PROCEDURE do_lists;
+CONST
+
+    LVList1Strings : ARRAY[0..18] OF PChar = (
+                       'This is a' ,
+                       'READ ONLY' ,
+                       'Listview' ,
+                       'gadget using' ,
+                       'the fixed-' ,
+                       'width font.' ,
+                       '' ,
+                       'This window' ,
+                       'will remember' ,
+                       'its position' ,
+                       'even without' ,
+                       'the Preferences' ,
+                       'system, when' ,
+                       'you reopen it,' ,
+                       'because it has' ,
+                       'got a dimension' ,
+                       'structure' ,
+                       'attached' ,
+                       'to it.');
+
+
+
+    LVList2Strings : ARRAY [0..8] OF PChar = (
+                       'This is a' ,
+                       'SELECT' ,
+                       'Listview' ,
+                       'gadget.' ,
+                       'Use the' ,
+                       'numeric' ,
+                       'key pad to' ,
+                       'move' ,
+                       'around.');
+
+
+
+    LVList3Strings : ARRAY [0..12] OF PChar = (
+                       'This is a' ,
+                       'SHOW' ,
+                       'SELECTED' ,
+                       'Listview' ,
+                       'gadget.' ,
+                       'This list' ,
+                       'is a bit' ,
+                       'longer, so' ,
+                       'that you' ,
+                       'can try the' ,
+                       'other' ,
+                       'keyboard' ,
+                       'shortcuts.');
+
+VAR
+    close_me      : BOOLEAN;
+    trmsg         : pTR_Message;
+    lists_project : pTR_Project;
+    i             : Longint;
+    LVList1,
+    LVList2,
+    LVList3       : pList;
+    MyNode        : pNode;
+
+BEGIN
+
+    New(LVList1);
+    NewList(LVList1);
+    FOR i := 0 TO 18 DO BEGIN
+        New(MyNode);
+        MyNode^.ln_Name := LVList1Strings[i];
+        AddTail(LVList1,MyNode);
+    END;
+
+    New(LVList2);
+    NewList(LVList2);
+    FOR i := 0 TO 8 DO BEGIN
+        New(MyNode);
+        MyNode^.ln_Name := LVList2Strings[i];
+        AddTail(LVList2,MyNode);
+    END;
+
+    New(LVList3);
+    NewList(LVList3);
+    FOR i := 0 TO 12 DO BEGIN
+        New(MyNode);
+        MyNode^.ln_Name := LVList3Strings[i];
+        AddTail(LVList3,MyNode);
+    END;
+
+ProjectStart;
+  WindowID(9); WindowTitle('Lists'); WindowPosition(TRWP_CENTERDISPLAY);
+  HorizGroupA; Space; VertGroupA;
+    Space;
+    NamedSeparatorIN('_Read only',1);
+    Space;
+    FWListROCN(LVList1,1,0);
+    Space;
+    NamedSeparatorIN('_Select',2);
+    Space;
+    ListSelC(LVList2,2,0);
+    Space;
+    NamedSeparatorIN('S_how selected',3);
+    Space;
+    ListSSN(LVList3,3,0,1);
+    Space;
+  EndGroup; Space; EndGroup;
+  EndProject;
+
+    lists_project := TR_OpenProject(App,@tritontags);
+    IF lists_project <> NIL THEN BEGIN
+      TR_LockProject(Main_Project);
+      close_me := FALSE;
+      WHILE NOT close_me DO BEGIN
+        TR_Wait(app,0);
+        REPEAT
+          trmsg := TR_GetMsg(app);
+          IF trmsg <> NIL THEN BEGIN
+            IF (trmsg^.trm_Project = lists_project) THEN BEGIN
+               CASE trmsg^.trm_Class OF
+                 TRMS_CLOSEWINDOW : close_me := True;
+                 TRMS_ERROR:        WriteLN(TR_GetErrorString(trmsg^.trm_Data));
+               ELSE
+               END;
+            END;
+            TR_ReplyMsg(trmsg);
+          END;
+        UNTIL close_me OR (trmsg = NIL);
+      END;
+      TR_UnlockProject(Main_Project);
+      TR_CloseProject(lists_project);
+    END ELSE WriteLN(TR_GetErrorString(TR_GetLastError(App)));
+END;
+
+PROCEDURE do_appwindow;
+VAR
+    close_me          : BOOLEAN;
+    trmsg             : pTR_Message;
+    appwindow_project : pTR_Project;
+    chararray         : ARRAY [0..100] OF Char;
+    dirname           : PChar;
+    temp              : BOOLEAN;
+    reqstr            : STRING[200];
+
+BEGIN
+    dirname := @chararray;
+ProjectStart;
+  WindowID(8); WindowTitle('AppWindow'); WindowPosition(TRWP_CENTERDISPLAY);
+  VertGroupA;
+    Space;  CenteredText('This window is an application window.');
+    SpaceS; CenteredText('Drop icons into the window or into');
+    SpaceS; CenteredText('the icon drop boxes below and see');
+    SpaceS; CenteredText('what will happen...');
+    Space;  HorizGroupA;
+              Space; DropBox(1);
+              Space; DropBox(2);
+              Space; EndGroup;
+    Space; EndGroup; EndProject;
+
+  appwindow_project := TR_OpenProject(App,@tritontags);
+    IF appwindow_project <> NIL THEN BEGIN
+      TR_LockProject(Main_Project);
+      close_me := FALSE;
+      WHILE NOT close_me DO BEGIN
+        TR_Wait(app,0);
+        REPEAT
+          trmsg := TR_GetMsg(app);
+          IF trmsg <> NIL THEN BEGIN
+            IF (trmsg^.trm_Project = appwindow_project) THEN BEGIN
+               CASE trmsg^.trm_Class OF
+                 TRMS_CLOSEWINDOW : close_me := True;
+                 TRMS_ERROR:        WriteLN(TR_GetErrorString(trmsg^.trm_Data));
+                 TRMS_ICONDROPPED:  BEGIN
+                                      dirname[0] := #0;
+                                      temp := NameFromLock(Longint(pAppMessage(trmsg^.trm_Data)^.am_ArgList^[1].wa_Lock),dirname,100);
+                                      temp := AddPart(dirname,(pAppMessage(trmsg^.trm_Data)^.am_ArgList^[1].wa_Name),100);
+                                      case trmsg^.trm_ID of
+                                         1: reqstr := 'Icon(s) dropped into the left box.' + #9 + 'Name of first dropped icon:' + #10 + '%3' + strpas(dirname);
+                                         2: reqstr := 'Icon(s) dropped into the right box.' + #9 + 'Name of first dropped icon:' + #10 + '%3' + strpas(dirname);
+                                         ELSE reqstr := 'Icon(s) dropped into the window.' + #9 + 'Name of first dropped icon:' + #10 + '%3' + strpas(dirname);
+                                      END;
+                                      TR_EasyRequestTags(App,reqstr,'_Ok',[
+                                                     TREZ_LockProject, appwindow_project,
+                                                     TREZ_Title,'AppWindow report',
+                                                     TREZ_Activate,1,
+                                                     TAG_END]);
+
+                                    END;
+               ELSE
+               END;
+            END;
+            TR_ReplyMsg(trmsg);
+          END;
+        UNTIL close_me OR (trmsg = NIL);
+      END;
+      TR_UnlockProject(Main_Project);
+      TR_CloseProject(appwindow_project);
+    END ELSE WriteLN(TR_GetErrorString(TR_GetLastError(App)));
+END;
+
+PROCEDURE Do_Main;
+VAR
+    trmsg      : pTR_Message;
+    quit       : BOOLEAN;
+    reqstr     : string[255];
+    helpstring : PChar;
+    abouttags  : Pointer;
+
+BEGIN
+
+    ProjectStart;
+    BeginRequester('About...',TRWP_CENTERDISPLAY);
+
+    VertGroupA; Space;  CenteredText3('Triton Demo 2.0');
+              SpaceS; CenteredText('© 1993-1996 by Stefan Zeiger');
+              Space;  HorizSeparator;
+              Space;  CenteredText('This program is using the');
+              SpaceS; CenteredText('Triton GUI creation system');
+              SpaceS; CenteredText('which is © by Stefan Zeiger');
+              Space;  EndGroup;
+
+    BeginRequesterGads;
+    CenteredButtonRE('_Ok',1);
+    EndRequester;
+
+    abouttags := CloneTagItems(@tritontags);
+
+    ProjectStart;
+    WindowID(10); WindowTitle('Triton Demo');
+    WindowPosition(TRWP_CENTERDISPLAY);
+    WindowFlags(TRWF_HELP);
+    QuickHelpOn(1);
+    BeginMenu('Project');
+      MenuItem('?_About...',101);
+      ItemBarlabel;
+      MenuItem('H_Help',102);
+      MenuItemCC('I_QuickHelp',104);
+      ItemBarlabel;
+      MenuItem('Q_Quit',103);
+    VertGroupA;
+      Space;  CenteredText3('T · r · i · t · o · n');
+      Space;  CenteredText3('The object oriented GUI creation system');
+      Space;  CenteredText('Demo program for release 2.0');
+      Space;  CenteredText('Written and © 1993-1997 by Stefan Zeiger');
+      Space;  CenteredText('This demo made in FPC Pascal');
+      Space;  HorizSeparator;
+      Space;  HorizGroupEA;
+              Space; Button('_Gadgets',1); QuickHelp('Show some fancy gadgets');
+              Space; Button('G_roups',2); QuickHelp('Groupies?'+#10+'Huh huh...');
+              Space; Button('_Text',3); QuickHelp('You know what ''text'' means, huh?');
+              Space; EndGroup;
+      Space; HorizGroupEA;
+              Space; Button('_Connections',4); QuickHelp('So you''re super-connected now...');
+              Space; Button('_Backfill',5); QuickHelp('United colors of Triton');
+              Space; Button('_Disabling',6); QuickHelp('To be or not to be');
+              Space; EndGroup;
+      Space; HorizGroupEA;
+              Space; Button('_AppWindow',7); QuickHelp('Demonstrate AppWindow feature');
+              Space; Button('_Menus',8); QuickHelp('A fancy pull-down menu');
+              Space; Button('_Lists',9); QuickHelp('· 4 eggs'+#10+'· 1/2lbs bread'+#10+'· 1l milk'+#9+'%3PS: Don''t be late');
+              Space; EndGroup;
+      Space; EndGroup; EndProject;
+
+    Main_Project := TR_OpenProject(App,@tritontags);
+    IF Main_Project <> NIL THEN BEGIN
+      quit := FALSE;
+      WHILE NOT quit DO BEGIN
+        TR_Wait(app,0);
+        REPEAT
+          trmsg := TR_GetMsg(app);
+          IF trmsg <> NIL THEN BEGIN
+            IF (trmsg^.trm_Project = Main_Project) THEN BEGIN
+               CASE trmsg^.trm_Class OF
+                 TRMS_CLOSEWINDOW : quit := True;
+                 TRMS_NEWVALUE    : IF (trmsg^.trm_ID=104) THEN TR_SetAttribute(Main_Project,0,TRWI_QuickHelp,trmsg^.trm_Data);
+                 TRMS_ACTION      : BEGIN
+                                      CASE trmsg^.trm_ID OF
+                                          1: do_gadgets;
+                                          2: do_groups;
+                                          3: do_text;
+                                          4: do_notification;
+                                          5: do_backfill;
+                                          6: do_disabling;
+                                          7: do_appwindow;
+                                          8: do_menus;
+                                          9: do_lists;
+                                        101: TR_AutoRequest(App,Main_Project,abouttags);
+                                        102: begin
+                                                TR_EasyRequestTags(App,'To get help, move the mouse pointer over' + #10 +
+                                                'any gadget or menu item and press <Help>'+#10+
+                                                'or turn on QuickHelp before.','_Ok',[
+                                                TREZ_LockProject,Main_Project,
+                                                TREZ_Title,'Triton help',
+                                                TAG_END]);
+                                             end;
+                                        103: quit := True;
+                                       END;
+                                    END;
+                 TRMS_HELP        : BEGIN
+                                      helpstring := PChar(TR_GetAttribute(Main_Project,trmsg^.trm_ID,TRDO_QuickHelpString));
+                                      IF helpstring <> NIL THEN BEGIN
+                                         reqstr := 'Help for object ' + IntToStr(trmsg^.trm_ID) + ':' + #10 + '%h' + strpas(helpstring);
+                                      END ELSE BEGIN
+                                         reqstr := 'No help available for object ' + IntToStr(trmsg^.trm_ID);
+                                      END;
+                                      TR_EasyRequestTags(App,reqstr,'_Ok',[
+                                                     TREZ_LockProject,Main_Project,
+                                                     TREZ_Title,'Triton help',
+                                                     TAG_END]);
+                                    END;
+                 TRMS_ERROR:        WriteLN(TR_GetErrorString(trmsg^.trm_Data));
+                 ELSE
+                 END;
+            END;
+            TR_ReplyMsg(trmsg);
+          END;
+        UNTIL quit OR (trmsg = NIL);
+      END;
+      TR_CloseProject(Main_Project);
+      FreeTagItems(abouttags);
+      END ELSE WriteLN(TR_GetErrorString(TR_GetLastError(App)));
+END;
+
+BEGIN
+
+    App := TR_CreateAppTags([
+              TRCA_Name,'TritonDemo',
+              TRCA_LongName,'Triton Demo',
+              TRCA_Version,'2.0',
+              TAG_DONE]);
+
+    if App <> nil then begin
+       Do_Main;
+       TR_DeleteApp(App);;
+    end;
+END.
+
+{
+  $Log
+}
+
+  
+
+
+

+ 372 - 0
packages/extra/amunits/otherlibs/triton/examples/envprint.pas

@@ -0,0 +1,372 @@
+Program EnvPrint;
+
+(*
+ *  OpenTriton -- A free release of the triton.library source code
+ *  Copyright (C) 1993-1998  Stefan Zeiger
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  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.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ *  envprint.c - Envprint 2.0 GUI created with Triton
+ *
+ *  As you can see below, it is possible to mix the tag format with
+ *  the C pre-processor macro format. (Actually I was just too lazy
+ *  to transform the whole project definition from tags to macros ;)
+ *
+ *)
+
+{
+   A demo in FPC Pascal using triton.library
+
+   Updated for fpc 1.0.7.
+   Added const null and made use of the updated
+   tritonmacros.
+   09 Jan 2003.
+
+   [email protected]
+}
+
+
+uses triton, tritonmacros,utility;
+
+const
+    null : longint = longint(nil);
+
+var
+    Triton_App : pTR_App;
+
+PROCEDURE do_demo;
+VAR
+    close_me   : BOOLEAN;
+    trmsg      : pTR_Message;
+    dummy      : Longint;
+    Project    : pTR_Project;
+
+BEGIN
+  ProjectStart;
+  WindowID(1); WindowPosition(TRWP_CENTERDISPLAY);
+  WindowTitle('EnvPrint 2.0 <THIS IS ONLY A NON-FUNCTIONAL GUI DEMO>');
+
+  BeginMenu('Project');
+    BeginSub('Load');
+      SubItem('S_Load sender...',1);
+      SubItem('D_Load addressee...',2);
+      SubItem('C_Load comment...',3);
+    BeginSub('Save');
+      SubItem('O_Load sender',4);
+      SubItem('E_Load addressee',5);
+      SubItem('M_Load comment',6);
+    BeginSub('Sace as');
+      SubItem('U_Load sender as...',7);
+      SubItem('T_Load addressee as...',8);
+      SubItem('N_Load comment as...',9);
+    MenuItem('F_Delete file...',10);
+    ItemBarlabel;
+    MenuItem('P_Print...',11);
+    MenuItem('R_Preferences...',12);
+    ItemBarlabel;
+    MenuItem('?_About...',13);
+    ItemBarlabel;
+    MenuItem('Q_Quit',14);
+
+  BeginMenu('Edit');
+    MenuItem('W_Swap',15);
+    MenuItem('X_Clear',16);
+
+  HorizGroupA;
+    Space;
+    VertGroupA;
+      HorizGroupEAC;
+        VertGroupA;
+
+          Space;
+
+          NamedSeparatorI('Se_nder',101);
+
+          SetTRTag(TROB_Space,          null);
+
+          HorizGroup;
+            StringGadget(NIL,101);
+            SetTRTag(TRGR_Horiz,0 OR TRGR_FIXHORIZ);;
+              GetEntryButtonS('_1',1101);
+              EndGroup;
+            EndGroup;
+
+          SpaceS;
+
+          HorizGroup;
+            StringGadget(NIL,102);
+            SetTRTag(TRGR_Horiz,0 OR TRGR_FIXHORIZ);;
+              GetEntryButtonS('_2',1102);
+              EndGroup;
+            EndGroup;
+
+          SpaceS;
+
+          HorizGroup;
+            StringGadget(NIL,103);
+            SetTRTag(TRGR_Horiz,0 OR TRGR_FIXHORIZ);;
+              GetEntryButtonS('_3',1103);
+              EndGroup;
+            EndGroup;
+
+          SetTRTag(TROB_Space,          TRST_SMALL);
+
+          HorizGroup;
+            StringGadget(NIL,104);
+            SetTRTag(TRGR_Horiz,0 OR TRGR_FIXHORIZ);;
+              GetEntryButtonS('_4',1104);
+              EndGroup;
+            EndGroup;
+
+          SetTRTag(TROB_Space,          TRST_SMALL);
+
+          HorizGroup;
+            StringGadget(NIL,105);
+            SetTRTag(TRGR_Horiz,0 OR TRGR_FIXHORIZ);;
+              GetEntryButtonS('_5',1105);
+              EndGroup;
+            EndGroup;
+
+          SetTRTag(TROB_Space,          TRST_SMALL);
+
+          HorizGroup;
+            StringGadget(NIL,106);
+            SetTRTag(TRGR_Horiz,0 OR TRGR_FIXHORIZ);;
+              GetEntryButtonS('_6',1106);
+              EndGroup;
+            EndGroup;
+
+          SetTRTag(TROB_Space,          TRST_SMALL);
+
+          HorizGroup;
+            StringGadget(NIL,107);
+            SetTRTag(TRGR_Horiz,0 OR TRGR_FIXHORIZ);;
+              GetEntryButtonS('_7',1107);
+              EndGroup;
+            EndGroup;
+
+          SetTRTag(TROB_Space,          TRST_SMALL);
+
+          HorizGroup;
+            StringGadget(NIL,108);
+            SetTRTag(TRGR_Horiz,0 OR TRGR_FIXHORIZ);;
+              GetEntryButtonS('_8',1108);
+              EndGroup;
+            EndGroup;
+
+          SetTRTag(TROB_Space,          null);
+
+          SetTRTag(TRGR_End,            null);
+
+        SetTRTag(TROB_Space,            null);
+
+        SetTRTag(TRGR_Vert,             TRGR_PROPSHARE OR TRGR_ALIGN);
+
+          SetTRTag(TROB_Space,          null);
+
+          NamedSeparatorI('Add_ressee',201);
+
+          SetTRTag(TROB_Space,          null);
+
+          HorizGroup;
+            StringGadget(NIL,201);
+            SetTRTag(TRGR_Horiz,0 OR TRGR_FIXHORIZ);;
+              GetEntryButtonS('_!',1201);
+              EndGroup;
+            EndGroup;
+
+          SpaceS;
+
+          HorizGroup;
+            StringGadget(NIL,202);
+            SetTRTag(TRGR_Horiz,0 OR TRGR_FIXHORIZ);;
+              GetEntryButtonS('_''',1202);
+              EndGroup;
+            EndGroup;
+
+          SpaceS;
+
+          HorizGroup;
+            StringGadget(NIL,203);
+            SetTRTag(TRGR_Horiz,0 OR TRGR_FIXHORIZ);;
+              GetEntryButtonS('_§',1203);
+              EndGroup;
+            EndGroup;
+
+          SetTRTag(TROB_Space,          TRST_SMALL);
+
+          HorizGroup;
+            StringGadget(NIL,204);
+            SetTRTag(TRGR_Horiz,0 OR TRGR_FIXHORIZ);;
+              GetEntryButtonS('_$',1204);
+              EndGroup;
+            EndGroup;
+
+          SetTRTag(TROB_Space,          TRST_SMALL);
+
+          HorizGroup;
+            StringGadget(NIL,205);
+            SetTRTag(TRGR_Horiz,0 OR TRGR_FIXHORIZ);;
+              GetEntryButtonS('_%%',1205);
+              EndGroup;
+            EndGroup;
+
+          SetTRTag(TROB_Space,          TRST_SMALL);
+
+          HorizGroup;
+            StringGadget(NIL,206);
+            SetTRTag(TRGR_Horiz,0 OR TRGR_FIXHORIZ);;
+              GetEntryButtonS('_&',1206);
+              EndGroup;
+            EndGroup;
+
+          SetTRTag(TROB_Space,          TRST_SMALL);
+
+          HorizGroup;
+            StringGadget(NIL,207);
+            SetTRTag(TRGR_Horiz,0 OR TRGR_FIXHORIZ);;
+              GetEntryButtonS('_/',1207);
+              EndGroup;
+            EndGroup;
+
+          SetTRTag(TROB_Space,          TRST_SMALL);
+
+          HorizGroup;
+            StringGadget(NIL,208);
+            SetTRTag(TRGR_Horiz,0 OR TRGR_FIXHORIZ);;
+              GetEntryButtonS('_(',1208);
+              EndGroup;
+            EndGroup;
+
+          SetTRTag(TROB_Space,          null);
+
+          SetTRTag(TRGR_End,            null);
+
+        SetTRTag(TRGR_End,              null);
+
+      NamedSeparatorI('Co_mment',301);
+
+      SetTRTag(TROB_Space,              null);
+
+      HorizGroup;
+        StringGadget(NIL,301);
+        SetTRTag(TRGR_Horiz,0 OR TRGR_FIXHORIZ);;
+          GetEntryButtonS('_0',1301);
+          EndGroup;
+        EndGroup;
+
+      SetTRTag(TROB_Space,              null);
+
+      SetTRTag(TRGR_End,                null);
+
+    SetTRTag(TROB_Space,                null);
+    SetTRTag(TROB_Line,                 TROF_VERT OR TROF_RAISED);
+
+    SetTRTag(TROB_Space,                TRST_BIG);
+
+    SetTRTag(TRGR_Vert,                 TRGR_PROPSHARE OR TRGR_ALIGN OR TRGR_FIXHORIZ);
+      SetTRTag(TROB_Space,              null);
+      SetTRTag(TRGR_Horiz,              TRGR_EQUALSHARE OR TRGR_CENTER);
+        SetTRTag(TROB_Line,             TROF_HORIZ);
+        SetTRTag(TROB_Space,            null);
+        SetTRTag(TROB_Text,             null); SetTRTag(TRAT_Text,  'Load'); SetTRTag(TRAT_Flags, TRTX_TITLE);
+        SetTRTag(TROB_Space,            null);
+        SetTRTag(TROB_Line,             TROF_HORIZ);
+        SetTRTag(TRGR_End,              null);
+      SetTRTag(TROB_Space,              null);
+      SetTRTag(TROB_Button,             null); SetTRTag(TRAT_Text,  '_Sender...'); SetTRTag(TRAT_ID, 501);
+      SetTRTag(TROB_Space,              TRST_SMALL);
+      SetTRTag(TROB_Button,             null); SetTRTag(TRAT_Text,  '_Addressee...'); SetTRTag(TRAT_ID, 502);
+      SetTRTag(TROB_Space,              TRST_SMALL);
+      SetTRTag(TROB_Button,             null); SetTRTag(TRAT_Text,  '_Comment...'); SetTRTag(TRAT_ID, 503);
+      SetTRTag(TROB_Space,              null);
+      SetTRTag(TRGR_Horiz,              TRGR_EQUALSHARE OR TRGR_CENTER);
+        SetTRTag(TROB_Line,             TROF_HORIZ);
+        SetTRTag(TROB_Space,            null);
+        SetTRTag(TROB_Text,             null); SetTRTag(TRAT_Text,  'Save'); SetTRTag(TRAT_Flags, TRTX_TITLE);
+        SetTRTag(TROB_Space,            null);
+        SetTRTag(TROB_Line,             TROF_HORIZ);
+        SetTRTag(TRGR_End,              null);
+      SetTRTag(TROB_Space,              null);
+      SetTRTag(TROB_Button,             null); SetTRTag(TRAT_Text,  'S_ender...'); SetTRTag(TRAT_ID, 504);
+      SetTRTag(TROB_Space,              TRST_SMALL);
+      SetTRTag(TROB_Button,             null); SetTRTag(TRAT_Text,  'A_ddressee...'); SetTRTag(TRAT_ID, 505);
+      SetTRTag(TROB_Space,              TRST_SMALL);
+      SetTRTag(TROB_Button,             null); SetTRTag(TRAT_Text,  'C_omment...'); SetTRTag(TRAT_ID, 506);
+      SetTRTag(TROB_Space,              TRST_BIG);
+      SetTRTag(TROB_Line,               TROF_HORIZ);
+      SetTRTag(TROB_Space,              TRST_BIG);
+      SetTRTag(TRGR_Horiz,              TRGR_EQUALSHARE);
+        SetTRTag(TROB_Button,           null); SetTRTag(TRAT_Text,  '_Print...'); SetTRTag(TRAT_ID, 507);
+        SetTRTag(TROB_Space,            TRST_SMALL);
+        SetTRTag(TROB_Button,           null); SetTRTag(TRAT_Text,  'S_wap'); SetTRTag(TRAT_ID, 508);
+        SetTRTag(TRGR_End,              null);
+      SetTRTag(TROB_Space,              TRST_SMALL);
+      SetTRTag(TRGR_Horiz,              TRGR_EQUALSHARE);
+        SetTRTag(TROB_Button,           null); SetTRTag(TRAT_Text,  'Pre_fs...'); SetTRTag(TRAT_ID, 509);
+        SetTRTag(TROB_Space,            TRST_SMALL);
+        SetTRTag(TROB_Button,           null); SetTRTag(TRAT_Text,  'C_lear'); SetTRTag(TRAT_ID, 510);
+        SetTRTag(TRGR_End,              null);
+      SetTRTag(TROB_Space,              null);
+    SetTRTag(TRGR_End,                  null);
+
+    SetTRTag(TROB_Space,                null);
+
+  SetTRTag(TRGR_End,                    null);
+
+  EndProject;
+
+  Project := TR_OpenProject(Triton_App,@tritontags);
+    IF Project <> NIL THEN BEGIN
+      close_me := FALSE;
+      WHILE NOT close_me DO BEGIN
+        dummy := TR_Wait(Triton_App,0);
+        REPEAT
+          trmsg := TR_GetMsg(Triton_App);
+          IF trmsg <> NIL THEN BEGIN
+            IF (trmsg^.trm_Project = Project) THEN BEGIN
+               CASE trmsg^.trm_Class OF
+                 TRMS_CLOSEWINDOW : close_me := True;
+                 TRMS_ERROR:        WriteLN(TR_GetErrorString(trmsg^.trm_Data));
+               END;
+            END;
+            TR_ReplyMsg(trmsg);
+          END;
+        UNTIL close_me OR (trmsg = NIL);
+      END;
+      TR_CloseProject(Project);
+    END ELSE WriteLN(TR_GetErrorString(TR_GetLastError(Triton_App)));
+END;
+
+begin
+  Triton_App := TR_CreateAppTags([
+                TRCA_Name,'Envprint',
+                TRCA_LongName,'EnvPrint GUI demo',
+                TRCA_Version,'2.0',
+                TAG_END]);
+  
+  if Triton_App <> nil then begin
+     do_demo;
+     TR_DeleteApp(Triton_App);
+  END
+  ELSE writeln('Can''t create application');
+END.
+
+{
+  $Log
+}
+
+  
+

+ 286 - 0
packages/extra/amunits/otherlibs/triton/examples/gadgetdemo.pas

@@ -0,0 +1,286 @@
+PROGRAM GadgetDemo;
+
+uses exec, triton, tritonmacros, utility, amigalib,amigautils, linklist;
+
+{
+   A demo in FPC Pascal using triton.library
+
+   Update for fpc 1.0.7.
+   Removed the use of vartags and pas2c.
+   09 Jan 2003.
+   
+   [email protected]
+}
+
+
+
+CONST
+
+
+    NumInList   =  7;
+    cyclenum    =  4;
+
+    mxstrings : ARRAY[0..NumInList-1] OF PChar = (
+                                        'Amiga 500',
+                                        'Amiga 600',
+                                        'Amiga 1200',
+                                        'Amiga 2000',
+                                        'Amiga 3000',
+                                        'Amiga 4000',
+                                         NIL);
+
+    cyclestrings : ARRAY[0..cyclenum-1] OF PChar = (
+                                        'Hallo',
+                                        'Moin',
+                                        'Tach',
+                                         NIL);
+CONST
+
+    ButtonGadID      = 1;
+    CheckGadID       = 2;
+    ScrollGadID      = 3;
+    ScrollGadTextID  = 4;
+    SlidGadID        = 5;
+    SlidGadTextID    = 6;
+    CycleGadID       = 7;
+    CycleGadTextID   = 8;
+    StringGadID      = 9;
+    EntryGadID       = 10;
+    PassGadID        = 11;
+    MxGadID          = 12;
+    MxGadTextID      = 13;
+    ListGadID        = 14;
+
+VAR
+    Triton_App  : pTR_App;
+    Project     : pTR_Project;
+    trmsg       : pTR_Message;
+    quit        : Boolean;
+    z           : Longint;
+    dummy       : Longint;
+    Mylist      : pList;
+    MyNode      : pFPCNode;
+    i           : Longint;
+    GadID       : Longint;
+
+PROCEDURE CleanExit(errstring : STRING; rc : Longint);
+BEGIN
+    IF assigned(Project) THEN TR_CloseProject(Project);
+    if assigned(Triton_App) then TR_DeleteApp(Triton_App);
+    if assigned(MyList) then DestroyList(MyList);
+    IF errstring <> '' THEN WriteLn(errstring);
+    Halt(rc)
+END;
+
+BEGIN
+
+    CreateList(MyList);
+    FOR i := 0 TO NumInList-2 DO BEGIN
+        MyNode := AddNewNode(MyList,mxstrings[i]);
+    END;
+
+    Triton_App := TR_CreateAppTags([
+                     TRCA_Name,'FPC Pascal Demo',
+                     TRCA_LongName,'FPC Pascal Application Demo :)',
+                     TRCA_Version,'0.01',
+                     TRCA_Info,'Just a test of Triton',
+                     TRCA_Release,'1.0',
+                     TRCA_Date,'01-05-1996',
+                     TAG_DONE]);
+
+    if Triton_App = NIL then CleanExit('Can''t create application',20);
+
+ProjectStart;
+    WindowID(1);
+    WindowPosition(TRWP_CENTERDISPLAY);
+    WindowTitle('Gadgets');
+       HorizGroupAC;
+          Space;
+          VertGroupA;
+             Space;
+             NamedSeparator('Gadget deactivate');
+             Space;
+             Button('_Button',ButtonGadID);
+             Space;
+             HorizGroupSC;
+                Space;
+                HorizGroup;
+                   TextID('_Gadget activ?',CheckGadID);
+                   Space;
+                   CheckBoxCLEFT(CheckGadID);
+                EndGroup;
+                Space;
+             EndGroup;
+             SpaceB;
+             NamedSeparator('Pick value');
+             Space;
+             LineArray;
+                BeginLine;
+                   TextID('Sc_roller',ScrollGadID);
+                   SetTRTag(TRAT_Flags,TROF_RIGHTALIGN);
+                   Space;
+                   SetTRTag(TROB_Scroller,TROF_HORIZ);
+                   SetTRTag(TRSC_Total,40);
+                   SetTRTag(TRSC_Visible,10);
+                   SetTRTag(TRAT_Value,5);
+                   SetTRTag(TRAT_ID,ScrollGadID);
+                   Space;
+                   ClippedTextBoxMW('5',ScrollGadTextID,2);
+                EndLine;
+                Space;
+                BeginLine;
+                   TextID('S_lider',SlidGadID);
+                   SetTRTag(TRAT_Flags,TROF_RIGHTALIGN);
+                   Space;
+                   SliderGadget(1,50,25,SlidGadID);
+                   Space;
+                   ClippedTextBoxMW('25',SlidGadTextID,2);
+                EndLine;
+                Space;
+                BeginLine;
+                   TextID('C_ycle',CycleGadID);
+                   SetTRTag(TRAT_Flags,TROF_RIGHTALIGN);
+                   Space;
+                   CycleGadget(@cyclestrings,0,CycleGadID);
+                   Space;
+                   ClippedTextBoxMW(cyclestrings[0],CycleGadTextID,5);
+                EndLine;
+             EndArray;
+             SpaceB;
+              NamedSeparator('Type some Text');
+             Space;
+             LineArray;
+                BeginLine;
+                   TextID('_String',StringGadID);
+                   SetTRTag(TRAT_Flags,TROF_RIGHTALIGN);
+                   Space;
+                   StringGadget('Please change',StringGadID);
+                   GetEntryButton(EntryGadID);
+                EndLine;
+                Space;
+                BeginLine;
+                   TextID('_Password',PassGadID);
+                   SetTRTag(TRAT_Flags,TROF_RIGHTALIGN);
+                   Space;
+                   PasswordGadget('',PassGadID);
+                EndLine;
+             EndArray;
+             Space;
+          EndGroup;
+          Space;
+          VertSeparator;
+          Space;
+          VertGroupAC;
+             Space;
+             NamedSeparatorI('C_hoose',MxGadID);
+             Space;
+             MXGadget(@mxstrings,4,MxGadID);
+             Space;
+             ClippedTextBox(mxstrings[4],MxGadTextID);
+             SpaceB;
+             NamedSeparatorI('D_oubleclick!',ListGadID);
+             Space;
+             ListSS(Mylist,ListGadID,0,0);
+          EndGroup;
+          Space;
+       EndGroup;
+    EndProject;
+
+    Project := TR_OpenProject(Triton_App,@tritontags);
+
+    IF Project = NIL THEN CleanExit('No project',20);
+
+    quit := False;
+    WHILE NOT quit DO BEGIN
+      dummy := TR_Wait(Triton_App,0);
+      REPEAT
+        trmsg := TR_GetMsg(Triton_App);
+        IF trmsg <> NIL THEN BEGIN
+          IF (trmsg^.trm_Project = Project) THEN BEGIN
+             CASE trmsg^.trm_Class OF
+
+               TRMS_CLOSEWINDOW :
+               BEGIN
+                 TR_LockProject(project);
+                 dummy := TR_EasyRequest(Triton_App,'%3Sure you want to end this demo?','Yes|No',NIL);
+                 TR_UnlockProject(project);
+                 IF dummy = 1 THEN quit := True;
+               END;
+
+               TRMS_NEWVALUE :
+               BEGIN
+                 GadID := trmsg^.trm_ID;
+                 CASE GadID OF
+
+                   CheckGadID :
+                   BEGIN
+                     dummy := trmsg^.trm_Data;
+                     IF dummy = 1 THEN BEGIN
+                        TR_Disable(project,ButtonGadID);
+                     END ELSE BEGIN
+                        TR_Enable(project,ButtonGadID);
+                        TR_SetString(project,StringGadID,'hello test');
+                     END;
+                   END;
+
+                   ScrollGadID : TR_SetText(project,ScrollGadTextID,LongToStr(trmsg^.trm_Data));
+
+                   SlidGadID   : TR_SetText(project,SlidGadTextID,LongToStr(trmsg^.trm_Data));
+
+                   CycleGadID  : TR_SetText(project,CycleGadTextID,cyclestrings[trmsg^.trm_Data]);
+
+                   StringGadID : ;
+
+                   EntryGadID  : ;
+
+                   PassGadID   : ;
+
+                   MxGadID:
+                   BEGIN
+                     TR_SetText(project,MxGadTextID,mxstrings[trmsg^.trm_Data]);
+                     TR_SetValue(project,ListGadID,(trmsg^.trm_Data));
+                   END;
+
+                   ListGadID :
+                   BEGIN
+                     TR_SetValue(project,MxGadID,(trmsg^.trm_Data));
+                     TR_SetText(project,MxGadTextID,mxstrings[trmsg^.trm_Data]);
+                   END;
+                 END;
+               END;
+
+               TRMS_ACTION :
+               BEGIN
+                 GadID := trmsg^.trm_ID;
+                 CASE GadID OF
+
+                   ButtonGadID :
+                   begin
+                     TR_LockProject(project);
+                     TR_EasyRequest(Triton_App,'You clicked on button ' + LongToStr(trmsg^.trm_ID),'_Aha',nil);
+                     TR_UnlockProject(Project);
+                   END;
+
+                   EntryGadID:
+                   BEGIN
+                     TR_LockProject(project);
+                     z := TR_EasyRequest(Triton_App,TR_GetSTRPTR(project,StringGadID),'OK',NIL);
+                     TR_UnlockProject(Project);
+                   END;
+                 END;
+               END;
+               ELSE
+             END;
+           END;
+           TR_ReplyMsg(trmsg);
+         END;
+       UNTIL quit OR (trmsg = NIL);
+    END;
+    CleanExit('',0);
+END.
+
+{
+  $Log
+}
+
+

+ 285 - 0
packages/extra/amunits/otherlibs/triton/examples/linklib.pas

@@ -0,0 +1,285 @@
+PROGRAM LinkLib;
+
+uses exec, triton, tritonmacros, linklist,
+           amigautils,strings, easyasl, utility;
+
+{
+   A demo in FPC Pascal using triton.library
+   
+   Updated for fpc 1.0.7
+   09 Jan 2003.
+   
+   [email protected]
+}
+
+
+
+VAR
+     Project  : pTR_Project;
+     mylist   : pList;
+     llist    : pList;
+     pdummy   : ARRAY [0..108] OF Char;
+     path     : PChar;
+     Triton_App : pTR_App;
+
+const
+
+    LibListGadID   = 1;
+    AddGadID       = 2;
+    RemoveGadID    = 3;
+    RemAllGadID    = 4;
+    UpGadID        = 5;
+    DownGadID      = 6;
+    OkButton       = 7;
+    CancelButton   = 8;
+
+
+PROCEDURE CleanExit(errstring : STRING; rc : Longint);
+BEGIN
+    IF assigned(Project) THEN TR_CloseProject(Project);
+    IF Assigned(mylist) THEN DestroyList(mylist);
+    IF Assigned(llist) THEN DestroyList(llist); 
+    IF errstring <> '' THEN WriteLn(errstring);
+    Halt(rc)
+END;
+
+PROCEDURE disablegads;
+VAR
+   dummy : Longint;
+BEGIN
+   IF NodesInList(mylist) > 0 THEN dummy := 0
+      ELSE dummy := 1;
+
+   TR_SetAttribute(Project,RemoveGadID,TRAT_Disabled,dummy);
+   TR_SetAttribute(Project,RemAllGadID,TRAT_Disabled,dummy);
+   TR_SetAttribute(Project,UpGadID,TRAT_Disabled,dummy);
+   TR_SetAttribute(Project,DownGadID,TRAT_Disabled,dummy);
+END;
+
+PROCEDURE readinlist;
+VAR
+   dummy : BOOLEAN;
+   temp : pFPCNode;
+BEGIN
+   dummy := FileToList('ram:fpclistoffiles',mylist);
+   IF dummy THEN BEGIN
+      temp := GetFirstNode(mylist);
+      IF temp <> NIL THEN StrCopy(path,PathOf(GetNodeData(temp)));
+      temp := GetLastNode(mylist);
+      IF StrLen(GetNodeData(temp)) = 0 THEN RemoveLastNode(mylist);
+   END;
+END;
+
+PROCEDURE addfiles;
+
+VAR
+  dummy    : BOOLEAN;
+  mynode,tempnode   : pFPCNode;
+  temp  : Longint;
+
+BEGIN
+  dummy := GetMultiAsl('Pick a file or two :)',path,llist,NIL,NIL);
+  IF dummy THEN BEGIN
+     mynode := GetFirstNode(llist);
+     FOR temp := 1 TO NodesInList(llist) DO BEGIN
+        tempnode := AddNewNode(mylist,(PathAndFile(path,GetNodeData(mynode))));
+        mynode := GetNextNode(mynode);
+     END;
+     TR_UpdateListView(Project,LibListGadID,mylist);
+     TR_SetValue(Project,LibListGadID,0);
+     disablegads;
+     ClearList(llist);
+  END;
+END;
+
+PROCEDURE removelib;
+VAR
+   num : Longint;
+   mynode : pFPCNode;
+   strbuf : ARRAY [0..255] OF Char;
+   buffer : PChar;
+   dummy : Longint;
+BEGIN
+   buffer := @strbuf;
+   num := TR_GetValue(Project,LibListGadID);
+   mynode := GetNodeNumber(mylist,num);
+   
+   dummy := TR_EasyRequestTags(Triton_App,'Sure you want to delete'+#10+
+                            strpas(GetNodeData(mynode)),'_Remove|_Cancel',[
+                            TREZ_LockProject,Project,
+                            TREZ_Title,'Delete this file?',
+                            TREZ_Activate,1,
+                            TAG_END]);
+   IF dummy = 1 THEN BEGIN
+      DeleteNode(mynode);
+      TR_UpdateListView(Project,LibListGadID,mylist);
+      TR_SetValue(Project,LibListGadID,0);
+      disablegads;
+   END;
+END;
+
+PROCEDURE removeall;
+VAR
+   dummy : Longint;
+BEGIN
+   dummy := TR_EasyRequestTags(Triton_App,'Sure you want to remove all files?',
+                                      '_Remove|_Cancel',[
+                                      TREZ_LockProject,Project,
+                                      TREZ_Title,'Delete all?',
+                                      TREZ_Activate,1,
+                                      TAG_END]);
+   IF dummy = 1 THEN BEGIN
+      ClearList(mylist);
+      TR_UpdateListView(Project,LibListGadID,mylist);
+      disablegads;
+   END;
+END;
+
+PROCEDURE savethelist;
+VAR
+   dummy : BOOLEAN;
+BEGIN
+   dummy := ListToFile('Ram:fpclistoffiles',mylist);
+END;
+
+PROCEDURE movedown;
+VAR
+   num : INTEGER;
+   mynode : pFPCNode;
+BEGIN
+   num := TR_GetValue(project,LibListGadID);
+   IF num < (NodesInList(mylist)-1) THEN BEGIN
+      mynode := GetNodeNumber(mylist,num);
+      IF mynode <> NIL THEN BEGIN
+          MoveNodeDown(mylist,mynode);
+          TR_UpdateListView(Project,LibListGadID,mylist);
+          TR_SetValue(Project,LibListGadID,num + 1);
+      END;
+   END;
+END;
+
+PROCEDURE moveup;
+VAR
+   num : Longint;
+   mynode : pFPCNode;
+BEGIN
+   num := TR_GetValue(project,LibListGadID);
+   IF num > 0 THEN BEGIN
+      mynode := GetNodeNumber(mylist,num);
+      IF mynode <> NIL THEN BEGIN
+          MoveNodeUp(mylist,mynode);
+          TR_UpdateListView(Project,LibListGadID,mylist);
+          TR_SetValue(Project,LibListGadID,num-1);
+      END;
+   END;
+END;
+
+PROCEDURE do_demo;
+VAR
+    close_me : BOOLEAN;
+    trmsg : pTR_Message;
+    dummy : Longint;
+
+BEGIN
+    ProjectStart;
+               WindowID(1);
+               WindowPosition(TRWP_CENTERDISPLAY);
+               WindowTitle('TritonListViewDemo in FPC Pascal');
+                  HorizGroupAC;
+                     Space;
+                     VertGroupAC;
+                     Space;
+                     NamedSeparator('List of files');
+                        Space;
+                        ListSSM(mylist,LibListGadID,0,0,25);
+                        Space;
+                     EndGroup;
+                     Space;
+                     VertSeparator;
+                     Space;
+                     SetTRTag(TRGR_Vert, TRGR_ALIGN OR TRGR_FIXHORIZ);
+                        Space;
+                        Button('_Add...',AddGadID);
+                        SpaceS;
+                        Button('_Remove...',RemoveGadID);
+                        SpaceS;
+                        Button('Re_move All...',RemAllGadID);
+                        SpaceS;
+                        Button('_Up',UpGadID);
+                        SpaceS;
+                        Button('_Down',DownGadID);
+                        VertGroupS;Space;EndGroup;
+                        Button('_Ok',OkButton);
+                        SpaceS;
+                        Button('_Cancel',CancelButton);
+                        Space;
+                     EndGroup;
+                     Space;
+                  EndGroup;
+               EndProject;
+
+    Project := TR_OpenProject(Triton_App,@tritontags);
+    IF Project <> NIL THEN BEGIN
+      disablegads;
+      close_me := FALSE;
+      WHILE NOT close_me DO BEGIN
+        dummy := TR_Wait(Triton_App,0);
+        REPEAT
+          trmsg := TR_GetMsg(Triton_App);
+          IF trmsg <> NIL THEN BEGIN
+            IF (trmsg^.trm_Project = Project) THEN BEGIN
+               CASE trmsg^.trm_Class OF
+                 TRMS_CLOSEWINDOW : close_me := True;
+                 TRMS_ERROR:        WriteLN(TR_GetErrorString(trmsg^.trm_Data));
+                 TRMS_ACTION :
+                 BEGIN
+                 CASE trmsg^.trm_ID OF
+                   AddGadID : addfiles;
+                   UpGadID : moveup;
+                   DownGadID : movedown;
+                   RemoveGadID : removelib;
+                   RemAllGadID : removeall;
+                   OkButton : BEGIN savethelist; close_me := True; END;
+                   CancelButton : close_me := True;
+                 END;
+               END;
+               ELSE
+               END;
+            END;
+            TR_ReplyMsg(trmsg);
+          END
+        UNTIL close_me OR (trmsg = NIL);
+      END;
+    END ELSE WriteLN(TR_GetErrorString(TR_GetLastError(Triton_App)));
+END;
+
+
+BEGIN  { Main }
+        Triton_App := TR_CreateAppTags([
+                       TRCA_Name,'Triton ListView Demo',
+                       TRCA_LongName,'Demo of ListView in Triton, made in FPC Pascal',
+                       TRCA_Version,'0.01',
+                       TRCA_Info,'Uses tritonsupport',
+                       TRCA_Release,'11',
+                       TRCA_Date,'03-02-1998',
+                       TAG_END]);
+        if Triton_App <> nil then begin
+        path := @pdummy;
+        StrpCopy(path,'sys:');
+        CreateList(mylist);
+        CreateList(llist);
+        readinlist;
+        do_demo;
+        CleanExit('',0);
+     END
+     ELSE CleanExit('Can''t create application',20);
+END.
+
+{
+  $Log
+}
+
+
+                
+                                         
+

+ 106 - 0
packages/extra/amunits/otherlibs/triton/examples/listview.pas

@@ -0,0 +1,106 @@
+PROGRAM ListView;
+
+
+uses exec, triton, tritonmacros, linklist, utility;
+
+
+
+{
+   A demo in FPC Pascal using triton.library
+
+   Updated for fpc1.0.7
+   11 Jan 2003.
+   
+   [email protected]
+}
+
+const
+
+     weekday : array [0..6] of pchar =  (
+                'Monday',
+                'Tuesday',
+                'Wendsday',
+                'Thursday',
+                'Friday',
+                'Saturday',
+                'Sunday');
+
+VAR
+     Project  : pTR_Project;
+     close_me : BOOLEAN;
+     trmsg : pTR_Message;
+     dummy : longint;
+     mylist : pList;
+     mynode : pFPCNode;
+     num : longint;
+     Triton_App : pTr_App;
+
+
+PROCEDURE CleanExit(errstring : STRING; rc : Longint);
+BEGIN
+    if assigned(Triton_App) then TR_DeleteApp(Triton_App);
+    IF assigned(Project) THEN TR_CloseProject(Project);
+    IF Assigned(mylist) THEN DestroyList(mylist);
+    IF errstring <> '' THEN WriteLn(errstring);
+    Halt(rc)
+END;
+
+begin
+
+    Triton_App := TR_CreateAppTags([
+                     TRCA_Name,'Triton ListView',
+                     TRCA_Release,'1.0',
+                     TRCA_Date,'03-02-1998',
+                     TAG_DONE]); 
+    
+    if Triton_App = nil then Cleanexit('Can''t create application',20);
+
+    CreateList(mylist);
+    for dummy := 0 to 6 do begin
+        mynode := AddNewNode(mylist,weekday[dummy]);
+    end;
+      ProjectStart;
+      WindowID(1);
+      WindowPosition(TRWP_CENTERDISPLAY);
+      WindowTitle('Listview');
+         HorizGroupA;
+            Space;
+            VertGroupA;
+               Space;
+               CenteredTextID('_List',7);
+               Space;
+               ListSS(mylist,7,0,2);
+               Space;
+            EndGroup;
+            Space;
+         EndGroup;
+      EndProject;
+
+  Project := TR_OpenProject(Triton_App,@tritontags);
+    IF Project = NIL THEN CleanExit('Can''t create project',20);
+      close_me := FALSE;
+      WHILE NOT close_me DO BEGIN
+        dummy := TR_Wait(Triton_App,0);
+        REPEAT
+          trmsg := TR_GetMsg(Triton_App);
+          IF trmsg <> NIL THEN BEGIN
+            IF (trmsg^.trm_Project = Project) THEN BEGIN
+               CASE trmsg^.trm_Class OF
+                 TRMS_CLOSEWINDOW : begin
+                                       num := TR_GetValue(Project,7);
+                                       mynode := GetNodeNumber(mylist,num);
+                                       writeln('You picked number: ',num,' and the text was: ',GetNodeData(mynode));
+                                       close_me := True;
+                                    end;
+                 TRMS_ERROR:        WriteLN(TR_GetErrorString(trmsg^.trm_Data));
+                 TRMS_NEWVALUE    : IF trmsg^.trm_ID = 7 then writeln('You picked number: ',TR_GetValue(Project,7));
+               END;
+            END;
+            TR_ReplyMsg(trmsg);
+          END;
+        UNTIL close_me OR (trmsg = NIL);
+      END;
+   Cleanexit('',0);
+end.
+
+

+ 78 - 0
packages/extra/amunits/otherlibs/triton/examples/palette.pas

@@ -0,0 +1,78 @@
+PROGRAM Palette;
+
+uses triton,tritonmacros,utility;
+
+{
+  A demo in FPC Pascal using triton.library
+
+  Updated for fpc 1.0.7
+  11 Jan 2003.
+
+  [email protected]
+}
+
+
+
+var
+  Triton_App : pTR_App;
+  Project : pTR_Project;
+  close_me : boolean;
+  trmsg : pTR_Message;
+  dummy : longint;
+
+
+begin
+
+    Triton_App := TR_CreateAppTags([
+                     TRCA_Name,'Triton Palette Demo',
+                     TRCA_Release,'1.0',
+                     TRCA_Date,'03-06-1998',
+                     TAG_DONE]);
+
+    if Triton_App <> nil then begin
+      ProjectStart;
+      WindowID(1);
+      WindowTitle('Palette');
+         HorizGroupA;
+            Space;
+            VertGroupA;
+               Space;
+               CenteredTextID('_Palette',7);
+               Space;
+               PaletteGadget(1,7);
+               Space;
+            EndGroup;
+            Space;
+         EndGroup;
+      EndProject;
+
+  Project := TR_OpenProject(Triton_App,@tritontags);
+    IF Project <> NIL THEN BEGIN
+      close_me := FALSE;
+      WHILE NOT close_me DO BEGIN
+        dummy := TR_Wait(Triton_App,0);
+        REPEAT
+          trmsg := TR_GetMsg(Triton_App);
+          IF trmsg <> NIL THEN BEGIN
+            IF (trmsg^.trm_Project = Project) THEN BEGIN
+               CASE trmsg^.trm_Class OF
+                 TRMS_CLOSEWINDOW : begin
+                                       writeln('Your final colour was ',TR_GetValue(Project,7));
+                                       close_me := True;
+                                    end;
+                 TRMS_ERROR:        WriteLN(TR_GetErrorString(trmsg^.trm_Data));
+                 TRMS_NEWVALUE    : IF trmsg^.trm_ID = 7 then writeln('You picked colour ',trmsg^.trm_Data);
+               END;
+            END;
+            TR_ReplyMsg(trmsg);
+          END;
+        UNTIL close_me OR (trmsg = NIL);
+      END;
+     TR_CloseProject(Project);
+   end;
+   TR_DeleteApp(Triton_App);
+   END ELSE writeln('Can''t create Application',20);
+end.
+
+
+

+ 124 - 0
packages/extra/amunits/otherlibs/triton/examples/progindex.pas

@@ -0,0 +1,124 @@
+program ProgIndex;
+
+(*
+ *  OpenTriton -- A free release of the triton.library source code
+ *  Copyright (C) 1993-1998  Stefan Zeiger
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  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.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ *  progind.c - Progress indicator demo
+ *
+ *)
+
+{
+   A demo in FPC Pascal using triton.library
+
+   Updated for fpc 1.0.7
+   11 Jan 2003.
+
+   [email protected]
+}
+
+uses triton, tritonmacros, amigados, utility;
+
+
+
+const
+     ID_MAIN_GADGET_STOP = 1;
+     ID_MAIN_PROGIND     = 2;
+
+var
+   Triton_App : pTR_App;
+
+procedure do_main;
+var
+  close_me  : boolean;
+  trmsg     : pTR_Message;
+  project   : pTR_Project;
+  i         : Longint;
+
+begin
+    close_me := false;
+    i := 0;
+
+    ProjectStart;
+    WindowID(1);
+    WindowTitle('Progress Indicator Demo');
+    WindowPosition(TRWP_CENTERDISPLAY);
+    WindowFlags(TRWF_NOCLOSEGADGET OR TRWF_NOESCCLOSE);
+
+    VertGroupA;
+      Space;  CenteredText('Working...');
+      Space;  HorizGroupA;
+                Space; Progress(100,0,ID_MAIN_PROGIND); (* A per cent progress indicator *)
+                Space; EndGroup;
+      SpaceS;HorizGroupA;
+                Space; HorizGroupSA; TextN('000%'); Space; TextN('050%'); Space; TextN('100%'); EndGroup;
+                Space; EndGroup;
+      Space; HorizGroupSA;
+                Space; ButtonE('_Stop',ID_MAIN_GADGET_STOP);
+                Space; EndGroup;
+      Space; EndGroup;
+
+    EndProject;
+
+    project := TR_OpenProject(Triton_App,@tritontags);
+
+    IF Project <> NIL THEN BEGIN
+      WHILE NOT close_me DO BEGIN
+        TR_SetAttribute(project,ID_MAIN_PROGIND,TRAT_Value,i);
+        DOSDelay(10);
+        REPEAT
+          trmsg := TR_GetMsg(Triton_App);
+          IF trmsg <> NIL THEN BEGIN
+            IF (trmsg^.trm_Project = Project) THEN BEGIN
+               CASE trmsg^.trm_Class OF
+                 TRMS_ERROR:        WriteLN(TR_GetErrorString(trmsg^.trm_Data));
+                 TRMS_ACTION :
+                 BEGIN
+                 CASE trmsg^.trm_ID OF
+                   ID_MAIN_GADGET_STOP : close_me := True;
+                 END;
+               END;
+               ELSE
+               END;
+            END;
+            TR_ReplyMsg(trmsg);
+          END;
+        UNTIL close_me OR (trmsg = NIL);
+        inc(i);
+        if i = 101 then close_me := true;
+      END;
+      TR_CloseProject(project);
+    END ELSE WriteLN(TR_GetErrorString(TR_GetLastError(Triton_App)));
+end;
+
+
+(* /////////////////////////////////////////////////////////////////////////////////////////////////////// *)
+(* ////////////////////////////////////////////////////////////////////////////////////// Main function // *)
+(* /////////////////////////////////////////////////////////////////////////////////////////////////////// *)
+
+begin
+  Triton_App := TR_CreateAppTags([
+                TRCA_Name,'trProgIndDemo',
+                TRCA_Version,'1.0',
+                TAG_END]);
+  
+  if Triton_App <> nil then begin
+    do_main;
+    TR_DeleteApp(Triton_App);
+  end
+  else writeln('Can''t create application');
+end.

+ 80 - 0
packages/extra/amunits/otherlibs/triton/examples/scroller.pas

@@ -0,0 +1,80 @@
+PROGRAM Scroller;
+
+uses triton, tritonmacros, utility;
+
+{
+   A demo in FPC Pascal using triton.library
+   
+   Updated for fpc 1.0.7
+   11 Jan 2003.
+   
+   [email protected]
+}
+
+
+VAR
+     Project  : pTR_Project;
+     App : pTR_App;
+     close_me : BOOLEAN;
+     trmsg : pTR_Message;
+     dummy : longint;
+
+begin
+
+    App := TR_CreateAppTags([
+                     TRCA_Name,' Triton Scroller Demo' ,
+                     TRCA_Release,' 1.0' ,
+                     TRCA_Date,' 03-08-1998' ,
+                     TAG_DONE]);
+
+    if App <> nil then begin
+
+      ProjectStart;
+      WindowID(1);
+      WindowTitle(' Scroller' );
+         VertGroupA;
+            Space;
+            HorizGroupAC;
+               Space;
+               TextID(' _Scroller' ,7);
+               Space;
+               SetTRTag(TROB_Scroller,TROF_HORIZ);
+               SetTRTag(TRSC_Total,40);
+               SetTRTag(TRSC_Visible,10);
+               SetTRTag(TRAT_Value,5);
+               SetTRTag(TRAT_ID,7);
+               Space;
+            EndGroup;
+            Space;
+         EndGroup;
+      EndProject;
+
+  Project := TR_OpenProject(App,@tritontags);
+    IF Project <> NIL THEN BEGIN
+      close_me := FALSE;
+      WHILE NOT close_me DO BEGIN
+        dummy := TR_Wait(App,0);
+        REPEAT
+          trmsg := TR_GetMsg(App);
+          IF trmsg <> NIL THEN BEGIN
+            IF (trmsg^.trm_Project = Project) THEN BEGIN
+               CASE trmsg^.trm_Class OF
+                 TRMS_CLOSEWINDOW : begin
+                                       writeln(' The final value was: ' ,TR_GetValue(Project,7));
+                                       close_me := True;
+                                    end;
+                 TRMS_ERROR:        WriteLN(TR_GetErrorString(trmsg^.trm_Data));
+                 TRMS_NEWVALUE    : IF trmsg^.trm_ID = 7 then writeln(' The value is: ' ,trmsg^.trm_Data);
+               END;
+            END;
+            TR_ReplyMsg(trmsg);
+          END;
+        UNTIL close_me OR (trmsg = NIL);
+      END;
+     TR_CloseProject(Project);
+   end;
+   TR_DeleteApp(App);
+   END ELSE writeln(' Cant creat Application' );
+end.
+
+

+ 92 - 0
packages/extra/amunits/otherlibs/triton/examples/slider.pas

@@ -0,0 +1,92 @@
+PROGRAM Slider;
+
+uses triton, tritonmacros, utility;
+
+{
+   A demo in FPC Pascal using triton.library
+   
+   Updated for fpc 1.0.7
+   11 Jan 2003.
+
+   [email protected]
+}
+
+
+
+VAR
+     Project  : pTR_Project;
+     close_me : BOOLEAN;
+     trmsg : pTR_Message;
+     dummy : longint;
+     Triton_App : pTR_App;
+
+Function IntToStr (I : Longint) : String;
+
+     Var S : String;
+
+     begin
+      Str (I,S);
+      IntToStr:=S;
+     end;
+
+begin
+
+    Triton_App := TR_CreateAppTags([
+                     TRCA_Name,' Triton Slider Demo' ,
+                     TRCA_Release,' 1.0' ,
+                     TRCA_Date,' 03-08-1998' ,
+                     TAG_DONE]);
+     
+    if Triton_App <> nil then begin
+      ProjectStart;
+      WindowID(1);
+      WindowTitle(' Slider' );
+         VertGroupA;
+            Space;
+            HorizGroupAC;
+               Space;
+               TextID(' _Slider' ,1);
+               Space;
+               SliderGadget(1,100,50,1);
+               Space;
+               TextID(' 50' ,2); SetTRTag(TRAT_MinWidth,3);
+               Space;
+            EndGroup;
+            Space;
+         EndGroup;
+      EndProject;
+
+  Project := TR_OpenProject(Triton_App,@tritontags);
+    IF Project <> NIL THEN BEGIN
+      close_me := FALSE;
+      WHILE NOT close_me DO BEGIN
+        dummy := TR_Wait(Triton_App,0);
+        REPEAT
+          trmsg := TR_GetMsg(Triton_App);
+          IF trmsg <> NIL THEN BEGIN
+            IF (trmsg^.trm_Project = Project) THEN BEGIN
+               CASE trmsg^.trm_Class OF
+                 TRMS_CLOSEWINDOW : begin
+                                       writeln(' The final number was: ' ,TR_GetValue(Project,1));
+                                       close_me := True;
+                                    end;
+                 TRMS_ERROR:        WriteLN(TR_GetErrorString(trmsg^.trm_Data));
+                 TRMS_NEWVALUE    : begin
+                                       IF trmsg^.trm_ID = 1 then begin
+                                          writeln(' The number is: ' ,trmsg^.trm_Data);
+                                          TR_SetText(Project,2,IntToStr(trmsg^.trm_Data));
+                                       end;
+                                    end;
+               END;
+            END;
+            TR_ReplyMsg(trmsg);
+          END;
+        UNTIL close_me OR (trmsg = NIL);
+      END;
+     TR_CloseProject(Project);
+   end;
+   TR_DeleteApp(Triton_App);
+   END ELSE writeln(' Cant create Application');
+end.
+
+

+ 74 - 0
packages/extra/amunits/otherlibs/triton/examples/string.pas

@@ -0,0 +1,74 @@
+PROGRAM Stringtest;
+
+uses triton, tritonmacros, utility;
+
+{
+   A demo in FPC Pascal using triton.library
+   
+   Updated for fpc 1.0.7
+   11 Jan 2003.
+
+   [email protected]
+}
+
+
+
+VAR
+     Project  : pTR_Project;
+     close_me : BOOLEAN;
+     trmsg : pTR_Message;
+     dummy : longint;
+     App : pTR_App;
+
+begin
+
+    App := TR_CreateAppTags([
+                     TRCA_Name,'Triton String Demo',
+                     TRCA_Release,'1.0',
+                     TRCA_Date,'03-06-1998',
+                     TAG_DONE]);
+    if App <> nil then begin 
+      ProjectStart;
+      WindowID(1);
+      WindowTitle('String');
+         VertGroupA;
+            Space;
+            HorizGroupAC;
+               Space;
+               TextID('_String',3);
+               Space;
+               StringGadget('Please change',3);
+               Space;
+            EndGroup;
+            Space;
+         EndGroup;
+      EndProject;
+
+  Project := TR_OpenProject(App,@tritontags);
+    IF Project <> NIL THEN BEGIN
+      close_me := FALSE;
+      WHILE NOT close_me DO BEGIN
+        dummy := TR_Wait(App,0);
+        REPEAT
+          trmsg := TR_GetMsg(App);
+          IF trmsg <> NIL THEN BEGIN
+            IF (trmsg^.trm_Project = Project) THEN BEGIN
+               CASE trmsg^.trm_Class OF
+                 TRMS_CLOSEWINDOW : begin
+                                       writeln('The text was: ',TR_GetString(Project,3));
+                                       close_me := True;
+                                    end;
+                 TRMS_ERROR:        WriteLN(TR_GetErrorString(trmsg^.trm_Data));
+                 TRMS_NEWVALUE    : IF trmsg^.trm_ID = 3 then writeln('<RETURN> or <TAB> was pressed in stringgadget');
+               END;
+            END;
+            TR_ReplyMsg(trmsg);
+          END;
+        UNTIL close_me OR (trmsg = NIL);
+      END;
+     TR_CloseProject(Project);
+   end;
+   TR_DeleteApp(App);
+   END ELSE writeln('Can''t create application');
+end.
+

+ 162 - 0
packages/extra/amunits/otherlibs/triton/examples/toolmanager1.pas

@@ -0,0 +1,162 @@
+Program ToolManager1;
+
+(*
+ *  OpenTriton -- A free release of the triton.library source code
+ *  Copyright (C) 1993-1998  Stefan Zeiger
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  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.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ *  Toolmanager1.c - Looks like the original ToolManager
+ *
+ *)
+
+{
+   A demo in FPC Pascal using triton.library
+
+   Updated for fpc 1.0.7
+   11 Jan 2003.
+
+   [email protected]
+}
+
+uses exec, triton, tritonmacros, amigalib, utility, linklist;
+
+
+
+const
+     cycle_entries : array [0..7] of PChar = ('Exec','Image','Sound','Menu','Icon','Dock','Access',NIL);
+
+     liststrings : array [0..8] of PChar = (
+                     '2024view' ,
+                     'Add to archive',
+                     'Delete',
+                     'Edit text',
+                     'Env',
+                     'Exchange',
+                     'Global Help System',
+                     'Multiview',
+                     'Paint');
+
+var
+   i : Longint;
+   LVList : pList;
+   MyNode : pFPCNode;
+   Triton_App : pTR_App;
+
+procedure CleanUp(why : string; err : longint);
+begin
+    if assigned(Triton_App) then  TR_DeleteApp(Triton_App);
+    if assigned(LVList) then DestroyList(LVList);
+    if why <> '' then writeln(why);
+    halt(err);
+end;
+
+begin
+    CreateList(LVList);
+    FOR i := 0 TO 8 DO BEGIN
+        MyNode := AddNewNode(LVList,liststrings[i]);
+    END;
+
+    Triton_App := TR_CreateAppTags([
+                               TRCA_Name,'ToolManagerGUIDemo1',
+                               TRCA_LongName,'ToolManager GUI demo 1',
+                               TRCA_Info,'Looks like the original ToolManager',
+                               TAG_END]);
+
+    if Triton_App = nil then CleanUp('Can''t create application',20);
+
+      ProjectStart;
+      WindowID(0); WindowPosition(TRWP_BELOWTITLEBAR);
+      WindowTitle('ToolManager GUI demo 1'); WindowFlags(TRWF_NOSIZEGADGET OR TRWF_NODELZIP OR TRWF_NOZIPGADGET OR TRWF_NOESCCLOSE);
+      WindowBackfillNone;
+
+      VertGroupA;
+
+        Space;
+
+        HorizGroupAC;
+          Space;
+          TextID('_Object Type',1);
+          Space;
+          CycleGadget(@cycle_entries,0,1);
+          Space;
+        EndGroup;
+
+        Space;
+
+        HorizGroupAC;
+          Space;
+            VertGroupAC;
+              CenteredTextID('Object List',2);
+              Space;
+              ListSSCN(LVList,2,0,0);
+            EndGroup;
+          Space;
+            VertGroupA;
+              TextN('');
+              Space;
+              Button('Top',3);
+              Space;
+              Button('Up',4);
+              Space;
+              Button('Down',5);
+              Space;
+              Button('Bottom',6);
+              Space;
+              Button('So_rt',7);
+            EndGroup;
+          Space;
+        EndGroup;
+
+        Space;
+
+        HorizGroupEA;
+          Space;
+          Button('_New...',8);
+          Space;
+          Button('_Edit...',9);
+          Space;
+          Button('Co_py',10);
+          Space;
+          Button('Remove',11);
+          Space;
+        EndGroup;
+
+        Space;
+
+        HorizGroupEA;
+          Space;
+          Button('_Save',12);
+          Space;
+          Button('_Use',13);
+          Space;
+          Button('_Test',14);
+          Space;
+          Button('_Cancel',15);
+          Space;
+        EndGroup;
+
+        Space;
+
+      EndGroup;
+
+      EndProject;
+
+    i := TR_AutoRequest(Triton_App,NIL,@tritontags);
+    CleanUp('',0);
+end.
+
+
+

+ 168 - 0
packages/extra/amunits/otherlibs/triton/examples/toolmanager2.pas

@@ -0,0 +1,168 @@
+Program ToolManager2;
+
+(*
+ *  OpenTriton -- A free release of the triton.library source code
+ *  Copyright (C) 1993-1998  Stefan Zeiger
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  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.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ *  Toolmanager2.c - Looks like the ToolManager demo 2 of GUIFront
+ *
+ *)
+
+uses exec, triton, tritonmacros, linklist, utility;
+
+{
+   A demo in FPC Pascal using triton.library
+
+   Updated for fpc 1.0.7
+   11 Jan 2003.
+
+   [email protected]
+}
+
+
+
+
+const
+     cycle_entries : array [0..7] of pchar = ('Exec','Image','Sound','Menu','Icon','Dock','Access',NIL);
+
+     liststrings : array [0..8] of pchar = (
+                     '2024view' ,
+                     'Add to archive',
+                     'Delete',
+                     'Edit text',
+                     'Env',
+                     'Exchange',
+                     'Global Help System',
+                     'Multiview',
+                     'Paint');
+
+var
+   i : longint;
+   LVList : pList;
+   MyNode : pFPCNode;
+   Triton_App : pTR_App;
+
+procedure CleanUp(why : string; err : longint);
+begin
+   if assigned(Triton_App) then TR_DeleteApp(Triton_App);
+   if assigned(LVList) then DestroyList(LVList);
+   if why <> '' then writeln(why);
+   halt(err);
+end;
+
+begin
+    CreateList(LVList);
+    FOR i := 0 TO 8 DO BEGIN
+        MyNode := AddNewNode(LVList, liststrings[i]);
+    END;
+
+    Triton_App := TR_CreateAppTags([
+                          TRCA_Name,'ToolManagerGUIDemo2',
+                          TRCA_LongName,'ToolManager GUI demo 2',
+                          TRCA_Info,'Looks like the ToolManager demo 2 of GUIFront',
+                          TAG_END]);
+
+    if Triton_App = nil then CleanUp('Can''t create application',20);
+
+      ProjectStart;
+      WindowID(0); WindowPosition(TRWP_MOUSEPOINTER);
+      WindowTitle('ToolManager GUI demo 2'); WindowFlags(TRWF_NOSIZEGADGET OR TRWF_NODELZIP OR TRWF_ZIPTOCURRENTPOS);
+      WindowBackfillNone;
+
+      VertGroupA;
+
+        Space;
+
+        HorizGroupAC;
+          Space;
+          TextID('_Object Type',1);
+          Space;
+          CycleGadget(@cycle_entries,0,1);
+          Space;
+        EndGroup;
+
+        Space;
+
+        HorizGroup;
+          Space;
+          NamedFrameBox('Object List');
+            HorizGroupAC;
+              Space;
+              VertGroupA;
+                Space;
+                ListSSCN(LVList,2,0,0);
+                Space;
+              EndGroup;
+              Space;
+              SetTRTag(TRGR_Vert, TRGR_ALIGN OR TRGR_FIXHORIZ);
+                Space;
+                Button('Top',3);
+                Space;
+                Button('Up',4);
+                Space;
+                Button('Down',5);
+                Space;
+                Button('Bottom',6);
+                Space;
+                Button('So_rt',7);
+                Space;
+              EndGroup;
+              Space;
+            EndGroup;
+          Space;
+        EndGroup;
+
+        Space;
+
+        HorizGroupEA;
+          Space;
+          Button('_New...',8);
+          Space;
+          Button('_Edit...',9);
+          Space;
+          Button('Co_py',10);
+          Space;
+          Button('Remove',11);
+          Space;
+        EndGroup;
+
+        Space;
+
+        HorizGroupEA;
+          Space;
+          Button('_Save',12);
+          Space;
+          Button('_Use',13);
+          Space;
+          Button('_Test',14);
+          Space;
+          Button('_Cancel',15);
+          Space;
+        EndGroup;
+
+        Space;
+
+      EndGroup;
+
+      EndProject;                       
+   
+
+    i := TR_AutoRequest(Triton_App,NIL,@tritontags);
+    CleanUp('',0);
+end.
+
+

+ 169 - 0
packages/extra/amunits/otherlibs/triton/examples/toolmanager3.pas

@@ -0,0 +1,169 @@
+Program ToolManager3;
+
+(*
+ *  OpenTriton -- A free release of the triton.library source code
+ *  Copyright (C) 1993-1998  Stefan Zeiger
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  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.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ *  Toolmanager3.c - My own creation for a ToolManager GUI
+ *
+ *)
+
+
+uses exec, triton, tritonmacros,utility, linklist, vartags;
+
+{
+   A demo in FPC Pascal using triton.library
+
+   Updated for fpc 1.0.7
+   11 Jan 2003.
+
+   [email protected]
+}
+
+
+
+
+const
+     cycle_entries : array [0..7] of pchar = ('Exec','Image','Sound','Menu','Icon','Dock','Access',NIL);
+
+     liststrings : array [0..8] of pchar = (
+                     '2024view' ,
+                     'Add to archive',
+                     'Delete',
+                     'Edit text',
+                     'Env',
+                     'Exchange',
+                     'Global Help System',
+                     'Multiview',
+                     'Paint');
+
+var
+   i : Longint;
+   LVList : pList;
+   MyNode : pFPCNode;
+   Triton_App : pTr_App;
+
+procedure CleanUp(why : string; err : longint);
+begin
+     if assigned(Triton_App) then TR_DeleteApp(triton_App);
+     if assigned(LVList) then DestroyList(LVList);
+     if why <> '' then writeln(why);
+     halt(err);
+end;
+
+begin
+    CreateList(LVList);
+    FOR i := 0 TO 8 DO BEGIN
+        MyNode := AddNewNode(LVList,liststrings[i]);
+    END;
+
+
+    Triton_App := TR_CreateAppTags([
+                               TRCA_Name,'ToolManagerGUIDemo3',
+                               TRCA_LongName,'ToolManager GUI demo 3',
+                               TRCA_Info,'My own creation for a ToolManager GUI',
+                               TAG_END]);
+
+    if Triton_App = nil then CleanUp('Can''t create application',20);
+
+      ProjectStart;
+      WindowID(1); WindowPosition(TRWP_CENTERDISPLAY);
+      WindowTitle('ToolManager GUI demo 3');
+
+      VertGroupA;
+
+        Space;
+
+        HorizGroupAC;
+          Space;
+          TextID('_Object type',1);
+          Space;
+          CycleGadget(@cycle_entries,0,1);
+          Space;
+        EndGroup;
+
+        Space;
+
+        NamedSeparatorI('Object _list',2);
+
+        Space;
+
+        HorizGroupAC;
+          Space;
+            VertGroupAC;
+              ListSS(LVList,2,0,0);
+              HorizGroupEA;
+                Button('_New...',8);
+                Button('_Edit...',9);
+              EndGroup;
+              HorizGroupEA;
+                Button('Co_py',10);
+                Button('Remove',11);
+              EndGroup;
+            EndGroup;
+          Space;
+          Line(TROF_VERT);
+          Space;
+            SetTRTag(TRGR_Vert, TRGR_ALIGN OR TRGR_FIXHORIZ);
+              Button('Top',3);
+              Space;
+              Button('Up',4);
+              Space;
+              Button('Down',5);
+              Space;
+              Button('Bottom',6);
+              VertGroupS;Space;EndGroup;
+              Button('So_rt',7);
+            EndGroup;
+          Space;
+        EndGroup;
+
+        Space;
+
+        HorizSeparator;
+
+        Space;
+
+        HorizGroup;
+          Space;
+          HorizGroupS;
+            Button('_Save',12);
+            Space;
+            Button('_Use',13);
+            Space;
+            Button('_Test',14);
+            Space;
+            Button('_Cancel',15);
+          EndGroup;
+          Space;
+        EndGroup;
+
+        Space;
+
+      EndGroup;
+
+      EndProject;
+
+    i := TR_AutoRequest(Triton_App,NIL,@tritontags);
+  CleanUp('',0);
+end.
+
+
+
+
+
+

+ 171 - 0
packages/extra/amunits/otherlibs/triton/examples/tritongadgets.pas

@@ -0,0 +1,171 @@
+PROGRAM GadgetDemo;
+
+uses triton, tritonmacros, utility;
+
+{
+    If you have seen gadtoolsgadgets.c in the RKRM's then you
+    have seen this program. One diffs is that this example
+    is made in Triton. Much better.:)
+    Jun 06 1998
+    
+    Updated for fpc 1.0.7
+    11 Jan 2003.
+
+    [email protected]
+}
+
+
+
+
+CONST
+    MYGAD_SLIDER     = 1;
+    MYGAD_SLIDERTEXT = 10;
+    MYGAD_STRING1    = 2;
+    MYGAD_STRING2    = 3;
+    MYGAD_STRING3    = 4;
+    MYGAD_BUTTON     = 5;
+
+(* Range for the slider: *)
+    SLIDER_MIN  = 1;
+    SLIDER_MAX  = 20;
+    SLIDER_DEF  = 10;
+VAR
+    Project     : pTR_Project;
+    trmsg       : pTR_Message;
+    quit        : Boolean;
+    dummy       : longint;
+    Triton_App  : pTR_App;
+
+Function longToStr (I : Longint) : String;
+
+     Var S : String;
+
+     begin
+      Str (I,S);
+      longToStr:=S;
+     end;
+
+
+PROCEDURE CleanExit(errstring : STRING; rc : Integer);
+BEGIN
+    IF Project <> NIL THEN TR_CloseProject(Project);
+    if Triton_App <> nil then TR_DeleteApp(Triton_App);
+    IF errstring <> '' THEN WriteLn(errstring);
+    Halt(rc)
+END;
+
+
+
+begin
+
+    Triton_App := TR_CreateAppTags([
+                     TRCA_Name,'TritonGadtools',
+                     TRCA_LongName,'GadToolsDemo in Triton',
+                     TRCA_Version,'0.01',
+                     TRCA_Info,'Just a test of Triton',
+                     TRCA_Release,'1.0',
+                     TRCA_Date,'26-05-1998',
+                     TAG_DONE]);
+
+     if Triton_App = nil then CleanExit('Can''t create Application',20);
+     
+     ProjectStart;
+     WindowID(1);
+     WindowTitle('Instead of GadTools :)');
+     WindowPosition(TRWP_CENTERTOP);
+         HorizGroupA;
+             Space;
+             VertGroupA;
+                 Space;
+                LineArray;
+                    BeginLine;
+                        Space;
+                        TextID('_Volume:',MYGAD_SLIDER); SetTRTag(TRAT_Flags,TROF_RIGHTALIGN);
+                        Space;
+                        SliderGadget(SLIDER_MIN,SLIDER_MAX,5,MYGAD_SLIDER);
+                        Space;
+                        TextID('5',MYGAD_SLIDERTEXT); SetTRTag(TRAT_MinWidth, 2);
+                        Space;
+                    EndLine;
+                    SpaceS;
+                    BeginLine;
+                        Space;
+                        TextID('_First:',MYGAD_STRING1); SetTRTag(TRAT_Flags, TROF_RIGHTALIGN);
+                        Space;
+                        StringGadget('Try pressing',MYGAD_STRING1); SetTRTag(TRAT_Value,50);
+                        Space;
+                    EndLine;
+                    SpaceS;
+                    BeginLine;
+                        Space;
+                        TextID('_Second:',MYGAD_STRING2); SetTRTag(TRAT_Flags, TROF_RIGHTALIGN);
+                        Space;
+                        StringGadget('TAB or Shift-TAB',MYGAD_STRING2); SetTRTag(TRAT_Value,50);
+                        Space;
+                    EndLine;
+                    SpaceS;
+                    BeginLine;
+                        Space;
+                        TextID('_Third:',MYGAD_STRING3); SetTRTag(TRAT_Flags, TROF_RIGHTALIGN);
+                        Space;
+                        StringGadget('To see what happens!',MYGAD_STRING3); SetTRTag(TRAT_Value,50);
+                        Space;
+                    EndLine;
+                EndArray;
+                Space;
+                        CenteredButton('_Click Here',MYGAD_BUTTON);
+                Space;
+            EndGroup;
+            Space;
+        EndGroup;
+     EndProject;
+
+
+
+    Project := TR_OpenProject(Triton_App,@tritontags);
+    IF Project = NIL THEN CleanExit('No project',20);
+
+    quit := False;
+    WHILE NOT quit DO BEGIN
+      dummy := TR_Wait(Triton_App,0);
+      REPEAT
+        trmsg := TR_GetMsg(Triton_App);
+        IF trmsg <> NIL THEN BEGIN
+          IF (trmsg^.trm_Project = Project) THEN BEGIN
+             CASE trmsg^.trm_Class OF
+
+               TRMS_CLOSEWINDOW : quit := True;
+
+               TRMS_NEWVALUE    :
+                       BEGIN
+                       case trmsg^.trm_ID of
+                         MYGAD_SLIDER  : begin
+                                         TR_SetText(Project,MYGAD_SLIDERTEXT,LongToStr(trmsg^.trm_Data));
+                                         writeln('Slider at level ',trmsg^.trm_Data);
+                                         end;
+                         MYGAD_STRING1 : writeln('String Gadget 1: "',TR_GetString(Project,MYGAD_STRING1),'".');
+                         MYGAD_STRING2 : writeln('String Gadget 2: "',TR_GetString(Project,MYGAD_STRING2),'".');
+                         MYGAD_STRING3 : writeln('String Gadget 3: "',TR_GetString(Project,MYGAD_STRING3),'".');
+                       END;
+                       END;
+               TRMS_ACTION :
+                      BEGIN
+                      if trmsg^.trm_ID = MYGAD_BUTTON then begin
+                                           TR_SetValue(Project,MYGAD_SLIDER,SLIDER_DEF);
+                                           TR_SetText(Project,MYGAD_SLIDERTEXT,LongToStr(SLIDER_DEF));
+                                           writeln('Button was pressed, slider reset to 10.');
+                                         end;
+                      END;
+               TRMS_ERROR:        WriteLN(TR_GetErrorString(trmsg^.trm_Data));
+             END;
+           END;
+           TR_ReplyMsg(trmsg);
+         END;
+       UNTIL quit OR (trmsg = NIL);
+    END;
+    CleanExit('',0);
+END.
+
+
+
+

+ 1477 - 0
packages/extra/amunits/otherlibs/triton/units/triton.pas

@@ -0,0 +1,1477 @@
+{
+    This file is part of the Free Pascal run time library.
+
+    A file in Amiga system run time library.
+    Copyright (c) 1998-2003 by Nils Sjoholm
+    member of the Amiga RTL development team.
+
+    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.
+
+ **********************************************************************}
+ 
+{
+    History
+    
+    Updated to triton 2.0. Added function with array of const.
+    09 Jan 2003.
+    
+    Added the defines use_amiga_smartlink and
+    use_auto_openlib.
+    12 Jan 2003.
+    
+    [email protected] Nils Sjoholm
+    
+}
+
+{$mode objfpc}
+{$I useamigasmartlink.inc}
+{$ifdef use_amiga_smartlink}
+    {$smartlink on}
+{$endif use_amiga_smartlink}
+
+UNIT TRITON;
+
+INTERFACE
+
+uses exec, intuition, graphics, utility;
+
+
+{* ------------------------------------------------------------------------------ *}
+{* library name and version                                                       *}
+{* ------------------------------------------------------------------------------ *}
+
+CONST   TRITONNAME        : PChar = 'triton.library';
+        TRITON10VERSION   = 1;
+        TRITON11VERSION   = 2;
+        TRITON12VERSION   = 3;
+        TRITON13VERSION   = 4;
+        TRITON14VERSION   = 5;
+        TRITON20VERSION   = 6;
+        TRITONVERSION     = TRITON20VERSION;
+
+{* ------------------------------------------------------------------------------ *}
+{* Triton Message                                                                 *}
+{* ------------------------------------------------------------------------------ *}
+
+TYPE
+     pTR_Project = ^tTR_Project;
+     pTR_App     = ^tTR_App;
+
+     pTR_Message = ^tTR_Message;
+     tTR_Message = RECORD
+         trm_Project   : pTR_Project;   {* the message                  *}
+         trm_Id        : ULONG;         {* The object's ID              *}
+         trm_Class     : ULONG;         {* The Triton message class     *}
+         trm_Data      : ULONG;         {* The class-specific data      *}
+         trm_Code      : ULONG;         {* Currently only used BY       *}
+                                        {* TRMS_KEYPRESSED              *}
+         trm_Pad0      : ULONG;         {* qualifier is only 16 Bit     *}
+         trm_Qualifier : ULONG;         {* Qualifiers                   *}
+         trm_Seconds   : ULONG;         {* \ Copy of system clock time  *}
+         trm_Micros    : ULONG;         {* / (Only where available! IF  *}
+                                        {*    not set, seconds is NULL) *}
+         trm_App       : pTR_App;
+     END;                               {* End of TR_Message            *}
+
+{* Data for TROM_NEW *}
+     pTROM_NewDataPtr = ^tTROM_NewData;
+     tTROM_NewData = record
+         {* The following elements are set up for the object (read only) *}
+         project    : pTR_Project;     {*  TR_ProjectPtr;  *}
+         firstitem  : pTagItem;
+         objecttype : ULONG;
+         grouptype  : ULONG;
+         itemdata   : ULONG;
+         backfilltype : ULONG;
+         {* The following elements have to be set by the object and read by 
+class_DisplayObject *}
+         parseargs  : BOOL;
+     end;
+
+
+{* Data for TROM_INSTALL *}
+     pTROM_InstallData = ^tTROM_InstallData;
+     tTROM_InstallData = record
+         left : ULONG;
+         top  : ULONG;
+         width : ULONG;
+         height : ULONG;
+     end;
+
+
+{* Data for TROM_SETATTRIBUTE *}
+     pTROM_SetAttributeData = ^tTROM_SetAttributeData;
+     tTROM_SetAttributeData = record
+         attribute : ULONG;
+         value     : ULONG;
+     end;
+
+
+{* Data for TROM_EVENT *}
+     pTROM_EventData = ^tTROM_EventData;
+     tTROM_EventData = record
+         imsg : pIntuiMessage;
+     end;
+
+{* ------------------------------------------------------------------------------ *}
+{* The Application Structure                                                      *}
+{* ------------------------------------------------------------------------------ *}
+
+     tTR_App = RECORD {* This structure is PRIVATE! *}
+         tra_MemPool    : Pointer;       {* The memory pool             *}
+         tra_BitMask    : ULONG;         {* Bits to Wait() for          *}
+         tra_Name       : STRPTR;        {* Unique name                 *}
+     END; {* TR_App *}
+
+     pTR_Class = ^tTR_Class;
+     tTR_Class = RECORD
+         trc_Node     : tMinNode;         {* PRIVATE! *}
+         trc_SuperClass : pTR_Class;
+     end;
+     
+
+
+
+{* ------------------------------------------------------------------------------ *}
+{* The Dimension Structure                                                        *}
+{* ------------------------------------------------------------------------------ *}
+
+     pTR_Dimensions = ^tTR_Dimensions;
+     tTR_Dimensions = RECORD
+         trd_Left          : Word;
+         trd_Top           : Word;
+         trd_Width         : Word;
+         trd_Height        : Word;
+         trd_Left2         : Word;
+         trd_Top2          : Word;
+         trd_Width2        : Word;
+         trd_Height2       : Word;
+         trd_Zoomed        : BOOL;
+         reserved          : ARRAY [0..2] OF Word;
+     END; {* TR_Dimensions *}
+     
+
+{* ////////////////////////////////////////////////////////////////////// *}
+{* ///////////////////////////// Default classes, attributes and flags // *}
+{* ////////////////////////////////////////////////////////////////////// *}
+
+
+     pTROD_Object = ^tTROD_Object;
+     tTROD_Object = record
+         Node : tMinNode;             {* The node for linking all objects *}
+         tr_Class : pTR_Class;        {* The object's class *}
+         Project : pTR_Project;    {* The object's project *}
+         Reserved : array [0..5] of ULONG;
+     end;
+     
+
+
+     pTROD_DisplayObject = ^tTROD_DisplayObject;
+     tTROD_DisplayObject = record
+         O           : tTROD_Object;       {* Superclass object data *}
+         ID          : ULONG;             {* The object's ID *}
+         MinWidth    : ULONG;             {* The precalculated minimum width *}
+         MinHeight   : ULONG;             {* The precalculated minimum height *}
+         Left        : ULONG;             {* The X coordinate of the object *}
+         Top         : ULONG;             {* The Y coordinate of the object *}
+         Width       : ULONG;             {* The width of the object *}
+         Height      : ULONG;             {* The height of the object *}
+         Flags       : ULONG;             {* See below for flags *}
+         XResize     : BOOL;              {* Horizontally resizable? *}
+         YResize     : BOOL;              {* Vertically resizable? *}
+         QuickHelpString : STRPTR;        {* QuickHelp string *}
+         Shortcut    : Integer;           {* The object's shortcut *}
+         Backfilltype : ULONG;            {* The object's backfill type *}
+         Installed   : BOOL;              {* Does the object have an on-screen 
+representation? *}
+         Reserved    : array [0..3] of ULONG;   {* Private! *}
+     end;
+   
+
+{* Data for TROM_HIT *}
+     pTROM_HitData = ^tTROM_HitData;
+     tTROM_HitData = record
+         x : ULONG;
+         y : ULONG;
+         tr_object : pTROD_DisplayObject;
+     end;
+     
+
+{* ------------------------------------------------------------------------------ *}
+{* The Projects Structure                                                         *}
+{* ------------------------------------------------------------------------------ *}
+
+     tTR_Project = RECORD
+         tro_SC_Object                : tTROD_Object;          {* PRIVATE *}
+         trp_App                      : pTR_App;            {* Our application            
+*}
+         trp_MemPool                  : Pointer;              {* The memory pool *}
+         trp_ID                       : ULONG;                {* The project's ID *}
+         trp_IDCMPFlags               : ULONG;                {* The IDCMP flags *}
+         trp_Window                   : pWindow;            {* The default window *}
+         trp_AspectFixing             : Word;                 {* Pixel aspect 
+correction factor *}
+     END;                                               {* End of TR_Projects               
+*}
+
+{* Message classes *}
+CONST   TRMS_CLOSEWINDOW        = 1;  {* The window should be closed *}
+        TRMS_ERROR              = 2;  {* An error occured. Error code in trm_Data *}
+        TRMS_NEWVALUE           = 3;  {* Object's VALUE has changed. New VALUE in 
+trm_Data *}
+        TRMS_ACTION             = 4;  {* Object has triggered an action *}
+        TRMS_ICONDROPPED        = 5;  {* Icon dropped over window (ID=0) or DropBox. 
+AppMessage* in trm_Data *}
+        TRMS_KEYPRESSED         = 6;  {* Key pressed. trm_Data contains ASCII code,  
+trm_Code raw code and *}
+                                      {* trm_Qualifier contains qualifiers *}
+        TRMS_HELP               = 7;  {* The user requested help for the specified ID 
+*}
+        TRMS_DISKINSERTED       = 8;  {* A disk has been inserted into a drive *}
+        TRMS_DISKREMOVED        = 9;  {* A disk has been removed from a drive *}
+
+
+{* ////////////////////////////////////////////////////////////////////// *}
+{* //////////////////////////////////////////////// Triton error codes // *}
+{* ////////////////////////////////////////////////////////////////////// *}
+
+        TRER_OK                 = 0;        {* No error *}
+
+        TRER_ALLOCMEM           = 1;        {* Not enough memory *}
+        TRER_OPENWINDOW         = 2;        {* Can't open window *}
+        TRER_WINDOWTOOBIG       = 3;        {* Window would be too big for screen *}
+        TRER_DRAWINFO           = 4;        {* Can't get screen's DrawInfo *}
+        TRER_OPENFONT           = 5;        {* Can't open font *}
+        TRER_CREATEMSGPORT      = 6;        {* Can't create message port *}
+        TRER_INSTALLOBJECT      = 7;        {* Can't create an object *}
+        TRER_CREATECLASS        = 8;        {* Can't create a class *}
+        TRER_NOLOCKPUBSCREEN    = 9;        {* Can't lock public screen *}
+        TRER_CREATEMENUS        = 12;       {* Error while creating the menus *}
+        TRER_GT_CREATECONTEXT   = 14;       {* Can't create gadget context *}
+
+        TRER_MAXERRORNUM        = 15;       {* PRIVATE! *}
+
+
+{* ////////////////////////////////////////////////////////////////////// *}
+{* /////////////////////////////////////////////////// Object messages // *}
+{* ////////////////////////////////////////////////////////////////////// *}
+
+        TROM_NEW                = 1;         {* Create object *}
+        TROM_INSTALL            = 2;         {* Tell object to install itself in the 
+window *}
+        TROM_REFRESH            = 4;         {* Refresh object *}
+        TROM_REMOVE             = 6;         {* Remove object from window *}
+        TROM_DISPOSE            = 7;         {* Dispose an object's private data *}
+        TROM_GETATTRIBUTE       = 8;         {* Get an object's attribute *}
+        TROM_SETATTRIBUTE       = 9;         {* Set an object's attribute *}
+        TROM_EVENT              = 10;        {* IDCMP event *}
+        TROM_DISABLED           = 11;        {* Disabled object *}
+        TROM_ENABLED            = 12;        {* Enabled object *}
+        TROM_KEYDOWN            = 13;        {* Key pressed *}
+        TROM_REPEATEDKEYDOWN    = 14;        {* Key pressed repeatedly *}
+        TROM_KEYUP              = 15;        {* Key released *}
+        TROM_KEYCANCELLED       = 16;        {* Key cancelled *}
+        TROM_CREATECLASS        = 17;        {* Create class-specific data *}
+        TROM_DISPOSECLASS       = 18;        {* Dispose class-specific data *}
+        TROM_HIT                = 22;        {* Find an object for a coordinate pair 
+*}
+        TROM_ACTIVATE           = 23;        {* Activate an object *}
+
+
+        TROM_EVENT_SWALLOWED    = 1;
+        TROM_EVENT_CONTINUE     = 0;
+
+
+{* ////////////////////////////////////////////////////////////////////// *}
+{* ///////////////////////////////////////// Tags for TR_OpenProject() // *}
+{* ////////////////////////////////////////////////////////////////////// *}
+
+{* Tag bases *}
+        TRTG_OAT              = (TAG_USER+$400);  {* Object attribute *}
+        TRTG_CLS              = (TAG_USER+$100);  {* Class ID $1 to $2FF *}
+        TRTG_OAT2             = (TAG_USER+$80);   {* PRIVATE! *}
+        TRTG_PAT              = (TAG_USER);        {* Project attribute *}
+
+
+{* Window/Project *}
+        TRWI_Title              = (TRTG_PAT+$01); {* STRPTR: The window title *}
+        TRWI_Flags              = (TRTG_PAT+$02); {* See below for window flags *}
+        TRWI_Underscore         = (TRTG_PAT+$03); {* BYTE *: The underscore for menu 
+and gadget shortcuts *}
+        TRWI_Position           = (TRTG_PAT+$04); {* Window position,  see below *}
+        TRWI_CustomScreen       = (TRTG_PAT+$05); {* STRUCT Screen * *}
+        TRWI_PubScreen          = (TRTG_PAT+$06); {* STRUCT Screen *,  must have been 
+locked! *}
+        TRWI_PubScreenName      = (TRTG_PAT+$07); {* ADDRESS,  Triton is doing the 
+locking *}
+        TRWI_PropFontAttr       = (TRTG_PAT+$08); {* STRUCT TextAttr *: The 
+proportional font *}
+        TRWI_FixedWidthFontAttr = (TRTG_PAT+$09); {* STRUCT TextAttr *: The fixed-
+width font *}
+        TRWI_Backfill           = (TRTG_PAT+$0A); {* The backfill type,  see below *}
+        TRWI_ID                 = (TRTG_PAT+$0B); {* ULONG: The window ID *}
+        TRWI_Dimensions         = (TRTG_PAT+$0C); {* STRUCT TR_Dimensions * *}
+        TRWI_ScreenTitle        = (TRTG_PAT+$0D); {* STRPTR: The screen title *}
+        TRWI_QuickHelp          = (TRTG_PAT+$0E); {* BOOL: Quick help active? *}
+
+{* Menus *}
+        TRMN_Title              = (TRTG_PAT+$65); {* STRPTR: Menu *}
+        TRMN_Item               = (TRTG_PAT+$66); {* STRPTR: Menu item *}
+        TRMN_Sub                = (TRTG_PAT+$67); {* STRPTR: Menu subitem *}
+        TRMN_Flags              = (TRTG_PAT+$68); {* See below for flags *}
+
+{* General object attributes *}
+        TRAT_ID               = (TRTG_OAT2+$16);  {* The object's/menu's ID *}
+        TRAT_Flags            = (TRTG_OAT2+$17);  {* The object's flags *}
+        TRAT_Value            = (TRTG_OAT2+$18);  {* The object's value *}
+        TRAT_Text             = (TRTG_OAT2+$19);  {* The object's text *}
+        TRAT_Disabled         = (TRTG_OAT2+$1A);  {* Disabled object? *}
+        TRAT_Backfill         = (TRTG_OAT2+$1B);  {* Backfill pattern *}
+        TRAT_MinWidth         = (TRTG_OAT2+$1C);  {* Minimum width *}
+        TRAT_MinHeight        = (TRTG_OAT2+$1D);  {* Minimum height *}
+
+
+{* ////////////////////////////////////////////////////////////////////// *}
+{* ////////////////////////////////////////////////////// Window flags // *}
+{* ////////////////////////////////////////////////////////////////////// *}
+
+        TRWF_BACKDROP           = $00000001;     {* Create a backdrop borderless 
+window *}
+        TRWF_NODRAGBAR          = $00000002;     {* Don't use a dragbar *}
+        TRWF_NODEPTHGADGET      = $00000004;     {* Don't use a depth-gadget *}
+        TRWF_NOCLOSEGADGET      = $00000008;     {* Don't use a close-gadget *}
+        TRWF_NOACTIVATE         = $00000010;     {* Don't activate window *}
+        TRWF_NOESCCLOSE         = $00000020;     {* Don't send TRMS_CLOSEWINDOW when 
+Esc is pressed *}
+        TRWF_NOPSCRFALLBACK     = $00000040;     {* Don't fall back onto default 
+PubScreen *}
+        TRWF_NOZIPGADGET        = $00000080;     {* Don't use a zip-gadget *}
+        TRWF_ZIPCENTERTOP       = $00000100;     {* Center the zipped window on the 
+title bar *}
+        TRWF_NOMINTEXTWIDTH     = $00000200;     {* Minimum window width not according 
+to title text *}
+        TRWF_NOSIZEGADGET       = $00000400;     {* Don't use a sizing-gadget *}
+        TRWF_NOFONTFALLBACK     = $00000800;     {* Don't fall back to topaz.8 *}
+        TRWF_NODELZIP           = $00001000;     {* Don't zip the window when Del is 
+pressed *}
+        TRWF_SIMPLEREFRESH      = $00002000;     {* *** OBSOLETE *** (V3+) *}
+        TRWF_ZIPTOCURRENTPOS    = $00004000;     {* Will zip the window at the current 
+position (OS3.0+) *}
+        TRWF_APPWINDOW          = $00008000;     {* Create an AppWindow without using 
+class_dropbox *}
+        TRWF_ACTIVATESTRGAD     = $00010000;     {* Activate the first string gadget 
+after opening the window *}
+        TRWF_HELP               = $00020000;     {* Pressing <Help> will create a 
+TRMS_HELP message (V4) *}
+        TRWF_SYSTEMACTION       = $00040000;     {* System status messages will be 
+sent (V4) *}
+
+
+{* ////////////////////////////////////////////////////////////////////// *}
+{* //////////////////////////////////////////////////////// Menu flags // *}
+{* ////////////////////////////////////////////////////////////////////// *}
+
+        TRMF_CHECKIT            = $00000001;     {* Leave space for a checkmark *}
+        TRMF_CHECKED            = $00000002;     {* Check the item (includes 
+TRMF_CHECKIT) *}
+        TRMF_DISABLED           = $00000004;     {* Ghost the menu/item *}
+
+
+{* ////////////////////////////////////////////////////////////////////// *}
+{* ////////////////////////////////////////////////// Window positions // *}
+{* ////////////////////////////////////////////////////////////////////// *}
+
+        TRWP_DEFAULT            = 0;              {* Let Triton choose a good position 
+*}
+        TRWP_BELOWTITLEBAR      = 1;              {* Left side of screen,  below title 
+bar *}
+        TRWP_CENTERTOP          = 1025;           {* Top of screen,  centered on the 
+title bar *}
+        TRWP_TOPLEFTSCREEN      = 1026;           {* Top left corner of screen *}
+        TRWP_CENTERSCREEN       = 1027;           {* Centered on the screen *}
+        TRWP_CENTERDISPLAY      = 1028;           {* Centered on the currently 
+displayed clip *}
+        TRWP_MOUSEPOINTER       = 1029;           {* Under the mouse pointer *}
+        TRWP_ABOVECOORDS        = 2049;           {* Above coordinates from the 
+dimensions STRUCT *}
+        TRWP_BELOWCOORDS        = 2050;           {* Below coordinates from the 
+dimensions STRUCT *}
+
+
+{* ////////////////////////////////////////////////////////////////////// *}
+{* //////////////////////////////////// Backfill types / System images // *}
+{* ////////////////////////////////////////////////////////////////////// *}
+
+        TRBF_WINDOWBACK         = $00000000;     {* Window backfill *}
+        TRBF_REQUESTERBACK      = $00000001;     {* Requester backfill *}
+
+        TRBF_NONE               = $00000002;     {* No backfill (= Fill with 
+BACKGROUNDPEN) *}
+        TRBF_SHINE              = $00000003;     {* Fill with SHINEPEN *}
+        TRBF_SHINE_SHADOW       = $00000004;     {* Fill with SHINEPEN + SHADOWPEN *}
+        TRBF_SHINE_FILL         = $00000005;     {* Fill with SHINEPEN + FILLPEN *}
+        TRBF_SHINE_BACKGROUND   = $00000006;     {* Fill with SHINEPEN + BACKGROUNDPEN 
+*}
+        TRBF_SHADOW             = $00000007;     {* Fill with SHADOWPEN *}
+        TRBF_SHADOW_FILL        = $00000008;     {* Fill with SHADOWPEN + FILLPEN *}
+        TRBF_SHADOW_BACKGROUND  = $00000009;     {* Fill with SHADOWPEN + 
+BACKGROUNDPEN *}
+        TRBF_FILL               = $0000000A;     {* Fill with FILLPEN *}
+        TRBF_FILL_BACKGROUND    = $0000000B;     {* Fill with FILLPEN + BACKGROUNDPEN 
+*}
+
+        TRSI_USBUTTONBACK       = $00010002;     {* Unselected button backfill *}
+        TRSI_SBUTTONBACK        = $00010003;     {* Selected button backfill *}
+
+
+
+{* ////////////////////////////////////////////////////////////////////// *}
+{* /////////////////////////////////////////////////////// Frame types // *}
+{* ////////////////////////////////////////////////////////////////////// *}
+
+        { * Copies of the GadTools BBFT_#? types *}
+        TRFT_BUTTON       = 1;
+        TRFT_RIDGE        = 2;
+        TRFT_ICONDROPBOX  = 3;
+        { * Triton's low-level frame types *}
+        TRFT_XENBUTTON1   = 33;
+        TRFT_XENBUTTON2   = 34;
+        TRFT_NEXTBUTTON   = 35;
+        { * Triton's abstract frame types *}
+        TRFT_ABSTRACT_BUTTON      = 65;
+        TRFT_ABSTRACT_ICONDROPBOX = 66;
+        TRFT_ABSTRACT_FRAMEBOX    = 67;
+        TRFT_ABSTRACT_PROGRESS    = 68;
+        TRFT_ABSTRACT_GROUPBOX    = 69;
+
+
+{* ////////////////////////////////////////////////////////////////////// *}
+{* ///////////////////////////////////////////////////////// Pen types // *}
+{* ////////////////////////////////////////////////////////////////////// *}
+
+        TRPT_SYSTEMPEN   = 0;
+        TRPT_GRAPHICSPEN = 1;
+        TRPT_TRITONPEN   = 128;
+
+        TRTP_NORMUSCORE         = 0;
+        TRTP_HIGHUSCORE         = 1;
+        TRTP_HALFSHINE          = 2;
+        TRTP_HALFSHADOW         = 3;
+        TRTP_USSTRINGGADBACK    = 4;
+        TRTP_SSTRINGGADBACK     = 5;
+        TRTP_USSTRINGGADFRONT   = 6;
+        TRTP_SSTRINGGADFRONT    = 7;
+
+{* ////////////////////////////////////////////////////////////////////// *}
+{* ////////////////////////////////////////////// Display Object flags // *}
+{* ////////////////////////////////////////////////////////////////////// *}
+
+{* General flags *}
+        TROF_RAISED             = $00000001;     {* Raised object *}
+        TROF_HORIZ              = $00000002;     {* Horizontal object \ Works 
+automatically *}
+        TROF_VERT               = $00000004;     {* Vertical object   / in groups *}
+        TROF_RIGHTALIGN         = $00000008;     {* Align object to the right border 
+if available *}
+        TROF_GENERAL_MASK       = $000000FF;     {* PRIVATE *}
+
+{* Text flags for different kinds of text-related objects *}
+        TRTX_NOUNDERSCORE       = $00000100;     {* Don't interpret underscores *}
+        TRTX_HIGHLIGHT          = $00000200;     {* Highlight text *}
+        TRTX_3D                 = $00000400;     {* 3D design *}
+        TRTX_BOLD               = $00000800;     {* Softstyle 'bold' *}
+        TRTX_TITLE              = $00001000;     {* A title (e.g. of a group) *}
+        TRTX_MULTILINE          = $00002000;     {* A multi-line text. See 
+TR_PrintText() autodoc clip *}
+        TRTX_RIGHTALIGN         = TROF_RIGHTALIGN;
+        TRTX_CENTER             = $00004000;     {* Center text *}
+        TRTX_SELECTED           = $00002000;     {* PRIVATE! *}
+
+{* ////////////////////////////////////////////////////////////////////// *}
+{* ////////////////////////////////////////////////////// Menu entries // *}
+{* ////////////////////////////////////////////////////////////////////// *}
+
+        TRMN_BARLABEL           = (-1);           {* A barlabel instead of text *}
+
+
+{* ////////////////////////////////////////////////////////////////////// *}
+{* /////////////////////////////////////////// Tags for TR_CreateApp() // *}
+{* ////////////////////////////////////////////////////////////////////// *}
+
+        TRCA_Name               = (TAG_USER+1);
+        TRCA_LongName           = (TAG_USER+2);
+        TRCA_Info               = (TAG_USER+3);
+        TRCA_Version            = (TAG_USER+4);
+        TRCA_Release            = (TAG_USER+5);
+        TRCA_Date               = (TAG_USER+6);
+
+
+{* ////////////////////////////////////////////////////////////////////// *}
+{* ///////////////////////////////////////// Tags for TR_EasyRequest() // *}
+{* ////////////////////////////////////////////////////////////////////// *}
+
+        TREZ_ReqPos             = (TAG_USER+1);
+        TREZ_LockProject        = (TAG_USER+2);
+        TREZ_Return             = (TAG_USER+3);
+        TREZ_Title              = (TAG_USER+4);
+        TREZ_Activate           = (TAG_USER+5);
+
+{* class_DisplayObject *}
+
+        TROB_DisplayObject      = (TRTG_CLS+$3C); {* A basic display object *}
+
+        TRDO_QuickHelpString    = (TRTG_OAT+$1E3);
+
+{* Flags *}
+        TROB_DISPLAYOBJECT_DISABLED    = $00100000; {* Disabled? *}
+        TROB_DISPLAYOBJECT_RETURNOK    = $00200000; {* Activate with <Return> *}
+        TROB_DISPLAYOBJECT_ESCOK       = $00400000; {* Activate with <Esc> *}
+        TROB_DISPLAYOBJECT_TABOK       = $00800000; {* Activate with <Tab> *}
+        TROB_DISPLAYOBJECT_SPACE       = $01000000; {* A spacing object? *}
+
+{* class_DragItem *}
+
+         TROB_DragItem          = (TRTG_CLS+$3E); {* A draggable item *}
+
+{* class_Image *}
+
+        TROB_Image              = (TRTG_CLS+$3B); {* An image *}
+
+        TRIM_BOOPSI             = $00010000;     {* Use a BOOPSI IClass image *}
+
+{* class_String *}
+
+        TROB_String             = (TRTG_CLS+$37); {* A string gadget *}
+        TRST_Filter             = (TRTG_OAT+$1E4);
+
+        TRST_INVISIBLE          = $00010000;     {* A password gadget -> invisible 
+typing *}
+        TRST_NORETURNBROADCAST  = $00020000;     {* <Return> keys will not be 
+broadcast to the window *}
+        TRST_FLOAT              = $00040000;     {* Separators "." and "," will be 
+accepted only once *}
+
+{* class_Cycle *}
+
+        TROB_Cycle              = (TRTG_CLS+$36); {* A cycle gadget *}
+
+        TRCY_MX                 = $00010000;     {* Unfold the cycle gadget to a MX 
+gadget *}
+        TRCY_RIGHTLABELS        = $00020000;     {* Put the labels to the right of a 
+MX gadget *}
+
+{* class_Palette *}
+
+        TROB_Palette            = (TRTG_CLS+$33); {* A palette gadget *}
+
+{* class_DropBox *}
+
+        TROB_DropBox            = (TRTG_CLS+$38); {* An icon drop box *}
+
+{* class_Group *}
+
+        TRGR_Horiz              = (TAG_USER+201);  {* Horizontal group *}
+        TRGR_Vert               = (TAG_USER+202);  {* Vertical group *}
+        TRGR_End                = (TRTG_OAT2+$4B); {* End of a group *}
+
+        TRGR_PROPSHARE          = $00000000;     {* Default: Divide objects 
+proportionally *}
+        TRGR_EQUALSHARE         = $00000001;     {* Divide objects equally *}
+        TRGR_PROPSPACES         = $00000002;     {* Divide spaces proportionally *}
+        TRGR_ARRAY              = $00000004;     {* Top-level array group *}
+
+        TRGR_ALIGN              = $00000008;     {* Align resizeable objects in 
+secondary dimension *}
+        TRGR_CENTER             = $00000010;     {* Center unresizeable objects in 
+secondary dimension *}
+
+        TRGR_FIXHORIZ           = $00000020;     {* Don't allow horizontal resizing *}
+        TRGR_FIXVERT            = $00000040;     {* Don't allow vertical resizing *}
+        TRGR_INDEP              = $00000080;     {* Group is independant of 
+surrounding array *}
+
+{* class_Line *}
+
+        TROB_Line               = (TRTG_CLS+$2D); {* A simple line *}
+
+{* class_Slider *}
+
+        TROB_Slider             = (TRTG_CLS+$34); {* A slider gadget *}
+
+        TRSL_Min                = (TRTG_OAT+$1DE);
+        TRSL_Max                = (TRTG_OAT+$1DF);
+
+{* class_Listview *}
+
+        TROB_Listview           = (TRTG_CLS+$39); {* A listview gadget *}
+
+        TRLV_Top                = (TRTG_OAT+$1E2);
+        TRLV_VisibleLines       = (TRTG_OAT+$1E4);
+
+        TRLV_READONLY           = $00010000;     {* A read-only list *}
+        TRLV_SELECT             = $00020000;     {* You may select an entry *}
+        TRLV_SHOWSELECTED       = $00040000;     {* Selected entry will be shown *}
+        TRLV_NOCURSORKEYS       = $00080000;     {* Don't use arrow keys *}
+        TRLV_NONUMPADKEYS       = $00100000;     {* Don't use numeric keypad keys *}
+        TRLV_FWFONT             = $00200000;     {* Use the fixed-width font *}
+        TRLV_NOGAP              = $00400000;     {* Don't leave a gap below the list 
+*}
+
+{* class_Progress *}
+
+        TROB_Progress           = (TRTG_CLS+$3A); {* A progress indicator *}
+
+{* class_Space *}
+
+        TROB_Space              = (TRTG_CLS+$285); {* The spaces class *}
+
+        TRST_NONE               = 1;              {* No space *}
+        TRST_SMALL              = 2;              {* Small space *}
+        TRST_NORMAL             = 3;              {* Normal space (default) *}
+        TRST_BIG                = 4;              {* Big space *}
+
+{* class_Text *}
+
+        TROB_Text               = (TRTG_CLS+$30); {* A line of text *}
+
+        TRTX_CLIPPED            = $00010000;     {* Text is clipped *}
+
+{* class_Button *}
+
+        TROB_Button             = (TRTG_CLS+$31); {* A BOOPSI button gadget *}
+
+        TRBU_RETURNOK           = $00010000;     {* <Return> answers the button *}
+        TRBU_ESCOK              = $00020000;     {* <Esc> answers the button *}
+        TRBU_SHIFTED            = $00040000;     {* Shifted shortcut only *}
+        TRBU_UNSHIFTED          = $00080000;     {* Unshifted shortcut only *}
+        TRBU_YRESIZE            = $00100000;     {* Button resizeable in Y direction 
+*}
+        TRBT_TEXT               = 0;              {* Text button *}
+        TRBT_GETFILE            = 1;              {* GetFile button *}
+        TRBT_GETDRAWER          = 2;              {* GetDrawer button *}
+        TRBT_GETENTRY           = 3;              {* GetEntry button *}
+
+{* class_CheckBox *}
+
+        TROB_CheckBox           = (TRTG_CLS+$2F); {* A checkbox gadget *}
+
+{* class_Object *}
+
+        TROB_Object             = (TRTG_CLS+$3D); {* A rootclass object *}
+
+{* class_Scroller *}
+
+        TROB_Scroller           = (TRTG_CLS+$35); {* A scroller gadget *}
+
+        TRSC_Total              = (TRTG_OAT+$1E0);
+        TRSC_Visible            = (TRTG_OAT+$1E1);
+
+{* class_FrameBox *}
+
+        TROB_FrameBox           = (TRTG_CLS+$32); {* A framing box *}
+
+        TRFB_GROUPING           = $00000001;     {* A grouping box *}
+        TRFB_FRAMING            = $00000002;     {* A framing box *}
+        TRFB_TEXT               = $00000004;     {* A text container *}
+
+
+VAR TritonBase : pLibrary;
+
+FUNCTION TR_AddClass(app : pTR_App; d0arg : CARDINAL; supertag : CARDINAL; defaultmethod : LONGINT;
+datasize : CARDINAL; tags : pTagItem) : BOOLEAN;
+PROCEDURE TR_AreaFill(project : pTR_Project; rp : pRastPort; left : ULONG; top :
+ULONG; right : ULONG; bottom : ULONG; typ : ULONG; dummy : POINTER);
+FUNCTION TR_AutoRequest(app : pTR_App; lockproject : pTR_Project; wintags : pTagItem)
+: ULONG;
+PROCEDURE TR_CloseProject(project : pTR_Project);
+PROCEDURE TR_CloseWindowSafely(window : pWindow);
+FUNCTION TR_CreateApp(apptags : pTagItem) : pTR_App;
+FUNCTION TR_CreateMsg(app : pTR_App) : pTR_Message;
+PROCEDURE TR_DeleteApp(app : pTR_App);
+FUNCTION TR_DoMethod(obj : pTROD_Object; messageid : ULONG; data : POINTER) : ULONG;
+FUNCTION TR_DoMethodClass(obj : pTROD_Object; messageid : ULONG; data : POINTER;
+trclass : pTR_Class) : ULONG;
+PROCEDURE TR_DrawFrame(project : pTR_Project; rp : pRastPort; left : WORD; top : WORD;
+width : WORD; height : WORD; typ : WORD; inverted : BOOLEAN);
+FUNCTION TR_EasyRequest(app : pTR_App; bodyfmt : pCHAR; gadfmt : pCHAR; taglist :
+pTagItem) : ULONG;
+FUNCTION TR_EasyRequest(app : pTR_App; bodyfmt : pCHAR; gadfmt : String; taglist :
+pTagItem) : ULONG;
+FUNCTION TR_EasyRequest(app : pTR_App; bodyfmt : String; gadfmt : pCHAR; taglist :
+pTagItem) : ULONG;
+FUNCTION TR_EasyRequest(app : pTR_App; bodyfmt : String; gadfmt : String; taglist :
+pTagItem) : ULONG;
+FUNCTION TR_FirstOccurance(ch : BYTE; str : pCHAR) : LONGINT;
+FUNCTION TR_FirstOccurance(ch : BYTE; str : String) : LONGINT;
+FUNCTION TR_FrameBorderHeight(project : pTR_Project; typ : WORD) : ULONG;
+FUNCTION TR_FrameBorderWidth(project : pTR_Project; typ : WORD) : ULONG;
+FUNCTION TR_GetAttribute(project : pTR_Project; ID : ULONG; attribute : ULONG) :
+ULONG;
+FUNCTION TR_GetErrorString(num : WORD) : pCHAR;
+FUNCTION TR_GetLastError(app : pTR_App) : WORD;
+FUNCTION TR_GetMsg(app : pTR_App) : pTR_Message;
+FUNCTION TR_GetPen(project : pTR_Project; pentype : ULONG; pendata : ULONG) : ULONG;
+PROCEDURE TR_LockProject(project : pTR_Project);
+FUNCTION TR_LockScreen(project : pTR_Project) : pScreen;
+FUNCTION TR_NumOccurances(ch : BYTE; str : pCHAR) : LONGINT;
+FUNCTION TR_NumOccurances(ch : BYTE; str : String) : LONGINT;
+FUNCTION TR_ObtainWindow(project : pTR_Project) : pWindow;
+FUNCTION TR_OpenProject(app : pTR_App; taglist : pTagItem) : pTR_Project;
+PROCEDURE TR_PrintText(project : pTR_Project; rp : pRastPort; txt : pCHAR; x : ULONG; 
+y : ULONG; width : ULONG; flags : ULONG);
+PROCEDURE TR_PrintText(project : pTR_Project; rp : pRastPort; txt : String; x : ULONG;
+y : ULONG; width : ULONG; flags : ULONG);
+PROCEDURE TR_ReleaseWindow(window : pWindow);
+PROCEDURE TR_ReplyMsg(message : pTR_Message);
+FUNCTION TR_SendMessage(project : pTR_Project; objectid : ULONG; messageid : ULONG; 
+messagedata : POINTER) : ULONG;
+PROCEDURE TR_SetAttribute(project : pTR_Project; ID : ULONG; attribute : ULONG; value 
+: ULONG);
+FUNCTION TR_TextHeight(project : pTR_Project; txt : pCHAR; flags : ULONG) : ULONG;
+FUNCTION TR_TextHeight(project : pTR_Project; txt : String; flags : ULONG) : ULONG;
+FUNCTION TR_TextWidth(project : pTR_Project; txt : pCHAR; flags : ULONG) : ULONG;
+FUNCTION TR_TextWidth(project : pTR_Project; txt : String; flags : ULONG) : ULONG;
+PROCEDURE TR_UnlockProject(project : pTR_Project);
+PROCEDURE TR_UnlockScreen(screen : pScreen);
+FUNCTION TR_Wait(app : pTR_App; otherbits : ULONG) : ULONG;
+
+{
+   Functions with array of const
+}
+FUNCTION TR_AddClassTags(app : pTR_App; d0arg : CARDINAL; supertag : CARDINAL;
+defaultmethod : LONGINT; datasize : CARDINAL; const tags : Array Of Const) : BOOLEAN;
+FUNCTION TR_OpenProjectTags(app : pTR_App; const taglist : Array Of Const) : pTR_Project;
+FUNCTION TR_AutoRequestTags(app : pTR_App; lockproject : pTR_Project; const wintags : Array Of Const): ULONG;
+FUNCTION TR_CreateAppTags(const apptags : Array of Const) : pTR_App;
+FUNCTION TR_EasyRequestTags(app : pTR_App; bodyfmt : pCHAR; gadfmt : pCHAR; const taglist : Array Of Const) : ULONG;
+FUNCTION TR_EasyRequestTags(app : pTR_App; bodyfmt : pCHAR; gadfmt : String; Const taglist : Array Of Const) : ULONG;
+FUNCTION TR_EasyRequestTags(app : pTR_App; bodyfmt : String; gadfmt : pCHAR; Const taglist : Array Of Const) : ULONG;
+FUNCTION TR_EasyRequestTags(app : pTR_App; bodyfmt : String; gadfmt : String; Const taglist : Array Of Const) : ULONG;
+
+{  This are a few support functions for triton.
+   Could be handy.
+}
+
+procedure TR_Disable(p : pTR_Project; id : Longint);
+procedure TR_Enable(p : pTR_Project; id : Longint);
+function TR_GetCheckBox(p : pTR_Project; id : Longint): boolean;
+function TR_GetSTRPTR(p : pTR_Project; id : Longint): PChar;
+function TR_GetString(p : pTR_Project; id : Longint): String;
+function TR_GetValue(p : pTR_Project; gadid : Longint): Longint;
+procedure TR_SetCheckBox(p : pTR_Project; id : Longint; onoff : boolean);
+procedure TR_SetString(p : pTR_Project; id : Longint; txt : String);
+procedure TR_SetString(p : pTR_Project; id : Longint; txt : PChar);
+procedure TR_SetText(p : pTR_Project; id : Longint; txt : string);
+procedure TR_SetText(p : pTR_Project; id : Longint; txt : PChar);
+procedure TR_SetValue(p : pTR_Project; id : Longint; value : Longint);
+procedure TR_SetWindowTitle(p : pTR_Project; thetitle : string);
+procedure TR_SetWindowTitle(p : pTR_Project; thetitle : PChar);
+procedure TR_UpdateListView(p : pTR_Project; gadid : Longint; thelist: pList);
+
+
+IMPLEMENTATION
+
+uses msgbox, tagsarray,pastoc;
+
+
+procedure TR_Disable(p : pTR_Project; id : Longint);
+begin
+    TR_SetAttribute(p,id, TRAT_Disabled,0);
+end;
+
+procedure TR_Enable(p : pTR_Project; id : Longint);
+begin
+    TR_SetAttribute(p,id,TRAT_Disabled,1);
+end;
+
+function TR_GetCheckBox(p : pTR_Project; id : Longint): boolean;
+var
+    temp : Longint;
+begin
+    temp := TR_GetAttribute(p,id,TRAT_Value);
+    if temp = 0 then TR_GetCheckBox := false
+    else TR_GetCheckBox := true;
+end;
+
+function TR_GetSTRPTR(p : pTR_Project; id : Longint): PChar;
+var
+    temp : Longint;
+begin
+    temp := TR_GetAttribute(p,id,0);
+    TR_GetSTRPTR := PChar(Pointer(temp));
+end;
+
+function TR_GetString(p : pTR_Project; id : Longint): String;
+var
+    temp : Longint;
+begin
+    temp := TR_GetAttribute(p,id,0);
+    TR_GetString := strpas(PChar(Pointer(temp)));
+end;
+
+function TR_GetValue(p : pTR_Project; gadid : Longint): Longint;
+begin
+   TR_GetValue := TR_GetAttribute(p,gadid,TRAT_Value);
+end;
+
+procedure TR_SetCheckBox(p : pTR_Project; id : Longint; onoff : boolean);
+begin
+    TR_SetAttribute(p,id,TRAT_Value,Longint(byte(onoff)));
+end;
+
+procedure TR_SetString(p : pTR_Project; id : Longint; txt : String);
+begin
+    TR_SetAttribute(p,id,0,Longint(pas2c(txt)));
+end;
+
+procedure TR_SetString(p : pTR_Project; id : Longint; txt : PChar);
+begin
+    TR_SetAttribute(p,id,0,Longint(txt));
+end;
+
+procedure TR_SetText(p : pTR_Project; id : Longint; txt : string);
+begin
+    TR_SetAttribute(p,id,TRAT_Text,Longint(pas2c(txt)));
+end;
+
+procedure TR_SetText(p : pTR_Project; id : Longint; txt : PChar);
+begin
+    TR_SetAttribute(p,id,TRAT_Text,Longint(txt));
+end;
+
+procedure TR_SetValue(p : pTR_Project; id : Longint; value : Longint);
+begin
+    TR_SetAttribute(p,id,TRAT_Value,value);
+end;
+
+procedure TR_SetWindowTitle(p : pTR_Project; thetitle : string);
+begin
+    TR_SetAttribute(p,0,TRWI_Title,Longint(pas2c(thetitle)));
+end;
+
+procedure TR_SetWindowTitle(p : pTR_Project; thetitle : PChar);
+begin
+    TR_SetAttribute(p,0,TRWI_Title,Longint(thetitle));
+end;
+
+procedure TR_UpdateListView(p : pTR_Project; gadid : Longint; thelist: pList);
+begin
+    TR_SetAttribute(p,gadid,0,Longint(thelist));
+end;
+
+FUNCTION TR_AddClass(app : pTR_App; d0arg : CARDINAL; supertag : CARDINAL; defaultmethod : LONGINT; datasize : CARDINAL; tags : pTagItem) : BOOLEAN;
+BEGIN
+  ASM
+	MOVE.L	A6,-(A7)
+	MOVEA.L	app,A1
+	MOVE.L	d0arg,D0
+	MOVE.L	supertag,D1
+	MOVEA.L	defaultmethod,A2
+	MOVE.L	datasize,D2
+	MOVEA.L	tags,A0
+	MOVEA.L	TritonBase,A6
+	JSR	-168(A6)
+	MOVEA.L	(A7)+,A6
+	TST.W	D0
+	BEQ.B	@end
+	MOVEQ	#1,D0
+  @end:	MOVE.B	D0,@RESULT
+  END;
+END;
+
+
+PROCEDURE TR_AreaFill(project : pTR_Project; rp : pRastPort; left : ULONG; top :
+ULONG; right : ULONG; bottom : ULONG; typ : ULONG; dummy : POINTER);
+BEGIN
+  ASM
+    MOVE.L  A6,-(A7)
+    MOVEA.L project,A0
+    MOVEA.L rp,A1
+    MOVE.L  left,D0
+    MOVE.L  top,D1
+    MOVE.L  right,D2
+    MOVE.L  bottom,D3
+    MOVE.L  typ,D4
+    MOVEA.L dummy,A2
+    MOVEA.L TritonBase,A6
+    JSR -228(A6)
+    MOVEA.L (A7)+,A6
+  END;
+END;
+
+FUNCTION TR_AutoRequest(app : pTR_App; lockproject : pTR_Project; wintags : pTagItem)
+: ULONG;
+BEGIN
+  ASM
+    MOVE.L  A6,-(A7)
+    MOVEA.L app,A1
+    MOVEA.L lockproject,A0
+    MOVEA.L wintags,A2
+    MOVEA.L TritonBase,A6
+    JSR -084(A6)
+    MOVEA.L (A7)+,A6
+    MOVE.L  D0,@RESULT
+  END;
+END;
+
+PROCEDURE TR_CloseProject(project : pTR_Project);
+BEGIN
+  ASM
+    MOVE.L  A6,-(A7)
+    MOVEA.L project,A0
+    MOVEA.L TritonBase,A6
+    JSR -036(A6)
+    MOVEA.L (A7)+,A6
+  END;
+END;
+
+PROCEDURE TR_CloseWindowSafely(window : pWindow);
+BEGIN
+  ASM
+    MOVE.L  A6,-(A7)
+    MOVEA.L window,A0
+    MOVEA.L TritonBase,A6
+    JSR -126(A6)
+    MOVEA.L (A7)+,A6
+  END;
+END;
+
+FUNCTION TR_CreateApp(apptags : pTagItem) : pTR_App;
+BEGIN
+  ASM
+    MOVE.L  A6,-(A7)
+    MOVEA.L apptags,A1
+    MOVEA.L TritonBase,A6
+    JSR -096(A6)
+    MOVEA.L (A7)+,A6
+    MOVE.L  D0,@RESULT
+  END;
+END;
+
+FUNCTION TR_CreateMsg(app : pTR_App) : pTR_Message;
+BEGIN
+  ASM
+    MOVE.L  A6,-(A7)
+    MOVEA.L app,A1
+    MOVEA.L TritonBase,A6
+    JSR -234(A6)
+    MOVEA.L (A7)+,A6
+    MOVE.L  D0,@RESULT
+  END;
+END;
+
+PROCEDURE TR_DeleteApp(app : pTR_App);
+BEGIN
+  ASM
+    MOVE.L  A6,-(A7)
+    MOVEA.L app,A1
+    MOVEA.L TritonBase,A6
+    JSR -102(A6)
+    MOVEA.L (A7)+,A6
+  END;
+END;
+
+FUNCTION TR_DoMethod(obj : pTROD_Object; messageid : ULONG; data : POINTER) : ULONG;
+BEGIN
+  ASM
+    MOVE.L  A6,-(A7)
+    MOVEA.L obj,A0
+    MOVE.L  messageid,D0
+    MOVEA.L data,A1
+    MOVEA.L TritonBase,A6
+    JSR -216(A6)
+    MOVEA.L (A7)+,A6
+    MOVE.L  D0,@RESULT
+  END;
+END;
+
+FUNCTION TR_DoMethodClass(obj : pTROD_Object; messageid : ULONG; data : POINTER;
+trclass : pTR_Class) : ULONG;
+BEGIN
+  ASM
+    MOVE.L  A6,-(A7)
+    MOVEA.L obj,A0
+    MOVE.L  messageid,D0
+    MOVEA.L data,A1
+    MOVEA.L trclass,A2
+    MOVEA.L TritonBase,A6
+    JSR -222(A6)
+    MOVEA.L (A7)+,A6
+    MOVE.L  D0,@RESULT
+  END;
+END;
+
+PROCEDURE TR_DrawFrame(project : pTR_Project; rp : pRastPort; left : WORD; top : WORD;
+width : WORD; height : WORD; typ : WORD; inverted : BOOLEAN);
+BEGIN
+  ASM
+    MOVE.L  A6,-(A7)
+    MOVEA.L project,A0
+    MOVEA.L rp,A1
+    MOVE.L  left,D1
+    MOVE.L  top,D2
+    MOVE.L  width,D3
+    MOVE.L  height,D4
+    MOVE.L  typ,D0
+    MOVE.L  inverted,D5
+    MOVEA.L TritonBase,A6
+    JSR -174(A6)
+    MOVEA.L (A7)+,A6
+  END;
+END;
+
+FUNCTION TR_EasyRequest(app : pTR_App; bodyfmt : pCHAR; gadfmt : pCHAR; taglist :
+pTagItem) : ULONG;
+BEGIN
+  ASM
+    MOVE.L  A6,-(A7)
+    MOVEA.L app,A1
+    MOVEA.L bodyfmt,A2
+    MOVEA.L gadfmt,A3
+    MOVEA.L taglist,A0
+    MOVEA.L TritonBase,A6
+    JSR -090(A6)
+    MOVEA.L (A7)+,A6
+    MOVE.L  D0,@RESULT
+  END;
+END;
+
+FUNCTION TR_EasyRequest(app : pTR_App; bodyfmt : PChar; gadfmt : String; taglist :
+pTagItem) : ULONG;
+begin
+    TR_EasyRequest := TR_EasyRequest(app,bodyfmt,pas2c(gadfmt),taglist);
+end;
+
+FUNCTION TR_EasyRequest(app : pTR_App; bodyfmt : String; gadfmt : PChar; taglist :
+pTagItem) : ULONG;
+begin
+    TR_EasyRequest := TR_EasyRequest(app,pas2c(bodyfmt),gadfmt,taglist);
+end;
+
+FUNCTION TR_EasyRequest(app : pTR_App; bodyfmt : String; gadfmt : String; taglist :
+pTagItem) : ULONG;
+begin
+    TR_EasyRequest := TR_EasyRequest(app,pas2c(bodyfmt),pas2c(gadfmt),taglist);
+end;
+
+FUNCTION TR_FirstOccurance(ch : BYTE; str : pCHAR) : LONGINT;
+BEGIN
+  ASM
+    MOVE.L  A6,-(A7)
+    MOVE.L  ch,D0
+    MOVEA.L str,A0
+    MOVEA.L TritonBase,A6
+    JSR -042(A6)
+    MOVEA.L (A7)+,A6
+    MOVE.L  D0,@RESULT
+  END;
+END;
+
+FUNCTION TR_FirstOccurance(ch : BYTE; str : String) : LONGINT;
+BEGIN
+    TR_FirstOccurance := TR_FirstOccurance(ch, pas2c(str));
+END;
+
+FUNCTION TR_FrameBorderHeight(project : pTR_Project; typ : WORD) : ULONG;
+BEGIN
+  ASM
+    MOVE.L  A6,-(A7)
+    MOVEA.L project,A0
+    MOVE.L  typ,D0
+    MOVEA.L TritonBase,A6
+    JSR -186(A6)
+    MOVEA.L (A7)+,A6
+    MOVE.L  D0,@RESULT
+  END;
+END;
+
+FUNCTION TR_FrameBorderWidth(project : pTR_Project; typ : WORD) : ULONG;
+BEGIN
+  ASM
+    MOVE.L  A6,-(A7)
+    MOVEA.L project,A0
+    MOVE.L  typ,D0
+    MOVEA.L TritonBase,A6
+    JSR -180(A6)
+    MOVEA.L (A7)+,A6
+    MOVE.L  D0,@RESULT
+  END;
+END;
+
+FUNCTION TR_GetAttribute(project : pTR_Project; ID : ULONG; attribute : ULONG) :
+ULONG;
+BEGIN
+  ASM
+    MOVE.L  A6,-(A7)
+    MOVEA.L project,A0
+    MOVE.L  ID,D0
+    MOVE.L  attribute,D1
+    MOVEA.L TritonBase,A6
+    JSR -066(A6)
+    MOVEA.L (A7)+,A6
+    MOVE.L  D0,@RESULT
+  END;
+END;
+
+FUNCTION TR_GetErrorString(num : WORD) : pCHAR;
+BEGIN
+  ASM
+    MOVE.L  A6,-(A7)
+    MOVE.L  num,D0
+    MOVEA.L TritonBase,A6
+    JSR -054(A6)
+    MOVEA.L (A7)+,A6
+    MOVE.L  D0,@RESULT
+  END;
+END;
+
+FUNCTION TR_GetLastError(app : pTR_App) : WORD;
+BEGIN
+  ASM
+    MOVE.L  A6,-(A7)
+    MOVEA.L app,A1
+    MOVEA.L TritonBase,A6
+    JSR -132(A6)
+    MOVEA.L (A7)+,A6
+    MOVE.L  D0,@RESULT
+  END;
+END;
+
+FUNCTION TR_GetMsg(app : pTR_App) : pTR_Message;
+BEGIN
+  ASM
+    MOVE.L  A6,-(A7)
+    MOVEA.L app,A1
+    MOVEA.L TritonBase,A6
+    JSR -108(A6)
+    MOVEA.L (A7)+,A6
+    MOVE.L  D0,@RESULT
+  END;
+END;
+
+FUNCTION TR_GetPen(project : pTR_Project; pentype : ULONG; pendata : ULONG) : ULONG;
+BEGIN
+  ASM
+    MOVE.L  A6,-(A7)
+    MOVEA.L project,A0
+    MOVE.L  pentype,D0
+    MOVE.L  pendata,D1
+    MOVEA.L TritonBase,A6
+    JSR -210(A6)
+    MOVEA.L (A7)+,A6
+    MOVE.L  D0,@RESULT
+  END;
+END;
+
+PROCEDURE TR_LockProject(project : pTR_Project);
+BEGIN
+  ASM
+    MOVE.L  A6,-(A7)
+    MOVEA.L project,A0
+    MOVEA.L TritonBase,A6
+    JSR -072(A6)
+    MOVEA.L (A7)+,A6
+  END;
+END;
+
+FUNCTION TR_LockScreen(project : pTR_Project) : pScreen;
+BEGIN
+  ASM
+    MOVE.L  A6,-(A7)
+    MOVEA.L project,A0
+    MOVEA.L TritonBase,A6
+    JSR -138(A6)
+    MOVEA.L (A7)+,A6
+    MOVE.L  D0,@RESULT
+  END;
+END;
+
+FUNCTION TR_NumOccurances(ch : BYTE; str : pCHAR) : LONGINT;
+BEGIN
+  ASM
+    MOVE.L  A6,-(A7)
+    MOVE.L  ch,D0
+    MOVEA.L str,A0
+    MOVEA.L TritonBase,A6
+    JSR -048(A6)
+    MOVEA.L (A7)+,A6
+    MOVE.L  D0,@RESULT
+  END;
+END;
+
+FUNCTION TR_NumOccurances(ch : BYTE; str : String) : LONGINT;
+BEGIN
+    TR_NumOccurances := TR_NumOccurances(ch, pas2c(str));
+END;
+
+FUNCTION TR_ObtainWindow(project : pTR_Project) : pWindow;
+BEGIN
+  ASM
+    MOVE.L  A6,-(A7)
+    MOVEA.L project,A0
+    MOVEA.L TritonBase,A6
+    JSR -150(A6)
+    MOVEA.L (A7)+,A6
+    MOVE.L  D0,@RESULT
+  END;
+END;
+
+FUNCTION TR_OpenProject(app : pTR_App; taglist : pTagItem) : pTR_Project;
+BEGIN
+  ASM
+    MOVE.L  A6,-(A7)
+    MOVEA.L app,A1
+    MOVEA.L taglist,A0
+    MOVEA.L TritonBase,A6
+    JSR -030(A6)
+    MOVEA.L (A7)+,A6
+    MOVE.L  D0,@RESULT
+  END;
+END;
+
+PROCEDURE TR_PrintText(project : pTR_Project; rp : pRastPort; txt : pCHAR; x : ULONG;
+y : ULONG; width : ULONG; flags : ULONG);
+BEGIN
+  ASM
+    MOVE.L  A6,-(A7)
+    MOVEA.L project,A0
+    MOVEA.L rp,A1
+    MOVEA.L txt,A2
+    MOVE.L  x,D1
+    MOVE.L  y,D2
+    MOVE.L  width,D3
+    MOVE.L  flags,D0
+    MOVEA.L TritonBase,A6
+    JSR -204(A6)
+    MOVEA.L (A7)+,A6
+  END;
+END;
+
+PROCEDURE TR_PrintText(project : pTR_Project; rp : pRastPort; txt : String; x : ULONG;
+y : ULONG; width : ULONG; flags : ULONG);
+BEGIN
+    TR_PrintText(project,rp,pas2c(txt),x,y,width,flags);
+END;
+
+PROCEDURE TR_ReleaseWindow(window : pWindow);
+BEGIN
+  ASM
+    MOVE.L  A6,-(A7)
+    MOVEA.L window,A0
+    MOVEA.L TritonBase,A6
+    JSR -156(A6)
+    MOVEA.L (A7)+,A6
+  END;
+END;
+
+PROCEDURE TR_ReplyMsg(message : pTR_Message);
+BEGIN
+  ASM
+    MOVE.L  A6,-(A7)
+    MOVEA.L message,A1
+    MOVEA.L TritonBase,A6
+    JSR -114(A6)
+    MOVEA.L (A7)+,A6
+  END;
+END;
+
+FUNCTION TR_SendMessage(project : pTR_Project; objectid : ULONG; messageid : ULONG;
+messagedata : POINTER) : ULONG;
+BEGIN
+  ASM
+    MOVE.L  A6,-(A7)
+    MOVEA.L project,A0
+    MOVE.L  objectid,D0
+    MOVE.L  messageid,D1
+    MOVEA.L messagedata,A1
+    MOVEA.L TritonBase,A6
+    JSR -162(A6)
+    MOVEA.L (A7)+,A6
+    MOVE.L  D0,@RESULT
+  END;
+END;
+
+PROCEDURE TR_SetAttribute(project : pTR_Project; ID : ULONG; attribute : ULONG; value
+: ULONG);
+BEGIN
+  ASM
+    MOVE.L  A6,-(A7)
+    MOVEA.L project,A0
+    MOVE.L  ID,D0
+    MOVE.L  attribute,D1
+    MOVE.L  value,D2
+    MOVEA.L TritonBase,A6
+    JSR -060(A6)
+    MOVEA.L (A7)+,A6
+  END;
+END;
+
+FUNCTION TR_TextHeight(project : pTR_Project; txt : pCHAR; flags : ULONG) : ULONG;
+BEGIN
+  ASM
+    MOVE.L  A6,-(A7)
+    MOVEA.L project,A0
+    MOVEA.L txt,A2
+    MOVE.L  flags,D0
+    MOVEA.L TritonBase,A6
+    JSR -198(A6)
+    MOVEA.L (A7)+,A6
+    MOVE.L  D0,@RESULT
+  END;
+END;
+
+FUNCTION TR_TextHeight(project : pTR_Project; txt : String; flags : ULONG) : ULONG;
+BEGIN
+    TR_TextHeight :=  TR_TextHeight(project,pas2c(txt),flags);
+END;
+
+FUNCTION TR_TextWidth(project : pTR_Project; txt : pCHAR; flags : ULONG) : ULONG;
+BEGIN
+  ASM
+    MOVE.L  A6,-(A7)
+    MOVEA.L project,A0
+    MOVEA.L txt,A2
+    MOVE.L  flags,D0
+    MOVEA.L TritonBase,A6
+    JSR -192(A6)
+    MOVEA.L (A7)+,A6
+    MOVE.L  D0,@RESULT
+  END;
+END;
+
+FUNCTION TR_TextWidth(project : pTR_Project; txt : String; flags : ULONG) : ULONG;
+BEGIN
+    TR_TextWidth := TR_TextWidth(project,pas2c(txt),flags);
+END;
+
+PROCEDURE TR_UnlockProject(project : pTR_Project);
+BEGIN
+  ASM
+    MOVE.L  A6,-(A7)
+    MOVEA.L project,A0
+    MOVEA.L TritonBase,A6
+    JSR -078(A6)
+    MOVEA.L (A7)+,A6
+  END;
+END;
+
+PROCEDURE TR_UnlockScreen(screen : pScreen);
+BEGIN
+  ASM
+    MOVE.L  A6,-(A7)
+    MOVEA.L screen,A0
+    MOVEA.L TritonBase,A6
+    JSR -144(A6)
+    MOVEA.L (A7)+,A6
+  END;
+END;
+
+FUNCTION TR_Wait(app : pTR_App; otherbits : ULONG) : ULONG;
+BEGIN
+  ASM
+    MOVE.L  A6,-(A7)
+    MOVEA.L app,A1
+    MOVE.L  otherbits,D0
+    MOVEA.L TritonBase,A6
+    JSR -120(A6)
+    MOVEA.L (A7)+,A6
+    MOVE.L  D0,@RESULT
+  END;
+END;
+
+{
+   Functions with array of const
+}
+{
+ Functions and procedures with array of const go here
+}
+FUNCTION TR_AddClassTags(app : pTR_App; d0arg : CARDINAL; supertag : CARDINAL; defaultmethod : LONGINT; datasize : CARDINAL; const tags : Array Of Const) : BOOLEAN;
+begin
+    TR_AddClassTags := TR_AddClass(app , d0arg , supertag , defaultmethod , datasize , readintags(tags));
+end;
+
+FUNCTION TR_EasyRequestTags(app : pTR_App; bodyfmt : pCHAR; gadfmt : pCHAR; const taglist : Array Of Const) : Ulong;
+begin
+    TR_EasyRequestTags := TR_EasyRequest(app , bodyfmt , gadfmt , readintags(taglist));
+end;
+
+FUNCTION TR_OpenProjectTags(app : pTR_App; const taglist : Array Of Const) : pTR_Project;
+begin
+    TR_OpenProjectTags := TR_OpenProject(app , readintags(taglist));
+end;
+
+FUNCTION TR_AutoRequestTags(app : pTR_App; lockproject : pTR_Project; const wintags : Array Of Const): ULONG;
+begin
+    TR_AutoRequestTags := TR_AutoRequest(app,lockproject,readintags(wintags));
+end;
+
+FUNCTION TR_CreateAppTags(const apptags : Array of Const) : pTR_App;
+begin
+    TR_CreateAppTags := TR_CreateApp(readintags(apptags));
+end;
+
+FUNCTION TR_EasyRequestTags(app : pTR_App; bodyfmt : pCHAR; gadfmt : String; Const taglist : Array Of Const) : ULONG;
+begin
+    TR_EasyRequestTags := TR_EasyRequest(app,bodyfmt,pas2c(gadfmt),readintags(taglist));
+end;
+
+FUNCTION TR_EasyRequestTags(app : pTR_App; bodyfmt : String; gadfmt : pCHAR; Const taglist : Array Of Const) : ULONG;
+begin
+    TR_EasyRequestTags := TR_EasyRequest(app,pas2c(bodyfmt),gadfmt,readintags(taglist));
+end;
+
+FUNCTION TR_EasyRequestTags(app : pTR_App; bodyfmt : String; gadfmt : String; Const taglist : Array Of Const) : ULONG;
+begin
+    TR_EasyRequestTags := TR_EasyRequest(app,pas2c(bodyfmt),pas2c(gadfmt),readintags(taglist));
+end;
+
+{$I useautoopenlib.inc}
+{$ifdef use_auto_openlib}
+   {$Info Compiling autoopening of triton.library}
+var
+     triton_exit : Pointer;
+
+PROCEDURE CloseTritonLibrary;
+BEGIN
+     ExitProc := triton_exit;
+     if TritonBase <> nil then begin
+        CloseLibrary(TritonBase);
+        TritonBase := nil;
+     end;
+END;
+
+const
+     VERSION : string[2] = '6';
+
+
+BEGIN
+    TritonBase := nil;
+    TritonBase := OpenLibrary(TRITONNAME,TRITONVERSION);
+    IF TritonBase <> NIL THEN begin
+        triton_exit := ExitProc;
+        ExitProc := @CloseTritonLibrary;
+    end else begin
+        MessageBox('FPC Pascal Error',
+        'Can''t open triton.library version ' + VERSION + #10 +
+        'Deallocating resources and closing down',
+        'Oops');
+        halt(20);
+    end;
+{$else}
+   {$Warning No autoopening of triton.library compiled}
+   {$Info Make sure you open triton.library yourself}
+{$endif use_auto_openlib}
+
+END. (* UNIT TRITON *)
+
+{
+  $Log
+}
+
+
+

+ 2681 - 0
packages/extra/amunits/otherlibs/triton/units/tritonmacros.pas

@@ -0,0 +1,2681 @@
+{
+    This file is part of the Free Pascal run time library.
+
+    A file in Amiga system run time library.
+    Copyright (c) 1998 by Nils Sjoholm
+    member of the Amiga RTL development team.
+
+    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.
+
+ **********************************************************************}
+
+{
+    This is all triton macros translated to procedures.
+    Check the tritondemos on how to use the procedures.
+
+    Some time the compiler tell you that it can't pick the 
+    right overlay function, well the only one so far is TextId.
+    Why I don't know, the fix is just to use a pchar if there
+    is a problem (TextId(pchar('your text'#0)).
+
+    A few fixes, overlay should work with fpc 1.0.7
+    Added overlay for SetTRTag, pchar, string ,boolean and 
+    pointer.
+    09 Jan 2003.
+
+    Added the define use_amiga_smartlink.
+    12 Jan 2003.
+    
+    [email protected]
+}
+
+{$I useamigasmartlink.inc}
+{$ifdef use_amiga_smartlink}
+    {$smartlink on}
+{$endif use_amiga_smartlink}
+unit tritonmacros;
+
+interface
+ 
+uses triton, utility;
+
+var
+   tritontags : array[0..400] of tTagItem;
+   tindex : longint;
+
+PROCEDURE ProjectStart;
+PROCEDURE EndProject;
+PROCEDURE WindowTitle(t : STRING);
+PROCEDURE WindowTitle(t : PChar);
+PROCEDURE ScreenTitle(t : STRING);
+PROCEDURE ScreenTitle(t : PChar);
+PROCEDURE WindowID(gadid : longint);
+PROCEDURE WindowFlags(f : longint);
+PROCEDURE WindowPosition(pos : longint);
+PROCEDURE WindowUnderscore(und : STRING);
+PROCEDURE WindowUnderscore(und : PChar);
+PROCEDURE WindowDimensions(dim : pTR_Dimensions);
+PROCEDURE WindowBackfillWin;
+PROCEDURE WindowBackfillReq;
+PROCEDURE WindowBackfillNone;
+PROCEDURE WindowBackfillS;
+PROCEDURE WindowBackfillSA;
+PROCEDURE WindowBackfillSF;
+PROCEDURE WindowBackfillSB;
+PROCEDURE WindowBackfillA;
+PROCEDURE WindowBackfillAF;
+PROCEDURE WindowBackfillAB;
+PROCEDURE WindowBackfillF;
+PROCEDURE WindowBackfillFB;
+PROCEDURE CustomScreen(scr : Pointer);
+PROCEDURE PubScreen(scr : Pointer);
+PROCEDURE PubScreenName(wname : STRING);
+PROCEDURE PubScreenName(wname : PChar);
+PROCEDURE QuickHelpOn(onn : Integer);
+{ Menus }
+PROCEDURE BeginMenu(t : STRING);
+PROCEDURE BeginMenu(t : PChar);
+PROCEDURE MenuFlags(f : longint);
+PROCEDURE MenuItem(t : STRING ;gadid : longint);
+PROCEDURE MenuItem(t : PChar ;gadid : longint);
+PROCEDURE MenuItemC(t : STRING; gadid : longint);
+PROCEDURE MenuItemC(t : PChar; gadid : longint);
+PROCEDURE MenuItemCC(t : STRING; gadid : longint);
+PROCEDURE MenuItemCC(t : PChar; gadid : longint);
+PROCEDURE BeginSub(t : STRING);
+PROCEDURE BeginSub(t : PChar);
+PROCEDURE MenuItemD(t : STRING; gadid : longint);
+PROCEDURE MenuItemD(t : PChar; gadid : longint);
+PROCEDURE SubItem(t : STRING; gadid : longint);
+PROCEDURE SubItem(t : PChar; gadid : longint);
+PROCEDURE SubItemC(t : STRING; gadid : longint);
+PROCEDURE SubItemC(t : PChar; gadid : longint);
+PROCEDURE SubItemCC(t : STRING; gadid : longint);
+PROCEDURE SubItemCC(t : PChar; gadid : longint);
+PROCEDURE SubItemD(t : STRING ;gadid : longint);
+PROCEDURE SubItemD(t : PChar ;gadid : longint);
+PROCEDURE ItemBarlabel;
+PROCEDURE SubBarlabel;
+{ Groups }
+PROCEDURE HorizGroup;
+PROCEDURE HorizGroupE;
+PROCEDURE HorizGroupS;
+PROCEDURE HorizGroupA;
+PROCEDURE HorizGroupEA;
+PROCEDURE HorizGroupSA;
+PROCEDURE HorizGroupC;
+PROCEDURE HorizGroupEC;
+PROCEDURE HorizGroupSC;
+PROCEDURE HorizGroupAC;
+PROCEDURE HorizGroupEAC;
+PROCEDURE HorizGroupSAC;
+PROCEDURE VertGroup;
+PROCEDURE VertGroupE;
+PROCEDURE VertGroupS;
+PROCEDURE VertGroupA;
+PROCEDURE VertGroupEA;
+PROCEDURE VertGroupSA;
+PROCEDURE VertGroupC;
+PROCEDURE VertGroupEC;
+PROCEDURE VertGroupSC;
+PROCEDURE VertGroupAC;
+PROCEDURE VertGroupEAC;
+PROCEDURE VertGroupSAC;
+PROCEDURE EndGroup;
+PROCEDURE ColumnArray;
+PROCEDURE LineArray;
+PROCEDURE BeginColumn;
+PROCEDURE BeginLine;
+PROCEDURE BeginColumnI;
+PROCEDURE BeginLineI;
+PROCEDURE BeginColumnE;
+PROCEDURE BeginLineE;
+PROCEDURE EndColumn;
+PROCEDURE EndLine;
+PROCEDURE EndArray;
+{ DisplayObject }
+PROCEDURE QuickHelp(Str : STRING);
+PROCEDURE QuickHelp(Str : PChar);
+{ Space }
+PROCEDURE SpaceB;
+PROCEDURE Space;
+PROCEDURE SpaceS;
+PROCEDURE SpaceN;
+{ Text }
+PROCEDURE TextN(ttext : STRING);
+PROCEDURE TextN(ttext : PChar);
+
+PROCEDURE TextH(ttext : STRING);
+PROCEDURE TextH(ttext : PChar);
+
+PROCEDURE Text3(ttext : STRING);
+PROCEDURE Text3(ttext : PChar);
+PROCEDURE TextB(ttext : STRING);
+PROCEDURE TextB(ttext : PChar);
+PROCEDURE TextT(ttext : STRING);
+PROCEDURE TextT(ttext : PChar);
+PROCEDURE TextID(ttext : STRING ; gadid : longint);
+PROCEDURE TextID(ttext : PChar ; gadid : longint);
+PROCEDURE TextNR(t : STRING);
+PROCEDURE TextNR(t : PChar);
+PROCEDURE ClippedText(t : STRING);
+PROCEDURE ClippedText(t : PChar);
+PROCEDURE ClippedTextID(t : STRING; gadid : longint);
+PROCEDURE ClippedTextID(t : PChar; gadid : longint);
+PROCEDURE CenteredText(ttext : STRING);
+PROCEDURE CenteredText(ttext : PChar);
+PROCEDURE CenteredTextH(ttext : STRING);
+PROCEDURE CenteredTextH(ttext : PChar);
+PROCEDURE CenteredText3(ttext : STRING);
+PROCEDURE CenteredText3(ttext : PChar);
+PROCEDURE CenteredTextB(ttext : STRING);
+PROCEDURE CenteredTextB(ttext : PChar);
+PROCEDURE CenteredTextID(ttext : STRING ; gadid : longint);
+PROCEDURE CenteredTextID(ttext : PChar ; gadid : longint);
+PROCEDURE CenteredText_BS(ttext : STRING);
+PROCEDURE CenteredText_BS(ttext : PChar);
+PROCEDURE TextBox(ttext : STRING ; gadid : longint ; mwid : longint);
+PROCEDURE TextBox(ttext : PChar ; gadid : longint ; mwid : longint);
+PROCEDURE ClippedTextBox(ttext : STRING ; gadid : longint);
+PROCEDURE ClippedTextBox(ttext : PChar ; gadid : longint);
+PROCEDURE ClippedTextBoxMW(ttext : STRING ; gadid : longint ; mwid : longint);
+PROCEDURE ClippedTextBoxMW(ttext : PChar ; gadid : longint ; mwid : longint);
+PROCEDURE TextRIGHT(t : STRING ;gadid : longint);
+PROCEDURE TextRIGHT(t : PChar ;gadid : longint);
+PROCEDURE IntegerS(i : longint);
+PROCEDURE IntegerH(i : longint);
+PROCEDURE Integer3(i : longint);
+PROCEDURE IntegerB(i : longint);
+PROCEDURE CenteredInteger(i : longint);
+PROCEDURE CenteredIntegerH(i : longint);
+PROCEDURE CenteredInteger3(i : longint);
+PROCEDURE CenteredIntegerB(i : longint);
+PROCEDURE IntegerBox(def,gadid,mwid : longint);
+{ Button }
+PROCEDURE Button(ttext : STRING ; gadid : longint);
+PROCEDURE Button(ttext : PChar ; gadid : longint);
+PROCEDURE ButtonR(ttext : STRING ; gadid : longint);
+PROCEDURE ButtonR(ttext : PChar ; gadid : longint);
+PROCEDURE ButtonE(ttext : STRING ;gadid : longint);
+PROCEDURE ButtonE(ttext : PChar ;gadid : longint);
+PROCEDURE ButtonRE(ttext : STRING ;gadid : longint);
+PROCEDURE ButtonRE(ttext : PChar ;gadid : longint);
+PROCEDURE CenteredButton(t : STRING;i : longint);
+PROCEDURE CenteredButton(t : PChar;i : longint);
+PROCEDURE CenteredButtonR(t : STRING ;i : longint);
+PROCEDURE CenteredButtonR(t : PChar ;i : longint);
+PROCEDURE CenteredButtonE(t : STRING;i : longint);
+PROCEDURE CenteredButtonE(t : PChar;i : longint);
+PROCEDURE CenteredButtonRE(t : STRING ;i : longint);
+PROCEDURE CenteredButtonRE(t : PChar ;i : longint);
+PROCEDURE EmptyButton(gadid : longint);
+PROCEDURE GetFileButton(gadid : longint);
+PROCEDURE GetDrawerButton(gadid : longint);
+PROCEDURE GetEntryButton(gadid : longint);
+PROCEDURE GetFileButtonS(s : STRING ;gadid : longint);
+PROCEDURE GetFileButtonS(s : PChar ;gadid : longint);
+PROCEDURE GetDrawerButtonS(s : STRING;gadid : longint);
+PROCEDURE GetDrawerButtonS(s : PChar;gadid : longint);
+PROCEDURE GetEntryButtonS(s : STRING ;gadid : longint);
+PROCEDURE GetEntryButtonS(s : PChar ;gadid : longint);
+{ Line }
+PROCEDURE Line(flags : longint);
+PROCEDURE HorizSeparator;
+PROCEDURE VertSeparator;
+PROCEDURE NamedSeparator(ttext : STRING);
+PROCEDURE NamedSeparator(ttext : PChar);
+PROCEDURE NamedSeparatorI(te : STRING ;gadid : longint);
+PROCEDURE NamedSeparatorI(te : PChar ;gadid : longint);
+PROCEDURE NamedSeparatorN(ttext : STRING);
+PROCEDURE NamedSeparatorN(ttext : PChar);
+PROCEDURE NamedSeparatorIN(te : STRING ;gadid : longint);
+PROCEDURE NamedSeparatorIN(te : PChar ;gadid : longint);
+{ FrameBox }
+PROCEDURE GroupBox;
+PROCEDURE NamedFrameBox(t : STRING);
+PROCEDURE NamedFrameBox(t : PChar);
+PROCEDURE TTextBox;
+{ DropBox }
+PROCEDURE DropBox(gadid : longint);
+{ CheckBox gadget }
+PROCEDURE CheckBox(gadid : longint);
+PROCEDURE CheckBoxV(value : longint; gadid : longint);
+PROCEDURE CheckBoxC(gadid : longint);
+PROCEDURE CheckBoxLEFT(gadid : longint);
+PROCEDURE CheckBoxCLEFT(gadid : longint);
+{ String gadget }
+PROCEDURE StringGadget(def : STRING;gadid : longint);
+PROCEDURE StringGadget(def : PChar;gadid : longint);
+PROCEDURE StringGadgetNR(def : STRING ;gadid : longint);
+PROCEDURE StringGadgetNR(def : PChar ;gadid : longint);
+PROCEDURE PasswordGadget(def : STRING ;gadid : longint);
+PROCEDURE PasswordGadget(def : PChar ;gadid : longint);
+{ Cycle gadget }
+PROCEDURE CycleGadget(ent : Pointer ; val,gadid : longint);
+PROCEDURE MXGadget(ent : Pointer ; val,gadid : longint);
+PROCEDURE MXGadgetR(ent : Pointer; val,gadid : longint);
+{ Slider gadget }
+PROCEDURE SliderGadget(mini,maxi,val,gadid : longint);
+PROCEDURE SliderGadgetV(mini,maxi,val,gadid : longint);
+{ Scroller gadget }
+PROCEDURE ScrollerGadget(total,visible,val,id : longint);
+PROCEDURE ScrollerGadgetV(total,visible,val,id : longint);
+{ Palette gadget }
+PROCEDURE PaletteGadget(val,gadid : longint);
+{ Listview gadget }
+PROCEDURE ListRO(ent : Pointer;gadid,top : longint);
+PROCEDURE ListSel(ent : Pointer ;gadid,top : longint);
+PROCEDURE ListSS(e : Pointer ;gadid,top,v : longint);
+PROCEDURE ListSSM(e : Pointer ;gadid,top,v,min : longint);
+PROCEDURE ListROC(ent : Pointer;gadid,top : longint);
+PROCEDURE ListSelC(ent : Pointer;gadid,top : longint);
+PROCEDURE ListSSC(e : Pointer;gadid,top,v : longint);
+PROCEDURE ListRON(ent : Pointer ;gadid,top : longint);
+PROCEDURE ListSelN(ent : Pointer;gadid,top : longint);
+PROCEDURE ListSSN(e : Pointer;gadid,top,v : longint);
+PROCEDURE ListROCN(ent : Pointer;gadid,top : longint);
+PROCEDURE ListSelCN(ent : Pointer;gadid,top : longint);
+PROCEDURE ListSSCN(e : Pointer;gadid,top,v : longint);
+PROCEDURE FWListRO(ent : Pointer;gadid,top : longint);
+PROCEDURE FWListSel(ent : Pointer;gadid,top : longint);
+PROCEDURE FWListSS(e : Pointer;gadid,top,v : longint);
+PROCEDURE FWListROC(ent : Pointer;gadid,top : longint);
+PROCEDURE FWListSelC(ent : Pointer;gadid,top : longint);
+PROCEDURE FWListSSC(e : Pointer;gadid,top,v : longint);
+PROCEDURE FWListRON(ent : Pointer;gadid,top : longint);
+PROCEDURE FWListSelN(ent : Pointer;gadid,top : longint);
+PROCEDURE FWListSSN(e : Pointer;gadid,top,v : longint);
+PROCEDURE FWListROCN(ent : Pointer;gadid,top : longint);
+PROCEDURE FWListSelCN(ent : Pointer;gadid,top : longint);
+PROCEDURE FWListSSCN(e : Pointer;gadid,top,v : longint);
+{ Progress indicator }
+PROCEDURE Progress(maxi,value,gadid : longint);
+{ Image }
+PROCEDURE BoopsiImage(img : Pointer);
+PROCEDURE BoopsiImageD(img : Pointer;mw,mh : longint);
+{ Attributes }
+PROCEDURE ID(gadid : longint);
+PROCEDURE Disabled;
+PROCEDURE ObjectBackfillWin;
+PROCEDURE ObjectBackfillReq;
+PROCEDURE ObjectBackfillB;
+PROCEDURE ObjectBackfillS;
+PROCEDURE ObjectBackfillSA;
+PROCEDURE ObjectBackfillSF;
+PROCEDURE ObjectBackfillSB;
+PROCEDURE ObjectBackfillA;
+PROCEDURE ObjectBackfillAF;
+PROCEDURE ObjectBackfillAB;
+PROCEDURE ObjectBackfillF;
+PROCEDURE ObjectBackfillFB;
+{ Requester support }
+PROCEDURE BeginRequester(t : STRING; p : longint);
+PROCEDURE BeginRequester(t : PChar; p : longint);
+PROCEDURE BeginRequesterGads;
+PROCEDURE EndRequester;
+PROCEDURE SetTRTag( thetag, thedata : longint);
+PROCEDURE SetTRTag( thetag : longint; thedata : string);
+PROCEDURE SetTRTag( thetag : longint; thedata : pchar);
+PROCEDURE SetTRTag( thetag : longint; thedata : boolean);
+PROCEDURE SetTRTag( thetag : longint; thedata : pointer);
+
+
+IMPLEMENTATION
+
+uses pastoc;
+
+PROCEDURE ProjectStart;
+BEGIN
+    tindex := 0;
+END;
+
+PROCEDURE EndProject;
+BEGIN
+    tritontags[tindex].ti_Tag := TAG_DONE;
+END;
+
+PROCEDURE WindowTitle(t : STRING);
+BEGIN
+    tritontags[tindex].ti_Tag := TRWI_Title;
+    tritontags[tindex].ti_Data := longint(pas2c(t));
+    Inc(tindex);
+END;
+
+PROCEDURE WindowTitle(t : PChar);
+BEGIN
+    tritontags[tindex].ti_Tag := TRWI_Title;
+    tritontags[tindex].ti_Data := longint(t);
+    Inc(tindex);
+END;
+
+PROCEDURE ScreenTitle(t : STRING);
+BEGIN
+    ScreenTitle(pas2c(t));
+END;
+
+PROCEDURE ScreenTitle(t : PChar);
+BEGIN
+    tritontags[tindex].ti_Tag := TRWI_ScreenTitle;
+    tritontags[tindex].ti_Data := longint(t);
+    Inc(tindex);
+END;
+
+PROCEDURE WindowID(gadid : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TRWI_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+END;
+
+PROCEDURE WindowFlags(f : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TRWI_Flags;
+    tritontags[tindex].ti_Data := longint(f);
+    Inc(tindex);
+END;
+
+PROCEDURE WindowPosition(pos : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TRWI_Position;
+    tritontags[tindex].ti_Data := longint(pos);
+    Inc(tindex);
+END;
+
+PROCEDURE WindowUnderscore(und : STRING);
+BEGIN
+    WindowUnderscore(pas2c(und));
+END;
+
+PROCEDURE WindowUnderscore(und : PChar);
+BEGIN
+    tritontags[tindex].ti_Tag := TRWI_Underscore;
+    tritontags[tindex].ti_Data := longint(und);
+    Inc(tindex);
+END;
+
+PROCEDURE WindowDimensions(dim : pTR_Dimensions);
+BEGIN
+    tritontags[tindex].ti_Tag := TRWI_Dimensions;
+    tritontags[tindex].ti_Data := longint(dim);
+    Inc(tindex);
+END;
+
+PROCEDURE WindowBackfillWin;
+BEGIN
+    tritontags[tindex].ti_Tag := TRWI_Backfill;
+    tritontags[tindex].ti_Data := TRBF_WINDOWBACK;
+    Inc(tindex);
+END;
+
+PROCEDURE WindowBackfillReq;
+begin
+    tritontags[tindex].ti_Tag := TRWI_Backfill;
+    tritontags[tindex].ti_Data := TRBF_REQUESTERBACK;
+    Inc(tindex);
+END;
+
+PROCEDURE WindowBackfillNone;
+begin
+    tritontags[tindex].ti_Tag := TRWI_Backfill;
+    tritontags[tindex].ti_Data := TRBF_NONE;
+    Inc(tindex);
+END;
+
+PROCEDURE WindowBackfillS;
+begin
+    tritontags[tindex].ti_Tag := TRWI_Backfill;
+    tritontags[tindex].ti_Data := TRBF_SHINE;
+    Inc(tindex);
+END;
+
+PROCEDURE WindowBackfillSA;
+begin
+    tritontags[tindex].ti_Tag := TRWI_Backfill;
+    tritontags[tindex].ti_Data := TRBF_SHINE_SHADOW;
+    Inc(tindex);
+END;
+
+PROCEDURE WindowBackfillSF;
+begin
+    tritontags[tindex].ti_Tag := TRWI_Backfill;
+    tritontags[tindex].ti_Data := TRBF_SHINE_FILL;
+    Inc(tindex);
+END;
+
+PROCEDURE WindowBackfillSB;
+begin
+    tritontags[tindex].ti_Tag := TRWI_Backfill;
+    tritontags[tindex].ti_Data := TRBF_SHINE_BACKGROUND;
+    Inc(tindex);
+END;
+
+PROCEDURE WindowBackfillA;
+begin
+    tritontags[tindex].ti_Tag := TRWI_Backfill;
+    tritontags[tindex].ti_Data := TRBF_SHADOW;
+    Inc(tindex);
+END;
+
+PROCEDURE WindowBackfillAF;
+begin
+    tritontags[tindex].ti_Tag := TRWI_Backfill;
+    tritontags[tindex].ti_Data := TRBF_SHADOW_FILL;
+    Inc(tindex);
+END;
+
+PROCEDURE WindowBackfillAB;
+begin
+    tritontags[tindex].ti_Tag := TRWI_Backfill;
+    tritontags[tindex].ti_Data := TRBF_SHADOW_BACKGROUND;
+    Inc(tindex);
+END;
+
+PROCEDURE WindowBackfillF;
+begin
+    tritontags[tindex].ti_Tag := TRWI_Backfill;
+    tritontags[tindex].ti_Data := TRBF_FILL;
+    Inc(tindex);
+END;
+
+PROCEDURE WindowBackfillFB;
+begin
+    tritontags[tindex].ti_Tag := TRWI_Backfill;
+    tritontags[tindex].ti_Data := TRBF_FILL_BACKGROUND;
+    Inc(tindex);
+END;
+
+PROCEDURE CustomScreen(scr : Pointer);
+BEGIN
+    tritontags[tindex].ti_Tag := TRWI_CustomScreen;
+    tritontags[tindex].ti_Data := longint(scr);
+    Inc(tindex);
+END;
+
+PROCEDURE PubScreen(scr : Pointer);
+BEGIN
+    tritontags[tindex].ti_Tag := TRWI_PubScreen;
+    tritontags[tindex].ti_Data := longint(scr);
+END;
+
+PROCEDURE PubScreenName(wname : STRING);
+BEGIN
+    PubScreenName(pas2c(wname));
+END;
+
+PROCEDURE PubScreenName(wname : PChar);
+BEGIN
+    tritontags[tindex].ti_Tag := TRWI_PubScreenName;
+    tritontags[tindex].ti_Data := longint(wname);
+    Inc(tindex);
+END;
+
+PROCEDURE QuickHelpOn(onn : Integer);
+BEGIN
+    tritontags[tindex].ti_Tag := TRWI_QuickHelp;
+    tritontags[tindex].ti_Data := longint(onn);
+    Inc(tindex);
+END;
+
+{ Menus }
+PROCEDURE BeginMenu(t : STRING);
+BEGIN
+    BeginMenu(pas2c(t));
+END;
+
+PROCEDURE BeginMenu(t : PChar);
+BEGIN
+    tritontags[tindex].ti_Tag := TRMN_Title;
+    tritontags[tindex].ti_Data := longint(t);
+    Inc(tindex);
+END;
+
+PROCEDURE MenuFlags(f : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TRMN_Flags;
+    tritontags[tindex].ti_Data := longint(f);
+    Inc(tindex);
+END;
+
+PROCEDURE MenuItem(t : STRING ;gadid : longint);
+BEGIN
+    MenuItem(pas2c(t),gadid);
+END;
+
+PROCEDURE MenuItem(t : PChar ;gadid : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TRMN_Item;
+    tritontags[tindex].ti_Data := longint(t);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+END;
+
+PROCEDURE MenuItemC(t : STRING; gadid : longint);
+BEGIN
+    MenuItemC(pas2c(t),gadid);
+END;
+
+PROCEDURE MenuItemC(t : PChar; gadid : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TRMN_Item;
+    tritontags[tindex].ti_Data := longint(t);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRMN_Flags;
+    tritontags[tindex].ti_Data := TRMF_CHECKIT;
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+END;
+
+PROCEDURE MenuItemCC(t : STRING; gadid : longint);
+BEGIN
+    MenuItemCC(pas2c(t),gadid);
+END;
+
+PROCEDURE MenuItemCC(t : PChar; gadid : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TRMN_Item;
+    tritontags[tindex].ti_Data := longint(t);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRMN_Flags;
+    tritontags[tindex].ti_Data := TRMF_CHECKED;
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+END;
+
+PROCEDURE BeginSub(t : STRING);
+BEGIN
+    BeginSub(pas2c(t));
+END;
+
+PROCEDURE BeginSub(t : PChar);
+BEGIN
+    tritontags[tindex].ti_Tag := TRMN_Item;
+    tritontags[tindex].ti_Data := longint(t);
+    Inc(tindex);
+END;
+
+PROCEDURE MenuItemD(t : STRING; gadid : longint);
+BEGIN
+    MenuItemD(pas2c(t),gadid);
+END;
+
+PROCEDURE MenuItemD(t : PChar; gadid : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TRMN_Item;
+    tritontags[tindex].ti_Data := longint(t);
+    Inc(tindex);
+    MenuFlags(TRMF_DISABLED);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+END;
+
+PROCEDURE SubItem(t : STRING; gadid : longint);
+BEGIN
+    SubItem(pas2c(t),gadid);
+END;
+
+PROCEDURE SubItem(t : PChar; gadid : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TRMN_Sub;
+    tritontags[tindex].ti_Data := longint(t);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+END;
+
+PROCEDURE SubItemC(t : STRING; gadid : longint);
+BEGIN
+    SubItemC(pas2c(t),gadid);
+END;
+
+PROCEDURE SubItemC(t : PChar; gadid : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TRMN_Sub;
+    tritontags[tindex].ti_Data := longint(t);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRMN_Flags;
+    tritontags[tindex].ti_Data := TRMF_CHECKIT;
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+END;
+
+PROCEDURE SubItemCC(t : STRING; gadid : longint);
+BEGIN
+    SubItemCC(pas2c(t),gadid);
+END;
+
+PROCEDURE SubItemCC(t : PChar; gadid : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TRMN_Sub;
+    tritontags[tindex].ti_Data := longint(t);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRMN_Flags;
+    tritontags[tindex].ti_Data := TRMF_CHECKED;
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+END;
+
+PROCEDURE SubItemD(t : STRING ;gadid : longint);
+BEGIN
+    SubItemD(pas2c(t),gadid);
+END;
+
+PROCEDURE SubItemD(t : PChar ;gadid : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TRMN_Sub;
+    tritontags[tindex].ti_Data := longint(t);
+    Inc(tindex);
+    MenuFlags(TRMF_DISABLED);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+END;
+
+PROCEDURE ItemBarlabel;
+begin
+    tritontags[tindex].ti_Tag := TRMN_Item;
+    tritontags[tindex].ti_Data := TRMN_BARLABEL;
+    Inc(tindex);
+END;
+
+PROCEDURE SubBarlabel;
+begin
+    tritontags[tindex].ti_Tag := TRMN_Sub;
+    tritontags[tindex].ti_Data := TRMN_BARLABEL;
+    Inc(tindex);
+END;
+
+{ Groups }
+PROCEDURE HorizGroup;
+begin
+    tritontags[tindex].ti_Tag := TRGR_Horiz;
+    tritontags[tindex].ti_Data := longint(0);
+    Inc(tindex);
+END;
+
+PROCEDURE HorizGroupE;
+begin
+    tritontags[tindex].ti_Tag := TRGR_Horiz;
+    tritontags[tindex].ti_Data := TRGR_EQUALSHARE;
+    Inc(tindex);
+END;
+
+PROCEDURE HorizGroupS;
+begin
+    tritontags[tindex].ti_Tag := TRGR_Horiz;
+    tritontags[tindex].ti_Data := TRGR_PROPSPACES;
+    Inc(tindex);
+END;
+
+PROCEDURE HorizGroupA;
+begin
+    tritontags[tindex].ti_Tag := TRGR_Horiz;
+    tritontags[tindex].ti_Data := TRGR_ALIGN;
+    Inc(tindex);
+END;
+
+PROCEDURE HorizGroupEA;
+begin
+    tritontags[tindex].ti_Tag := TRGR_Horiz;
+    tritontags[tindex].ti_Data := (TRGR_EQUALSHARE OR TRGR_ALIGN);
+    Inc(tindex);
+END;
+
+PROCEDURE HorizGroupSA;
+begin
+    tritontags[tindex].ti_Tag := TRGR_Horiz;
+    tritontags[tindex].ti_Data := (TRGR_PROPSPACES OR TRGR_ALIGN);
+    Inc(tindex);
+END;
+
+PROCEDURE HorizGroupC;
+begin
+    tritontags[tindex].ti_Tag := TRGR_Horiz;
+    tritontags[tindex].ti_Data := TRGR_CENTER;
+    Inc(tindex);
+END;
+
+PROCEDURE HorizGroupEC;
+begin
+    tritontags[tindex].ti_Tag := TRGR_Horiz;
+    tritontags[tindex].ti_Data := (TRGR_EQUALSHARE OR TRGR_CENTER);
+    Inc(tindex);
+END;
+
+PROCEDURE HorizGroupSC;
+begin
+    tritontags[tindex].ti_Tag := TRGR_Horiz;
+    tritontags[tindex].ti_Data := (TRGR_PROPSPACES OR TRGR_CENTER);
+    Inc(tindex);
+END;
+
+PROCEDURE HorizGroupAC;
+begin
+    tritontags[tindex].ti_Tag := TRGR_Horiz;
+    tritontags[tindex].ti_Data := (TRGR_ALIGN OR TRGR_CENTER);
+    Inc(tindex);
+END;
+
+PROCEDURE HorizGroupEAC;
+begin
+    tritontags[tindex].ti_Tag := TRGR_Horiz;
+    tritontags[tindex].ti_Data := (TRGR_EQUALSHARE OR TRGR_ALIGN OR TRGR_CENTER);
+    Inc(tindex);
+END;
+
+PROCEDURE HorizGroupSAC;
+begin
+    tritontags[tindex].ti_Tag := TRGR_Horiz;
+    tritontags[tindex].ti_Data := (TRGR_PROPSPACES OR TRGR_ALIGN OR TRGR_CENTER);
+    Inc(tindex);
+END;
+
+PROCEDURE VertGroup;
+begin
+    tritontags[tindex].ti_Tag := TRGR_Vert;
+    tritontags[tindex].ti_Data := longint(0);
+    Inc(tindex);
+END;
+
+PROCEDURE VertGroupE;
+begin
+    tritontags[tindex].ti_Tag := TRGR_Vert;
+    tritontags[tindex].ti_Data := TRGR_EQUALSHARE;
+    Inc(tindex);
+END;
+
+PROCEDURE VertGroupS;
+begin
+    tritontags[tindex].ti_Tag := TRGR_Vert;
+    tritontags[tindex].ti_Data := TRGR_PROPSPACES;
+    Inc(tindex);
+END;
+
+PROCEDURE VertGroupA;
+begin
+    tritontags[tindex].ti_Tag := TRGR_Vert;
+    tritontags[tindex].ti_Data := TRGR_ALIGN;
+    Inc(tindex);
+END;
+
+PROCEDURE VertGroupEA;
+begin
+    tritontags[tindex].ti_Tag := TRGR_Vert;
+    tritontags[tindex].ti_Data := (TRGR_EQUALSHARE OR TRGR_ALIGN);
+    Inc(tindex);
+END;
+
+PROCEDURE VertGroupSA;
+begin
+    tritontags[tindex].ti_Tag := TRGR_Vert;
+    tritontags[tindex].ti_Data := (TRGR_PROPSPACES OR TRGR_ALIGN);
+    Inc(tindex);
+END;
+
+PROCEDURE VertGroupC;
+begin
+    tritontags[tindex].ti_Tag := TRGR_Vert;
+    tritontags[tindex].ti_Data := TRGR_CENTER;
+    Inc(tindex);
+END;
+
+PROCEDURE VertGroupEC;
+begin
+    tritontags[tindex].ti_Tag := TRGR_Vert;
+    tritontags[tindex].ti_Data := (TRGR_EQUALSHARE OR TRGR_CENTER);
+    Inc(tindex);
+END;
+
+PROCEDURE VertGroupSC;
+begin
+    tritontags[tindex].ti_Tag := TRGR_Vert;
+    tritontags[tindex].ti_Data := (TRGR_PROPSPACES OR TRGR_CENTER);
+    Inc(tindex);
+END;
+
+PROCEDURE VertGroupAC;
+begin
+    tritontags[tindex].ti_Tag := TRGR_Vert;
+    tritontags[tindex].ti_Data := (TRGR_ALIGN OR TRGR_CENTER);
+    Inc(tindex);
+END;
+
+PROCEDURE VertGroupEAC;
+begin
+    tritontags[tindex].ti_Tag := TRGR_Vert;
+    tritontags[tindex].ti_Data := (TRGR_EQUALSHARE OR TRGR_ALIGN OR TRGR_CENTER);
+    Inc(tindex);
+END;
+
+PROCEDURE VertGroupSAC;
+begin
+    tritontags[tindex].ti_Tag := TRGR_Vert;
+    tritontags[tindex].ti_Data := (TRGR_PROPSPACES OR TRGR_ALIGN OR TRGR_CENTER);
+    Inc(tindex);
+END;
+
+PROCEDURE EndGroup;
+begin
+    tritontags[tindex].ti_Tag := TRGR_End;
+    tritontags[tindex].ti_Data := longint(0);
+    Inc(tindex);
+END;
+
+PROCEDURE ColumnArray;
+begin
+    tritontags[tindex].ti_Tag := TRGR_Horiz;
+    tritontags[tindex].ti_Data := (TRGR_ARRAY OR TRGR_ALIGN OR TRGR_CENTER);
+    Inc(tindex);
+END;
+
+PROCEDURE LineArray;
+begin
+    tritontags[tindex].ti_Tag := TRGR_Vert;
+    tritontags[tindex].ti_Data := (TRGR_ARRAY OR TRGR_ALIGN OR TRGR_CENTER);
+    Inc(tindex);
+END;
+
+PROCEDURE BeginColumn;
+begin
+    tritontags[tindex].ti_Tag := TRGR_Vert;
+    tritontags[tindex].ti_Data := (TRGR_PROPSHARE OR TRGR_ALIGN OR TRGR_CENTER);
+    Inc(tindex);
+END;
+
+PROCEDURE BeginLine;
+begin
+    tritontags[tindex].ti_Tag := TRGR_Horiz;
+    tritontags[tindex].ti_Data := (TRGR_PROPSHARE OR TRGR_ALIGN OR TRGR_CENTER);
+    Inc(tindex);
+END;
+
+PROCEDURE BeginColumnI;
+begin
+    tritontags[tindex].ti_Tag := TRGR_Vert;
+    tritontags[tindex].ti_Data := (TRGR_PROPSHARE OR TRGR_ALIGN OR TRGR_CENTER OR 
+TRGR_INDEP);
+    Inc(tindex);
+END;
+
+PROCEDURE BeginLineI;
+begin
+    tritontags[tindex].ti_Tag := TRGR_Horiz;
+    tritontags[tindex].ti_Data := (TRGR_PROPSHARE OR TRGR_ALIGN OR TRGR_CENTER OR 
+TRGR_INDEP);
+    Inc(tindex);
+END;
+
+PROCEDURE BeginColumnE;
+begin
+    tritontags[tindex].ti_Tag := TRGR_Vert;
+    tritontags[tindex].ti_Data := (TRGR_EQUALSHARE OR TRGR_ALIGN OR TRGR_CENTER);
+    Inc(tindex);
+END;
+
+PROCEDURE BeginLineE;
+begin
+    tritontags[tindex].ti_Tag := TRGR_Horiz;
+    tritontags[tindex].ti_Data := (TRGR_EQUALSHARE OR TRGR_ALIGN OR TRGR_CENTER);
+    Inc(tindex);
+END;
+
+PROCEDURE EndColumn;
+BEGIN
+    EndGroup;
+END;
+
+PROCEDURE EndLine;
+BEGIN
+    EndGroup;
+END;
+
+PROCEDURE EndArray;
+BEGIN
+    EndGroup;
+END;
+
+{ DisplayObject }
+PROCEDURE QuickHelp(Str : STRING);
+BEGIN
+    QuickHelp(pas2c(Str));
+END;
+
+PROCEDURE QuickHelp(Str : PChar);
+BEGIN
+    tritontags[tindex].ti_Tag := TRDO_QuickHelpString;
+    tritontags[tindex].ti_Data := longint(Str);
+    Inc(tindex);
+END;
+
+{ Space }
+PROCEDURE SpaceB;
+begin
+    tritontags[tindex].ti_Tag := TROB_Space;
+    tritontags[tindex].ti_Data := TRST_BIG;
+    Inc(tindex);
+END;
+
+PROCEDURE Space;
+begin
+    tritontags[tindex].ti_Tag := TROB_Space;
+    tritontags[tindex].ti_Data := TRST_NORMAL;
+    Inc(tindex);
+END;
+
+PROCEDURE SpaceS;
+begin
+    tritontags[tindex].ti_Tag := TROB_Space;
+    tritontags[tindex].ti_Data := TRST_SMALL;
+    Inc(tindex);
+END;
+
+PROCEDURE SpaceN;
+begin
+    tritontags[tindex].ti_Tag := TROB_Space;
+    tritontags[tindex].ti_Data := TRST_NONE;
+    Inc(tindex);
+END;
+
+{ Text }
+PROCEDURE TextN(ttext : STRING);
+BEGIN
+    TextN(pas2c(ttext));
+END;
+
+PROCEDURE TextN(ttext : PChar);
+BEGIN
+    tritontags[tindex].ti_Tag := TROB_Text;
+    tritontags[tindex].ti_Data := longint(0);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Text;
+    tritontags[tindex].ti_Data := longint(ttext);
+    Inc(tindex);
+END;
+
+
+PROCEDURE TextH(ttext : STRING);
+BEGIN
+    TextH(pas2c(ttext));
+END;
+
+PROCEDURE TextH(ttext : PChar);
+BEGIN
+    tritontags[tindex].ti_Tag := TROB_Text;
+    tritontags[tindex].ti_Data := longint(0);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Text;
+    tritontags[tindex].ti_Data := longint(ttext);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Flags;
+    tritontags[tindex].ti_Data := TRTX_HIGHLIGHT;
+    Inc(tindex);
+END;
+
+
+PROCEDURE Text3(ttext : STRING);
+BEGIN
+    Text3(pas2c(ttext));
+END;
+
+PROCEDURE Text3(ttext : PChar);
+BEGIN
+    tritontags[tindex].ti_Tag := TROB_Text;
+    tritontags[tindex].ti_Data := longint(0);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Text;
+    tritontags[tindex].ti_Data := longint(ttext);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Flags;
+    tritontags[tindex].ti_Data := TRTX_3D;
+    Inc(tindex);
+END;
+
+PROCEDURE TextB(ttext : STRING);
+BEGIN
+    TextB(pas2c(ttext));
+END;
+
+PROCEDURE TextB(ttext : PChar);
+BEGIN
+    tritontags[tindex].ti_Tag := TROB_Text;
+    tritontags[tindex].ti_Data := longint(0);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Text;
+    tritontags[tindex].ti_Data := longint(ttext);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Flags;
+    tritontags[tindex].ti_Data := TRTX_BOLD;
+    Inc(tindex);
+END;
+
+PROCEDURE TextT(ttext : STRING);
+BEGIN
+    TextT(pas2c(ttext));
+END;
+
+PROCEDURE TextT(ttext : PChar);
+BEGIN
+    tritontags[tindex].ti_Tag := TROB_Text;
+    tritontags[tindex].ti_Data := longint(0);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Text;
+    tritontags[tindex].ti_Data := longint(ttext);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Flags;
+    tritontags[tindex].ti_Data := TRTX_TITLE;
+    Inc(tindex);
+END;
+
+PROCEDURE TextID(ttext : STRING ; gadid : longint);
+BEGIN
+    TextID(pas2c(ttext),gadid);
+END;
+
+PROCEDURE TextID(ttext : PChar ; gadid : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TROB_Text;
+    tritontags[tindex].ti_Data := longint(0);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Text;
+    tritontags[tindex].ti_Data := longint(ttext);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+END;
+
+PROCEDURE TextNR(t : STRING);
+BEGIN
+    TextNR(pas2c(t));
+END;
+
+PROCEDURE TextNR(t : PChar);
+BEGIN
+    TextN(t);
+    tritontags[tindex].ti_Tag := TRAT_Flags;
+    tritontags[tindex].ti_Data := TROF_RIGHTALIGN;
+    Inc(tindex);
+END;
+
+PROCEDURE ClippedText(t : STRING);
+BEGIN
+    ClippedText(pas2c(t));
+END;
+
+PROCEDURE ClippedText(t : PChar);
+BEGIN
+    TextN(t);
+    tritontags[tindex].ti_Tag := TRAT_Flags;
+    tritontags[tindex].ti_Data := (TRTX_CLIPPED OR TRTX_NOUNDERSCORE);
+    Inc(tindex);
+END;
+
+PROCEDURE ClippedTextID(t : STRING; gadid : longint);
+BEGIN
+    ClippedTextID(pas2c(t),gadid);
+END;
+
+PROCEDURE ClippedTextID(t : PChar; gadid : longint);
+BEGIN
+    TextN(t);
+    tritontags[tindex].ti_Tag := TRAT_Flags;
+    tritontags[tindex].ti_Data := (TRTX_CLIPPED OR TRTX_NOUNDERSCORE);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+END;
+
+PROCEDURE CenteredText(ttext : STRING);
+BEGIN
+    CenteredText(pas2c(ttext));
+END;
+
+PROCEDURE CenteredText(ttext : PChar);
+BEGIN
+    HorizGroupSC; Space; TextN(ttext);Space; EndGroup;
+END;
+
+PROCEDURE CenteredTextH(ttext : STRING);
+BEGIN
+    CenteredTextH(pas2c(ttext));
+END;
+
+PROCEDURE CenteredTextH(ttext : PChar);
+BEGIN
+    HorizGroupSC; Space; TextH(ttext); Space; EndGroup;
+END;
+
+PROCEDURE CenteredText3(ttext : STRING);
+BEGIN
+    CenteredText3(pas2c(ttext));
+END;
+
+PROCEDURE CenteredText3(ttext : PChar);
+BEGIN
+    HorizGroupSC; Space; Text3(ttext); Space; EndGroup;
+END;
+
+PROCEDURE CenteredTextB(ttext : STRING);
+BEGIN
+    CenteredTextB(pas2c(ttext));
+END;
+
+PROCEDURE CenteredTextB(ttext : PChar);
+BEGIN
+    HorizGroupSC; Space; TextB(ttext); Space; EndGroup;
+END;
+
+PROCEDURE CenteredTextID(ttext : STRING ; gadid : longint);
+BEGIN
+    CenteredTextID(pas2c(ttext),gadid);
+END;
+
+PROCEDURE CenteredTextID(ttext : PChar ; gadid : longint);
+BEGIN
+    HorizGroupSC; Space; TextID(ttext,gadid); Space; EndGroup;
+END;
+
+PROCEDURE CenteredText_BS(ttext : STRING);
+BEGIN
+    CenteredText_BS(pas2c(ttext));
+END;
+
+PROCEDURE CenteredText_BS(ttext : PChar);
+BEGIN
+    HorizGroupSC; SpaceB; TextN(ttext); SpaceB; EndGroup;
+END;
+
+PROCEDURE TextBox(ttext : STRING ; gadid : longint ; mwid : longint);
+BEGIN
+    TextBox(pas2c(ttext),gadid,mwid);
+END;
+
+PROCEDURE TextBox(ttext : PChar ; gadid : longint ; mwid : longint);
+BEGIN
+    TTextBox; ObjectBackfillB; VertGroup; SpaceS;
+    HorizGroupSC; Space; TextN(ttext);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_MinWidth;
+    tritontags[tindex].ti_Data := longint(mwid);
+    Inc(tindex);
+    Space; EndGroup; SpaceS; EndGroup;
+END;
+
+PROCEDURE ClippedTextBox(ttext : STRING ; gadid : longint);
+BEGIN
+    ClippedTextBox(pas2c(ttext),gadid);
+END;
+
+PROCEDURE ClippedTextBox(ttext : PChar ; gadid : longint);
+BEGIN
+    TTextBox; ObjectBackfillB; VertGroupAC; SpaceS; HorizGroupAC; Space;
+    ClippedTextID(ttext,gadid); Space; EndGroup; SpaceS; EndGroup;
+END;
+
+PROCEDURE ClippedTextBoxMW(ttext : STRING ; gadid : longint ; mwid : longint);
+BEGIN
+    ClippedTextBoxMW(pas2c(ttext),gadid,mwid);
+END;
+
+PROCEDURE ClippedTextBoxMW(ttext : PChar ; gadid : longint ; mwid : longint);
+BEGIN
+    TTextBox; ObjectBackfillB; VertGroupAC; SpaceS; HorizGroupAC; Space;
+    ClippedTextID(ttext,gadid);
+    tritontags[tindex].ti_Tag := TRAT_MinWidth;
+    tritontags[tindex].ti_Data := longint(mwid);
+    Inc(tindex);
+    Space; EndGroup; SpaceS; EndGroup;
+END;
+
+PROCEDURE TextRIGHT(t : STRING ;gadid : longint);
+BEGIN
+    TextRIGHT(pas2c(t),gadid);
+END;
+
+PROCEDURE TextRIGHT(t : PChar ;gadid : longint);
+BEGIN
+    HorizGroupS; Space; TextN(t); ID(gadid); EndGroup;
+END;
+
+PROCEDURE IntegerS(i : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TROB_Text;
+    tritontags[tindex].ti_Data := longint(0);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Value;
+    tritontags[tindex].ti_Data := longint(i);
+    Inc(tindex);
+END;
+
+PROCEDURE IntegerH(i : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TROB_Text;
+    tritontags[tindex].ti_Data := longint(0);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Value;
+    tritontags[tindex].ti_Data := longint(i);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Flags;
+    tritontags[tindex].ti_Data := TRTX_HIGHLIGHT;
+    Inc(tindex);
+END;
+
+PROCEDURE Integer3(i : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TROB_Text;
+    tritontags[tindex].ti_Data := longint(0);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Value;
+    tritontags[tindex].ti_Data := longint(i);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Flags;
+    tritontags[tindex].ti_Data := TRTX_3D;
+    Inc(tindex);
+END;
+
+PROCEDURE IntegerB(i : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TROB_Text;
+    tritontags[tindex].ti_Data := longint(0);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Value;
+    tritontags[tindex].ti_Data := longint(i);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Flags;
+    tritontags[tindex].ti_Data := TRTX_BOLD;
+    Inc(tindex);
+END;
+
+PROCEDURE CenteredInteger(i : longint);
+BEGIN
+    HorizGroupSC; Space; IntegerS(i); Space; EndGroup;
+END;
+
+PROCEDURE CenteredIntegerH(i : longint);
+BEGIN
+    HorizGroupSC; Space; IntegerH(i); Space; EndGroup;
+END;
+
+PROCEDURE CenteredInteger3(i : longint);
+BEGIN
+    HorizGroupSC; Space; Integer3(i); Space; EndGroup;
+END;
+
+PROCEDURE CenteredIntegerB(i : longint);
+BEGIN
+    HorizGroupSC; Space; IntegerB(i); Space; EndGroup;
+END;
+
+PROCEDURE IntegerBox(def,gadid,mwid : longint);
+BEGIN
+    GroupBox; ObjectBackfillB; VertGroup; SpaceS; HorizGroupSC;
+    Space; IntegerS(def);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_MinWidth;
+    tritontags[tindex].ti_Data := longint(mwid);
+    Inc(tindex);
+    Space; EndGroup; SpaceS; EndGroup;
+END;
+
+{ Button }
+PROCEDURE Button(ttext : STRING ; gadid : longint);
+BEGIN
+    Button(pas2c(ttext),gadid);
+END;
+
+PROCEDURE Button(ttext : PChar ; gadid : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TROB_Button;
+    tritontags[tindex].ti_Data := longint(0);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Text;
+    tritontags[tindex].ti_Data := longint(ttext);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+END;
+
+PROCEDURE ButtonR(ttext : STRING ; gadid : longint);
+BEGIN
+    ButtonR(pas2c(ttext),gadid);
+END;
+
+PROCEDURE ButtonR(ttext : PChar ; gadid : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TROB_Button;
+    tritontags[tindex].ti_Data := longint(0);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Text;
+    tritontags[tindex].ti_Data := longint(ttext);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Flags;
+    tritontags[tindex].ti_Data := TRBU_RETURNOK;
+    Inc(tindex);
+END;
+
+PROCEDURE ButtonE(ttext : STRING ;gadid : longint);
+BEGIN
+    ButtonE(pas2c(ttext),gadid);
+END;
+
+PROCEDURE ButtonE(ttext : PChar ;gadid : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TROB_Button;
+    tritontags[tindex].ti_Data := longint(0);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Text;
+    tritontags[tindex].ti_Data := longint(ttext);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Flags;
+    tritontags[tindex].ti_Data := TRBU_ESCOK;
+    Inc(tindex);
+END;
+
+PROCEDURE ButtonRE(ttext : STRING ;gadid : longint);
+BEGIN
+    ButtonRE(pas2c(ttext),gadid);
+END;
+
+PROCEDURE ButtonRE(ttext : PChar ;gadid : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TROB_Button;
+    tritontags[tindex].ti_Data := longint(0);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Text;
+    tritontags[tindex].ti_Data := longint(ttext);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Flags;
+    tritontags[tindex].ti_Data := (TRBU_RETURNOK OR TRBU_ESCOK);
+    Inc(tindex);
+END;
+
+PROCEDURE CenteredButton(t : STRING;i : longint);
+BEGIN
+    CenteredButton(pas2c(t),i);
+END;
+
+PROCEDURE CenteredButton(t : PChar;i : longint);
+BEGIN
+    HorizGroupSC; Space;
+    tritontags[tindex].ti_Tag := TROB_Button;
+    tritontags[tindex].ti_Data := longint(0);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Text;
+    tritontags[tindex].ti_Data := longint(t);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(i);
+    Inc(tindex);
+    Space; EndGroup;
+END;
+
+PROCEDURE CenteredButtonR(t : STRING ;i : longint);
+BEGIN
+    CenteredButtonR(pas2c(t),i);
+END;
+
+PROCEDURE CenteredButtonR(t : PChar ;i : longint);
+BEGIN
+    HorizGroupSC; Space;
+    tritontags[tindex].ti_Tag := TROB_Button;
+    tritontags[tindex].ti_Data := longint(0);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Flags;
+    tritontags[tindex].ti_Data := TRBU_RETURNOK;
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Text;
+    tritontags[tindex].ti_Data := longint(t);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(i);
+    Inc(tindex);
+    Space; EndGroup;
+END;
+
+PROCEDURE CenteredButtonE(t : STRING;i : longint);
+BEGIN
+    CenteredButtonE(pas2c(t),i);
+END;
+
+PROCEDURE CenteredButtonE(t : PChar;i : longint);
+BEGIN
+    HorizGroupSC; Space;
+    tritontags[tindex].ti_Tag := TROB_Button;
+    tritontags[tindex].ti_Data := longint(0);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Flags;
+    tritontags[tindex].ti_Data := TRBU_ESCOK;
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Text;
+    tritontags[tindex].ti_Data := longint(t);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(i);
+    Inc(tindex);
+    Space; EndGroup;
+END;
+
+PROCEDURE CenteredButtonRE(t : STRING ;i : longint);
+BEGIN
+    CenteredButtonRE(pas2c(t),i);
+END;
+
+PROCEDURE CenteredButtonRE(t : PChar ;i : longint);
+BEGIN
+    HorizGroupSC; Space;
+    tritontags[tindex].ti_Tag := TROB_Button;
+    tritontags[tindex].ti_Data := longint(0);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Flags;
+    tritontags[tindex].ti_Data := (TRBU_RETURNOK OR TRBU_ESCOK);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Text;
+    tritontags[tindex].ti_Data := longint(t);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(i);
+    Inc(tindex);
+    Space; EndGroup;
+END;
+
+PROCEDURE EmptyButton(gadid : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TROB_Button;
+    tritontags[tindex].ti_Data := longint(0);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Text;
+    tritontags[tindex].ti_Data := longint(pas2c(''));
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+END;
+
+PROCEDURE GetFileButton(gadid : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TROB_Button;
+    tritontags[tindex].ti_Data := TRBT_GETFILE;
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Text;
+    tritontags[tindex].ti_Data := longint(pas2c(''));
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Flags;
+    tritontags[tindex].ti_Data := TRBU_YRESIZE;
+    Inc(tindex);
+END;
+
+PROCEDURE GetDrawerButton(gadid : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TROB_Button;
+    tritontags[tindex].ti_Data := TRBT_GETDRAWER;
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Text;
+    tritontags[tindex].ti_Data := longint(pas2c(''));
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Flags;
+    tritontags[tindex].ti_Data := TRBU_YRESIZE;
+    Inc(tindex);
+END;
+
+PROCEDURE GetEntryButton(gadid : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TROB_Button;
+    tritontags[tindex].ti_Data := TRBT_GETENTRY;
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Text;
+    tritontags[tindex].ti_Data := longint(pas2c(''));
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Flags;
+    tritontags[tindex].ti_Data := TRBU_YRESIZE;
+    Inc(tindex);
+END;
+
+PROCEDURE GetFileButtonS(s : STRING ;gadid : longint);
+BEGIN
+    GetFileButtonS(pas2c(s),gadid);
+END;
+
+PROCEDURE GetFileButtonS(s : PChar ;gadid : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TROB_Button;
+    tritontags[tindex].ti_Data := TRBT_GETFILE;
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Text;
+    tritontags[tindex].ti_Data := longint(s);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Flags;
+    tritontags[tindex].ti_Data := TRBU_YRESIZE;
+    Inc(tindex);
+END;
+
+PROCEDURE GetDrawerButtonS(s : STRING;gadid : longint);
+BEGIN
+    GetDrawerButtonS(pas2c(s),gadid);
+END;
+
+PROCEDURE GetDrawerButtonS(s : PChar;gadid : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TROB_Button;
+    tritontags[tindex].ti_Data := TRBT_GETDRAWER;
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Text;
+    tritontags[tindex].ti_Data := longint(s);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Flags;
+    tritontags[tindex].ti_Data := TRBU_YRESIZE;
+    Inc(tindex);
+END;
+
+PROCEDURE GetEntryButtonS(s : STRING ;gadid : longint);
+BEGIN
+    GetEntryButtonS(pas2c(s),gadid);
+END;
+
+PROCEDURE GetEntryButtonS(s : PChar ;gadid : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TROB_Button;
+    tritontags[tindex].ti_Data := TRBT_GETENTRY;
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Text;
+    tritontags[tindex].ti_Data := longint(s);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Flags;
+    tritontags[tindex].ti_Data := TRBU_YRESIZE;
+    Inc(tindex);
+END;
+
+{ Line }
+PROCEDURE Line(flags : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TROB_Line;
+    tritontags[tindex].ti_Data := longint(flags);
+    Inc(tindex);
+END;
+
+PROCEDURE HorizSeparator;
+BEGIN
+    HorizGroupEC; Space; Line(TROF_HORIZ); Space; EndGroup;
+end;
+
+PROCEDURE VertSeparator;
+BEGIN
+    VertGroupEC; Space; Line(TROF_VERT); Space; EndGroup;
+end;
+
+PROCEDURE NamedSeparator(ttext : STRING);
+BEGIN
+    NamedSeparator(pas2c(ttext));
+END;
+
+PROCEDURE NamedSeparator(ttext : PChar);
+BEGIN
+    HorizGroupEC; Space; Line(TROF_HORIZ); Space; TextT(ttext);
+    Space; Line(TROF_HORIZ); Space; EndGroup;
+END;
+
+PROCEDURE NamedSeparatorI(te : STRING ;gadid : longint);
+BEGIN
+    NamedSeparatorI(pas2c(te),gadid);
+END;
+
+PROCEDURE NamedSeparatorI(te : PChar ;gadid : longint);
+BEGIN
+    HorizGroupEC; Space; Line(TROF_HORIZ); Space; TextT(te);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+    Space; Line(TROF_HORIZ); Space; EndGroup;
+END;
+
+PROCEDURE NamedSeparatorN(ttext : STRING);
+BEGIN
+    NamedSeparator(pas2c(ttext));
+END;
+
+PROCEDURE NamedSeparatorN(ttext : PChar);
+BEGIN
+    HorizGroupEC; Line(TROF_HORIZ); Space; TextT(ttext); Space; Line(TROF_HORIZ); 
+EndGroup;
+END;
+
+PROCEDURE NamedSeparatorIN(te : STRING ;gadid : longint);
+BEGIN
+    NamedSeparatorIN(pas2c(te),gadid);
+END;
+
+PROCEDURE NamedSeparatorIN(te : PChar ;gadid : longint);
+BEGIN
+    HorizGroupEC; Line(TROF_HORIZ); Space; TextT(te);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+    Space; Line(TROF_HORIZ); EndGroup;
+END;
+
+{ FrameBox }
+PROCEDURE GroupBox;
+begin
+    tritontags[tindex].ti_Tag := TROB_FrameBox;
+    tritontags[tindex].ti_Data := TRFB_GROUPING;
+    Inc(tindex);
+END;
+
+PROCEDURE NamedFrameBox(t : STRING);
+BEGIN
+    NamedFrameBox(pas2c(t));
+END;
+
+PROCEDURE NamedFrameBox(t : PChar);
+BEGIN
+    tritontags[tindex].ti_Tag := TROB_FrameBox;
+    tritontags[tindex].ti_Data := TRFB_FRAMING;
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Text;
+    tritontags[tindex].ti_Data := longint(t);
+    Inc(tindex);
+END;
+
+PROCEDURE TTextBox;
+begin
+    tritontags[tindex].ti_Tag := TROB_FrameBox;
+    tritontags[tindex].ti_Data := TRFB_TEXT;
+    Inc(tindex);
+END;
+
+{ DropBox }
+PROCEDURE DropBox(gadid : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TROB_DropBox;
+    tritontags[tindex].ti_Data := longint(0);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+END;
+
+{ CheckBox gadget }
+PROCEDURE CheckBox(gadid : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TROB_CheckBox;
+    tritontags[tindex].ti_Data := longint(0);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+END;
+
+PROCEDURE CheckBoxV(value : longint; gadid : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TROB_CheckBox;
+    tritontags[tindex].ti_Data := longint(0);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Value;
+    tritontags[tindex].ti_Data := longint(value);
+    Inc(tindex);
+END;
+
+PROCEDURE CheckBoxC(gadid : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TROB_CheckBox;
+    tritontags[tindex].ti_Data := longint(0);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Value;
+    tritontags[tindex].ti_Data := longint(1);
+    Inc(tindex);
+END;
+
+PROCEDURE CheckBoxLEFT(gadid : longint);
+BEGIN
+    HorizGroupS; CheckBox(gadid); Space; EndGroup;
+END;
+
+PROCEDURE CheckBoxCLEFT(gadid : longint);
+BEGIN
+    HorizGroupS; CheckBoxC(gadid); Space; EndGroup;
+END;
+
+{ String gadget }
+PROCEDURE StringGadget(def : STRING;gadid : longint);
+BEGIN
+    StringGadget(pas2c(def),gadid);
+END;
+
+PROCEDURE StringGadget(def : PChar;gadid : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TROB_String;
+    tritontags[tindex].ti_Data := longint(def);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+END;
+
+PROCEDURE StringGadgetNR(def : STRING ;gadid : longint);
+BEGIN
+    StringGadgetNR(pas2c(def),gadid);
+END;
+
+PROCEDURE StringGadgetNR(def : PChar ;gadid : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TROB_String;
+    tritontags[tindex].ti_Data := longint(def);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Flags;
+    tritontags[tindex].ti_Data := TRST_NORETURNBROADCAST;
+    Inc(tindex);
+END;
+
+PROCEDURE PasswordGadget(def : STRING ;gadid : longint);
+BEGIN
+    PassWordGadget(pas2c(def),gadid);
+END;
+
+PROCEDURE PasswordGadget(def : PChar ;gadid : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TROB_String;
+    tritontags[tindex].ti_Data := longint(def);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Flags;
+    tritontags[tindex].ti_Data := TRST_INVISIBLE;
+    Inc(tindex);
+END;
+
+{ Cycle gadget }
+PROCEDURE CycleGadget(ent : Pointer ; val,gadid : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TROB_Cycle;
+    tritontags[tindex].ti_Data := longint(ent);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Value;
+    tritontags[tindex].ti_Data := longint(val);
+    Inc(tindex);
+END;
+
+PROCEDURE MXGadget(ent : Pointer ; val,gadid : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TROB_Cycle;
+    tritontags[tindex].ti_Data := longint(ent);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Value;
+    tritontags[tindex].ti_Data := longint(val);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Flags;
+    tritontags[tindex].ti_Data := TRCY_MX;
+    Inc(tindex);
+END;
+
+PROCEDURE MXGadgetR(ent : Pointer; val,gadid : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TROB_Cycle;
+    tritontags[tindex].ti_Data := longint(ent);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Value;
+    tritontags[tindex].ti_Data := longint(val);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Flags;
+    tritontags[tindex].ti_Data := (TRCY_MX OR TRCY_RIGHTLABELS);
+    Inc(tindex);
+END;
+
+{ Slider gadget }
+PROCEDURE SliderGadget(mini,maxi,val,gadid : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TROB_Slider;
+    tritontags[tindex].ti_Data := longint(0);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRSL_Min;
+    tritontags[tindex].ti_Data := longint(mini);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRSL_Max;
+    tritontags[tindex].ti_Data := longint(maxi);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Value;
+    tritontags[tindex].ti_Data := longint(val);
+    Inc(tindex);
+END;
+
+PROCEDURE SliderGadgetV(mini,maxi,val,gadid : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TROB_Slider;
+    tritontags[tindex].ti_Data := TROF_VERT;
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRSL_Min;
+    tritontags[tindex].ti_Data := longint(mini);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRSL_Max;
+    tritontags[tindex].ti_Data := longint(maxi);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Value;
+    tritontags[tindex].ti_Data := longint(val);
+    Inc(tindex);
+END;
+
+{ Scroller gadget }
+PROCEDURE ScrollerGadget(total,visible,val,id : longint);
+begin
+    tritontags[tindex].ti_Tag := TROB_Scroller;
+    tritontags[tindex].ti_Data := TROF_HORIZ;
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRSC_Total;
+    tritontags[tindex].ti_Data := longint(total);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRSC_Visible;
+    tritontags[tindex].ti_Data := longint(visible);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(id);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Value;
+    tritontags[tindex].ti_Data := longint(val);
+    Inc(tindex);
+end;
+
+PROCEDURE ScrollerGadgetV(total,visible,val,id : longint);
+begin
+    tritontags[tindex].ti_Tag := TROB_Scroller;
+    tritontags[tindex].ti_Data := TROF_VERT;
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRSC_Total;
+    tritontags[tindex].ti_Data := longint(total);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRSC_Visible;
+    tritontags[tindex].ti_Data := longint(visible);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(id);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Value;
+    tritontags[tindex].ti_Data := longint(val);
+    Inc(tindex);
+end;
+
+{ Palette gadget }
+PROCEDURE PaletteGadget(val,gadid : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TROB_Palette;
+    tritontags[tindex].ti_Data := longint(0);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Value;
+    tritontags[tindex].ti_Data := longint(val);
+    Inc(tindex);
+END;
+
+{ Listview gadget }
+PROCEDURE ListRO(ent : Pointer;gadid,top : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TROB_Listview;
+    tritontags[tindex].ti_Data := longint(ent);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Flags;
+    tritontags[tindex].ti_Data := (TRLV_NOGAP OR TRLV_READONLY);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Value;
+    tritontags[tindex].ti_Data := longint(0);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRLV_Top;
+    tritontags[tindex].ti_Data := longint(top);
+    Inc(tindex);
+END;
+
+PROCEDURE ListSel(ent : Pointer ;gadid,top : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TROB_Listview;
+    tritontags[tindex].ti_Data := longint(ent);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Flags;
+    tritontags[tindex].ti_Data := (TRLV_NOGAP OR TRLV_SELECT);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Value;
+    tritontags[tindex].ti_Data := longint(0);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRLV_Top;
+    tritontags[tindex].ti_Data := longint(top);
+    Inc(tindex);
+END;
+
+PROCEDURE ListSS(e : Pointer ;gadid,top,v : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TROB_Listview;
+    tritontags[tindex].ti_Data := longint(e);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Flags;
+    tritontags[tindex].ti_Data := (TRLV_NOGAP OR TRLV_SHOWSELECTED);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Value;
+    tritontags[tindex].ti_Data := longint(v);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRLV_Top;
+    tritontags[tindex].ti_Data := longint(top);
+    Inc(tindex);
+END;
+
+PROCEDURE ListSSM(e : Pointer ;gadid,top,v,min : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TROB_Listview;
+    tritontags[tindex].ti_Data := longint(e);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Flags;
+    tritontags[tindex].ti_Data := (TRLV_NOGAP OR TRLV_SHOWSELECTED);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Value;
+    tritontags[tindex].ti_Data := longint(v);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_MinWidth;
+    tritontags[tindex].ti_Data := longint(min);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRLV_Top;
+    tritontags[tindex].ti_Data := longint(top);
+    Inc(tindex);
+END;
+
+PROCEDURE ListROC(ent : Pointer;gadid,top : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TROB_Listview;
+    tritontags[tindex].ti_Data := longint(ent);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Flags;
+    tritontags[tindex].ti_Data := (TRLV_NOGAP OR TRLV_READONLY OR TRLV_NOCURSORKEYS);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Value;
+    tritontags[tindex].ti_Data := longint(0);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRLV_Top;
+    tritontags[tindex].ti_Data := longint(top);
+    Inc(tindex);
+END;
+
+PROCEDURE ListSelC(ent : Pointer;gadid,top : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TROB_Listview;
+    tritontags[tindex].ti_Data := longint(ent);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Flags;
+    tritontags[tindex].ti_Data := (TRLV_NOGAP OR TRLV_SELECT OR TRLV_NOCURSORKEYS);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Value;
+    tritontags[tindex].ti_Data := longint(0);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRLV_Top;
+    tritontags[tindex].ti_Data := longint(top);
+    Inc(tindex);
+END;
+
+PROCEDURE ListSSC(e : Pointer;gadid,top,v : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TROB_Listview;
+    tritontags[tindex].ti_Data := longint(e);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Flags;
+    tritontags[tindex].ti_Data := (TRLV_NOGAP OR TRLV_SHOWSELECTED OR 
+TRLV_NOCURSORKEYS);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Value;
+    tritontags[tindex].ti_Data := longint(v);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRLV_Top;
+    tritontags[tindex].ti_Data := longint(top);
+    Inc(tindex);
+END;
+
+PROCEDURE ListRON(ent : Pointer ;gadid,top : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TROB_Listview;
+    tritontags[tindex].ti_Data := longint(ent);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Flags;
+    tritontags[tindex].ti_Data := (TRLV_NOGAP OR TRLV_READONLY OR TRLV_NONUMPADKEYS);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Value;
+    tritontags[tindex].ti_Data := longint(0);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRLV_Top;
+    tritontags[tindex].ti_Data := longint(top);
+    Inc(tindex);
+END;
+
+PROCEDURE ListSelN(ent : Pointer;gadid,top : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TROB_Listview;
+    tritontags[tindex].ti_Data := longint(ent);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Flags;
+    tritontags[tindex].ti_Data := (TRLV_NOGAP OR TRLV_SELECT OR TRLV_NONUMPADKEYS);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Value;
+    tritontags[tindex].ti_Data := longint(0);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRLV_Top;
+    tritontags[tindex].ti_Data := longint(top);
+    Inc(tindex);
+END;
+
+PROCEDURE ListSSN(e : Pointer;gadid,top,v : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TROB_Listview;
+    tritontags[tindex].ti_Data := longint(e);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Flags;
+    tritontags[tindex].ti_Data := (TRLV_NOGAP OR TRLV_SHOWSELECTED OR 
+TRLV_NONUMPADKEYS);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Value;
+    tritontags[tindex].ti_Data := longint(v);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRLV_Top;
+    tritontags[tindex].ti_Data := longint(top);
+    Inc(tindex);
+END;
+
+PROCEDURE ListROCN(ent : Pointer;gadid,top : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TROB_Listview;
+    tritontags[tindex].ti_Data := longint(ent);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Flags;
+    tritontags[tindex].ti_Data := (TRLV_NOGAP OR TRLV_READONLY OR TRLV_NOCURSORKEYS OR 
+TRLV_NONUMPADKEYS);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Value;
+    tritontags[tindex].ti_Data := longint(0);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRLV_Top;
+    tritontags[tindex].ti_Data := longint(top);
+    Inc(tindex);
+END;
+
+PROCEDURE ListSelCN(ent : Pointer;gadid,top : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TROB_Listview;
+    tritontags[tindex].ti_Data := longint(ent);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Flags;
+    tritontags[tindex].ti_Data := (TRLV_NOGAP OR TRLV_SELECT OR TRLV_NOCURSORKEYS OR 
+TRLV_NONUMPADKEYS);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Value;
+    tritontags[tindex].ti_Data := longint(0);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRLV_Top;
+    tritontags[tindex].ti_Data := longint(top);
+    Inc(tindex);
+END;
+
+PROCEDURE ListSSCN(e : Pointer;gadid,top,v : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TROB_Listview;
+    tritontags[tindex].ti_Data := longint(e);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Flags;
+    tritontags[tindex].ti_Data := (TRLV_NOGAP OR TRLV_SHOWSELECTED OR 
+TRLV_NOCURSORKEYS OR TRLV_NONUMPADKEYS);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Value;
+    tritontags[tindex].ti_Data := longint(v);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRLV_Top;
+    tritontags[tindex].ti_Data := longint(top);
+    Inc(tindex);
+END;
+
+PROCEDURE FWListRO(ent : Pointer;gadid,top : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TROB_Listview;
+    tritontags[tindex].ti_Data := longint(ent);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Flags;
+    tritontags[tindex].ti_Data := (TRLV_NOGAP OR TRLV_FWFONT OR TRLV_READONLY);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Value;
+    tritontags[tindex].ti_Data := longint(0);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRLV_Top;
+    tritontags[tindex].ti_Data := longint(top);
+    Inc(tindex);
+END;
+
+PROCEDURE FWListSel(ent : Pointer;gadid,top : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TROB_Listview;
+    tritontags[tindex].ti_Data := longint(ent);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Flags;
+    tritontags[tindex].ti_Data := (TRLV_NOGAP OR TRLV_FWFONT OR TRLV_SELECT);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Value;
+    tritontags[tindex].ti_Data := longint(0);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRLV_Top;
+    tritontags[tindex].ti_Data := longint(top);
+    Inc(tindex);
+END;
+
+PROCEDURE FWListSS(e : Pointer;gadid,top,v : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TROB_Listview;
+    tritontags[tindex].ti_Data := longint(e);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Flags;
+    tritontags[tindex].ti_Data := (TRLV_NOGAP OR TRLV_FWFONT OR TRLV_SHOWSELECTED);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Value;
+    tritontags[tindex].ti_Data := longint(v);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRLV_Top;
+    tritontags[tindex].ti_Data := longint(top);
+    Inc(tindex);
+END;
+
+PROCEDURE FWListROC(ent : Pointer;gadid,top : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TROB_Listview;
+    tritontags[tindex].ti_Data := longint(ent);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Flags;
+    tritontags[tindex].ti_Data := (TRLV_NOGAP OR TRLV_FWFONT OR TRLV_READONLY OR 
+TRLV_NOCURSORKEYS);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Value;
+    tritontags[tindex].ti_Data := longint(0);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRLV_Top;
+    tritontags[tindex].ti_Data := longint(top);
+    Inc(tindex);
+END;
+
+PROCEDURE FWListSelC(ent : Pointer;gadid,top : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TROB_Listview;
+    tritontags[tindex].ti_Data := longint(ent);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Flags;
+    tritontags[tindex].ti_Data := (TRLV_NOGAP OR TRLV_FWFONT OR TRLV_SELECT OR 
+TRLV_NOCURSORKEYS);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Value;
+    tritontags[tindex].ti_Data := longint(0);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRLV_Top;
+    tritontags[tindex].ti_Data := longint(top);
+    Inc(tindex);
+END;
+
+PROCEDURE FWListSSC(e : Pointer;gadid,top,v : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TROB_Listview;
+    tritontags[tindex].ti_Data := longint(e);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Flags;
+    tritontags[tindex].ti_Data := (TRLV_NOGAP OR TRLV_FWFONT OR TRLV_SHOWSELECTED OR 
+TRLV_NOCURSORKEYS);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Value;
+    tritontags[tindex].ti_Data := longint(v);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRLV_Top;
+    tritontags[tindex].ti_Data := longint(top);
+    Inc(tindex);
+END;
+
+PROCEDURE FWListRON(ent : Pointer;gadid,top : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TROB_Listview;
+    tritontags[tindex].ti_Data := longint(ent);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Flags;
+    tritontags[tindex].ti_Data := (TRLV_NOGAP OR TRLV_FWFONT OR TRLV_READONLY OR 
+TRLV_NONUMPADKEYS);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Value;
+    tritontags[tindex].ti_Data := longint(0);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRLV_Top;
+    tritontags[tindex].ti_Data := longint(top);
+    Inc(tindex);
+END;
+
+PROCEDURE FWListSelN(ent : Pointer;gadid,top : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TROB_Listview;
+    tritontags[tindex].ti_Data := longint(ent);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Flags;
+    tritontags[tindex].ti_Data := (TRLV_NOGAP OR TRLV_FWFONT OR TRLV_SELECT OR 
+TRLV_NONUMPADKEYS);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Value;
+    tritontags[tindex].ti_Data := longint(0);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRLV_Top;
+    tritontags[tindex].ti_Data := longint(top);
+    Inc(tindex);
+END;
+
+PROCEDURE FWListSSN(e : Pointer;gadid,top,v : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TROB_Listview;
+    tritontags[tindex].ti_Data := longint(e);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Flags;
+    tritontags[tindex].ti_Data := (TRLV_NOGAP OR TRLV_FWFONT OR TRLV_SHOWSELECTED OR 
+TRLV_NONUMPADKEYS);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Value;
+    tritontags[tindex].ti_Data := longint(v);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRLV_Top;
+    tritontags[tindex].ti_Data := longint(top);
+    Inc(tindex);
+END;
+
+PROCEDURE FWListROCN(ent : Pointer;gadid,top : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TROB_Listview;
+    tritontags[tindex].ti_Data := longint(ent);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Flags;
+    tritontags[tindex].ti_Data := (TRLV_NOGAP OR TRLV_FWFONT OR TRLV_READONLY OR 
+TRLV_NOCURSORKEYS OR TRLV_NONUMPADKEYS);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Value;
+    tritontags[tindex].ti_Data := longint(0);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRLV_Top;
+    tritontags[tindex].ti_Data := longint(top);
+    Inc(tindex);
+END;
+
+PROCEDURE FWListSelCN(ent : Pointer;gadid,top : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TROB_Listview;
+    tritontags[tindex].ti_Data := longint(ent);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Flags;
+    tritontags[tindex].ti_Data := (TRLV_NOGAP OR TRLV_FWFONT OR TRLV_SELECT OR 
+TRLV_NOCURSORKEYS OR TRLV_NONUMPADKEYS);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Value;
+    tritontags[tindex].ti_Data := longint(0);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRLV_Top;
+    tritontags[tindex].ti_Data := longint(top);
+    Inc(tindex);
+END;
+
+PROCEDURE FWListSSCN(e : Pointer;gadid,top,v : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TROB_Listview;
+    tritontags[tindex].ti_Data := longint(e);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Flags;
+    tritontags[tindex].ti_Data := (TRLV_NOGAP OR TRLV_FWFONT OR TRLV_SHOWSELECTED OR 
+TRLV_NOCURSORKEYS OR TRLV_NONUMPADKEYS);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Value;
+    tritontags[tindex].ti_Data := longint(v);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRLV_Top;
+    tritontags[tindex].ti_Data := longint(top);
+    Inc(tindex);
+END;
+
+{ Progress indicator }
+PROCEDURE Progress(maxi,value,gadid : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TROB_Progress;
+    tritontags[tindex].ti_Data := longint(maxi);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Value;
+    tritontags[tindex].ti_Data := longint(value);
+    Inc(tindex);
+END;
+
+{ Image }
+PROCEDURE BoopsiImage(img : Pointer);
+BEGIN
+    tritontags[tindex].ti_Tag := TROB_Image;
+    tritontags[tindex].ti_Data := longint(img);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Flags;
+    tritontags[tindex].ti_Data := TRIM_BOOPSI;
+    Inc(tindex);
+END;
+
+PROCEDURE BoopsiImageD(img : Pointer;mw,mh : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TROB_Image;
+    tritontags[tindex].ti_Data := longint(img);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_MinWidth;
+    tritontags[tindex].ti_Data := longint(mw);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_MinHeight;
+    tritontags[tindex].ti_Data := longint(mh);
+    Inc(tindex);
+    tritontags[tindex].ti_Tag := TRAT_Flags;
+    tritontags[tindex].ti_Data := TRIM_BOOPSI;
+    Inc(tindex);
+END;
+
+{ Attributes }
+PROCEDURE ID(gadid : longint);
+BEGIN
+    tritontags[tindex].ti_Tag := TRAT_ID;
+    tritontags[tindex].ti_Data := longint(gadid);
+    Inc(tindex);
+END;
+
+PROCEDURE Disabled;
+begin
+    tritontags[tindex].ti_Tag := TRAT_Disabled;
+    tritontags[tindex].ti_Data := longint(1);
+    Inc(tindex);
+END;
+
+PROCEDURE ObjectBackfillWin;
+begin
+    tritontags[tindex].ti_Tag := TRAT_Backfill;
+    tritontags[tindex].ti_Data := TRBF_WINDOWBACK;
+    Inc(tindex);
+END;
+
+PROCEDURE ObjectBackfillReq;
+begin
+    tritontags[tindex].ti_Tag := TRAT_Backfill;
+    tritontags[tindex].ti_Data := TRBF_REQUESTERBACK;
+    Inc(tindex);
+END;
+
+PROCEDURE ObjectBackfillB;
+begin
+    tritontags[tindex].ti_Tag := TRAT_Backfill;
+    tritontags[tindex].ti_Data := TRBF_NONE;
+    Inc(tindex);
+END;
+
+PROCEDURE ObjectBackfillS;
+begin
+    tritontags[tindex].ti_Tag := TRAT_Backfill;
+    tritontags[tindex].ti_Data := TRBF_SHINE;
+    Inc(tindex);
+END;
+
+PROCEDURE ObjectBackfillSA;
+begin
+    tritontags[tindex].ti_Tag := TRAT_Backfill;
+    tritontags[tindex].ti_Data := TRBF_SHINE_SHADOW;
+    Inc(tindex);
+END;
+
+PROCEDURE ObjectBackfillSF;
+begin
+    tritontags[tindex].ti_Tag := TRAT_Backfill;
+    tritontags[tindex].ti_Data := TRBF_SHINE_FILL;
+    Inc(tindex);
+END;
+
+PROCEDURE ObjectBackfillSB;
+begin
+    tritontags[tindex].ti_Tag := TRAT_Backfill;
+    tritontags[tindex].ti_Data := TRBF_SHINE_BACKGROUND;
+    Inc(tindex);
+END;
+
+PROCEDURE ObjectBackfillA;
+begin
+    tritontags[tindex].ti_Tag := TRAT_Backfill;
+    tritontags[tindex].ti_Data := TRBF_SHADOW;
+    Inc(tindex);
+END;
+
+PROCEDURE ObjectBackfillAF;
+begin
+    tritontags[tindex].ti_Tag := TRAT_Backfill;
+    tritontags[tindex].ti_Data := TRBF_SHADOW_FILL;
+    Inc(tindex);
+END;
+
+PROCEDURE ObjectBackfillAB;
+begin
+    tritontags[tindex].ti_Tag := TRAT_Backfill;
+    tritontags[tindex].ti_Data := TRBF_SHADOW_BACKGROUND;
+    Inc(tindex);
+END;
+
+PROCEDURE ObjectBackfillF;
+begin
+    tritontags[tindex].ti_Tag := TRAT_Backfill;
+    tritontags[tindex].ti_Data := TRBF_FILL;
+    Inc(tindex);
+END;
+
+PROCEDURE ObjectBackfillFB;
+begin
+    tritontags[tindex].ti_Tag := TRAT_Backfill;
+    tritontags[tindex].ti_Data := TRBF_FILL_BACKGROUND;
+    Inc(tindex);
+END;
+
+{ Requester support }
+PROCEDURE BeginRequester(t : STRING; p : longint);
+BEGIN
+    BeginRequester(pas2c(t),p);
+END;
+
+PROCEDURE BeginRequester(t : PChar; p : longint);
+BEGIN
+    WindowTitle(t);WindowPosition(p);WindowBackfillReq;
+    WindowFlags(TRWF_NOZIPGADGET OR TRWF_NOSIZEGADGET OR TRWF_NOCLOSEGADGET OR 
+TRWF_NODELZIP OR TRWF_NOESCCLOSE);
+    VertGroupA; Space; HorizGroupA; Space; GroupBox; ObjectBackfillB;
+END;
+
+PROCEDURE BeginRequesterGads;
+BEGIN
+    Space; EndGroup; Space;
+END;
+
+PROCEDURE EndRequester;
+BEGIN
+    Space; EndGroup; EndProject;
+END;
+
+PROCEDURE SetTRTag( thetag, thedata : longint);
+begin
+    tritontags[tindex].ti_Tag := thetag;
+    tritontags[tindex].ti_Data := longint(thedata);
+    Inc(tindex);
+end;
+
+PROCEDURE SetTRTag( thetag : longint; thedata : string);
+begin
+    tritontags[tindex].ti_Tag := thetag;
+    tritontags[tindex].ti_Data := longint(pas2c(thedata));
+    Inc(tindex);
+end;
+PROCEDURE SetTRTag( thetag : longint; thedata : pchar);
+begin
+    tritontags[tindex].ti_Tag := thetag;
+    tritontags[tindex].ti_Data := longint(thedata);
+    Inc(tindex);
+end;
+PROCEDURE SetTRTag( thetag : longint; thedata : boolean);
+begin
+    tritontags[tindex].ti_Tag := thetag;
+    tritontags[tindex].ti_Data := longint(byte(thedata));
+    Inc(tindex);
+end;
+
+PROCEDURE SetTRTag( thetag : longint; thedata : pointer);
+begin
+    tritontags[tindex].ti_Tag := thetag;
+    tritontags[tindex].ti_Data := longint(thedata);
+    Inc(tindex);
+end;
+
+end.
+
+{
+  $Log
+}
+
+
+
+
+

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