home *** CD-ROM | disk | FTP | other *** search
Modula Definition | 1987-06-27 | 3.8 KB | 147 lines |
- DEFINITION MODULE FileSystem;
-
- (* (C) Copyright 1987 Fitted Software Tools. All rights reserved. *)
-
- (*
- This module provides routines for file handling similar to the ones
- described in the book "Programming in Modula-2" by Niklaus Wirth.
- *)
-
- FROM SYSTEM IMPORT WORD, ADDRESS;
-
- TYPE
- FDPtr; (* for internal use only *)
-
- Response = ( done, notdone );
- IOMode = ( read, write, io );
- File = RECORD
- id :INTEGER;
- res :Response;
- eof :BOOLEAN;
- mode :IOMode;
- fdptr :FDPtr; (* for internal use only *)
- END;
-
- (*
- All the procedures will set File.res to 'done' if the call succeeds
- and to 'notdone' otherwise.
-
- File.eof is TRUE after a new file is created or when one of the Read
- operations is attempted and there is no more data to read.
- *)
-
-
- PROCEDURE Lookup( VAR f :File; filename :ARRAY OF CHAR; new :BOOLEAN );
- (*
- Open the file named in filename.
- IF the file does not exist THEN
- IF new THEN create a new file
- ELSE fail
-
- Lookup always tries to open the file for io first; if that fails,
- it tries to open the file for reading.
- f.mode will be set according to how the file was opened.
- *)
-
- PROCEDURE Create( VAR f :File; mediumname :ARRAY OF CHAR );
- (*
- Create a new temporary file.
- If mediumname matches a variable in the environment, the
- value of that variable is assumed to be the path to where
- the file is to be created.
- *)
-
- PROCEDURE Close( VAR f :File );
- (*
- close the file.
- if the file was Rename'd, the directory entry is modified
- at this time; if necessary (the file was renamed to a different
- drive), the file is copied!
- *)
-
- PROCEDURE Reset( VAR f :File );
- (*
- Set the file pointer to the beginning of the file.
- *)
-
- PROCEDURE Rewrite( VAR f :File );
- (*
- Set the file pointer to the beginning of the file and truncate
- the file (make it empty).
- *)
-
- PROCEDURE Rename( VAR f :File; filename :ARRAY OF CHAR );
- (*
- change the name of the file f to filename.
- a file can be Rename'd (moved) to a different drive and/or pathname.
- NOTE: the directory entry is not modified until the file is closed.
- *)
-
- PROCEDURE ReadWord( VAR f :File; VAR w :WORD );
- (*
- read a WORD from the file
- *)
-
- PROCEDURE WriteWord( VAR f :File; w :WORD );
- (*
- write a WORD to the file
- *)
-
- PROCEDURE ReadChar( VAR f :File; VAR ch :CHAR );
- (*
- read a character from the file.
- the character ASCII.CR is converted to ASCII.EOL and ASCII.LF is ignored.
- *)
-
- PROCEDURE WriteChar( VAR f :File; ch :CHAR );
- (*
- write the character ch to the file.
- ASCII.EOL is converted to the sequence ASCII.CR ASCII.LF.
- *)
-
- PROCEDURE GetPos( VAR f :File; VAR highpos, lowpos :CARDINAL );
- (*
- return the current position of the file pointer
- *)
-
- PROCEDURE SetPos( VAR f :File; highpos, lowpos :CARDINAL );
- (*
- move the file pointer to position highpos*65536+lowpos
- *)
-
- PROCEDURE GetLPos( VAR f :File; VAR pos :LONGCARD );
- (*
- return the current position of the file pointer
- *)
-
- PROCEDURE SetLPos( VAR f :File; pos :LONGCARD );
- (*
- move the file pointer to pos.
- *)
-
- PROCEDURE Length( VAR f :File; VAR highlen, lowlen :CARDINAL );
- (*
- return the size of the file
- *)
-
- PROCEDURE LLength( VAR f :File; VAR length :LONGCARD );
- (*
- return the size of the file
- *)
-
- PROCEDURE ReadNBytes( VAR f :File; buffPtr :ADDRESS; n :CARDINAL;
- VAR nRead :CARDINAL );
- (*
- try to read n number of bytes.
- On return, nRead is the actual number of bytes read.
- *)
-
- PROCEDURE WriteNBytes( VAR f :File; buffPtr :ADDRESS; n :CARDINAL;
- VAR nWritten :CARDINAL );
- (*
- write n bytes to the file.
- On return nWritten is the actual number of bytes that were written.
- *)
-
- END FileSystem.