| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373 |
- (* FIO.def provides a simple buffered file input/output library.
- Copyright (C) 2001-2025 Free Software Foundation, Inc.
- Contributed by Gaius Mulley <gaius.mulley@southwales.ac.uk>.
- This file is part of GNU Modula-2.
- GNU Modula-2 is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
- GNU Modula-2 is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
- Under Section 7 of GPL version 3, you are granted additional
- permissions described in the GCC Runtime Library Exception, version
- 3.1, as published by the Free Software Foundation.
- You should have received a copy of the GNU General Public License and
- a copy of the GCC Runtime Library Exception along with this program;
- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
- <http://www.gnu.org/licenses/>. *)
- DEFINITION MODULE FIO ;
- (* Provides a simple buffered file input/output library. *)
- FROM SYSTEM IMPORT ADDRESS, BYTE ;
- EXPORT QUALIFIED (* types *)
- File,
- (* procedures *)
- OpenToRead, OpenToWrite, OpenForRandom, Close, Unlink, Delete,
- EOF, EOLN, WasEOLN, IsNoError, Exists, IsActive,
- exists, openToRead, openToWrite, openForRandom,
- SetPositionFromBeginning,
- SetPositionFromEnd,
- FindPosition,
- ReadChar, ReadString,
- WriteChar, WriteString, WriteLine,
- WriteCardinal, ReadCardinal,
- UnReadChar,
- WriteNBytes, ReadNBytes,
- FlushBuffer,
- GetUnixFileDescriptor,
- GetFileName, getFileName, getFileNameLength,GetFDesc,
- FlushOutErr,
- (* 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 ;
- (*
- IsActive - returns TRUE if the file, f, is still active.
- *)
- PROCEDURE IsActive (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.
- newfile, determines whether a file should be
- created if towrite is TRUE or whether the
- previous file should be left alone,
- allowing this descriptor to seek
- and modify an existing file.
- *)
- PROCEDURE OpenForRandom (fname: ARRAY OF CHAR;
- towrite, newfile: BOOLEAN) : File ;
- (*
- Unlink - Delete a file which has been opened using
- OpenToRead, OpenToWrite, OpenForRandom.
- *)
- PROCEDURE Unlink ( f : File );
- (*
- Delete - Delete a file which has been opened using
- OpenToRead, OpenToWrite, OpenForRandom.
- It is correct to close a file which has an error status.
- *)
- PROCEDURE Delete (fname: ARRAY OF CHAR ) ;
- (*
- 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) ;
- (*************************************************************************)
- (* the following functions are functionally equivalent to the above
- except they allow C style names.
- *)
- PROCEDURE exists (fname: ADDRESS; flength: CARDINAL) : BOOLEAN ;
- PROCEDURE openToRead (fname: ADDRESS; flength: CARDINAL) : File ;
- PROCEDURE openToWrite (fname: ADDRESS; flength: CARDINAL) : File ;
- PROCEDURE openForRandom (fname: ADDRESS; flength: CARDINAL;
- towrite, newfile: BOOLEAN) : File ;
- (*************************************************************************)
- (*
- FlushBuffer - flush contents of the FIO file, f, to libc.
- *)
- PROCEDURE FlushBuffer (f: File) ;
- (*
- ReadNBytes - reads nBytes of a file into memory area, dest, 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;
- dest: ADDRESS) : CARDINAL ;
- (*
- ReadAny - reads HIGH (a) + 1 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 from memory area src to a file
- 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;
- src: ADDRESS) : CARDINAL ;
- (*
- WriteAny - writes HIGH (a) + 1 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 about to read a newline.
- It does NOT consume the newline. It reads the next character
- and then immediately unreads the character.
- *)
- PROCEDURE EOLN (f: File) : BOOLEAN ;
- (*
- WasEOLN - tests to see whether a file, f, has just read a newline
- character.
- *)
- PROCEDURE WasEOLN (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. It may
- only be called if the previous read was successful,
- end of file or end of line seen.
- *)
- 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.
- It writes the binary image of the CARDINAL.
- to file, f.
- *)
- PROCEDURE WriteCardinal (f: File; c: CARDINAL) ;
- (*
- ReadCardinal - reads a CARDINAL from file, f.
- It reads a bit image of a CARDINAL
- from file, f.
- *)
- 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: LONGINT) ;
- (*
- SetPositionFromEnd - sets the position from the end of the file.
- *)
- PROCEDURE SetPositionFromEnd (f: File; pos: LONGINT) ;
- (*
- FindPosition - returns the current absolute position in file, f.
- *)
- PROCEDURE FindPosition (f: File) : LONGINT ;
- (*
- GetFDesc - return the file descriptor associated with File name, fname
- *)
- PROCEDURE GetFDesc (fname : ARRAY OF CHAR ) : File;
- (*
- GetFileName - assigns, a, with the filename associated with, f.
- *)
- PROCEDURE GetFileName (f: File; VAR a: ARRAY OF CHAR) ;
- (**********************************************************************)
- (* here ADDRESS is a PONITER TO CHAR like in the C lib *)
- (*
- getFileName - returns the address of the filename associated with, f.
- *)
- PROCEDURE getFileName (f: File) : ADDRESS ;
- (*
- getFileNameLength - returns the number of characters associated with
- filename, f.
- *)
- PROCEDURE getFileNameLength (f: File) : CARDINAL ;
- (**********************************************************************)
- (*
- FlushOutErr - flushes, StdOut, and, StdErr.
- *)
- PROCEDURE FlushOutErr ;
- END FIO.
|