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