home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 9 / FreshFishVol9-CD1.bin / useful / dev / obero / oberon-a / source / amiga / workbench.mod < prev   
Encoding:
Text File  |  1995-01-26  |  9.0 KB  |  311 lines

  1. (**************************************************************************
  2.  
  3.      $RCSfile: Workbench.mod $
  4.   Description: Interface to workbench.library
  5.  
  6.    Created by: fjc (Frank Copeland)
  7.     $Revision: 3.7 $
  8.       $Author: fjc $
  9.         $Date: 1995/01/26 02:39:55 $
  10.  
  11.   Includes Release 40.15
  12.  
  13.   (C) Copyright 1985-1993 Commodore-Amiga, Inc.
  14.       All Rights Reserved
  15.  
  16.   Oberon-A interface Copyright © 1994-1995, Frank Copeland.
  17.   This file is part of the Oberon-A Interface.
  18.   See Oberon-A.doc for conditions of use and distribution.
  19.  
  20. ***************************************************************************)
  21.  
  22. <* STANDARD- *> <* INITIALISE- *> <* MAIN- *>
  23. <*$ CaseChk-  IndexChk- LongVars+ NilChk-  *>
  24. <*$ RangeChk- StackChk- TypeChk-  OvflChk- *>
  25.  
  26. MODULE [2] Workbench;
  27.  
  28. IMPORT
  29.   SYS := SYSTEM, Kernel, e := Exec, u := Utility, d := Dos, i := Intuition,
  30.   s := Sets;
  31.  
  32.  
  33. (* Pointers are declared first for convenience *)
  34.  
  35. TYPE
  36.  
  37.   OldDrawerDataPtr * = POINTER TO OldDrawerData;
  38.   DrawerDataPtr *    = POINTER TO DrawerData;
  39.   DiskObjectPtr *    = POINTER TO DiskObject;
  40.   FreeListPtr *      = POINTER TO FreeList;
  41.   AppMessagePtr *    = POINTER TO AppMessage;
  42.   WBStartupPtr *     = POINTER TO WBStartup;
  43.   WBArgPtr *         = POINTER TO WBArg;
  44.   AppWindowPtr *     = POINTER TO AppWindow;
  45.   AppIconPtr *       = POINTER TO AppIcon;
  46.   AppMenuItemPtr *   = POINTER TO AppMenuItem;
  47.  
  48.  
  49. (*
  50. **      $VER: startup.h 36.3 (11.7.90)
  51. **
  52. **      workbench startup definitions
  53. *)
  54.  
  55.  
  56. TYPE
  57.  
  58.   WBArg * = RECORD
  59.     lock * : d.FileLockPtr;      (* a lock descriptor *)
  60.     name * : e.LSTRPTR;          (* a string relative to that lock *)
  61.   END; (* WBArg *)
  62.  
  63.   WBArguments * = ARRAY MAX(INTEGER) OF WBArg;
  64.   WBArgumentsPtr * = POINTER TO WBArguments;
  65.  
  66.   WBStartup * = RECORD (e.MessageBase)
  67.     message *    : e.Message;      (* a standard message structure *)
  68.     process *    : d.ProcessId;    (* the process descriptor for you *)
  69.     segment *    : e.BPTR;         (* a descriptor for your code *)
  70.     numArgs *    : LONGINT;        (* the number of elements in ArgList *)
  71.     toolWindow * : e.LSTRPTR;      (* description of window *)
  72.     argList *    : WBArgumentsPtr; (* the arguments themselves *)
  73.   END; (* WBStartup *)
  74.  
  75.  
  76. (*
  77. **      $VER: workbench.h 40.1 (26.8.93)
  78. **
  79. **      workbench.library general definitions
  80. *)
  81.  
  82. CONST
  83.  
  84.   disk *      = 1;
  85.   drawer *    = 2;
  86.   tool *      = 3;
  87.   project *   = 4;
  88.   garbage *   = 5;
  89.   device *    = 6;
  90.   kick *      = 7;
  91.   wbAppIcon * = 8;
  92.  
  93. TYPE
  94.  
  95.   OldDrawerData * = RECORD (i.NewWindowBase) (* pre V36 definition *)
  96.     newWindow * : i.NewWindow; (* args to open window *)
  97.     currentX *  : LONGINT;     (* current x coordinate of origin *)
  98.     currentY *  : LONGINT;     (* current y coordinate of origin *)
  99.   END; (* OldDrawerData *)
  100.  
  101. CONST
  102.  
  103. (* the amount of DrawerData actually written to disk *)
  104.   oldDrawerDataFileSize * = SIZE (OldDrawerData);
  105.  
  106. TYPE
  107.  
  108.   DrawerData * = RECORD (i.NewWindowBase)
  109.     newWindow * : i.NewWindow; (* args to open window *)
  110.     currentX *  : LONGINT;     (* current x coordinate of origin *)
  111.     currentY *  : LONGINT;     (* current y coordinate of origin *)
  112.     flags *     : s.SET32;     (* flags for drawer *)
  113.     viewModes * : s.SET16;     (* view mode for drawer *)
  114.   END; (* DrawerData *)
  115.  
  116. CONST
  117.  
  118. (* the amount of DrawerData actually written to disk *)
  119.   drawerDataFileSize * = SIZE (DrawerData);
  120.  
  121. TYPE
  122.  
  123.   ToolTypePtr * = POINTER TO ARRAY MAX(INTEGER) OF e.LSTRPTR;
  124.  
  125.   DiskObject * = RECORD
  126.     magic *       : e.UWORD;  (* a magic number at the start of the file *)
  127.     version *     : e.UWORD;  (* a version number, so we can change it *)
  128.     gadget *      : i.Gadget; (* a copy of in core gadget *)
  129.     type *        : SHORTINT;
  130.     defaultTool * : e.LSTRPTR;
  131.     toolTypes *   : ToolTypePtr;
  132.     currentX *    : LONGINT;
  133.     currentY *    : LONGINT;
  134.     drawerData *  : DrawerDataPtr;
  135.     toolWindow *  : e.LSTRPTR; (* only applies to tools *)
  136.     stackSize *   : LONGINT;  (* only applies to tools *)
  137.   END; (* DiskObject *)
  138.  
  139. CONST
  140.  
  141.   diskMagic *    = -1CF0H;  (*0E310H*) (* a magic number, not easily impersonated *)
  142.   diskVersion *  = 1;       (* our current version number *)
  143.   diskRevision * = 1;       (* our current revision number *)
  144. (* I only use the lower 8 bits of Gadget.UserData for the revision # *)
  145.   diskRevisionMask * = 0FFH;
  146.  
  147. TYPE
  148.  
  149.   FreeList * = RECORD
  150.     numFree * : INTEGER;
  151.     memList * : e.List;
  152.   END; (* FreeList *)
  153.  
  154. CONST
  155.  
  156. (* workbench does different complement modes for its gadgets.
  157. ** It supports separate images, complement mode, and backfill mode.
  158. ** The first two are identical to intuitions GADGIMAGE and GADGHCOMP.
  159. ** backfill is similar to GADGHCOMP, but the region outside of the
  160. ** image (which normally would be color three when complemented)
  161. ** is flood-filled to color zero.
  162. *)
  163.   gadgBackFill * = {0};
  164.  
  165. (* if an icon does not really live anywhere, set its current position
  166. ** to here
  167. *)
  168.   noIconPosition * = 80000000H;
  169.  
  170. (* workbench now is a library.  this is it's name *)
  171.   workbenchName * = "workbench.library";
  172.  
  173. (* If you find amVersion >= amVERSION, you know this structure has
  174.  * at least the fields defined in this version of the include file
  175.  *)
  176.   amVersion * = 1;
  177.  
  178. TYPE
  179.  
  180.   AppMessage * = RECORD (e.MessageBase)
  181.     message *  : e.Message;          (* standard message structure *)
  182.     type *     : e.UWORD;            (* message type *)
  183.     userData * : LONGINT;            (* application specific *)
  184.     id *       : e.ULONG;            (* application definable ID *)
  185.     numArgs *  : LONGINT;            (* # of elements in arglist *)
  186.     argList *  : WBArgumentsPtr;     (* the arguements themselves *)
  187.     version *  : e.UWORD;            (* will be amVERSION *)
  188.     class *    : s.SET16;            (* message class *)
  189.     mouseX *   : INTEGER;            (* mouse x position of event *)
  190.     mouseY *   : INTEGER;            (* mouse y position of event *)
  191.     seconds *  : e.ULONG;            (* current system clock time *)
  192.     micros *   : e.ULONG;            (* current system clock time *)
  193.     reserved * : ARRAY 8 OF e.ULONG; (* avoid recompilation *)
  194.   END; (* AppMessage *)
  195.  
  196. CONST
  197.  
  198. (* types of app messages *)
  199.   appWindow *   = 7;  (* app window message    *)
  200.   appIcon *     = 8;  (* app icon message      *)
  201.   appMenuItem * = 9;  (* app menu item message *)
  202.  
  203. TYPE
  204.  
  205. (*
  206.  * The following structures are private.  These are just stub
  207.  * structures for code compatibility...
  208.  *)
  209.   AppWindow *   = RECORD END;
  210.   AppIcon *     = RECORD END;
  211.   AppMenuItem * = RECORD END;
  212.  
  213. (*-- Library Base variable --------------------------------------------*)
  214.  
  215. VAR
  216.  
  217.   base *  : e.LibraryPtr;
  218.  
  219.  
  220. (*-- Library Functions ------------------------------------------------*)
  221.  
  222. (*
  223. **      $VER: wb_protos.h 38.4 (31.5.92)
  224. *)
  225.  
  226. (* --- functions in V36 or higher (distributed as Release 2.0) ---*)
  227.  
  228. PROCEDURE StartWorkbench* [base,-42]
  229.   ( flags [0] : s.SET32;
  230.     ptr   [1] : LONGINT)
  231.   : BOOLEAN;
  232. PROCEDURE AddAppWindowA* [base,-48]
  233.   ( id       [0] : e.ULONG;
  234.     userdata [1] : LONGINT;
  235.     window   [8] : i.WindowPtr;
  236.     msgport  [9] : e.MsgPortBasePtr;
  237.     taglist [10] : ARRAY OF u.TagItem )
  238.   : AppWindowPtr;
  239. PROCEDURE AddAppWindow* [base,-48]
  240.   ( id       [0]   : e.ULONG;
  241.     userdata [1]   : LONGINT;
  242.     window   [8]   : i.WindowPtr;
  243.     msgport  [9]   : e.MsgPortBasePtr;
  244.     taglist [10].. : u.Tag )
  245.   : AppWindowPtr;
  246. PROCEDURE RemoveAppWindow* [base,-54]
  247.   ( appWindow [8] : AppWindowPtr )
  248.   : BOOLEAN;
  249. PROCEDURE AddAppIconA* [base,-60]
  250.   ( id       [0] : e.ULONG;
  251.     userdata [1] : LONGINT;
  252.     text     [8] : ARRAY OF CHAR;
  253.     msgport  [9] : e.MsgPortBasePtr;
  254.     lock    [10] : d.FileLockPtr;
  255.     diskobj [11] : DiskObjectPtr;
  256.     taglist [12] : ARRAY OF u.TagItem )
  257.   : AppIconPtr;
  258. PROCEDURE AddAppIcon* [base,-60]
  259.   ( id       [0]  : e.ULONG;
  260.     userdata [1]  : LONGINT;
  261.     text     [8]  : ARRAY OF CHAR;
  262.     msgport  [9]  : e.MsgPortBasePtr;
  263.     lock    [10]  : d.FileLockPtr;
  264.     diskobj [11]  : DiskObjectPtr;
  265.     taglist [12]..: u.Tag )
  266.   : AppIconPtr;
  267. PROCEDURE RemoveAppIcon* [base,-66]
  268.   ( appIcon [8] : AppIconPtr )
  269.   : BOOLEAN;
  270. PROCEDURE AddAppMenuItemA* [base,-72]
  271.   ( id       [0] : e.ULONG;
  272.     userdata [1] : LONGINT;
  273.     text     [8] : ARRAY OF CHAR;
  274.     msgport  [9] : e.MsgPortBasePtr;
  275.     taglist [10] : ARRAY OF u.TagItem )
  276.   : AppMenuItemPtr;
  277. PROCEDURE AddAppMenuItem* [base,-72]
  278.   ( id       [0]   : e.ULONG;
  279.     userdata [1]   : LONGINT;
  280.     text     [8]   : ARRAY OF CHAR;
  281.     msgport  [9]   : e.MsgPortPtr;
  282.     taglist [10].. : u.Tag )
  283.   : AppMenuItemPtr;
  284. PROCEDURE RemoveAppMenuItem* [base,-78]
  285.   ( appMenuItem [8] : AppMenuItemPtr )
  286.   : BOOLEAN;
  287.  
  288. (*--- functions in V39 or higher (Release 3) ---*)
  289.  
  290. PROCEDURE WBInfo* [base,-90]
  291.   ( lock    [8] : d.FileLockPtr;
  292.     name    [9] : ARRAY OF CHAR;
  293.     screen [10] : i.ScreenPtr );
  294.  
  295.  
  296. (*-- Library Base variable --------------------------------------------*)
  297.  
  298. <*$LongVars-*>
  299.  
  300. (*-----------------------------------*)
  301. PROCEDURE* [0] CloseLib (VAR rc : LONGINT);
  302.  
  303. BEGIN (* CloseLib *)
  304.   IF base # NIL THEN e.CloseLibrary (base) END;
  305. END CloseLib;
  306.  
  307. BEGIN
  308.   base := e.OpenLibrary (workbenchName, e.libraryMinimum);
  309.   IF base # NIL THEN Kernel.SetCleanup (CloseLib) END
  310. END Workbench.
  311.