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 >
Wrap
Oberon Text
|
1977-12-31
|
10KB
|
376 lines
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.