|
|
@@ -1,137 +0,0 @@
|
|
|
-Listing:
|
|
|
-
|
|
|
- 1 IMPLEMENTATION MODULE FileIO;
|
|
|
- 2 (* Self-hosted file I/O: SysShim only. *)
|
|
|
- 3
|
|
|
- 4 IMPORT SysShim;
|
|
|
- 5
|
|
|
- 6 VAR
|
|
|
- 7 argIdx: CARDINAL;
|
|
|
- 8
|
|
|
- 9 PROCEDURE NextParameter (VAR s: ARRAY OF CHAR);
|
|
|
- 10 BEGIN
|
|
|
- 11 IF SysShim.arg(argIdx, s, LEN(s)) THEN
|
|
|
- 12 INC(argIdx)
|
|
|
- 13 ELSE
|
|
|
- 14 s[0] := CHR(0)
|
|
|
- 15 END
|
|
|
- 16 END NextParameter;
|
|
|
- 17
|
|
|
- 18 PROCEDURE Open (VAR f: File; fileName: ARRAY OF CHAR; newFile: BOOLEAN);
|
|
|
- 19 BEGIN
|
|
|
- 20 IF newFile THEN f := SysShim.fopenwrite(fileName)
|
|
|
- 21 ELSE f := SysShim.fopenread(fileName)
|
|
|
- 22 END;
|
|
|
- 23 Okay := f # NIL
|
|
|
- 24 END Open;
|
|
|
- 25
|
|
|
- 26 PROCEDURE Close (VAR f: File);
|
|
|
- 27 BEGIN
|
|
|
- 28 SysShim.fclose(f);
|
|
|
- 29 f := NIL
|
|
|
- 30 END Close;
|
|
|
- 31
|
|
|
- 32 PROCEDURE ReadBytes (f: File; VAR buf: ARRAY OF CHAR; VAR len: CARDINAL);
|
|
|
- 33 BEGIN
|
|
|
- 34 len := SysShim.fread(f, buf, len)
|
|
|
- 35 END ReadBytes;
|
|
|
- 36
|
|
|
- 37 PROCEDURE Write (f: File; ch: CHAR);
|
|
|
- 38 BEGIN
|
|
|
- 39 IF ch = EOL THEN SysShim.fwriteln(f) ELSE SysShim.fputc(f, ch) END
|
|
|
- 40 END Write;
|
|
|
- 41
|
|
|
- 42 PROCEDURE WriteLn (f: File);
|
|
|
- 43 BEGIN
|
|
|
- 44 SysShim.fwriteln(f)
|
|
|
- 45 END WriteLn;
|
|
|
- 46
|
|
|
- 47 PROCEDURE WriteString (f: File; str: ARRAY OF CHAR);
|
|
|
- 48 BEGIN
|
|
|
- 49 SysShim.fputs(f, str)
|
|
|
- 50 END WriteString;
|
|
|
- 51
|
|
|
- 52 PROCEDURE WriteInt (f: File; int: INTEGER; wid: CARDINAL);
|
|
|
- 53 BEGIN
|
|
|
- 54 SysShim.fwriteintw(f, int, wid)
|
|
|
- 55 END WriteInt;
|
|
|
- 56
|
|
|
- 57 PROCEDURE WriteCard (f: File; card, wid: CARDINAL);
|
|
|
- 58 BEGIN
|
|
|
- 59 SysShim.fwriteintw(f, card, wid)
|
|
|
- 60 END WriteCard;
|
|
|
- 61
|
|
|
- 62 PROCEDURE SLENGTH (stringVal: ARRAY OF CHAR): CARDINAL;
|
|
|
- 63 BEGIN
|
|
|
- 64 RETURN LEN(stringVal)
|
|
|
- 65 END SLENGTH;
|
|
|
- 66
|
|
|
- 67 PROCEDURE Assign (source: ARRAY OF CHAR; VAR destination: ARRAY OF CHAR);
|
|
|
- 68 VAR i, n: CARDINAL;
|
|
|
- 69 BEGIN
|
|
|
- 70 n := LEN(source);
|
|
|
- 71 IF n > LEN(destination) THEN n := LEN(destination) END;
|
|
|
- 72 i := 0;
|
|
|
- 73 WHILE i < n DO
|
|
|
- 74 destination[i] := source[i];
|
|
|
- 75 INC(i)
|
|
|
- 76 END
|
|
|
- 77 END Assign;
|
|
|
- 78
|
|
|
- 79 PROCEDURE Extract (source: ARRAY OF CHAR;
|
|
|
- 80 startIndex, numberToExtract: CARDINAL;
|
|
|
- 81 VAR destination: ARRAY OF CHAR);
|
|
|
- 82 VAR i, n, k: CARDINAL;
|
|
|
- 83 BEGIN
|
|
|
- 84 n := LEN(source);
|
|
|
- 85 k := 0;
|
|
|
- 86 i := startIndex;
|
|
|
- 87 WHILE (i < n) AND (k < numberToExtract) AND (k < LEN(destination)) DO
|
|
|
- 88 destination[k] := source[i];
|
|
|
- 89 INC(k); INC(i)
|
|
|
- 90 END
|
|
|
- 91 END Extract;
|
|
|
- 92
|
|
|
- 93 PROCEDURE Concat (stringVal1, stringVal2: ARRAY OF CHAR;
|
|
|
- 94 VAR destination: ARRAY OF CHAR);
|
|
|
- 95 VAR i, k: CARDINAL;
|
|
|
- 96 BEGIN
|
|
|
- 97 k := 0; i := 0;
|
|
|
- 98 WHILE (i < LEN(stringVal1)) AND (k < LEN(destination)) DO
|
|
|
- 99 destination[k] := stringVal1[i]; INC(k); INC(i)
|
|
|
- 100 END;
|
|
|
- 101 i := 0;
|
|
|
- 102 WHILE (i < LEN(stringVal2)) AND (k < LEN(destination)) DO
|
|
|
- 103 destination[k] := stringVal2[i]; INC(k); INC(i)
|
|
|
- 104 END
|
|
|
- 105 END Concat;
|
|
|
- 106
|
|
|
- 107 PROCEDURE Compare (stringVal1, stringVal2: ARRAY OF CHAR): INTEGER;
|
|
|
- 108 VAR i, n, m: CARDINAL;
|
|
|
- 109 BEGIN
|
|
|
- 110 n := LEN(stringVal1); m := LEN(stringVal2);
|
|
|
- 111 i := 0;
|
|
|
- 112 WHILE (i < n) AND (i < m) DO
|
|
|
- 113 IF stringVal1[i] < stringVal2[i] THEN RETURN -1
|
|
|
- 114 ELSIF stringVal1[i] > stringVal2[i] THEN RETURN 1
|
|
|
- 115 END;
|
|
|
- 116 INC(i)
|
|
|
- 117 END;
|
|
|
- 118 IF n < m THEN RETURN -1
|
|
|
- 119 ELSIF n > m THEN RETURN 1
|
|
|
- 120 END;
|
|
|
- 121 RETURN 0
|
|
|
- 122 END Compare;
|
|
|
- 123
|
|
|
- 124 BEGIN
|
|
|
- 125 argIdx := 0;
|
|
|
- 126 Okay := TRUE;
|
|
|
- 127 StdOut := SysShim.stdout();
|
|
|
- 128 con := StdOut;
|
|
|
- 129 StdIn := NIL;
|
|
|
- 130 err := SysShim.stderr()
|
|
|
- 131 END FileIO.
|
|
|
-
|
|
|
- 0 errors
|
|
|
-
|
|
|
-
|