IMPLEMENTATION MODULE SysShim; (* Binds the C shim (shim.c) directly. *) FROM SYSTEM IMPORT ADDRESS; PROCEDURE m2fopenread (VAR name : ARRAY OF CHAR) : ADDRESS; EXTERNAL; PROCEDURE m2fopenwrite (VAR name : ARRAY OF CHAR) : ADDRESS; EXTERNAL; PROCEDURE m2fclose (h : ADDRESS); EXTERNAL; PROCEDURE m2fread (h : ADDRESS; VAR buf : ARRAY OF CHAR; max : CARDINAL) : CARDINAL; EXTERNAL; PROCEDURE m2fputc (h : ADDRESS; c : CHAR); EXTERNAL; PROCEDURE m2fputs (h : ADDRESS; VAR s : ARRAY OF CHAR); EXTERNAL; PROCEDURE m2fwriteln (h : ADDRESS); EXTERNAL; PROCEDURE m2fwriteintw (h : ADDRESS; v : INTEGER; wid : CARDINAL); EXTERNAL; PROCEDURE m2stdout () : ADDRESS; EXTERNAL; PROCEDURE m2stderr () : ADDRESS; EXTERNAL; PROCEDURE m2arg (i : CARDINAL; VAR s : ARRAY OF CHAR; cap : CARDINAL) : BOOLEAN; EXTERNAL; PROCEDURE fopenread (VAR name : ARRAY OF CHAR) : ADDRESS; BEGIN RETURN m2fopenread(name) END fopenread; PROCEDURE fopenwrite (VAR name : ARRAY OF CHAR) : ADDRESS; BEGIN RETURN m2fopenwrite(name) END fopenwrite; PROCEDURE fclose (h : ADDRESS); BEGIN m2fclose(h) END fclose; PROCEDURE fread (h : ADDRESS; VAR buf : ARRAY OF CHAR; max : CARDINAL) : CARDINAL; BEGIN RETURN m2fread(h, buf, max) END fread; PROCEDURE fputc (h : ADDRESS; c : CHAR); BEGIN m2fputc(h, c) END fputc; PROCEDURE fputs (h : ADDRESS; VAR s : ARRAY OF CHAR); BEGIN m2fputs(h, s) END fputs; PROCEDURE fwriteln (h : ADDRESS); BEGIN m2fwriteln(h) END fwriteln; PROCEDURE fwriteintw (h : ADDRESS; v : INTEGER; wid : CARDINAL); BEGIN m2fwriteintw(h, v, wid) END fwriteintw; PROCEDURE stdout () : ADDRESS; BEGIN RETURN m2stdout() END stdout; PROCEDURE stderr () : ADDRESS; BEGIN RETURN m2stderr() END stderr; PROCEDURE arg (i : CARDINAL; VAR s : ARRAY OF CHAR; cap : CARDINAL) : BOOLEAN; BEGIN RETURN m2arg(i, s, cap) END arg; END SysShim.