From cea15c1a198ea9dc40241a63195de0764e376793 Mon Sep 17 00:00:00 2001 From: Chris Hanson Date: Thu, 14 Mar 1991 04:23:26 +0000 Subject: [PATCH] * New primitives `process-hangup' and `pty-master-hangup' support sending of SIGHUP to subprocesses. * Bug fixes for channel registering and selection. --- v7/src/microcode/osproc.h | 3 +- v7/src/microcode/osterm.h | 3 +- v7/src/microcode/prosio.c | 4 +-- v7/src/microcode/prosproc.c | 6 +++- v7/src/microcode/prosterm.c | 43 +++++++++++++---------- v7/src/microcode/unxutl/ymkfile | 6 ++-- v7/src/microcode/uxio.c | 61 ++++++++++++++++++++++++-------- v7/src/microcode/uxproc.c | 18 ++++++++-- v7/src/microcode/uxterm.c | 10 ++++-- v7/src/microcode/version.h | 4 +-- v7/src/microcode/x11base.c | 62 +++++++++++++++++---------------- v8/src/microcode/version.h | 4 +-- 12 files changed, 144 insertions(+), 80 deletions(-) diff --git a/v7/src/microcode/osproc.h b/v7/src/microcode/osproc.h index cded37efa..5938ffd47 100644 --- a/v7/src/microcode/osproc.h +++ b/v7/src/microcode/osproc.h @@ -1,6 +1,6 @@ /* -*-C-*- -$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/osproc.h,v 1.4 1991/03/11 23:42:38 cph Exp $ +$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/osproc.h,v 1.5 1991/03/14 04:22:35 cph Exp $ Copyright (c) 1990-91 Massachusetts Institute of Technology @@ -116,6 +116,7 @@ extern void EXFUN (OS_process_kill, (Tprocess process)); extern void EXFUN (OS_process_stop, (Tprocess process)); extern void EXFUN (OS_process_interrupt, (Tprocess process)); extern void EXFUN (OS_process_quit, (Tprocess process)); +extern void EXFUN (OS_process_hangup, (Tprocess process)); extern void EXFUN (OS_process_continue_background, (Tprocess process)); extern void EXFUN (OS_process_continue_foreground, (Tprocess process)); diff --git a/v7/src/microcode/osterm.h b/v7/src/microcode/osterm.h index 1884fa778..35e151550 100644 --- a/v7/src/microcode/osterm.h +++ b/v7/src/microcode/osterm.h @@ -1,6 +1,6 @@ /* -*-C-*- -$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/osterm.h,v 1.6 1991/03/08 01:41:34 cph Exp $ +$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/osterm.h,v 1.7 1991/03/14 04:22:41 cph Exp $ Copyright (c) 1990-91 Massachusetts Institute of Technology @@ -64,5 +64,6 @@ extern void EXFUN (OS_pty_master_stop, (Tchannel channel)); extern void EXFUN (OS_pty_master_continue, (Tchannel channel)); extern void EXFUN (OS_pty_master_interrupt, (Tchannel channel)); extern void EXFUN (OS_pty_master_quit, (Tchannel channel)); +extern void EXFUN (OS_pty_master_hangup, (Tchannel channel)); #endif /* SCM_OSTERM_H */ diff --git a/v7/src/microcode/prosio.c b/v7/src/microcode/prosio.c index 0db50638d..c5e4b55d8 100644 --- a/v7/src/microcode/prosio.c +++ b/v7/src/microcode/prosio.c @@ -1,6 +1,6 @@ /* -*-C-*- -$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/prosio.c,v 1.5 1991/03/11 23:42:45 cph Exp $ +$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/prosio.c,v 1.6 1991/03/14 04:22:45 cph Exp $ Copyright (c) 1987-91 Massachusetts Institute of Technology @@ -234,7 +234,7 @@ DEFINE_PRIMITIVE ("CHANNEL-UNREGISTER", Prim_channel_unregister, 1, 1, DEFINE_PRIMITIVE ("CHANNEL-SELECT-THEN-READ", Prim_channel_select_then_read, 4, 4, "Like CHANNEL-READ, but also watches registered input channels.\n\ If there is no input on CHANNEL, but there is input on some other registered\n\ -channel, this procedure returns #T.") +channel or some subprocess status changes, this procedure returns #T.") { PRIMITIVE_HEADER (4); CHECK_ARG (2, STRING_P); diff --git a/v7/src/microcode/prosproc.c b/v7/src/microcode/prosproc.c index 61d816240..6c226d96d 100644 --- a/v7/src/microcode/prosproc.c +++ b/v7/src/microcode/prosproc.c @@ -1,6 +1,6 @@ /* -*-C-*- -$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/prosproc.c,v 1.7 1991/03/11 23:42:52 cph Exp $ +$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/prosproc.c,v 1.8 1991/03/14 04:22:50 cph Exp $ Copyright (c) 1990-91 Massachusetts Institute of Technology @@ -336,6 +336,10 @@ DEFINE_PRIMITIVE ("PROCESS-QUIT", Prim_process_quit, 1, 1, "Sends the quit signal to process PROCESS-NUMBER (unix SIGQUIT).") PROCESS_SIGNALLING_PRIMITIVE (OS_process_quit) +DEFINE_PRIMITIVE ("PROCESS-HANGUP", Prim_process_hangup, 1, 1, + "Sends the hangup signal to process PROCESS-NUMBER (unix SIGHUP).") + PROCESS_SIGNALLING_PRIMITIVE (OS_process_hangup) + DEFINE_PRIMITIVE ("PROCESS-STOP", Prim_process_stop, 1, 1, "Stops process PROCESS-NUMBER (unix SIGTSTP).") PROCESS_SIGNALLING_PRIMITIVE (OS_process_stop) diff --git a/v7/src/microcode/prosterm.c b/v7/src/microcode/prosterm.c index 7de200135..359265d10 100644 --- a/v7/src/microcode/prosterm.c +++ b/v7/src/microcode/prosterm.c @@ -1,6 +1,6 @@ /* -*-C-*- -$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/prosterm.c,v 1.8 1991/03/08 01:41:38 cph Exp $ +$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/prosterm.c,v 1.9 1991/03/14 04:22:54 cph Exp $ Copyright (c) 1990-91 Massachusetts Institute of Technology @@ -49,6 +49,15 @@ DEFUN (arg_terminal, (argument_number), int argument_number) return (channel); } +static Tchannel +DEFUN (arg_pty_master, (arg), unsigned int arg) +{ + Tchannel channel = (arg_channel (1)); + if ((OS_channel_type (channel)) != channel_type_pty_master) + error_bad_range_arg (1); + return (channel); +} + DEFINE_PRIMITIVE ("TERMINAL-GET-ISPEED", Prim_terminal_get_ispeed, 1, 1, 0) { PRIMITIVE_HEADER (1); @@ -81,12 +90,6 @@ DEFINE_PRIMITIVE ("BAUD-RATE->INDEX", Prim_baud_rate_to_index, 1, 1, 0) } } -DEFINE_PRIMITIVE ("OS-JOB-CONTROL?", Prim_os_job_control_p, 0, 0, 0) -{ - PRIMITIVE_HEADER (0); - PRIMITIVE_RETURN (BOOLEAN_TO_OBJECT (OS_job_control_p ())); -} - DEFINE_PRIMITIVE ("TERMINAL-GET-STATE", Prim_terminal_get_state, 1, 1, 0) { PRIMITIVE_HEADER (1); @@ -109,7 +112,7 @@ DEFINE_PRIMITIVE ("TERMINAL-SET-STATE", Prim_terminal_set_state, 2, 2, 0) } PRIMITIVE_RETURN (UNSPECIFIC); } - + DEFINE_PRIMITIVE ("TERMINAL-COOKED-OUTPUT?", Prim_terminal_cooked_output_p, 1, 1, "Return #F iff TERMINAL is not in cooked output mode.") { @@ -133,7 +136,7 @@ DEFINE_PRIMITIVE ("TERMINAL-COOKED-OUTPUT", Prim_terminal_cooked_output, 1, 1, OS_terminal_cooked_output (arg_terminal (1)); PRIMITIVE_RETURN (UNSPECIFIC); } - + DEFINE_PRIMITIVE ("TERMINAL-BUFFERED?", Prim_terminal_buffered_p, 1, 1, "Return #F iff TERMINAL is not in buffered mode.") { @@ -181,6 +184,12 @@ DEFINE_PRIMITIVE ("TERMINAL-DRAIN-OUTPUT", Prim_terminal_drain_output, 1, 1, OS_terminal_drain_output (arg_terminal (1)); PRIMITIVE_RETURN (UNSPECIFIC); } + +DEFINE_PRIMITIVE ("OS-JOB-CONTROL?", Prim_os_job_control_p, 0, 0, 0) +{ + PRIMITIVE_HEADER (0); + PRIMITIVE_RETURN (BOOLEAN_TO_OBJECT (OS_job_control_p ())); +} DEFINE_PRIMITIVE ("HAVE-PTYS?", Prim_have_ptys_p, 0, 0, 0) { @@ -211,15 +220,6 @@ Returns a vector #(CHANNEL MASTER-NAME SLAVE-NAME).") } } -static Tchannel -DEFUN (arg_pty_master, (arg), unsigned int arg) -{ - Tchannel channel = (arg_channel (1)); - if ((OS_channel_type (channel)) != channel_type_pty_master) - error_bad_range_arg (1); - return (channel); -} - DEFINE_PRIMITIVE ("PTY-MASTER-SEND-SIGNAL", Prim_pty_master_send_signal, 2, 2, "Send a signal to PTY-MASTER; second arg says which one.") { @@ -263,3 +263,10 @@ DEFINE_PRIMITIVE ("PTY-MASTER-QUIT", Prim_pty_master_quit, 1, 1, 0) OS_pty_master_quit (arg_pty_master (1)); PRIMITIVE_RETURN (UNSPECIFIC); } + +DEFINE_PRIMITIVE ("PTY-MASTER-HANGUP", Prim_pty_master_hangup, 1, 1, 0) +{ + PRIMITIVE_HEADER (1); + OS_pty_master_hangup (arg_pty_master (1)); + PRIMITIVE_RETURN (UNSPECIFIC); +} diff --git a/v7/src/microcode/unxutl/ymkfile b/v7/src/microcode/unxutl/ymkfile index 0f42de8ea..9b6937718 100644 --- a/v7/src/microcode/unxutl/ymkfile +++ b/v7/src/microcode/unxutl/ymkfile @@ -1,6 +1,6 @@ /* -*-C-*- -$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/unxutl/Attic/ymkfile,v 1.41 1991/02/26 21:33:51 cph Exp $ +$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/unxutl/Attic/ymkfile,v 1.42 1991/03/14 04:23:26 cph Exp $ Copyright (c) 1989-91 Massachusetts Institute of Technology @@ -626,7 +626,7 @@ dmpwrld.o : scheme.touch prims.h ux.h osfs.h \ unexec.c unexhp9k800.c getpagesize.h x11base.o x11graph.o x11term.o starbasex.o : scheme.touch prims.h x11.h -x11base.o : ux.h +x11base.o : ux.h osio.h uxselect.h starbase.o : scheme.touch prims.h Sgraph.o Sgraph_xt.o SgX.o : scheme.touch prims.h Sgraph.h @@ -652,7 +652,7 @@ uxctty.o : osctty.h uxenv.o : osenv.h uxfile.o : osfile.h osio.h uxio.h uxfs.o : osfs.h -uxio.o : osio.h uxio.h +uxio.o : osio.h uxio.h uxselect.h uxproc.o : osproc.h uxproc.h osio.h uxio.h osterm.h uxsig.o : ossig.h osctty.h ostty.h uxtrap.h uxutil.h critsec.h uxsock.o : uxsock.h osio.h uxio.h diff --git a/v7/src/microcode/uxio.c b/v7/src/microcode/uxio.c index b550e9bbd..4adf38fd9 100644 --- a/v7/src/microcode/uxio.c +++ b/v7/src/microcode/uxio.c @@ -1,6 +1,6 @@ /* -*-C-*- -$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/uxio.c,v 1.10 1991/03/11 23:43:02 cph Exp $ +$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/uxio.c,v 1.11 1991/03/14 04:22:59 cph Exp $ Copyright (c) 1990-91 Massachusetts Institute of Technology @@ -34,6 +34,7 @@ MIT in each case. */ #include "ux.h" #include "uxio.h" +#include "uxselect.h" size_t OS_channel_table_size; struct channel * channel_table; @@ -123,7 +124,8 @@ DEFUN (OS_channel_close, (channel), Tchannel channel) { if (! (CHANNEL_INTERNAL (channel))) { - OS_channel_unregister (channel); + if (CHANNEL_REGISTERED (channel)) + OS_channel_unregister (channel); STD_VOID_SYSTEM_CALL (syscall_close, (UX_close (CHANNEL_DESCRIPTOR (channel)))); MARK_CHANNEL_CLOSED (channel); @@ -135,7 +137,8 @@ DEFUN (OS_channel_close_noerror, (channel), Tchannel channel) { if (! (CHANNEL_INTERNAL (channel))) { - OS_channel_unregister (channel); + if (CHANNEL_REGISTERED (channel)) + OS_channel_unregister (channel); UX_close (CHANNEL_DESCRIPTOR (channel)); MARK_CHANNEL_CLOSED (channel); } @@ -355,21 +358,43 @@ DEFUN (OS_channel_unregister, (channel), Tchannel channel) (CHANNEL_REGISTERED (channel)) = 0; } } - -int + +enum select_input DEFUN (UX_select_input, (fd, blockp), int fd AND int blockp) { #ifdef HAVE_SELECT + extern int EXFUN (UX_process_any_status_change, (void)); + int status_change_p; int nfds; SELECT_TYPE readable = input_descriptors; FD_SET (fd, (&readable)); - STD_UINT_SYSTEM_CALL - (syscall_select, - nfds, - (select (FD_SETSIZE, (&readable), 0, 0, (blockp ? 0 : (&zero_timeout))))); - return ((nfds > 0) && (! (FD_ISSET (fd, (&readable))))); + while (1) + { + status_change_p = 0; + INTERRUPTABLE_EXTENT + (nfds, + ((status_change_p = (UX_process_any_status_change ())) + ? ((errno = EINTR), (-1)) + : (select (FD_SETSIZE, (&readable), 0, 0, + (blockp ? 0 : (&zero_timeout)))))); + if (nfds > 0) + return + ((FD_ISSET (fd, (&readable))) + ? select_input_argument + : select_input_other); + else if (nfds == 0) + { + if (!blockp) + return (select_input_none); + } + else if (errno != EINTR) + error_system_call (errno, syscall_select); + else if (status_change_p) + return (select_input_process_status); + deliver_pending_interrupts (); + } #else - return (0); + return (select_input_argument); #endif } @@ -380,10 +405,16 @@ DEFUN (OS_channel_select_then_read, (channel, buffer, nbytes), size_t nbytes) { #ifdef HAVE_SELECT - if ((OS_channels_registered > ((CHANNEL_REGISTERED (channel)) ? 1 : 0)) - && (UX_select_input ((CHANNEL_DESCRIPTOR (channel)), - (CHANNEL_NONBLOCKING (channel))))) - return (-2); + if (OS_channels_registered > ((CHANNEL_REGISTERED (channel)) ? 1 : 0)) + switch (UX_select_input ((CHANNEL_DESCRIPTOR (channel)), + (! (CHANNEL_NONBLOCKING (channel))))) + { + case select_input_none: + return (-1); + case select_input_other: + case select_input_process_status: + return (-2); + } #endif return (OS_channel_read (channel, buffer, nbytes)); } diff --git a/v7/src/microcode/uxproc.c b/v7/src/microcode/uxproc.c index 53b71b159..92fea1d84 100644 --- a/v7/src/microcode/uxproc.c +++ b/v7/src/microcode/uxproc.c @@ -1,6 +1,6 @@ /* -*-C-*- -$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/uxproc.c,v 1.9 1991/03/11 23:43:12 cph Exp $ +$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/uxproc.c,v 1.10 1991/03/14 04:23:03 cph Exp $ Copyright (c) 1990-91 Massachusetts Institute of Technology @@ -422,7 +422,7 @@ DEFUN (OS_make_subprocess, kill_child: _exit (1); } - + #define DEFUN_PROCESS_ACCESSOR(name, result_type, accessor) \ result_type \ DEFUN (name, (process), Tprocess process) \ @@ -435,7 +435,7 @@ DEFUN_PROCESS_ACCESSOR (OS_process_status, enum process_status, PROCESS_STATUS) DEFUN_PROCESS_ACCESSOR (OS_process_reason, unsigned short, PROCESS_REASON) DEFUN_PROCESS_ACCESSOR (OS_process_jc_status, enum process_jc_status, PROCESS_JC_STATUS) - + int DEFUN (OS_process_valid_p, (process), Tprocess process) { @@ -502,6 +502,12 @@ DEFUN_VOID (OS_process_status_sync_all) return (result); } } + +int +DEFUN_VOID (UX_process_any_status_change) +{ + return (process_tick != sync_tick); +} void DEFUN (OS_process_send_signal, (process, sig), Tprocess process AND int sig) @@ -538,6 +544,12 @@ DEFUN (OS_process_quit, (process), Tprocess process) OS_process_send_signal (process, SIGQUIT); } +void +DEFUN (OS_process_hangup, (process), Tprocess process) +{ + OS_process_send_signal (process, SIGHUP); +} + void DEFUN (OS_process_continue_background, (process), Tprocess process) { diff --git a/v7/src/microcode/uxterm.c b/v7/src/microcode/uxterm.c index cdcaf3ae1..591ac6d07 100644 --- a/v7/src/microcode/uxterm.c +++ b/v7/src/microcode/uxterm.c @@ -1,6 +1,6 @@ /* -*-C-*- -$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/uxterm.c,v 1.12 1991/03/08 01:41:42 cph Exp $ +$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/uxterm.c,v 1.13 1991/03/14 04:23:08 cph Exp $ Copyright (c) 1990-1 Massachusetts Institute of Technology @@ -550,7 +550,7 @@ DEFUN (OS_open_pty_master, (master_fd, master_fname), error_external_return (); return (0); } - + void DEFUN (OS_pty_master_send_signal, (channel, sig), Tchannel channel AND int sig) { @@ -624,3 +624,9 @@ DEFUN (OS_pty_master_quit, (channel), Tchannel channel) { OS_pty_master_send_signal (channel, SIGQUIT); } + +void +DEFUN (OS_pty_master_hangup, (channel), Tchannel channel) +{ + OS_pty_master_send_signal (channel, SIGHUP); +} diff --git a/v7/src/microcode/version.h b/v7/src/microcode/version.h index dda3e2a28..7c556fa67 100644 --- a/v7/src/microcode/version.h +++ b/v7/src/microcode/version.h @@ -1,6 +1,6 @@ /* -*-C-*- -$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/Attic/version.h,v 11.67 1991/03/11 23:43:21 cph Exp $ +$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/Attic/version.h,v 11.68 1991/03/14 04:23:15 cph Exp $ Copyright (c) 1988-91 Massachusetts Institute of Technology @@ -46,5 +46,5 @@ MIT in each case. */ #define VERSION 11 #endif #ifndef SUBVERSION -#define SUBVERSION 67 +#define SUBVERSION 68 #endif diff --git a/v7/src/microcode/x11base.c b/v7/src/microcode/x11base.c index 08b2f686b..88bb21935 100644 --- a/v7/src/microcode/x11base.c +++ b/v7/src/microcode/x11base.c @@ -1,6 +1,6 @@ /* -*-C-*- -$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/x11base.c,v 1.16 1991/03/11 23:43:28 cph Exp $ +$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/x11base.c,v 1.17 1991/03/14 04:23:20 cph Exp $ Copyright (c) 1989-91 Massachusetts Institute of Technology @@ -37,6 +37,8 @@ MIT in each case. */ #include "scheme.h" #include "prims.h" #include "ux.h" +#include "osio.h" +#include "uxselect.h" #include "x11.h" int x_debug = 0; @@ -699,8 +701,8 @@ DEFUN (x_event_to_object, (event), XEvent * event) entry that reads events -- or else that all other event readers cooperate with this strategy. */ -extern unsigned int OS_channels_registered; -extern int EXFUN (UX_select_input, (int fd, int blockp)); +/* The time_limit argument is currently ignored, because Edwin doesn't + use it. */ static SCHEME_OBJECT DEFUN (xd_process_events, (xd, time_limit_p, time_limit), @@ -708,38 +710,38 @@ DEFUN (xd_process_events, (xd, time_limit_p, time_limit), int time_limit_p AND unsigned long time_limit) { - unsigned int events_queued = 0; Display * display = (XD_DISPLAY (xd)); + int do_select = (OS_channels_registered > 0); + unsigned int events_queued; if (XD_CACHED_EVENT_P (xd)) - goto restart; + { + events_queued = (XEventsQueued (display, QueuedAlready)); + goto restart; + } + events_queued = + (do_select ? (XEventsQueued (display, QueuedAlready)) + : time_limit_p ? (XEventsQueued (display, QueuedAfterReading)) + : 0); while (1) { - extern unsigned long EXFUN (OS_real_time_clock, (void)); XEvent event; - if (time_limit_p || (OS_channels_registered > 0)) - { - if (events_queued > 0) - events_queued -= 1; - else - while (1) - { - events_queued = (XEventsQueued (display, QueuedAfterReading)); - if (events_queued > 0) - { - events_queued -= 1; - break; - } - if (time_limit_p && ((OS_real_time_clock ()) >= time_limit)) - return (SHARP_F); - if (UX_select_input ((ConnectionNumber (display)), - (!time_limit_p))) - /* No input is available from the display, but some - other registered input channel has input. Return a - special value immediately so that input can be - processed. */ - return (SHARP_T); - } - } + if (events_queued > 0) + events_queued -= 1; + else if (do_select) + switch (UX_select_input ((ConnectionNumber (display)), + (!time_limit_p))) + { + case select_input_none: + return (SHARP_F); + case select_input_other: + case select_input_process_status: + return (SHARP_T); + case select_input_argument: + events_queued = (XEventsQueued (display, QueuedAfterReading)); + continue; + } + else if (time_limit_p) + return (SHARP_F); XNextEvent (display, (&event)); if ((event . type) == KeymapNotify) continue; diff --git a/v8/src/microcode/version.h b/v8/src/microcode/version.h index 15b63b0b3..5f8a8e134 100644 --- a/v8/src/microcode/version.h +++ b/v8/src/microcode/version.h @@ -1,6 +1,6 @@ /* -*-C-*- -$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v8/src/microcode/version.h,v 11.67 1991/03/11 23:43:21 cph Exp $ +$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v8/src/microcode/version.h,v 11.68 1991/03/14 04:23:15 cph Exp $ Copyright (c) 1988-91 Massachusetts Institute of Technology @@ -46,5 +46,5 @@ MIT in each case. */ #define VERSION 11 #endif #ifndef SUBVERSION -#define SUBVERSION 67 +#define SUBVERSION 68 #endif -- 2.25.1