home *** CD-ROM | disk | FTP | other *** search
/ Amiga MA Magazine 1998 #6 / amigamamagazinepolishissue1998.iso / coders / jËzyki_programowania / oberon / system / amigaexec.mod (.txt) < prev    next >
Oberon Text  |  1977-12-31  |  9KB  |  338 lines

  1. Syntax10.Scn.Fnt
  2. Syntax10i.Scn.Fnt
  3. Syntax10b.Scn.Fnt
  4. MODULE AmigaExec;    (* SHML/CN 15. Mar 93, 23 Jun 94, RD 25 Dec 95 *)
  5.  IMPORT SYSTEM, A := AmigaBase;
  6. CONST
  7.  (* Flags for AllocMem *)
  8.  memChip*=1;
  9.  memClear*=16;
  10. (* IORequest.command: *)
  11.   invalid    * = 0;
  12.   reset      * = 1;
  13.   read       * = 2;
  14.   write      * = 3;
  15.   update     * = 4;
  16.   clear      * = 5;
  17.   stop       * = 6;
  18.   start      * = 7;
  19.   flush      * = 8;
  20.   nonstd     * = 9;
  21.  execBase:LONGINT;
  22.  execVersion-:INTEGER;
  23.  PROC*=PROCEDURE;
  24.  TaskPtr*=LONGINT;
  25.   UnitPtr* = LONGINT;
  26.   IORequestPtr      * = LONGINT;
  27.   IOStdReqPtr       * = LONGINT;
  28.  NodePtr*=LONGINT;
  29.  Node*=RECORD
  30.   succ*:NodePtr;
  31.   pred*:NodePtr;
  32.   type*:SHORTINT;
  33.   pri*:SHORTINT;
  34.   name*:LONGINT
  35.  END;
  36.  List*=RECORD
  37.   head*:NodePtr;
  38.   tail*:NodePtr;
  39.   tailPred*:NodePtr;
  40.   type*:SHORTINT;
  41.   pad*:SHORTINT
  42.  END;
  43.  MinNodePtr*=LONGINT;
  44.  MinNode*=RECORD
  45.   succ*:MinNodePtr;
  46.   pred*:MinNodePtr
  47.  END;
  48.  MinList*=RECORD
  49.   head*,tail*,tailPred*:MinNodePtr
  50.  END;
  51.  MsgPortPtr*=LONGINT;
  52.  MsgPort*=RECORD
  53.   node*:Node;
  54.   flags*:SHORTINT;
  55.   sigBit*:SHORTINT;
  56.   sigTask*:TaskPtr;
  57.   msgList*:List
  58.  END;
  59.   Unit * = RECORD
  60.     msgPort * : MsgPort;    (* queue for unprocessed messages *)
  61.                             (* instance of msgport is recommended *)
  62.     flags   * : SHORTINT;
  63.     pad     * : SHORTINT;
  64.     openCnt * : INTEGER;                (* number of active opens *)
  65.   END;
  66.  SemaphoreRequest*=RECORD
  67.   link*:MinNode;
  68.   waiter*:TaskPtr
  69.  END;
  70.  SignalSemaphore*=RECORD
  71.   link*:Node;
  72.   nestCount*:INTEGER;
  73.   waitQueue*:MinList;
  74.   multipleLink*:SemaphoreRequest;
  75.   owner*:TaskPtr;
  76.   queueCount*:INTEGER
  77.  END;
  78.  Message*=RECORD
  79.   node*:Node;
  80.   replyPort*:MsgPortPtr;
  81.   length*:INTEGER
  82.  END;
  83.  MessagePtr*=LONGINT;
  84.  Task*=RECORD
  85.   node:Node;
  86.   flags:SHORTINT;
  87.   state:SHORTINT;
  88.   idNestCnt:SHORTINT;
  89.   tdNestCnt:SHORTINT;
  90.   sigAlloc:SET;
  91.   sigWait:SET;
  92.   sigRecvd:SET;
  93.   sigExcept:SET;
  94.   trapAlloc:INTEGER;
  95.   trapAble:INTEGER;
  96.   exceptData:LONGINT;
  97.   exceptCode:LONGINT;
  98.   trapData:LONGINT;
  99.   trapCode:LONGINT;
  100.   spReg:LONGINT;
  101.   spLower:LONGINT;
  102.   spUpper:LONGINT;
  103.   switch:LONGINT;
  104.   launch:LONGINT;
  105.   memEntry:List;
  106.   userData:LONGINT
  107.  END;
  108.  Library*=RECORD
  109.     node*:Node;
  110.     flags*:SHORTINT;
  111.     pad*:SHORTINT;
  112.     negSize*:INTEGER;
  113.     posSize*:INTEGER;
  114.     version*:INTEGER;
  115.     revision*:INTEGER;
  116.     idString*:LONGINT;
  117.     sum*:LONGINT;
  118.     openCnt*:INTEGER
  119.  END;
  120.  LibraryPtr*=LONGINT;
  121.  DevicePtr*=LONGINT;
  122.   IORequest * = RECORD
  123.     message * : Message;
  124.     device  * : DevicePtr;          (* device node pointer  *)
  125.     unit    * : UnitPtr;            (* unit (driver private)*)
  126.     command * : INTEGER;    (* device command *)
  127.     flags   * : SHORTINT;
  128.     error   * : SHORTINT;           (* error or warning num *)
  129.   END;
  130.  IOStdReq * = RECORD
  131.   message * : Message;
  132.   device  * : DevicePtr;          (* device node pointer  *)
  133.   unit    * : UnitPtr;            (* unit (driver private)*)
  134.   command * : INTEGER;    (* device command *)
  135.   flags   * : SHORTINT;
  136.   error   * : SHORTINT;           (* error or warning num *)
  137.   actual  * : LONGINT;            (* actual number of bytes transferred *)
  138.   length  * : LONGINT;            (* requested number bytes transferred*)
  139.   data    * : LONGINT;            (* points to data area *)
  140.   offset  * : LONGINT;            (* offset for block structured devices *)
  141.  END;
  142.     MemPoolPtr*=LONGINT;
  143. PROCEDURE AllocMem*(size:LONGINT; reqs:SET):LONGINT;
  144.  r:A.Regs;
  145. BEGIN
  146.  r.d[0]:=size;
  147.  r.d[1]:=SYSTEM.VAL(LONGINT,reqs);
  148.  A.LibCall(execBase,-198,r);
  149.  RETURN r.d[0]
  150. END AllocMem;
  151. PROCEDURE FreeMem*(adr,size:LONGINT);
  152.  r:A.Regs;
  153. BEGIN
  154.  r.a[1]:=adr;
  155.  r.d[0]:=size;
  156.  A.LibCall(execBase,-210,r)
  157. END FreeMem;
  158. PROCEDURE CopyMemAPTR*(source,dest,size:LONGINT);
  159.  r:A.Regs;
  160. BEGIN
  161.  r.a[0]:=source;
  162.  r.a[1]:=dest;
  163.  r.d[0]:=size;
  164.  A.LibCall(execBase,-624,r)
  165. END CopyMemAPTR;
  166. PROCEDURE Forbid*();
  167.  r:A.Regs;
  168. BEGIN
  169.     A.LibCall(execBase, -132, r)
  170. END Forbid;
  171. PROCEDURE FindTask*(name:LONGINT):TaskPtr;
  172.  r:A.Regs;
  173. BEGIN
  174.  r.a[1]:=name;
  175.  A.LibCall(execBase,-294,r);
  176.  RETURN r.d[0]
  177. END FindTask;
  178. PROCEDURE Permit*();
  179.  r:A.Regs;
  180. BEGIN
  181.     A.LibCall(execBase, -138, r)
  182. END Permit;
  183. PROCEDURE SetTaskPri*(task: TaskPtr; pri: LONGINT): LONGINT;
  184.  r:A.Regs;
  185. BEGIN
  186.  r.a[1]:=task;
  187.  r.d[0]:=pri;
  188.  A.LibCall(execBase,-300,r);
  189.  RETURN r.d[0]
  190. END SetTaskPri;
  191. PROCEDURE OpenLibrary*(libName:ARRAY OF CHAR; version:LONGINT):LONGINT;
  192.  r:A.Regs;
  193. BEGIN
  194.  r.a[1]:=SYSTEM.ADR(libName);
  195.  r.d[0]:=version;
  196.  A.LibCall(execBase,-552,r);
  197.  RETURN r.d[0]
  198. END OpenLibrary;
  199. PROCEDURE OpenDevice*(devName:ARRAY OF CHAR; unit: LONGINT;
  200.         ioRequest: MessagePtr; flags: SET): SHORTINT;
  201.  r:A.Regs;
  202. BEGIN
  203.  r.a[0]:=SYSTEM.ADR(devName);
  204.  r.d[0]:=unit;
  205.  r.a[1]:=SYSTEM.VAL(LONGINT,ioRequest);
  206.  r.d[1]:=SYSTEM.VAL(LONGINT,flags);
  207.  A.LibCall(execBase,-444,r);
  208.  RETURN SHORT(SHORT(r.d[0]))
  209. END OpenDevice;
  210. PROCEDURE WaitPort*(port: MsgPortPtr);
  211.  r:A.Regs;
  212. BEGIN
  213.  r.a[0] := SYSTEM.VAL(LONGINT, port);
  214.  A.LibCall(execBase,-384,r)
  215. END WaitPort;
  216. PROCEDURE GetMsg*(port: MsgPortPtr): MessagePtr;
  217.  r:A.Regs;
  218. BEGIN
  219.  r.a[0] := SYSTEM.VAL(LONGINT, port);
  220.  A.LibCall(execBase,-372,r);
  221.  RETURN SYSTEM.VAL(MessagePtr, r.d[0])
  222. END GetMsg;
  223. PROCEDURE ReplyMsg*(msg: MessagePtr);
  224.  r:A.Regs;
  225. BEGIN
  226.  r.a[1] := SYSTEM.VAL(LONGINT, msg);
  227.  A.LibCall(execBase,-378,r)
  228. END ReplyMsg;
  229. PROCEDURE CloseDevice*(ioRequest: MessagePtr);
  230.   VAR r:A.Regs;
  231. BEGIN
  232.   r.a[1]:=ioRequest;
  233.   A.LibCall(execBase,-450,r)
  234. END CloseDevice;
  235. PROCEDURE DoIO*(ioRequest: MessagePtr): SHORTINT;
  236.   VAR r:A.Regs;
  237. BEGIN
  238.   r.a[1]:=ioRequest;
  239.   A.LibCall(execBase,-456,r);
  240.   RETURN SHORT(SHORT(r.d[0]))
  241. END DoIO;
  242. PROCEDURE SendIO*(ioRequest: MessagePtr);
  243.   VAR r:A.Regs;
  244. BEGIN
  245.   r.a[1]:=ioRequest;
  246.   A.LibCall(execBase,-462,r)
  247. END SendIO;
  248. PROCEDURE CheckIO*(ioRequest: MessagePtr): BOOLEAN;
  249.   VAR r:A.Regs;
  250. BEGIN
  251.   r.a[1]:=ioRequest;
  252.   A.LibCall(execBase,-468,r);
  253.   RETURN r.d[0]#0
  254. END CheckIO;
  255. PROCEDURE WaitIO*(ioRequest: MessagePtr): SHORTINT;
  256.   VAR r:A.Regs;
  257. BEGIN
  258.   r.a[1]:=ioRequest;
  259.   A.LibCall(execBase,-474,r);
  260.   RETURN SHORT(SHORT(r.d[0]))
  261. END WaitIO;
  262. PROCEDURE AbortIO*(ioRequest: MessagePtr): LONGINT;
  263.   VAR r:A.Regs;
  264. BEGIN
  265.   r.a[1]:=ioRequest;
  266.   A.LibCall(execBase,-480,r);
  267.   RETURN r.d[0]
  268. END AbortIO;
  269. PROCEDURE CreateMsgPort*(): MsgPortPtr;
  270.   VAR r:A.Regs;
  271. BEGIN
  272.   A.LibCall(execBase,-666,r);
  273.   RETURN r.d[0]
  274. END CreateMsgPort;
  275. PROCEDURE DeleteMsgPort*(port: MsgPortPtr);
  276.   VAR r:A.Regs;
  277. BEGIN
  278.   r.a[0]:=port;
  279.   A.LibCall(execBase,-672,r)
  280. END DeleteMsgPort;
  281. PROCEDURE CreateIORequest*(port: MsgPortPtr; size: LONGINT): MessagePtr;
  282.   VAR r:A.Regs;
  283. BEGIN
  284.   r.a[0]:=port;
  285.   r.d[0]:=size;
  286.   A.LibCall(execBase,-654,r);
  287.   RETURN r.d[0]
  288. END CreateIORequest;
  289. PROCEDURE DeleteIORequest*(iorequest: MessagePtr);
  290.   VAR r:A.Regs;
  291. BEGIN
  292.   r.a[0]:=iorequest;
  293.   A.LibCall(execBase,-660,r)
  294. END DeleteIORequest;
  295. (* Memory Pool Procedures *)
  296. PROCEDURE CreatePool*(reqs: SET; puddleSize, threshSize: LONGINT):MemPoolPtr;
  297.     VAR r:A.Regs;
  298. BEGIN
  299.     r.d[0]:=SYSTEM.VAL(LONGINT,reqs);
  300.     r.d[1]:=puddleSize;
  301.     r.d[2]:=threshSize;
  302.     A.LibCall(execBase,-696,r);
  303.     RETURN r.d[0]
  304. END CreatePool;
  305. PROCEDURE DeletePool*(pool: MemPoolPtr);
  306.     VAR r:A.Regs;
  307. BEGIN
  308.     r.a[0]:=pool;
  309.     A.LibCall(execBase,-702,r)
  310. END DeletePool;
  311. PROCEDURE AllocPooled*(pool: MemPoolPtr; size: LONGINT):LONGINT;
  312.     VAR r:A.Regs;
  313. BEGIN
  314.     r.a[0]:=pool;
  315.     r.d[0]:=size;
  316.     A.LibCall(execBase,-708,r);
  317.     RETURN r.d[0]
  318. END AllocPooled;
  319. PROCEDURE FreePooled*(pool: MemPoolPtr; adr, size: LONGINT);
  320.     VAR r:A.Regs;
  321. BEGIN
  322.     r.a[0]:=pool;
  323.     r.a[1]:=adr;
  324.     r.d[0]:=size;
  325.     A.LibCall(execBase,-714,r)
  326. END FreePooled;
  327. PROCEDURE Init;
  328.  LibraryPtr=POINTER TO Library;
  329.  lib:LibraryPtr;
  330. BEGIN
  331.  execBase:=A.ExecBase();
  332.  lib:=SYSTEM.VAL(LibraryPtr,execBase);
  333.  execVersion:=lib.version
  334. END Init;
  335. BEGIN
  336.  Init
  337. END AmigaExec.
  338.