{ Copyright (C) 1981 by Bell Laboratories, Inc., and Whitesmiths Ltd. } { getkbd -- read character from keyboard } function getkbd (var c : character) : character; var done : boolean; ch : char; begin if (kbdn <= 0) then begin kbdnext := 1; done := false; if (kbdn = -2) then begin readln; kbdn := 0 end else if (kbdn < 0) then done := true; while (not done) do begin kbdn := kbdn + 1; done := true; if (eof) then kbdn := -1 else if (eoln) then begin kbdn := kbdn - 1; kbdline[kbdn] := NEWLINE end else if (MAXSTR-1 <= kbdn) then begin writeln('line too long'); kbdline[kbdn] := NEWLINE end else begin read(ch); kbdline[kbdn] := ord(ch); if (kbdline[kbdn] <> BACKSPACE) then { do nothing } else if (1 < kbdn) then kbdn := kbdn - 2 else kbdn := kbdn - 1; done := false end end end; if (kbdn <= 0) then c := ENDFILE else begin c := kbdline[kbdnext]; kbdnext := kbdnext + 1; if (c = NEWLINE) then kbdn := -2 else kbdn := kbdn - 1 end; getkbd := c; end;