home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / Pascal / HISOFTPASCAL2,0-3.DMS / in.adf / Units / Workbench.pas < prev   
Encoding:
Pascal/Delphi Source File  |  1992-05-20  |  4.2 KB  |  247 lines

  1. unit Workbench;
  2.  
  3. INTERFACE
  4. uses Exec, AmigaDOS, Intuition, Utility;
  5.  
  6.  
  7. type
  8.     pAppWindow = ^tAppWindow;
  9.     tAppWindow = record
  10.         aw_PRIVATE: pointer;
  11.         end;
  12.  
  13.     pWBArg = ^tWBArg;
  14.     tWBArg = record
  15.         wa_Lock: BPTR;
  16.         wa_Name: pshortint;
  17.         end;
  18.  
  19.     pOldDrawerData = ^tOldDrawerData;
  20.     tOldDrawerData = record
  21.         dd_NewWindow: tNewWindow;
  22.         dd_CurrentX: longint;
  23.         dd_CurrentY: longint;
  24.         end;
  25.  
  26.     pAppIcon = ^tAppIcon;
  27.     tAppIcon = record
  28.         ai_PRIVATE: pointer;
  29.         end;
  30.  
  31.     pDrawerData = ^tDrawerData;
  32.     tDrawerData = record
  33.         dd_NewWindow: tNewWindow;
  34.         dd_CurrentX: longint;
  35.         dd_CurrentY: longint;
  36.         dd_Flags: long;
  37.         dd_ViewModes: word;
  38.         end;
  39.  
  40.     pAppMenuItem = ^tAppMenuItem;
  41.     tAppMenuItem = record
  42.         ami_PRIVATE: pointer;
  43.         end;
  44.  
  45.     pDiskObject = ^tDiskObject;
  46.     tDiskObject = record
  47.         do_Magic: word;
  48.         do_Version: word;
  49.         do_Gadget: tGadget;
  50.         do_Type: byte;
  51.         do_DefaultTool: pbyte;
  52.         do_ToolTypes: ppbyte;
  53.         do_CurrentX: longint;
  54.         do_CurrentY: longint;
  55.         do_DrawerData: pDrawerData;
  56.         do_ToolWindow: pbyte;
  57.         do_StackSize: longint;
  58.         end;
  59.  
  60.     pAppMessage = ^tAppMessage;
  61.     tAppMessage = record
  62.         am_Message: tMessage;
  63.         am_Type: word;
  64.         am_UserData: long;
  65.         am_ID: long;
  66.         am_NumArgs: longint;
  67.         am_ArgList: pWBArg;
  68.         am_Version: word;
  69.         am_Class: word;
  70.         am_MouseX: integer;
  71.         am_MouseY: integer;
  72.         am_Seconds: long;
  73.         am_Micros: long;
  74.         am_Reserved: array [0..7] of long;
  75.         end;
  76.  
  77.     pFreeList = ^tFreeList;
  78.     tFreeList = record
  79.         fl_NumFree: integer;
  80.         fl_MemList: tList;
  81.         end;
  82.  
  83.     pWBStartup = ^tWBStartup;
  84.     tWBStartup = record
  85.         sm_Message: tMessage;
  86.         sm_Process: pMsgPort;
  87.         sm_Segment: BPTR;
  88.         sm_NumArgs: longint;
  89.         sm_ToolWindow: pbyte;
  90.         sm_ArgList: pWBArg;
  91.         end;
  92.  
  93.  
  94.  
  95. var
  96.     WorkbenchBase: pLibrary;
  97.  
  98.  
  99. const
  100.     WBDRAWER = 2;
  101.     MTYPE_PSTD = 1;
  102.     MTYPE_DISKCHANGE = 3;
  103.     MTYPE_APPICON = 8;
  104.     MTYPE_COPYEXIT = $A;
  105.     MTYPE_TOOLEXIT = 2;
  106.     MTYPE_APPMENUITEM = 9;
  107.     DRAWERDATAFILESIZE = $3E;
  108.     MTYPE_ICONPUT = $B;
  109.     GADGBACKFILL = 1;
  110.     WBGARBAGE = 5;
  111.     WBKICK = 7;
  112.     MTYPE_IOPROC = 6;
  113.     OLDDRAWERDATAFILESIZE = $38;
  114.     WBDISK = 1;
  115.     WORKBENCH_NAME = 'workbench.library';
  116.     WB_DISKREVISIONMASK = $FF;
  117.     WB_DISKREVISION = 1;
  118.     NO_ICON_POSITION = $80000000;
  119.     WBTOOL = 3;
  120.     WBAPPICON = 8;
  121.     MTYPE_CLOSEDOWN = 5;
  122.     MTYPE_TIMER = 4;
  123.     WBDEVICE = 6;
  124.     MTYPE_APPWINDOW = 7;
  125.     AM_VERSION = 1;
  126.     WBPROJECT = 4;
  127.     WB_DISKVERSION = 1;
  128.     WB_DISKMAGIC = $E310;
  129.  
  130.  
  131. function AddAppWindowA
  132.         (id: long;
  133.         userdata: long;
  134.         window: pWindow;
  135.         msgport: pMsgPort;
  136.         taglist: pTagItem): pAppWindow;
  137.  
  138. function RemoveAppWindow (appWindow: pAppWindow): boolean;
  139. function AddAppIconA
  140.         (id: long;
  141.         userdata: long;
  142.         text_: STRPTR;
  143.         msgport: pMsgPort;
  144.         lock: pFileLock;
  145.         diskobj: pDiskObject;
  146.         taglist: pTagItem): pAppIcon;
  147.  
  148. function RemoveAppIcon (appIcon: pAppIcon): boolean;
  149. function AddAppMenuItemA
  150.         (id: long;
  151.         userdata: long;
  152.         text_: STRPTR;
  153.         msgport: pMsgPort;
  154.         taglist: pTagItem): pAppMenuItem;
  155.  
  156. function RemoveAppMenuItem (appMenuItem: pAppMenuItem): boolean;
  157.  
  158.  
  159. IMPLEMENTATION
  160. function AddAppWindowA; xassembler;
  161. asm
  162.     movem.l    a2/a6,-(sp)
  163.     lea        $C(sp),a6
  164.     move.l    (a6)+,a2
  165.     move.l    (a6)+,a1
  166.     move.l    (a6)+,a0
  167.     move.l    (a6)+,d1
  168.     move.l    (a6)+,d0
  169.     move.l    WorkbenchBase,a6
  170.     jsr        -$30(a6)
  171.     move.l    d0,$20(sp)
  172.     movem.l    (sp)+,a2/a6
  173. end;
  174.  
  175. function RemoveAppWindow; xassembler;
  176. asm
  177.     move.l    a6,-(sp)
  178.     move.l    8(sp),a0
  179.     move.l    WorkbenchBase,a6
  180.     jsr        -$36(a6)
  181.     tst.l    d0
  182.     sne        d0
  183.     neg.b    d0
  184.     move.b    d0,$C(sp)
  185.     move.l    (sp)+,a6
  186. end;
  187.  
  188. function AddAppIconA; xassembler;
  189. asm
  190.     movem.l    a2-a4/a6,-(sp)
  191.     lea        $14(sp),a6
  192.     move.l    (a6)+,a4
  193.     move.l    (a6)+,a3
  194.     move.l    (a6)+,a2
  195.     move.l    (a6)+,a1
  196.     move.l    (a6)+,a0
  197.     move.l    (a6)+,d1
  198.     move.l    (a6)+,d0
  199.     move.l    WorkbenchBase,a6
  200.     jsr        -$3C(a6)
  201.     move.l    d0,$30(sp)
  202.     movem.l    (sp)+,a2-a4/a6
  203. end;
  204.  
  205. function RemoveAppIcon; xassembler;
  206. asm
  207.     move.l    a6,-(sp)
  208.     move.l    8(sp),a0
  209.     move.l    WorkbenchBase,a6
  210.     jsr        -$42(a6)
  211.     tst.l    d0
  212.     sne        d0
  213.     neg.b    d0
  214.     move.b    d0,$C(sp)
  215.     move.l    (sp)+,a6
  216. end;
  217.  
  218. function AddAppMenuItemA; xassembler;
  219. asm
  220.     movem.l    a2/a6,-(sp)
  221.     lea        $C(sp),a6
  222.     move.l    (a6)+,a2
  223.     move.l    (a6)+,a1
  224.     move.l    (a6)+,a0
  225.     move.l    (a6)+,d1
  226.     move.l    (a6)+,d0
  227.     move.l    WorkbenchBase,a6
  228.     jsr        -$48(a6)
  229.     move.l    d0,$20(sp)
  230.     movem.l    (sp)+,a2/a6
  231. end;
  232.  
  233. function RemoveAppMenuItem; xassembler;
  234. asm
  235.     move.l    a6,-(sp)
  236.     move.l    8(sp),a0
  237.     move.l    WorkbenchBase,a6
  238.     jsr        -$4E(a6)
  239.     tst.l    d0
  240.     sne        d0
  241.     neg.b    d0
  242.     move.b    d0,$C(sp)
  243.     move.l    (sp)+,a6
  244. end;
  245.  
  246. end.
  247.