home *** CD-ROM | disk | FTP | other *** search
- *****************************************************************
- FUNCTION PASSWORD (pw_row, pw_col, encoded_pw, echo_char)
- *****************************************************************
-
- * Gets string at passed coordinates, encodes and
- * tests it against passed, encoded password
-
- * Copyright(c) 1991 -- James Occhiogrosso
-
- #include "inkey.ch"
-
- LOCAL next_char := old_color := old_cursor := password := '', ;
- keypress := 0, end_col := pw_col + LEN(encoded_pw) - 1
-
- * Position cursor at start of simulated GET
- @ pw_row, pw_col SAY ''
- old_color = SETCOLOR(SWAPCOLOR())
-
- IF VALTYPE(echo_char) == 'C'
- * Clear area to password length in GET color
- @ pw_row, pw_col CLEAR TO pw_row, end_col
- ENDIF
-
- * Stay in loop until one an exit key is pressed or
- * we reach end of password area
-
- DO WHILE LEN(password) < LEN(encoded_pw)
-
- * Wait for a key
- keypress = INKEY(0)
-
- * Backspace/left arrow. Move cursor and trim last character
- IF keypress = K_BS .OR. keypress = K_LEFT
- IF COL() > pw_col
- @ ROW(), COL() - 1 SAY ''
- ENDIF
- password = SUBSTR(password, 1, LEN(password) - 1)
- ELSE
- * All keys except exit keys are added to password
- IF keypress != K_ESC .AND. keypress != K_ENTER .AND. ;
- keypress != K_PGUP .AND. keypress != K_PGDN
-
- * Add each valid key to the password
- password = password + UPPER(CHR(keypress))
-
- IF VALTYPE(echo_char) == 'C'
- * Display echo character
- @ ROW(), COL() SAY echo_char
- ENDIF
- ELSE
- * Exit loop on Esc, Enter, PgUp, or PgDn
- EXIT
- ENDIF
- ENDIF
- ENDDO
-
- * Reset color and return true if password matches
- SETCOLOR(old_color)
-
- RETURN IF(TRIM(password) == DECODE(encoded_pw), .T., .F.)
-