home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 5 / 05.iso / a / a013 / 1.ddi / SOURCE.EXE / F_PASSWD.PRG < prev    next >
Encoding:
Text File  |  1991-01-25  |  1.8 KB  |  61 lines

  1. *****************************************************************
  2. FUNCTION PASSWORD (pw_row, pw_col, encoded_pw, echo_char)
  3. *****************************************************************
  4.  
  5. * Gets string at passed coordinates, encodes and 
  6. * tests it against passed, encoded password
  7.  
  8. * Copyright(c) 1991 -- James Occhiogrosso
  9.  
  10. #include "inkey.ch"
  11.  
  12. LOCAL next_char := old_color := old_cursor := password := '',  ;
  13.       keypress := 0, end_col := pw_col + LEN(encoded_pw) - 1
  14.  
  15. * Position cursor at start of simulated GET
  16. @ pw_row, pw_col SAY ''
  17. old_color = SETCOLOR(SWAPCOLOR())
  18.  
  19. IF VALTYPE(echo_char) == 'C'
  20.     * Clear area to password length in GET color
  21.     @ pw_row, pw_col CLEAR TO pw_row, end_col
  22. ENDIF
  23.  
  24. * Stay in loop until one an exit key is pressed or
  25. * we reach end of password area
  26.  
  27. DO WHILE LEN(password) < LEN(encoded_pw)
  28.  
  29.     * Wait for a key
  30.     keypress = INKEY(0)
  31.  
  32.     * Backspace/left arrow. Move cursor and trim last character
  33.     IF keypress = K_BS .OR. keypress = K_LEFT
  34.         IF COL() > pw_col
  35.             @ ROW(), COL() - 1 SAY ''
  36.         ENDIF
  37.         password = SUBSTR(password, 1, LEN(password) - 1)
  38.     ELSE
  39.         * All keys except exit keys are added to password
  40.         IF keypress != K_ESC  .AND. keypress != K_ENTER .AND. ;
  41.            keypress != K_PGUP .AND. keypress != K_PGDN
  42.  
  43.             * Add each valid key to the password
  44.             password = password + UPPER(CHR(keypress))
  45.  
  46.             IF VALTYPE(echo_char) == 'C'
  47.                 * Display echo character
  48.                 @ ROW(), COL() SAY echo_char
  49.             ENDIF
  50.         ELSE
  51.             * Exit loop on Esc, Enter, PgUp, or PgDn
  52.             EXIT
  53.         ENDIF
  54.     ENDIF
  55. ENDDO
  56.  
  57. * Reset color and return true if password matches
  58. SETCOLOR(old_color)
  59.  
  60. RETURN IF(TRIM(password) == DECODE(encoded_pw), .T., .F.)
  61.