DEFINITION MODULE SysShim; (* Low-level bridge from V3 Modula-2 to the C runtime shim (runtime/syslib/shim.c). Descriptor-aware: ARRAY OF CHAR is passed as its descriptor address, matching V3's string layout. This is the self-hosted counterpart of the host FileIO. *) FROM SYSTEM IMPORT ADDRESS; PROCEDURE fopenread (VAR name : ARRAY OF CHAR) : ADDRESS; (* Opens name for reading; NIL on failure. *) PROCEDURE fopenwrite (VAR name : ARRAY OF CHAR) : ADDRESS; (* Creates/truncates name for writing; NIL on failure. *) PROCEDURE fclose (h : ADDRESS); PROCEDURE fread (h : ADDRESS; VAR buf : ARRAY OF CHAR; max : CARDINAL) : CARDINAL; (* Reads up to max bytes into buf; buf's length is set to the number read, which is also returned. *) PROCEDURE freadline (h : ADDRESS; VAR buf : ARRAY OF CHAR; max : CARDINAL) : CARDINAL; (* Reads one line (the newline is dropped) into buf; buf's length is set to the number of bytes stored, which is also returned. *) PROCEDURE fputc (h : ADDRESS; c : CHAR); PROCEDURE fputs (h : ADDRESS; VAR s : ARRAY OF CHAR); PROCEDURE fwriteln (h : ADDRESS); PROCEDURE fwriteintw (h : ADDRESS; v : INTEGER; wid : CARDINAL); PROCEDURE stdin () : ADDRESS; PROCEDURE stdout () : ADDRESS; PROCEDURE stderr () : ADDRESS; PROCEDURE ftell (h : ADDRESS) : INTEGER; (* Byte offset of the current position (-1 on error). *) PROCEDURE fseek (h : ADDRESS; pos : INTEGER) : BOOLEAN; (* Seek to absolute byte offset pos; FALSE on failure. *) PROCEDURE fgetc (h : ADDRESS) : CHAR; (* Reads one byte from h; 0C at end of file. *) PROCEDURE freadint (h : ADDRESS) : INTEGER; (* Reads a signed decimal integer from h, skipping leading blanks. *) PROCEDURE fwriteint (h : ADDRESS; v : INTEGER); (* Writes v in decimal to h (no field width). *) PROCEDURE argc () : CARDINAL; (* Number of command-line words, including the program name. *) PROCEDURE arg (i : CARDINAL; VAR s : ARRAY OF CHAR; cap : CARDINAL) : BOOLEAN; (* Copies command-line argument i into s (capacity cap); FALSE when no such argument. *) END SysShim.