head 1.2; access ; symbols ; locks ; strict; comment @ * @; 1.2 date 89.07.03.08.17.51; author rsalz; state Exp; branches ; next 1.1; 1.1 date 89.03.13.09.36.33; author rsalz; state Exp; branches ; next ; desc @@ 1.2 log @Incorporate many fixes by Jussi <eloranta@@tukki.jyu.fi>, and some minor tweaks by Rich. @ text @/* ** Key drivers */ #include "kernel.h" #include <sgtty.h> #ifdef RCSID static char RCS[] = "$Header: key.c,v 1.1 89/03/13 09:36:33 rsalz Exp $"; #endif /* RCSID */ static char *pr_bf; static long save_flag = -1; keysetup() { struct sgttyb x; gtty(fileno(stdin), &x); save_flag = x.sg_flags; x.sg_flags &= ~ECHO; x.sg_flags |= CBREAK; stty(fileno(stdin), &x); } keysetback() { struct sgttyb x; if (save_flag != -1) { gtty(fileno(stdin), &x); x.sg_flags = save_flag; stty(fileno(stdin), &x); } } key_reprint() { pr_qcr = 1; pbfr(); if (pr_due && key_mode) printf("\n%s%s", pr_bf, key_buff); fflush(stdout); pr_due = 0; } key_input(ppt, len_max) char *ppt; int len_max; { int len_cur, x, tmp; key_mode = 1; pr_bf = ppt; bprintf("%s", ppt); pbfr(); pr_due = 0; *key_buff = '\0'; for (len_cur = 0; len_cur < len_max; ) { switch (x = getchar()) { case '\n': putchar('\n'); key_mode = 0; return; case 'R' & 0x1F: for (tmp = len_cur; tmp; tmp--) { putchar(8); putchar(' '); putchar(8); } printf("%s", key_buff); continue; case 'U' & 0x1F: for (tmp = len_cur; tmp; tmp--) { putchar(8); putchar(' '); putchar(8); } len_cur = 0; key_buff[len_cur] = '\0'; continue; case 'H' & 0x1F: case 127: if (len_cur) { putchar(8); putchar(' '); putchar(8); key_buff[--len_cur] = '\0'; } continue; default: if (x < 32) continue; putchar(x); key_buff[len_cur++] = x; key_buff[len_cur] = '\0'; } } } @ 1.1 log @Initial revision @ text @d1 3 a3 1 /* Key drivers */ d5 1 d8 1 a8 1 "$Header$"; d11 2 a13 1 static char *pr_bf; d17 1 a17 1 } d19 5 a23 2 keysetback() { d27 1 a27 3 key_input(ppt, len_max) char *ppt; int len_max; d29 1 a29 1 char *p; d31 4 a34 9 for (pr_bf = ppt; ; ) { bprintf("%s", ppt); pbfr(); fgets(key_buff, sizeof key_buff, stdin); if (p = strchr(key_buff, '\n')) *p = '\0'; if (strlen(key_buff) <= len_max) return; printf("Too long...\n"); d38 1 d43 1 a43 1 if (pr_due) d47 56 @