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