IMPLEMENTATION MODULE Files; (* Binds the shim file routines directly. Handles are C FILE* pointers, typed as File (opaque, pointer-sized). *) PROCEDURE m2fopenread(VAR name : ARRAY OF CHAR) : File; EXTERNAL; PROCEDURE m2fopenwrite(VAR name : ARRAY OF CHAR) : File; EXTERNAL; PROCEDURE m2fclose(h : File); EXTERNAL; PROCEDURE m2fgetc(h : File) : CHAR; EXTERNAL; PROCEDURE m2freadint(h : File) : INTEGER; EXTERNAL; PROCEDURE m2fputc(h : File; c : CHAR); EXTERNAL; PROCEDURE m2fwriteint(h : File; v : INTEGER); EXTERNAL; PROCEDURE m2fputs(h : File; VAR s : ARRAY OF CHAR); EXTERNAL; PROCEDURE m2fwriteln(h : File); EXTERNAL; PROCEDURE OpenRead(VAR name : ARRAY OF CHAR) : File; BEGIN RETURN m2fopenread(name) END OpenRead; PROCEDURE OpenWrite(VAR name : ARRAY OF CHAR) : File; BEGIN RETURN m2fopenwrite(name) END OpenWrite; PROCEDURE Close(f : File); BEGIN m2fclose(f) END Close; PROCEDURE ReadChar(f : File) : CHAR; BEGIN RETURN m2fgetc(f) END ReadChar; PROCEDURE ReadInt(f : File) : INTEGER; BEGIN RETURN m2freadint(f) END ReadInt; PROCEDURE WriteChar(f : File; c : CHAR); BEGIN m2fputc(f, c) END WriteChar; PROCEDURE WriteInt(f : File; n : INTEGER); BEGIN m2fwriteint(f, n) END WriteInt; PROCEDURE WriteString(f : File; VAR s : ARRAY OF CHAR); BEGIN m2fputs(f, s) END WriteString; PROCEDURE WriteLn(f : File); BEGIN m2fwriteln(f) END WriteLn; END Files.