home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: WPS_PM / WPS_PM.zip / password.zip / password.cmd < prev    next >
OS/2 REXX Batch file  |  1996-04-01  |  3KB  |  144 lines

  1. /* PASSWORD.CMD - Initialise/check/change WorkArea password */
  2.  
  3. ARG cmd_file, action
  4. CALL INITIALISE
  5. SELECT 
  6.   WHEN action = 'CHK' THEN CALL CHECK_PASSWORD
  7.   WHEN action = 'CHG' THEN CALL CHANGE_PASSWORD
  8.   OTHERWISE CALL ERROR_DISPLAY 'I M P R O P E R   A C C E S S  !'
  9. END
  10. RETURN tries
  11.  
  12. CHECK_PASSWORD:
  13. IF (SysGetEA(cmd_file,'password',saved_pw)) = 0
  14.   THEN
  15.     DO
  16.       tries = 0
  17.       IF LENGTH(saved_pw) = 0
  18.         THEN
  19.           DO
  20.             create = true
  21.             msg = 'Create password ?  (Y or N):'
  22.             CALL ENTRY_REQUEST 
  23.             DO UNTIL char = 'Y' | char = 'N'
  24.               char = TRANSLATE(SysGetKey('NOECHO'))
  25.               IF char <> 'Y' & char <> 'N'
  26.                 THEN CALL BEEP 800,125
  27.             END
  28.             IF char = 'Y'
  29.               THEN CALL CHANGE_PASSWORD
  30.           END
  31.         ELSE
  32.           DO
  33.             DO UNTIL input_pw = saved_pw | tries = 3 | input_pw = ''
  34.               msg = 'Enter password (null to quit):'
  35.               CALL GET_INPUT_PASSWORD
  36.               IF input_pw <> saved_pw & tries <> -1
  37.                 THEN
  38.                   DO
  39.                     tries = tries + 1
  40.                     CALL ERROR_DISPLAY 'P A S S W O R D   E R R O R  !'
  41.                   END
  42.             END
  43.           END
  44.     END
  45.   ELSE
  46.     CALL ERROR_DISPLAY 'C M D   F I L E / P A T H   E R R O R  !'
  47. RETURN
  48.  
  49. CHANGE_PASSWORD:
  50. create = true
  51. tries = 0
  52. DO UNTIL first_pw = input_pw
  53.   msg = 'Enter new password (1-8 characters, A-Z, 0-9):'
  54.   CALL GET_INPUT_PASSWORD
  55.   first_pw = input_pw
  56.   ctr = ctr + 1
  57.   msg = 'Enter the new password again for verification:'
  58.   CALL GET_INPUT_PASSWORD
  59.   ctr = ctr - 1
  60.   IF input_pw <> first_pw
  61.     THEN CALL ERROR_DISPLAY 'U N M A T C H E D   E N T R I E S  !'
  62. END
  63. CALL SysPutEA cmd_file,'password',input_pw
  64. RETURN
  65.  
  66. GET_INPUT_PASSWORD:
  67. valid = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'
  68. input_pw = ''
  69. maxlength = 8
  70. enterkey = d2c(13)
  71. bskey = d2c(8)
  72. CALL ENTRY_REQUEST
  73. DO FOREVER
  74.   char = TRANSLATE(SysGetKey('NOECHO'))
  75.   SELECT
  76.     WHEN char = enterkey
  77.       THEN IF input_pw <> '' 
  78.         THEN 
  79.           DO 
  80.             SAY '' 
  81.             LEAVE 
  82.           END 
  83.         ELSE IF create
  84.           THEN CALL BEEP 800,125
  85.           ELSE
  86.             DO
  87.               tries = -1
  88.               LEAVE  
  89.             END
  90.     WHEN char = bskey
  91.       THEN IF input_pw = ''
  92.         THEN CALL BEEP 800,125
  93.           ELSE 
  94.             DO 
  95.               CALL CHAROUT ,bskey bskey
  96.               input_pw = LEFT(input_pw, LENGTH(input_pw)-1)
  97.             END
  98.     WHEN POS(char, valid) > 0
  99.       THEN
  100.         IF LENGTH(input_pw) = maxlength
  101.           THEN CALL BEEP 800,125
  102.           ELSE
  103.             DO
  104.               CALL CHAROUT ,'*'
  105.               input_pw = input_pw||char
  106.             END
  107.     OTHERWISE CALL BEEP 800,125
  108.     END
  109.   END
  110. RETURN       
  111.  
  112. INITIALISE:
  113. 'ANSI ON'
  114. SAY "1B"x||"[30;46m"
  115. 'CLS'
  116. PARSE VALUE SysTextScreenSize() WITH rows cols
  117. ctr = rows % 2
  118. true = 1
  119. false = 0
  120. create = false
  121. tries = -1
  122. RETURN
  123.  
  124. ENTRY_REQUEST:
  125. cur = SysCurPos(ctr,(cols - LENGTH(msg)) % 2)
  126. SAY msg
  127. cur = SysCurPos(ctr,((cols - LENGTH(msg)) % 2) + LENGTH(msg) + 1)
  128. RETURN
  129.  
  130. ERROR_DISPLAY:
  131. ARG msg 
  132. SAY "1B"x||"[37;41m"
  133. 'CLS'
  134. cur = SysCurPos(ctr,(cols - LENGTH(msg)) % 2)
  135. SAY msg
  136. CALL BEEP 800,250
  137. CALL BEEP 500,250
  138. CALL SysSleep(1)
  139. SAY "1B"x||"[30;46m"
  140. 'CLS'
  141. RETURN
  142.  
  143. /* End of Script */
  144.