[comp.lang.pascal] Optimizing 'Dots qwill echo...'

ZCCBJSB%EB0UB011.BITNET@cunyvm.cuny.edu (Josep Sau B.) (04/15/91)

What about this improvement that only requires one CHAR temporal
variable:


TYPE
  Pw = STRING(.15.);

PROCEDURE GetPw (VAR InPw :Pw);
CONST
  CR  = CHR(13);
  BCK = CHR(8);
VAR
  ch :CHAR;
BEGIN    (* GetPw *)
  writeln;
  write('Password (dots will echo): ');
  InPw := '';
  REPEAT
    Read(KBD,ch);
    IF ch = BCK THEN BEGIN
      InPw := Copy(InPw,1,PRED(LENGTH(InPw));
      (* :: Copy_But_Last_Char *)
      write(ch);
    END;
    ELSE IF ch <> CR THEN BEGIN
      InPw := InPw + ch;
      write('.');
    END;
  UNTIL ch = CR;
END;  (* GetPw *)


Note: Clrscr may not work on generic MS-DOS machines
(not true-blue ones).
A really portable alternative may be:

  FOR x := 1 TO 25 DO writeln;
but this leave the cursor at the 25th row...


--Josep Sau
'Every science needs the right words to be expressed the right way'
           Raimundus Lulius (Catalan philosopher)