From 7e66a68afa103fa31c997ee1d49431b4ac353319 Mon Sep 17 00:00:00 2001 From: shivers Date: Sun, 10 Nov 1996 13:56:13 +0000 Subject: [PATCH] - Interrupt handlers really installed and documented. - File locking fixed to use proc objects instead of pids, and bugs in code and documentation fixed. --- NEWS | 9 +++++ RELEASE | 9 +++-- doc/cheat.txt | 86 +++++++++++++++++++++++++++++++++++++++- scsh/scsh-interfaces.scm | 35 ++++++++++++++-- 4 files changed, 130 insertions(+), 9 deletions(-) diff --git a/NEWS b/NEWS index d3083c4..2647a90 100644 --- a/NEWS +++ b/NEWS @@ -2,6 +2,15 @@ Recent changes to the Scheme Shell. +??/??/?? (version 0.4.5 presumably) + lock-region record now stores the *proc object* of the locking + process, not the integer pid. A bug in unlock-region was fixed, + and the documentation was fixed up. + Did we say we had signal handlers installed in the last release? + Now we do. Really. Installed & documented. + Hopefully, bdc will change this line to say the static heap + linker is documented. + 11/03/96 (version 0.4.4) minor fixes for SunOS, Solaris, AIX, NeXTStep, 686 systems minor static heap linker fixes diff --git a/RELEASE b/RELEASE index fd720f6..f196139 100644 --- a/RELEASE +++ b/RELEASE @@ -137,14 +137,14 @@ We even have one of those URL things: ===================== ** Signal handlers - We finally have signal handlers; with this Scsh now has all of Posix. + We finally have signal handlers. Go wild. ** Static heap linker The static heap linker converts a Scheme 48 bytecode image as embodied in a .image file to a C representation. This C code is then compiled and linked in with a virtual machine. One - pleasant side effect of this is reduced startup times. Another - good thing is that immutable parts of the image can be shared + pleasant side effect of this is reduced startup times and heap sizes. + Another good thing is that immutable parts of the image can be shared between processes. see the script scsh/static.scm ** Last few bits of Posix @@ -166,7 +166,8 @@ We even have one of those URL things: switch and with the (DUMP-SCSH-PROGRAM ) are now equivalent in that both pass a list of command-line arguments that includes the program name. The two start-up methods were not - the same in the previous release. + the same in the previous release. NOTE: THIS IS A BACKWARDS-INCOMPATIBLE + CHANGE IN DUMP-SCSH-PROGRAM FROM THE PREVIOUS RELEASE. ** Etc. Solaris 2 on i386 support, AIX 4 support, HP-UX now uses dld for diff --git a/doc/cheat.txt b/doc/cheat.txt index 8f795e5..a39512c 100644 --- a/doc/cheat.txt +++ b/doc/cheat.txt @@ -1,11 +1,13 @@ Scsh cheat sheet Olin Shivers -November 1994 +November 1996 This cheat sheet is intentionally kept brief and minimalist. It is intended to function as an ASCII-format reminder for the full manual, not as the definition. It can be read using GNU Emacs's outline mode. + +It is also not entirely up-to-date. I'd appreciate getting updates from users. ------------------------------------------------------------------------------- * High-level forms @@ -174,6 +176,27 @@ Open flags: (write-string/partial string [fd/port start end]) -> nwritten (force-output [fd/port]) +** File locking +(define-record lock-region + exclusive? ; write or read lock? + start ; integer: start, end & whence + end ; integer: define the region being locked. + whence ; The value of SEEK/SET, SEEK/DELTA, or SEEK/END. + proc) ; A proc object for the process locking the region. + +(make-lock-region exclusive? start len [whence]) -> lock-region + WHENCE defaults to the value of SEEK/SET. + +(lock-region fdes lock) +(lock-region/no-block fdes lock) + +(get-lock-region fdes lock) -> lock-region or #f + +(unlock-region fdes lock) + +(with-region-lock* fdes lock thunk) +(with-region-lock fdes lock body ...) Syntax + ** File system (create-directory fname [perms override?]) (create-fifo fname [perms override?]) @@ -364,6 +387,67 @@ command-line-arguments (pause-until-interrupt) (sleep secs) +Non-signal S48 interrupts +------------------------- +interrupt/memory-shortage + +Posix signals with S48 interrupts +------------------------------ +signal/alrm interrupt/alrm (aka interrupt/alarm) +signal/int interrupt/int (aka interrupt/int) +signal/chld interrupt/chld +signal/cont interrupt/cont +signal/hup interrupt/hup +signal/quit interrupt/quit +signal/term interrupt/term +signal/tstp interrupt/tstp +signal/usr1 interrupt/usr1 +signal/usr2 interrupt/usr2 + +signal/info interrupt/info Non-Posix +signal/io interrupt/io Non-Posix +signal/poll interrupt/poll Non-Posix +signal/prof interrupt/prof Non-Posix +signal/pwr interrupt/pwr Non-Posix +signal/urg interrupt/urg Non-Posix +signal/vtalrm interrupt/vtalrm Non-Posix +signal/winch interrupt/winch Non-Posix +signal/xcpu interrupt/xcpu Non-Posix +signal/xfsz interrupt/xfsz Non-Posix + +Synchronous and uncatchable signals +----------------------------------- +signal/stop Uncatchable Posix +signal/kill Uncatchable Posix + +signal/abrt Synchronous Posix +signal/fpe Synchronous Posix +signal/ill Synchronous Posix +signal/pipe Synchronous Posix +signal/segv Synchronous Posix +signal/ttin Synchronous Posix +signal/ttou Synchronous Posix + +signal/bus Synchronous BSD + SVR4 +signal/emt Synchronous BSD + SVR4 +signal/iot Synchronous BSD + SVR4 +signal/sys Synchronous BSD + SVR4 +signal/trap Synchronous BSD + SVR4 + +** Interrupt handlers +(signal->interrupt sig) -> interrupt +(interrupt-set integer1 ...) -> integer + +(enabled-interrupts) -> integer +(set-enabled-interrupts! integer) -> integer + +(with-enabled-interrupts interrupt-set body ...) Syntax +(with-enabled-interrupts* interrupt-set thunk) + +(set-interrupt-handler! interrupt handler) -> old-handler +(interrupt-handler interrupt) -> handler + HANDLER is #f (ignored), #t (default), or (lambda (enabled-ints) ...) proc. + ** Time (define-record date diff --git a/scsh/scsh-interfaces.scm b/scsh/scsh-interfaces.scm index 025bc6c..73a431a 100644 --- a/scsh/scsh-interfaces.scm +++ b/scsh/scsh-interfaces.scm @@ -162,7 +162,8 @@ lock-region:whence lock-region:start lock-region:len - lock-region:pid + lock-region:pid ; Deprecated proc. + lock-region:proc make-lock-region lock-region @@ -986,10 +987,36 @@ (define-interface signal-handler-interface (export signal->interrupt interrupt-set + (with-enabled-interrupts :syntax) with-enabled-interrupts* - set-signal-handler! - signal-handler + enabled-interrupts + set-enabled-interrupts! + + set-interrupt-handler! + interrupt-handler + %set-unix-signal-handler! %unix-signal-handler - )) + + interrupt/alrm interrupt/alarm + interrupt/int interrupt/keyboard + interrupt/memory-shortage + interrupt/chld + interrupt/cont + interrupt/hup + interrupt/quit + interrupt/term + interrupt/tstp + interrupt/usr1 + interrupt/usr2 + interrupt/info + interrupt/io + interrupt/poll + interrupt/prof + interrupt/pwr + interrupt/urg + interrupt/vtalrm + interrupt/winch + interrupt/xcpu + interrupt/xfsz))