Syntax10.Scn.Fnt Syntax10b.Scn.Fnt MODULE AmigaDos; (*shml/cn 24-May-1993 *) IMPORT SYSTEM, A:=AmigaBase,E:=AmigaExec, U := AmigaUtility; CONST beginning*=-1; dosName*="dos.library"; end*=1; newFile*=1006; oldFile*=1005; readWrite*=1004; objectInUse*=202; renameAcrossDevices*=215; same*=0; sharedLock*=-2; ticksPerSecond*=50; globalOnly*=8; binaryVar*=10; dontNullTerm*=11; saveVar*=12; protDelete*=0; protExecute*=1; protWrite*=2; protRead*=3; protArchive*=4; protPure*=5; protScript*=6; (* types for AllocDosObject/FreeDosObject *) fileHandle*=0; exAllControl*=1; fib*=2; stdpkt*=3; cli*=4; rdArgs*=5; Some Pointer without their records CommandLineInterfacePtr=LONGINT; ProcessId=LONGINT; Date*=RECORD days*:LONGINT; minute*:LONGINT; tick*:LONGINT; END; FileHandlePtr*=LONGINT; (* NOTE: This is a BPTR *) FileLockPtr*=LONGINT; (* NOTE: This is a BPTR *) FileInfoBlock*=RECORD diskKey*:LONGINT; dirEntryType*:LONGINT; fileName*:ARRAY 108 OF CHAR; protection*:SET; entryType*:LONGINT; size*:LONGINT; numBlock*:LONGINT; date*:Date; comment*:ARRAY 80 OF CHAR; ownerUID*:INTEGER; ownerGID*:INTEGER; reserved*:ARRAY 32 OF CHAR; END; FileInfoBlockPtr*=LONGINT; Process*=RECORD task*:E.Task; msgPort*:E.MsgPort; pad*:INTEGER; segList*:LONGINT; stackSize*:LONGINT; globVec*:LONGINT; taskNum*:LONGINT; stackBase*:LONGINT; result2*:LONGINT; currentDir*:FileLockPtr; cis*:FileHandlePtr; cos*:FileHandlePtr; consoleTask*:ProcessId; fileSystemTask*:ProcessId; cli*:CommandLineInterfacePtr; returnAddr*:LONGINT; pktWait*:LONGINT; windowPtr*:LONGINT; homeDir*:FileLockPtr; flags*:SET; exitCode*:LONGINT; exitData*:LONGINT; arguments*:LONGINT; localVars*:E.MinList; shellPrivate*:LONGINT; ces*:FileHandlePtr; END; CONST sysDummy*=U.user+32; sysInput*=sysDummy+1; sysOutput*=sysDummy+2; sysASynch*=sysDummy+3; sysUserShell*=sysDummy+4; sysCustomShell*=sysDummy+5; npDummy*=U.user+1000; npCloseOutput*=npDummy+7; dosBase:LONGINT; dosVersion-:INTEGER; PROCEDURE AddPart*(VAR dir:ARRAY OF CHAR; filename:ARRAY OF CHAR; size:LONGINT):BOOLEAN; r:A.Regs; BEGIN r.d[1]:=SYSTEM.ADR(dir); r.d[2]:=SYSTEM.ADR(filename); r.d[3]:=size; A.LibCall(dosBase,-882,r); RETURN r.d[0]#0; END AddPart; PROCEDURE AllocDosObject*(type, tags: LONGINT): LONGINT; r: A.Regs; BEGIN r.d[1]:=type; r.d[2]:=tags; A.LibCall(dosBase,-228,r); RETURN r.d[0]; END AllocDosObject; PROCEDURE Close*(file:FileHandlePtr):BOOLEAN; r:A.Regs; BEGIN r.d[1]:=file; A.LibCall(dosBase,-36,r); RETURN r.d[0]#0; END Close; PROCEDURE CurrentDir*(lock: FileLockPtr):FileLockPtr; r:A.Regs; BEGIN r.d[1]:=lock; A.LibCall(dosBase,-126,r); RETURN r.d[0]; END CurrentDir; PROCEDURE CreateDir*(name: ARRAY OF CHAR): FileLockPtr; r: A.Regs; BEGIN r.d[1] := SYSTEM.ADR(name); A.LibCall(dosBase,-120,r); RETURN r.d[0]; END CreateDir; PROCEDURE DateStamp*(VAR date:Date); r:A.Regs; BEGIN r.d[1]:=SYSTEM.ADR(date); A.LibCall(dosBase,-192,r); END DateStamp; PROCEDURE Delay*(w: LONGINT); r:A.Regs; BEGIN r.d[1]:=w; A.LibCall(dosBase, -198, r); END Delay; PROCEDURE DeleteFile*(name:ARRAY OF CHAR):BOOLEAN; r:A.Regs; BEGIN r.d[1]:=SYSTEM.ADR(name); A.LibCall(dosBase,-72,r); RETURN r.d[0]#0; END DeleteFile; PROCEDURE DupLockFromFH*(fh:FileHandlePtr):FileLockPtr; r:A.Regs; BEGIN r.d[1]:=fh; A.LibCall(dosBase,-372,r); RETURN r.d[0]; END DupLockFromFH; PROCEDURE Examine*(lock:FileLockPtr; VAR info:FileInfoBlock):BOOLEAN; (* NOTE: info has to be longword aligned. *) r:A.Regs; BEGIN r.d[1]:=lock; r.d[2]:=SYSTEM.ADR(info); A.LibCall(dosBase,-102,r); RETURN r.d[0]#0; END Examine; PROCEDURE ExNext*(lock: FileLockPtr; VAR info: FileInfoBlock): BOOLEAN; r: A.Regs; BEGIN r.d[1]:=lock; r.d[2]:=SYSTEM.ADR(info); A.LibCall(dosBase,-108,r); RETURN r.d[0]#0; END ExNext; PROCEDURE FGets*(fh: FileHandlePtr; VAR buf: ARRAY OF CHAR; buflen: LONGINT): LONGINT; r: A.Regs; BEGIN r.d[1]:=fh; r.d[2]:=SYSTEM.ADR(buf); r.d[3]:=buflen; A.LibCall(dosBase,-336,r); RETURN r.d[0]; END FGets; PROCEDURE FilePart*(VAR path, fileName: ARRAY OF CHAR); TYPE StrPtr = POINTER TO ARRAY 1 OF CHAR; VAR r:A.Regs; p : StrPtr; BEGIN [1]:=SYSTEM.ADR(path); A.LibCall(dosBase,-870,r p := SYSTEM.VAL(StrPtr, r.d [0]); COPY(p^, fileName) END FilePart; PROCEDURE FreeDosObject*(type: LONGINT; ptr: LONGINT); r: A.Regs; BEGIN r.d[1]:=type; r.d[2]:=ptr; A.LibCall(dosBase,-234,r); RETURN; END FreeDosObject; PROCEDURE GetCurrentDirName*(VAR buf: ARRAY OF CHAR; len: LONGINT): BOOLEAN; r: A.Regs; BEGIN r.d[1]:=SYSTEM.ADR(buf); r.d[2]:=len; A.LibCall(dosBase,-564,r); RETURN r.d[0]#0; END GetCurrentDirName; PROCEDURE GetVar*(name:ARRAY OF CHAR; buffer:LONGINT; size:LONGINT; flags:SET):LONGINT; r:A.Regs; BEGIN r.d[1]:=SYSTEM.ADR(name); r.d[2]:=buffer; r.d[3]:=size; r.d[4]:=SYSTEM.VAL(LONGINT,flags); A.LibCall(dosBase,-906,r); RETURN r.d[0]; END GetVar; PROCEDURE IoErr*():LONGINT; r:A.Regs; BEGIN A.LibCall(dosBase,-132,r); RETURN r.d[0]; END IoErr; PROCEDURE Lock*(name:ARRAY OF CHAR; type:LONGINT):FileLockPtr; r:A.Regs; BEGIN r.d[1]:=SYSTEM.ADR(name); r.d[2]:=type; A.LibCall(dosBase,-84,r); RETURN r.d[0]; END Lock; PROCEDURE NameFromFH*(fh:FileHandlePtr; VAR name:ARRAY OF CHAR):BOOLEAN; r:A.Regs; BEGIN r.d[1]:=fh; r.d[2]:=SYSTEM.ADR(name); r.d[3]:=LEN(name); A.LibCall(dosBase,-408,r); RETURN r.d[0]#0; END NameFromFH; PROCEDURE NameFromLock*(lock:FileLockPtr; VAR name:ARRAY OF CHAR):BOOLEAN; r:A.Regs; BEGIN r.d[1]:=lock; r.d[2]:=SYSTEM.ADR(name); r.d[3]:=LEN(name); A.LibCall(dosBase,-402,r); RETURN r.d[0]#0; END NameFromLock; PROCEDURE Open*(name:ARRAY OF CHAR; accessMode:LONGINT):FileHandlePtr; r:A.Regs; BEGIN r.d[1]:=SYSTEM.ADR(name); r.d[2]:=accessMode; A.LibCall(dosBase,-30,r); RETURN r.d[0]; END Open; PROCEDURE Output*():FileHandlePtr; r:A.Regs; BEGIN A.LibCall(dosBase,-60,r); RETURN r.d[0]; END Output; PROCEDURE Read*(file:FileHandlePtr; VAR buffer:ARRAY OF SYSTEM.BYTE; length:LONGINT):LONGINT; r:A.Regs; BEGIN r.d[1]:=file; r.d[2]:=SYSTEM.ADR(buffer); r.d[3]:=length; A.LibCall(dosBase,-42,r); RETURN r.d[0]; END Read; PROCEDURE Rename*(oldName,newName:ARRAY OF CHAR):BOOLEAN; r:A.Regs; BEGIN r.d[1]:=SYSTEM.ADR(oldName); r.d[2]:=SYSTEM.ADR(newName); A.LibCall(dosBase,-78,r); RETURN r.d[0]#0; END Rename; PROCEDURE SameLock*(lock1,lock2:FileLockPtr):LONGINT; r:A.Regs; BEGIN r.d[1]:=lock1; r.d[2]:=lock2; A.LibCall(dosBase,-420,r); RETURN r.d[0]; END SameLock; PROCEDURE Seek*(file:FileHandlePtr; position,mode:LONGINT):LONGINT; r:A.Regs; BEGIN r.d[1]:=file; r.d[2]:=position; r.d[3]:=mode; A.LibCall(dosBase,-66,r); RETURN r.d[0]; END Seek; PROCEDURE SetCurrentDirName*(name: ARRAY OF CHAR): BOOLEAN; r: A.Regs; BEGIN r.d[1]:=SYSTEM.ADR(name); A.LibCall(dosBase,-558,r); RETURN r.d[0]#0; END SetCurrentDirName; PROCEDURE SetFileSize*(fh:FileHandlePtr; offset,mode:LONGINT):LONGINT; r:A.Regs; BEGIN r.d[1]:=fh; r.d[2]:=offset; r.d[3]:=mode; A.LibCall(dosBase,-456,r); RETURN r.d[0]; END SetFileSize; PROCEDURE SetProtection*(name:ARRAY OF CHAR; mask:SET):BOOLEAN; r:A.Regs; BEGIN r.d[1]:=SYSTEM.ADR(name); r.d[2]:=SYSTEM.VAL(LONGINT,mask); A.LibCall(dosBase,-186,r); RETURN r.d[0]#0; END SetProtection; PROCEDURE SetVar*(name:ARRAY OF CHAR; buffer:LONGINT; size:LONGINT; flags:SET):BOOLEAN; r:A.Regs; BEGIN r.d[1]:=SYSTEM.ADR(name); r.d[2]:=buffer; r.d[3]:=size; r.d[4]:=SYSTEM.VAL(LONGINT,flags); A.LibCall(dosBase,-900,r); RETURN r.d[0]#0; END SetVar; PROCEDURE System*(command:ARRAY OF CHAR; VAR tagList:ARRAY OF U.TagItem):LONGINT; r:A.Regs; BEGIN r.d[1]:=SYSTEM.ADR(command); r.d[2]:=SYSTEM.ADR(tagList); A.LibCall(dosBase,-606,r); RETURN r.d[0]; END System; PROCEDURE UnLock*(lock:FileLockPtr); r:A.Regs; BEGIN r.d[1]:=lock; A.LibCall(dosBase,-90,r); END UnLock; PROCEDURE Write*(file:FileHandlePtr; VAR buffer:ARRAY OF SYSTEM.BYTE; length:LONGINT):LONGINT; r:A.Regs; BEGIN r.d[1]:=file; r.d[2]:=SYSTEM.ADR(buffer); r.d[3]:=length; A.LibCall(dosBase,-48,r); RETURN r.d[0]; END Write; PROCEDURE Init; LibraryPtr=POINTER TO E.Library; lib:LibraryPtr; BEGIN dosBase:=E.OpenLibrary(dosName,37); IF dosBase=0 THEN HALT(99) END; lib:=SYSTEM.VAL(LibraryPtr,dosBase); dosVersion:=lib.version; END Init; BEGIN Init; END AmigaDos.