home *** CD-ROM | disk | FTP | other *** search
- /*-----------------------------------------------------------------------*
- * filename - getpass.c
- *
- * function(s)
- * _KbdFlush - flushes the keyboard buffer
- * getpass - reads a password
- *-----------------------------------------------------------------------*/
-
- /*[]------------------------------------------------------------[]*/
- /*| |*/
- /*| Turbo C Run Time Library - Version 3.0 |*/
- /*| |*/
- /*| |*/
- /*| Copyright (c) 1987,1988,1990 by Borland International |*/
- /*| All Rights Reserved. |*/
- /*| |*/
- /*[]------------------------------------------------------------[]*/
-
- #include <conio.h>
- #include <stdio.h>
- #include <dos.h>
-
- /*---------------------------------------------------------------------*
-
- Name _KbdFlush - flushes the keyboard buffer
-
- Usage static void pascal _KbdFlush(void);
-
- Description flushes the keyboard buffer
-
- Return value nothing
-
- *---------------------------------------------------------------------*/
- static void pascal _KbdFlush(void)
- {
- bdos(0x0c, 0x00, 0x02);
- }
-
-
- /*---------------------------------------------------------------------*
-
- Name getpass - reads a password
-
- Usage char *getpass(const char *prompt);
-
- Prototype in conio.h
-
- Description getpass reads a password from the system console after
- prompting with the null-terminated string prompt and disabling
- the echo. A pointer is returned to a null-terminated string
- of up to eight characters at most (not counting the
- null-terminator).
-
- Return value The return value is a pointer to a static string
- which is overwritten with each call.
-
- *---------------------------------------------------------------------*/
- char *getpass(const char *prompt)
- {
- register char *cp;
- register int i;
-
- static char xc[9];
-
- /* Print the prompt message */
- fprintf(stderr, "%s", prompt);
-
- /* Flush the keyboard buffer */
- _KbdFlush();
-
- /* Read the password from keyboard without echo */
- for (cp = xc, i = 0; i < 8 ; i++, cp++)
- if ((*cp = bdos(7,0,0)) == '\r')
- break;
-
- *cp = '\0'; /* Password is a NULL terminated string */
- bdos(0x02,'\r',0); /* Display a new line */
- bdos(0x02,'\n',0);
-
- /* Read any remaining characters */
- _KbdFlush();
- return(xc);
- }
-