Hi Rand, > A very brief description of the internal solution would be good!
Previously, each picoLisp process - at the moment it switched to raw mode - obtained the current terminal mode with tcgetattr() and kept it in a global structure. On program exit, it restored the console to that value. This means that a child process that was *invoked* when the mode was "raw" already, would reset the mode to "raw" upon exit, possibly destroying the "cooked" mode reset by some other process. Now, only the top level parent process - in main() - queries the mode with tcgetattr(), keeps it also in a global structure, but inherits it to each child process. This means that each process that terminates (no matter in which order) will reset the console to the same state. The second change (Ctrl-D in the line editor) was even simpler (lib/led.l:336) (case "C" (NIL (bye)) ("^D" (prinl) (tell 'bye) (bye)) ("^X" (prinl) (quit)) ) Basically, the line with "^D" was added, which tells all other processes to exit, and then exits itself. Cheers, Alex -- Software Lab. Alexander Burger Bahnhofstr. 24a, D-86462 Langweid [EMAIL PROTECTED], www.software-lab.de, +49 8230 5060