I notice under "unfixed bugs" you have a report from David Tweed about interrupting hugs under Linux. One of our users independently discovered this under Solaris 2.5. Brief summary is: if you type [1..] then you have to press control-C to interrupt it. This works the first time, but on subsequent occasions it won't stop unless you kill the interpreter with SIGQUIT or another signal. This boils down to the assertion "handlers can longjmp". Yes they can, but with two provisos. The first is that you shouldn't do this if the interruption could have happened during a critical section of code which leaves the program in an inconsistent state. I assume this is not the case since interruption clears the state of the interpreter. The second proviso is that you need to unblock the signal, because the signal will be blocked while the signal handler is active and the system may not unblock it if the signal handler does not return normally. On Solaris this can be done as follows: # define ctrlbrk(bh) (signal(SIGINT,bh),sigrelse(SIGINT)) I don't know how portable the sigrelse function is, but it could be emulated with calls to sigsetmask and/or sigaction. A 10-second glance at the source of hugs98 indicates that this might be a problem in hugs98 too. imc
