rob@cs.vu.nl (Rob van Leeuwen) (02/13/90)
Hi there, below some patches are included for Elvis. They have been approved of by the author of Elvis, Steve Kirkendall. They fix the signal handling of elvis for shell-escapes and the like (the ':sh', ':!' and '!' commands in particular). This should stop Elvis from crashing on repeated keyboard interrupts. On Steve's request I have also included a small patch to the infamous isascii() macro. Peter Valkenburg (valke@psy.vu.nl). (Please reply to me - not the person whose account I used to post this) (B.t.w., I posted a ps(1) for MINIX 1.5 a week ago. Did anyone receive it out there? Please drop me a letter if you had any particular problems installing it, or if you didn't see it but would like to have it. I will repost it if necessary). -----cut here----- -----cut here----- -----cut here----- -----cut here----- #!bin/sh echo x - curses.c.cdiff sed '/^X/s///' > curses.c.cdiff << '/' X*** curses.c.old Sat Feb 3 00:45:50 1990 X--- curses.c Sat Feb 3 00:52:08 1990 X*************** X*** 25,30 **** X--- 25,32 ---- X extern char *malloc(); X extern char *getenv(); X X+ extern trapint(); X+ X /* variables, publicly available & used in the macros */ X short ospeed; /* speed of the tty, eg B2400 */ X WINDOW *stdscr; /* pointer into kbuf[] */ X*************** X*** 147,152 **** X--- 149,156 ---- X X if (quietly) return; X X+ signal(SIGINT, SIG_IGN); /* don't want intrs now */ X+ X /* Wait for a key from the user */ X for (dest = kbuf, src = tgoto(CM, 0, LINES - 1); *src; ) X *dest++ = *src++; X*************** X*** 165,170 **** X--- 169,176 ---- X { X ungetkey(':'); X } X+ X+ signal(SIGINT, trapint); /* resume intr catching */ X } X X static lacking(s) / echo x - move1.c.cdiff sed '/^X/s///' > move1.c.cdiff << '/' X*** move1.c.old Sun Feb 11 12:52:19 1990 X--- move1.c Sun Feb 11 12:57:04 1990 X*************** X*** 16,22 **** X #include "vi.h" X X #ifndef isascii X! # define isascii(c) !((c) & 0x7f) X #endif X X MARK moveup(m, cnt) X--- 16,22 ---- X #include "vi.h" X X #ifndef isascii X! # define isascii(c) !((c) & ~0x7f) X #endif X X MARK moveup(m, cnt) / echo x - system.c.cdiff sed '/^X/s///' > system.c.cdiff << '/' X*** system.c.old Fri Feb 2 23:37:24 1990 X--- system.c Sat Feb 3 01:00:00 1990 X*************** X*** 22,27 **** X--- 22,29 ---- X */ X X #include "vi.h" X+ #include <signal.h> X+ extern trapint(); X extern char **environ; X X X*************** X*** 44,50 **** X exit(1); /* if we get here, the exec failed */ X X default: /* parent */ X! wait(&status); X } X X return status; X--- 46,54 ---- X exit(1); /* if we get here, the exec failed */ X X default: /* parent */ X! signal(SIGINT, SIG_IGN); /* we don't want intr here */ X! wait(&status); X! signal(SIGINT, trapint); /* restore intr catching */ X } X X return status; X*************** X*** 95,100 **** X--- 99,105 ---- X exit(1); /* if we get here, exec failed */ X X default: /* parent */ X+ signal(SIGINT, SIG_IGN); /* reset after wait */ X /* close the "write" end of the pipe */ X close(r0w1[1]); X X*************** X*** 110,115 **** X--- 115,121 ---- X X close(fd); X wait(&status); X+ signal(SIGINT, trapint); /* restore intr catching */ X return status; X } X /