|##########| |#MAGIC #|CLABLLAF |#PROJECT #|"ImportAll" |#PATHS #|"StdProject" |#FLAGS #|xx-x-x--x---xxx----------------- |#USERSW #|-------------------------------- |#USERMASK#|-------------------------------- |#SWITCHES#|xx---xxxxx------ |##########| DEFINITION MODULE FileSystem; FROM System IMPORT Regs; FROM Resources IMPORT NotEnoughMemory,ContextPtr; FROM T_Dos IMPORT DosExceptionGrp; EXCEPTION BadFile : "Bad filehandle"; NoInFile : "InFile not opened"; NoOutFile : "OutFile not opened"; OutFileOpenedTwice : "OutFile allready open"; InFileOpenedTwice : "InFile allready open"; GROUP FsExceptionGrp = NoInFile,NoOutFile,NotEnoughMemory,T_Dos.DosExceptionGrp; TYPE File = HIDDEN; (*============== Global File =================================================*) | | Funktion : Öffnet eine Datei | Parameter : f <-> Pointer der die Datei spezifiziert | name <- Name der Datei | new <- Flag, ob eine neue oder eine bestehende Datei | geöffnet werden soll | size <- Größe des Puffers für dei Datei in Bytes | context <- Context, zu dem das File geöffnet werden soll, | ist dieser NIL, wird der ActContext verwendet. | PROCEDURE Open(VAR f : File; REF name : STRING; new : BOOLEAN := FALSE; size : LONGINT := $1000; context : ContextPtr := NIL); | | Funktion : Schließt eine Datei | Parameter : f <- Zeiger der Datei, dei geschlossen werden soll | Bemerkung : Am Programmende sollten alle Files wieder geschlossen werden | PROCEDURE Close(VAR f : File); | | Funktion : Liefert die aktuelle Länge eines Files | Parameter : f <- File dessen Länge ermittelt werden soll | -> Länge des Files in Bytes | PROCEDURE Length(f : File):LONGINT; (*============== Input =======================================================*) | | Funktion : Ließt ein Zeichen | Parameter : f <- File von dem gelesen werden soll | c -> Gelesenes Zeichen. | PROCEDURE Read(f : File;VAR c : CHAR); | | Funktion : Ließt einen beliebigen Typen fester Länge | Parameter : f <- File von dem gelesen werden soll | block -> gelesene Variable. | PROCEDURE ReadBlock(f : File;VAR block : ANYTYPE); | | Funktion : Ließt eine Anzahl Bytes und schreibt sie in den Speicher | Parameter : f <- File von dem gelesen werden soll | pos -> Stellen ab der die Daten in den Speicher geschrieben | werden sollen. | len -> Anzahl der Zeichen, die gelesen werden sollen. | PROCEDURE ReadBytes(f : File;pos : ANYPTR;len : LONGINT); (*============== Output ======================================================*) | | Funktion : Schreibt ein Zeichen | Parameter : f <- File in das geschrieben werden soll | c -> zu schreibendes Zeichen. | PROCEDURE Write(f : File;c : CHAR); | | Funktion : Schreibt einen beliebigen Typen fester Länge | Parameter : f <- File in das geschrieben werden soll. | block -> zu schreibenden Variable. | PROCEDURE WriteBlock(f : File;REF block : ANYTYPE); | | Funktion : Schreibt eine Anzahl Bytes aus dem Speicher auf Disk. | Parameter : f <- File in das geschrieben werden soll. | pos -> Speicherstellen von der ab die Daten geschrieben | werden sollen. | len -> Anzahl der Zeichen, die gschrieben sollen. | PROCEDURE WriteBytes(f : File;pos : ANYPTR;len : LONGINT); | | | Funktion : Gibt die Position des internen Schreib/Lesezeiger relativ zum | Dateianfang aus. | Parameter : f <- File von dem man die Information haben will. | -> Position in Bytes. | PROCEDURE Pos(f : File):LONGINT; | | Funktion : Setz den internen Schreib/Lesezeiger auf die angegebene | Position relativ zum Dateianfang. | Parameter : f <- File dessen Zeiger versetzt werden soll. | pos -> neue Position in Bytes. | PROCEDURE SetPos(f : File;pos : LONGINT); | | Funktion : Liefert TRUE zurück, wenn versucht wurde über das Dateiende | hinaus zu lesen. | Parameter : f <- File das geprüft werden soll | -> TRUE wenn Dateiende erreicht wurde. | PROCEDURE Eof(f : File):BOOLEAN; GROUP FileIOGrp = Open,File,Close,Length,Read,ReadBlock, ReadBytes,Write,WriteBlock,WriteBytes,Pos,SetPos,Eof; (*============== Quickfiles ==================================================*) | | Die folgenden Quickfile Funktionen entsprechen in ihrer Funktion den oben | aufgeführten näheres finden Sie in ihrem Handbuch. | PROCEDURE Q_OpenInFile(REF name : STRING; buffSize : LONGINT; context : ContextPtr:=NIL); PROCEDURE Q_OpenOutFile(REF name : STRING; buffSize : LONGINT; context : ContextPtr:=NIL); PROCEDURE Q_CloseInFile; PROCEDURE Q_CloseOutFile; | | Funktion : Prüft ob das nächste Zeichen gleich dem angegebenen ist. | Parameter : c <- Zeichen auf das getestet werden soll. | -> TRUE wenn das nächste Zeichen mit c übereinstimmt | PROCEDURE Q_Test(c : CHAR):BOOLEAN; PROCEDURE Q_Read(VAR c IN A0 : CHAR); PROCEDURE Q_ReadBlock(VAR block : ANYTYPE); PROCEDURE Q_ReadBytes(pos : ANYPTR;len : LONGINT); PROCEDURE Q_Write(c IN D4 : CHAR); PROCEDURE Q_WriteBlock(REF block : ANYTYPE); PROCEDURE Q_WriteBytes(pos : ANYPTR;len : LONGINT); PROCEDURE Q_GetInPos():LONGINT; PROCEDURE Q_SetInPos(pos : LONGINT); PROCEDURE Q_GetOutPos():LONGINT; PROCEDURE Q_SetOutPos(pos : LONGINT); GROUP QuickIOGrp = Q_OpenInFile,Q_OpenOutFile,Q_CloseInFile,Q_CloseOutFile,Q_Test, Q_Read,Q_ReadBlock,Q_ReadBytes,Q_Write, Q_WriteBlock,Q_WriteBytes,Q_GetInPos,Q_SetInPos,Q_GetOutPos, Q_SetOutPos; All = FileIOGrp,QuickIOGrp; END FileSystem.