SysShim.mod 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. IMPLEMENTATION MODULE SysShim;
  2. (* Binds the C shim (shim.c) directly. *)
  3. FROM SYSTEM IMPORT ADDRESS;
  4. PROCEDURE m2fopenread (VAR name : ARRAY OF CHAR) : ADDRESS;
  5. EXTERNAL;
  6. PROCEDURE m2fopenwrite (VAR name : ARRAY OF CHAR) : ADDRESS;
  7. EXTERNAL;
  8. PROCEDURE m2fclose (h : ADDRESS);
  9. EXTERNAL;
  10. PROCEDURE m2fread (h : ADDRESS; VAR buf : ARRAY OF CHAR;
  11. max : CARDINAL) : CARDINAL;
  12. EXTERNAL;
  13. PROCEDURE m2freadline (h : ADDRESS; VAR buf : ARRAY OF CHAR;
  14. max : CARDINAL) : CARDINAL;
  15. EXTERNAL;
  16. PROCEDURE m2fputc (h : ADDRESS; c : CHAR);
  17. EXTERNAL;
  18. PROCEDURE m2fputs (h : ADDRESS; VAR s : ARRAY OF CHAR);
  19. EXTERNAL;
  20. PROCEDURE m2fwriteln (h : ADDRESS);
  21. EXTERNAL;
  22. PROCEDURE m2fwriteintw (h : ADDRESS; v : INTEGER; wid : CARDINAL);
  23. EXTERNAL;
  24. PROCEDURE m2stdout () : ADDRESS;
  25. EXTERNAL;
  26. PROCEDURE m2stderr () : ADDRESS;
  27. EXTERNAL;
  28. PROCEDURE m2stdin () : ADDRESS;
  29. EXTERNAL;
  30. PROCEDURE m2ftell (h : ADDRESS) : INTEGER;
  31. EXTERNAL;
  32. PROCEDURE m2fseek (h : ADDRESS; pos : INTEGER) : BOOLEAN;
  33. EXTERNAL;
  34. PROCEDURE m2fgetc (h : ADDRESS) : CHAR;
  35. EXTERNAL;
  36. PROCEDURE m2freadint (h : ADDRESS) : INTEGER;
  37. EXTERNAL;
  38. PROCEDURE m2fwriteint (h : ADDRESS; v : INTEGER);
  39. EXTERNAL;
  40. PROCEDURE m2argc () : CARDINAL;
  41. EXTERNAL;
  42. PROCEDURE m2arg (i : CARDINAL; VAR s : ARRAY OF CHAR;
  43. cap : CARDINAL) : BOOLEAN;
  44. EXTERNAL;
  45. PROCEDURE fopenread (VAR name : ARRAY OF CHAR) : ADDRESS;
  46. BEGIN
  47. RETURN m2fopenread(name)
  48. END fopenread;
  49. PROCEDURE fopenwrite (VAR name : ARRAY OF CHAR) : ADDRESS;
  50. BEGIN
  51. RETURN m2fopenwrite(name)
  52. END fopenwrite;
  53. PROCEDURE fclose (h : ADDRESS);
  54. BEGIN
  55. m2fclose(h)
  56. END fclose;
  57. PROCEDURE fread (h : ADDRESS; VAR buf : ARRAY OF CHAR;
  58. max : CARDINAL) : CARDINAL;
  59. BEGIN
  60. RETURN m2fread(h, buf, max)
  61. END fread;
  62. PROCEDURE freadline (h : ADDRESS; VAR buf : ARRAY OF CHAR;
  63. max : CARDINAL) : CARDINAL;
  64. BEGIN
  65. RETURN m2freadline(h, buf, max)
  66. END freadline;
  67. PROCEDURE fputc (h : ADDRESS; c : CHAR);
  68. BEGIN
  69. m2fputc(h, c)
  70. END fputc;
  71. PROCEDURE fputs (h : ADDRESS; VAR s : ARRAY OF CHAR);
  72. BEGIN
  73. m2fputs(h, s)
  74. END fputs;
  75. PROCEDURE fwriteln (h : ADDRESS);
  76. BEGIN
  77. m2fwriteln(h)
  78. END fwriteln;
  79. PROCEDURE fwriteintw (h : ADDRESS; v : INTEGER; wid : CARDINAL);
  80. BEGIN
  81. m2fwriteintw(h, v, wid)
  82. END fwriteintw;
  83. PROCEDURE stdout () : ADDRESS;
  84. BEGIN
  85. RETURN m2stdout()
  86. END stdout;
  87. PROCEDURE stderr () : ADDRESS;
  88. BEGIN
  89. RETURN m2stderr()
  90. END stderr;
  91. PROCEDURE stdin () : ADDRESS;
  92. BEGIN
  93. RETURN m2stdin()
  94. END stdin;
  95. PROCEDURE ftell (h : ADDRESS) : INTEGER;
  96. BEGIN
  97. RETURN m2ftell(h)
  98. END ftell;
  99. PROCEDURE fseek (h : ADDRESS; pos : INTEGER) : BOOLEAN;
  100. BEGIN
  101. RETURN m2fseek(h, pos)
  102. END fseek;
  103. PROCEDURE fgetc (h : ADDRESS) : CHAR;
  104. BEGIN
  105. RETURN m2fgetc(h)
  106. END fgetc;
  107. PROCEDURE freadint (h : ADDRESS) : INTEGER;
  108. BEGIN
  109. RETURN m2freadint(h)
  110. END freadint;
  111. PROCEDURE fwriteint (h : ADDRESS; v : INTEGER);
  112. BEGIN
  113. m2fwriteint(h, v)
  114. END fwriteint;
  115. PROCEDURE argc () : CARDINAL;
  116. BEGIN
  117. RETURN m2argc()
  118. END argc;
  119. PROCEDURE arg (i : CARDINAL; VAR s : ARRAY OF CHAR;
  120. cap : CARDINAL) : BOOLEAN;
  121. BEGIN
  122. RETURN m2arg(i, s, cap)
  123. END arg;
  124. END SysShim.