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

         (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.

   Software Lab. Alexander Burger
   Bahnhofstr. 24a, D-86462 Langweid
   [EMAIL PROTECTED], www.software-lab.de, +49 8230 5060

Reply via email to