'===========================================================================
' Subject: PASSWORD FUNCTION                  Date: 11-14-95 (21:25)       
'  Author: Sami Laine                         Code: QB, QBasic, PDS        
'  Origin: oh1jkt@mea.cc.utu.fi             Packet: TEXT.ABC
'===========================================================================
' PASSWORD.BAS - demonstration of basic input routines, when hiding
'        typed characters (plus this will handle backspace).
'
' PASSWORD.BAS is hereby donated to public domain by Sami Laine.
'
' You can contact original author as <oh1jkt@mea.cc.utu.fi> or from FidoNet
' point 2:222/130.69.
'
' Password$ will return string "(NULL)" in any error (there are only few,
' actually just one - too long ( > 1 ) Repl$ string).
'
' Sample call:
'
'       secret$ = Password$("Secret word: ", "*", 8)
'
DECLARE FUNCTION Password$ (Prompt$, Repl$, MaxLength%)

FUNCTION Password$ (Prompt$, Repl$, MaxLength%)
'
' Make sure user is using only 1 character as replacement.
'
IF LEN(Repl$) > 1 THEN
	Password$ = "(NULL)"
	EXIT FUNCTION
END IF

PRINT Prompt$;
OrigRow% = CSRLIN
OrigColumn% = POS(1)
Column% = OrigColumn%

DO
	' Read character.
	C$ = INPUT$(1)
	SELECT CASE ASC(C$)
		' Handle ENTER (stop reading characters).
		CASE 13
			EXIT DO
		' Handle BACKSPACE key.
		CASE 8
			IF Column% > OrigColumn% THEN
				Column% = Column% - 1
				LOCATE OrigRow%, Column%
				PRINT " ";
				LOCATE OrigRow%, Column%
				IF LEN(TmpStr$) THEN
					TmpStr$ = MID$(TmpStr$, 1, (LEN(TmpStr$) - 1))
				END IF
			END IF
		CASE ELSE
			IF LEN(TmpStr$) < MaxLength% THEN
				TmpStr$ = TmpStr$ + C$
				PRINT Repl$;
			END IF
			Column% = Column% + 1
	END SELECT
LOOP

Password$ = TmpStr$

END FUNCTION
