DEFINITION MODULE FIO ; (* System : UNIX (gm2) Description: provides a simple buffered file input/output library. *) FROM SYSTEM IMPORT ADDRESS, BYTE ; EXPORT QUALIFIED (* types *) File, (* procedures *) OpenToRead, OpenToWrite, OpenForRandom, Close, EOF, EOLN, IsNoError, Exists, SetPositionFromBeginning, FindPosition, (* Rewind, *) ReadChar, ReadString, (* ReadLine, *) WriteChar, WriteString, WriteLine, WriteCardinal, ReadCardinal, (* WriteShort, ReadShort, *) UnReadChar, WriteNBytes, ReadNBytes, (* WriteBase, *) GetUnixFileDescriptor, (* variables *) StdIn, StdOut, StdErr ; TYPE File = CARDINAL ; (* the following variables are initialized to their UNIX equivalents *) VAR StdIn, StdOut, StdErr: File ; (* IsNoError - returns a TRUE if no error has occured on file, f. *) PROCEDURE IsNoError (f: File) : BOOLEAN ; (* Exists - returns TRUE if a file named, fname exists for reading. *) PROCEDURE Exists (fname: ARRAY OF CHAR) : BOOLEAN ; (* OpenToRead - attempts to open a file, fname, for reading and it returns this file. The success of this operation can be checked by calling IsNoError. *) PROCEDURE OpenToRead (fname: ARRAY OF CHAR) : File ; (* OpenToWrite - attempts to open a file, fname, for write and it returns this file. The success of this operation can be checked by calling IsNoError. *) PROCEDURE OpenToWrite (fname: ARRAY OF CHAR) : File ; (* OpenForRandom - attempts to open a file, fname, for random access read or write and it returns this file. The success of this operation can be checked by calling IsNoError. towrite, determines whether the file should be opened for writing or reading. *) PROCEDURE OpenForRandom (fname: ARRAY OF CHAR; towrite: BOOLEAN) : File ; (* Close - close a file which has been previously opened using: OpenToRead, OpenToWrite, OpenForRandom. It is correct to close a file which has an error status. *) PROCEDURE Close (f: File) ; (* ReadNBytes - reads nBytes of a file into memory area, a, returning the number of bytes actually read. This function will consume from the buffer and then perform direct libc reads. It is ideal for large reads. *) PROCEDURE ReadNBytes (f: File; nBytes: CARDINAL; a: ADDRESS) : CARDINAL ; (* ReadAny - reads HIGH(a) bytes into, a. All input is fully buffered, unlike ReadNBytes and thus is more suited to small reads. *) PROCEDURE ReadAny (f: File; VAR a: ARRAY OF BYTE) ; (* WriteNBytes - writes nBytes of a file into memory area, a, returning the number of bytes actually written. This function will flush the buffer and then write the nBytes using a direct write from libc. It is ideal for large writes. *) PROCEDURE WriteNBytes (f: File; nBytes: CARDINAL; a: ADDRESS) : CARDINAL ; (* WriteAny - writes HIGH(a) bytes onto, file, f. All output is fully buffered, unlike WriteNBytes and thus is more suited to small writes. *) PROCEDURE WriteAny (f: File; VAR a: ARRAY OF BYTE) ; (* WriteChar - writes a single character to file, f. *) PROCEDURE WriteChar (f: File; ch: CHAR) ; (* EOF - tests to see whether a file, f, has reached end of file. *) PROCEDURE EOF (f: File) : BOOLEAN ; (* EOLN - tests to see whether a file, f, is upon a newline. It does NOT consume the newline. *) PROCEDURE EOLN (f: File) : BOOLEAN ; (* ReadChar - returns a character read from file, f. Sensible to check with IsNoError or EOF after calling this function. *) PROCEDURE ReadChar (f: File) : CHAR ; (* UnReadChar - replaces a character, ch, back into file, f. This character must have been read by ReadChar and it does not allow successive calls. *) PROCEDURE UnReadChar (f: File ; ch: CHAR) ; (* WriteLine - writes out a linefeed to file, f. *) PROCEDURE WriteLine (f: File) ; (* WriteString - writes a string to file, f. *) PROCEDURE WriteString (f: File; a: ARRAY OF CHAR) ; (* ReadString - reads a string from file, f, into string, a. It terminates the string if HIGH is reached or if a newline is seen or an error occurs. *) PROCEDURE ReadString (f: File; VAR a: ARRAY OF CHAR) ; (* WriteCardinal - writes a CARDINAL to file, f. (Suggest that WriteAny be used instead - here for compatibility) *) PROCEDURE WriteCardinal (f: File; c: CARDINAL) ; (* ReadCardinal - reads a CARDINAL from file, f. (Suggest that ReadAny be used instead - here for compatibility) *) PROCEDURE ReadCardinal (f: File) : CARDINAL ; (* GetUnixFileDescriptor - returns the UNIX file descriptor of a file. Useful when combining FIO.mod with select (in Selective.def - but note the comments in Selective about using read/write primatives) *) PROCEDURE GetUnixFileDescriptor (f: File) : INTEGER ; (* SetPositionFromBeginning - sets the position from the beginning of the file. *) PROCEDURE SetPositionFromBeginning (f: File; pos: CARDINAL) ; (* FindPosition - returns the current absolute position in file, f. *) PROCEDURE FindPosition (f: File) : CARDINAL ; END FIO.