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

  1. Syntax10.Scn.Fnt
  2. Syntax10b.Scn.Fnt
  3. MODULE AmigaDos; (*shml/cn 24-May-1993 *)
  4. IMPORT
  5.     SYSTEM, A:=AmigaBase,E:=AmigaExec, U := AmigaUtility;
  6. CONST
  7.     beginning*=-1;
  8.     dosName*="dos.library";
  9.     end*=1;
  10.     newFile*=1006;
  11.     oldFile*=1005;
  12.     readWrite*=1004;
  13.     objectInUse*=202;
  14.     renameAcrossDevices*=215;
  15.     same*=0;
  16.     sharedLock*=-2;
  17.     ticksPerSecond*=50;
  18.     globalOnly*=8;
  19.     binaryVar*=10;
  20.     dontNullTerm*=11;
  21.     saveVar*=12;
  22.     protDelete*=0;
  23.     protExecute*=1;
  24.     protWrite*=2;
  25.     protRead*=3;
  26.     protArchive*=4;
  27.     protPure*=5;
  28.     protScript*=6;
  29.     (* types for AllocDosObject/FreeDosObject *)
  30.      fileHandle*=0; 
  31.      exAllControl*=1; 
  32.      fib*=2;
  33.      stdpkt*=3;
  34.      cli*=4;
  35.      rdArgs*=5;
  36.         Some Pointer without their records
  37.     CommandLineInterfacePtr=LONGINT;
  38.     ProcessId=LONGINT;
  39.     Date*=RECORD
  40.         days*:LONGINT;
  41.         minute*:LONGINT;
  42.         tick*:LONGINT;
  43.     END;
  44.     FileHandlePtr*=LONGINT; (* NOTE: This is a BPTR *)
  45.     FileLockPtr*=LONGINT; (* NOTE: This is a BPTR *)
  46.     FileInfoBlock*=RECORD
  47.         diskKey*:LONGINT;
  48.         dirEntryType*:LONGINT;
  49.         fileName*:ARRAY 108 OF CHAR;
  50.         protection*:SET;
  51.         entryType*:LONGINT;
  52.         size*:LONGINT;
  53.         numBlock*:LONGINT;
  54.         date*:Date;
  55.         comment*:ARRAY 80 OF CHAR;
  56.         ownerUID*:INTEGER;
  57.         ownerGID*:INTEGER;
  58.         reserved*:ARRAY 32 OF CHAR;
  59.     END;
  60.     FileInfoBlockPtr*=LONGINT;
  61.     Process*=RECORD
  62.         task*:E.Task;
  63.         msgPort*:E.MsgPort;
  64.         pad*:INTEGER;
  65.         segList*:LONGINT;
  66.         stackSize*:LONGINT;
  67.         globVec*:LONGINT;
  68.         taskNum*:LONGINT;
  69.         stackBase*:LONGINT;
  70.         result2*:LONGINT;
  71.         currentDir*:FileLockPtr;
  72.         cis*:FileHandlePtr;
  73.         cos*:FileHandlePtr;
  74.         consoleTask*:ProcessId;
  75.         fileSystemTask*:ProcessId;
  76.         cli*:CommandLineInterfacePtr;
  77.         returnAddr*:LONGINT;
  78.         pktWait*:LONGINT;
  79.         windowPtr*:LONGINT;
  80.         homeDir*:FileLockPtr;
  81.         flags*:SET;
  82.         exitCode*:LONGINT;
  83.         exitData*:LONGINT;
  84.         arguments*:LONGINT;
  85.         localVars*:E.MinList;
  86.         shellPrivate*:LONGINT;
  87.         ces*:FileHandlePtr;
  88.     END;
  89. CONST
  90.     sysDummy*=U.user+32;
  91.     sysInput*=sysDummy+1;
  92.     sysOutput*=sysDummy+2;
  93.     sysASynch*=sysDummy+3;
  94.     sysUserShell*=sysDummy+4;
  95.     sysCustomShell*=sysDummy+5;
  96.     npDummy*=U.user+1000;
  97.     npCloseOutput*=npDummy+7;
  98.     dosBase:LONGINT;
  99.     dosVersion-:INTEGER;
  100. PROCEDURE AddPart*(VAR dir:ARRAY OF CHAR; filename:ARRAY OF CHAR; size:LONGINT):BOOLEAN;
  101.     r:A.Regs;
  102. BEGIN
  103.     r.d[1]:=SYSTEM.ADR(dir);
  104.     r.d[2]:=SYSTEM.ADR(filename);
  105.     r.d[3]:=size;
  106.     A.LibCall(dosBase,-882,r);
  107.     RETURN r.d[0]#0;
  108. END AddPart;
  109. PROCEDURE AllocDosObject*(type, tags: LONGINT): LONGINT;
  110.     r: A.Regs;
  111. BEGIN
  112.     r.d[1]:=type;
  113.     r.d[2]:=tags;
  114.     A.LibCall(dosBase,-228,r);
  115.     RETURN r.d[0];
  116. END AllocDosObject;
  117. PROCEDURE Close*(file:FileHandlePtr):BOOLEAN;
  118.     r:A.Regs;
  119. BEGIN
  120.     r.d[1]:=file;
  121.     A.LibCall(dosBase,-36,r);
  122.     RETURN r.d[0]#0;
  123. END Close;
  124. PROCEDURE CurrentDir*(lock: FileLockPtr):FileLockPtr;
  125.     r:A.Regs;
  126. BEGIN
  127.     r.d[1]:=lock;
  128.     A.LibCall(dosBase,-126,r);
  129.     RETURN r.d[0];
  130. END CurrentDir;
  131. PROCEDURE CreateDir*(name: ARRAY OF CHAR): FileLockPtr;
  132.     r: A.Regs;
  133. BEGIN
  134.     r.d[1] := SYSTEM.ADR(name);
  135.     A.LibCall(dosBase,-120,r);
  136.     RETURN r.d[0];
  137. END CreateDir;
  138. PROCEDURE DateStamp*(VAR date:Date);
  139.     r:A.Regs;
  140. BEGIN
  141.     r.d[1]:=SYSTEM.ADR(date);
  142.     A.LibCall(dosBase,-192,r);
  143. END DateStamp;
  144. PROCEDURE Delay*(w: LONGINT);
  145.     r:A.Regs;
  146. BEGIN
  147.     r.d[1]:=w;
  148.     A.LibCall(dosBase, -198, r);
  149. END Delay;
  150. PROCEDURE DeleteFile*(name:ARRAY OF CHAR):BOOLEAN;
  151.     r:A.Regs;
  152. BEGIN
  153.     r.d[1]:=SYSTEM.ADR(name);
  154.     A.LibCall(dosBase,-72,r);
  155.     RETURN r.d[0]#0;
  156. END DeleteFile;
  157. PROCEDURE DupLockFromFH*(fh:FileHandlePtr):FileLockPtr;
  158.     r:A.Regs;
  159. BEGIN
  160.     r.d[1]:=fh;
  161.     A.LibCall(dosBase,-372,r);
  162.     RETURN r.d[0];
  163. END DupLockFromFH;
  164. PROCEDURE Examine*(lock:FileLockPtr; VAR info:FileInfoBlock):BOOLEAN;
  165. (* NOTE: info has to be longword aligned. *)
  166.     r:A.Regs;
  167. BEGIN
  168.     r.d[1]:=lock;
  169.     r.d[2]:=SYSTEM.ADR(info);
  170.     A.LibCall(dosBase,-102,r);
  171.     RETURN r.d[0]#0;
  172. END Examine;
  173. PROCEDURE ExNext*(lock: FileLockPtr; VAR info: FileInfoBlock): BOOLEAN;
  174.     r: A.Regs;
  175. BEGIN
  176.     r.d[1]:=lock;
  177.     r.d[2]:=SYSTEM.ADR(info);
  178.     A.LibCall(dosBase,-108,r);
  179.     RETURN r.d[0]#0;
  180. END ExNext;
  181. PROCEDURE FGets*(fh: FileHandlePtr; VAR buf: ARRAY OF CHAR; buflen: LONGINT): LONGINT;
  182.     r: A.Regs;
  183. BEGIN
  184.     r.d[1]:=fh;
  185.     r.d[2]:=SYSTEM.ADR(buf);
  186.     r.d[3]:=buflen;
  187.     A.LibCall(dosBase,-336,r);
  188.     RETURN r.d[0];
  189. END FGets;
  190. PROCEDURE FilePart*(VAR path, fileName: ARRAY OF CHAR);
  191. TYPE StrPtr = POINTER TO ARRAY 1 OF CHAR;
  192. VAR r:A.Regs; p
  193. : StrPtr;
  194. BEGIN
  195. [1]:=SYSTEM.ADR(path);
  196.     A.LibCall(dosBase,-870,r
  197.     p := SYSTEM.VAL(StrPtr, r.d
  198. [0]);
  199.     COPY(p^, fileName)
  200. END FilePart;
  201. PROCEDURE FreeDosObject*(type: LONGINT; ptr: LONGINT);
  202.     r: A.Regs;
  203. BEGIN
  204.     r.d[1]:=type;
  205.     r.d[2]:=ptr;
  206.     A.LibCall(dosBase,-234,r);
  207.     RETURN;
  208. END FreeDosObject;
  209. PROCEDURE GetCurrentDirName*(VAR buf: ARRAY OF CHAR; len: LONGINT): BOOLEAN;
  210.     r: A.Regs;
  211. BEGIN
  212.     r.d[1]:=SYSTEM.ADR(buf);
  213.     r.d[2]:=len;
  214.     A.LibCall(dosBase,-564,r);
  215.     RETURN r.d[0]#0;
  216. END GetCurrentDirName;    
  217. PROCEDURE GetVar*(name:ARRAY OF CHAR; buffer:LONGINT; size:LONGINT; flags:SET):LONGINT;
  218.     r:A.Regs;
  219. BEGIN
  220.     r.d[1]:=SYSTEM.ADR(name);
  221.     r.d[2]:=buffer;
  222.     r.d[3]:=size;
  223.     r.d[4]:=SYSTEM.VAL(LONGINT,flags);
  224.     A.LibCall(dosBase,-906,r);
  225.     RETURN r.d[0];
  226. END GetVar;
  227. PROCEDURE IoErr*():LONGINT;
  228.     r:A.Regs;
  229. BEGIN
  230.     A.LibCall(dosBase,-132,r);
  231.     RETURN r.d[0];
  232. END IoErr;
  233. PROCEDURE Lock*(name:ARRAY OF CHAR; type:LONGINT):FileLockPtr;
  234.     r:A.Regs;
  235. BEGIN
  236.     r.d[1]:=SYSTEM.ADR(name);
  237.     r.d[2]:=type;
  238.     A.LibCall(dosBase,-84,r);
  239.     RETURN r.d[0];
  240. END Lock;
  241. PROCEDURE NameFromFH*(fh:FileHandlePtr; VAR name:ARRAY OF CHAR):BOOLEAN;
  242.     r:A.Regs;
  243. BEGIN
  244.     r.d[1]:=fh;
  245.     r.d[2]:=SYSTEM.ADR(name);
  246.     r.d[3]:=LEN(name);
  247.     A.LibCall(dosBase,-408,r);
  248.     RETURN r.d[0]#0;
  249. END NameFromFH;
  250. PROCEDURE NameFromLock*(lock:FileLockPtr; VAR name:ARRAY OF CHAR):BOOLEAN;
  251.     r:A.Regs;
  252. BEGIN
  253.     r.d[1]:=lock;
  254.     r.d[2]:=SYSTEM.ADR(name);
  255.     r.d[3]:=LEN(name);
  256.     A.LibCall(dosBase,-402,r);
  257.     RETURN r.d[0]#0;
  258. END NameFromLock;
  259. PROCEDURE Open*(name:ARRAY OF CHAR; accessMode:LONGINT):FileHandlePtr;
  260.     r:A.Regs;
  261. BEGIN
  262.     r.d[1]:=SYSTEM.ADR(name);
  263.     r.d[2]:=accessMode;
  264.     A.LibCall(dosBase,-30,r);
  265.     RETURN r.d[0];
  266. END Open;
  267. PROCEDURE Output*():FileHandlePtr;
  268.     r:A.Regs;
  269. BEGIN
  270.     A.LibCall(dosBase,-60,r);
  271.     RETURN r.d[0];
  272. END Output;
  273. PROCEDURE Read*(file:FileHandlePtr; VAR buffer:ARRAY OF SYSTEM.BYTE; length:LONGINT):LONGINT;
  274.     r:A.Regs;
  275. BEGIN
  276.     r.d[1]:=file;
  277.     r.d[2]:=SYSTEM.ADR(buffer);
  278.     r.d[3]:=length;
  279.     A.LibCall(dosBase,-42,r);
  280.     RETURN r.d[0];
  281. END Read;
  282. PROCEDURE Rename*(oldName,newName:ARRAY OF CHAR):BOOLEAN;
  283.     r:A.Regs;
  284. BEGIN
  285.     r.d[1]:=SYSTEM.ADR(oldName);
  286.     r.d[2]:=SYSTEM.ADR(newName);
  287.     A.LibCall(dosBase,-78,r);
  288.     RETURN r.d[0]#0;
  289. END Rename;
  290. PROCEDURE SameLock*(lock1,lock2:FileLockPtr):LONGINT;
  291.     r:A.Regs;
  292. BEGIN
  293.     r.d[1]:=lock1;
  294.     r.d[2]:=lock2;
  295.     A.LibCall(dosBase,-420,r);
  296.     RETURN r.d[0];
  297. END SameLock;
  298. PROCEDURE Seek*(file:FileHandlePtr; position,mode:LONGINT):LONGINT;
  299.     r:A.Regs;
  300. BEGIN
  301.     r.d[1]:=file;
  302.     r.d[2]:=position;
  303.     r.d[3]:=mode;
  304.     A.LibCall(dosBase,-66,r);
  305.     RETURN r.d[0];
  306. END Seek;
  307. PROCEDURE SetCurrentDirName*(name: ARRAY OF CHAR): BOOLEAN;
  308.     r: A.Regs;
  309. BEGIN    
  310.     r.d[1]:=SYSTEM.ADR(name);
  311.     A.LibCall(dosBase,-558,r);
  312.     RETURN r.d[0]#0;
  313. END SetCurrentDirName;
  314. PROCEDURE SetFileSize*(fh:FileHandlePtr; offset,mode:LONGINT):LONGINT;
  315.     r:A.Regs;
  316. BEGIN
  317.     r.d[1]:=fh;
  318.     r.d[2]:=offset;
  319.     r.d[3]:=mode;
  320.     A.LibCall(dosBase,-456,r);
  321.     RETURN r.d[0];
  322. END SetFileSize;
  323. PROCEDURE SetProtection*(name:ARRAY OF CHAR; mask:SET):BOOLEAN;
  324.     r:A.Regs;
  325. BEGIN
  326.     r.d[1]:=SYSTEM.ADR(name);
  327.     r.d[2]:=SYSTEM.VAL(LONGINT,mask);
  328.     A.LibCall(dosBase,-186,r);
  329.     RETURN r.d[0]#0;
  330. END SetProtection;
  331. PROCEDURE SetVar*(name:ARRAY OF CHAR; buffer:LONGINT; size:LONGINT; flags:SET):BOOLEAN;
  332.     r:A.Regs;
  333. BEGIN
  334.     r.d[1]:=SYSTEM.ADR(name);
  335.     r.d[2]:=buffer;
  336.     r.d[3]:=size;
  337.     r.d[4]:=SYSTEM.VAL(LONGINT,flags);
  338.     A.LibCall(dosBase,-900,r);
  339.     RETURN r.d[0]#0;
  340. END SetVar;
  341. PROCEDURE System*(command:ARRAY OF CHAR; VAR tagList:ARRAY OF U.TagItem):LONGINT;
  342.     r:A.Regs;
  343. BEGIN
  344.     r.d[1]:=SYSTEM.ADR(command);
  345.     r.d[2]:=SYSTEM.ADR(tagList);
  346.     A.LibCall(dosBase,-606,r);
  347.     RETURN r.d[0];
  348. END System;
  349. PROCEDURE UnLock*(lock:FileLockPtr);
  350.     r:A.Regs;
  351. BEGIN
  352.     r.d[1]:=lock;
  353.     A.LibCall(dosBase,-90,r);
  354. END UnLock;
  355. PROCEDURE Write*(file:FileHandlePtr; VAR buffer:ARRAY OF SYSTEM.BYTE; length:LONGINT):LONGINT;
  356.     r:A.Regs;
  357. BEGIN
  358.     r.d[1]:=file;
  359.     r.d[2]:=SYSTEM.ADR(buffer);
  360.     r.d[3]:=length;
  361.     A.LibCall(dosBase,-48,r);
  362.     RETURN r.d[0];
  363. END Write;
  364. PROCEDURE Init;
  365.     LibraryPtr=POINTER TO E.Library;
  366.     lib:LibraryPtr;
  367. BEGIN
  368.     dosBase:=E.OpenLibrary(dosName,37);
  369.     IF dosBase=0 THEN HALT(99) END;
  370.     lib:=SYSTEM.VAL(LibraryPtr,dosBase);
  371.     dosVersion:=lib.version;
  372. END Init;
  373. BEGIN
  374.     Init;
  375. END AmigaDos.
  376.