| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- IMPLEMENTATION MODULE CharacterInput;
- FROM InOut IMPORT Read,
- Write, WriteCard, WriteString, WriteLn,
- Done, EOL;
- FROM Scanner IMPORT traceParser, printCode, printListing;
- CONST maxLine = 120;
- HT = 11C; (* tab char *)
- VAR inLine : ARRAY[1..maxLine-1] OF CHAR;
- xL : [0..maxLine];
- PROCEDURE GetCh;
- VAR c: CHAR;
- BEGIN
- IF currCol >= xL THEN
- IF endOfInput THEN ch := EOF; RETURN END;
- (* read a new line *)
- xL := 0; currCol := 0; INC(currLine);
- REPEAT
- Read(c);
- IF Done THEN
- IF c = HT THEN
- REPEAT
- INC(xL); inLine[xL] := ' '
- UNTIL xL MOD 8 = 0;
- ELSE
- INC(xL); inLine[xL] := c
- END
- ELSE
- INC(xL); endOfInput := TRUE;
- END
- UNTIL NOT Done OR (inLine[xL] = EOL);
- IF printListing THEN
- inLine[xL] := 0C;
- WriteCard(currLine, 6); WriteString(': ');
- WriteString(inLine); WriteLn;
- END;
- inLine[xL] := ' '; (* newline returns ' ' *)
- END;
- (* return next character *)
- INC(currCol);
- ch := inLine[currCol];
- Write(ch); (*___________________*)
- END GetCh;
- PROCEDURE InitInput;
- BEGIN
- xL := 0; currCol := 0;
- currLine := 0; endOfInput := FALSE;
- END InitInput;
- BEGIN
- END CharacterInput.
|