home *** CD-ROM | disk | FTP | other *** search
- /* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */
- #include <stdio.h>
- #include <stdlib.h>
- #include <pc.h>
-
- int
- getlongpass(const char *prompt, char *password, int max_length)
- {
- char *p = password;
- int c, count = 0;
-
- fflush(stdout);
- /* If we can't prompt, abort */
- if (fputs(prompt, stderr) < 0)
- {
- *p = '\0';
- return -1;
- }
-
- while (1)
- {
- /* Get a character with no echo */
- c = getkey();
-
- /* Exit on interrupt (^c or ^break) */
- if (c == '\003' || c == 0x100)
- exit(1);
-
- /* Terminate on end of line or file (^j, ^m, ^d, ^z) */
- if (c == '\r' || c == '\n' || c == '\004' || c == '\032')
- break;
-
- /* Back up on backspace */
- if (c == '\b')
- {
- if (count)
- count--;
- else if (p > password)
- p--;
- continue;
- }
-
- /* Ignore DOS extended characters */
- if ((c & 0xff) != c)
- continue;
-
- /* Add to password if it isn't full */
- if (p < password + max_length - 1)
- *p++ = c;
- else
- count++;
- }
- *p = '\0';
-
- fputc('\n', stderr);
-
- return 0;
- }
-