home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / Misc / OB3.2D3.DMS / in.adf / Interfaces / Exec.mod < prev    next >
Encoding:
Text File  |  1993-10-30  |  52.5 KB  |  1,276 lines

  1. (*-------------------------------------------------------------------------*)
  2. (*                                                                         *)
  3. (*  Amiga Oberon Interface Module:                    Date: 02-Nov-92      *)
  4. (*                                                                         *)
  5. (*   © 1992 by Fridtjof Siebert                                            *)
  6. (*   updated for v39 by hartmut Goebel                                     *)
  7. (*                                                                         *)
  8. (*-------------------------------------------------------------------------*)
  9.  
  10. MODULE Exec;
  11.  
  12. IMPORT SYSTEM;
  13.  
  14. (*********************************************************************
  15. *
  16. *  Format of the alert error number:
  17. *
  18. *    +-+-------------+----------------+--------------------------------+
  19. *    |D|  SubSysId   |  General Error |    SubSystem Specific Error    |
  20. *    +-+-------------+----------------+--------------------------------+
  21. *     1    7 bits          8 bits                  16 bits
  22. *
  23. *                    D:  DeadEnd alert
  24. *             SubSysId:  indicates ROM subsystem number.
  25. *        General Error:  roughly indicates what the error was
  26. *       Specific Error:  indicates more detail
  27. **********************************************************************)
  28.  
  29. (**********************************************************************
  30. *
  31. *  Hardware/CPU specific alerts:  They may show without the 8 at the
  32. *  front of the number.  These are CPU/68000 specific.        See 680x0
  33. *  programmer's manuals for more details.
  34. *
  35. **********************************************************************)
  36. CONST
  37.   acpuBusErr     * = 80000002H;      (* Hardware bus fault/access error *)
  38.   acpuAddressErr * = 80000003H;      (* Illegal address access (ie: odd) *)
  39.   acpuInstErr    * = 80000004H;      (* Illegal instruction *)
  40.   acpuDivZero    * = 80000005H;      (* Divide by zero *)
  41.   acpuCHK        * = 80000006H;      (* Check instruction error *)
  42.   acpuTRAPV      * = 80000007H;      (* TrapV instruction error *)
  43.   acpuPrivErr    * = 80000008H;      (* Privilege violation error *)
  44.   acpuTrace      * = 80000009H;      (* Trace error *)
  45.   acpuLineA      * = 8000000AH;      (* Line 1010 Emulator error *)
  46.   acpuLineF      * = 8000000BH;      (* Line 1111 Emulator error *)
  47.   acpuFormat     * = 8000000EH;      (* Stack frame format error *)
  48.   acpuSpurious   * = 80000018H;      (* Spurious interrupt error *)
  49.   acpuAutoVec1   * = 80000019H;      (* AutoVector Level 1 interrupt error *)
  50.   acpuAutoVec2   * = 8000001AH;      (* AutoVector Level 2 interrupt error *)
  51.   acpuAutoVec3   * = 8000001BH;      (* AutoVector Level 3 interrupt error *)
  52.   acpuAutoVec4   * = 8000001CH;      (* AutoVector Level 4 interrupt error *)
  53.   acpuAutoVec5   * = 8000001DH;      (* AutoVector Level 5 interrupt error *)
  54.   acpuAutoVec6   * = 8000001EH;      (* AutoVector Level 6 interrupt error *)
  55.   acpuAutoVec7   * = 8000001FH;      (* AutoVector Level 7 interrupt error *)
  56.  
  57.  
  58. (*********************************************************************
  59. *
  60. *  General Alerts
  61. *
  62. *  For example: timer.device cannot open math.library would be 0x05038015
  63. *
  64. *       Alert(AN_TimerDev|AG_OpenLib|AO_MathLib);
  65. *
  66. *********************************************************************)
  67.  
  68. CONST
  69.  
  70. (*------ alert types *)
  71.   deadEnd      * = 080000000H;
  72.   recovery     * = 000000000H;
  73.  
  74.  
  75. (*------ general purpose alert codes *)
  76.   noMemory     * = 000010000H;
  77.   makeLib      * = 000020000H;
  78.   openLib      * = 000030000H;
  79.   openDev      * = 000040000H;
  80.   openRes      * = 000050000H;
  81.   ioError      * = 000060000H;
  82.   noSignal     * = 000070000H;
  83.   badParm      * = 000080000H;
  84.   closeLib     * = 000090000H;       (* usually too many closes *)
  85.   closeDev     * = 0000A0000H;       (* or a mismatched close *)
  86.   procCreate   * = 0000B0000H;       (* Process creation failed *)
  87.  
  88.  
  89. (*------ alert objects: *)
  90.   execLib      * = 000008001H;
  91.   graphicsLib  * = 000008002H;
  92.   layersLib    * = 000008003H;
  93.   intuition    * = 000008004H;
  94.   mathLib      * = 000008005H;
  95.   dosLib       * = 000008007H;
  96.   ramLib       * = 000008008H;
  97.   iconLib      * = 000008009H;
  98.   expansionLib * = 00000800AH;
  99.   diskfontLib  * = 00000800BH;
  100.   utilityLib   * = 00000800CH;
  101.   keyMapLib    * = 00000800DH;
  102.  
  103.   audioDev     * = 000008010H;
  104.   consoleDev   * = 000008011H;
  105.   gamePortDev  * = 000008012H;
  106.   keyboardDev  * = 000008013H;
  107.   trackDiskDev * = 000008014H;
  108.   timerDev     * = 000008015H;
  109.  
  110.   ciaRsrc      * = 000008020H;
  111.   diskRsrc     * = 000008021H;
  112.   miscRsrc     * = 000008022H;
  113.  
  114.   bootStrap    * = 000008030H;
  115.   workbench    * = 000008031H;
  116.   diskCopy     * = 000008032H;
  117.   gadTools     * = 000008033H;
  118.   atUnknown    * = 000008035H;
  119.  
  120.  
  121. (*********************************************************************
  122. *
  123. *   Specific Alerts:
  124. *
  125. *   For example:   exec.library -- corrupted memory list
  126. *
  127. *         ALERT  AN_MemCorrupt        ;8100 0005
  128. *
  129. *********************************************************************)
  130.  
  131. (*------ exec.library *)
  132.   anExecLib    * = 001000000H;
  133.   excptVect    * = 001000001H;  (* 68000 exception vector checksum (obs.) *)
  134.   baseChkSum   * = 001000002H;  (* Execbase checksum (obs.) *)
  135.   libChkSum    * = 001000003H;  (* Library checksum failure *)
  136.   memCorrupt   * = 081000005H;  (* Corrupt memory list detected in FreeMem *)
  137.   intrMem      * = 081000006H;  (* No memory for interrupt servers *)
  138.   initAPtr     * = 001000007H;  (* InitStruct() of an APTR source (obs.) *)
  139.   semCorrupt   * = 001000008H;  (* A semaphore is in an illegal state
  140.                                       at ReleaseSempahore() *)
  141.   freeTwice    * = 001000009H;  (* Freeing memory already freed *)
  142.   bogusExcpt   * = 08100000AH;  (* illegal 68k exception taken (obs.) *)
  143.   ioUsedTwice  * = 00100000BH;  (* Attempt to reuse active IORequest *)
  144.   memoryInsane * = 00100000CH;  (* Sanity check on memory list failed
  145.                                       during AvailMem(MEMF_LARGEST) *)
  146.   ioAfterClose * = 00100000DH;  (* IO attempted on closed IORequest *)
  147.   stackProbe   * = 00100000EH;  (* Stack appears to extend out of range *)
  148.   badFreeAddr  * = 00100000FH;  (* Memory header not located. [ Usually an
  149.                                       invalid address passed to FreeMem() ] *)
  150.   badSemaphore * = 001000010H;  (* An attempt was made to use the old
  151.                                       message semaphores. *)
  152.  
  153. (*------ graphics.library *)
  154.   anGraphicsLib* = 002000000H;
  155.   gfxNoMem     * = 082010000H;       (* graphics out of memory *)
  156.   gfxNoMemMspc * = 082010001H;       (* MonitorSpec alloc, no memmory *)
  157.   longFrame    * = 082010006H;       (* long frame, no memory *)
  158.   shortFrame   * = 082010007H;       (* short frame, no memory *)
  159.   textTmpRas   * = 002010009H;       (* text, no memory for TmpRas *)
  160.   bltBitMap    * = 08201000AH;       (* BltBitMap, no memory *)
  161.   regionMemory * = 08201000BH;       (* regions, memory not available *)
  162.   makeVPort    * = 082010030H;       (* MakeVPort, no memory *)
  163.   gfxNewError  * = 00200000CH;
  164.   gfxFreeError * = 00200000DH;
  165.  
  166.   gfxNoLCM     * = 082011234H;       (* emergency memory not available *)
  167.  
  168.   obsoleteFont * = 002000401H;       (* unsupported font description used *)
  169.  
  170. (*------ layers.library *)
  171.   anLayersLib  * = 003000000H;
  172.   layersNoMem  * = 083010000H;       (* layers out of memory *)
  173.  
  174. (*------ intuition.library *)
  175.   anIntuition  * = 004000000H;
  176.   gadgetType   * = 084000001H;   (* unknown gadget type *)
  177.   badGadget    * = 004000001H;   (* Recovery form of GadgetType *)
  178.   createPort   * = 084010002H;   (* create port, no memory *)
  179.   itemAlloc    * = 004010003H;   (* item plane alloc, no memory *)
  180.   subAlloc     * = 004010004H;   (* sub alloc, no memory *)
  181.   planeAlloc   * = 084010005H;   (* plane alloc, no memory *)
  182.   itemBoxTop   * = 084000006H;   (* item box top < RelZero *)
  183.   openScreen   * = 084010007H;   (* open screen, no memory *)
  184.   openScrnRast * = 084010008H;   (* open screen, raster alloc, no memory *)
  185.   sysScrnType  * = 084000009H;   (* open sys screen, unknown type *)
  186.   addSWGadget  * = 08401000AH;   (* add SW gadgets, no memory *)
  187.   openWindow   * = 08401000BH;   (* open window, no memory *)
  188.   badState     * = 08400000CH;   (* Bad State Return entering Intuition *)
  189.   badMessage   * = 08400000DH;   (* Bad Message received by IDCMP *)
  190.   weirdEcho    * = 08400000EH;   (* Weird echo causing incomprehension *)
  191.   noConsole    * = 08400000FH;   (* couldn't open the Console Device *)
  192.   noISem       * = 004000010H;   (* Intuition skipped obtaining a sem *)
  193.   iSemOrder    * = 004000011H;   (* Intuition obtained a sem in bad order *)
  194.  
  195. (*------ math.library *)
  196.   anMathLib    * = 005000000H;
  197.  
  198. (*------ dos.library *)
  199.   anDosLib     * = 007000000H;
  200.   startMem     * = 007010001H;  (* no memory at startup *)
  201.   endTask      * = 007000002H;  (* EndTask didn't *)
  202.   qPktFail     * = 007000003H;  (* Qpkt failure *)
  203.   asyncPkt     * = 007000004H;  (* Unexpected packet received *)
  204.   freeVec      * = 007000005H;  (* Freevec failed *)
  205.   diskBlkSeq   * = 007000006H;  (* Disk block sequence error *)
  206.   bitMap       * = 007000007H;  (* Bitmap corrupt *)
  207.   keyFree      * = 007000008H;  (* Key already free *)
  208.   badChkSum    * = 007000009H;  (* Invalid checksum *)
  209.   diskError    * = 00700000AH;  (* Disk Error *)
  210.   keyRange     * = 00700000BH;  (* Key out of range *)
  211.   badOverlay   * = 00700000CH;  (* Bad overlay *)
  212.   badInitFunc  * = 00700000DH;  (* Invalid init packet for cli/shell *)
  213.   fileReclosed * = 00700000EH;  (* A filehandle was closed more than once *)
  214.  
  215. (*------ ramlib.library *)
  216.   anRAMLib     * = 008000000H;
  217.   badSegList   * = 008000001H;       (* no overlays in library seglists *)
  218.  
  219. (*------ icon.library *)
  220.   anIconLib    * = 009000000H;
  221.  
  222. (*------ expansion.library *)
  223.   anExpansionLib    * = 00A000000H;
  224.   badExpansionFree  * = 00A000001H;  (* freeed free region *)
  225.  
  226. (*------ diskfont.library *)
  227.   anDiskfontLib* = 00B000000H;
  228.  
  229. (*------ audio.device *)
  230.   anAudioDev   * = 010000000H;
  231.  
  232. (*------ console.device *)
  233.   anConsoleDev * = 011000000H;
  234.   noWindow     * = 011000001H;       (* Console can't open initial window *)
  235.  
  236. (*------ gameport.device *)
  237.   anGamePortDev* = 012000000H;
  238.  
  239. (*------ keyboard.device *)
  240.   anKeyboardDev* = 013000000H;
  241.  
  242. (*------ trackdisk.device *)
  243.   anTrackDiskDev* = 014000000H;
  244.   tdCalibSeek  * = 014000001H;       (* calibrate: seek error *)
  245.   tdDelay      * = 014000002H;       (* delay: error on timer wait *)
  246.  
  247. (*------ timer.device *)
  248.   anTimerDev   * = 015000000H;
  249.   tmBadReq     * = 015000001H;  (* bad request *)
  250.   tmBadSupply  * = 015000002H;  (* power supply -- no 50/60Hz ticks *)
  251.  
  252. (*------ cia.resource *)
  253.   anCIARsrc    * = 020000000H;
  254.  
  255. (*------ disk.resource *)
  256.   anDiskRsrc   * = 021000000H;
  257.   drHasDisk    * = 021000001H;       (* get unit: already has disk *)
  258.   drIntNoAct   * = 021000002H;       (* interrupt: no active unit *)
  259.  
  260. (*------ misc.resource *)
  261.   anMiscRsrc   * = 022000000H;
  262.  
  263. (*------ bootstrap *)
  264.   anBootStrap  * = 030000000H;
  265.   bootError    * = 030000001H;       (* boot code returned an error *)
  266.  
  267. (*------ Workbench *)
  268.   anWorkbench                  * = 031000000H;
  269.   noFonts                      * = 0B1000001H;
  270.   wbBadStartupMsg1             * = 031000001H;
  271.   wbBadStartupMsg2             * = 031000002H;
  272.   wbBadIOMsg                   * = 031000003H;  (* Hacker code? *)
  273.   wbReLayoutToolMenu           * = 0B1010009H;  (* GadTools broke? *)
  274.  
  275. (* no longer used since V39 *)
  276.   wbInitPotionAllocDrawer      * = 0B1010004H;
  277.   wbCreateWBMenusCreateMenus1  * = 0B1010005H;
  278.   wbCreateWBMenusCreateMenus2  * = 0B1010006H;
  279.   wbLayoutWBMenusLayoutMenus   * = 0B1010007H;
  280.   wbAddToolMenuItem            * = 0B1010008H;
  281.   wbinitTimer                  * = 0B101000AH;
  282.   wbInitLayerDemon             * = 0B101000BH;
  283.   wbinitWbGels                 * = 0B101000CH;
  284.   wbInitScreenAndWindows1      * = 0B101000DH;
  285.   wbInitScreenAndWindows2      * = 0B101000EH;
  286.   wbInitScreenAndWindows3      * = 0B101000FH;
  287.   wbMAlloc                     * = 0B1010010H;
  288.  
  289. (*------ DiskCopy *)
  290.   anDiskCopy   * = 032000000H;
  291.  
  292. (*------ toolkit for Intuition *)
  293.   anGadTools   * = 033000000H;
  294.  
  295. (*------ System utility library *)
  296.   anUtilityLib * = 034000000H;
  297.  
  298. (*------ For use by any application that needs it *)
  299.   anUnknown    * = 035000000H;
  300.  
  301.  
  302.  
  303. CONST
  304.  
  305.   includeVersion * = 36; (* Version of the include files in use. (Do not
  306.                               use this label for OpenLibrary() calls!) *)
  307.  
  308. TYPE
  309.   ADDRESS  * = SYSTEM.ADDRESS;  (* 32-bit untyped pointer *)
  310.   APTR     * = ADDRESS;
  311.   BPTR     * = BPOINTER TO LONGINT;
  312.  
  313.   LONG     * = LONGINT;  (* signed 32-bit quantity *)
  314.   ULONG    * = LONGINT;  (* unsigned 32-bit quantity, be careful with this! *)
  315.   LONGBITS * = LONGSET;  (* 32 bits manipulated individually *)
  316.   WORD     * = INTEGER;  (* signed 16-bit quantity *)
  317.   UWORD    * = INTEGER;  (* unsigned 16-bit quantity, be careful with this! *)
  318.   WORDBITS * = SET;      (* 16 bits manipulated individually *)
  319.   BYTE     * = SYSTEM.BYTE; (* 8-bit quantity *)
  320.   SBYTE    * = SHORTINT; (* signed 8-bit quantity *)
  321.   UBYTE    * = BYTE;     (* unsigned 8-bit quantity *)
  322.   BYTEBITS * = SHORTSET; (* 8 bits manipulated individually *)
  323.   RPTR     * = INTEGER;  (* signed relative pointer *)
  324.   STRING   * = ARRAY 256 OF CHAR; (* general String type *)
  325.   STRPTR   * = UNTRACED POINTER TO STRING; (* string pointer (NULL terminated) *)
  326.   LONGBOOL * = LONGINT;
  327.  
  328.   PROC     * = PROCEDURE;
  329.  
  330. (* Types with specific semantics *)
  331.   FLOAT    * = REAL;
  332.   DOUBLE   * = LONGREAL;
  333.   SINGLE   * = LONGINT;  (* single precision real number *)
  334.   BOOL     * = INTEGER;
  335.   TEXT     * = CHAR;
  336.  
  337. CONST
  338.   true     * = 1;
  339.   false    * = 0;
  340.   LTRUE    * = -1;
  341.   LFALSE   * = 0;
  342.  
  343.   null     * = NIL;
  344.  
  345.   byteMask * = 255;
  346.  
  347.  
  348. (* LIBRARY_VERSION is now obsolete.  Please use LIBRARY_MINIMUM *)
  349. (* or code the specific minimum library version you require.    *)
  350.   libraryMinimum * = 33; (* Lowest version supported by Commodore-Amiga *)
  351.  
  352. TYPE
  353.  
  354. (* Pointers: *)
  355.   NodePtr           * = UNTRACED POINTER TO Node;
  356.   MinNodePtr        * = UNTRACED POINTER TO MinNode;
  357.   ListPtr           * = UNTRACED POINTER TO List;
  358.   MinListPtr        * = UNTRACED POINTER TO MinList;
  359.   TaskPtr           * = UNTRACED POINTER TO Task;
  360.   MsgPortPtr        * = UNTRACED POINTER TO MsgPort;
  361.   MsgPortSoftIntPtr * = UNTRACED POINTER TO MsgPortSoftInt;
  362.   MessagePtr        * = UNTRACED POINTER TO Message;
  363.   InterruptPtr      * = UNTRACED POINTER TO Interrupt;
  364.   LibraryPtr        * = UNTRACED POINTER TO Library;
  365.   DevicePtr         * = UNTRACED POINTER TO Device;
  366.   UnitPtr           * = UNTRACED POINTER TO Unit;
  367.   IntVectorPtr      * = UNTRACED POINTER TO IntVector;
  368.   SoftIntListPtr    * = UNTRACED POINTER TO SoftIntList;
  369.   ExecBasePtr       * = UNTRACED POINTER TO ExecBase;
  370.   IORequestPtr      * = UNTRACED POINTER TO IORequest;
  371.   IOStdReqPtr       * = UNTRACED POINTER TO IOStdReq;
  372.   MemChunkPtr       * = UNTRACED POINTER TO MemChunk;
  373.   MemHeaderPtr      * = UNTRACED POINTER TO MemHeader;
  374.   MemEntryPtr       * = UNTRACED POINTER TO MemEntry;
  375.   MemListPtr        * = UNTRACED POINTER TO MemList;
  376.   MemPoolPtr        * = UNTRACED POINTER TO MemPool;
  377.   ResidentPtr       * = UNTRACED POINTER TO Resident;
  378.   SemaphoreRequestPtr * = UNTRACED POINTER TO SemaphoreRequest;
  379.   SemaphoreMessagePtr * = UNTRACED POINTER TO SemaphoreMessagePtr;
  380.   SignalSemaphorePtr* = UNTRACED POINTER TO SignalSemaphore;
  381.   SemaphorePtr      * = UNTRACED POINTER TO Semaphore;
  382.  
  383. TYPE
  384.  
  385. (*
  386.  * Type compatible to MinNode and Node:
  387.  *)
  388.   CommonNode * = STRUCT END;
  389.   CommonNodePtr * = UNTRACED POINTER TO CommonNode;
  390.  
  391. (*
  392.  *  List Node Structure.  Each member in a list starts with a Node
  393.  *)
  394.  
  395.  
  396.   Node * = STRUCT (dummy : CommonNode)
  397.     succ * : NodePtr;           (* Pointer to next (successor) *)
  398.     pred * : NodePtr;           (* Pointer to previous (predecessor) *)
  399.     type * : SHORTINT;
  400.     pri  * : SHORTINT;          (* Priority, for sorting *)
  401.     name * : STRPTR;            (* ID string, null terminated *)
  402.   END;  (* Note: word aligned *)
  403.  
  404. (* minimal node -- no type checking possible *)
  405.   MinNode * = STRUCT (dummy : CommonNode)
  406.     succ * : MinNodePtr;
  407.     pred * : MinNodePtr;
  408.   END;
  409.  
  410.  
  411. (*
  412. ** Note: Newly initialized IORequests, and software interrupt structures
  413. ** used with Cause(), should have type NT_UNKNOWN.  The OS will assign a type
  414. ** when they are first used.
  415. *)
  416.  
  417. CONST
  418.  
  419. (*----- Node Types for LN_TYPE -----*)
  420.   unknown      * = 0;
  421.   task         * = 1;       (* Exec task *)
  422.   interrupt    * = 2;
  423.   device       * = 3;
  424.   msgPort      * = 4;
  425.   message      * = 5;       (* Indicates message currently pending *)
  426.   freeMsg      * = 6;
  427.   replyMsg     * = 7;       (* Message has been replied *)
  428.   resource     * = 8;
  429.   library      * = 9;
  430.   memory       * = 10;
  431.   softInt      * = 11;      (* Internal flag used by SoftInits *)
  432.   font         * = 12;
  433.   process      * = 13;      (* AmigaDOS Process *)
  434.   semaphore    * = 14;
  435.   signalSem    * = 15;      (* signal semaphores *)
  436.   bootNode     * = 16;
  437.   kickMem      * = 17;
  438.   graphics     * = 18;
  439.   deathMessage * = 19;
  440.   user         * = 254;     (* User node types work down from here *)
  441.   extended     * = 255;
  442.  
  443. TYPE
  444.  
  445. (*
  446.  * Type compatible to MinList and List:
  447.  *)
  448.   CommonList * = STRUCT END;
  449.   CommonListPtr * = UNTRACED POINTER TO CommonList;
  450.  
  451. (*
  452.  *  Full featured list header.
  453.  *)
  454.  
  455.   List * = STRUCT (dummy : CommonList)
  456.     head * : NodePtr;
  457.     tail * : NodePtr;
  458.     tailPred * : NodePtr;
  459.     type * : SHORTINT;
  460.     pad  * : BYTE;
  461.   END;     (* word aligned *)
  462.  
  463.  
  464. (*
  465.  * Minimal List Header - no type checking
  466.  *)
  467.   MinList * = STRUCT (dummy : CommonList)
  468.    head*, tail*, tailPred*: MinNodePtr;
  469.   END;    (* longword aligned *)
  470.  
  471.  
  472. (* Please use Exec functions to modify task structure fields, where available.
  473.  *)
  474.   Task * = STRUCT (node* : Node)
  475.     flags * : SHORTSET;
  476.     state * : SHORTSET;
  477.     idNestCnt * : SHORTINT;         (* intr disabled nesting*)
  478.     tdNestCnt * : SHORTINT;         (* task disabled nesting*)
  479.     sigAlloc  * : LONGSET;          (* sigs allocated *)
  480.     sigWait   * : LONGSET;          (* sigs we are waiting for *)
  481.     sigRecvd  * : LONGSET;          (* sigs we have received *)
  482.     sigExcept * : LONGSET;          (* sigs we will take excepts for *)
  483.     trapAlloc * : SET;              (* traps allocated *)
  484.     trapAble  * : SET;              (* traps enabled *)
  485.     exceptData* : APTR;             (* points to except data *)
  486.     exceptCode* : PROC;             (* points to except code *)
  487.     trapData  * : APTR;             (* points to trap code *)
  488.     trapCode  * : PROC;             (* points to trap data *)
  489.     spReg     * : APTR;             (* stack pointer        *)
  490.     spLower   * : APTR;             (* stack lower bound    *)
  491.     spUpper   * : APTR;             (* stack upper bound + 2*)
  492.     switch    * : PROC;             (* task losing CPU    *)
  493.     launch    * : PROC;             (* task getting CPU  *)
  494.     memEntry  * : List;             (* Allocated memory. Freed by RemTask() *)
  495.     userData  * : APTR;             (* For use by the task; no restrictions! *)
  496.   END;
  497.  
  498. CONST
  499.  
  500. (*----- Flag Bits ------------------------------------------*)
  501. (* Task.flags: *)
  502.   procTime     * = 0;
  503.   eTask        * = 3;
  504.   stackChk     * = 4;
  505.   exception    * = 5;
  506.   switch       * = 6;
  507.   launch       * = 7;
  508.  
  509. (*----- Task States ----------------------------------------*)
  510. (* Task.state *)
  511.   inval        * = 0;
  512.   added        * = 1;
  513.   run          * = 2;
  514.   ready        * = 3;
  515.   wait         * = 4;
  516.   except       * = 5;
  517.   removed      * = 6;
  518.  
  519. (*----- Predefined Signals -------------------------------------*)
  520.   sigAbort      * = 0;
  521.   sigChild      * = 1;
  522.   sigBlit       * = 4;       (* Note: same as SINGLE *)
  523.   sigSingle     * = 4;       (* Note: same as BLIT *)
  524.   sigIntuition  * = 5;
  525.   sigNet        * = 7;
  526.   sigDos        * = 8;
  527.  
  528.  
  529. TYPE
  530.  
  531. (****** MsgPort *****************************************************)
  532.  
  533.   MsgPort * = STRUCT (node * : Node)
  534.     flags * : SHORTINT;
  535.     sigBit * : SHORTINT;        (* signal bit number    *)
  536.     sigTask* : TaskPtr;         (* object to be signalled *)
  537.     msgList* : List;            (* message linked list  *)
  538.   END;
  539.  
  540.   MsgPortSoftInt * = STRUCT (node * : Node)
  541.     flags * : SHORTINT;
  542.     sigBit * : SHORTINT;        (* signal bit number    *)
  543.     softInt* : InterruptPtr;    (* object to be signalled *)
  544.     msgList* : List;            (* message linked list  *)
  545.   END;
  546.  
  547. CONST
  548.  
  549. (* MsgPort.flags: Port arrival actions (PutMsg) *)
  550.   signal     * = 0;       (* Signal task in mp_SigTask *)
  551.   softint    * = 1;       (* Signal SoftInt in mp_SoftInt/mp_SigTask *)
  552.   ignore     * = 2;       (* Ignore arrival *)
  553.  
  554. TYPE
  555.  
  556. (****** Message *****************************************************)
  557.  
  558.   Message * = STRUCT (node * : Node)
  559.     replyPort * : MsgPortPtr;  (* message reply port *)
  560.     length * : INTEGER;        (* total message length, in bytes *)
  561.                                (* (include the size of the Message *)
  562.                                (* structure in the length) *)
  563.   END;
  564.  
  565. CONST
  566.  
  567. (*------ Special Constants ---------------------------------------*)
  568.   vectSize    * = 6;      (* Each library entry takes 6 bytes *)
  569.   reserved    * = 4;      (* Exec reserves the first 4 vectors *)
  570.   base        * = -vectSize;
  571.   userDef     * = base-reserved*vectSize;
  572.   nonStd      * = userDef;
  573.  
  574. (*------ Standard Functions --------------------------------------*)
  575.   open        * = - 6;
  576.   close       * = -12;
  577.   expunge     * = -18;
  578.   extFunc     * = -24;   (* for future expansion *)
  579.  
  580. TYPE
  581.  
  582. (*------ Library Base Structure ----------------------------------*)
  583. (* Also used for Devices and some Resources *)
  584.   Library * = STRUCT (node * : Node)
  585.     flags * : SHORTSET;
  586.     pad   * : BYTE;
  587.     negSize * : INTEGER;            (* number of bytes before library *)
  588.     posSize * : INTEGER;            (* number of bytes after library *)
  589.     version * : INTEGER;            (* major *)
  590.     revision* : INTEGER;            (* minor *)
  591.     idString* : STRPTR;             (* ASCII identification *)
  592.     sum     * : LONGINT;            (* the checksum itself *)
  593.     openCnt * : INTEGER;            (* number of current opens *)
  594.   END;  (* Warning: size is not a longword multiple! *)
  595.  
  596. CONST
  597.  
  598. (* Library.flags bit definitions (all others are system reserved) *)
  599.   summing * = 0;       (* we are currently checksumming *)
  600.   changed * = 1;       (* we have just changed the lib *)
  601.   sumUsed * = 2;       (* set if we should bother to sum *)
  602.   delExp  * = 3;       (* delayed expunge *)
  603.  
  604. TYPE
  605.  
  606. (****** Device ******************************************************)
  607.  
  608.   Device * = STRUCT (library * : Library) END;
  609.  
  610.  
  611. (****** Unit ********************************************************)
  612.  
  613.   Unit * = STRUCT (msgPort * : MsgPort) (* queue for unprocessed messages *)
  614.                                         (* instance of msgport is recommended *)
  615.     flags   * : SHORTSET;
  616.     pad     * : BYTE;
  617.     openCnt * : INTEGER;                (* number of active opens *)
  618.   END;
  619.  
  620.  
  621. CONST
  622.  
  623. (* Unit.flags *)
  624.   active   * = 0;
  625.   inTask   * = 1;
  626.  
  627.  
  628. (* errors: *)
  629.   openFail    * = -1; (* device/unit failed to open *)
  630.   aborted     * = -2; (* request terminated early [after AbortIO()] *)
  631.   noCmd       * = -3; (* command not supported by device *)
  632.   badLength   * = -4; (* not a valid length (usually IO_LENGTH) *)
  633.   badAddress  * = -5; (* invalid address (misaligned or bad range) *)
  634.   unitBusy    * = -6; (* device opens ok, but requested unit is busy *)
  635.   selfTest    * = -7; (* hardware failed self-test *)
  636.  
  637.  
  638. TYPE
  639.  
  640.   Interrupt * = STRUCT (node * : Node)
  641.     data * : APTR;               (* server data segment  *)
  642.     code * : PROC;               (* server code entry    *)
  643.   END;
  644.  
  645.  
  646.   IntVector * = STRUCT           (* For EXEC use ONLY! *)
  647.     data * : APTR;
  648.     code * : PROC;
  649.     node * : NodePtr;
  650.   END;
  651.  
  652.  
  653.   SoftIntList * = STRUCT (list * : List)   (* For EXEC use ONLY! *)
  654.     pad  * : INTEGER;
  655.   END;
  656.  
  657.  
  658. CONST
  659.  
  660. (* this is a fake INT definition, used only for AddIntServer and the like *)
  661.   nmi * = 15;
  662.  
  663.  
  664. TYPE
  665.  
  666. (* Definition of the Exec library base structure (pointed to by location 4).
  667. ** Most fields are not to be viewed or modified by user programs.  Use
  668. ** extreme caution.
  669. *)
  670.   ExecBase * = STRUCT (libNode * : Library) (* Standard library node *)
  671.  
  672. (******** Static System Variables ********)
  673.  
  674.         softVer      * : INTEGER; (* obsolete! kickstart release number *)
  675.         lowMemChkSum * : INTEGER; (* checksum of 68000 trap vectors *)
  676.         chkBase      * : LONGINT; (* system base pointer complement *)
  677.         coldCapture  * : APTR;    (* coldstart soft capture vector *)
  678.         coolCapture  * : APTR;    (* coolstart soft capture vector *)
  679.         warmCapture  * : APTR;    (* warmstart soft capture vector *)
  680.         sysStkUpper  * : APTR;    (* system stack base   (upper bound) *)
  681.         sysStkLower  * : APTR;    (* top of system stack (lower bound) *)
  682.         maxLocMem    * : APTR;    (* top of chip memory *)
  683.         debugEntry   * : APTR;    (* global debugger entry point *)
  684.         debugData    * : APTR;    (* global debugger data segment *)
  685.         alertData    * : APTR;    (* alert data segment *)
  686.         maxExtMem    * : APTR;    (* top of extended mem, or null if none *)
  687.  
  688.         chkSum       * : INTEGER; (* for all of the above (minus 2) *)
  689.  
  690. (****** Interrupt Related ***************************************)
  691.  
  692.         intVects    * : ARRAY 16 OF IntVector;
  693.  
  694. (****** Dynamic System Variables *************************************)
  695.  
  696.         thisTask       * : TaskPtr;  (* pointer to current task (readable) *)
  697.  
  698.         idleCount      * : LONGINT;  (* idle counter *)
  699.         dispCount      * : LONGINT;  (* dispatch counter *)
  700.         quantum        * : INTEGER;  (* time slice quantum *)
  701.         elapsed        * : INTEGER;  (* current quantum ticks *)
  702.         sysFlags       * : SET;      (* misc internal system flags *)
  703.         idNestCnt      * : SHORTINT; (* interrupt disable nesting count *)
  704.         tdNestCnt      * : SHORTINT; (* task disable nesting count *)
  705.  
  706.         attnFlags      * : SET;      (* special attention flags (readable) *)
  707.  
  708.         attnResched    * : INTEGER;  (* rescheduling attention *)
  709.         resModules     * : APTR;     (* resident module array pointer *)
  710.         taskTrapCode   * : PROC;
  711.         taskExceptCode * : PROC;
  712.         taskExitCode   * : PROC;
  713.         taskSigAlloc   * : LONGSET;
  714.         taskTrapAlloc  * : SET;
  715.  
  716.  
  717. (****** System Lists (private!) ********************************)
  718.  
  719.         memList      * : List;
  720.         resourceList * : List;
  721.         deviceList   * : List;
  722.         intrList     * : List;
  723.         libList      * : List;
  724.         portList     * : List;
  725.         taskReady    * : List;
  726.         taskWait     * : List;
  727.  
  728.         softInts     * : ARRAY 5 OF SoftIntList;
  729.  
  730. (****** Other Globals *******************************************)
  731.  
  732.         lastAlert    * : ARRAY 4 OF LONGINT;
  733.  
  734.         (* these next two variables are provided to allow
  735.         ** system developers to have a rough idea of the
  736.         ** period of two externally controlled signals --
  737.         ** the time between vertical blank interrupts and the
  738.         ** external line rate (which is counted by CIA A's
  739.         ** "time of day" clock).  In general these values
  740.         ** will be 50 or 60, and may or may not track each
  741.         ** other.  These values replace the obsolete AFB_PAL
  742.         ** and AFB_50HZ flags.
  743.         *)
  744.         vblankFrequency      * : SHORTINT;   (* (readable) *)
  745.         powerSupplyFrequency * : SHORTINT;   (* (readable) *)
  746.  
  747.         semaphoreList        * : List;
  748.  
  749.         (* these next two are to be able to kickstart into user ram.
  750.         ** KickMemPtr holds a singly linked list of MemLists which
  751.         ** will be removed from the memory list via AllocAbs.  If
  752.         ** all the AllocAbs's succeeded, then the KickTagPtr will
  753.         ** be added to the rom tag list.
  754.         *)
  755.         kickMemPtr   * : APTR;   (* ptr to queue of mem lists *)
  756.         kickTagPtr   * : APTR;   (* ptr to rom tag queue *)
  757.         kickCheckSum * : APTR;   (* checksum for mem and tags *)
  758.  
  759. (****** V36 Exec additions start here **************************************)
  760.  
  761.         pad0          * : INTEGER; (* Private internal use *)
  762.         launchPoint   * : LONGINT; (* Private to Launch/Switch *)
  763.         ramLibPrivate * : APTR;
  764.         (* The next ULONG contains the system "E" clock frequency,
  765.         ** expressed in Hertz.  The E clock is used as a timebase for
  766.         ** the Amiga's 8520 I/O chips. (E is connected to "02").
  767.         ** Typical values are 715909 for NTSC, or 709379 for PAL.
  768.         *)
  769.         eClockFrequency * : LONGINT;  (* (readable) *)
  770.         cacheControl    * : APTR;     (* Private to CacheControl calls *)
  771.         taskID          * : LONGINT;  (* Next available task ID *)
  772.  
  773.         reserved1       * : ARRAY 5 OF LONGINT;
  774.  
  775.         mmuLock         * : APTR;     (* private *)
  776.  
  777.         reserved2       * : ARRAY 3 OF LONGINT;
  778.  
  779. (****** V39 Exec additions start here **************************************)
  780.  
  781.         (* The following list and data element are used
  782.          * for V39 exec's low memory handler...
  783.          *)
  784.         memHandlers    *: MinList;  (* The handler list *)
  785.         memHandler     *: APTR;     (* Private! handler pointer *)
  786.       END;
  787.  
  788.  
  789. CONST
  790.  
  791. (****** Bit defines for AttnFlags (see above) ******************************)
  792.  
  793. (*  Processors and Co-processors: *)
  794. (* ExecBase.attnFlags *)
  795.   m68010     * = 0;       (* also set for 68020 *)
  796.   m68020     * = 1;       (* also set for 68030 *)
  797.   m68030     * = 2;       (* also set for 68040 *)
  798.   m68040     * = 3;
  799.   m68881     * = 4;       (* also set for 68882 *)
  800.   m68882     * = 5;
  801.  
  802.  
  803. (****** Selected flag definitions for Cache manipulation calls **********)
  804.  
  805.   enableI       * = 0;  (* Enable instruction cache *)
  806.   freezeI       * = 1;  (* Freeze instruction cache *)
  807.   clearI        * = 3;  (* Clear instruction cache  *)
  808.   ibe           * = 4;  (* Instruction burst enable *)
  809.   enableD       * = 8;  (* 68030 Enable data cache  *)
  810.   freezeD       * = 9;  (* 68030 Freeze data cache  *)
  811.   clearD        * = 11; (* 68030 Clear data cache   *)
  812.   dbe           * = 12; (* 68030 Data burst enable *)
  813.   writeAllocate * = 13; (* 68030 Write-Allocate mode (must always be set!) *)
  814.   enableE       * = 30; (* Master enable for external caches
  815.                          * External caches should track the
  816.                          * state of the internal caches
  817.                          * such that they do not cache anything
  818.                          * that the internal cache turned off for. *)
  819.   copyBack      * = 31; (* Master enable for copyback caches *)
  820.  
  821.   dmaContinue   * = 1;  (* Continuation flag for CachePreDMA *)
  822.   dmaNoModify   * = 2;  (* Set if DMA does not update memory *)
  823.  
  824. TYPE
  825.  
  826.   IORequest * = STRUCT (message * : Message)
  827.     device  * : DevicePtr;          (* device node pointer  *)
  828.     unit    * : UnitPtr;            (* unit (driver private)*)
  829.     command * : INTEGER;    (* device command *)
  830.     flags   * : SHORTSET;
  831.     error   * : SHORTINT;           (* error or warning num *)
  832.   END;
  833.  
  834.   IOStdReq * = STRUCT (message * : Message)
  835.     device  * : DevicePtr;          (* device node pointer  *)
  836.     unit    * : UnitPtr;            (* unit (driver private)*)
  837.     command * : INTEGER;    (* device command *)
  838.     flags   * : SHORTSET;
  839.     error   * : SHORTINT;           (* error or warning num *)
  840.     actual  * : LONGINT;            (* actual number of bytes transferred *)
  841.     length  * : LONGINT;            (* requested number bytes transferred*)
  842.     data    * : APTR;            (* points to data area *)
  843.     offset  * : LONGINT;            (* offset for block structured devices *)
  844.   END;
  845.  
  846. CONST
  847.  
  848. (* library vector offsets for device reserved vectors *)
  849.   beginIO  * = -30;
  850.   abortIO  * = -36;
  851.  
  852. (* io_Flags defined bits *)
  853.   quick    * =   0;
  854.  
  855. (* IORequest.command: *)
  856.   invalid    * = 0;
  857.   reset      * = 1;
  858.   read       * = 2;
  859.   write      * = 3;
  860.   update     * = 4;
  861.   clear      * = 5;
  862.   stop       * = 6;
  863.   start      * = 7;
  864.   flush      * = 8;
  865.  
  866.   nonstd     * = 9;
  867.  
  868. TYPE
  869.  
  870. (****** MemChunk ****************************************************)
  871.  
  872.   MemChunk * = STRUCT
  873.     next * : MemChunkPtr;  (* pointer to next chunk *)
  874.     bytes* : LONGINT;      (* chunk byte size      *)
  875.   END;
  876.  
  877.  
  878. (****** MemHeader ***************************************************)
  879.  
  880.   MemHeader * = STRUCT (node * : Node)
  881.     attributes * : SET;         (* characteristics of this region *)
  882.     first * : MemChunkPtr;      (* first free region            *)
  883.     lower * : APTR;             (* lower memory bound           *)
  884.     upper * : APTR;             (* upper memory bound+1 *)
  885.     free  * : LONGINT;          (* total number of free bytes   *)
  886.   END;
  887.  
  888.  
  889. (****** MemEntry ****************************************************)
  890.  
  891.   MemEntry * = STRUCT
  892.     addr  * : APTR;      (* the address of this memory region      *)
  893.                          (* or: LONGSET, the AllocMem requirements *)
  894.     length* : LONGINT    (* the length of this memory region *)
  895.   END;
  896.  
  897.  
  898. (****** MemList *****************************************************)
  899.  
  900. (* Note: sizeof(struct MemList) includes the size of the first MemEntry! *)
  901.   MemList * = STRUCT (node * : Node)
  902.     numEntries * : INTEGER;            (* number of entries in this struct *)
  903. (*  me: ARRAY numEntries OF MemEntry;  (* the entries                      *) *)
  904.   END;
  905.  
  906. CONST
  907.  
  908. (*----- Memory Requirement Types ---------------------------*)
  909. (*----- See the AllocMem() documentation for details--------*)
  910.  
  911.   any         * =  LONGSET{};    (* Any type of memory will do *)
  912.   public      * =  0;
  913.   chip        * =  1;
  914.   fast        * =  2;
  915.   local       * =  8;
  916.   mem24BitDMA * =  9;   (* DMAable memory within 24 bits of address *)
  917.   kick        * = 10;   (* Memory that can be used for KickTags *)
  918.  
  919.   memClear    * = 16;
  920.   largest     * = 17;
  921.   reverse     * = 18;
  922.   total       * = 19;   (* AvailMem: return total size of memory *)
  923.  
  924.   noExpunge   * = 31;   (* AllocMem: Do not cause expunge on failure *)
  925.  
  926.   (*----- Current alignment rules for memory blocks (may increase) -----*)
  927.   blockSize   * = 8;
  928.   blockMask   * = blockSize-1;
  929.  
  930. TYPE
  931.   MemPool * = STRUCT END; (* dummy for memory pools *)
  932.  
  933. (****** MemHandlerData **********************************************)
  934. (* Note:  This structure is *READ ONLY* and only EXEC can create it!*)
  935. TYPE
  936.   MemHandlerData * = STRUCT
  937.     requestSize  *: LONGINT;      (* Requested allocation size *)
  938.     requestFlags *: LONGSET;      (* Requested allocation flags *)
  939.     flags        *: LONGSET;      (* Flags (see below) *)
  940.   END;
  941.  
  942. CONST
  943.   recycle *= 0; (* 0==First time, 1==recycle *)
  944.  
  945. (****** Low Memory handler return values ***************************)
  946.   didNothing * =  0;    (* Nothing we could do... *)
  947.   allDone    * = -1;    (* We did all we could do *)
  948.   tryAgain   * =  1;    (* We did some, try the allocation again *)
  949.  
  950. TYPE
  951.   Resident * = STRUCT
  952.     matchWord * : INTEGER;     (* word to match on (ILLEGAL)   *)
  953.     matchTag  * : ResidentPtr; (* pointer to the above       *)
  954.     endSkip   * : APTR;        (* address to continue scan     *)
  955.     flags     * : SHORTSET;    (* various tag flags            *)
  956.     version   * : SHORTINT;    (* release version number       *)
  957.     type      * : SHORTINT;    (* type of module (NT_XXXXXX)   *)
  958.     pri       * : SHORTINT;    (* initialization priority *)
  959.     name      * : STRPTR;      (* pointer to node name *)
  960.     idString  * : STRPTR;      (* pointer to identification string *)
  961.     init      * : APTR;        (* pointer to init code *)
  962.   END;
  963.  
  964.  
  965. CONST
  966.  
  967.   matchWord  * = 4AFCH;  (* The 68000 "ILLEGAL" instruction *)
  968.  
  969. (* Resident.flags: *)
  970.   autoinit   * = 7;  (* rt_Init points to data structure *)
  971.   afterDos   * = 2;
  972.   singleTask * = 1;
  973.   coldStart  * = 0;
  974.  
  975. TYPE
  976. (****** SignalSemaphore *********************************************)
  977.  
  978. (* Private structure used by ObtainSemaphore() *)
  979.   SemaphoreRequest * = STRUCT (link * : MinNode)
  980.     waiter * : TaskPtr;
  981.   END;
  982.  
  983. (* Signal Semaphore data structure *)
  984.   SignalSemaphore * = STRUCT (link * : Node)
  985.     nestCount * : INTEGER;
  986.     waitQueue * : MinList;
  987.     multipleLink * : SemaphoreRequest;
  988.     owner     * : TaskPtr;
  989.     queueCount* : INTEGER;
  990.   END;
  991.  
  992. (****** Semaphore procure message (for use in V39 Procure/Vacate ****)
  993.  
  994.   SemaphoreMessage * = STRUCT (message *: Message)
  995.     semaphore * :SignalSemaphorePtr;
  996.    END;
  997.  
  998. CONST
  999.   shared    * = 1;
  1000.   exclusive * = 0;
  1001.  
  1002. TYPE
  1003.   MsgPortLockMsg * = STRUCT (node * : Node)
  1004.     flags * : SHORTINT;
  1005.     sigBit * : SHORTINT;     (* signal bit number    *)
  1006.     lockMsg* : MessagePtr;   (* object to be signalled *) (* may be other type [hG] *)
  1007.     msgList* : List;         (* message linked list  *)
  1008.   END;
  1009.  
  1010. (****** Semaphore (Old Procure/Vacate type, not reliable) ***********)
  1011.  
  1012.   Semaphore * = STRUCT (msgPort * : MsgPort)  (* Do not use these semaphores! *)
  1013.     bids    * : INTEGER;
  1014.   END;
  1015.  
  1016.  
  1017. VAR
  1018.   AbsExecBase * [4H] : ExecBasePtr; (* absolute exec base, avoid to use this *)
  1019.   SysBase     *      : ExecBasePtr; (* exec base, use this!                  *)
  1020.   exec        *      : ExecBasePtr; (* obsolety, included for compatibility  *)
  1021.  
  1022.  
  1023. (* ------ misc ---------------------------------------------------------*)
  1024. PROCEDURE Supervisor   *{SysBase,- 30}(userFunction{13}: PROC): APTR;
  1025. PROCEDURE ExitIntr     *{SysBase,- 36};
  1026. PROCEDURE Schedule     *{SysBase,- 42};
  1027. PROCEDURE Reschedule   *{SysBase,- 48};
  1028. PROCEDURE Switch       *{SysBase,- 54};
  1029. PROCEDURE Dispatch     *{SysBase,- 60};
  1030. PROCEDURE Exception    *{SysBase,- 66};
  1031. (* ------ special patchable hooks to internal exec activity ------------*)
  1032. (* ------ module creation ----------------------------------------------*)
  1033. PROCEDURE InitCode     *{SysBase,- 72}(startClass{0}: SHORTSET;
  1034.                                        version{1}: LONGINT);
  1035. PROCEDURE InitStruct   *{SysBase,- 78}(initTable{9}: APTR;
  1036.                                        memory{10}: APTR;
  1037.                                        size{0}: LONGINT);
  1038. PROCEDURE MakeLibrary  *{SysBase,- 84}(funcInit{8}   : APTR;
  1039.                                        structInit{9} : APTR;
  1040.                                        libInit{10}   : PROC;
  1041.                                        dataSize{0}   : LONGINT;
  1042.                                        segList{1}    : BPTR): LibraryPtr;
  1043. PROCEDURE MakeFunctions*{SysBase,- 90}(target{8}     : APTR;
  1044.                                        funcArray{9}  : APTR;
  1045.                                        funcDisplBase{10}: APTR);
  1046. PROCEDURE FindResident *{SysBase,- 96}(name{9}       : ARRAY OF CHAR): ResidentPtr;
  1047. PROCEDURE InitResident *{SysBase,-102}(resident{9}   : ResidentPtr;
  1048.                                         segList{1}    : BPTR);
  1049. (* ------ diagnostics --------------------------------------------------*)
  1050. PROCEDURE Alert        *{SysBase,-108}(alertNum{7}   : LONGINT);
  1051. PROCEDURE Debug        *{SysBase,-114}(flags{0}      : LONGSET);
  1052. (* ------ interrupts ---------------------------------------------------*)
  1053. PROCEDURE Disable      *{SysBase,-120};
  1054. PROCEDURE Enable       *{SysBase,-126};
  1055. PROCEDURE Forbid       *{SysBase,-132};
  1056. PROCEDURE Permit       *{SysBase,-138};
  1057. PROCEDURE SetSR        *{SysBase,-144}(newSR{0}      : SET;
  1058.                                        mask{1}       : SET): SET;
  1059. PROCEDURE SuperState   *{SysBase,-150};
  1060. PROCEDURE UserState    *{SysBase,-156}(sysStack{0}   : APTR);
  1061. PROCEDURE SetIntVector *{SysBase,-162}(intNumber{0}  : LONGINT;
  1062.                                        interrupt{9}  : InterruptPtr): InterruptPtr;
  1063. PROCEDURE AddIntServer *{SysBase,-168}(intNumber{0}  : LONGINT;
  1064.                                        interrupt{9}  : InterruptPtr);
  1065. PROCEDURE RemIntServer *{SysBase,-174}(intNumber{0}  : LONGINT;
  1066.                                        interrupt{9}  : InterruptPtr);
  1067. PROCEDURE Cause        *{SysBase,-180}(interrupt{9}  : InterruptPtr);
  1068. (* ------ memory allocation --------------------------------------------*)
  1069. PROCEDURE Allocate     *{SysBase,-186}(freeList{8}   : MemHeaderPtr;
  1070.                                        byteSize{0}   : LONGINT): APTR;
  1071. PROCEDURE Deallocate   *{SysBase,-192}(freeList{8}   : MemHeaderPtr;
  1072.                                        memoryBlock{9}: APTR;
  1073.                                        byteSize{0}   : LONGINT);
  1074. PROCEDURE AllocMem     *{SysBase,-198}(byteSize{0}   : LONGINT;
  1075.                                        requirements{1}: LONGSET): APTR;
  1076. PROCEDURE AllocAbs     *{SysBase,-204}(byteSize{0}   : LONGINT;
  1077.                                        location{9}   : APTR): APTR;
  1078. PROCEDURE FreeMem      *{SysBase,-210}(memoryBlock{9}: APTR;
  1079.                                        byteSize{0}   : LONGINT);
  1080. PROCEDURE AvailMem     *{SysBase,-216}(requirements{1}: LONGSET): LONGINT;
  1081. PROCEDURE AllocEntry   *{SysBase,-222}(memList{8}    : APTR): APTR;
  1082. PROCEDURE FreeEntry    *{SysBase,-228}(entry{8}      : APTR);
  1083. (* ------ lists --------------------------------------------------------*)
  1084. PROCEDURE Insert       *{SysBase,-234}(VAR list{8}   : CommonList;
  1085.                                        node{9}       : CommonNodePtr;
  1086.                                        pred{10}      : CommonNodePtr);
  1087. PROCEDURE AddHead      *{SysBase,-240}(VAR list{8}   : CommonList;
  1088.                                        node{9}       : CommonNodePtr);
  1089. PROCEDURE AddTail      *{SysBase,-246}(VAR list{8}   : CommonList;
  1090.                                        node{9}       : CommonNodePtr);
  1091. PROCEDURE Remove       *{SysBase,-252}(node{9}       : CommonNodePtr);
  1092. PROCEDURE RemHead      *{SysBase,-258}(VAR list{8}   : CommonList): CommonNodePtr;
  1093. PROCEDURE RemTail      *{SysBase,-264}(VAR list{8}   : CommonList): CommonNodePtr;
  1094. PROCEDURE Enqueue      *{SysBase,-270}(VAR list{8}   : CommonList;
  1095.                                        node{9}       : CommonNodePtr);
  1096. PROCEDURE FindName     *{SysBase,-276}(VAR list{8}   : CommonList;
  1097.                                        name{9}       : ARRAY OF CHAR): CommonNodePtr;
  1098. (* ------ tasks --------------------------------------------------------*)
  1099. PROCEDURE AddTask      *{SysBase,-282}(task{9}       : TaskPtr;
  1100.                                        initPC{10}    : PROC;
  1101.                                        finalPC{11}   : APTR);
  1102. PROCEDURE RemTask      *{SysBase,-288}(task{9}       : TaskPtr);
  1103. PROCEDURE FindTask     *{SysBase,-294}(name{9}       : ARRAY OF CHAR): TaskPtr;
  1104. PROCEDURE SetTaskPri   *{SysBase,-300}(task{9}       : TaskPtr;
  1105.                                        priority{0}   : LONGINT): SHORTINT;
  1106. PROCEDURE SetSignal    *{SysBase,-306}(newSignals{0} : LONGSET;
  1107.                                        signalSet{1}  : LONGSET): LONGSET;
  1108. PROCEDURE SetExcept    *{SysBase,-312}(newSignals{0} : LONGSET;
  1109.                                        signalSet{1}  : LONGSET): LONGSET;
  1110. PROCEDURE Wait         *{SysBase,-318}(signalSet{0}  : LONGSET): LONGSET;
  1111. PROCEDURE Signal       *{SysBase,-324}(task{9}       : TaskPtr;
  1112.                                        signalSet{0}  : LONGSET);
  1113. PROCEDURE AllocSignal  *{SysBase,-330}(signalNum{0}  : LONGINT): SHORTINT;
  1114. PROCEDURE FreeSignal   *{SysBase,-336}(signalNum{0}  : LONGINT);
  1115. PROCEDURE AllocTrap    *{SysBase,-342}(trapNum{0}    : LONGINT): SHORTINT;
  1116. PROCEDURE FreeTrap     *{SysBase,-348}(trapNum{0}    : LONGINT);
  1117. (* ------ messages -----------------------------------------------------*)
  1118. PROCEDURE AddPort      *{SysBase,-354}(port{9}       : MsgPortPtr);
  1119. PROCEDURE RemPort      *{SysBase,-360}(port{9}       : MsgPortPtr);
  1120. PROCEDURE PutMsg       *{SysBase,-366}(port{8}       : MsgPortPtr;
  1121.                                        message{9}    : MessagePtr);
  1122. PROCEDURE GetMsg       *{SysBase,-372}(port{8}       : MsgPortPtr): MessagePtr;
  1123. PROCEDURE ReplyMsg     *{SysBase,-378}(message{9}    : MessagePtr);
  1124. PROCEDURE WaitPort     *{SysBase,-384}(port{8}       : MsgPortPtr);
  1125. PROCEDURE FindPort     *{SysBase,-390}(name{9}       : ARRAY OF CHAR): MsgPortPtr;
  1126. (* ------ libraries ----------------------------------------------------*)
  1127. PROCEDURE AddLibrary   *{SysBase,-396}(library{9}    : LibraryPtr);
  1128. PROCEDURE RemLibrary   *{SysBase,-402}(library{9}    : LibraryPtr);
  1129. PROCEDURE OldOpenLibrary*{SysBase,-408}(name{9}      : ARRAY OF CHAR): LibraryPtr;
  1130. PROCEDURE CloseLibrary *{SysBase,-414}(library{9}    : LibraryPtr);
  1131. PROCEDURE SetFunction  *{SysBase,-420}(library{9}    : LibraryPtr;
  1132.                                        funcOffset{8} : LONGINT;
  1133.                                        newFunction{0}: PROC): PROC;
  1134. PROCEDURE SumLibrary   *{SysBase,-426}(library{9}    : LibraryPtr);
  1135. (* ------ devices ------------------------------------------------------*)
  1136. PROCEDURE AddDevice    *{SysBase,-432}(device{9}     : DevicePtr);
  1137. PROCEDURE RemDevice    *{SysBase,-438}(device{9}     : DevicePtr);
  1138. PROCEDURE OpenDevice   *{SysBase,-444}(devName{8}    : ARRAY OF CHAR;
  1139.                                        unit{0}       : LONGINT;
  1140.                                        ioRequest{9}  : MessagePtr;
  1141.                                        flags{1}      : LONGSET): SHORTINT;
  1142. PROCEDURE CloseDevice  *{SysBase,-450}(ioRequest{9}  : MessagePtr);
  1143. PROCEDURE DoIO         *{SysBase,-456}(ioRequest{9}  : MessagePtr): SHORTINT;
  1144. PROCEDURE OldDoIO      *{SysBase,-456}(ioRequest{9}  : MessagePtr); (* same w/o result *)
  1145. PROCEDURE SendIO       *{SysBase,-462}(ioRequest{9}  : MessagePtr);
  1146. PROCEDURE CheckIO      *{SysBase,-468}(ioRequest{9}  : MessagePtr): IORequestPtr;
  1147. PROCEDURE WaitIO       *{SysBase,-474}(ioRequest{9}  : MessagePtr): SHORTINT;
  1148. PROCEDURE OldWaitIO    *{SysBase,-474}(ioRequest{9}  : MessagePtr); (* same w/o result *)
  1149. PROCEDURE AbortIO      *{SysBase,-480}(ioRequest{9}  : MessagePtr);
  1150. (* ------ resources ----------------------------------------------------*)
  1151. PROCEDURE AddResource  *{SysBase,-486}(resource{9}   : APTR);
  1152. PROCEDURE RemResource  *{SysBase,-492}(resource{9}   : APTR);
  1153. PROCEDURE OpenResource *{SysBase,-498}(resName{9}    : ARRAY OF CHAR): APTR;
  1154. (* ------ private diagnostic support -----------------------------------*)
  1155. (* ------ misc ---------------------------------------------------------*)
  1156. PROCEDURE RawIOInit    *{SysBase,-504};
  1157. PROCEDURE RawMayGetChar*{SysBase,-510};
  1158. PROCEDURE RawPutChar   *{SysBase,-516};
  1159. PROCEDURE RawDoFmt     *{SysBase,-522}(formatStr{8}  : ARRAY OF CHAR;
  1160.                                        dataStream{9} : APTR;
  1161.                                        putChProc{10} : PROC;
  1162.                                        putChData{11} : APTR): APTR;
  1163. PROCEDURE RawDoFmtL    *{SysBase,-522}(formatStr{8}  : ARRAY OF CHAR;
  1164.                                        dataStream{9} : ARRAY OF SYSTEM.BYTE;
  1165.                                        putChProc{10} : PROC;
  1166.                                        putChData{11} : APTR): APTR;
  1167. PROCEDURE OldRawDoFmt  *{SysBase,-522}(formatStr{8}  : ARRAY OF CHAR;
  1168.                                        dataStream{9} : APTR;
  1169.                                        putChProc{10} : PROC;
  1170.                                        putChData{11} : APTR);
  1171. PROCEDURE OldRawDoFmtL *{SysBase,-522}(formatStr{8}  : ARRAY OF CHAR;
  1172.                                        dataStream{9} : ARRAY OF SYSTEM.BYTE;
  1173.                                        putChProc{10} : PROC;
  1174.                                        putChData{11} : APTR);
  1175. PROCEDURE GetCC        *{SysBase,-528}(): SET;
  1176. PROCEDURE TypeOfMem    *{SysBase,-534}(address{9}    : APTR): LONGSET;
  1177. PROCEDURE Procure      *{SysBase,-540}(VAR sigSem{8} : Semaphore;
  1178.                                        bidMsg{9}     : SemaphoreMessagePtr): BOOLEAN;
  1179. PROCEDURE Vacate       *{SysBase,-546}(VAR sigSem{8} : Semaphore;
  1180.                                        bidMsg{9}     : SemaphoreMessagePtr): BOOLEAN;
  1181. PROCEDURE OpenLibrary  *{SysBase,-552}(libName{9}    : ARRAY OF CHAR;
  1182.                                        version{0}    : LONGINT): LibraryPtr;
  1183. (* --- functions in V33 or higher (distributed as Release 1.2) ---*)
  1184. (* ------ signal semaphores (note funny registers)----------------------*)
  1185. PROCEDURE InitSemaphore*{SysBase,-558}(VAR sigSem{8} : SignalSemaphore);
  1186. PROCEDURE ObtainSemaphore*{SysBase,-564}(VAR sigSem{8}: SignalSemaphore);
  1187. PROCEDURE ReleaseSemaphore*{SysBase,-570}(VAR sigSem{8}: SignalSemaphore);
  1188. PROCEDURE AttemptSemaphore*{SysBase,-576}(VAR sigSem{8}: SignalSemaphore): BOOLEAN;
  1189. PROCEDURE ObtainSemaphoreList*{SysBase,-582}(VAR sigSem{8}: List);
  1190. PROCEDURE ReleaseSemaphoreList*{SysBase,-588}(VAR sigSem{8}: List);
  1191. PROCEDURE FindSemaphore*{SysBase,-594}(sigSem{9}     : ARRAY OF CHAR): SignalSemaphorePtr;
  1192. PROCEDURE AddSemaphore *{SysBase,-600}(VAR sigSem{9} : SignalSemaphore);
  1193. PROCEDURE RemSemaphore *{SysBase,-606}(VAR sigSem{9} : SignalSemaphore);
  1194. (* ------ kickmem support ----------------------------------------------*)
  1195. PROCEDURE SumKickData  *{SysBase,-612}(): LONGINT;
  1196. (* ------ more memory support ------------------------------------------*)
  1197. PROCEDURE AddMemList   *{SysBase,-618}(size{0}       : LONGINT;
  1198.                                        attributes{1} : LONGSET;
  1199.                                        pri{2}        : LONGINT;
  1200.                                        base{8}       : APTR;
  1201.                                        name{9}       : ARRAY OF CHAR);
  1202. PROCEDURE CopyMem      *{SysBase,-624}(source{8}     : ARRAY OF BYTE;
  1203.                                        dest{9}       : ARRAY OF BYTE;
  1204.                                        size{0}       : LONGINT);
  1205. PROCEDURE CopyMemAPTR  *{SysBase,-624}(source{8}     : APTR;   (* equivalent to CopyMem, uses ptrs instead *)
  1206.                                        dest{9}       : APTR;
  1207.                                        size{0}       : LONGINT);
  1208. PROCEDURE CopyMemQuick *{SysBase,-630}(source{8}     : ARRAY OF BYTE;
  1209.                                        dest{9}       : ARRAY OF BYTE;
  1210.                                        size{0}       : LONGINT);
  1211. PROCEDURE CopyMemQuickAPTR*{SysBase,-630}(source{8}  : APTR;   (* equivalent to CopyMemQuick, uses ptrs instead *)
  1212.                                        dest{9}       : APTR;
  1213.                                        size{0}       : LONGINT);
  1214. (* ------ cache --------------------------------------------------------*)
  1215. (* --- functions in V36 or higher (distributed as Release 2.0)      --- *)
  1216. (* --- REMEMBER: You are to check the version BEFORE you use this ! --- *)
  1217. PROCEDURE CacheClearU  *{SysBase,-636}();
  1218. PROCEDURE CacheClearE  *{SysBase,-642}(address{8}    : APTR;
  1219.                                        length{0}     : LONGINT;
  1220.                                        caches{1}     : LONGSET);
  1221. PROCEDURE CacheControl *{SysBase,-648}(cacheBits{0}  : LONGSET;
  1222.                                        cacheMask{1}  : LONGSET): LONGSET;
  1223. (* ------ misc ---------------------------------------------------------*)
  1224. PROCEDURE CreateIORequest*{SysBase,-654}(port{8}     : MsgPortPtr;
  1225.                                          size{0}     : LONGINT): MessagePtr;
  1226. PROCEDURE DeleteIORequest*{SysBase,-660}(iorequest{8}: MessagePtr);
  1227. PROCEDURE CreateMsgPort*{SysBase,-666}(): MsgPortPtr;
  1228. PROCEDURE DeleteMsgPort*{SysBase,-672}(port{8}: MsgPortPtr);
  1229. PROCEDURE ObtainSemaphoreShared*{SysBase,-678}(VAR sigSem{8}: SignalSemaphore);
  1230. (* ------ even more memory support -------------------------------------*)
  1231. PROCEDURE AllocVec     *{SysBase,-684}(byteSize{0}   : LONGINT;
  1232.                                        requirements{1}: LONGSET ): APTR;
  1233. PROCEDURE FreeVec      *{SysBase,-690}(memoryBlock{9}: APTR);
  1234. (*------ V39 Pool LVOs...*)
  1235. PROCEDURE CreatePool   *{SysBase,-696}(requirements{0}: LONGSET;
  1236.                                        puddleSize{1} : LONGINT;
  1237.                                        threshSize{2} : LONGINT): MemPoolPtr;
  1238. PROCEDURE DeletePool   *{SysBase,-702}(poolHeader{8} : MemPoolPtr);
  1239. PROCEDURE AllocPooled  *{SysBase,-708}(poolHeader{8} : MemPoolPtr;
  1240.                                        memSize{0}    : LONGINT): APTR;
  1241. PROCEDURE FreePooled   *{SysBase,-714}(poolHeader{8} : MemPoolPtr;
  1242.                                        memory{9}     : APTR;
  1243.                                        memSize{0}    : LONGINT);
  1244. (* ------ misc ---------------------------------------------------------*)
  1245. PROCEDURE SetFunction8 *{SysBase,-720}(funcOffset{0} : LONGINT;
  1246.                                        newFunction{1}: PROC;
  1247.                                        array{8}      : APTR;
  1248.                                        library{9}    : APTR);
  1249. PROCEDURE ColdReboot   *{SysBase,-726};
  1250. PROCEDURE StackSwap    *{SysBase,-732}(newSize{0}    : LONGINT;
  1251.                                        newSP{1}      : LONGINT;
  1252.                                        newStack{8}   : APTR);
  1253. (* ------ task trees ---------------------------------------------------*)
  1254. PROCEDURE ChildFree    *{SysBase,-738}(tid{0}        : APTR);
  1255. PROCEDURE ChildOrphan  *{SysBase,-744}(tid{0}        : APTR);
  1256. PROCEDURE ChildStatus  *{SysBase,-750}(tid{0}        : APTR);
  1257. PROCEDURE ChildWait    *{SysBase,-756}(tid{0}        : APTR);
  1258. (*------ future expansion ---------------------------------------------*)
  1259. PROCEDURE CachePreDMA  *{SysBase,-762}(address{8}   : APTR;
  1260.                                        VAR length{9}: LONGINT;
  1261.                                        flags{0}     : LONGINT): APTR;
  1262. PROCEDURE CachePostDMA *{SysBase,-768}(address{8}   : APTR;
  1263.                                        VAR length{9}: LONGINT;
  1264.                                        flags{0}     : LONGINT);
  1265. (*------ New, for V39 -------------------------------------------------*)
  1266. (*--- functions in V39 or higher (beta release for developers only) ---*)
  1267. (*------ Low memory handler functions ---------------------------------*)
  1268. PROCEDURE AddMemHandler*{SysBase,-774}(memHand{1}: InterruptPtr);
  1269. PROCEDURE RemMemHandler*{SysBase,-780}(memHand{1}: InterruptPtr);
  1270.  
  1271. BEGIN
  1272.   SysBase := AbsExecBase;
  1273.   exec    := SysBase;
  1274. END Exec.
  1275.  
  1276.