[Back to ENTRY SWAG index] [Back to Main SWAG index] [Original]
{
CS>I need to put a input inside a repeat loop to enter a password, but don't
CS>want it to show what the user is typing, but rather show a different
charactCS>say the charcter ' ' or any character that i can define.
Here you go... here is some tested source code:
{Scott Mitchell... 1996}
program Password_Program;
uses crt;
const TAB=9; BACKSPACE=8; ENTER=13;
var password:string;
{--------------------------------------------------------------------------}
procedure ClearKeyboardBuffer;
begin
MEM[$0040:$001A]:=MEM[$0040:$001C]; {Clears Keyboard Buffer!}
end;
{--------------------------------------------------------------------------}
function LChar(s:char):char;
{This is the opposite of the function UPCASE(char). This simply turns
a character into a lowercase character.}
begin
if (ord(s)>=65) and (ord(s)<=90) then
s:=chr(ord(s)+32);
lchar:=s;
end;
{--------------------------------------------------------------------------}
procedure GetInput(var s:string; filler:char; capital:boolean);
{This procedure gets input from the user, and saves the response as the
string S. Filler is the character you want to "mask" the actual typing.
If you don't want the entry masked, just enter a ' ' in the procedure
decleration. Capital is a boolean value (TRUE/FALSE) which, if declared
TRUE, forces Capitalization. What this means, is that if the user types
in his response, it capitalizes the first letter automatically and makes
the rest lowercase.}
var done:boolean;
ch:char;
temp,count,x,y:byte;
reply:packed array[0..255] of char;
begin
ClearKeyboardBuffer;
x:=wherex; y:=wherey;
count:=0; done:=false;
repeat
repeat until keypressed;
ch:=readkey;
case ord(ch) of
Enter:begin
done:=true;
reply[0]:=chr(count);
end;
Tab:begin
if not(count>245) then begin
inc(x,5);
gotoxy(x,y);
for temp:=1 to 5 do
reply[count+temp]:=' ';
inc(count,5);
end;
end;
BackSpace:begin
if not(count=0) then begin
reply[count]:=' ';
dec(count);
dec(x);
gotoxy(x,y);
write(' ');
gotoxy(x,y);
end;
end;
else
begin
inc(count); inc(x);
if (filler<>' ') and (ch<>' ') then
write(filler)
else
if capital then begin
if count>1 then
if reply[count-1]=' ' then
write(upcase(ch))
else write(lchar(ch))
else
write(upcase(ch));
end
else write(ch);
reply[count]:=ch;
end;
end;
until done;
for x:=1 to ord(reply[0]) do
s:=s+reply[x];
end;
{--------------------------------------------------------------------------}
begin
clrscr;
getinput(password,'*',false);
writeln; writeln;
write('You entered the password ',password);
readln
end.
{============================== CUT HERE ============================}
[Back to ENTRY SWAG index] [Back to Main SWAG index] [Original]