X-Git-Url: https://git.subgeniuskitty.com/unix-history/.git/blobdiff_plain/a68924a6e07d69bc4b8d6106b3af0ac5a7490905..7bbfca116a81abb60bfcb48c939dc599ccf380dc:/usr/src/cmd/stty.c diff --git a/usr/src/cmd/stty.c b/usr/src/cmd/stty.c index a5da2350f2..969e8cbddc 100644 --- a/usr/src/cmd/stty.c +++ b/usr/src/cmd/stty.c @@ -175,6 +175,7 @@ struct }; char *arg; +struct tchars tc; struct sgttyb mode; main(argc, argv) @@ -183,6 +184,7 @@ char *argv[]; int i; gtty(1, &mode); + ioctl(1, TIOCGETC, &tc); if(argc == 1) { prmodes(); exit(0); @@ -194,19 +196,53 @@ char *argv[]; mode.sg_erase = '#'; mode.sg_kill = '@'; } - if (eq("erase")) { + if (eq("erase") && --argc) { if (**++argv == '^') - mode.sg_erase = (*argv)[1] & 037; + mode.sg_erase = (*(argv[1]) == '?') ? 0177 : (*argv)[1] & 037; else mode.sg_erase = **argv; - argc--; } - if (eq("kill")) { + if (eq("intr") && --argc) { if (**++argv == '^') - mode.sg_kill = (*argv)[1] & 037; + tc.t_intrc = (*(argv[1]) == '?') ? 0177 : (*argv)[1] & 037; + else + tc.t_intrc = **argv; + } + if (eq("quit") && --argc) { + if (**++argv == '^') + tc.t_quitc = (*(argv[1]) == '?') ? 0177 : (*argv)[1] & 037; + else + tc.t_quitc = **argv; + } + if (eq("start") && --argc) { + if (**++argv == '^') + tc.t_startc = (*(argv[1]) == '?') ? 0177 : (*argv)[1] & 037; + else + tc.t_startc = **argv; + } + if (eq("stop") && --argc) { + if (**++argv == '^') + tc.t_stopc = (*(argv[1]) == '?') ? 0177 : (*argv)[1] & 037; + else + tc.t_stopc = **argv; + } + if (eq("eof") && --argc) { + if (**++argv == '^') + tc.t_eofc = (*(argv[1]) == '?') ? 0177 : (*argv)[1] & 037; + else + tc.t_eofc = **argv; + } + if (eq("brk") && --argc) { + if (**++argv == '^') + tc.t_brkc = (*(argv[1]) == '?') ? 0177 : (*argv)[1] & 037; + else + tc.t_brkc = **argv; + } + if (eq("kill") && --argc) { + if (**++argv == '^') + mode.sg_kill = (*(argv[1]) == '?') ? 0177 : (*argv)[1] & 037; else mode.sg_kill = **argv; - argc--; } if (eq("gspeed")) { mode.sg_ispeed = B300; @@ -227,6 +263,7 @@ char *argv[]; fprintf(stderr,"unknown mode: %s\n", arg); } stty(1,&mode); + ioctl(1, TIOCSETC, &tc); } eq(string) @@ -255,23 +292,23 @@ prmodes() prspeed("output speed ", mode.sg_ospeed); } else prspeed("speed ", mode.sg_ispeed); - if (mode.sg_erase < ' ') - fprintf(stderr, "erase = '^%c'; ", '@' + mode.sg_erase); - else - fprintf(stderr, "erase = '%c'; ", mode.sg_erase); - if (mode.sg_kill < ' ') - fprintf(stderr, "kill = '^%c'\n", '@' + mode.sg_kill); - else - fprintf(stderr, "kill = '%c'\n", mode.sg_kill); + pit(mode.sg_erase, "erase", "; "); + pit(mode.sg_kill, "kill", "; "); + pit(tc.t_intrc, "intr", "; "); + pit(tc.t_quitc, "quit", "\n"); + pit(tc.t_startc, "start", "; "); + pit(tc.t_stopc, "stop", "; "); + pit(tc.t_eofc, "eof", "; "); + pit(tc.t_brkc, "brk", "\n"); m = mode.sg_flags; if(m & EVENP) fprintf(stderr,"even "); if(m & ODDP) fprintf(stderr,"odd "); - if(m & RAW) fprintf(stderr,"raw "); - if(m & CRMOD) fprintf(stderr,"-nl "); - if(m & ECHO) fprintf(stderr,"echo "); - if(m & LCASE) fprintf(stderr,"lcase "); - if((m & XTABS)==XTABS) fprintf(stderr,"-tabs "); - if (m & CBREAK) fprintf(stderr,"cbreak "); + fprintf(stderr,"-raw "+((m&RAW)!=0)); + fprintf(stderr,"-nl "+((m&CRMOD)==0)); + fprintf(stderr,"-echo "+((m&ECHO)!=0)); + fprintf(stderr,"-lcase "+((m&LCASE)!=0)); + fprintf(stderr,"-tabs "+((m&XTABS)!=XTABS)); + fprintf(stderr,"-cbreak "+((m&CBREAK)!=0)); delay((m&NLDELAY)/NL1, "nl"); if ((m&TBDELAY)!=XTABS) delay((m&TBDELAY)/TAB1, "tab"); @@ -281,6 +318,31 @@ prmodes() fprintf(stderr,"\n"); } +pit(what, itsname, sep) + unsigned char what; + char *itsname, *sep; +{ + + fprintf(stderr, "%s", itsname); + if (what == 0377) { + fprintf(stderr, " %s", sep); + return; + } + fprintf(stderr, " = "); + if (what & 0200) { + fprintf(stderr, "M-"); + what &= ~ 0200; + } + if (what == 0177) { + fprintf(stderr, "^"); + what = '?'; + } else if (what < ' ') { + fprintf(stderr, "^"); + what += '@'; + } + fprintf(stderr, "%c%s", what, sep); +} + delay(m, s) char *s; {