diff --git a/collects/racket/place.rkt b/collects/racket/place.rkt index 3250f31a45..81389c35d4 100644 --- a/collects/racket/place.rkt +++ b/collects/racket/place.rkt @@ -21,7 +21,7 @@ place-sleep place-wait place-kill - place-break + (rename-out [place-break/opt place-break]) place-channel place-channel-put place-channel-get @@ -59,7 +59,7 @@ (define-pl-func place-sleep p) (define-pl-func place-wait p) (define-pl-func place-kill p) -(define-pl-func place-break p) +(define-pl-func place-break p kind) (define-pl-func place-channel-put p msg) (define-pl-func place-channel-get p) (define-pl-func place-channel? p) @@ -67,6 +67,10 @@ (define-pl-func place-message-allowed? p) (define-pl-func place-dead-evt p) +(define place-break/opt + (let ([place-break (lambda (p [kind #f]) (place-break p kind))]) + place-break)) + (define (pump-place p pin pout perr in out err) (cond [(pl-place-enabled?) diff --git a/collects/racket/place/private/th-place.rkt b/collects/racket/place/private/th-place.rkt index ffb1714e24..bf44ad3a9e 100644 --- a/collects/racket/place/private/th-place.rkt +++ b/collects/racket/place/private/th-place.rkt @@ -60,7 +60,7 @@ (define (th-place-sleep n) (sleep n)) (define (th-place-wait pl) (thread-wait (TH-place-th pl)) 0) (define (th-place-kill pl) (custodian-shutdown-all (TH-place-cust pl))) -(define (th-place-break pl) (break-thread (TH-place-th pl))) +(define (th-place-break pl kind) (break-thread (TH-place-th pl) kind)) (define (th-place-dead-evt pl) (thread-dead-evt (TH-place-th pl))) (define (th-place-channel) (define-values (as ar) (make-th-async-channel)) diff --git a/collects/racket/private/kernstruct.rkt b/collects/racket/private/kernstruct.rkt index 14401db4ab..f67eb5db87 100644 --- a/collects/racket/private/kernstruct.rkt +++ b/collects/racket/private/kernstruct.rkt @@ -402,6 +402,41 @@ '(#f #f #f) (quote-syntax exn))) (λ () (quote-syntax kernel:exn:break))))) + (begin + (#%require + (rename '#%kernel kernel:exn:break:terminate exn:break:terminate)) + (define make-exn:break:terminate kernel:exn:break:terminate) + (define-syntax exn:break:terminate + (make-self-ctr-struct-info + (λ () + (list + (quote-syntax struct:exn:break:terminate) + (quote-syntax make-exn:break:terminate) + (quote-syntax exn:break:terminate?) + (list + (quote-syntax exn:break-continuation) + (quote-syntax exn-continuation-marks) + (quote-syntax exn-message)) + '(#f #f #f) + (quote-syntax exn:break))) + (λ () (quote-syntax kernel:exn:break:terminate))))) + (begin + (#%require (rename '#%kernel kernel:exn:break:hang-up exn:break:hang-up)) + (define make-exn:break:hang-up kernel:exn:break:hang-up) + (define-syntax exn:break:hang-up + (make-self-ctr-struct-info + (λ () + (list + (quote-syntax struct:exn:break:hang-up) + (quote-syntax make-exn:break:hang-up) + (quote-syntax exn:break:hang-up?) + (list + (quote-syntax exn:break-continuation) + (quote-syntax exn-continuation-marks) + (quote-syntax exn-message)) + '(#f #f #f) + (quote-syntax exn:break))) + (λ () (quote-syntax kernel:exn:break:hang-up))))) (begin (#%require (rename '#%kernel kernel:arity-at-least arity-at-least)) (define make-arity-at-least kernel:arity-at-least) diff --git a/collects/scribblings/reference/breaks.scrbl b/collects/scribblings/reference/breaks.scrbl index 38accb0d51..de43a6ddb2 100644 --- a/collects/scribblings/reference/breaks.scrbl +++ b/collects/scribblings/reference/breaks.scrbl @@ -7,15 +7,28 @@ A @deftech{break} is an asynchronous exception, usually triggered through an external source controlled by the user, or through the -@racket[break-thread] procedure. A break exception can only occur in a +@racket[break-thread] procedure. For example, the user may type Ctl-C +in a terminal to trigger a break. On some platforms, the Racket +process may receive @as-index{@tt{SIGINT}}, @as-index{@tt{SIGHUP}}, +or @as-index{@tt{SIGTERM}}; the latter two correspond to hang-up and +terminate breaks as reflected by @racket[exn:break:hang-up] and +@racket[exn:break:terminate], respectively. Multiple breaks may be +collapsed into a single exception, and multiple breaks of different +kinds may be collapsed to a single ``strongest'' break, where a +hang-up break is stronger than a interrupt break, and a terminate +break is stronger than a hang-up break. + +A break exception can only occur in a thread while breaks are enabled. When a break is detected and enabled, -the @exnraise[exn:break] in the thread sometime afterward; if breaking +the @racket[exn:break] (or @racket[exn:break:hang-up] or +@racket[exn:break:terminate]) exception is raised +in the thread sometime afterward; if breaking is disabled when @racket[break-thread] is called, the break is suspended until breaking is again enabled for the thread. While a thread has a suspended break, additional breaks are ignored. Breaks are enabled through the @racket[break-enabled] parameter-like -procedure, and through the @racket[parameterize-break] form, which is +procedure and through the @racket[parameterize-break] form, which is analogous to @racket[parameterize]. The @racket[break-enabled] procedure does not represent a parameter to be used with @racket[parameterize], because changing the break-enabled state of a diff --git a/collects/scribblings/reference/exns.scrbl b/collects/scribblings/reference/exns.scrbl index 021f4692ca..010804337c 100644 --- a/collects/scribblings/reference/exns.scrbl +++ b/collects/scribblings/reference/exns.scrbl @@ -406,8 +406,12 @@ it returns, an exception is raised (to be handled by an exception handler that reports both the original and newly raised exception). The default uncaught-exception handler prints an error message using -the current @tech{error display handler} (see @racket[error-display-handler]) -and then escapes by calling the current @tech{error escape handler} (see +the current @tech{error display handler} (see @racket[error-display-handler]). +If the argument to the handler is an instance of @racket[exn:break:hang-up] +or @racket[exn:break:terminate], the default uncaught-exception handler +then calls the @tech{exit handler} with @racket[1], which normally exits +or escapes. For any argument, the default uncaught-exception handler +then escapes by calling the current @tech{error escape handler} (see @racket[error-escape-handler]). The call to each handler is @racket[parameterize]d to set @racket[error-display-handler] to the default @tech{error display handler}, and it is @racket[parameterize-break]ed @@ -699,6 +703,20 @@ Raised asynchronously (when enabled) in response to a break request. The @racket[continuation] field can be used by a handler to resume the interrupted computation.} +@defstruct[(exn:break:hang-up exn:break) () + #:inspector #f]{ + +Raised asynchronously for hang-up breaks. The default + @tech{uncaught-exception handler} reacts to this exception type by + calling the @tech{exit handler}.} + +@defstruct[(exn:break:terminate exn:break) () + #:inspector #f]{ + +Raised asynchronously for termination-request breaks. The default + @tech{uncaught-exception handler} reacts to this exception type by + calling the @tech{exit handler}.} + @defthing[prop:exn:srclocs struct-type-property?]{ diff --git a/collects/scribblings/reference/places.scrbl b/collects/scribblings/reference/places.scrbl index fe9433263f..114fc8a587 100644 --- a/collects/scribblings/reference/places.scrbl +++ b/collects/scribblings/reference/places.scrbl @@ -251,8 +251,10 @@ If any pumping threads were created to connect a non-@tech{file-stream completion value already.} -@defproc[(place-break [p place?]) void?]{ - Sends place @racket[p] a break signal; see @secref["breakhandler"]. +@defproc[(place-break [p place?] + [kind (or/c #f 'hang-up 'terminate) #f]) + void?]{ + Sends the main thread of place @racket[p] a break; see @secref["breakhandler"]. } diff --git a/collects/scribblings/reference/threads.scrbl b/collects/scribblings/reference/threads.scrbl index 451f0f1717..c5fc3b3ea8 100644 --- a/collects/scribblings/reference/threads.scrbl +++ b/collects/scribblings/reference/threads.scrbl @@ -158,10 +158,13 @@ threads. For example, if a thread is killed while extracting a character from an input port, the character is either completely consumed or not consumed, and other threads can safely use the port.} -@defproc[(break-thread [thd thread?]) void?]{ +@defproc[(break-thread [thd thread?] + [kind (or/c #f 'hang-up 'terminate) #f]) + void?]{ @index['("threads" "breaking")]{Registers} a break with the specified -thread. If breaking is disabled in @racket[thd], the break will be +thread, where @racket[kind] optionally indicates the kind of break to +register. If breaking is disabled in @racket[thd], the break will be ignored until breaks are re-enabled (see @secref["breakhandler"]).} @defproc[(sleep [secs (>=/c 0) 0]) void?]{ diff --git a/collects/tests/racket/namespac.rktl b/collects/tests/racket/namespac.rktl index eeb5ba814a..1d16c5a5cd 100644 --- a/collects/tests/racket/namespac.rktl +++ b/collects/tests/racket/namespac.rktl @@ -61,7 +61,9 @@ (mkp "exn:fail:out-of-memory") (mkp "exn:fail:unsupported") (mkp "exn:fail:user") - (mkp "exn:break")))]) + (mkp "exn:break") + (mkp "exn:break:hang-up") + (mkp "exn:break:terminate")))]) (test #t 'names (andmap (lambda (nv-pair) diff --git a/collects/tests/racket/place-channel.rkt b/collects/tests/racket/place-channel.rkt index a83e056419..677f4a5b68 100644 --- a/collects/tests/racket/place-channel.rkt +++ b/collects/tests/racket/place-channel.rkt @@ -363,16 +363,26 @@ (place-wait pl)) ; test place-break - (let ([p (place ch - (with-handlers ([exn:break? (lambda (x) (place-channel-put ch "OK"))]) - (place-channel-put ch "ALIVE") - (sync never-evt) - (place-channel-put ch "NOK")))]) - - (test "ALIVE" place-channel-get p) - (place-break p) - (test "OK" place-channel-get p) - (place-wait p)) + (let () + (define (go kind) + (let ([p (place ch + (define kind (place-channel-get ch)) + (with-handlers ([(case kind + [(hang-up) exn:break:hang-up?] + [(terminate) exn:break:terminate?] + [else exn:break?]) + (lambda (x) (place-channel-put ch "OK"))]) + (place-channel-put ch "ALIVE") + (sync never-evt) + (place-channel-put ch "NOK")))]) + (place-channel-put p kind) + (test "ALIVE" place-channel-get p) + (place-break p kind) + (test "OK" place-channel-get p) + (place-wait p))) + (go #f) + (go 'hang-up) + (go 'terminate)) ; test place-dead-evt (define wbs '()) diff --git a/collects/tests/racket/thread.rktl b/collects/tests/racket/thread.rktl index 9ad0bd88c2..9b8b514774 100644 --- a/collects/tests/racket/thread.rktl +++ b/collects/tests/racket/thread.rktl @@ -187,8 +187,43 @@ (arity-test kill-thread 1 1) (err/rt-test (kill-thread 5) type?) -(arity-test break-thread 1 1) +(arity-test break-thread 1 2) (err/rt-test (break-thread 5) type?) +(err/rt-test (break-thread (current-thread) 5) type?) + +(err/rt-test (break-thread (current-thread)) exn:break?) +(err/rt-test (break-thread (current-thread) 'hang-up) exn:break:hang-up?) +(err/rt-test (break-thread (current-thread) 'terminate) exn:break:terminate?) + +(let ([ex? #f] + [s (make-semaphore)]) + (define (go) + (exit-handler (lambda (exn) + (set! ex? #t) + (kill-thread (current-thread)))) + (error-display-handler void) + (semaphore-post s) + (sync (make-semaphore))) + + (define t1 (thread go)) + (semaphore-wait s) + (test (void) break-thread t1) + (sync t1) + (test #f values ex?) + + (define t2 (thread go)) + (semaphore-wait s) + (test (void) break-thread t2 'hang-up) + (sync t2) + (test #t values ex?) + (set! ex? #f) + + (define t3 (thread go)) + (semaphore-wait s) + (test (void) break-thread t3 'terminate) + (sync t3) + (test #t values ex?) + (set! ex? #f)) (arity-test thread-wait 1 1) (err/rt-test (thread-wait 5) type?) diff --git a/doc/release-notes/racket/HISTORY.txt b/doc/release-notes/racket/HISTORY.txt index 64976ed197..257440afe8 100644 --- a/doc/release-notes/racket/HISTORY.txt +++ b/doc/release-notes/racket/HISTORY.txt @@ -1,3 +1,8 @@ +Version 5.3.0.20 +Added exn:break:hang-up and exn:break:terminate, added + extra argument to break-thread and place-break, and + redirect SIGTERM and SIGHUP as breaks + Version 5.3.0.16 scribble/base: add items/c scribble/decode: add spliceof diff --git a/src/racket/main.c b/src/racket/main.c index b99baeb248..e2fed6e8e9 100644 --- a/src/racket/main.c +++ b/src/racket/main.c @@ -195,6 +195,7 @@ static void *signal_handle; # ifndef NO_USER_BREAK_HANDLER static void user_break_hit(int ignore) + XFORM_SKIP_PROC { scheme_break_main_thread_at(break_handle); scheme_signal_received_at(signal_handle); @@ -202,13 +203,33 @@ static void user_break_hit(int ignore) # ifdef SIGSET_NEEDS_REINSTALL MZ_SIGSET(SIGINT, user_break_hit); # endif -# ifdef MZ_PRECISE_GC -# ifndef GC_STACK_CALLEE_RESTORE - /* Restore variable stack. */ - GC_variable_stack = (void **)__gc_var_stack__[0]; -# endif +} + +# ifndef NO_SIGTERM_HANDLER +static void term_hit(int ignore) + XFORM_SKIP_PROC +{ + scheme_break_kind_main_thread_at(break_handle, MZEXN_BREAK_TERMINATE); + scheme_signal_received_at(signal_handle); + +# ifdef SIGSET_NEEDS_REINSTALL + MZ_SIGSET(SIGTERM, term_hit); # endif } +# endif + +# ifndef NO_SIGHUP_HANDLER +static void hup_hit(int ignore) + XFORM_SKIP_PROC +{ + scheme_break_kind_main_thread_at(break_handle, MZEXN_BREAK_HANG_UP); + scheme_signal_received_at(signal_handle); + +# ifdef SIGSET_NEEDS_REINSTALL + MZ_SIGSET(SIGHUP, hup_hit); +# endif +} +# endif # endif @@ -352,6 +373,12 @@ static int main_after_stack(void *data) signal_handle = scheme_get_signal_handle(); # ifndef NO_USER_BREAK_HANDLER MZ_SIGSET(SIGINT, user_break_hit); +# ifndef NO_SIGTERM_HANDLER + MZ_SIGSET(SIGTERM, term_hit); +# endif +# ifndef NO_SIGHUP_HANDLER + MZ_SIGSET(SIGHUP, hup_hit); +# endif # endif # ifdef DOS_FILE_SYSTEM SetConsoleCtrlHandler(ConsoleBreakHandler, TRUE); diff --git a/src/racket/sconfig.h b/src/racket/sconfig.h index 3055ae3619..c662022cdd 100644 --- a/src/racket/sconfig.h +++ b/src/racket/sconfig.h @@ -595,6 +595,7 @@ # define SIGSET_IS_SIGNAL # define SIGSET_NEEDS_REINSTALL +# define NO_SIGHUP_HANDLER #define USE_WINSOCK_TCP @@ -1499,7 +1500,12 @@ /* NO_INLINE_KEYWORD indicates that the C compiler doesn't recognize C's `inline' keyword. */ - /* NO_USER_BREAK_HANDLER turns off handling of INT signal in main.c */ + /* NO_USER_BREAK_HANDLER turns off handling of SIGINT, SIGTERM, and + SIGHUP in main.c */ + + /* NO_SIGTERM_HANDLER turns off handling of SIGTERM in main.c */ + + /* NO_SIGHUP_HANDLER turns off handling of SIGHUP in main.c */ /* DIR_INCLUDE if there's a file (mainly for Windows). */ diff --git a/src/racket/src/cstartup.inc b/src/racket/src/cstartup.inc index 7b26c15cf2..a4691432ef 100644 --- a/src/racket/src/cstartup.inc +++ b/src/racket/src/cstartup.inc @@ -1,15 +1,15 @@ { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,53,46,51,46,48,46,49,56,84,0,0,0,0,0,0,0,0,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,53,46,51,46,48,46,50,48,84,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,51,0,0,0,1,0,0,10,0,14, -0,19,0,26,0,29,0,36,0,43,0,47,0,60,0,65,0,69,0,74,0, +0,21,0,34,0,39,0,43,0,46,0,51,0,58,0,62,0,67,0,74,0, 83,0,87,0,93,0,107,0,121,0,124,0,130,0,134,0,136,0,147,0,149, 0,163,0,170,0,192,0,194,0,208,0,19,1,48,1,59,1,70,1,96,1, 129,1,162,1,221,1,21,2,99,2,155,2,160,2,180,2,73,3,93,3,145, 3,211,3,100,4,242,4,40,5,51,5,130,5,0,0,92,7,0,0,69,35, -37,109,105,110,45,115,116,120,29,11,11,11,64,99,111,110,100,66,108,101,116, -114,101,99,62,111,114,66,117,110,108,101,115,115,66,100,101,102,105,110,101,63, -97,110,100,72,112,97,114,97,109,101,116,101,114,105,122,101,64,108,101,116,42, -63,108,101,116,64,119,104,101,110,68,104,101,114,101,45,115,116,120,29,11,11, +37,109,105,110,45,115,116,120,29,11,11,11,66,108,101,116,114,101,99,72,112, +97,114,97,109,101,116,101,114,105,122,101,64,108,101,116,42,63,97,110,100,62, +111,114,64,119,104,101,110,66,100,101,102,105,110,101,63,108,101,116,64,99,111, +110,100,66,117,110,108,101,115,115,68,104,101,114,101,45,115,116,120,29,11,11, 11,65,113,117,111,116,101,29,94,2,15,68,35,37,107,101,114,110,101,108,11, 29,94,2,15,68,35,37,112,97,114,97,109,122,11,62,105,102,65,98,101,103, 105,110,63,115,116,120,61,115,70,108,101,116,45,118,97,108,117,101,115,61,120, @@ -17,8 +17,8 @@ 1,20,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,45,107,101, 121,61,118,73,100,101,102,105,110,101,45,118,97,108,117,101,115,97,36,11,8, 240,146,86,0,0,95,159,2,17,36,36,159,2,16,36,36,159,2,16,36,36, -16,20,2,10,2,2,2,3,2,2,2,5,2,2,2,6,2,2,2,7,2, -2,2,8,2,2,2,9,2,2,2,4,2,2,2,11,2,2,2,12,2,2, +16,20,2,3,2,2,2,4,2,2,2,5,2,2,2,6,2,2,2,7,2, +2,2,8,2,2,2,9,2,2,2,10,2,2,2,11,2,2,2,12,2,2, 97,37,11,8,240,146,86,0,0,93,159,2,16,36,37,16,2,2,13,161,2, 2,37,2,13,2,2,2,13,96,11,11,8,240,146,86,0,0,16,0,96,38, 11,8,240,146,86,0,0,16,0,18,98,64,104,101,114,101,13,16,6,36,2, @@ -28,13 +28,13 @@ 89,2,18,248,22,104,199,249,22,79,2,19,248,22,106,201,12,27,248,22,81, 248,22,163,4,196,28,248,22,87,193,20,14,159,37,36,37,28,248,22,87,248, 22,81,194,248,22,80,193,249,22,156,4,80,158,39,36,251,22,89,2,18,248, -22,80,199,249,22,79,2,8,248,22,81,201,11,18,100,10,13,16,6,36,2, +22,80,199,249,22,79,2,6,248,22,81,201,11,18,100,10,13,16,6,36,2, 14,2,2,11,11,11,8,32,8,31,8,30,8,29,16,4,11,11,2,20,3, 1,8,101,110,118,49,54,57,51,56,16,4,11,11,2,21,3,1,8,101,110, 118,49,54,57,51,57,27,248,22,81,248,22,163,4,196,28,248,22,87,193,20, 14,159,37,36,37,28,248,22,87,248,22,81,194,248,22,80,193,249,22,156,4, 80,158,39,36,250,22,89,2,22,248,22,89,249,22,89,248,22,89,2,23,248, -22,80,201,251,22,89,2,18,2,23,2,23,249,22,79,2,5,248,22,81,204, +22,80,201,251,22,89,2,18,2,23,2,23,249,22,79,2,7,248,22,81,204, 18,100,11,13,16,6,36,2,14,2,2,11,11,11,8,32,8,31,8,30,8, 29,16,4,11,11,2,20,3,1,8,101,110,118,49,54,57,52,49,16,4,11, 11,2,21,3,1,8,101,110,118,49,54,57,52,50,248,22,163,4,193,27,248, @@ -51,8 +51,8 @@ 24,249,22,2,32,0,88,163,8,36,37,47,11,9,222,33,43,248,22,163,4, 248,22,80,201,248,22,81,198,27,248,22,81,248,22,163,4,196,27,248,22,163, 4,248,22,80,195,249,22,156,4,80,158,40,36,28,248,22,87,195,250,22,90, -2,22,9,248,22,81,199,250,22,89,2,11,248,22,89,248,22,80,199,250,22, -90,2,10,248,22,81,201,248,22,81,202,27,248,22,81,248,22,163,4,23,197, +2,22,9,248,22,81,199,250,22,89,2,10,248,22,89,248,22,80,199,250,22, +90,2,5,248,22,81,201,248,22,81,202,27,248,22,81,248,22,163,4,23,197, 1,27,249,22,1,22,93,249,22,2,22,163,4,248,22,163,4,248,22,80,199, 248,22,183,4,249,22,156,4,80,158,41,36,251,22,89,1,22,119,105,116,104, 45,99,111,110,116,105,110,117,97,116,105,111,110,45,109,97,114,107,2,26,250, @@ -63,9 +63,9 @@ 87,193,20,14,159,37,36,37,249,22,156,4,80,158,39,36,27,248,22,163,4, 248,22,80,197,28,249,22,151,9,62,61,62,248,22,157,4,248,22,104,196,250, 22,89,2,22,248,22,89,249,22,89,21,93,2,27,248,22,80,199,250,22,90, -2,3,249,22,89,2,27,249,22,89,248,22,113,203,2,27,248,22,81,202,251, +2,11,249,22,89,2,27,249,22,89,248,22,113,203,2,27,248,22,81,202,251, 22,89,2,18,28,249,22,151,9,248,22,157,4,248,22,80,200,64,101,108,115, -101,10,248,22,80,197,250,22,90,2,22,9,248,22,81,200,249,22,79,2,3, +101,10,248,22,80,197,250,22,90,2,22,9,248,22,81,200,249,22,79,2,11, 248,22,81,202,99,13,16,6,36,2,14,2,2,11,11,11,8,32,8,31,8, 30,8,29,16,4,11,11,2,20,3,1,8,101,110,118,49,54,57,54,52,16, 4,11,11,2,21,3,1,8,101,110,118,49,54,57,54,53,18,158,94,10,64, @@ -81,25 +81,25 @@ 2,11,2,12,36,46,37,16,0,36,16,1,2,13,37,11,11,11,16,0,16, 0,16,0,36,36,11,12,11,11,16,0,16,0,16,0,36,36,16,11,16,5, 11,20,15,16,2,20,14,159,36,36,37,80,158,36,36,36,20,113,159,36,16, -1,2,13,16,1,33,33,10,16,5,2,6,88,163,8,36,37,53,37,9,223, -0,33,34,36,20,113,159,36,16,1,2,13,16,0,11,16,5,2,12,88,163, +1,2,13,16,1,33,33,10,16,5,2,12,88,163,8,36,37,53,37,9,223, +0,33,34,36,20,113,159,36,16,1,2,13,16,0,11,16,5,2,8,88,163, 8,36,37,53,37,9,223,0,33,35,36,20,113,159,36,16,1,2,13,16,0, -11,16,5,2,8,88,163,8,36,37,53,37,9,223,0,33,36,36,20,113,159, -36,16,1,2,13,16,1,33,37,11,16,5,2,5,88,163,8,36,37,56,37, +11,16,5,2,6,88,163,8,36,37,53,37,9,223,0,33,36,36,20,113,159, +36,16,1,2,13,16,1,33,37,11,16,5,2,7,88,163,8,36,37,56,37, 9,223,0,33,38,36,20,113,159,36,16,1,2,13,16,1,33,39,11,16,5, -2,11,88,163,8,36,37,58,37,9,223,0,33,42,36,20,113,159,36,16,1, -2,13,16,0,11,16,5,2,4,88,163,8,36,37,53,37,9,223,0,33,44, -36,20,113,159,36,16,1,2,13,16,0,11,16,5,2,10,88,163,8,36,37, +2,10,88,163,8,36,37,58,37,9,223,0,33,42,36,20,113,159,36,16,1, +2,13,16,0,11,16,5,2,3,88,163,8,36,37,53,37,9,223,0,33,44, +36,20,113,159,36,16,1,2,13,16,0,11,16,5,2,5,88,163,8,36,37, 54,37,9,223,0,33,45,36,20,113,159,36,16,1,2,13,16,0,11,16,5, -2,9,88,163,8,36,37,56,37,9,223,0,33,46,36,20,113,159,36,16,1, -2,13,16,0,11,16,5,2,3,88,163,8,36,37,58,37,9,223,0,33,47, -36,20,113,159,36,16,1,2,13,16,1,33,49,11,16,5,2,7,88,163,8, +2,4,88,163,8,36,37,56,37,9,223,0,33,46,36,20,113,159,36,16,1, +2,13,16,0,11,16,5,2,11,88,163,8,36,37,58,37,9,223,0,33,47, +36,20,113,159,36,16,1,2,13,16,1,33,49,11,16,5,2,9,88,163,8, 36,37,54,37,9,223,0,33,50,36,20,113,159,36,16,1,2,13,16,0,11, 16,0,94,2,16,2,17,93,2,16,9,9,36,0}; EVAL_ONE_SIZED_STR((char *)expr, 2029); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,53,46,51,46,48,46,49,56,84,0,0,0,0,0,0,0,0,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,53,46,51,46,48,46,50,48,84,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,115,0,0,0,1,0,0,8,0,21, 0,26,0,43,0,65,0,94,0,109,0,127,0,139,0,155,0,169,0,191,0, 207,0,224,0,246,0,1,1,7,1,16,1,23,1,30,1,42,1,58,1,82, @@ -151,171 +151,171 @@ 105,120,32,116,111,32,97,32,114,111,111,116,32,112,97,116,104,58,32,6,11, 11,80,76,84,67,79,76,76,69,67,84,83,69,97,100,100,111,110,45,100,105, 114,6,8,8,99,111,108,108,101,99,116,115,27,20,13,159,80,159,37,52,37, -254,80,159,44,53,37,249,22,33,11,80,159,46,52,37,22,151,14,10,22,158, -14,10,22,159,14,10,248,22,139,6,23,196,2,28,248,22,136,7,23,194,2, +254,80,159,44,53,37,249,22,33,11,80,159,46,52,37,22,157,14,10,22,164, +14,10,22,165,14,10,248,22,139,6,23,196,2,28,248,22,136,7,23,194,2, 12,86,94,248,22,159,9,23,194,1,27,20,13,159,80,159,38,52,37,254,80, -159,45,53,37,249,22,33,11,80,159,47,52,37,22,151,14,10,22,158,14,10, -22,159,14,10,248,22,139,6,23,197,2,28,248,22,136,7,23,194,2,12,86, +159,45,53,37,249,22,33,11,80,159,47,52,37,22,157,14,10,22,164,14,10, +22,165,14,10,248,22,139,6,23,197,2,28,248,22,136,7,23,194,2,12,86, 94,248,22,159,9,23,194,1,27,20,13,159,80,159,39,52,37,254,80,159,46, -53,37,249,22,33,11,80,159,48,52,37,22,151,14,10,22,158,14,10,22,159, +53,37,249,22,33,11,80,159,48,52,37,22,157,14,10,22,164,14,10,22,165, 14,10,248,22,139,6,23,198,2,28,248,22,136,7,23,194,2,12,86,94,248, 22,159,9,23,194,1,248,80,159,40,8,32,39,197,28,248,22,87,23,195,2, -9,27,248,22,80,23,196,2,27,28,248,22,137,15,23,195,2,23,194,1,28, -248,22,136,15,23,195,2,249,22,138,15,23,196,1,250,80,159,43,39,39,248, -22,153,15,2,32,11,10,250,80,159,41,39,39,248,22,153,15,2,32,23,197, -1,10,28,23,193,2,249,22,79,248,22,140,15,249,22,138,15,23,198,1,247, -22,154,15,27,248,22,81,23,200,1,28,248,22,87,23,194,2,9,27,248,22, -80,23,195,2,27,28,248,22,137,15,23,195,2,23,194,1,28,248,22,136,15, -23,195,2,249,22,138,15,23,196,1,250,80,159,48,39,39,248,22,153,15,2, -32,11,10,250,80,159,46,39,39,248,22,153,15,2,32,23,197,1,10,28,23, -193,2,249,22,79,248,22,140,15,249,22,138,15,23,198,1,247,22,154,15,248, +9,27,248,22,80,23,196,2,27,28,248,22,143,15,23,195,2,23,194,1,28, +248,22,142,15,23,195,2,249,22,144,15,23,196,1,250,80,159,43,39,39,248, +22,159,15,2,32,11,10,250,80,159,41,39,39,248,22,159,15,2,32,23,197, +1,10,28,23,193,2,249,22,79,248,22,146,15,249,22,144,15,23,198,1,247, +22,160,15,27,248,22,81,23,200,1,28,248,22,87,23,194,2,9,27,248,22, +80,23,195,2,27,28,248,22,143,15,23,195,2,23,194,1,28,248,22,142,15, +23,195,2,249,22,144,15,23,196,1,250,80,159,48,39,39,248,22,159,15,2, +32,11,10,250,80,159,46,39,39,248,22,159,15,2,32,23,197,1,10,28,23, +193,2,249,22,79,248,22,146,15,249,22,144,15,23,198,1,247,22,160,15,248, 80,159,46,8,31,39,248,22,81,23,199,1,86,94,23,193,1,248,80,159,44, 8,31,39,248,22,81,23,197,1,86,94,23,193,1,27,248,22,81,23,198,1, -28,248,22,87,23,194,2,9,27,248,22,80,23,195,2,27,28,248,22,137,15, -23,195,2,23,194,1,28,248,22,136,15,23,195,2,249,22,138,15,23,196,1, -250,80,159,46,39,39,248,22,153,15,2,32,11,10,250,80,159,44,39,39,248, -22,153,15,2,32,23,197,1,10,28,23,193,2,249,22,79,248,22,140,15,249, -22,138,15,23,198,1,247,22,154,15,248,80,159,44,8,31,39,248,22,81,23, +28,248,22,87,23,194,2,9,27,248,22,80,23,195,2,27,28,248,22,143,15, +23,195,2,23,194,1,28,248,22,142,15,23,195,2,249,22,144,15,23,196,1, +250,80,159,46,39,39,248,22,159,15,2,32,11,10,250,80,159,44,39,39,248, +22,159,15,2,32,23,197,1,10,28,23,193,2,249,22,79,248,22,146,15,249, +22,144,15,23,198,1,247,22,160,15,248,80,159,44,8,31,39,248,22,81,23, 199,1,248,80,159,42,8,31,39,248,22,81,196,28,248,22,87,23,195,2,9, -27,248,22,80,23,196,2,27,28,248,22,137,15,23,195,2,23,194,1,28,248, -22,136,15,23,195,2,249,22,138,15,23,196,1,250,80,159,43,39,39,248,22, -153,15,2,32,11,10,250,80,159,41,39,39,248,22,153,15,2,32,23,197,1, -10,28,23,193,2,249,22,79,248,22,140,15,249,22,138,15,23,198,1,247,22, -154,15,248,80,159,41,8,30,39,248,22,81,23,200,1,248,80,159,39,8,30, +27,248,22,80,23,196,2,27,28,248,22,143,15,23,195,2,23,194,1,28,248, +22,142,15,23,195,2,249,22,144,15,23,196,1,250,80,159,43,39,39,248,22, +159,15,2,32,11,10,250,80,159,41,39,39,248,22,159,15,2,32,23,197,1, +10,28,23,193,2,249,22,79,248,22,146,15,249,22,144,15,23,198,1,247,22, +160,15,248,80,159,41,8,30,39,248,22,81,23,200,1,248,80,159,39,8,30, 39,248,22,81,197,28,248,22,87,23,195,2,9,27,248,22,80,23,196,2,27, -28,248,22,137,15,23,195,2,23,194,1,28,248,22,136,15,23,195,2,249,22, -138,15,23,196,1,250,80,159,43,39,39,248,22,153,15,2,32,11,10,250,80, -159,41,39,39,248,22,153,15,2,32,23,197,1,10,28,23,193,2,249,22,79, -248,22,140,15,249,22,138,15,23,198,1,247,22,154,15,248,80,159,41,8,29, +28,248,22,143,15,23,195,2,23,194,1,28,248,22,142,15,23,195,2,249,22, +144,15,23,196,1,250,80,159,43,39,39,248,22,159,15,2,32,11,10,250,80, +159,41,39,39,248,22,159,15,2,32,23,197,1,10,28,23,193,2,249,22,79, +248,22,146,15,249,22,144,15,23,198,1,247,22,160,15,248,80,159,41,8,29, 39,248,22,81,23,200,1,248,80,159,39,8,29,39,248,22,81,197,27,248,22, -177,14,23,195,2,28,23,193,2,192,86,94,23,193,1,28,248,22,141,7,23, -195,2,27,248,22,135,15,195,28,192,192,248,22,136,15,195,11,86,94,28,28, -248,22,178,14,23,195,2,10,28,248,22,177,14,23,195,2,10,28,248,22,141, -7,23,195,2,28,248,22,135,15,23,195,2,10,248,22,136,15,23,195,2,11, +183,14,23,195,2,28,23,193,2,192,86,94,23,193,1,28,248,22,141,7,23, +195,2,27,248,22,141,15,195,28,192,192,248,22,142,15,195,11,86,94,28,28, +248,22,184,14,23,195,2,10,28,248,22,183,14,23,195,2,10,28,248,22,141, +7,23,195,2,28,248,22,141,15,23,195,2,10,248,22,142,15,23,195,2,11, 12,250,22,188,9,76,110,111,114,109,97,108,45,112,97,116,104,45,99,97,115, -101,2,33,23,197,2,28,28,248,22,178,14,23,195,2,249,22,151,9,248,22, -179,14,23,197,2,2,34,249,22,151,9,247,22,163,8,2,34,27,28,248,22, -141,7,23,196,2,23,195,2,248,22,153,8,248,22,182,14,23,197,2,28,249, -22,169,15,0,21,35,114,120,34,94,91,92,92,93,91,92,92,93,91,63,93, -91,92,92,93,34,23,195,2,28,248,22,141,7,195,248,22,185,14,195,194,27, -248,22,180,7,23,195,1,249,22,186,14,248,22,156,8,250,22,177,15,0,6, -35,114,120,34,47,34,28,249,22,169,15,0,22,35,114,120,34,91,47,92,92, +101,2,33,23,197,2,28,28,248,22,184,14,23,195,2,249,22,151,9,248,22, +185,14,23,197,2,2,34,249,22,151,9,247,22,163,8,2,34,27,28,248,22, +141,7,23,196,2,23,195,2,248,22,153,8,248,22,188,14,23,197,2,28,249, +22,175,15,0,21,35,114,120,34,94,91,92,92,93,91,92,92,93,91,63,93, +91,92,92,93,34,23,195,2,28,248,22,141,7,195,248,22,191,14,195,194,27, +248,22,180,7,23,195,1,249,22,128,15,248,22,156,8,250,22,183,15,0,6, +35,114,120,34,47,34,28,249,22,175,15,0,22,35,114,120,34,91,47,92,92, 93,91,46,32,93,43,91,47,92,92,93,42,36,34,23,201,2,23,199,1,250, -22,177,15,0,19,35,114,120,34,91,32,46,93,43,40,91,47,92,92,93,42, +22,183,15,0,19,35,114,120,34,91,32,46,93,43,40,91,47,92,92,93,42, 41,36,34,23,202,1,6,2,2,92,49,80,159,44,37,38,2,34,28,248,22, -141,7,194,248,22,185,14,194,193,32,58,88,163,8,36,39,53,11,70,102,111, +141,7,194,248,22,191,14,194,193,32,58,88,163,8,36,39,53,11,70,102,111, 117,110,100,45,101,120,101,99,222,33,61,32,59,88,163,8,36,40,58,11,64, -110,101,120,116,222,33,60,27,248,22,139,15,23,196,2,28,249,22,153,9,23, -195,2,23,197,1,11,28,248,22,135,15,23,194,2,27,249,22,131,15,23,197, -1,23,196,1,28,23,197,2,90,159,39,11,89,161,39,36,11,248,22,134,15, -23,197,2,86,95,23,195,1,23,194,1,27,28,23,202,2,27,248,22,139,15, -23,199,2,28,249,22,153,9,23,195,2,23,200,2,11,28,248,22,135,15,23, -194,2,250,2,58,23,205,2,23,206,2,249,22,131,15,23,200,2,23,198,1, +110,101,120,116,222,33,60,27,248,22,145,15,23,196,2,28,249,22,153,9,23, +195,2,23,197,1,11,28,248,22,141,15,23,194,2,27,249,22,137,15,23,197, +1,23,196,1,28,23,197,2,90,159,39,11,89,161,39,36,11,248,22,140,15, +23,197,2,86,95,23,195,1,23,194,1,27,28,23,202,2,27,248,22,145,15, +23,199,2,28,249,22,153,9,23,195,2,23,200,2,11,28,248,22,141,15,23, +194,2,250,2,58,23,205,2,23,206,2,249,22,137,15,23,200,2,23,198,1, 250,2,58,23,205,2,23,206,2,23,196,1,11,28,23,193,2,192,86,94,23, -193,1,27,28,248,22,177,14,23,196,2,27,249,22,131,15,23,198,2,23,205, -2,28,28,248,22,190,14,193,10,248,22,189,14,193,192,11,11,28,23,193,2, -192,86,94,23,193,1,28,23,203,2,11,27,248,22,139,15,23,200,2,28,249, -22,153,9,23,195,2,23,201,1,11,28,248,22,135,15,23,194,2,250,2,58, -23,206,1,23,207,1,249,22,131,15,23,201,1,23,198,1,250,2,58,205,206, +193,1,27,28,248,22,183,14,23,196,2,27,249,22,137,15,23,198,2,23,205, +2,28,28,248,22,132,15,193,10,248,22,131,15,193,192,11,11,28,23,193,2, +192,86,94,23,193,1,28,23,203,2,11,27,248,22,145,15,23,200,2,28,249, +22,153,9,23,195,2,23,201,1,11,28,248,22,141,15,23,194,2,250,2,58, +23,206,1,23,207,1,249,22,137,15,23,201,1,23,198,1,250,2,58,205,206, 195,192,86,94,23,194,1,28,23,196,2,90,159,39,11,89,161,39,36,11,248, -22,134,15,23,197,2,86,95,23,195,1,23,194,1,27,28,23,201,2,27,248, -22,139,15,23,199,2,28,249,22,153,9,23,195,2,23,200,2,11,28,248,22, -135,15,23,194,2,250,2,58,23,204,2,23,205,2,249,22,131,15,23,200,2, +22,140,15,23,197,2,86,95,23,195,1,23,194,1,27,28,23,201,2,27,248, +22,145,15,23,199,2,28,249,22,153,9,23,195,2,23,200,2,11,28,248,22, +141,15,23,194,2,250,2,58,23,204,2,23,205,2,249,22,137,15,23,200,2, 23,198,1,250,2,58,23,204,2,23,205,2,23,196,1,11,28,23,193,2,192, -86,94,23,193,1,27,28,248,22,177,14,23,196,2,27,249,22,131,15,23,198, -2,23,204,2,28,28,248,22,190,14,193,10,248,22,189,14,193,192,11,11,28, -23,193,2,192,86,94,23,193,1,28,23,202,2,11,27,248,22,139,15,23,200, -2,28,249,22,153,9,23,195,2,23,201,1,11,28,248,22,135,15,23,194,2, -250,2,58,23,205,1,23,206,1,249,22,131,15,23,201,1,23,198,1,250,2, -58,204,205,195,192,28,23,193,2,90,159,39,11,89,161,39,36,11,248,22,134, +86,94,23,193,1,27,28,248,22,183,14,23,196,2,27,249,22,137,15,23,198, +2,23,204,2,28,28,248,22,132,15,193,10,248,22,131,15,193,192,11,11,28, +23,193,2,192,86,94,23,193,1,28,23,202,2,11,27,248,22,145,15,23,200, +2,28,249,22,153,9,23,195,2,23,201,1,11,28,248,22,141,15,23,194,2, +250,2,58,23,205,1,23,206,1,249,22,137,15,23,201,1,23,198,1,250,2, +58,204,205,195,192,28,23,193,2,90,159,39,11,89,161,39,36,11,248,22,140, 15,23,199,2,86,95,23,195,1,23,194,1,27,28,23,198,2,251,2,59,23, 198,2,23,203,2,23,201,2,23,202,2,11,28,23,193,2,192,86,94,23,193, -1,27,28,248,22,177,14,195,27,249,22,131,15,197,200,28,28,248,22,190,14, -193,10,248,22,189,14,193,192,11,11,28,192,192,28,198,11,251,2,59,198,203, +1,27,28,248,22,183,14,195,27,249,22,137,15,197,200,28,28,248,22,132,15, +193,10,248,22,131,15,193,192,11,11,28,192,192,28,198,11,251,2,59,198,203, 201,202,194,32,62,88,163,8,36,40,58,11,2,31,222,33,63,28,248,22,87, -23,197,2,11,27,248,22,138,15,248,22,80,23,199,2,27,249,22,131,15,23, -196,1,23,197,2,28,248,22,189,14,23,194,2,250,2,58,198,199,195,86,94, +23,197,2,11,27,248,22,144,15,248,22,80,23,199,2,27,249,22,137,15,23, +196,1,23,197,2,28,248,22,131,15,23,194,2,250,2,58,198,199,195,86,94, 23,193,1,27,248,22,81,23,200,1,28,248,22,87,23,194,2,11,27,248,22, -138,15,248,22,80,23,196,2,27,249,22,131,15,23,196,1,23,200,2,28,248, -22,189,14,23,194,2,250,2,58,201,202,195,86,94,23,193,1,27,248,22,81, -23,197,1,28,248,22,87,23,194,2,11,27,248,22,138,15,248,22,80,195,27, -249,22,131,15,23,196,1,202,28,248,22,189,14,193,250,2,58,204,205,195,251, -2,62,204,205,206,248,22,81,199,86,95,28,28,248,22,177,14,23,195,2,10, -28,248,22,141,7,23,195,2,28,248,22,135,15,23,195,2,10,248,22,136,15, +144,15,248,22,80,23,196,2,27,249,22,137,15,23,196,1,23,200,2,28,248, +22,131,15,23,194,2,250,2,58,201,202,195,86,94,23,193,1,27,248,22,81, +23,197,1,28,248,22,87,23,194,2,11,27,248,22,144,15,248,22,80,195,27, +249,22,137,15,23,196,1,202,28,248,22,131,15,193,250,2,58,204,205,195,251, +2,62,204,205,206,248,22,81,199,86,95,28,28,248,22,183,14,23,195,2,10, +28,248,22,141,7,23,195,2,28,248,22,141,15,23,195,2,10,248,22,142,15, 23,195,2,11,12,250,22,188,9,2,5,2,35,23,197,2,28,28,23,195,2, -28,28,248,22,177,14,23,196,2,10,28,248,22,141,7,23,196,2,28,248,22, -135,15,23,196,2,10,248,22,136,15,23,196,2,11,248,22,135,15,23,196,2, +28,28,248,22,183,14,23,196,2,10,28,248,22,141,7,23,196,2,28,248,22, +141,15,23,196,2,10,248,22,142,15,23,196,2,11,248,22,141,15,23,196,2, 11,10,12,250,22,188,9,2,5,6,45,45,40,111,114,47,99,32,35,102,32, 40,97,110,100,47,99,32,112,97,116,104,45,115,116,114,105,110,103,63,32,114, 101,108,97,116,105,118,101,45,112,97,116,104,63,41,41,23,198,2,28,28,248, -22,135,15,23,195,2,90,159,39,11,89,161,39,36,11,248,22,134,15,23,198, +22,141,15,23,195,2,90,159,39,11,89,161,39,36,11,248,22,140,15,23,198, 2,249,22,151,9,194,2,36,11,27,248,22,161,8,6,4,4,80,65,84,72, 27,28,23,194,2,249,80,158,40,40,23,196,1,9,86,94,23,194,1,9,27, -28,249,22,151,9,247,22,163,8,2,34,249,22,79,248,22,186,14,5,1,46, -23,196,1,23,194,1,28,248,22,87,23,194,2,11,27,248,22,138,15,248,22, -80,23,196,2,27,249,22,131,15,23,196,1,23,201,2,28,248,22,189,14,23, +28,249,22,151,9,247,22,163,8,2,34,249,22,79,248,22,128,15,5,1,46, +23,196,1,23,194,1,28,248,22,87,23,194,2,11,27,248,22,144,15,248,22, +80,23,196,2,27,249,22,137,15,23,196,1,23,201,2,28,248,22,131,15,23, 194,2,250,2,58,202,203,195,86,94,23,193,1,27,248,22,81,23,197,1,28, -248,22,87,23,194,2,11,27,248,22,138,15,248,22,80,23,196,2,27,249,22, -131,15,23,196,1,23,204,2,28,248,22,189,14,23,194,2,250,2,58,205,206, +248,22,87,23,194,2,11,27,248,22,144,15,248,22,80,23,196,2,27,249,22, +137,15,23,196,1,23,204,2,28,248,22,131,15,23,194,2,250,2,58,205,206, 195,86,94,23,193,1,27,248,22,81,23,197,1,28,248,22,87,23,194,2,11, -27,248,22,138,15,248,22,80,195,27,249,22,131,15,23,196,1,206,28,248,22, -189,14,193,250,2,58,23,16,23,17,195,251,2,62,23,16,23,17,23,18,248, -22,81,199,27,248,22,138,15,23,196,1,28,248,22,189,14,193,250,2,58,198, +27,248,22,144,15,248,22,80,195,27,249,22,137,15,23,196,1,206,28,248,22, +131,15,193,250,2,58,23,16,23,17,195,251,2,62,23,16,23,17,23,18,248, +22,81,199,27,248,22,144,15,23,196,1,28,248,22,131,15,193,250,2,58,198, 199,195,11,250,80,159,39,39,39,196,197,11,250,80,159,39,39,39,196,11,11, 32,67,88,163,8,36,39,57,11,2,31,222,33,69,0,8,35,114,120,35,34, -92,34,34,27,249,22,165,15,23,197,2,23,198,2,28,23,193,2,86,94,23, -196,1,27,248,22,104,23,195,2,27,27,248,22,113,23,197,1,27,249,22,165, +92,34,34,27,249,22,171,15,23,197,2,23,198,2,28,23,193,2,86,94,23, +196,1,27,248,22,104,23,195,2,27,27,248,22,113,23,197,1,27,249,22,171, 15,23,201,2,23,196,2,28,23,193,2,86,94,23,194,1,27,248,22,104,23, 195,2,27,250,2,67,23,203,2,23,204,1,248,22,113,23,199,1,28,249,22, -138,8,23,196,2,2,37,249,22,93,23,202,2,194,249,22,79,248,22,186,14, -28,249,22,151,9,247,22,163,8,2,34,250,22,177,15,2,68,23,200,1,2, +138,8,23,196,2,2,37,249,22,93,23,202,2,194,249,22,79,248,22,128,15, +28,249,22,151,9,247,22,163,8,2,34,250,22,183,15,2,68,23,200,1,2, 37,23,197,1,194,86,95,23,199,1,23,193,1,28,249,22,138,8,23,196,2, -2,37,249,22,93,23,200,2,9,249,22,79,248,22,186,14,28,249,22,151,9, -247,22,163,8,2,34,250,22,177,15,2,68,23,200,1,2,37,23,197,1,9, +2,37,249,22,93,23,200,2,9,249,22,79,248,22,128,15,28,249,22,151,9, +247,22,163,8,2,34,250,22,183,15,2,68,23,200,1,2,37,23,197,1,9, 28,249,22,138,8,23,196,2,2,37,249,22,93,197,194,86,94,23,196,1,249, -22,79,248,22,186,14,28,249,22,151,9,247,22,163,8,2,34,250,22,177,15, +22,79,248,22,128,15,28,249,22,151,9,247,22,163,8,2,34,250,22,183,15, 2,68,23,200,1,2,37,23,197,1,194,86,94,23,193,1,28,249,22,138,8, -23,198,2,2,37,249,22,93,195,9,86,94,23,194,1,249,22,79,248,22,186, -14,28,249,22,151,9,247,22,163,8,2,34,250,22,177,15,2,68,23,202,1, +23,198,2,2,37,249,22,93,195,9,86,94,23,194,1,249,22,79,248,22,128, +15,28,249,22,151,9,247,22,163,8,2,34,250,22,183,15,2,68,23,202,1, 2,37,23,199,1,9,86,95,28,28,248,22,130,8,194,10,248,22,141,7,194, 12,250,22,188,9,2,6,6,21,21,40,111,114,47,99,32,98,121,116,101,115, 63,32,115,116,114,105,110,103,63,41,196,28,28,248,22,88,195,249,22,4,22, -177,14,196,11,12,250,22,188,9,2,6,6,14,14,40,108,105,115,116,111,102, +183,14,196,11,12,250,22,188,9,2,6,6,14,14,40,108,105,115,116,111,102, 32,112,97,116,104,63,41,197,250,2,67,197,195,28,248,22,141,7,197,248,22, -155,8,197,196,86,94,28,28,248,22,177,14,194,10,28,248,22,141,7,194,28, -248,22,135,15,194,10,248,22,136,15,194,11,12,250,22,188,9,195,2,35,196, -28,248,22,135,15,194,12,251,22,190,9,196,2,38,2,39,197,86,94,28,28, -248,22,177,14,194,10,28,248,22,141,7,194,28,248,22,135,15,194,10,248,22, -136,15,194,11,12,250,22,188,9,195,2,35,196,28,248,22,135,15,194,12,251, -22,190,9,196,2,38,2,39,197,86,94,86,94,28,28,248,22,177,14,23,195, -2,10,28,248,22,141,7,23,195,2,28,248,22,135,15,23,195,2,10,248,22, -136,15,23,195,2,11,12,250,22,188,9,195,2,35,23,197,2,28,248,22,135, +155,8,197,196,86,94,28,28,248,22,183,14,194,10,28,248,22,141,7,194,28, +248,22,141,15,194,10,248,22,142,15,194,11,12,250,22,188,9,195,2,35,196, +28,248,22,141,15,194,12,251,22,190,9,196,2,38,2,39,197,86,94,28,28, +248,22,183,14,194,10,28,248,22,141,7,194,28,248,22,141,15,194,10,248,22, +142,15,194,11,12,250,22,188,9,195,2,35,196,28,248,22,141,15,194,12,251, +22,190,9,196,2,38,2,39,197,86,94,86,94,28,28,248,22,183,14,23,195, +2,10,28,248,22,141,7,23,195,2,28,248,22,141,15,23,195,2,10,248,22, +142,15,23,195,2,11,12,250,22,188,9,195,2,35,23,197,2,28,248,22,141, 15,23,195,2,12,251,22,190,9,196,2,38,2,39,23,198,1,249,22,3,88, 163,8,36,37,47,11,9,223,2,33,72,196,28,28,248,22,0,194,249,22,50, -195,37,11,12,250,22,188,9,195,2,40,196,86,94,28,28,248,22,177,14,193, -10,28,248,22,141,7,193,28,248,22,135,15,193,10,248,22,136,15,193,11,12, -250,22,188,9,2,10,2,35,195,28,248,22,135,15,193,12,251,22,190,9,2, -10,2,38,2,39,196,86,95,86,94,86,94,28,28,248,22,177,14,195,10,28, -248,22,141,7,195,28,248,22,135,15,195,10,248,22,136,15,195,11,12,250,22, -188,9,2,10,2,35,197,28,248,22,135,15,195,12,251,22,190,9,2,10,2, +195,37,11,12,250,22,188,9,195,2,40,196,86,94,28,28,248,22,183,14,193, +10,28,248,22,141,7,193,28,248,22,141,15,193,10,248,22,142,15,193,11,12, +250,22,188,9,2,10,2,35,195,28,248,22,141,15,193,12,251,22,190,9,2, +10,2,38,2,39,196,86,95,86,94,86,94,28,28,248,22,183,14,195,10,28, +248,22,141,7,195,28,248,22,141,15,195,10,248,22,142,15,195,11,12,250,22, +188,9,2,10,2,35,197,28,248,22,141,15,195,12,251,22,190,9,2,10,2, 38,2,39,198,249,22,3,32,0,88,163,8,36,37,46,11,9,222,33,75,197, 28,28,248,22,0,194,249,22,50,195,37,11,12,250,22,188,9,2,10,2,40, -196,251,80,158,40,45,197,198,199,11,86,94,28,28,248,22,177,14,193,10,28, -248,22,141,7,193,28,248,22,135,15,193,10,248,22,136,15,193,11,12,250,22, -188,9,2,12,2,35,195,28,248,22,135,15,193,12,251,22,190,9,2,12,2, -38,2,39,196,86,96,86,94,28,28,248,22,177,14,195,10,28,248,22,141,7, -195,28,248,22,135,15,195,10,248,22,136,15,195,11,12,250,22,188,9,2,12, -2,35,197,28,248,22,135,15,195,12,251,22,190,9,2,12,2,38,2,39,198, -86,94,86,94,28,28,248,22,177,14,196,10,28,248,22,141,7,196,28,248,22, -135,15,196,10,248,22,136,15,196,11,12,250,22,188,9,2,12,2,35,198,28, -248,22,135,15,196,12,251,22,190,9,2,12,2,38,2,39,199,249,22,3,32, +196,251,80,158,40,45,197,198,199,11,86,94,28,28,248,22,183,14,193,10,28, +248,22,141,7,193,28,248,22,141,15,193,10,248,22,142,15,193,11,12,250,22, +188,9,2,12,2,35,195,28,248,22,141,15,193,12,251,22,190,9,2,12,2, +38,2,39,196,86,96,86,94,28,28,248,22,183,14,195,10,28,248,22,141,7, +195,28,248,22,141,15,195,10,248,22,142,15,195,11,12,250,22,188,9,2,12, +2,35,197,28,248,22,141,15,195,12,251,22,190,9,2,12,2,38,2,39,198, +86,94,86,94,28,28,248,22,183,14,196,10,28,248,22,141,7,196,28,248,22, +141,15,196,10,248,22,142,15,196,11,12,250,22,188,9,2,12,2,35,198,28, +248,22,141,15,196,12,251,22,190,9,2,12,2,38,2,39,199,249,22,3,32, 0,88,163,8,36,37,46,11,9,222,33,77,198,28,28,248,22,0,194,249,22, 50,195,37,11,12,250,22,188,9,2,12,2,40,196,251,80,158,40,45,197,199, -200,198,0,6,45,105,110,102,46,48,27,248,22,153,15,2,41,27,28,248,22, -136,15,23,195,2,193,20,13,159,80,159,38,52,37,250,80,159,41,53,37,249, -22,33,11,80,159,43,52,37,22,154,15,248,22,153,15,68,111,114,105,103,45, -100,105,114,27,248,22,153,15,2,32,250,80,159,42,39,39,23,196,1,23,198, -1,11,28,192,250,22,131,15,195,6,6,6,99,111,110,102,105,103,6,10,10, +200,198,0,6,45,105,110,102,46,48,27,248,22,159,15,2,41,27,28,248,22, +142,15,23,195,2,193,20,13,159,80,159,38,52,37,250,80,159,41,53,37,249, +22,33,11,80,159,43,52,37,22,160,15,248,22,159,15,68,111,114,105,103,45, +100,105,114,27,248,22,159,15,2,32,250,80,159,42,39,39,23,196,1,23,198, +1,11,28,192,250,22,137,15,195,6,6,6,99,111,110,102,105,103,6,10,10, 108,105,110,107,115,46,114,107,116,100,11,86,94,27,247,22,147,10,28,249,22, 139,10,23,195,2,2,42,251,22,143,10,23,197,1,2,42,250,22,189,7,2, 43,28,23,202,1,80,159,46,47,38,80,159,46,50,38,248,22,183,11,23,205, @@ -331,61 +331,61 @@ 193,28,248,22,88,23,194,2,28,28,249,22,191,3,38,248,22,92,23,196,2, 10,249,22,191,3,39,248,22,92,23,196,2,28,28,248,22,141,7,248,22,80, 23,195,2,10,249,22,151,9,64,114,111,111,116,248,22,80,23,196,2,28,27, -248,22,104,194,28,248,22,177,14,23,194,2,10,28,248,22,141,7,23,194,2, -28,248,22,135,15,23,194,2,10,248,22,136,15,23,194,1,11,27,248,22,87, -248,22,106,195,28,192,192,248,22,178,15,248,22,113,195,11,11,11,11,250,22, +248,22,104,194,28,248,22,183,14,23,194,2,10,28,248,22,141,7,23,194,2, +28,248,22,141,15,23,194,2,10,248,22,142,15,23,194,1,11,27,248,22,87, +248,22,106,195,28,192,192,248,22,184,15,248,22,113,195,11,11,11,11,250,22, 158,2,196,197,249,22,79,197,200,28,28,248,22,87,248,22,106,23,197,2,10, -249,22,169,15,248,22,113,23,198,2,247,22,159,8,27,248,22,140,15,249,22, -138,15,248,22,104,23,200,2,23,198,1,28,248,22,64,248,22,80,23,198,2, +249,22,175,15,248,22,113,23,198,2,247,22,159,8,27,248,22,146,15,249,22, +144,15,248,22,104,23,200,2,23,198,1,28,248,22,64,248,22,80,23,198,2, 86,94,23,196,1,86,94,28,250,22,160,2,196,11,11,12,250,22,158,2,196, 11,9,249,22,164,2,195,88,163,8,36,38,50,11,9,224,3,2,33,87,27, 248,22,67,248,22,80,23,199,1,250,22,158,2,23,198,2,23,196,2,249,22, 79,248,22,131,2,23,200,1,250,22,160,2,23,203,1,23,201,1,9,12,250, 22,158,2,195,196,248,22,94,198,20,13,159,80,159,37,57,37,88,163,36,37, -54,8,240,0,72,0,0,9,225,1,0,2,33,81,27,250,22,148,15,28,23, +54,8,240,0,72,0,0,9,225,1,0,2,33,81,27,250,22,154,15,28,23, 197,2,80,159,41,47,38,80,159,41,50,38,11,32,0,88,163,8,36,36,41, 11,9,222,33,82,28,249,22,129,4,23,195,2,28,23,196,2,80,158,40,49, 80,158,40,55,20,13,159,80,159,38,57,37,20,20,94,88,163,36,37,55,8, 240,0,120,12,0,9,226,2,1,3,0,33,83,23,196,1,20,13,159,80,159, 38,52,37,26,29,80,159,8,31,53,37,249,22,33,11,80,159,8,33,52,37, -22,147,14,10,22,148,14,10,22,149,14,10,22,152,14,10,22,151,14,10,22, -153,14,10,22,150,14,10,22,154,14,10,22,155,14,10,22,156,14,10,22,157, -14,10,22,158,14,10,22,159,14,11,22,145,14,11,27,249,22,182,5,28,196, +22,153,14,10,22,154,14,10,22,155,14,10,22,158,14,10,22,157,14,10,22, +159,14,10,22,156,14,10,22,160,14,10,22,161,14,10,22,162,14,10,22,163, +14,10,22,164,14,10,22,165,14,11,22,151,14,11,27,249,22,182,5,28,196, 80,159,41,47,38,80,159,41,50,38,66,98,105,110,97,114,121,27,250,22,46, 22,37,88,163,8,36,36,44,11,9,223,4,33,84,20,20,94,88,163,36,36, 43,11,9,223,4,33,85,23,197,1,86,94,28,28,248,22,88,23,194,2,249, 22,4,32,0,88,163,8,36,37,45,11,9,222,33,86,23,195,2,11,12,248, 22,184,9,6,18,18,105,108,108,45,102,111,114,109,101,100,32,99,111,110,116, -101,110,116,27,247,22,140,2,27,90,159,39,11,89,161,39,36,11,248,22,134, +101,110,116,27,247,22,140,2,27,90,159,39,11,89,161,39,36,11,248,22,140, 15,28,201,80,159,46,47,38,80,159,46,50,38,192,86,96,249,22,3,20,20, 94,88,163,8,36,37,54,11,9,224,2,3,33,88,23,195,1,23,197,1,249, 22,164,2,195,88,163,8,36,38,48,11,9,223,3,33,89,28,197,86,94,20, 18,159,11,80,158,42,48,193,20,18,159,11,80,158,42,49,196,86,94,20,18, 159,11,80,158,42,54,193,20,18,159,11,80,158,42,55,196,193,28,193,80,158, -38,48,80,158,38,54,248,22,8,88,163,8,32,37,8,40,8,240,0,120,47, +38,48,80,158,38,54,248,22,9,88,163,8,32,37,8,40,8,240,0,120,47, 0,9,224,1,2,33,90,0,7,35,114,120,34,47,43,34,28,248,22,141,7, -23,195,2,27,249,22,167,15,2,92,196,28,192,28,249,22,191,3,248,22,103, +23,195,2,27,249,22,173,15,2,92,196,28,192,28,249,22,191,3,248,22,103, 195,248,22,181,3,248,22,144,7,198,249,22,7,250,22,163,7,199,36,248,22, 103,198,197,249,22,7,250,22,163,7,199,36,248,22,103,198,249,22,79,249,22, 163,7,200,248,22,105,199,199,249,22,7,196,197,90,159,39,11,89,161,39,36, -11,248,22,134,15,23,198,1,86,94,23,195,1,28,249,22,151,9,23,195,2, +11,248,22,140,15,23,198,1,86,94,23,195,1,28,249,22,151,9,23,195,2, 2,36,249,22,7,195,199,27,249,22,79,23,197,1,23,201,1,28,248,22,141, -7,23,195,2,27,249,22,167,15,2,92,196,28,192,28,249,22,191,3,248,22, +7,23,195,2,27,249,22,173,15,2,92,196,28,192,28,249,22,191,3,248,22, 103,195,248,22,181,3,248,22,144,7,198,249,22,7,250,22,163,7,199,36,248, 22,103,198,195,249,22,7,250,22,163,7,199,36,248,22,103,198,249,22,79,249, 22,163,7,200,248,22,105,199,197,249,22,7,196,195,90,159,39,11,89,161,39, -36,11,248,22,134,15,23,198,1,28,249,22,151,9,194,2,36,249,22,7,195, +36,11,248,22,140,15,23,198,1,28,249,22,151,9,194,2,36,249,22,7,195, 197,249,80,159,45,58,39,194,249,22,79,197,199,32,94,88,163,36,43,8,26, 11,65,99,108,111,111,112,222,33,103,32,95,88,163,8,36,37,47,11,2,31, 222,33,98,32,96,88,163,36,37,43,11,69,116,111,45,115,116,114,105,110,103, -222,33,97,28,248,22,177,14,193,248,22,181,14,193,192,28,248,22,87,248,22, +222,33,97,28,248,22,183,14,193,248,22,187,14,193,192,28,248,22,87,248,22, 81,23,195,2,248,22,89,248,2,96,248,22,80,23,196,1,250,22,90,248,2, 96,248,22,80,23,198,2,2,45,248,2,95,248,22,81,23,198,1,249,22,189, 7,2,46,194,32,100,88,163,36,38,48,11,66,102,105,108,116,101,114,222,33, 101,28,248,22,87,23,195,2,9,28,248,23,194,2,248,22,80,23,196,2,249, 22,79,248,22,80,23,197,2,249,2,100,23,197,1,248,22,81,23,199,1,249, 2,100,194,248,22,81,196,249,22,189,7,2,46,248,22,134,2,23,196,1,28, -248,22,87,23,199,2,86,94,23,198,1,28,23,199,2,28,196,249,22,131,15, +248,22,87,23,199,2,86,94,23,198,1,28,23,199,2,28,196,249,22,137,15, 200,198,198,27,28,248,22,87,23,197,2,2,44,249,22,1,22,164,7,248,2, 95,23,199,2,248,23,198,1,251,22,189,7,6,70,70,99,111,108,108,101,99, 116,105,111,110,32,110,111,116,32,102,111,117,110,100,10,32,32,99,111,108,108, @@ -393,78 +393,78 @@ 99,116,105,111,110,32,100,105,114,101,99,116,111,114,105,101,115,58,126,97,126, 97,28,248,22,87,23,202,1,248,2,96,23,201,1,250,22,164,7,248,2,96, 23,204,1,2,45,23,201,2,249,22,1,22,164,7,249,22,2,32,0,88,163, -8,36,37,44,11,9,222,33,99,249,2,100,22,177,14,23,205,2,28,249,22, +8,36,37,44,11,9,222,33,99,249,2,100,22,183,14,23,205,2,28,249,22, 5,22,133,2,23,201,2,250,22,189,7,6,49,49,10,32,32,32,115,117,98, 45,99,111,108,108,101,99,116,105,111,110,58,32,126,115,10,32,32,105,110,32, 112,97,114,101,110,116,32,100,105,114,101,99,116,111,114,105,101,115,58,126,97, 23,201,1,250,22,1,22,164,7,248,22,2,32,0,88,163,8,36,37,45,11, 9,222,33,102,249,2,100,22,133,2,23,207,1,86,95,23,199,1,23,198,1, -2,44,27,248,22,80,23,200,2,27,28,248,22,177,14,23,195,2,249,22,131, -15,23,196,1,23,198,2,248,22,134,2,23,195,1,28,28,248,22,177,14,248, -22,80,23,202,2,248,22,190,14,23,194,2,10,27,250,22,1,22,131,15,23, -197,1,23,201,2,28,28,248,22,87,23,199,2,10,248,22,190,14,23,194,2, -28,23,200,2,28,28,248,22,189,14,249,22,131,15,195,202,10,27,28,248,22, -177,14,201,248,22,181,14,201,200,27,248,22,144,7,23,195,2,27,28,249,22, +2,44,27,248,22,80,23,200,2,27,28,248,22,183,14,23,195,2,249,22,137, +15,23,196,1,23,198,2,248,22,134,2,23,195,1,28,28,248,22,183,14,248, +22,80,23,202,2,248,22,132,15,23,194,2,10,27,250,22,1,22,137,15,23, +197,1,23,201,2,28,28,248,22,87,23,199,2,10,248,22,132,15,23,194,2, +28,23,200,2,28,28,248,22,131,15,249,22,137,15,195,202,10,27,28,248,22, +183,14,201,248,22,187,14,201,200,27,248,22,144,7,23,195,2,27,28,249,22, 131,4,23,196,2,40,28,249,22,147,7,6,4,4,46,114,107,116,249,22,163, 7,23,199,2,249,22,183,3,23,200,2,40,249,22,164,7,250,22,163,7,23, 200,1,36,249,22,183,3,23,201,1,40,6,3,3,46,115,115,86,95,23,195, -1,23,194,1,11,11,28,23,193,2,248,22,189,14,249,22,131,15,198,23,196, -1,11,28,199,249,22,131,15,194,201,192,254,2,94,202,203,204,205,206,248,22, -81,23,16,28,23,16,23,16,199,28,199,249,22,131,15,194,201,192,254,2,94, +1,23,194,1,11,11,28,23,193,2,248,22,131,15,249,22,137,15,198,23,196, +1,11,28,199,249,22,137,15,194,201,192,254,2,94,202,203,204,205,206,248,22, +81,23,16,28,23,16,23,16,199,28,199,249,22,137,15,194,201,192,254,2,94, 202,203,204,205,206,248,22,81,23,16,23,16,254,2,94,201,202,203,204,205,248, 22,81,23,15,23,15,90,159,38,11,89,161,38,36,11,249,80,159,40,58,39, -23,199,1,23,200,1,27,248,22,67,28,248,22,177,14,195,248,22,181,14,195, -194,27,247,22,158,15,27,250,22,93,28,23,197,2,28,247,22,157,15,27,248, +23,199,1,23,200,1,27,248,22,67,28,248,22,183,14,195,248,22,187,14,195, +194,27,247,22,164,15,27,250,22,93,28,23,197,2,28,247,22,163,15,27,248, 80,159,46,56,39,10,27,250,22,160,2,23,197,2,23,203,2,11,28,23,193, 2,192,86,94,23,193,1,250,22,160,2,23,197,1,11,9,9,9,28,23,197, 1,28,80,159,44,50,38,27,248,80,159,46,56,39,11,27,250,22,160,2,23, 197,2,23,203,1,11,28,23,193,2,192,86,94,23,193,1,250,22,160,2,23, -197,1,11,9,86,94,23,198,1,9,9,247,22,155,15,254,2,94,199,202,203, -205,23,16,199,11,86,95,28,28,248,22,178,14,23,194,2,10,28,248,22,177, -14,23,194,2,10,28,248,22,141,7,23,194,2,28,248,22,135,15,23,194,2, -10,248,22,136,15,23,194,2,11,12,252,22,188,9,23,200,2,2,33,36,23, +197,1,11,9,86,94,23,198,1,9,9,247,22,161,15,254,2,94,199,202,203, +205,23,16,199,11,86,95,28,28,248,22,184,14,23,194,2,10,28,248,22,183, +14,23,194,2,10,28,248,22,141,7,23,194,2,28,248,22,141,15,23,194,2, +10,248,22,142,15,23,194,2,11,12,252,22,188,9,23,200,2,2,33,36,23, 198,2,23,199,2,28,28,248,22,141,7,23,195,2,10,248,22,130,8,23,195, 2,86,94,23,194,1,12,252,22,188,9,23,200,2,2,47,37,23,198,2,23, -199,1,90,159,39,11,89,161,39,36,11,248,22,134,15,23,197,2,86,94,23, +199,1,90,159,39,11,89,161,39,36,11,248,22,140,15,23,197,2,86,94,23, 195,1,86,94,28,192,12,250,22,191,9,23,201,1,2,48,23,199,1,249,22, -7,194,195,90,159,38,11,89,161,38,36,11,86,95,28,28,248,22,178,14,23, -196,2,10,28,248,22,177,14,23,196,2,10,28,248,22,141,7,23,196,2,28, -248,22,135,15,23,196,2,10,248,22,136,15,23,196,2,11,12,252,22,188,9, +7,194,195,90,159,38,11,89,161,38,36,11,86,95,28,28,248,22,184,14,23, +196,2,10,28,248,22,183,14,23,196,2,10,28,248,22,141,7,23,196,2,28, +248,22,141,15,23,196,2,10,248,22,142,15,23,196,2,11,12,252,22,188,9, 2,26,2,33,36,23,200,2,23,201,2,28,28,248,22,141,7,23,197,2,10, 248,22,130,8,23,197,2,12,252,22,188,9,2,26,2,47,37,23,200,2,23, -201,2,90,159,39,11,89,161,39,36,11,248,22,134,15,23,199,2,86,94,23, +201,2,90,159,39,11,89,161,39,36,11,248,22,140,15,23,199,2,86,94,23, 195,1,86,94,28,192,12,250,22,191,9,2,26,2,48,23,201,2,249,22,7, -194,195,27,249,22,187,14,250,22,176,15,0,20,35,114,120,35,34,40,63,58, -91,46,93,91,94,46,93,42,124,41,36,34,248,22,183,14,23,201,1,28,248, +194,195,27,249,22,129,15,250,22,182,15,0,20,35,114,120,35,34,40,63,58, +91,46,93,91,94,46,93,42,124,41,36,34,248,22,189,14,23,201,1,28,248, 22,141,7,23,203,2,249,22,156,8,23,204,1,8,63,23,202,1,28,248,22, -178,14,23,199,2,248,22,179,14,23,199,1,86,94,23,198,1,247,22,180,14, -28,248,22,177,14,194,249,22,131,15,195,194,192,90,159,38,11,89,161,38,36, -11,86,95,28,28,248,22,178,14,23,196,2,10,28,248,22,177,14,23,196,2, -10,28,248,22,141,7,23,196,2,28,248,22,135,15,23,196,2,10,248,22,136, +184,14,23,199,2,248,22,185,14,23,199,1,86,94,23,198,1,247,22,186,14, +28,248,22,183,14,194,249,22,137,15,195,194,192,90,159,38,11,89,161,38,36, +11,86,95,28,28,248,22,184,14,23,196,2,10,28,248,22,183,14,23,196,2, +10,28,248,22,141,7,23,196,2,28,248,22,141,15,23,196,2,10,248,22,142, 15,23,196,2,11,12,252,22,188,9,2,27,2,33,36,23,200,2,23,201,2, 28,28,248,22,141,7,23,197,2,10,248,22,130,8,23,197,2,12,252,22,188, 9,2,27,2,47,37,23,200,2,23,201,2,90,159,39,11,89,161,39,36,11, -248,22,134,15,23,199,2,86,94,23,195,1,86,94,28,192,12,250,22,191,9, -2,27,2,48,23,201,2,249,22,7,194,195,27,249,22,187,14,249,22,142,8, -250,22,177,15,0,9,35,114,120,35,34,91,46,93,34,248,22,183,14,23,203, +248,22,140,15,23,199,2,86,94,23,195,1,86,94,28,192,12,250,22,191,9, +2,27,2,48,23,201,2,249,22,7,194,195,27,249,22,129,15,249,22,142,8, +250,22,183,15,0,9,35,114,120,35,34,91,46,93,34,248,22,189,14,23,203, 1,6,1,1,95,28,248,22,141,7,23,202,2,249,22,156,8,23,203,1,8, -63,23,201,1,28,248,22,178,14,23,199,2,248,22,179,14,23,199,1,86,94, -23,198,1,247,22,180,14,28,248,22,177,14,194,249,22,131,15,195,194,192,249, -247,22,171,5,194,11,249,247,22,171,5,194,11,27,247,22,157,15,249,80,159, +63,23,201,1,28,248,22,184,14,23,199,2,248,22,185,14,23,199,1,86,94, +23,198,1,247,22,186,14,28,248,22,183,14,194,249,22,137,15,195,194,192,249, +247,22,171,5,194,11,249,247,22,171,5,194,11,27,247,22,163,15,249,80,159, 39,40,38,28,23,195,2,27,248,22,161,8,2,49,28,192,192,2,44,2,44, -27,28,23,196,1,250,22,131,15,248,22,153,15,2,50,247,22,159,8,2,51, -11,27,248,80,159,42,8,29,39,250,22,93,9,248,22,89,248,22,153,15,2, -41,9,28,193,249,22,79,195,194,192,27,247,22,157,15,249,80,159,39,40,38, +27,28,23,196,1,250,22,137,15,248,22,159,15,2,50,247,22,159,8,2,51, +11,27,248,80,159,42,8,29,39,250,22,93,9,248,22,89,248,22,159,15,2, +41,9,28,193,249,22,79,195,194,192,27,247,22,163,15,249,80,159,39,40,38, 28,23,195,2,27,248,22,161,8,2,49,28,192,192,2,44,2,44,27,28,23, -196,1,250,22,131,15,248,22,153,15,2,50,247,22,159,8,2,51,11,27,248, -80,159,42,8,30,39,250,22,93,23,203,1,248,22,89,248,22,153,15,2,41, -9,28,193,249,22,79,195,194,192,27,247,22,157,15,249,80,159,39,40,38,28, +196,1,250,22,137,15,248,22,159,15,2,50,247,22,159,8,2,51,11,27,248, +80,159,42,8,30,39,250,22,93,23,203,1,248,22,89,248,22,159,15,2,41, +9,28,193,249,22,79,195,194,192,27,247,22,163,15,249,80,159,39,40,38,28, 23,195,2,27,248,22,161,8,2,49,28,192,192,2,44,2,44,27,28,23,196, -1,250,22,131,15,248,22,153,15,2,50,247,22,159,8,2,51,11,27,248,80, -159,42,8,31,39,250,22,93,23,203,1,248,22,89,248,22,153,15,2,41,23, +1,250,22,137,15,248,22,159,15,2,50,247,22,159,8,2,51,11,27,248,80, +159,42,8,31,39,250,22,93,23,203,1,248,22,89,248,22,159,15,2,41,23, 204,1,28,193,249,22,79,195,194,192,86,94,249,22,130,7,247,22,167,5,195, 248,22,154,6,249,22,135,4,36,249,22,183,3,197,198,27,28,23,197,2,86, -95,23,196,1,23,195,1,23,197,1,86,94,23,197,1,27,248,22,153,15,2, +95,23,196,1,23,195,1,23,197,1,86,94,23,197,1,27,248,22,159,15,2, 32,27,250,80,159,42,39,39,23,197,1,11,11,27,248,22,138,4,23,199,1, 27,28,23,194,2,23,194,1,86,94,23,194,1,36,27,248,22,138,4,23,202, 1,27,28,23,194,2,23,194,1,86,94,23,194,1,36,249,22,134,6,23,199, @@ -496,7 +496,7 @@ 16,2,88,163,36,37,54,38,2,4,223,0,33,57,80,159,36,38,37,20,15, 16,2,20,25,96,2,5,88,163,8,36,39,8,25,52,9,223,0,33,64,88, 163,36,38,47,44,9,223,0,33,65,88,163,36,37,46,44,9,223,0,33,66, -80,159,36,39,37,20,15,16,2,27,248,22,161,15,248,22,155,8,27,28,249, +80,159,36,39,37,20,15,16,2,27,248,22,167,15,248,22,155,8,27,28,249, 22,151,9,247,22,163,8,2,34,6,1,1,59,6,1,1,58,250,22,189,7, 6,14,14,40,91,94,126,97,93,42,41,126,97,40,46,42,41,23,196,2,23, 196,1,88,163,8,36,38,48,11,2,6,223,0,33,70,80,159,36,40,37,20, @@ -505,7 +505,7 @@ 36,42,37,20,15,16,2,32,0,88,163,8,36,38,46,11,2,9,222,33,74, 80,159,36,43,37,20,15,16,2,88,163,45,39,49,8,128,8,2,10,223,0, 33,76,80,159,36,44,37,20,15,16,2,88,163,45,40,50,8,128,8,2,12, -223,0,33,78,80,159,36,46,37,20,15,16,2,248,22,153,15,70,108,105,110, +223,0,33,78,80,159,36,46,37,20,15,16,2,248,22,159,15,70,108,105,110, 107,115,45,102,105,108,101,80,159,36,47,37,20,15,16,2,247,22,140,2,80, 158,36,48,20,15,16,2,2,79,80,158,36,49,20,15,16,2,248,80,159,37, 51,37,88,163,36,36,49,8,240,8,0,3,0,9,223,1,33,80,80,159,36, @@ -529,7 +529,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 8952); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,53,46,51,46,48,46,49,56,84,0,0,0,0,0,0,0,0,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,53,46,51,46,48,46,50,48,84,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,1,0,0,15,0,40, 0,57,0,75,0,97,0,120,0,140,0,162,0,169,0,176,0,183,0,0,0, 179,1,0,0,74,35,37,112,108,97,99,101,45,115,116,114,117,99,116,1,23, @@ -556,7 +556,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 502); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,53,46,51,46,48,46,49,56,84,0,0,0,0,0,0,0,0,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,53,46,51,46,48,46,50,48,84,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,85,0,0,0,1,0,0,7,0,18, 0,45,0,51,0,60,0,67,0,89,0,102,0,128,0,145,0,167,0,175,0, 187,0,202,0,218,0,236,0,0,1,12,1,28,1,51,1,63,1,94,1,101, @@ -590,33 +590,33 @@ 109,111,100,6,2,2,46,46,6,1,1,46,64,102,105,108,101,66,112,108,97, 110,101,116,6,8,8,109,97,105,110,46,114,107,116,6,4,4,46,114,107,116, 67,105,103,110,111,114,101,100,249,22,14,195,80,159,38,50,38,249,80,159,38, -53,39,195,10,90,159,39,11,89,161,39,36,11,248,22,134,15,197,86,95,23, -195,1,23,193,1,28,249,22,165,15,0,11,35,114,120,34,91,46,93,115,115, -36,34,248,22,182,14,23,197,1,249,80,159,41,57,39,198,2,26,196,27,28, +53,39,195,10,90,159,39,11,89,161,39,36,11,248,22,140,15,197,86,95,23, +195,1,23,193,1,28,249,22,171,15,0,11,35,114,120,34,91,46,93,115,115, +36,34,248,22,188,14,23,197,1,249,80,159,41,57,39,198,2,26,196,27,28, 23,195,2,28,249,22,151,9,23,197,2,80,158,39,51,86,94,23,195,1,80, 158,37,52,27,248,22,148,5,23,197,2,27,28,248,22,77,23,195,2,248,22, -80,23,195,1,23,194,1,28,248,22,177,14,23,194,2,90,159,39,11,89,161, -39,36,11,248,22,134,15,23,197,1,86,95,20,18,159,11,80,158,42,51,199, +80,23,195,1,23,194,1,28,248,22,183,14,23,194,2,90,159,39,11,89,161, +39,36,11,248,22,140,15,23,197,1,86,95,20,18,159,11,80,158,42,51,199, 20,18,159,11,80,158,42,52,192,192,11,11,28,23,193,2,192,86,94,23,193, -1,27,247,22,172,5,28,192,192,247,22,154,15,28,24,194,2,12,20,13,159, +1,27,247,22,172,5,28,192,192,247,22,160,15,28,24,194,2,12,20,13,159, 80,159,36,56,37,80,158,36,54,89,161,37,37,10,249,22,190,4,21,94,2, 27,6,19,19,112,108,97,110,101,116,47,114,101,115,111,108,118,101,114,46,114, 107,116,1,27,112,108,97,110,101,116,45,109,111,100,117,108,101,45,110,97,109, -101,45,114,101,115,111,108,118,101,114,12,250,22,131,15,23,197,1,23,199,1, -249,80,159,43,42,39,23,198,1,2,30,250,22,131,15,23,197,1,23,199,1, -249,80,159,43,42,39,23,198,1,2,30,252,22,131,15,23,199,1,23,201,1, +101,45,114,101,115,111,108,118,101,114,12,250,22,137,15,23,197,1,23,199,1, +249,80,159,43,42,39,23,198,1,2,30,250,22,137,15,23,197,1,23,199,1, +249,80,159,43,42,39,23,198,1,2,30,252,22,137,15,23,199,1,23,201,1, 2,31,247,22,164,8,249,80,159,45,42,39,23,200,1,80,159,45,36,38,252, -22,131,15,23,199,1,23,201,1,2,31,247,22,164,8,249,80,159,45,42,39, -23,200,1,80,159,45,36,38,27,252,22,131,15,23,200,1,23,202,1,2,31, +22,137,15,23,199,1,23,201,1,2,31,247,22,164,8,249,80,159,45,42,39, +23,200,1,80,159,45,36,38,27,252,22,137,15,23,200,1,23,202,1,2,31, 247,22,164,8,249,80,159,46,42,39,23,201,1,80,159,46,36,38,27,250,22, -148,15,196,11,32,0,88,163,8,36,36,41,11,9,222,11,28,192,249,22,79, -195,194,11,27,252,22,131,15,23,200,1,23,202,1,2,31,247,22,164,8,249, -80,159,46,42,39,23,201,1,80,159,46,36,38,27,250,22,148,15,196,11,32, +154,15,196,11,32,0,88,163,8,36,36,41,11,9,222,11,28,192,249,22,79, +195,194,11,27,252,22,137,15,23,200,1,23,202,1,2,31,247,22,164,8,249, +80,159,46,42,39,23,201,1,80,159,46,36,38,27,250,22,154,15,196,11,32, 0,88,163,8,36,36,41,11,9,222,11,28,192,249,22,79,195,194,11,27,250, -22,131,15,23,198,1,23,200,1,249,80,159,44,42,39,23,199,1,2,30,27, -250,22,148,15,196,11,32,0,88,163,8,36,36,41,11,9,222,11,28,192,249, -22,79,195,194,11,27,250,22,131,15,23,198,1,23,200,1,249,80,159,44,42, -39,23,199,1,2,30,27,250,22,148,15,196,11,32,0,88,163,8,36,36,41, +22,137,15,23,198,1,23,200,1,249,80,159,44,42,39,23,199,1,2,30,27, +250,22,154,15,196,11,32,0,88,163,8,36,36,41,11,9,222,11,28,192,249, +22,79,195,194,11,27,250,22,137,15,23,198,1,23,200,1,249,80,159,44,42, +39,23,199,1,2,30,27,250,22,154,15,196,11,32,0,88,163,8,36,36,41, 11,9,222,11,28,192,249,22,79,195,194,11,86,95,28,248,80,159,37,40,39, 23,195,2,12,250,22,188,9,2,28,6,12,12,112,97,116,104,45,115,116,114, 105,110,103,63,23,197,2,28,28,23,195,2,28,248,22,64,23,196,2,10,28, @@ -627,30 +627,30 @@ 111,110,115,47,99,32,40,111,114,47,99,32,35,102,32,115,121,109,98,111,108, 63,41,32,40,110,111,110,45,101,109,112,116,121,45,108,105,115,116,111,102,32, 115,121,109,98,111,108,63,41,41,41,23,197,2,27,28,23,196,2,247,22,188, -4,11,27,28,23,194,2,250,22,160,2,80,158,41,41,248,22,190,15,247,22, -152,13,11,11,27,28,23,194,2,250,22,160,2,248,22,81,23,198,2,23,198, +4,11,27,28,23,194,2,250,22,160,2,80,158,41,41,248,22,132,16,247,22, +158,13,11,11,27,28,23,194,2,250,22,160,2,248,22,81,23,198,2,23,198, 2,11,11,28,23,193,2,86,96,23,197,1,23,195,1,23,194,1,20,13,159, 80,159,39,38,37,250,80,159,42,39,37,249,22,33,11,80,159,44,38,37,22, 189,4,248,22,104,196,27,248,22,113,194,20,13,159,80,159,40,38,37,250,80, -159,43,39,37,249,22,33,11,80,159,45,38,37,22,172,5,28,248,22,177,14, -23,197,2,23,196,1,86,94,23,196,1,247,22,154,15,249,247,22,170,5,248, +159,43,39,37,249,22,33,11,80,159,45,38,37,22,172,5,28,248,22,183,14, +23,197,2,23,196,1,86,94,23,196,1,247,22,160,15,249,247,22,170,5,248, 22,80,196,200,86,94,23,193,1,90,159,46,11,89,161,37,36,11,28,248,22, -137,15,23,208,2,23,207,2,27,247,22,172,5,28,23,193,2,249,22,138,15, -23,210,2,23,195,1,23,208,2,89,161,39,37,11,248,22,134,15,23,208,1, -86,94,23,196,1,89,161,38,40,11,28,23,208,2,27,248,22,182,14,23,197, +143,15,23,208,2,23,207,2,27,247,22,172,5,28,23,193,2,249,22,144,15, +23,210,2,23,195,1,23,208,2,89,161,39,37,11,248,22,140,15,23,208,1, +86,94,23,196,1,89,161,38,40,11,28,23,208,2,27,248,22,188,14,23,197, 2,27,248,22,135,8,23,195,2,28,28,249,22,131,4,23,195,2,40,249,22, 138,8,2,26,249,22,141,8,23,198,2,249,22,183,3,23,199,2,40,11,249, -22,7,23,199,2,248,22,186,14,249,22,142,8,250,22,141,8,23,202,1,36, +22,7,23,199,2,248,22,128,15,249,22,142,8,250,22,141,8,23,202,1,36, 249,22,183,3,23,203,1,40,5,3,46,115,115,249,22,7,23,199,2,11,249, 22,7,23,197,2,11,89,161,37,42,11,28,249,22,151,9,23,199,2,23,197, -2,23,193,2,249,22,131,15,23,196,2,23,199,2,89,161,37,43,11,28,23, +2,23,193,2,249,22,137,15,23,196,2,23,199,2,89,161,37,43,11,28,23, 198,2,28,249,22,151,9,23,200,2,23,197,1,23,193,1,86,94,23,193,1, -249,22,131,15,23,196,2,23,200,2,86,94,23,195,1,11,89,161,37,44,11, +249,22,137,15,23,196,2,23,200,2,86,94,23,195,1,11,89,161,37,44,11, 28,249,22,151,9,23,196,2,68,114,101,108,97,116,105,118,101,86,94,23,194, -1,2,29,23,194,1,89,161,37,45,11,247,22,156,15,27,250,22,148,15,23, +1,2,29,23,194,1,89,161,37,45,11,247,22,162,15,27,250,22,154,15,23, 203,2,11,32,0,88,163,8,36,36,41,11,9,222,11,27,28,23,194,2,249, 22,79,23,203,2,23,196,1,86,94,23,194,1,11,27,28,23,203,2,28,23, -194,2,11,27,250,22,148,15,23,207,2,11,32,0,88,163,8,36,36,41,11, +194,2,11,27,250,22,154,15,23,207,2,11,32,0,88,163,8,36,36,41,11, 9,222,11,28,192,249,22,79,23,206,2,194,11,11,27,28,23,195,2,23,195, 2,23,194,2,27,88,163,36,37,50,8,64,62,122,111,225,18,13,9,33,47, 27,88,163,36,37,50,8,64,66,97,108,116,45,122,111,225,19,14,11,33,48, @@ -666,8 +666,8 @@ 194,1,20,13,159,80,159,8,24,38,37,250,80,159,8,27,39,37,249,22,33, 11,80,159,8,29,38,37,22,189,4,11,20,13,159,80,159,8,24,38,37,250, 80,159,8,27,39,37,249,22,33,11,80,159,8,29,38,37,22,172,5,28,248, -22,177,14,23,216,2,23,215,1,86,94,23,215,1,247,22,154,15,249,247,22, -160,15,248,22,80,195,23,28,86,94,23,193,1,27,28,23,195,2,28,23,197, +22,183,14,23,216,2,23,215,1,86,94,23,215,1,247,22,160,15,249,247,22, +166,15,248,22,80,195,23,28,86,94,23,193,1,27,28,23,195,2,28,23,197, 1,27,249,22,5,88,163,8,36,37,53,8,65,9,225,28,23,20,33,52,23, 217,2,27,28,23,204,2,11,193,28,192,192,28,193,28,203,28,249,22,131,4, 248,22,81,196,248,22,81,206,193,11,11,11,11,86,94,23,197,1,11,28,23, @@ -675,8 +675,8 @@ 1,23,201,1,23,200,1,23,199,1,23,196,1,23,195,1,20,13,159,80,159, 8,25,38,37,250,80,159,8,28,39,37,249,22,33,11,80,159,8,30,38,37, 22,189,4,23,215,1,20,13,159,80,159,8,25,38,37,250,80,159,8,28,39, -37,249,22,33,11,80,159,8,30,38,37,22,172,5,28,248,22,177,14,23,217, -2,23,216,1,86,94,23,216,1,247,22,154,15,249,247,22,160,15,248,22,80, +37,249,22,33,11,80,159,8,30,38,37,22,172,5,28,248,22,183,14,23,217, +2,23,216,1,86,94,23,216,1,247,22,160,15,249,247,22,166,15,248,22,80, 195,23,29,86,94,23,193,1,27,28,23,197,2,28,23,201,1,27,249,22,5, 20,20,94,88,163,8,36,37,51,8,64,9,225,29,24,20,33,53,23,213,1, 23,218,2,27,28,23,204,2,11,193,28,192,192,28,193,28,23,204,2,28,249, @@ -687,8 +687,8 @@ 22,89,23,199,1,11,23,221,2,12,20,13,159,80,159,8,26,38,37,250,80, 159,8,29,39,37,249,22,33,11,80,159,8,31,38,37,22,189,4,11,20,13, 159,80,159,8,26,38,37,250,80,159,8,29,39,37,249,22,33,11,80,159,8, -31,38,37,22,172,5,28,248,22,177,14,23,218,2,23,217,1,86,94,23,217, -1,247,22,154,15,249,247,22,170,5,248,22,80,195,23,30,86,94,23,193,1, +31,38,37,22,172,5,28,248,22,183,14,23,218,2,23,217,1,86,94,23,217, +1,247,22,160,15,249,247,22,170,5,248,22,80,195,23,30,86,94,23,193,1, 27,28,23,197,1,28,23,201,1,27,249,22,5,20,20,94,88,163,8,36,37, 51,8,64,9,225,30,25,22,33,54,23,215,1,23,219,1,27,28,23,205,2, 11,193,28,192,192,28,193,28,204,28,249,22,131,4,248,22,81,196,248,22,81, @@ -698,16 +698,16 @@ 23,221,2,23,222,2,12,20,13,159,80,159,8,27,38,37,250,80,159,8,30, 39,37,249,22,33,11,80,159,8,32,38,37,22,189,4,23,217,1,20,13,159, 80,159,8,27,38,37,250,80,159,8,30,39,37,249,22,33,11,80,159,8,32, -38,37,22,172,5,28,248,22,177,14,23,219,2,23,218,1,86,94,23,218,1, -247,22,154,15,249,247,22,170,5,248,22,80,195,23,31,86,94,23,193,1,28, +38,37,22,172,5,28,248,22,183,14,23,219,2,23,218,1,86,94,23,218,1, +247,22,160,15,249,247,22,170,5,248,22,80,195,23,31,86,94,23,193,1,28, 28,248,22,77,23,223,2,248,22,80,23,223,2,10,27,28,23,199,2,86,94, 23,215,1,23,214,1,86,94,23,214,1,23,215,1,28,28,248,22,77,23,224, -32,0,0,0,2,248,22,149,9,248,22,189,14,23,195,2,11,12,20,13,159, +32,0,0,0,2,248,22,149,9,248,22,131,15,23,195,2,11,12,20,13,159, 80,159,8,28,38,37,250,80,159,8,31,39,37,249,22,33,11,80,159,8,33, 38,37,22,189,4,28,23,33,28,23,202,1,11,195,86,94,23,202,1,11,20, 13,159,80,159,8,28,38,37,250,80,159,8,31,39,37,249,22,33,11,80,159, -8,33,38,37,22,172,5,28,248,22,177,14,23,220,2,23,219,1,86,94,23, -219,1,247,22,154,15,249,247,22,170,5,194,23,32,12,28,193,250,22,158,2, +8,33,38,37,22,172,5,28,248,22,183,14,23,220,2,23,219,1,86,94,23, +219,1,247,22,160,15,249,247,22,170,5,194,23,32,12,28,193,250,22,158,2, 248,22,81,197,195,250,22,89,200,201,202,12,27,249,22,171,8,80,159,39,46, 38,249,22,190,3,248,22,186,3,248,22,173,2,200,8,128,8,27,28,193,248, 22,176,2,194,11,28,192,27,249,22,102,198,195,28,192,248,22,81,193,11,11, @@ -715,12 +715,12 @@ 8,80,159,40,46,38,195,27,28,193,248,22,176,2,194,11,250,22,172,8,80, 159,42,46,38,197,248,22,175,2,249,22,79,249,22,79,204,205,28,198,198,9, 0,17,35,114,120,34,94,40,46,42,63,41,47,40,46,42,41,36,34,32,60, -88,163,8,36,37,59,11,2,32,222,33,61,27,249,22,165,15,2,59,23,196, +88,163,8,36,37,59,11,2,32,222,33,61,27,249,22,171,15,2,59,23,196, 2,28,23,193,2,86,94,23,194,1,249,22,79,248,22,104,23,196,2,27,248, -22,113,23,197,1,27,249,22,165,15,2,59,23,196,2,28,23,193,2,86,94, +22,113,23,197,1,27,249,22,171,15,2,59,23,196,2,28,23,193,2,86,94, 23,194,1,249,22,79,248,22,104,23,196,2,27,248,22,113,23,197,1,27,249, -22,165,15,2,59,23,196,2,28,23,193,2,86,94,23,194,1,249,22,79,248, -22,104,23,196,2,27,248,22,113,23,197,1,27,249,22,165,15,2,59,23,196, +22,171,15,2,59,23,196,2,28,23,193,2,86,94,23,194,1,249,22,79,248, +22,104,23,196,2,27,248,22,113,23,197,1,27,249,22,171,15,2,59,23,196, 2,28,23,193,2,86,94,23,194,1,249,22,79,248,22,104,23,196,2,248,2, 60,248,22,113,23,197,1,248,22,89,194,248,22,89,194,248,22,89,194,248,22, 89,194,32,62,88,163,36,37,55,11,2,32,222,33,63,28,248,22,87,248,22, @@ -730,12 +730,12 @@ 22,81,23,195,2,249,22,7,9,248,22,80,195,90,159,38,11,89,161,38,36, 11,248,2,62,248,22,81,196,249,22,7,249,22,79,248,22,80,199,196,195,249, 22,7,249,22,79,248,22,80,199,196,195,249,22,7,249,22,79,248,22,80,199, -196,195,27,27,249,22,165,15,2,59,23,197,2,28,23,193,2,86,94,23,195, -1,249,22,79,248,22,104,23,196,2,27,248,22,113,23,197,1,27,249,22,165, +196,195,27,27,249,22,171,15,2,59,23,197,2,28,23,193,2,86,94,23,195, +1,249,22,79,248,22,104,23,196,2,27,248,22,113,23,197,1,27,249,22,171, 15,2,59,23,196,2,28,23,193,2,86,94,23,194,1,249,22,79,248,22,104, -23,196,2,27,248,22,113,23,197,1,27,249,22,165,15,2,59,23,196,2,28, +23,196,2,27,248,22,113,23,197,1,27,249,22,171,15,2,59,23,196,2,28, 23,193,2,86,94,23,194,1,249,22,79,248,22,104,23,196,2,27,248,22,113, -23,197,1,27,249,22,165,15,2,59,23,196,2,28,23,193,2,86,94,23,194, +23,197,1,27,249,22,171,15,2,59,23,196,2,28,23,193,2,86,94,23,194, 1,249,22,79,248,22,104,23,196,2,248,2,60,248,22,113,23,197,1,248,22, 89,194,248,22,89,194,248,22,89,194,248,22,89,195,28,23,195,1,192,28,248, 22,87,248,22,81,23,195,2,249,22,7,9,248,22,80,195,27,248,22,81,194, @@ -746,16 +746,16 @@ 201,196,195,249,22,7,249,22,79,248,22,80,202,196,195,249,22,7,249,22,79, 248,22,80,200,196,195,86,96,28,248,22,146,5,23,196,2,12,250,22,188,9, 2,22,6,21,21,114,101,115,111,108,118,101,100,45,109,111,100,117,108,101,45, -112,97,116,104,63,23,198,2,28,28,23,196,2,248,22,153,13,23,197,2,10, +112,97,116,104,63,23,198,2,28,28,23,196,2,248,22,159,13,23,197,2,10, 12,250,22,188,9,2,22,6,20,20,40,111,114,47,99,32,35,102,32,110,97, 109,101,115,112,97,99,101,63,41,23,199,2,28,24,193,2,248,24,194,1,23, -196,2,86,94,23,193,1,12,27,250,22,160,2,80,159,41,41,38,248,22,190, -15,247,22,152,13,11,27,28,23,194,2,23,194,1,86,94,23,194,1,27,249, +196,2,86,94,23,193,1,12,27,250,22,160,2,80,159,41,41,38,248,22,132, +16,247,22,158,13,11,27,28,23,194,2,23,194,1,86,94,23,194,1,27,249, 22,79,247,22,140,2,247,22,140,2,86,94,250,22,158,2,80,159,43,41,38, -248,22,190,15,247,22,152,13,195,192,86,94,250,22,158,2,248,22,80,23,197, +248,22,132,16,247,22,158,13,195,192,86,94,250,22,158,2,248,22,80,23,197, 2,23,200,2,68,100,101,99,108,97,114,101,100,28,23,198,2,27,28,248,22, 77,248,22,148,5,23,200,2,248,22,147,5,248,22,80,248,22,148,5,23,201, -1,23,198,1,27,250,22,160,2,80,159,44,41,38,248,22,190,15,23,204,1, +1,23,198,1,27,250,22,160,2,80,159,44,41,38,248,22,132,16,23,204,1, 11,28,23,193,2,27,250,22,160,2,248,22,81,23,198,1,197,11,28,192,250, 22,158,2,248,22,81,199,197,195,12,12,12,251,211,197,198,199,10,32,67,88, 163,36,38,47,11,76,102,108,97,116,116,101,110,45,115,117,98,45,112,97,116, @@ -765,7 +765,7 @@ 23,195,1,250,22,184,9,2,22,6,37,37,116,111,111,32,109,97,110,121,32, 34,46,46,34,115,32,105,110,32,115,117,98,109,111,100,117,108,101,32,112,97, 116,104,58,32,126,46,115,250,22,90,2,34,28,249,22,153,9,23,201,2,2, -36,198,28,248,22,177,14,199,198,249,22,89,28,248,22,64,201,2,4,2,37, +36,198,28,248,22,183,14,199,198,249,22,89,28,248,22,64,201,2,4,2,37, 200,199,251,2,68,196,197,248,22,81,199,248,22,81,200,251,2,68,196,197,249, 22,79,248,22,80,202,200,248,22,81,200,251,2,68,196,197,9,197,27,249,22, 164,7,6,31,31,115,116,97,110,100,97,114,100,45,109,111,100,117,108,101,45, @@ -777,16 +777,16 @@ 198,39,249,22,164,7,250,22,163,7,198,36,249,22,183,3,199,39,2,40,193, 193,0,8,35,114,120,34,91,46,93,34,32,76,88,163,8,36,37,47,11,2, 32,222,33,77,28,248,22,87,23,194,2,9,250,22,90,6,4,4,10,32,32, -32,248,22,181,14,248,22,105,23,198,2,248,2,76,248,22,81,23,198,1,28, +32,248,22,187,14,248,22,105,23,198,2,248,2,76,248,22,81,23,198,1,28, 249,22,153,9,248,22,81,23,200,2,23,197,1,28,249,22,151,9,248,22,80, 23,200,1,23,196,1,251,22,184,9,2,22,6,41,41,99,121,99,108,101,32, 105,110,32,108,111,97,100,105,110,103,10,32,32,97,116,32,112,97,116,104,58, 32,126,97,10,32,32,112,97,116,104,115,58,126,97,23,200,1,249,22,1,22, 164,7,248,2,76,248,22,94,23,201,1,12,12,247,192,20,13,159,80,159,43, -49,38,249,22,79,249,22,79,248,22,190,15,247,22,152,13,23,201,1,23,195, +49,38,249,22,79,249,22,79,248,22,132,16,247,22,158,13,23,201,1,23,195, 1,20,13,159,80,159,43,38,37,250,80,159,46,39,37,249,22,33,11,80,159, 48,38,37,22,188,4,23,198,2,249,247,22,171,5,23,200,1,27,248,22,67, -248,22,181,14,23,201,1,28,23,202,2,28,250,22,160,2,248,22,80,23,201, +248,22,187,14,23,201,1,28,23,202,2,28,250,22,160,2,248,22,80,23,201, 1,23,201,1,11,249,22,79,11,203,249,22,79,194,203,192,86,94,28,248,22, 156,5,23,196,2,12,28,23,197,2,250,22,186,9,11,6,15,15,98,97,100, 32,109,111,100,117,108,101,32,112,97,116,104,23,200,2,250,22,188,9,2,22, @@ -826,7 +826,7 @@ 249,2,67,2,36,28,249,22,153,9,248,22,104,23,204,2,2,35,248,22,81, 23,202,1,248,22,106,23,202,1,28,248,22,77,193,248,22,81,193,11,11,11, 27,28,248,22,64,23,196,2,27,248,80,159,43,47,39,249,22,79,23,199,2, -247,22,155,15,28,23,193,2,192,86,94,23,193,1,90,159,38,11,89,161,38, +247,22,161,15,28,23,193,2,192,86,94,23,193,1,90,159,38,11,89,161,38, 36,11,249,80,159,46,53,39,248,22,70,23,201,2,11,27,28,248,22,87,23, 195,2,2,39,249,22,164,7,23,197,2,2,40,251,80,159,49,58,39,23,204, 1,28,248,22,87,23,199,2,23,199,1,86,94,23,199,1,248,22,80,23,199, @@ -834,45 +834,45 @@ 197,1,28,248,22,141,7,23,196,2,86,94,23,196,1,27,248,80,159,43,8, 28,39,23,202,2,27,248,80,159,44,47,39,249,22,79,23,200,2,23,197,2, 28,23,193,2,192,86,94,23,193,1,90,159,38,11,89,161,38,36,11,249,80, -159,47,53,39,23,201,2,11,250,22,1,22,131,15,23,199,1,249,22,93,249, +159,47,53,39,23,201,2,11,250,22,1,22,137,15,23,199,1,249,22,93,249, 22,2,32,0,88,163,8,36,37,44,11,9,222,33,72,23,200,1,248,22,89, -248,2,73,23,201,1,28,248,22,177,14,23,196,2,86,94,23,196,1,248,80, -159,42,8,29,39,248,22,140,15,28,248,22,137,15,23,198,2,23,197,2,249, -22,138,15,23,199,2,248,80,159,46,8,28,39,23,205,2,28,249,22,151,9, +248,2,73,23,201,1,28,248,22,183,14,23,196,2,86,94,23,196,1,248,80, +159,42,8,29,39,248,22,146,15,28,248,22,143,15,23,198,2,23,197,2,249, +22,144,15,23,199,2,248,80,159,46,8,28,39,23,205,2,28,249,22,151,9, 248,22,80,23,198,2,2,27,27,248,80,159,43,47,39,249,22,79,23,199,2, -247,22,155,15,28,23,193,2,192,86,94,23,193,1,90,159,39,11,89,161,38, +247,22,161,15,28,23,193,2,192,86,94,23,193,1,90,159,39,11,89,161,38, 36,11,249,80,159,47,53,39,248,22,104,23,202,2,11,89,161,37,38,11,28, -248,22,87,248,22,106,23,201,2,28,248,22,87,23,194,2,249,22,169,15,2, +248,22,87,248,22,106,23,201,2,28,248,22,87,23,194,2,249,22,175,15,2, 75,23,196,2,11,10,27,28,23,196,2,248,2,73,23,196,2,28,248,22,87, -23,195,2,2,39,28,249,22,169,15,2,75,23,197,2,248,2,73,23,196,2, +23,195,2,2,39,28,249,22,175,15,2,75,23,197,2,248,2,73,23,196,2, 249,22,164,7,23,197,2,2,40,27,28,23,197,1,86,94,23,196,1,249,22, 93,28,248,22,87,248,22,106,23,205,2,21,93,6,5,5,109,122,108,105,98, 249,22,1,22,93,249,22,2,80,159,53,8,30,39,248,22,106,23,208,2,23, 197,1,28,248,22,87,23,196,2,86,94,23,195,1,248,22,89,23,197,1,86, 94,23,196,1,23,195,1,251,80,159,51,58,39,23,206,1,248,22,80,23,198, 2,248,22,81,23,198,1,23,198,1,28,249,22,151,9,248,22,80,23,198,2, -2,37,248,80,159,42,8,29,39,248,22,140,15,249,22,138,15,248,22,142,15, +2,37,248,80,159,42,8,29,39,248,22,146,15,249,22,144,15,248,22,148,15, 248,22,104,23,201,2,248,80,159,46,8,28,39,23,205,2,12,86,94,28,28, -248,22,177,14,23,194,2,10,248,22,166,8,23,194,2,86,94,23,201,1,12, +248,22,183,14,23,194,2,10,248,22,166,8,23,194,2,86,94,23,201,1,12, 28,23,201,2,250,22,186,9,67,114,101,113,117,105,114,101,249,22,189,7,6, 17,17,98,97,100,32,109,111,100,117,108,101,32,112,97,116,104,126,97,28,23, 198,2,248,22,80,23,199,2,6,0,0,23,204,1,86,94,23,201,1,250,22, 188,9,2,22,2,33,23,198,2,27,28,248,22,166,8,23,195,2,249,22,171, -8,23,196,2,36,249,22,140,15,248,22,141,15,23,197,2,11,27,28,248,22, +8,23,196,2,36,249,22,146,15,248,22,147,15,23,197,2,11,27,28,248,22, 166,8,23,196,2,249,22,171,8,23,197,2,37,248,80,159,44,59,39,23,195, 2,90,159,39,11,89,161,39,36,11,28,248,22,166,8,23,199,2,250,22,7, -2,41,249,22,171,8,23,203,2,38,2,41,248,22,134,15,23,198,2,86,95, +2,41,249,22,171,8,23,203,2,38,2,41,248,22,140,15,23,198,2,86,95, 23,195,1,23,193,1,27,28,248,22,166,8,23,200,2,249,22,171,8,23,201, 2,39,249,80,159,49,57,39,23,197,2,5,0,27,28,248,22,166,8,23,201, 2,249,22,171,8,23,202,2,40,248,22,147,5,23,200,2,27,250,22,160,2, -80,159,52,41,38,248,22,190,15,247,22,152,13,11,27,28,23,194,2,23,194, +80,159,52,41,38,248,22,132,16,247,22,158,13,11,27,28,23,194,2,23,194, 1,86,94,23,194,1,27,249,22,79,247,22,140,2,247,22,140,2,86,94,250, -22,158,2,80,159,54,41,38,248,22,190,15,247,22,152,13,195,192,27,28,23, +22,158,2,80,159,54,41,38,248,22,132,16,247,22,158,13,195,192,27,28,23, 204,2,248,22,147,5,249,22,79,248,22,148,5,23,200,2,23,207,2,23,196, 2,86,95,28,23,212,1,27,250,22,160,2,248,22,80,23,199,2,196,11,28, 23,193,1,12,27,27,28,248,22,17,80,159,55,50,38,80,159,54,50,38,247, -22,19,251,22,33,11,80,159,58,49,38,9,23,197,1,27,248,22,190,15,247, -22,152,13,86,94,249,22,3,20,20,94,88,163,8,36,37,54,11,9,226,14, +22,19,251,22,33,11,80,159,58,49,38,9,23,197,1,27,248,22,132,16,247, +22,158,13,86,94,249,22,3,20,20,94,88,163,8,36,37,54,11,9,226,14, 13,2,3,33,78,23,195,1,23,196,2,248,28,248,22,17,80,159,56,50,38, 32,0,88,163,36,37,42,11,9,222,33,79,80,159,55,8,31,39,20,20,96, 88,163,36,36,56,8,140,128,9,230,19,15,13,12,8,7,5,2,33,80,23, @@ -880,11 +880,11 @@ 22,141,7,23,206,2,10,28,248,22,64,23,206,2,10,28,248,22,77,23,206, 2,249,22,151,9,248,22,80,23,208,2,2,27,11,249,80,159,53,48,39,28, 248,22,141,7,23,208,2,249,22,79,23,209,1,248,80,159,56,8,28,39,23, -215,1,86,94,23,212,1,249,22,79,23,209,1,247,22,155,15,252,22,168,8, +215,1,86,94,23,212,1,249,22,79,23,209,1,247,22,161,15,252,22,168,8, 23,209,1,23,208,1,23,206,1,23,204,1,23,203,1,12,192,86,96,20,18, 159,11,80,158,36,54,248,80,159,37,8,26,37,249,22,33,11,80,159,39,56, 37,248,22,187,4,80,159,37,55,38,248,22,171,5,80,159,37,37,39,248,22, -146,14,80,159,37,44,39,20,18,159,11,80,158,36,54,248,80,159,37,8,26, +152,14,80,159,37,44,39,20,18,159,11,80,158,36,54,248,80,159,37,8,26, 37,249,22,33,11,80,159,39,56,37,20,18,159,11,80,158,36,54,248,80,159, 37,8,26,37,249,22,33,11,80,159,39,56,37,159,36,20,113,159,36,16,1, 11,16,0,20,26,144,9,2,1,2,1,29,11,11,11,9,9,11,11,11,10, @@ -937,7 +937,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 7928); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,53,46,51,46,48,46,49,56,84,0,0,0,0,0,0,0,0,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,53,46,51,46,48,46,50,48,84,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,1,0,0,10,0,16, 0,29,0,44,0,58,0,78,0,90,0,104,0,118,0,170,0,0,0,98,1, 0,0,69,35,37,98,117,105,108,116,105,110,65,113,117,111,116,101,29,94,2, diff --git a/src/racket/src/error.c b/src/racket/src/error.c index cad46de6b4..9c71f5377a 100644 --- a/src/racket/src/error.c +++ b/src/racket/src/error.c @@ -787,6 +787,16 @@ call_error(char *buffer, int len, Scheme_Object *exn) p[1] = exn; scheme_apply_multi(display_handler, 2, p); + if (SCHEME_CHAPERONE_STRUCTP(exn) + && (scheme_is_struct_instance(exn_table[MZEXN_BREAK_HANG_UP].type, exn) + || scheme_is_struct_instance(exn_table[MZEXN_BREAK_TERMINATE].type, exn))) { + /* Default uncaught exception handler exits on `exn:break:hang-up' + or `exn:break:terminate'. */ + p[0] = scheme_make_integer(1); + scheme_do_exit(1, p); + /* Fall through to regular escape if the exit handler doesn't exit/escape. */ + } + v = scheme_make_byte_string_without_copying("error escape handler"); v = scheme_make_closed_prim_w_arity(nested_exn_handler, scheme_make_pair(v, exn), diff --git a/src/racket/src/makeexn b/src/racket/src/makeexn index 61868a833c..fe08d4aa75 100755 --- a/src/racket/src/makeexn +++ b/src/racket/src/makeexn @@ -65,7 +65,11 @@ propeties (the latter in curly braces), strings are contracts/comments. (break [break_field_check (continuation "escape continuation" "resumes from the break")] - "asynchronous break signal")) + "asynchronous break signal" + (hang-up [] + "terminal disconnect") + (terminate [] + "termination request"))) ) diff --git a/src/racket/src/place.c b/src/racket/src/place.c index b2bbf82a32..93c47bbac6 100644 --- a/src/racket/src/place.c +++ b/src/racket/src/place.c @@ -135,7 +135,7 @@ void scheme_init_place(Scheme_Env *env) PLACE_PRIM_W_ARITY("place-sleep", place_sleep, 1, 1, plenv); PLACE_PRIM_W_ARITY("place-wait", place_wait, 1, 1, plenv); PLACE_PRIM_W_ARITY("place-kill", place_kill, 1, 1, plenv); - PLACE_PRIM_W_ARITY("place-break", place_break, 1, 1, plenv); + PLACE_PRIM_W_ARITY("place-break", place_break, 1, 2, plenv); PLACE_PRIM_W_ARITY("place?", place_p, 1, 1, plenv); PLACE_PRIM_W_ARITY("place-channel", place_channel, 0, 0, plenv); PLACE_PRIM_W_ARITY("place-channel-put", place_send, 2, 2, plenv); @@ -550,7 +550,7 @@ static void do_place_kill(Scheme_Place *place) place->place_obj = NULL; } -static int do_place_break(Scheme_Place *place) +static int do_place_break(Scheme_Place *place, int kind) { Scheme_Place_Object *place_obj; place_obj = place->place_obj; @@ -558,7 +558,7 @@ static int do_place_break(Scheme_Place *place) if (place_obj) { mzrt_mutex_lock(place_obj->lock); - place_obj->pbreak = 1; + place_obj->pbreak = kind; if (place_obj->signal_handle) scheme_signal_received_at(place_obj->signal_handle); @@ -585,14 +585,30 @@ static Scheme_Object *place_kill(int argc, Scheme_Object *args[]) { return scheme_void; } -static Scheme_Object *place_break(int argc, Scheme_Object *args[]) { - Scheme_Place *place; - place = (Scheme_Place *) args[0]; +static Scheme_Object *place_break(int argc, Scheme_Object *args[]) +{ + Scheme_Place *place = (Scheme_Place *) args[0]; + int kind = MZEXN_BREAK; if (!SAME_TYPE(SCHEME_TYPE(args[0]), scheme_place_type)) scheme_wrong_contract("place-break", "place?", 0, argc, args); - return scheme_make_integer(do_place_break(place)); + if ((argc > 1) && SCHEME_TRUEP(args[1])) { + if (SCHEME_SYMBOLP(args[1]) + && !SCHEME_SYM_WEIRDP(args[1]) + && !strcmp(SCHEME_SYM_VAL(args[1]), "hang-up")) + kind = MZEXN_BREAK_HANG_UP; + else if (SCHEME_SYMBOLP(args[1]) + && !SCHEME_SYM_WEIRDP(args[1]) + && !strcmp(SCHEME_SYM_VAL(args[1]), "terminate")) + kind = MZEXN_BREAK_TERMINATE; + else + scheme_wrong_contract("place-break", "(or/c #f 'hang-up 'terminate)", 1, argc, args); + } + + do_place_break(place, kind); + + return scheme_void; } static int place_deadp(Scheme_Object *place) { @@ -2324,7 +2340,7 @@ void scheme_place_check_for_interruption() if (local_die > 0) scheme_kill_thread(scheme_main_thread); if (local_break) - scheme_break_thread(NULL); + scheme_break_kind_thread(NULL, local_break); } void scheme_place_set_memory_use(intptr_t mem_use) diff --git a/src/racket/src/schemef.h b/src/racket/src/schemef.h index 2b84c0d61c..85cbf777a4 100644 --- a/src/racket/src/schemef.h +++ b/src/racket/src/schemef.h @@ -107,8 +107,10 @@ MZ_EXTERN Scheme_Object *scheme_thread_w_details(Scheme_Object *thunk, int suspend_to_kill); MZ_EXTERN void scheme_kill_thread(Scheme_Thread *p); MZ_EXTERN void scheme_break_thread(Scheme_Thread *p); +MZ_EXTERN void scheme_break_kind_thread(Scheme_Thread *p, int kind); MZ_EXTERN void scheme_break_main_thread(); MZ_EXTERN void scheme_break_main_thread_at(void *); +MZ_EXTERN void scheme_break_kind_main_thread_at(void *, int kind); MZ_EXTERN void *scheme_get_main_thread_break_handle(); MZ_EXTERN void scheme_set_break_main_target(Scheme_Thread *p); diff --git a/src/racket/src/schemex.h b/src/racket/src/schemex.h index 5226fd5e6d..e69de29bb2 100644 --- a/src/racket/src/schemex.h +++ b/src/racket/src/schemex.h @@ -1,968 +0,0 @@ -/* - Racket - Copyright (c) 2004-2012 PLT Scheme Inc. - Copyright (c) 1995-2001 Matthew Flatt - All rights reserved. - - Please see the full copyright in the documentation. - - Originally based on: - libscheme - Copyright (c) 1994 Brent Benson - All rights reserved. -*/ - -typedef struct { -/*========================================================================*/ -/* setjmpup (continuations) */ -/*========================================================================*/ -void (*scheme_init_jmpup_buf)(Scheme_Jumpup_Buf *b); -int (*scheme_setjmpup_relative)(Scheme_Jumpup_Buf *b, void *base, - void * volatile start, struct Scheme_Cont *cont); -void (*scheme_longjmpup)(Scheme_Jumpup_Buf *b); -void (*scheme_reset_jmpup_buf)(Scheme_Jumpup_Buf *b); -#ifdef USE_MZ_SETJMP -int (*scheme_mz_setjmp)(mz_pre_jmp_buf b); -void (*scheme_mz_longjmp)(mz_pre_jmp_buf b, int v); -#endif -void (*scheme_clear_escape)(void); -Scheme_Jumpup_Buf_Holder *(*scheme_new_jmpupbuf_holder)(void); -/*========================================================================*/ -/* parameters */ -/*========================================================================*/ -Scheme_Config *(*scheme_current_config)(void); -Scheme_Config *(*scheme_minimal_config)(void); -Scheme_Config *(*scheme_extend_config)(Scheme_Config *c, int pos, Scheme_Object *init_val); -void (*scheme_install_config)(Scheme_Config *); -Scheme_Object *(*scheme_get_param)(Scheme_Config *c, int pos); -void (*scheme_set_param)(Scheme_Config *c, int pos, Scheme_Object *o); -Scheme_Object *(*scheme_get_thread_param)(Scheme_Config *c, Scheme_Thread_Cell_Table *cells, int pos); -void (*scheme_set_thread_param)(Scheme_Config *c, Scheme_Thread_Cell_Table *cells, int pos, Scheme_Object *o); -Scheme_Env *(*scheme_get_env)(Scheme_Config *config); -Scheme_Thread_Cell_Table *(*scheme_empty_cell_table)(); -Scheme_Thread_Cell_Table *(*scheme_inherit_cells)(Scheme_Thread_Cell_Table *cells); -Scheme_Object *(*scheme_current_break_cell)(); -/*========================================================================*/ -/* threads */ -/*========================================================================*/ -#ifndef USE_THREAD_LOCAL -# ifndef LINK_EXTENSIONS_BY_TABLE -Scheme_Thread *scheme_current_thread; -volatile int scheme_fuel_counter; -# else -Scheme_Thread **scheme_current_thread_ptr; -volatile int *scheme_fuel_counter_ptr; -# endif -#endif -Scheme_Thread *(*scheme_get_current_thread)(); -void (*scheme_start_atomic)(void); -void (*scheme_end_atomic)(void); -void (*scheme_end_atomic_no_swap)(void); -void (*scheme_start_in_scheduler)(void); -void (*scheme_end_in_scheduler)(void); -void (*scheme_start_atomic_no_break)(void); -void (*scheme_end_atomic_can_break)(void); -void (*scheme_out_of_fuel)(void); -Scheme_Object *(*scheme_thread)(Scheme_Object *thunk); -Scheme_Object *(*scheme_thread_w_details)(Scheme_Object *thunk, - Scheme_Config *init_config, - Scheme_Thread_Cell_Table *copy_from, - Scheme_Object *break_cell, - Scheme_Custodian *owning_custodian, - int suspend_to_kill); -void (*scheme_kill_thread)(Scheme_Thread *p); -void (*scheme_break_thread)(Scheme_Thread *p); -void (*scheme_break_main_thread)(); -void (*scheme_break_main_thread_at)(void *); -void *(*scheme_get_main_thread_break_handle)(); -void (*scheme_set_break_main_target)(Scheme_Thread *p); -void (*scheme_thread_block)(float sleep_time); -void (*scheme_thread_block_enable_break)(float sleep_time, int enable); -void (*scheme_swap_thread)(Scheme_Thread *process); -void (*scheme_making_progress)(); -void (*scheme_weak_suspend_thread)(Scheme_Thread *p); -void (*scheme_weak_resume_thread)(Scheme_Thread *p); -int (*scheme_block_until)(Scheme_Ready_Fun f, Scheme_Needs_Wakeup_Fun, Scheme_Object *, float); -int (*scheme_block_until_enable_break)(Scheme_Ready_Fun f, Scheme_Needs_Wakeup_Fun, Scheme_Object *, - float, int enable); -int (*scheme_block_until_unless)(Scheme_Ready_Fun f, Scheme_Needs_Wakeup_Fun fdf, - Scheme_Object *data, float delay, - Scheme_Object *unless, - int enable_break); -void (*scheme_wait_input_allowed)(Scheme_Input_Port *port, int nonblock); -int (*scheme_unless_ready)(Scheme_Object *unless); -int (*scheme_in_main_thread)(void); -void (*scheme_cancel_sleep)(void); -void (*scheme_start_sleeper_thread)(void (*mzsleep)(float seconds, void *fds), float secs, void *fds, int hit_fd); -void (*scheme_end_sleeper_thread)(); -void (*scheme_set_place_sleep)(Scheme_Sleep_Proc slp); -void (*scheme_notify_sleep_progress)(); -Scheme_Object *(*scheme_make_thread_cell)(Scheme_Object *def_val, int inherited); -Scheme_Object *(*scheme_thread_cell_get)(Scheme_Object *cell, Scheme_Thread_Cell_Table *cells); -void (*scheme_thread_cell_set)(Scheme_Object *cell, Scheme_Thread_Cell_Table *cells, Scheme_Object *v); -int (*scheme_tls_allocate)(); -void (*scheme_tls_set)(int pos, void *v); -void *(*scheme_tls_get)(int pos); -Scheme_Custodian *(*scheme_make_custodian)(Scheme_Custodian *); -Scheme_Custodian_Reference *(*scheme_add_managed)(Scheme_Custodian *m, Scheme_Object *o, - Scheme_Close_Custodian_Client *f, void *data, - int strong); -Scheme_Custodian_Reference *(*scheme_add_managed_close_on_exit)(Scheme_Custodian *m, Scheme_Object *o, - Scheme_Close_Custodian_Client *f, void *data); -void (*scheme_custodian_check_available)(Scheme_Custodian *m, const char *who, const char *what); -int (*scheme_custodian_is_available)(Scheme_Custodian *m); -void (*scheme_remove_managed)(Scheme_Custodian_Reference *m, Scheme_Object *o); -void (*scheme_close_managed)(Scheme_Custodian *m); -void (*scheme_schedule_custodian_close)(Scheme_Custodian *c); -void (*scheme_add_custodian_extractor)(Scheme_Type t, Scheme_Custodian_Extractor e); -void (*scheme_add_atexit_closer)(Scheme_Exit_Closer_Func f); -void (*scheme_add_evt)(Scheme_Type type, - Scheme_Ready_Fun ready, - Scheme_Needs_Wakeup_Fun wakeup, - Scheme_Sync_Filter_Fun filter, - int can_redirect); -void (*scheme_add_evt_through_sema)(Scheme_Type type, - Scheme_Sync_Sema_Fun sema, - Scheme_Sync_Filter_Fun filter); -int (*scheme_is_evt)(Scheme_Object *o); -Scheme_Object *(*scheme_sync)(int argc, Scheme_Object *argv[]); -Scheme_Object *(*scheme_sync_enable_break)(int argc, Scheme_Object *argv[]); -Scheme_Object *(*scheme_sync_timeout)(int argc, Scheme_Object *argv[]); -Scheme_Object *(*scheme_make_evt_set)(int argc, Scheme_Object **argv); -void (*scheme_add_swap_callback)(Scheme_Closure_Func f, Scheme_Object *data); -void (*scheme_add_swap_out_callback)(Scheme_Closure_Func f, Scheme_Object *data); -Scheme_Object *(*scheme_call_enable_break)(Scheme_Prim *prim, int argc, Scheme_Object *argv[]); -int (*scheme_close_should_force_port_closed)(); -void (*scheme_push_kill_action)(Scheme_Kill_Action_Func f, void *d); -void (*scheme_pop_kill_action)(); -void (*scheme_set_can_break)(int on); -void (*scheme_push_break_enable)(Scheme_Cont_Frame_Data *cframe, int on, int pre_check); -void (*scheme_pop_break_enable)(Scheme_Cont_Frame_Data *cframe, int post_check); -int (*scheme_with_stack_freeze)(Scheme_Frozen_Stack_Proc wha_f, void *wha_data); -int (*scheme_frozen_run_some)(Scheme_Frozen_Stack_Proc do_f, void *do_data, int run_msecs); -int (*scheme_is_in_frozen_stack)(); -Scheme_Object *scheme_abort_continuation_no_dws; -Scheme_Object *scheme_call_with_composable_no_dws; -Scheme_On_Atomic_Timeout_Proc (*scheme_set_on_atomic_timeout)(Scheme_On_Atomic_Timeout_Proc p); -/*========================================================================*/ -/* error handling */ -/*========================================================================*/ -void (*scheme_signal_error)(const char *msg, ...); -void (*scheme_raise_exn)(int exnid, ...); -void (*scheme_warning)(char *msg, ...); -void (*scheme_raise)(Scheme_Object *exn); -int (*scheme_log_level_p)(Scheme_Logger *logger, int level); -void (*scheme_log)(Scheme_Logger *logger, int level, int flags, - const char *msg, ...); -void (*scheme_log_w_data)(Scheme_Logger *logger, int level, int flags, - Scheme_Object *data, - const char *msg, ...); -void (*scheme_log_message)(Scheme_Logger *logger, int level, char *buffer, intptr_t len, Scheme_Object *data); -void (*scheme_log_abort)(char *buffer); -void (*scheme_log_warning)(char *buffer); -void (*scheme_glib_log_message)(const char *log_domain, int log_level, const char *message, void *user_data); -void (*scheme_out_of_memory_abort)(); -void (*scheme_wrong_count)(const char *name, int minc, int maxc, - int argc, Scheme_Object **argv); -void (*scheme_wrong_count_m)(const char *name, int minc, int maxc, - int argc, Scheme_Object **argv, - int is_method); -void (*scheme_case_lambda_wrong_count)(const char *name, int argc, - Scheme_Object **argv, int is_method, int count, ...); -void (*scheme_wrong_type)(const char *name, const char *expected, - int which, int argc, - Scheme_Object **argv); -void (*scheme_wrong_contract)(const char *name, const char *expected, - int which, int argc, - Scheme_Object **argv); -void (*scheme_wrong_field_type)(Scheme_Object *c_name, - const char *expected, - Scheme_Object *o); -void (*scheme_wrong_field_contract)(Scheme_Object *c_name, - const char *expected, - Scheme_Object *o); -void (*scheme_arg_mismatch)(const char *name, const char *msg, Scheme_Object *o); -void (*scheme_contract_error)(const char *name, const char *msg, ...); -void (*scheme_wrong_return_arity)(const char *where, - int expected, int got, - Scheme_Object **argv, - const char *context_detail, ...); -void (*scheme_unbound_global)(Scheme_Bucket *b); -Scheme_Object *(*scheme_dynamic_wind)(void (*pre)(void *), - Scheme_Object *(* volatile act)(void *), - void (* volatile post)(void *), - Scheme_Object *(*jmp_handler)(void *), - void * volatile data); -/*========================================================================*/ -/* types */ -/*========================================================================*/ -Scheme_Type (*scheme_make_type)(const char *name); -char *(*scheme_get_type_name)(Scheme_Type type); -char *(*scheme_get_type_name_or_null)(Scheme_Type type); -/*========================================================================*/ -/* constants */ -/*========================================================================*/ -Scheme_Object *scheme_eof; -Scheme_Object *(*scheme_make_eof)(void); -Scheme_Object *scheme_null; -Scheme_Object *(*scheme_make_null)(void); -Scheme_Object *scheme_true; -Scheme_Object *(*scheme_make_true)(void); -Scheme_Object *scheme_false; -Scheme_Object *(*scheme_make_false)(void); -Scheme_Object *scheme_void; -Scheme_Object *(*scheme_make_void)(void); -Scheme_Object *scheme_undefined; -Scheme_Object *scheme_tail_call_waiting; -Scheme_Object *scheme_multiple_values; -unsigned short **scheme_uchar_table; -unsigned char **scheme_uchar_cases_table; -unsigned char **scheme_uchar_cats_table; -int *scheme_uchar_ups; -int *scheme_uchar_downs; -int *scheme_uchar_titles; -int *scheme_uchar_folds; -unsigned char *scheme_uchar_combining_classes; -void *scheme_on_demand_jit_code; -/*========================================================================*/ -/* evaluation */ -/*========================================================================*/ -Scheme_Object *(*scheme_eval)(Scheme_Object *obj, Scheme_Env *env); -Scheme_Object *(*scheme_eval_multi)(Scheme_Object *obj, Scheme_Env *env); -Scheme_Object *(*scheme_eval_with_prompt)(Scheme_Object *obj, Scheme_Env *env); -Scheme_Object *(*scheme_eval_multi_with_prompt)(Scheme_Object *obj, Scheme_Env *env); -Scheme_Object *(*scheme_eval_compiled)(Scheme_Object *obj, Scheme_Env *env); -Scheme_Object *(*scheme_eval_compiled_multi)(Scheme_Object *obj, Scheme_Env *env); -Scheme_Object *(*_scheme_eval_compiled)(Scheme_Object *obj, Scheme_Env *env); -Scheme_Object *(*_scheme_eval_compiled_multi)(Scheme_Object *obj, Scheme_Env *env); -Scheme_Object *(*scheme_apply)(Scheme_Object *rator, int num_rands, Scheme_Object **rands); -Scheme_Object *(*scheme_apply_multi)(Scheme_Object *rator, int num_rands, Scheme_Object **rands); -Scheme_Object *(*scheme_apply_no_eb)(Scheme_Object *rator, int num_rands, Scheme_Object **rands); -Scheme_Object *(*scheme_apply_multi_no_eb)(Scheme_Object *rator, int num_rands, Scheme_Object **rands); -Scheme_Object *(*scheme_apply_to_list)(Scheme_Object *rator, Scheme_Object *argss); -Scheme_Object *(*scheme_apply_with_prompt)(Scheme_Object *rator, int num_rands, Scheme_Object **rands); -Scheme_Object *(*scheme_apply_multi_with_prompt)(Scheme_Object *rator, int num_rands, Scheme_Object **rands); -Scheme_Object *(*_scheme_apply_with_prompt)(Scheme_Object *rator, int num_rands, Scheme_Object **rands); -Scheme_Object *(*_scheme_apply_multi_with_prompt)(Scheme_Object *rator, int num_rands, Scheme_Object **rands); -Scheme_Object *(*scheme_eval_string)(const char *str, Scheme_Env *env); -Scheme_Object *(*scheme_eval_string_multi)(const char *str, Scheme_Env *env); -Scheme_Object *(*scheme_eval_string_all)(const char *str, Scheme_Env *env, int all); -Scheme_Object *(*scheme_eval_string_with_prompt)(const char *str, Scheme_Env *env); -Scheme_Object *(*scheme_eval_string_multi_with_prompt)(const char *str, Scheme_Env *env); -Scheme_Object *(*scheme_eval_string_all_with_prompt)(const char *str, Scheme_Env *env, int all); -Scheme_Object *(*scheme_eval_all_with_prompt)(Scheme_Object *port, Scheme_Env *env, int all); -Scheme_Object *(*scheme_eval_module_string)(const char *str, Scheme_Env *env); -Scheme_Object *(*_scheme_apply_known_prim_closure)(Scheme_Object *rator, int argc, - Scheme_Object **argv); -Scheme_Object *(*_scheme_apply_known_prim_closure_multi)(Scheme_Object *rator, int argc, - Scheme_Object **argv); -Scheme_Object *(*_scheme_apply_prim_closure)(Scheme_Object *rator, int argc, - Scheme_Object **argv); -Scheme_Object *(*_scheme_apply_prim_closure_multi)(Scheme_Object *rator, int argc, - Scheme_Object **argv); -Scheme_Object **(*scheme_current_argument_stack)(); -Scheme_Object *(*scheme_call_with_prompt)(Scheme_Closed_Prim f, void *data); -Scheme_Object *(*scheme_call_with_prompt_multi)(Scheme_Closed_Prim f, void *data); -Scheme_Object *(*_scheme_call_with_prompt)(Scheme_Closed_Prim f, void *data); -Scheme_Object *(*_scheme_call_with_prompt_multi)(Scheme_Closed_Prim f, void *data); -Scheme_Object *(*scheme_values)(int c, Scheme_Object **v); -Scheme_Object *(*scheme_check_one_value)(Scheme_Object *v); -/* Tail calls - only use these when you're writing new functions/syntax */ -Scheme_Object *(*scheme_tail_apply)(Scheme_Object *f, int n, Scheme_Object **arg); -Scheme_Object *(*scheme_tail_apply_no_copy)(Scheme_Object *f, int n, Scheme_Object **arg); -Scheme_Object *(*scheme_tail_apply_to_list)(Scheme_Object *f, Scheme_Object *l); -Scheme_Object *(*scheme_tail_eval_expr)(Scheme_Object *obj); -void (*scheme_set_tail_buffer_size)(int s); -Scheme_Object *(*scheme_force_value)(Scheme_Object *); -Scheme_Object *(*scheme_force_one_value)(Scheme_Object *); -MZ_MARK_STACK_TYPE (*scheme_set_cont_mark)(Scheme_Object *key, Scheme_Object *val); -void (*scheme_push_continuation_frame)(Scheme_Cont_Frame_Data *); -void (*scheme_pop_continuation_frame)(Scheme_Cont_Frame_Data *); -void (*scheme_temp_dec_mark_depth)(); -void (*scheme_temp_inc_mark_depth)(); -Scheme_Object *(*scheme_current_continuation_marks)(Scheme_Object *prompt_tag); -Scheme_Object *(*scheme_extract_one_cc_mark)(Scheme_Object *mark_set, - Scheme_Object *key); -Scheme_Object *(*scheme_extract_one_cc_mark_to_tag)(Scheme_Object *mark_set, - Scheme_Object *key, - Scheme_Object *prompt_tag); -/* Internal */ -Scheme_Object *(*scheme_do_eval)(Scheme_Object *obj, int _num_rands, Scheme_Object **rands, int val); -Scheme_Object *(*scheme_eval_compiled_stx_string)(Scheme_Object *expr, Scheme_Env *env, - intptr_t shift, Scheme_Object *modidx); -Scheme_Object *(*scheme_load_compiled_stx_string)(const char *str, intptr_t len); -Scheme_Object *(*scheme_compiled_stx_symbol)(Scheme_Object *stx); -Scheme_Object *(*scheme_eval_compiled_sized_string)(const char *str, int len, Scheme_Env *env); -Scheme_Object *(*scheme_eval_compiled_sized_string_with_magic)(const char *str, int len, Scheme_Env *env, - Scheme_Object *magic_symbol, Scheme_Object *magic_val, - int multi_ok); -void (*scheme_detach_multple_array)(Scheme_Object **a); -/*========================================================================*/ -/* memory management */ -/*========================================================================*/ -/* The core allocator functions depend on the GC. Macros in scheme.h */ -/* map to the apporpriate core allocation function. */ -#ifndef SCHEME_NO_GC -# ifndef SCHEME_NO_GC_PROTO -void *(*GC_malloc)(size_t size_in_bytes); -void *(*GC_malloc_atomic)(size_t size_in_bytes); -# ifdef MZ_PRECISE_GC -void *(*GC_malloc_one_tagged)(size_t size_in_bytes); -void *(*GC_malloc_atomic_uncollectable)(size_t size_in_bytes); -void *(*scheme_malloc_uncollectable)(size_t size_in_bytes); -void *(*GC_malloc_array_tagged)(size_t size_in_bytes); -void *(*GC_malloc_allow_interior)(size_t size_in_bytes); -void *(*GC_malloc_atomic_allow_interior)(size_t size_in_bytes); -void *(*GC_malloc_tagged_allow_interior)(size_t size_in_bytes); -# else -void *(*GC_malloc_stubborn)(size_t size_in_bytes); -void *(*GC_malloc_uncollectable)(size_t size_in_bytes); -# endif -# endif -#endif -void *(*scheme_malloc_code)(intptr_t size); -void *(*scheme_malloc_permanent_code)(intptr_t size); -void (*scheme_free_code)(void *p); -#ifndef MZ_PRECISE_GC -void *(*scheme_malloc_gcable_code)(intptr_t size); -#endif -void *(*scheme_malloc_eternal)(size_t n); -void (*scheme_end_stubborn_change)(void *p); -void *(*scheme_calloc)(size_t num, size_t size); -char *(*scheme_strdup)(const char *str); -char *(*scheme_strdup_eternal)(const char *str); -void *(*scheme_malloc_fail_ok)(void *(*f)(size_t), size_t); -#ifndef MZ_PRECISE_GC -void (*scheme_late_weak_reference)(void **p); -void (*scheme_late_weak_reference_indirect)(void **p, void *v); -void (*scheme_weak_reference)(void **p); -void (*scheme_weak_reference_indirect)(void **p, void *v); -void (*scheme_unweak_reference)(void **p); -#endif -void (*scheme_add_finalizer)(void *p, void (*f)(void *p, void *data), void *data); -void (*scheme_add_finalizer_once)(void *p, void (*f)(void *p, void *data), void *data); -void (*scheme_subtract_finalizer)(void *p, void (*f)(void *p, void *data), void *data); -void (*scheme_add_scheme_finalizer)(void *p, void (*f)(void *p, void *data), void *data); -void (*scheme_add_scheme_finalizer_once)(void *p, void (*f)(void *p, void *data), void *data); -void (*scheme_register_finalizer)(void *p, - void (*f)(void *p, void *data), void *data, - void (**oldf)(void *p, void *data), - void **olddata); -void (*scheme_remove_all_finalization)(void *p); -void (*scheme_dont_gc_ptr)(void *p); -void (*scheme_gc_ptr_ok)(void *p); -void (*scheme_collect_garbage)(void); -void (*scheme_enable_garbage_collection)(int on); -#ifdef MZ_PRECISE_GC -# ifndef USE_THREAD_LOCAL -void **GC_variable_stack; -# endif -void (*GC_register_traversers)(short tag, Size_Proc size, Mark_Proc mark, Fixup_Proc fixup, - int is_constant_size, int is_atomic); -void *(*GC_resolve)(void *p); -void (*GC_mark)(const void *p); -void (*GC_fixup)(void *p); -void *(*GC_fixup_self)(void *p); -#endif -void **(*scheme_malloc_immobile_box)(void *p); -void (*scheme_free_immobile_box)(void **b); -Scheme_Object *(*scheme_add_gc_callback)(Scheme_Object *pre, Scheme_Object *post); -void (*scheme_remove_gc_callback)(Scheme_Object *key); -/*========================================================================*/ -/* hash tables */ -/*========================================================================*/ -Scheme_Bucket_Table *(*scheme_make_bucket_table)(intptr_t size_hint, int type); -void (*scheme_add_to_table)(Scheme_Bucket_Table *table, const char *key, void *val, int); -void (*scheme_change_in_table)(Scheme_Bucket_Table *table, const char *key, void *new_val); -void *(*scheme_lookup_in_table)(Scheme_Bucket_Table *table, const char *key); -Scheme_Bucket *(*scheme_bucket_from_table)(Scheme_Bucket_Table *table, const char *key); -int (*scheme_bucket_table_equal)(Scheme_Bucket_Table *t1, Scheme_Bucket_Table *t2); -Scheme_Bucket_Table *(*scheme_clone_bucket_table)(Scheme_Bucket_Table *bt); -Scheme_Hash_Table *(*scheme_make_hash_table)(int type); -Scheme_Hash_Table *(*scheme_make_hash_table_equal)(); -Scheme_Hash_Table *(*scheme_make_hash_table_eqv)(); -void (*scheme_hash_set)(Scheme_Hash_Table *table, Scheme_Object *key, Scheme_Object *val); -Scheme_Object *(*scheme_hash_get)(Scheme_Hash_Table *table, Scheme_Object *key); -Scheme_Object *(*scheme_eq_hash_get)(Scheme_Hash_Table *table, Scheme_Object *key); -void (*scheme_hash_set_atomic)(Scheme_Hash_Table *table, Scheme_Object *key, Scheme_Object *val); -Scheme_Object *(*scheme_hash_get_atomic)(Scheme_Hash_Table *table, Scheme_Object *key); -int (*scheme_hash_table_equal)(Scheme_Hash_Table *t1, Scheme_Hash_Table *t2); -int (*scheme_is_hash_table_equal)(Scheme_Object *o); -int (*scheme_is_hash_table_eqv)(Scheme_Object *o); -Scheme_Hash_Table *(*scheme_clone_hash_table)(Scheme_Hash_Table *bt); -Scheme_Hash_Tree *(*scheme_make_hash_tree)(int kind); -Scheme_Hash_Tree *(*scheme_hash_tree_set)(Scheme_Hash_Tree *tree, Scheme_Object *key, Scheme_Object *val); -Scheme_Object *(*scheme_hash_tree_get)(Scheme_Hash_Tree *tree, Scheme_Object *key); -Scheme_Object *(*scheme_eq_hash_tree_get)(Scheme_Hash_Tree *tree, Scheme_Object *key); -intptr_t (*scheme_hash_tree_next)(Scheme_Hash_Tree *tree, intptr_t pos); -int (*scheme_hash_tree_index)(Scheme_Hash_Tree *tree, intptr_t pos, Scheme_Object **_key, Scheme_Object **_val); -int (*scheme_hash_tree_equal)(Scheme_Hash_Tree *t1, Scheme_Hash_Tree *t2); -int (*scheme_is_hash_tree_equal)(Scheme_Object *o); -int (*scheme_is_hash_tree_eqv)(Scheme_Object *o); -/*========================================================================*/ -/* basic Scheme value constructors */ -/*========================================================================*/ -Scheme_Object *(*scheme_make_prim)(Scheme_Prim *prim); -Scheme_Object *(*scheme_make_noneternal_prim)(Scheme_Prim *prim); -Scheme_Object *(*scheme_make_prim_w_arity)(Scheme_Prim *prim, const char *name, - mzshort mina, mzshort maxa); -Scheme_Object *(*scheme_make_folding_prim)(Scheme_Prim *prim, - const char *name, - mzshort mina, mzshort maxa, - short functional); -Scheme_Object *(*scheme_make_immed_prim)(Scheme_Prim *prim, - const char *name, - mzshort mina, mzshort maxa); -Scheme_Object *(*scheme_make_noncm_prim)(Scheme_Prim *prim, - const char *name, - mzshort mina, mzshort maxa); -Scheme_Object *(*scheme_make_noneternal_prim_w_arity)(Scheme_Prim *prim, - const char *name, - mzshort mina, mzshort maxa); -Scheme_Object *(*scheme_make_prim_w_everything)(Scheme_Prim *fun, int eternal, - const char *name, - mzshort mina, mzshort maxa, - int folding, - mzshort minr, mzshort maxr); -Scheme_Object *(*scheme_make_prim_closure_w_arity)(Scheme_Primitive_Closure_Proc *prim, - int size, Scheme_Object **vals, - const char *name, - mzshort mina, mzshort maxa); -Scheme_Object *(*scheme_make_folding_prim_closure)(Scheme_Primitive_Closure_Proc *prim, - int size, Scheme_Object **vals, - const char *name, - mzshort mina, mzshort maxa, - short functional); -Scheme_Object *(*scheme_make_closed_prim)(Scheme_Closed_Prim *prim, void *data); -Scheme_Object *(*scheme_make_closed_prim_w_arity)(Scheme_Closed_Prim *prim, - void *data, const char *name, - mzshort mina, mzshort maxa); -Scheme_Object *(*scheme_make_folding_closed_prim)(Scheme_Closed_Prim *prim, - void *data, const char *name, - mzshort mina, mzshort maxa, - short functional); -Scheme_Object *(*scheme_make_closed_prim_w_everything)(Scheme_Closed_Prim *fun, - void *data, - const char *name, - mzshort mina, mzshort maxa, - short folding, - mzshort minr, mzshort maxr); -void (*scheme_prim_is_method)(Scheme_Object *o); -Scheme_Object *(*scheme_make_pair)(Scheme_Object *car, Scheme_Object *cdr); -Scheme_Object *(*scheme_make_mutable_pair)(Scheme_Object *car, Scheme_Object *cdr); -Scheme_Object *(*scheme_make_raw_pair)(Scheme_Object *, Scheme_Object *); -Scheme_Object *(*scheme_make_byte_string)(const char *chars); -Scheme_Object *(*scheme_make_sized_byte_string)(char *chars, intptr_t len, int copy); -Scheme_Object *(*scheme_make_sized_offset_byte_string)(char *chars, intptr_t d, intptr_t len, int copy); -Scheme_Object *(*scheme_make_immutable_sized_byte_string)(char *chars, intptr_t len, int copy); -Scheme_Object *(*scheme_make_byte_string_without_copying)(char *chars); -Scheme_Object *(*scheme_alloc_byte_string)(intptr_t size, char fill); -Scheme_Object *(*scheme_append_byte_string)(Scheme_Object *, Scheme_Object *); -Scheme_Object *(*scheme_make_utf8_string)(const char *chars); -Scheme_Object *(*scheme_make_sized_utf8_string)(char *chars, intptr_t len); -Scheme_Object *(*scheme_make_sized_offset_utf8_string)(char *chars, intptr_t d, intptr_t len); -Scheme_Object *(*scheme_make_immutable_sized_utf8_string)(char *chars, intptr_t len); -Scheme_Object *(*scheme_make_locale_string)(const char *chars); -Scheme_Object *(*scheme_char_string_to_byte_string)(Scheme_Object *s); -Scheme_Object *(*scheme_byte_string_to_char_string)(Scheme_Object *s); -Scheme_Object *(*scheme_char_string_to_byte_string_locale)(Scheme_Object *s); -Scheme_Object *(*scheme_byte_string_to_char_string_locale)(Scheme_Object *s); -Scheme_Object *(*scheme_char_string_to_path)(Scheme_Object *p); -Scheme_Object *(*scheme_path_to_char_string)(Scheme_Object *p); -Scheme_Object *(*scheme_make_char_string)(const mzchar *chars); -Scheme_Object *(*scheme_make_sized_char_string)(mzchar *chars, intptr_t len, int copy); -Scheme_Object *(*scheme_make_sized_offset_char_string)(mzchar *chars, intptr_t d, intptr_t len, int copy); -Scheme_Object *(*scheme_make_immutable_sized_char_string)(mzchar *chars, intptr_t len, int copy); -Scheme_Object *(*scheme_make_char_string_without_copying)(mzchar *chars); -Scheme_Object *(*scheme_alloc_char_string)(intptr_t size, mzchar fill); -Scheme_Object *(*scheme_append_char_string)(Scheme_Object *, Scheme_Object *); -mzchar *(*scheme_string_recase)(mzchar *s, int d, int len, int mode, int inplace, int *_len); -Scheme_Object *(*scheme_make_vector)(intptr_t size, Scheme_Object *fill); -Scheme_Double_Vector *(*scheme_alloc_flvector)(intptr_t size); -Scheme_Vector *(*scheme_alloc_fxvector)(intptr_t size); -Scheme_Object *(*scheme_make_integer_value)(intptr_t i); -Scheme_Object *(*scheme_make_integer_value_from_unsigned)(uintptr_t i); -Scheme_Object *(*scheme_make_integer_value_from_long_long)(mzlonglong i); -Scheme_Object *(*scheme_make_integer_value_from_unsigned_long_long)(umzlonglong i); -Scheme_Object *(*scheme_make_integer_value_from_long_halves)(uintptr_t lowhalf, uintptr_t hihalf); -Scheme_Object *(*scheme_make_integer_value_from_unsigned_long_halves)(uintptr_t lowhalf, uintptr_t hihalf); -Scheme_Object *(*scheme_make_double)(double d); -#ifdef MZ_USE_SINGLE_FLOATS -Scheme_Object *(*scheme_make_float)(float f) ; -#endif -Scheme_Object *(*scheme_make_char)(mzchar ch); -Scheme_Object *(*scheme_make_char_or_nul)(mzchar ch); -Scheme_Object *(*scheme_make_sema)(intptr_t v); -void (*scheme_post_sema)(Scheme_Object *o); -void (*scheme_post_sema_all)(Scheme_Object *o); -int (*scheme_wait_sema)(Scheme_Object *o, int just_try); -int (*scheme_try_plain_sema)(Scheme_Object *o); -Scheme_Object **scheme_char_constants; -Scheme_Object *(*scheme_make_channel)(); -Scheme_Object *(*scheme_make_channel_put_evt)(Scheme_Object *ch, Scheme_Object *v); -int (*scheme_get_int_val)(Scheme_Object *o, intptr_t *v); -int (*scheme_get_unsigned_int_val)(Scheme_Object *o, uintptr_t *v); -int (*scheme_get_long_long_val)(Scheme_Object *o, mzlonglong *v); -int (*scheme_get_unsigned_long_long_val)(Scheme_Object *o, umzlonglong *v); -double (*scheme_real_to_double)(Scheme_Object *r); -Scheme_Object *(*scheme_make_cptr)(void *cptr, Scheme_Object *typetag); -Scheme_Object *(*scheme_make_offset_cptr)(void *cptr, intptr_t offset, Scheme_Object *typetag); -Scheme_Object *(*scheme_make_external_cptr)(void *cptr, Scheme_Object *typetag); -Scheme_Object *(*scheme_make_offset_external_cptr)(void *cptr, intptr_t offset, Scheme_Object *typetag); -int (*scheme_is_cpointer)(Scheme_Object *cp); -const char *(*scheme_get_proc_name)(Scheme_Object *p, int *len, int for_error); -/*========================================================================*/ -/* strings */ -/*========================================================================*/ -intptr_t (*scheme_utf8_decode)(const unsigned char *s, intptr_t start, intptr_t end, - unsigned int *us, intptr_t dstart, intptr_t dend, - intptr_t *ipos, char utf16, int permissive); -intptr_t (*scheme_utf8_decode_as_prefix)(const unsigned char *s, intptr_t start, intptr_t end, - unsigned int *us, intptr_t dstart, intptr_t dend, - intptr_t *ipos, char utf16, int permissive); -intptr_t (*scheme_utf8_decode_all)(const unsigned char *s, intptr_t len, unsigned int *us, - int permissive); -intptr_t (*scheme_utf8_decode_prefix)(const unsigned char *s, intptr_t len, unsigned int *us, - int permissive); -mzchar *(*scheme_utf8_decode_to_buffer)(const unsigned char *s, intptr_t len, - mzchar *buf, intptr_t blen); -mzchar *(*scheme_utf8_decode_to_buffer_len)(const unsigned char *s, intptr_t len, - mzchar *buf, intptr_t blen, intptr_t *rlen); -intptr_t (*scheme_utf8_decode_count)(const unsigned char *s, intptr_t start, intptr_t end, - int *_state, int might_continue, int permissive); -intptr_t (*scheme_utf8_encode)(const unsigned int *us, intptr_t start, intptr_t end, - unsigned char *s, intptr_t dstart, - char utf16); -intptr_t (*scheme_utf8_encode_all)(const unsigned int *us, intptr_t len, unsigned char *s); -char *(*scheme_utf8_encode_to_buffer)(const mzchar *s, intptr_t len, - char *buf, intptr_t blen); -char *(*scheme_utf8_encode_to_buffer_len)(const mzchar *s, intptr_t len, - char *buf, intptr_t blen, intptr_t *rlen); -unsigned short *(*scheme_ucs4_to_utf16)(const mzchar *text, intptr_t start, intptr_t end, - unsigned short *buf, intptr_t bufsize, - intptr_t *ulen, intptr_t term_size); -mzchar *(*scheme_utf16_to_ucs4)(const unsigned short *text, intptr_t start, intptr_t end, - mzchar *buf, intptr_t bufsize, - intptr_t *ulen, intptr_t term_size); -Scheme_Object *(*scheme_open_converter)(const char *from_e, const char *to_e); -void (*scheme_close_converter)(Scheme_Object *conv); -/*========================================================================*/ -/* bignums */ -/*========================================================================*/ -Scheme_Object *(*scheme_make_bignum)(intptr_t v); -Scheme_Object *(*scheme_make_bignum_from_unsigned)(uintptr_t v); -Scheme_Object *(*scheme_make_bignum_from_long_long)(mzlonglong v); -Scheme_Object *(*scheme_make_bignum_from_unsigned_long_long)(umzlonglong v); -double (*scheme_bignum_to_double)(const Scheme_Object *n); -Scheme_Object *(*scheme_bignum_from_double)(double d); -#ifdef MZ_USE_SINGLE_FLOATS -float (*scheme_bignum_to_float)(const Scheme_Object *n); -Scheme_Object *(*scheme_bignum_from_float)(float d); -#else -# define scheme_bignum_to_float scheme_bignum_to_double -# define scheme_bignum_from_float scheme_bignum_from_double -#endif -char *(*scheme_bignum_to_string)(const Scheme_Object *n, int radix); -char *(*scheme_bignum_to_allocated_string)(const Scheme_Object *n, int radix, int alloc); -Scheme_Object *(*scheme_read_bignum)(const mzchar *str, int offset, int radix); -Scheme_Object *(*scheme_read_bignum_bytes)(const char *str, int offset, int radix); -Scheme_Object *(*scheme_bignum_normalize)(const Scheme_Object *n); -/*========================================================================*/ -/* rationals */ -/*========================================================================*/ -Scheme_Object *(*scheme_make_rational)(const Scheme_Object *r, const Scheme_Object *d); -double (*scheme_rational_to_double)(const Scheme_Object *n); -Scheme_Object *(*scheme_rational_from_double)(double d); -#ifdef MZ_USE_SINGLE_FLOATS -float (*scheme_rational_to_float)(const Scheme_Object *n); -Scheme_Object *(*scheme_rational_from_float)(float d); -#else -# define scheme_rational_to_float scheme_rational_to_double -# define scheme_rational_from_float scheme_rational_from_double -#endif -Scheme_Object *(*scheme_rational_normalize)(const Scheme_Object *n); -Scheme_Object *(*scheme_rational_numerator)(const Scheme_Object *n); -Scheme_Object *(*scheme_rational_denominator)(const Scheme_Object *n); -/*========================================================================*/ -/* complexes */ -/*========================================================================*/ -Scheme_Object *(*scheme_make_complex)(const Scheme_Object *r, const Scheme_Object *i); -Scheme_Object *(*scheme_complex_normalize)(const Scheme_Object *n); -Scheme_Object *(*scheme_complex_real_part)(const Scheme_Object *n); -Scheme_Object *(*scheme_complex_imaginary_part)(const Scheme_Object *n); -/* Exact/inexact: */ -int (*scheme_is_exact)(const Scheme_Object *n); -int (*scheme_is_inexact)(const Scheme_Object *n); -/*========================================================================*/ -/* macros, syntax, and compilation */ -/*========================================================================*/ -Scheme_Object *(*scheme_expand)(Scheme_Object *form, Scheme_Env *env); -Scheme_Object *(*scheme_compile)(Scheme_Object *form, Scheme_Env *env, int writeable); -/*========================================================================*/ -/* ports */ -/*========================================================================*/ -Scheme_Object *(*scheme_read)(Scheme_Object *port); -Scheme_Object *(*scheme_read_syntax)(Scheme_Object *port, Scheme_Object *stxsrc); -void (*scheme_write)(Scheme_Object *obj, Scheme_Object *port); -void (*scheme_print)(Scheme_Object *obj, Scheme_Object *port); -void (*scheme_display)(Scheme_Object *obj, Scheme_Object *port); -void (*scheme_write_w_max)(Scheme_Object *obj, Scheme_Object *port, intptr_t maxl); -void (*scheme_display_w_max)(Scheme_Object *obj, Scheme_Object *port, intptr_t maxl); -void (*scheme_print_w_max)(Scheme_Object *obj, Scheme_Object *port, intptr_t maxl); -void (*scheme_write_byte_string)(const char *str, intptr_t len, Scheme_Object *port); -void (*scheme_write_char_string)(const mzchar *str, intptr_t len, Scheme_Object *port); -intptr_t (*scheme_put_byte_string)(const char *who, Scheme_Object *port, - const char *str, intptr_t d, intptr_t len, - int rarely_block); -intptr_t (*scheme_put_char_string)(const char *who, Scheme_Object *port, - const mzchar *str, intptr_t d, intptr_t len); -char *(*scheme_write_to_string)(Scheme_Object *obj, intptr_t *len); -char *(*scheme_display_to_string)(Scheme_Object *obj, intptr_t *len); -char *(*scheme_print_to_string)(Scheme_Object *obj, intptr_t *len); -char *(*scheme_write_to_string_w_max)(Scheme_Object *obj, intptr_t *len, intptr_t maxl); -char *(*scheme_display_to_string_w_max)(Scheme_Object *obj, intptr_t *len, intptr_t maxl); -char *(*scheme_print_to_string_w_max)(Scheme_Object *obj, intptr_t *len, intptr_t maxl); -void (*scheme_debug_print)(Scheme_Object *obj); -void (*scheme_flush_output)(Scheme_Object *port); -char *(*scheme_format)(mzchar *format, int flen, int argc, Scheme_Object **argv, intptr_t *rlen); -void (*scheme_printf)(mzchar *format, int flen, int argc, Scheme_Object **argv); -char *(*scheme_format_utf8)(char *format, int flen, int argc, Scheme_Object **argv, intptr_t *rlen); -void (*scheme_printf_utf8)(char *format, int flen, int argc, Scheme_Object **argv); -int (*scheme_getc)(Scheme_Object *port); -int (*scheme_get_byte)(Scheme_Object *port); -int (*scheme_peekc)(Scheme_Object *port); -int (*scheme_peek_byte)(Scheme_Object *port); -int (*scheme_peekc_skip)(Scheme_Object *port, Scheme_Object *skip); -int (*scheme_peek_byte_skip)(Scheme_Object *port, Scheme_Object *skip, Scheme_Object *unless_evt); -int (*scheme_getc_special_ok)(Scheme_Object *port); -int (*scheme_get_byte_special_ok)(Scheme_Object *port); -int (*scheme_peekc_special_ok)(Scheme_Object *port); -int (*scheme_peek_byte_special_ok_skip)(Scheme_Object *port, Scheme_Object *skip, Scheme_Object *unless_evt); -int (*scheme_peekc_special_ok_skip)(Scheme_Object *port, Scheme_Object *skip); -void (*scheme_ungetc)(int ch, Scheme_Object *port); -int (*scheme_byte_ready)(Scheme_Object *port); -int (*scheme_char_ready)(Scheme_Object *port); -int (*scheme_peekc_is_ungetc)(Scheme_Object *port); -void (*scheme_need_wakeup)(Scheme_Object *port, void *fds); -intptr_t (*scheme_get_byte_string)(const char *who, - Scheme_Object *port, - char *buffer, intptr_t offset, intptr_t size, - int only_avail, - int peek, Scheme_Object *peek_skip); -intptr_t (*scheme_get_byte_string_unless)(const char *who, - Scheme_Object *port, - char *buffer, intptr_t offset, intptr_t size, - int only_avail, - int peek, Scheme_Object *peek_skip, - Scheme_Object *unless_evt); -intptr_t (*scheme_get_byte_string_special_ok_unless)(const char *who, - Scheme_Object *port, - char *buffer, intptr_t offset, intptr_t size, - int only_avail, - int peek, Scheme_Object *peek_skip, - Scheme_Object *unless_evt); -Scheme_Object *(*scheme_progress_evt)(Scheme_Object *port); -int (*scheme_peeked_read)(Scheme_Object *port, - intptr_t size, - Scheme_Object *unless_evt, - Scheme_Object *target_evt); -intptr_t (*scheme_get_char_string)(const char *who, - Scheme_Object *port, - mzchar *buffer, intptr_t offset, intptr_t size, - int peek, Scheme_Object *peek_skip); -intptr_t (*scheme_get_bytes)(Scheme_Object *port, intptr_t size, char *buffer, int offset); -Scheme_Object *(*scheme_get_ready_special)(Scheme_Object *port, Scheme_Object *stxsrc, int peek); -intptr_t (*scheme_tell)(Scheme_Object *port); -intptr_t (*scheme_output_tell)(Scheme_Object *port); -intptr_t (*scheme_tell_line)(Scheme_Object *port); -intptr_t (*scheme_tell_column)(Scheme_Object *port); -void (*scheme_tell_all)(Scheme_Object *port, intptr_t *line, intptr_t *col, intptr_t *pos); -void (*scheme_set_port_location)(int argc, Scheme_Object **argv); -void (*scheme_count_lines)(Scheme_Object *port); -void (*scheme_close_input_port)(Scheme_Object *port); -void (*scheme_close_output_port)(Scheme_Object *port); -Scheme_Object *(*scheme_write_special)(int argc, Scheme_Object *argv[]); -Scheme_Object *(*scheme_write_special_nonblock)(int argc, Scheme_Object *argv[]); -Scheme_Object *(*scheme_make_write_evt)(const char *who, Scheme_Object *port, - Scheme_Object *special, char *str, intptr_t start, intptr_t size); -Scheme_Port *(*scheme_port_record)(Scheme_Object *port); -Scheme_Input_Port *(*scheme_input_port_record)(Scheme_Object *port); -Scheme_Output_Port *(*scheme_output_port_record)(Scheme_Object *port); -int (*scheme_is_input_port)(Scheme_Object *port); -int (*scheme_is_output_port)(Scheme_Object *port); -Scheme_Object *(*scheme_make_port_type)(const char *name); -Scheme_Input_Port *(*scheme_make_input_port)(Scheme_Object *subtype, void *data, - Scheme_Object *name, - Scheme_Get_String_Fun get_byte_string_fun, - Scheme_Peek_String_Fun peek_string_fun, - Scheme_Progress_Evt_Fun progress_evt_fun, - Scheme_Peeked_Read_Fun peeked_read_fun, - Scheme_In_Ready_Fun byte_ready_fun, - Scheme_Close_Input_Fun close_fun, - Scheme_Need_Wakeup_Input_Fun need_wakeup_fun, - int must_close); -Scheme_Output_Port *(*scheme_make_output_port)(Scheme_Object *subtype, void *data, - Scheme_Object *name, - Scheme_Write_String_Evt_Fun write_byte_string_evt_fun, - Scheme_Write_String_Fun write_byte_string_fun, - Scheme_Out_Ready_Fun ready_fun, - Scheme_Close_Output_Fun close_fun, - Scheme_Need_Wakeup_Output_Fun need_wakeup_fun, - Scheme_Write_Special_Evt_Fun write_special_evt_fun, - Scheme_Write_Special_Fun write_special_fun, - int must_close); -void (*scheme_set_next_port_custodian)(Scheme_Custodian *c); -void (*scheme_set_port_location_fun)(Scheme_Port *port, - Scheme_Location_Fun location_fun); -void (*scheme_set_port_count_lines_fun)(Scheme_Port *port, - Scheme_Count_Lines_Fun count_lines_fun); -void (*scheme_port_count_lines)(Scheme_Port *ip, const char *buffer, - intptr_t offset, intptr_t got); -Scheme_Object *(*scheme_progress_evt_via_get)(Scheme_Input_Port *port); -int (*scheme_peeked_read_via_get)(Scheme_Input_Port *port, - intptr_t size, - Scheme_Object *unless_evt, - Scheme_Object *target_ch); -Scheme_Object *(*scheme_write_evt_via_write)(Scheme_Output_Port *port, - const char *str, intptr_t offset, intptr_t size); -Scheme_Object *(*scheme_write_special_evt_via_write_special)(Scheme_Output_Port *port, - Scheme_Object *special); -Scheme_Object *(*scheme_open_input_file)(const char *name, const char *who); -Scheme_Object *(*scheme_open_output_file)(const char *name, const char *who); -Scheme_Object *(*scheme_open_input_output_file)(const char *name, const char *who, Scheme_Object **oport); -Scheme_Object *(*scheme_open_output_file_with_mode)(const char *name, const char *who, int text); -Scheme_Object *(*scheme_make_file_input_port)(FILE *fp); -Scheme_Object *(*scheme_make_named_file_input_port)(FILE *fp, Scheme_Object *name); -Scheme_Object *(*scheme_make_file_output_port)(FILE *fp); -Scheme_Object *(*scheme_make_fd_input_port)(int fd, Scheme_Object *name, int regfile, int win_textmode); -Scheme_Object *(*scheme_make_fd_output_port)(int fd, Scheme_Object *name, int regfile, int win_textmode, int read_too); -Scheme_Object *(*scheme_make_byte_string_input_port)(const char *str); -Scheme_Object *(*scheme_make_sized_byte_string_input_port)(const char *str, intptr_t len); -Scheme_Object *(*scheme_make_byte_string_output_port)(); -char *(*scheme_get_sized_byte_string_output)(Scheme_Object *port, intptr_t *len); -char *(*scheme_get_reset_sized_byte_string_output)(Scheme_Object *port, intptr_t *len, int reset, intptr_t startpos, intptr_t endpos); -void (*scheme_pipe)(Scheme_Object **read, Scheme_Object **write); -void (*scheme_pipe_with_limit)(Scheme_Object **write, Scheme_Object **read, int maxsize); -Scheme_Object *(*scheme_make_null_output_port)(int can_write_special); -Scheme_Object *(*scheme_make_redirect_output_port)(Scheme_Object *port); -intptr_t (*scheme_set_file_position)(Scheme_Object *port, intptr_t pos); -int (*scheme_file_exists)(char *filename); -int (*scheme_directory_exists)(char *dirname); -char *(*scheme_expand_filename)(char* filename, int ilen, const char *errorin, int *ex, int guards); -char *(*scheme_expand_user_filename)(char* filename, int ilen, const char *errorin, int *ex, int guards); -char *(*scheme_expand_string_filename)(Scheme_Object *f, const char *errorin, int *ex, int guards); -char *(*scheme_os_getcwd)(char *buf, int buflen, int *actlen, int noexn); -int (*scheme_os_setcwd)(char *buf, int noexn); -char *(*scheme_getdrive)(void); -Scheme_Object *(*scheme_split_path)(const char *path, int len, Scheme_Object **base, int *isdir, int kind); -Scheme_Object *(*scheme_build_path)(int argc, Scheme_Object **argv); -Scheme_Object *(*scheme_path_to_directory_path)(Scheme_Object *p); -Scheme_Object *(*scheme_path_to_complete_path)(Scheme_Object *path, Scheme_Object *relto_path); -Scheme_Object *(*scheme_simplify_path)(int argc, Scheme_Object *argv[]); -Scheme_Object *(*scheme_make_path)(const char *chars); -Scheme_Object *(*scheme_make_sized_path)(char *chars, intptr_t len, int copy); -Scheme_Object *(*scheme_make_sized_offset_path)(char *chars, intptr_t d, intptr_t len, int copy); -Scheme_Object *(*scheme_make_sized_offset_kind_path)(char *chars, intptr_t d, intptr_t len, int copy, int kind); -Scheme_Object *(*scheme_make_path_without_copying)(char *chars); -#ifdef MACINTOSH_EVENTS -char *(*scheme_mac_spec_to_path)(mzFSSpec *spec); -int (*scheme_mac_path_to_spec)(const char *filename, mzFSSpec *spec); -#endif -void *(*scheme_alloc_fdset_array)(int count, int permanent); -void *(*scheme_init_fdset_array)(void *fdarray, int count); -void *(*scheme_get_fdset)(void *fdarray, int pos); -void (*scheme_fdzero)(void *fd); -void (*scheme_fdset)(void *fd, int pos); -void (*scheme_fdclr)(void *fd, int pos); -int (*scheme_fdisset)(void *fd, int pos); -void (*scheme_add_fd_handle)(void *h, void *fds, int repost); -void (*scheme_add_fd_eventmask)(void *fds, int mask); -void (*scheme_collapse_win_fd)(void *fds); -void (*scheme_set_wakeup_time)(void *fds, double end_time); -void (*scheme_security_check_file)(const char *who, const char *filename, int guards); -void (*scheme_security_check_file_link)(const char *who, const char *filename, const char *content); -void (*scheme_security_check_network)(const char *who, const char *host, int port, int client); -struct mz_addrinfo *(*scheme_get_host_address)(const char *address, int id, int *err, - int family, int passive, int tcp); -void (*scheme_free_host_address)(struct mz_addrinfo *a); -const char *(*scheme_host_address_strerror)(int errnum); -void (*scheme_getnameinfo)(void *sa, int salen, - char *host, int hostlen, - char *serv, int servlen); -int (*scheme_get_port_file_descriptor)(Scheme_Object *p, intptr_t *_fd); -intptr_t (*scheme_get_port_fd)(Scheme_Object *p); -int (*scheme_get_port_socket)(Scheme_Object *p, intptr_t *_s); -void (*scheme_socket_to_ports)(intptr_t s, const char *name, int takeover, - Scheme_Object **_inp, Scheme_Object **_outp); -Scheme_Object *(*scheme_fd_to_semaphore)(intptr_t fd, int mode, int is_socket); -void (*scheme_set_type_printer)(Scheme_Type stype, Scheme_Type_Printer printer); -void (*scheme_print_bytes)(Scheme_Print_Params *pp, const char *str, int offset, int len); -void (*scheme_print_utf8)(Scheme_Print_Params *pp, const char *str, int offset, int len); -void (*scheme_print_string)(Scheme_Print_Params *pp, const mzchar *str, int offset, int len); -Scheme_Object *(*scheme_read_byte_string)(Scheme_Object *port); -/*========================================================================*/ -/* namespace/environment */ -/*========================================================================*/ -Scheme_Object *(*scheme_make_namespace)(int argc, Scheme_Object *argv[]); -void (*scheme_add_global)(const char *name, Scheme_Object *val, Scheme_Env *env); -void (*scheme_add_global_symbol)(Scheme_Object *name, Scheme_Object *val, - Scheme_Env *env); -Scheme_Object *(*scheme_make_envunbox)(Scheme_Object *value); -Scheme_Object *(*scheme_lookup_global)(Scheme_Object *symbol, Scheme_Env *env); -Scheme_Bucket *(*scheme_global_bucket)(Scheme_Object *symbol, Scheme_Env *env); -Scheme_Bucket *(*scheme_global_keyword_bucket)(Scheme_Object *symbol, Scheme_Env *env); -Scheme_Bucket *(*scheme_module_bucket)(Scheme_Object *mod, Scheme_Object *var, int pos, Scheme_Env *env); -Scheme_Object *(*scheme_builtin_value)(const char *name); /* convenience */ -void (*scheme_set_global_bucket)(char *proc, Scheme_Bucket *var, Scheme_Object *val, - int set_undef); -void (*scheme_install_macro)(Scheme_Bucket *b, Scheme_Object *v); -void (*scheme_save_initial_module_set)(Scheme_Env *env); -Scheme_Env *(*scheme_primitive_module)(Scheme_Object *name, Scheme_Env *for_env); -void (*scheme_finish_primitive_module)(Scheme_Env *env); -void (*scheme_protect_primitive_provide)(Scheme_Env *env, Scheme_Object *name); -Scheme_Object *(*scheme_make_modidx)(Scheme_Object *path, - Scheme_Object *base, - Scheme_Object *resolved); -Scheme_Object *(*scheme_apply_for_syntax_in_env)(Scheme_Object *proc, Scheme_Env *env); -Scheme_Object *(*scheme_dynamic_require)(int argc, Scheme_Object *argv[]); -Scheme_Object *(*scheme_namespace_require)(Scheme_Object *); -int (*scheme_is_module_path)(Scheme_Object *); -Scheme_Object *(*scheme_datum_to_kernel_stx)(Scheme_Object *e); -int (*scheme_module_is_declared)(Scheme_Object *name, int try_load); -/*========================================================================*/ -/* symbols */ -/*========================================================================*/ -Scheme_Object *(*scheme_intern_symbol)(const char *name); -Scheme_Object *(*scheme_intern_exact_symbol)(const char *name, uintptr_t len); -Scheme_Object *(*scheme_intern_exact_char_symbol)(const mzchar *name, uintptr_t len); -Scheme_Object *(*scheme_make_symbol)(const char *name); /* Make uninterned */ -Scheme_Object *(*scheme_make_exact_symbol)(const char *name, uintptr_t len); /* Exact case */ -Scheme_Object *(*scheme_make_exact_char_symbol)(const mzchar *name, uintptr_t len); /* Exact case */ -const char *(*scheme_symbol_name)(Scheme_Object *sym); -const char *(*scheme_symbol_name_and_size)(Scheme_Object *sym, uintptr_t *l, int flags); -char *(*scheme_symbol_val)(Scheme_Object *sym); -Scheme_Object *(*scheme_intern_exact_keyword)(const char *name, uintptr_t len); -Scheme_Object *(*scheme_intern_exact_char_keyword)(const mzchar *name, uintptr_t len); -/*========================================================================*/ -/* structs */ -/*========================================================================*/ -Scheme_Object **(*scheme_make_struct_values)(Scheme_Object *struct_type, - Scheme_Object **names, - int count, int flags); -Scheme_Object **(*scheme_make_struct_names)(Scheme_Object *base, - Scheme_Object *field_names, - int flags, int *count_out); -Scheme_Object *(*scheme_make_struct_type)(Scheme_Object *base, - Scheme_Object *parent, - Scheme_Object *inspector, - int num_fields, int num_uninit_fields, - Scheme_Object *uninit_val, - Scheme_Object *properties, - Scheme_Object *guard); -Scheme_Object *(*scheme_make_struct_type2)(Scheme_Object *base, - Scheme_Object *parent, - Scheme_Object *inspector, - int num_fields, int num_uninit_fields, - Scheme_Object *uninit_val, - Scheme_Object *proc_attr, - Scheme_Object *properties, - char *immutable_array, - Scheme_Object *guard); -Scheme_Object *(*scheme_make_struct_instance)(Scheme_Object *stype, - int argc, - Scheme_Object **argv); -int (*scheme_is_struct_instance)(Scheme_Object *type, Scheme_Object *v); -Scheme_Object *(*scheme_struct_ref)(Scheme_Object *s, int pos); -void (*scheme_struct_set)(Scheme_Object *s, int pos, Scheme_Object *v); -Scheme_Object *(*scheme_make_struct_type_property)(Scheme_Object *name); -Scheme_Object *(*scheme_make_struct_type_property_w_guard)(Scheme_Object *name, Scheme_Object *guard); -Scheme_Object *(*scheme_struct_type_property_ref)(Scheme_Object *prop, Scheme_Object *s); -Scheme_Object *(*scheme_chaperone_struct_type_property_ref)(Scheme_Object *prop, Scheme_Object *s); -Scheme_Object *(*scheme_make_location)(Scheme_Object *src, - Scheme_Object *line, - Scheme_Object *col, - Scheme_Object *pos, - Scheme_Object *span); -int (*scheme_is_location)(Scheme_Object *o); -Scheme_Object *(*scheme_make_inspector)(Scheme_Object *superior); -int (*scheme_is_subinspector)(Scheme_Object *i, Scheme_Object *sup); -/*========================================================================*/ -/* utilities */ -/*========================================================================*/ -int (*scheme_eq)(Scheme_Object *obj1, Scheme_Object *obj2); -int (*scheme_eqv)(Scheme_Object *obj1, Scheme_Object *obj2); -int (*scheme_equal)(Scheme_Object *obj1, Scheme_Object *obj2); -int (*scheme_chaperone_of)(Scheme_Object *obj1, Scheme_Object *obj2); -int (*scheme_impersonator_of)(Scheme_Object *obj1, Scheme_Object *obj2); -#ifdef MZ_PRECISE_GC -intptr_t (*scheme_hash_key)(Scheme_Object *o); -#endif -intptr_t (*scheme_equal_hash_key)(Scheme_Object *o); -intptr_t (*scheme_equal_hash_key2)(Scheme_Object *o); -intptr_t (*scheme_recur_equal_hash_key)(Scheme_Object *o, void *cycle_data); -intptr_t (*scheme_recur_equal_hash_key2)(Scheme_Object *o, void *cycle_data); -intptr_t (*scheme_eqv_hash_key)(Scheme_Object *o); -intptr_t (*scheme_eqv_hash_key2)(Scheme_Object *o); -void (*scheme_set_type_equality)(Scheme_Type type, - Scheme_Equal_Proc f, - Scheme_Primary_Hash_Proc hash1, - Scheme_Secondary_Hash_Proc hash2); -int (*scheme_recur_equal)(Scheme_Object *obj1, Scheme_Object *obj2, void *cycle_info); -Scheme_Object *(*scheme_build_list)(int argc, Scheme_Object **argv); -Scheme_Object *(*scheme_build_list_offset)(int argc, Scheme_Object **argv, int delta); -int (*scheme_is_list)(Scheme_Object *obj1); -int (*scheme_list_length)(Scheme_Object *list); -int (*scheme_proper_list_length)(Scheme_Object *list); -Scheme_Object *(*scheme_alloc_list)(int size); -Scheme_Object *(*scheme_map_1)(Scheme_Object *(*f)(Scheme_Object*), - Scheme_Object *l); -Scheme_Object *(*scheme_car)(Scheme_Object *pair); -Scheme_Object *(*scheme_cdr)(Scheme_Object *pair); -Scheme_Object *(*scheme_cadr)(Scheme_Object *pair); -Scheme_Object *(*scheme_caddr)(Scheme_Object *pair); -Scheme_Object *(*scheme_vector_to_list)(Scheme_Object *vec); -Scheme_Object *(*scheme_list_to_vector)(Scheme_Object *list); -Scheme_Object *(*scheme_append)(Scheme_Object *lstx, Scheme_Object *lsty); -Scheme_Object *(*scheme_reverse)(Scheme_Object *l); -Scheme_Object *(*scheme_box)(Scheme_Object *v); -Scheme_Object *(*scheme_unbox)(Scheme_Object *obj); -void (*scheme_set_box)(Scheme_Object *b, Scheme_Object *v); -Scheme_Object *(*scheme_make_weak_box)(Scheme_Object *v); -Scheme_Object *(*scheme_make_late_weak_box)(Scheme_Object *v); -Scheme_Object *(*scheme_make_ephemeron)(Scheme_Object *key, Scheme_Object *val); -Scheme_Object *(*scheme_ephemeron_value)(Scheme_Object *o); -Scheme_Object *(*scheme_ephemeron_key)(Scheme_Object *o); -Scheme_Object *(*scheme_make_stubborn_will_executor)(); -Scheme_Object *(*scheme_load)(const char *file); -Scheme_Object *(*scheme_load_extension)(const char *filename, Scheme_Env *env); -void (*scheme_register_extension_global)(void *ptr, intptr_t size); -intptr_t (*scheme_get_seconds)(void); -intptr_t (*scheme_get_milliseconds)(void); -double (*scheme_get_inexact_milliseconds)(void); -intptr_t (*scheme_get_process_milliseconds)(void); -intptr_t (*scheme_get_thread_milliseconds)(Scheme_Object *thrd); -char *(*scheme_banner)(void); -char *(*scheme_version)(void); -int (*scheme_check_proc_arity)(const char *where, int a, - int which, int argc, Scheme_Object **argv); -int (*scheme_check_proc_arity2)(const char *where, int a, - int which, int argc, Scheme_Object **argv, - int false_ok); -char *(*scheme_make_provided_string)(Scheme_Object *o, int count, intptr_t *len); -char *(*scheme_make_args_string)(const char *s, int which, int argc, Scheme_Object **argv, intptr_t *len); -char *(*scheme_make_arg_lines_string)(const char *s, int which, int argc, Scheme_Object **argv, intptr_t *len); -const char *(*scheme_system_library_subpath)(); -void (*scheme_signal_received)(void); -void (*scheme_signal_received_at)(void *); -void *(*scheme_get_signal_handle)(); -void (*scheme_wait_until_signal_received)(void); -intptr_t (*scheme_char_strlen)(const mzchar *s); -Scheme_Object *(*scheme_stx_extract_marks)(Scheme_Object *stx); -int (*scheme_get_place_id)(void); -Scheme_Hash_Table *(*scheme_get_place_table)(void); -void *(*scheme_register_process_global)(const char *key, void *val); -Scheme_Object *(*scheme_malloc_key)(void); -void (*scheme_free_key)(Scheme_Object *k); -#ifndef SCHEME_EX_INLINE -} Scheme_Extension_Table; -#endif diff --git a/src/racket/src/schexn.h b/src/racket/src/schexn.h index 2a22e42f11..eb92b46e2e 100644 --- a/src/racket/src/schexn.h +++ b/src/racket/src/schexn.h @@ -23,6 +23,8 @@ enum { MZEXN_FAIL_UNSUPPORTED, MZEXN_FAIL_USER, MZEXN_BREAK, + MZEXN_BREAK_TERMINATE, + MZEXN_BREAK_HANG_UP, MZEXN_OTHER }; #endif @@ -53,7 +55,9 @@ static exn_rec exn_table[] = { { 2, NULL, NULL, 0, NULL, 1 }, { 2, NULL, NULL, 0, NULL, 1 }, { 2, NULL, NULL, 0, NULL, 1 }, - { 3, NULL, NULL, 0, NULL, 0 } + { 3, NULL, NULL, 0, NULL, 0 }, + { 3, NULL, NULL, 0, NULL, 20 }, + { 3, NULL, NULL, 0, NULL, 20 } }; #else static exn_rec *exn_table; @@ -86,6 +90,8 @@ static exn_rec *exn_table; exn_table[MZEXN_FAIL_UNSUPPORTED].args = 2; exn_table[MZEXN_FAIL_USER].args = 2; exn_table[MZEXN_BREAK].args = 3; + exn_table[MZEXN_BREAK_TERMINATE].args = 3; + exn_table[MZEXN_BREAK_HANG_UP].args = 3; #endif #endif @@ -125,4 +131,6 @@ static exn_rec *exn_table; SETUP_STRUCT(MZEXN_FAIL_UNSUPPORTED, EXN_PARENT(MZEXN_FAIL), "exn:fail:unsupported", 0, NULL, scheme_null, NULL) SETUP_STRUCT(MZEXN_FAIL_USER, EXN_PARENT(MZEXN_FAIL), "exn:fail:user", 0, NULL, scheme_null, NULL) SETUP_STRUCT(MZEXN_BREAK, EXN_PARENT(MZEXN), "exn:break", 1, MZEXN_BREAK_FIELDS, scheme_null, scheme_make_prim(break_field_check)) + SETUP_STRUCT(MZEXN_BREAK_TERMINATE, EXN_PARENT(MZEXN_BREAK), "exn:break:terminate", 0, NULL, scheme_null, NULL) + SETUP_STRUCT(MZEXN_BREAK_HANG_UP, EXN_PARENT(MZEXN_BREAK), "exn:break:hang-up", 0, NULL, scheme_null, NULL) #endif diff --git a/src/racket/src/schminc.h b/src/racket/src/schminc.h index 58154f4bb8..dcccea8bd6 100644 --- a/src/racket/src/schminc.h +++ b/src/racket/src/schminc.h @@ -12,9 +12,9 @@ finally, set EXPECTED_PRIM_COUNT to the right value and USE_COMPILED_STARTUP to 1 and `make' again. */ -#define USE_COMPILED_STARTUP 1 +#define USE_COMPILED_STARTUP 0 -#define EXPECTED_PRIM_COUNT 1065 +#define EXPECTED_PRIM_COUNT 1071 #define EXPECTED_UNSAFE_COUNT 79 #define EXPECTED_FLFXNUM_COUNT 69 #define EXPECTED_FUTURES_COUNT 15 diff --git a/src/racket/src/schvers.h b/src/racket/src/schvers.h index 83873f5e75..7e134cbfd4 100644 --- a/src/racket/src/schvers.h +++ b/src/racket/src/schvers.h @@ -13,12 +13,12 @@ consistently.) */ -#define MZSCHEME_VERSION "5.3.0.19" +#define MZSCHEME_VERSION "5.3.0.20" #define MZSCHEME_VERSION_X 5 #define MZSCHEME_VERSION_Y 3 #define MZSCHEME_VERSION_Z 0 -#define MZSCHEME_VERSION_W 19 +#define MZSCHEME_VERSION_W 20 #define MZSCHEME_VERSION_MAJOR ((MZSCHEME_VERSION_X * 100) + MZSCHEME_VERSION_Y) #define MZSCHEME_VERSION_MINOR ((MZSCHEME_VERSION_Z * 1000) + MZSCHEME_VERSION_W) diff --git a/src/racket/src/thread.c b/src/racket/src/thread.c index 22e2198252..29526e9378 100644 --- a/src/racket/src/thread.c +++ b/src/racket/src/thread.c @@ -506,7 +506,7 @@ void scheme_init_thread(Scheme_Env *env) GLOBAL_PRIM_W_ARITY("thread-wait" , thread_wait , 1, 1, env); GLOBAL_PRIM_W_ARITY("current-thread" , sch_current , 0, 0, env); GLOBAL_PRIM_W_ARITY("kill-thread" , kill_thread , 1, 1, env); - GLOBAL_PRIM_W_ARITY("break-thread" , break_thread , 1, 1, env); + GLOBAL_PRIM_W_ARITY("break-thread" , break_thread , 1, 2, env); GLOBAL_PRIM_W_ARITY("thread-suspend" , thread_suspend , 1, 1, env); GLOBAL_PRIM_W_ARITY("thread-resume" , thread_resume , 1, 2, env); GLOBAL_PRIM_W_ARITY("thread-resume-evt" , make_thread_resume , 1, 1, env); @@ -4205,7 +4205,7 @@ void scheme_pop_break_enable(Scheme_Cont_Frame_Data *cframe, int post_check) } } -static Scheme_Object *raise_user_break(int argc, Scheme_Object ** volatile argv) +static Scheme_Object *raise_user_break(void *data, int argc, Scheme_Object ** volatile argv) { /* The main action here is buried in code to free temporary bignum space on escapes. Aside from a thread kill, this is the only @@ -4216,6 +4216,9 @@ static Scheme_Object *raise_user_break(int argc, Scheme_Object ** volatile argv) that's why we save and restore an old snapshot. */ mz_jmp_buf *savebuf, newbuf; intptr_t save[4]; + int kind; + + kind = SCHEME_INT_VAL((Scheme_Object *)data); savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; @@ -4223,7 +4226,11 @@ static Scheme_Object *raise_user_break(int argc, Scheme_Object ** volatile argv) if (!scheme_setjmp(newbuf)) { /* >>>> This is the main action <<<< */ - scheme_raise_exn(MZEXN_BREAK, argv[0], "user break"); + scheme_raise_exn(kind, argv[0], ((kind == MZEXN_BREAK_TERMINATE) + ? "terminate break" + : ((kind == MZEXN_BREAK_HANG_UP) + ? "hang-up break" + : "user break"))); /* will definitely escape (or thread will die) */ } else { /* As expected, we're escaping. Unless we're continuing, then @@ -4244,7 +4251,9 @@ static void raise_break(Scheme_Thread *p) Thread_Schedule_State_Record ssr; Scheme_Object *a[1]; Scheme_Cont_Frame_Data cframe; + int kind; + kind = p->external_break; p->external_break = 0; if (p->blocker && (p->block_check == (Scheme_Ready_Fun)syncing_ready)) { @@ -4255,7 +4264,7 @@ static void raise_break(Scheme_Thread *p) save_thread_schedule_state(p, &ssr, 0); p->ran_some = 1; - a[0] = scheme_make_prim((Scheme_Prim *)raise_user_break); + a[0] = scheme_make_closed_prim((Scheme_Closed_Prim *)raise_user_break, scheme_make_integer(kind)); /* Continuation frame ensures that this doesn't look like it's in tail position with respect to @@ -4304,14 +4313,22 @@ static void exit_or_escape(Scheme_Thread *p) select_thread(); } -void scheme_break_main_thread_at(void *p) +void scheme_break_kind_main_thread_at(void *p, int kind) /* This function can be called from an interrupt handler. On some platforms, it will even be called from multiple OS threads. In the case of multiple threads, there's a tiny chance that a single Ctl-C will trigger multiple break exceptions. */ + XFORM_SKIP_PROC { - *(volatile short *)p = 1; + if (kind > *(volatile short *)p) + *(volatile short *)p = kind; +} + +void scheme_break_main_thread_at(void *p) + XFORM_SKIP_PROC +{ + scheme_break_kind_main_thread_at(p, MZEXN_BREAK); } void scheme_break_main_thread() @@ -4343,13 +4360,14 @@ static void check_ready_break() if (delayed_break_ready) { if (scheme_main_thread) { + int kind = delayed_break_ready; delayed_break_ready = 0; - scheme_break_thread(main_break_target_thread); + scheme_break_kind_thread(main_break_target_thread, kind); } } } -void scheme_break_thread(Scheme_Thread *p) +void scheme_break_kind_thread(Scheme_Thread *p, int kind) { if (!p) { p = scheme_main_thread; @@ -4362,7 +4380,8 @@ void scheme_break_thread(Scheme_Thread *p) p = p->nestee; } - p->external_break = 1; + if (kind > p->external_break) + p->external_break = kind; if (p == scheme_current_thread) { if (scheme_can_break(p)) { @@ -4377,6 +4396,11 @@ void scheme_break_thread(Scheme_Thread *p) # endif } +void scheme_break_thread(Scheme_Thread *p) +{ + return scheme_break_kind_thread(p, MZEXN_BREAK); +} + static void call_on_atomic_timeout(int must) { Scheme_Thread *p = scheme_current_thread; @@ -5113,19 +5137,29 @@ sch_sleep(int argc, Scheme_Object *args[]) static Scheme_Object *break_thread(int argc, Scheme_Object *args[]) { Scheme_Thread *p; + int kind = MZEXN_BREAK; if (!SAME_TYPE(SCHEME_TYPE(args[0]), scheme_thread_type)) scheme_wrong_contract("break-thread", "thread?", 0, argc, args); + if ((argc > 1) && SCHEME_TRUEP(args[1])) { + if (SCHEME_SYMBOLP(args[1]) + && !SCHEME_SYM_WEIRDP(args[1]) + && !strcmp(SCHEME_SYM_VAL(args[1]), "hang-up")) + kind = MZEXN_BREAK_HANG_UP; + else if (SCHEME_SYMBOLP(args[1]) + && !SCHEME_SYM_WEIRDP(args[1]) + && !strcmp(SCHEME_SYM_VAL(args[1]), "terminate")) + kind = MZEXN_BREAK_TERMINATE; + else + scheme_wrong_contract("break-thread", "(or/c #f 'hang-up 'terminate)", 1, argc, args); + } + p = (Scheme_Thread *)args[0]; - scheme_break_thread(p); + scheme_break_kind_thread(p, kind); - /* In case p == scheme_current_thread */ - if (!scheme_fuel_counter) { - scheme_thread_block(0.0); - scheme_current_thread->ran_some = 1; - } + scheme_check_break_now(); return scheme_void; }