;*; Updated on 15-May-89 at 9:33 AM by James A. Jarboe I V; edit time: 0:38:55 ;*************************************************************************** ; * ; P A S W R D . M 6 8 * ; * ;*************************************************************************** ; ; Super Simple Password input. ; This subroutine accepts user input but only displays *'s as output. ; The only exit is a CR which returns the user to BASIC. ; ; Calling format is: ; XCALL PASWRD, VARIABLE ; ; Where: ; VARIABLE = Unformatted or string variable. ; ; The VARIABLE contents are returned to BASIC. The contents can ; be any ASCII character except, CR or DEL which are trapped in this ; subroutine. ; VMAJOR = 1 VEDIT = 100. ; Written 15-May-89 SEARCH SYS SEARCH SYSSYM SEARCH TRM OBJNAM PASWRD.SBR PAGE ;*************************************************************************** ; * ; M A C R O S * ; * ;*************************************************************************** ; DEFINE PRTTAB ROW, COL MOVW #,D1 TCRT ENDM ;*************************************************************************** ; * ; C O N S T A N T S * ; * ;*************************************************************************** ; $DEL = 127. ; DELete character. $CR = 13. ; CR character. $NULL = 0 ; NULL character. $BELL = 7. ; BELL character. ;*************************************************************************** ; * ; X C A L L O F F S E T S * ; * ;*************************************************************************** ; .OFINI .OFDEF XP.TOP, 2 ; Number of arguments. .OFDEF TYPE1, 2 ; Type of arg 1 .OFDEF ADDR1, 4 ; Address of arg1 .OFDEF SIZE1, 4 ; Size arg1 .OFSIZ XP.SIZ PAGE ;*************************************************************************** ; * ; S U B R O U T I N E S T A R T * ; * ;*************************************************************************** ; ; PASWRD: PHDR -1,0,PH$REE!PH$REU CMPW XP.TOP(A3), #1 ; Got at least one argument? JLO QTYVAR ; No..tell em. CMPW TYPE1(A3), #2 ; Is it at least a string? JHI STRVAR ; No..tell em. TRMRST D6 ; Get terminal status. MOV D6, D5 ; Save terminal status. ORW #T$DAT!T$ECS, D6 ; Set data, noecho. TRMWST D6 ; Set terminal status. MOV ADDR1(A3), A2 ; Set new KBD address. PUSH A2 ; Save it. MOV SIZE1(A3), D0 ; Get size of argument. 10$: MOVB #0, (A2)+ ; Clear out argument. SOB D0, 10$ ; Until finished. POP A2 ; Restore address. PUSH A2 ; Then save it again. CLR D4 ; Clear counter. LOOP: KBD OUTOF ; Get KBD input. UCS ; Make it upper case. CMPB D1, #$DEL ; Was this a backspace (RUB)? JEQ BACKSP ; Yes..do backspace stuff. CMPB D1, #$CR ; Was this a CR? BEQ 20$ ; Yes..we through. CMP D4, SIZE1(A3) ; Have we exceed length? BLO 10$ ; No..process it. MOVB #$BELL, D1 ; Yes..set up bell. TTY ; Ring it. BR LOOP ; Try again. 10$: MOVB D1, (A2)+ ; Save character. TYPE * ; Output a star. INC D4 ; Bump character count. BR LOOP ; Try again. 20$: POP A2 ; Restore pointer. OUTOF: TRMRST D6 ; Get terminal status. MOV D5, D6 ; Restore status. TRMWST D6 ; Set terminal status. RTN ; Return to basic. QTYVAR: TYPE BR ERROUT STRVAR: TYPE ERROUT: TYPECR RTN BACKSP: CMPB D4, #0 ; Any characters yet? BEQ 10$ ; No..don't bother. DEC D4 ; Yes..decrease count. MOVB #$NULL, -(A2) ; Clear last character. PRTTAB -1,5 ; Do a backspace. TYPE < > ; Clear screen space. PRTTAB -1,5 ; Do a backspace. 10$: JMP LOOP ; Try again. END .