| (* FileSystem.def provides a PIM [234] FileSystem module. |
| |
| Copyright (C) 2004-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 FileSystem ; |
| |
| (* Use this module sparingly, FIO or the ISO file modules have a |
| much cleaner interface. *) |
| |
| FROM SYSTEM IMPORT WORD, BYTE, ADDRESS ; |
| IMPORT FIO ; |
| FROM DynamicStrings IMPORT String ; |
| |
| |
| TYPE |
| File = RECORD |
| res : Response ; |
| flags : FlagSet ; |
| eof : BOOLEAN ; |
| lastWord: WORD ; |
| lastByte: BYTE ; |
| fio : FIO.File ; |
| highpos, |
| lowpos : CARDINAL ; |
| name : String ; |
| END ; |
| |
| Flag = ( |
| read, (* read access mode *) |
| write, (* write access mode *) |
| modify, |
| truncate, (* truncate file when closed *) |
| again, (* reread the last character *) |
| temporary, (* file is temporary *) |
| opened (* file has been opened *) |
| ); |
| |
| FlagSet = SET OF Flag; |
| |
| Response = (done, notdone, notsupported, callerror, |
| unknownfile, paramerror, toomanyfiles, |
| userdeverror) ; |
| |
| Command = (create, close, lookup, rename, delete, |
| setread, setwrite, setmodify, setopen, |
| doio, setpos, getpos, length) ; |
| |
| |
| (* |
| Create - creates a temporary file. To make the file perminant |
| the file must be renamed. |
| *) |
| |
| PROCEDURE Create (VAR f: File) ; |
| |
| |
| (* |
| Close - closes an open file. |
| *) |
| |
| PROCEDURE Close (f: File) ; |
| |
| |
| (* |
| Lookup - looks for a file, filename. If the file is found |
| then, f, is opened. If it is not found and, newFile, |
| is TRUE then a new file is created and attached to, f. |
| If, newFile, is FALSE and no file was found then f.res |
| is set to notdone. |
| *) |
| |
| PROCEDURE Lookup (VAR f: File; filename: ARRAY OF CHAR; newFile: BOOLEAN) ; |
| |
| |
| (* |
| Rename - rename a file and change a temporary file to a permanent |
| file. f.res is set appropriately. |
| *) |
| |
| PROCEDURE Rename (VAR f: File; newname: ARRAY OF CHAR) ; |
| |
| |
| (* |
| Delete - deletes a file, name, and sets the f.res field. |
| f.res is set appropriately. |
| *) |
| |
| PROCEDURE Delete (name: ARRAY OF CHAR; VAR f: File) ; |
| |
| |
| (* |
| ReadWord - reads a WORD, w, from file, f. |
| f.res is set appropriately. |
| *) |
| |
| PROCEDURE ReadWord (VAR f: File; VAR w: WORD) ; |
| |
| |
| (* |
| WriteWord - writes one word to a file, f. |
| f.res is set appropriately. |
| *) |
| |
| PROCEDURE WriteWord (VAR f: File; w: WORD) ; |
| |
| |
| (* |
| ReadChar - reads one character from a file, f. |
| *) |
| |
| PROCEDURE ReadChar (VAR f: File; VAR ch: CHAR) ; |
| |
| |
| (* |
| WriteChar - writes a character, ch, to a file, f. |
| f.res is set appropriately. |
| *) |
| |
| PROCEDURE WriteChar (VAR f: File; ch: CHAR) ; |
| |
| |
| (* |
| ReadByte - reads a BYTE, b, from file, f. |
| f.res is set appropriately. |
| *) |
| |
| PROCEDURE ReadByte (VAR f: File; VAR b: BYTE) ; |
| |
| |
| (* |
| WriteByte - writes one BYTE, b, to a file, f. |
| f.res is set appropriately. |
| *) |
| |
| PROCEDURE WriteByte (VAR f: File; b: BYTE) ; |
| |
| |
| (* |
| ReadNBytes - reads a sequence of bytes from a file, f. |
| *) |
| |
| PROCEDURE ReadNBytes (VAR f: File; a: ADDRESS; amount: CARDINAL; |
| VAR actuallyRead: CARDINAL) ; |
| |
| |
| (* |
| WriteNBytes - writes a sequence of bytes to file, f. |
| *) |
| |
| PROCEDURE WriteNBytes (VAR f: File; a: ADDRESS; amount: CARDINAL; |
| VAR actuallyWritten: CARDINAL) ; |
| |
| |
| (* |
| Again - returns the last character read to the internal buffer |
| so that it can be read again. |
| *) |
| |
| PROCEDURE Again (VAR f: File) ; |
| |
| |
| (* |
| SetRead - puts the file, f, into the read state. |
| The file position is unchanged. |
| *) |
| |
| PROCEDURE SetRead (VAR f: File) ; |
| |
| |
| (* |
| SetWrite - puts the file, f, into the write state. |
| The file position is unchanged. |
| *) |
| |
| PROCEDURE SetWrite (VAR f: File) ; |
| |
| |
| (* |
| SetModify - puts the file, f, into the modify state. |
| The file position is unchanged but the file can be |
| read and written. |
| *) |
| |
| PROCEDURE SetModify (VAR f: File) ; |
| |
| |
| (* |
| SetOpen - places a file, f, into the open state. The file may |
| have been in the read/write/modify state before and |
| in which case the previous buffer contents are flushed |
| and the file state is reset to open. The position is |
| unaltered. |
| *) |
| |
| PROCEDURE SetOpen (VAR f: File) ; |
| |
| |
| (* |
| Reset - places a file, f, into the open state and reset the |
| position to the start of the file. |
| *) |
| |
| PROCEDURE Reset (VAR f: File) ; |
| |
| |
| (* |
| SetPos - lseek to a position within a file. |
| *) |
| |
| PROCEDURE SetPos (VAR f: File; high, low: CARDINAL) ; |
| |
| |
| (* |
| GetPos - return the position within a file. |
| *) |
| |
| PROCEDURE GetPos (VAR f: File; VAR high, low: CARDINAL) ; |
| |
| |
| (* |
| Length - returns the length of file, in, high, and, low. |
| *) |
| |
| PROCEDURE Length (VAR f: File; VAR high, low: CARDINAL) ; |
| |
| |
| (* |
| Doio - effectively flushes a file in write mode, rereads the |
| current buffer from disk if in read mode and writes |
| and rereads the buffer if in modify mode. |
| *) |
| |
| PROCEDURE Doio (VAR f: File) ; |
| |
| |
| (* |
| FileNameChar - checks to see whether the character, ch, is |
| legal in a filename. nul is returned if the |
| character was illegal. |
| *) |
| |
| PROCEDURE FileNameChar (ch: CHAR) : CHAR ; |
| |
| |
| (* |
| GetFileName - return a new string containing the name of the file. |
| The string should be killed by the caller. |
| *) |
| |
| PROCEDURE GetFileName (file: File) : String ; |
| |
| |
| (* |
| WriteString - writes contents to file. The nul char |
| will terminate the contents string otherwise |
| all characters 0..HIGH (contents) are written. |
| *) |
| |
| PROCEDURE WriteString (file: File; contents: ARRAY OF CHAR) ; |
| |
| |
| END FileSystem. |