#include <fcntl.h>
#include <sgtty.h>
-#ifdef sgi
-#include <curses.h>
-#endif
#include <sys/ioctl.h>
#include <sys/signal.h>
#include <stdio.h>
getpass(prompt)
char *prompt;
{
+#if defined(sgi)
+ struct termio ttyb;
+#else
struct sgttyb ttyb;
+#endif
register int ch;
register char *p;
FILE *fp, *outfp;
long omask;
int fd_tmp;
+#if defined(sgi)
+ tcflag_t svflagval;
+#else
int svflagval;
+#endif
#define PASSWD_LEN 8
static char buf[PASSWD_LEN + 1];
fp = stdin;
}
+#if defined(sgi)
+ (void)ioctl(fileno(fp), TCGETA, &ttyb);
+ svflagval = ttyb.c_lflag;
+ ttyb.c_lflag &= ~ECHO;
+ omask = sigblock(sigmask(SIGINT));
+ (void)ioctl(fileno(fp), TCSETA, &ttyb);
+#else
(void)ioctl(fileno(fp), TIOCGETP, &ttyb);
svflagval = ttyb.sg_flags;
ttyb.sg_flags &= ~ECHO;
omask = sigblock(sigmask(SIGINT));
(void)ioctl(fileno(fp), TIOCSETP, &ttyb);
+#endif
fprintf(outfp, "%s", prompt);
rewind(outfp); /* implied flush */
*p = '\0';
(void)write(fileno(outfp), "\n", 1);
+#if defined(sgi)
+ ttyb.c_lflag = svflagval;
+ (void)ioctl(fileno(fp), TCSETA, &ttyb);
+#else
ttyb.sg_flags = svflagval;
(void)ioctl(fileno(fp), TIOCSETP, &ttyb);
+#endif
(void)sigsetmask(omask);
if (fp != stdin)
(void)fclose(fp);