(*---------------------------------------------------------------------------
    :Program.     FileIO.def
    :Contents.	  komplette Files lesen und schreiben
    :Author.      Bernd Preusing
    :Address.	  Gerhardstr. 16  D-2200 Elmshorn
    :Phone.	  04121/22486
    :Copyright.	  Public Domain
    :Language.	  Modula-2
    :Translator.  M2Amiga V3.27d
    :History.	  1.0 14-Sep-89 Bernd Preusing
    :History.	  1.1 23-Sep-89 Bernd Preusing: neue PROCEDURE FreeFile
    :Bugs.	  none
    :Remark.      Dieses Modul war überfällig!
---------------------------------------------------------------------------*)
DEFINITION MODULE FileIO;
(*$ NameChk:=FALSE *)
FROM SYSTEM	IMPORT	ADDRESS;

TYPE
  FileIOResult= (noError, notFound, readError, writeError, saveError,
  		 noMem, renameError, seekError);


PROCEDURE FileExists(VAR Name: ARRAY OF CHAR):BOOLEAN;
(* :Input.	Name: der komplette Filename mit Pfad (VAR für Speed)
   :Output.	TRUE: Die Datei existiert und ist ein File, keine Directory
*)

PROCEDURE GetFile(VAR Name:ARRAY OF CHAR; VAR Addr:ADDRESS;
		  VAR Len:LONGINT; Add:LONGINT):FileIOResult;
(* :Input.	Name: Name des Files
   :Input.	Addr: hier wird die Adresse des Filepuffers abgelegt
   :Input.	Len:  erhält die genaue Länge des Files
   :Input.	Add:  wird zur Länge des Files addiert, um den Puffer zu
   :Input.		allozieren, falls man im Puffer mehr Platz braucht.
   :Output.	noError, falls alles ok, sonst zugehöriger Fehler
   :Semantic.	Alloziert Speicher Filelänge+1+Add, liest das File komplett
   :Semantic.	ein und hängt ans Ende ein 0C an (für Texte ganz nützlich)
*)

PROCEDURE FreeFile(VAR Buffer:ADDRESS);
(* :Input.	Buffer: die mittels GetFile erhaltene Adresse
   :Semantic.   Gibt den Speicher des FilePuffers wieder frei
*)

PROCEDURE PutFile(VAR Name:ARRAY OF CHAR; Buffer:ADDRESS;
		  Len:LONGINT; Backup, DeallocMem: BOOLEAN):FileIOResult;
(* :Input.	Name: Name des Files
   :Input.	Addr: Adresse des Filepuffers
   :Input.	Len:  Länge des abzuspeichernden Files
   :Input.	Backup: falls TRUE, wird das alte File in Name.bak umbenannt
   :Input.	DeallocMem: falls TRUE, wird der Puffer dealloziert
   :Output.	noError, falls alles ok, sonst zugehöriger Fehler und der
   :Output.	Puffer wird KEINESFALLS dealloziert.
   :Semantic.	Speichert ein File komplett ab.
*)

END FileIO.def
