bob@dhw68k.cts.com (Bob Best) (10/28/88)
A week or so ago, I reported a minor, yet annoying, bug involving the shell's lack of recognition of keywords such as for, while, until, if, case, etc. after the DEL key was pressed (i.e. after a SIGINT.) The following patch fixes the problem. The bug was caused by failure to set the variable 'startl' to 1 after a SIGINT. When the parser restarted, it assumed that it was not at the start of a line, hence the various keywords failed to be properly parsed. The variable 'startl' had to be given global scope to be seen by onintr(). Bob --------------------- Index: sh1.c *** /bram0/sh.old/./sh1.c Mon Oct 10 20:58:24 1988 --- ./sh1.c Fri Oct 28 00:16:01 1988 *************** *** 3,8 **** --- 3,9 ---- #include <errno.h> #include <setjmp.h> #include "sh.h" + extern int startl; /* -------- sh.c -------- */ /* * shell *************** *** 396,401 **** --- 397,403 ---- onintr() { signal(SIGINT, SIG_IGN); + startl = 1; /* fix for parser bug on for, while, until, etc. after SIGINT */ if (inparse) { prs("\n"); fail(); Index: sh2.c *** /bram0/sh.old/./sh2.c Mon Oct 10 20:58:25 1988 --- ./sh2.c Thu Oct 27 23:51:27 1988 *************** *** 39,45 **** /* #include "sh.h" */ #define SYNTAXERR zzerr() ! static int startl = 1; static int peeksym = 0; static void zzerr(); static void word(); --- 39,45 ---- /* #include "sh.h" */ #define SYNTAXERR zzerr() ! /*static*/ int startl = 1; static int peeksym = 0; static void zzerr(); static void word(); -- Bob Best uucp: ...{trwrb,hplabs}!felix!dhw68k!bob InterNet: bob@dhw68k.cts.com