xref: /openbsd-src/gnu/usr.bin/cvs/os2/getpass.c (revision 461cc63e7458ce60db55037c1a7656349538b52f)
113571821Stholo #include <stdio.h>
213571821Stholo #include <string.h>
313571821Stholo #include "cvs.h"
4*461cc63eStholo #include "os2inc.h"
5c26070a5Stholo 
6c26070a5Stholo /* Only define this if you're testing and want to compile this file
7c26070a5Stholo    standalone. */
8c26070a5Stholo /* #define DIAGNOSTIC */
9c26070a5Stholo 
10c26070a5Stholo /* Turn off keyboard echo.  Does not check error returns. */
11c26070a5Stholo static void
EchoOff(void)12c26070a5Stholo EchoOff (void)
13c26070a5Stholo {
14c26070a5Stholo   KBDINFO KbdInfo;
15c26070a5Stholo 
16c26070a5Stholo   KbdGetStatus (&KbdInfo, 0);
17c26070a5Stholo   KbdInfo.fsMask = (KbdInfo.fsMask & ~KEYBOARD_ECHO_ON) | KEYBOARD_ECHO_OFF;
18c26070a5Stholo   KbdSetStatus (&KbdInfo, 0);
19c26070a5Stholo }
20c26070a5Stholo 
21c26070a5Stholo /* Turn on keyboard echo.  Does not check error returns. */
22c26070a5Stholo static void
EchoOn(void)23c26070a5Stholo EchoOn( void )
24c26070a5Stholo {
25c26070a5Stholo   KBDINFO KbdInfo;
26c26070a5Stholo 
27c26070a5Stholo   KbdGetStatus (&KbdInfo, 0);
28c26070a5Stholo   KbdInfo.fsMask = (KbdInfo.fsMask & ~KEYBOARD_ECHO_OFF) | KEYBOARD_ECHO_ON;
29c26070a5Stholo   KbdSetStatus (&KbdInfo, 0);
30c26070a5Stholo }
31c26070a5Stholo 
3213571821Stholo char *
getpass(char * prompt)3313571821Stholo getpass (char *prompt)
3413571821Stholo {
35c26070a5Stholo   static char Buf[80];
36c26070a5Stholo   STRINGINBUF StringInBuf;
3713571821Stholo 
3813571821Stholo   printf ("%s", prompt);
3913571821Stholo   fflush (stdout);
4013571821Stholo 
41c26070a5Stholo   EchoOff ();
4213571821Stholo 
43c26070a5Stholo   StringInBuf.cb = sizeof (Buf) - 1;
44c26070a5Stholo   StringInBuf.cchIn = 0;
45c26070a5Stholo   KbdStringIn ((PSZ) Buf, &StringInBuf, IO_WAIT, 0);
46c26070a5Stholo   Buf[StringInBuf.cchIn] = '\0';
47c26070a5Stholo 
48c26070a5Stholo   EchoOn ();
49c26070a5Stholo 
50c26070a5Stholo   return Buf;
5113571821Stholo }
52c26070a5Stholo 
53c26070a5Stholo 
54c26070a5Stholo #ifdef DIAGNOSTIC
main()55c26070a5Stholo main()
56c26070a5Stholo {
57c26070a5Stholo   char *s;
58c26070a5Stholo   s = getpass ("Input password (no echo): ");
59c26070a5Stholo   printf ("String was \"%s\"\n", s);
60c26070a5Stholo   fflush (stdout);
61c26070a5Stholo }
62c26070a5Stholo #endif /* DIAGNOSTIC */
63c26070a5Stholo 
64