diff --git a/s.c b/s.c index c87026e..916fa2a 100644 --- a/s.c +++ b/s.c @@ -1,4 +1,4 @@ -/* s.c -- partially generated via skint -c s.scm */ +/* s.c -- generated via skint -c s.scm */ #include "s.h" #include "n.h" @@ -17,7 +17,6 @@ int dirsep = '\\'; int dirsep = '/'; #endif - char *s_code[] = { "S", "let-syntax", @@ -1028,9 +1027,9 @@ char *s_code[] = { "${@(y7:newline),@(y14:make-parameter)[01}@!(y17:format-fresh-line)", "C", 0, - "${'(s78:supported directives: ~~ ~%25 ~%25 ~& ~t ~_ ~a ~s ~w ~y ~c ~b " - "~o ~d ~x ~f ~? ~k ~*),@(y14:make-parameter)[01}@!(y18:format-help-stri" - "ng)", + "${'(s78:supported directives: ~~ ~%25 ~& ~t ~_ ~a ~s ~w ~y ~c ~b ~o ~d" + " ~x ~f ~? ~k ~* ~!),@(y14:make-parameter)[01}@!(y18:format-help-string" + ")", "P", "fprintf", "%!2,,,,#0#1#2#3&0{%1.0p?{.0a]1}'(s35:format: no argument for ~ directi" @@ -1044,18 +1043,19 @@ char *s_code[] = { ".2d,:4^[62}'(c~),.1v?{:3,'(c~)W0.5,.2d,:4^[62}'(c%25),.1v?{:3W6.5,.2d," ":4^[62}'(ct),.1v?{:3,'(c%09)W0.5,.2d,:4^[62}'(c_),.1v?{:3,'(c )W0.5,.2" "d,:4^[62}'(c&),.1v?{${:3,${@(y17:format-fresh-line)[00}[01}.5,.2d,:4^[" - "62}'(cs),.1v?{:3,${.8,:1^[01}W5.5d,.2d,:4^[62}'(ca),.1v?{:3,${.8,:1^[0" - "1}W4.5d,.2d,:4^[62}'(cw),.1v?{:3,${.8,:1^[01}W7.5d,.2d,:4^[62}'(cc),.1" - "v?{:3,${.8,:1^[01}W0.5d,.2d,:4^[62}'(cb),.1v?{${:3,${.(i10),:1^[01},'2" - ",:0^[03}.5d,.2d,:4^[62}'(co),.1v?{${:3,${.(i10),:1^[01},'8,:0^[03}.5d," - ".2d,:4^[62}'(cd),.1v?{${:3,${.(i10),:1^[01},'(i10),:0^[03}.5d,.2d,:4^[" - "62}'(cx),.1v?{${:3,${.(i10),:1^[01},'(i16),:0^[03}.5d,.2d,:4^[62}'(ch)" - ",.1v?{:3,${@(y18:format-help-string)[00}W4.5,.2d,:4^[62}'(cy),.1v?{${:" - "3,${.(i10),:1^[01},${@(y19:format-pretty-print)[00}[02}.5d,.2d,:4^[62}" - "'(cf),.1v?{${:3,.5^,.7^,${.(i12),:1^[01},${@(y18:format-fixed-print)[0" - "0}[04}.5d,.2d,:4^[62}'(l2:c?;ck;),.1A1?{${${${.(i11),:1^[01},:1^[01},$" - "{.(i10),:1^[01}X2,:4^[02}.5dd,.2d,:4^[62}.1a,'(s32:format: unrecognize" - "d ~ directive),@(y5:error)[62}:3,.1aW0.1,.1d,:4^[22}.!0.0^_1[72", + "62}'(c!),.1v?{:3P71.5,.2d,:4^[62}'(cs),.1v?{:3,${.8,:1^[01}W5.5d,.2d,:" + "4^[62}'(ca),.1v?{:3,${.8,:1^[01}W4.5d,.2d,:4^[62}'(cw),.1v?{:3,${.8,:1" + "^[01}W7.5d,.2d,:4^[62}'(cc),.1v?{:3,${.8,:1^[01}W0.5d,.2d,:4^[62}'(cb)" + ",.1v?{${:3,${.(i10),:1^[01},'2,:0^[03}.5d,.2d,:4^[62}'(co),.1v?{${:3,$" + "{.(i10),:1^[01},'8,:0^[03}.5d,.2d,:4^[62}'(cd),.1v?{${:3,${.(i10),:1^[" + "01},'(i10),:0^[03}.5d,.2d,:4^[62}'(cx),.1v?{${:3,${.(i10),:1^[01},'(i1" + "6),:0^[03}.5d,.2d,:4^[62}'(ch),.1v?{:3,${@(y18:format-help-string)[00}" + "W4.5,.2d,:4^[62}'(cy),.1v?{${:3,${.(i10),:1^[01},${@(y19:format-pretty" + "-print)[00}[02}.5d,.2d,:4^[62}'(cf),.1v?{${:3,.5^,.7^,${.(i12),:1^[01}" + ",${@(y18:format-fixed-print)[00}[04}.5d,.2d,:4^[62}'(l2:c?;ck;),.1A1?{" + "${${${.(i11),:1^[01},:1^[01},${.(i10),:1^[01}X2,:4^[02}.5dd,.2d,:4^[62" + "}.1a,'(s32:format: unrecognized ~ directive),@(y5:error)[62}:3,.1aW0.1" + ",.1d,:4^[22}.!0.0^_1[72", "P", "format", "%!1f,.2q,.0?{.0}{.2S0}_1?{P51,.2?{.1,.3c}{.1},${.2,.4c,@(y7:fprintf),@" diff --git a/src/s.scm b/src/s.scm index f569469..4190a32 100644 --- a/src/s.scm +++ b/src/s.scm @@ -1964,7 +1964,7 @@ (define format-fresh-line ; TODO: add (fresh-line [p]) instruction for source ports (make-parameter newline)) (define format-help-string - (make-parameter "supported directives: ~~ ~% ~% ~& ~t ~_ ~a ~s ~w ~y ~c ~b ~o ~d ~x ~f ~? ~k ~*")) + (make-parameter "supported directives: ~~ ~% ~& ~t ~_ ~a ~s ~w ~y ~c ~b ~o ~d ~x ~f ~? ~k ~* ~!")) (define (fprintf p fs . args) (define (hd args) @@ -1988,12 +1988,13 @@ (when (null? (cdr fl)) (error "format: incomplete escape sequence")) (let* ([w -1] [d -1] [fl (memd (cdr fl) (set& w) (set& d))]) (case (char-downcase (car fl)) - [(#\*) (lp (cdr fl) (cddr args))] ;+ CL + [(#\*) (lp (cdr fl) (cddr args))] ;+ CL, skips 1 arg [(#\~) (write-char #\~ p) (lp (cdr fl) args)] [(#\%) (newline p) (lp (cdr fl) args)] [(#\t) (write-char #\tab p) (lp (cdr fl) args)] [(#\_) (write-char #\space p) (lp (cdr fl) args)] [(#\&) ((format-fresh-line) p) (lp (cdr fl) args)] + [(#\!) (flush-output-port p) (lp (cdr fl) args)] ;+ common [(#\s) (write (hd args) p) (lp (cdr fl) (cdr args))] [(#\a) (display (hd args) p) (lp (cdr fl) (cdr args))] [(#\w) (write-shared (hd args) p) (lp (cdr fl) (cdr args))] diff --git a/src/t.scm b/src/t.scm index feabb90..2ed7c11 100644 --- a/src/t.scm +++ b/src/t.scm @@ -2244,76 +2244,69 @@ (for-each print vals))) (define (repl-read ip prompt op) - (when prompt (newline op) (display prompt op) (display " " op)) + (when prompt (format op "~%~a ~!" prompt)) (read-code-sexp ip)) (define (repl-exec-command cmd argstr op) (define args - (if (memq cmd '(peek sh)) ; do not expect s-exps! + (if (memq cmd '(load sh)) ; do not expect s-exps! (list (string-trim-whitespace argstr)) (guard (err [else (void)]) (read-port-sexps (open-input-string argstr))))) - (define cmd+args (cons cmd args)) - (sexp-case cmd+args - [(say hello) (display "Well, hello!\n" op)] - [(ref ) (write (repl-environment (car args) 'ref) op) (newline op)] - [(ref (* * ...)) (write (repl-environment (car args) 'ref) op) (newline op)] - [(rnr) (write *root-name-registry* op) (newline op)] - [(rref *) (write (name-lookup *root-name-registry* (car args) #f) op) (newline op)] - [(rrem! *) (cond [(name-lookup *root-name-registry* (car args) #f) - (name-remove! *root-name-registry* (car args)) (display "done!\n" op)] - [else (display "name not found: " op) (write name op) (newline op)])] - [(unr) (write *user-name-registry* op) (newline op)] - [(uref *) (write (name-lookup *user-name-registry* (car args) #f) op) (newline op)] - [(urem! *) (cond [(name-lookup *user-name-registry* (car args) #f) - (name-remove! *user-name-registry* (car args)) (display "done!\n" op)] - [else (display "name not found: " op) (write name op) (newline op)])] - [(gs) (write (global-store) op) (newline op)] - [(gs ) (let* ([k (car args)] [v (global-store)] [i (immediate-hash k (vector-length v))]) - (write (cond [(assq k (vector-ref v i)) => cdr] [else #f]) op) (newline op))] - [(peek *) - (cond [(string? (car args)) - (display (if (file-exists? (car args)) - "file exists\n" "file does not exist\n") op)] - [(symbol? (car args)) - (display (if (file-exists? (symbol->string (car args))) - "file exists\n" "file does not exist\n") op)] - [else (display "invalid file name; use double quotes\n" op)])] - [(v) (set! *verbose* #t)] - [(verbose on) (set! *verbose* #t)] - [(verbose off) (set! *verbose* #f)] - [(q) (set! *quiet* #t)] - [(quiet on) (set! *quiet* #t)] - [(quiet off) (set! *quiet* #f)] - [(time *) (let ([start (current-jiffy)]) - (repl-evaluate-top-form (car args) repl-environment op) - (format #t "; elapsed time: ~s ms.~%" - (* 1000 (/ (- (current-jiffy) start) (jiffies-per-second)))))] - [(sh ) (%system (car args))] - [(help) - (display "Available commands:\n" op) - (display " ,say hello -- displays nice greeting\n" op) - (display " ,peek -- check if file exists\n" op) - (display " ,q -- disable informational messages\n" op) - (display " ,quiet on -- disable informational messages\n" op) - (display " ,quiet off -- enable informational messages\n" op) - (display " ,v -- turn verbosity on\n" op) - (display " ,verbose on -- turn verbosity on\n" op) - (display " ,verbose off -- turn verbosity off\n" op) - (display " ,ref -- show denotation for (may alloc)\n" op) - (display " ,rnr -- show root name registry\n" op) - (display " ,rref -- lookup name in root registry\n" op) - (display " ,rrem! -- remove name from root registry\n" op) - (display " ,unr -- show user name registry\n" op) - (display " ,uref -- lookup name in user registry\n" op) - (display " ,urem! -- remove name from user registry\n" op) - (display " ,gs -- show global store (big!)\n" op) - (display " ,gs -- lookup global location for \n" op) - (display " ,time -- time short expression \n" op) - (display " ,sh -- send to local shell\n" op) - (display " ,help -- this help\n" op)] - [else - (display "syntax error in repl command\n" op) - (display "type ,help to see available commands\n" op)])) + (let retry ([cmd+args (cons cmd args)]) + (sexp-case cmd+args + [(ref ) (write (repl-environment (car args) 'ref) op) (newline op)] + [(ref (* * ...)) (write (repl-environment (car args) 'ref) op) (newline op)] + [(rnr) (write *root-name-registry* op) (newline op)] + [(rref *) (write (name-lookup *root-name-registry* (car args) #f) op) (newline op)] + [(rrem! *) (cond [(name-lookup *root-name-registry* (car args) #f) + (name-remove! *root-name-registry* (car args)) (display "done!\n" op)] + [else (display "name not found: " op) (write name op) (newline op)])] + [(unr) (write *user-name-registry* op) (newline op)] + [(uref *) (write (name-lookup *user-name-registry* (car args) #f) op) (newline op)] + [(urem! *) (cond [(name-lookup *user-name-registry* (car args) #f) + (name-remove! *user-name-registry* (car args)) (display "done!\n" op)] + [else (display "name not found: " op) (write name op) (newline op)])] + [(gs) (write (global-store) op) (newline op)] + [(gs ) + (let* ([k (car args)] [v (global-store)] [i (immediate-hash k (vector-length v))]) + (write (cond [(assq k (vector-ref v i)) => cdr] [else #f]) op) (newline op))] + [(load ) (load (car args))] + [(verbose on) (set! *verbose* #t)] + [(verbose off) (set! *verbose* #f)] + [(v) (set! *verbose* #t)] + [(quiet on) (set! *quiet* #t)] + [(quiet off) (set! *quiet* #f)] + [(q) (set! *quiet* #t)] + [(time *) (let ([start (current-jiffy)]) + (repl-evaluate-top-form (car args) repl-environment op) + (format #t "; elapsed time: ~s ms.~%" + (* 1000 (/ (- (current-jiffy) start) (jiffies-per-second)))))] + [(sh ) (%system (car args))] + [(help) + (display "\nAvailable commands:\n" op) + (display " ,load -- loads (no quotes needed)\n" op) + (display " ,q -- disable informational messages\n" op) + (display " ,quiet on -- disable informational messages\n" op) + (display " ,quiet off -- enable informational messages\n" op) + (display " ,v -- turn verbosity on\n" op) + (display " ,verbose on -- turn verbosity on\n" op) + (display " ,verbose off -- turn verbosity off\n" op) + (display " ,ref -- show denotation for (may alloc)\n" op) + (display " ,rnr -- show root name registry\n" op) + (display " ,rref -- lookup name in root registry\n" op) + (display " ,rrem! -- remove name from root registry\n" op) + (display " ,unr -- show user name registry\n" op) + (display " ,uref -- lookup name in user registry\n" op) + (display " ,urem! -- remove name from user registry\n" op) + (display " ,gs -- show global store (big!)\n" op) + (display " ,gs -- lookup global location for \n" op) + (display " ,time -- time short expression \n" op) + (display " ,sh -- send to local shell\n" op) + (display " ,help -- this help\n" op)] + [(h) (retry '(help))] + [else + (display "syntax error in repl command\n" op) + (display "type ,help to see available commands\n" op)]))) (define (repl-from-port ip env prompt op) (define cfs (current-file-stack)) @@ -2354,7 +2347,7 @@ (when (and (tty-port? (current-input-port)) (tty-port? (current-output-port))) ; quick check for non-interactive use failed, greet (display "SKINT Scheme Interpreter v0.0.9\n") - (display "Copyright (c) 2024 False Schemers\n\n")) + (display "Copyright (c) 2024 False Schemers\n")) #t) ; exited normally (define (repl) diff --git a/t.c b/t.c index cadcd1f..281e2b4 100644 --- a/t.c +++ b/t.c @@ -1398,67 +1398,64 @@ char *t_code[] = { "list1?)[01}?{.0^aY8}{f}~?{.0^,.2^,@(y10:%25for-each1)[52}]5", "P", "repl-read", - "%3.1?{.2W6.2,.2W4.2,'(s1: )W4}.0,@(y14:read-code-sexp)[31", + "%3.1?{${.3,'(s7:~%25~a ~!),.6,@(y6:format)[03}}.0,@(y14:read-code-sexp" + ")[31", "P", "repl-exec-command", - "%3,,#0#1'(l2:y4:peek;y2:sh;),.3A0?{${.5,@(y22:string-trim-whitespace)[" - "01},l1}{${${k0,.0,${.2,.(i12),&2{%0:1,&1{%!0.0,&1{%0:0,@(y6:values),@(" - "y13:apply-to-list)[02},:0[11},:0,&1{%0:0P50,@(y15:read-port-sexps)[01}" - ",@(y16:call-with-values)[02},.3,&1{%1${k0,.0,${.6,&1{%0:0,Y9]1},:0[01}" - "_1_3}[10},@(y22:with-exception-handler)[02}_1_3}[00}}.!0.0^,.3c.!1${.3" - "^,'(l2:y3:say;y5:hello;),@(y11:sexp-match?)[02}?{.4,'(s13:Well, hello!" - "%0a)W4]5}${.3^,'(l2:y3:ref;y8:;),@(y11:sexp-match?)[02}?{.4,${" - "'(y3:ref),.4^a,@(y16:repl-environment)[02}W5.4W6]5}${.3^,'(l2:y3:ref;l" - "3:y1:*;y1:*;y3:...;;),@(y11:sexp-match?)[02}?{.4,${'(y3:ref),.4^a,@(y1" - "6:repl-environment)[02}W5.4W6]5}${.3^,'(l1:y3:rnr;),@(y11:sexp-match?)" - "[02}?{.4,@(y20:*root-name-registry*)W5.4W6]5}${.3^,'(l2:y4:rref;y1:*;)" - ",@(y11:sexp-match?)[02}?{.4,${f,.4^a,@(y20:*root-name-registry*),@(y11" - ":name-lookup)[03}W5.4W6]5}${.3^,'(l2:y5:rrem!;y1:*;),@(y11:sexp-match?" - ")[02}?{${f,.3^a,@(y20:*root-name-registry*),@(y11:name-lookup)[03}?{${" - ".2^a,@(y20:*root-name-registry*),@(y12:name-remove!)[02}.4,'(s6:done!%" - "0a)W4]5}.4,'(s16:name not found: )W4.4,@(y4:name)W5.4W6]5}${.3^,'(l1:y" - "3:unr;),@(y11:sexp-match?)[02}?{.4,@(y20:*user-name-registry*)W5.4W6]5" - "}${.3^,'(l2:y4:uref;y1:*;),@(y11:sexp-match?)[02}?{.4,${f,.4^a,@(y20:*" - "user-name-registry*),@(y11:name-lookup)[03}W5.4W6]5}${.3^,'(l2:y5:urem" - "!;y1:*;),@(y11:sexp-match?)[02}?{${f,.3^a,@(y20:*user-name-registry*)," - "@(y11:name-lookup)[03}?{${.2^a,@(y20:*user-name-registry*),@(y12:name-" - "remove!)[02}.4,'(s6:done!%0a)W4]5}.4,'(s16:name not found: )W4.4,@(y4:" - "name)W5.4W6]5}${.3^,'(l1:y2:gs;),@(y11:sexp-match?)[02}?{.4,U2W5.4W6]5" - "}${.3^,'(l2:y2:gs;y8:;),@(y11:sexp-match?)[02}?{.0^a,U2,.0V3,." - "2H2,.7,.1,.3V4,.4A3,.0?{.0d}{f}_1W5.7W6]8}${.3^,'(l2:y4:peek;y1:*;),@(" - "y11:sexp-match?)[02}?{.0^aS0?{.4,.1^aF0?{'(s12:file exists%0a)}{'(s20:" - "file does not exist%0a)}W4]5}.0^aY0?{.4,.1^aX4F0?{'(s12:file exists%0a" - ")}{'(s20:file does not exist%0a)}W4]5}.4,'(s37:invalid file name; use " - "double quotes%0a)W4]5}${.3^,'(l1:y1:v;),@(y11:sexp-match?)[02}?{t@!(y9" - ":*verbose*)]5}${.3^,'(l2:y7:verbose;y2:on;),@(y11:sexp-match?)[02}?{t@" - "!(y9:*verbose*)]5}${.3^,'(l2:y7:verbose;y3:off;),@(y11:sexp-match?)[02" - "}?{f@!(y9:*verbose*)]5}${.3^,'(l1:y1:q;),@(y11:sexp-match?)[02}?{t@!(y" - "7:*quiet*)]5}${.3^,'(l2:y5:quiet;y2:on;),@(y11:sexp-match?)[02}?{t@!(y" - "7:*quiet*)]5}${.3^,'(l2:y5:quiet;y3:off;),@(y11:sexp-match?)[02}?{f@!(" - "y7:*quiet*)]5}${.3^,'(l2:y4:time;y1:*;),@(y11:sexp-match?)[02}?{Z3,${." - "7,@(y16:repl-environment),.5^a,@(y22:repl-evaluate-top-form)[03}Z4,.1," - "Z3-/,'(i1000)*,'(s24:; elapsed time: ~s ms.~%25),t,@(y6:format)[63}${." - "3^,'(l2:y2:sh;y8:;),@(y11:sexp-match?)[02}?{.0^aZ6]5}${.3^,'(l" - "1:y4:help;),@(y11:sexp-match?)[02}?{.4,'(s20:Available commands:%0a)W4" - ".4,'(s42: ,say hello -- displays nice greeting%0a)W4.4,'(s40: ,pee" - "k -- check if file exists%0a)W4.4,'(s50: ,q -- di" - "sable informational messages%0a)W4.4,'(s50: ,quiet on -- disable " - "informational messages%0a)W4.4,'(s49: ,quiet off -- enable informa" - "tional messages%0a)W4.4,'(s37: ,v -- turn verbosity on%0a)" - "W4.4,'(s37: ,verbose on -- turn verbosity on%0a)W4.4,'(s38: ,verbos" - "e off -- turn verbosity off%0a)W4.4,'(s58: ,ref -- show de" - "notation for (may alloc)%0a)W4.4,'(s43: ,rnr -- show " - "root name registry%0a)W4.4,'(s48: ,rref -- lookup name in roo" - "t registry%0a)W4.4,'(s50: ,rrem! -- remove name from root regi" - "stry%0a)W4.4,'(s43: ,unr -- show user name registry%0a)W4.4," - "'(s48: ,uref -- lookup name in user registry%0a)W4.4,'(s50: ," - "urem! -- remove name from user registry%0a)W4.4,'(s44: ,gs " - " -- show global store (big!)%0a)W4.4,'(s53: ,gs -- l" - "ookup global location for %0a)W4.4,'(s48: ,time -- time" - " short expression %0a)W4.4,'(s49: ,sh -- send to local shell%0a)W4.4,'(s29: ,help -- this help%0a)W4]5}." - "4,'(s29:syntax error in repl command%0a)W4.4,'(s37:type ,help to see a" - "vailable commands%0a)W4]5", + "%3,#0'(l2:y4:load;y2:sh;),.2A0?{${.4,@(y22:string-trim-whitespace)[01}" + ",l1}{${${k0,.0,${.2,.(i11),&2{%0:1,&1{%!0.0,&1{%0:0,@(y6:values),@(y13" + ":apply-to-list)[02},:0[11},:0,&1{%0:0P50,@(y15:read-port-sexps)[01},@(" + "y16:call-with-values)[02},.3,&1{%1${k0,.0,${.6,&1{%0:0,Y9]1},:0[01}_1_" + "3}[10},@(y22:with-exception-handler)[02}_1_3}[00}}.!0.0^,.2c,,#0.5,.1," + ".4,&3{%1${.2,'(l2:y3:ref;y8:;),@(y11:sexp-match?)[02}?{:2,${'(" + "y3:ref),:0^a,@(y16:repl-environment)[02}W5:2W6]1}${.2,'(l2:y3:ref;l3:y" + "1:*;y1:*;y3:...;;),@(y11:sexp-match?)[02}?{:2,${'(y3:ref),:0^a,@(y16:r" + "epl-environment)[02}W5:2W6]1}${.2,'(l1:y3:rnr;),@(y11:sexp-match?)[02}" + "?{:2,@(y20:*root-name-registry*)W5:2W6]1}${.2,'(l2:y4:rref;y1:*;),@(y1" + "1:sexp-match?)[02}?{:2,${f,:0^a,@(y20:*root-name-registry*),@(y11:name" + "-lookup)[03}W5:2W6]1}${.2,'(l2:y5:rrem!;y1:*;),@(y11:sexp-match?)[02}?" + "{${f,:0^a,@(y20:*root-name-registry*),@(y11:name-lookup)[03}?{${:0^a,@" + "(y20:*root-name-registry*),@(y12:name-remove!)[02}:2,'(s6:done!%0a)W4]" + "1}:2,'(s16:name not found: )W4:2,@(y4:name)W5:2W6]1}${.2,'(l1:y3:unr;)" + ",@(y11:sexp-match?)[02}?{:2,@(y20:*user-name-registry*)W5:2W6]1}${.2,'" + "(l2:y4:uref;y1:*;),@(y11:sexp-match?)[02}?{:2,${f,:0^a,@(y20:*user-nam" + "e-registry*),@(y11:name-lookup)[03}W5:2W6]1}${.2,'(l2:y5:urem!;y1:*;)," + "@(y11:sexp-match?)[02}?{${f,:0^a,@(y20:*user-name-registry*),@(y11:nam" + "e-lookup)[03}?{${:0^a,@(y20:*user-name-registry*),@(y12:name-remove!)[" + "02}:2,'(s6:done!%0a)W4]1}:2,'(s16:name not found: )W4:2,@(y4:name)W5:2" + "W6]1}${.2,'(l1:y2:gs;),@(y11:sexp-match?)[02}?{:2,U2W5:2W6]1}${.2,'(l2" + ":y2:gs;y8:;),@(y11:sexp-match?)[02}?{:0^a,U2,.0V3,.2H2,:2,.1,." + "3V4,.4A3,.0?{.0d}{f}_1W5:2W6]4}${.2,'(l2:y4:load;y8:;),@(y11:s" + "exp-match?)[02}?{:0^a,@(y4:load)[11}${.2,'(l2:y7:verbose;y2:on;),@(y11" + ":sexp-match?)[02}?{t@!(y9:*verbose*)]1}${.2,'(l2:y7:verbose;y3:off;),@" + "(y11:sexp-match?)[02}?{f@!(y9:*verbose*)]1}${.2,'(l1:y1:v;),@(y11:sexp" + "-match?)[02}?{t@!(y9:*verbose*)]1}${.2,'(l2:y5:quiet;y2:on;),@(y11:sex" + "p-match?)[02}?{t@!(y7:*quiet*)]1}${.2,'(l2:y5:quiet;y3:off;),@(y11:sex" + "p-match?)[02}?{f@!(y7:*quiet*)]1}${.2,'(l1:y1:q;),@(y11:sexp-match?)[0" + "2}?{t@!(y7:*quiet*)]1}${.2,'(l2:y4:time;y1:*;),@(y11:sexp-match?)[02}?" + "{Z3,${:2,@(y16:repl-environment),:0^a,@(y22:repl-evaluate-top-form)[03" + "}Z4,.1,Z3-/,'(i1000)*,'(s24:; elapsed time: ~s ms.~%25),t,@(y6:format)" + "[23}${.2,'(l2:y2:sh;y8:;),@(y11:sexp-match?)[02}?{:0^aZ6]1}${." + "2,'(l1:y4:help;),@(y11:sexp-match?)[02}?{:2,'(s21:%0aAvailable command" + "s:%0a)W4:2,'(s52: ,load -- loads (no quotes needed)%0" + "a)W4:2,'(s50: ,q -- disable informational messages%0a)W4:2" + ",'(s50: ,quiet on -- disable informational messages%0a)W4:2,'(s49" + ": ,quiet off -- enable informational messages%0a)W4:2,'(s37: ,v " + " -- turn verbosity on%0a)W4:2,'(s37: ,verbose on -- turn v" + "erbosity on%0a)W4:2,'(s38: ,verbose off -- turn verbosity off%0a)W4:" + "2,'(s58: ,ref -- show denotation for (may alloc)%0a)W" + "4:2,'(s43: ,rnr -- show root name registry%0a)W4:2,'(s48: ,r" + "ref -- lookup name in root registry%0a)W4:2,'(s50: ,rrem! -- remove name from root registry%0a)W4:2,'(s43: ,unr -" + "- show user name registry%0a)W4:2,'(s48: ,uref -- lookup name" + " in user registry%0a)W4:2,'(s50: ,urem! -- remove name from us" + "er registry%0a)W4:2,'(s44: ,gs -- show global store (big!)%" + "0a)W4:2,'(s53: ,gs -- lookup global location for %0a)" + "W4:2,'(s48: ,time -- time short expression %0a)W4:2,'(s" + "49: ,sh -- send to local shell%0a)W4:2,'(s29: ,he" + "lp -- this help%0a)W4]1}${.2,'(l1:y1:h;),@(y11:sexp-match?)[0" + "2}?{'(l1:y4:help;),:1^[11}:2,'(s29:syntax error in repl command%0a)W4:" + "2,'(s37:type ,help to see available commands%0a)W4]1}.!0.0^_1[41", "P", "repl-from-port", "%4,#0${@(y18:current-file-stack)[00}.!0${k0,.0,${.2,.9,.(i12),.(i12),." @@ -1489,7 +1486,7 @@ char *t_code[] = { "P", "repl-main", "%0PiP09?{PoP09}{f}?{Po,'(s32:SKINT Scheme Interpreter v0.0.9%0a)W4Po,'" - "(s35:Copyright (c) 2024 False Schemers%0a%0a)W4}t]0", + "(s34:Copyright (c) 2024 False Schemers%0a)W4}t]0", "P", "repl", "%0,,,#0#1#2Pi.!0Po.!1.0^P09?{'(s6:skint])}{f}.!2${n,@(y23:set-current-"