packages feed

language-Modula2-0.1: examples/Modula-2_Libraries/andrea-m2/lib/fst/moreio.mod

IMPLEMENTATION MODULE MoreIO;

(* John Andrea, Mar.27/92 *)
(* This code may NOT be sold, it may be freely used and distributed *)

FROM ASCII IMPORT EOL, EOF;
FROM InOut IMPORT Read, Done;

  (* ----------------------------------------------------- *)
  PROCEDURE ReadString( VAR string :ARRAY OF CHAR );

  CONST
     tab = 11C;

  VAR
     c :CHAR;
     i, max :CARDINAL;

     (*------------------------------------------*)
     PROCEDURE Eos( ch :CHAR ) :BOOLEAN;
     BEGIN
        RETURN ( ch <= ' ' ) OR ( ch = EOL );
     END Eos;

  BEGIN

    max := HIGH( string );

    (* skip leading spaces *)
    Read(c);
    WHILE ( c # EOF ) & ( ( c = ' ' ) OR ( c = tab ) OR ( c = EOL ) ) DO
      Read(c);
    END;

    IF Done THEN
        i := 0;
        WHILE Done & NOT Eos(c) & ( i <= max ) DO
           string[i] := c;
           Read(c);  i := i + 1;
        END;

        IF i > max THEN
          (* the end of the string has been reached *)
          (* but maybe the input hasn't, keep reading any input string *)
          WHILE Done & NOT Eos(c) DO
             Read(c);
          END;
        ELSE
         string[i] := 0C;
        END;
    END;
  END ReadString;

BEGIN
END MoreIO.