From 773c5abfcb11a26434f67bb70ce17dc79a137e8d Mon Sep 17 00:00:00 2001 From: d_m Date: Tue, 27 Feb 2024 14:48:50 -0500 Subject: [PATCH] term updated for uxn11 and pipes --- term.tal | 148 +++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 111 insertions(+), 37 deletions(-) diff --git a/term.tal b/term.tal index d0289cf..9cd9284 100644 --- a/term.tal +++ b/term.tal @@ -76,13 +76,32 @@ ( ESC [ ? 1060 l -> unset legacy keyboard emulation ) ( ESC [ ? 1061 h -> set VT220 keyboard emulation ) -|00 @System [ &vect $2 &expansion $2 &title $2 &metadata $2 &r $2 &g $2 &b $2 ] -|10 @Console [ &vect $2 &r $1 &exec $2 &mode $1 &dead $1 &exit $1 &w $1 ] -|20 @Screen [ &vect $2 &w $2 &h $2 &auto $1 &pad $1 &x $2 &y $2 &addr $2 &px $1 &sprite $1 ] -|80 @Controller [ &vect $2 &button $1 &key $1 &fn $1 ] -|90 @Mouse [ &vect $2 &x $2 &y $2 &state $1 &pad $3 &scrollx $2 &scrolly $2 ] -|a0 @File1 [ &vect $2 &ok $2 &stat $2 &del $1 &append $1 &name $2 &len $2 &r $2 &w $2 ] -|b0 @File2 [ &vect $2 &ok $2 &stat $2 &del $1 &append $1 &name $2 &len $2 &r $2 &w $2 ] +|00 @System [ + &vect $2 &expansion $2 &title $2 &metadata $2 + &r $2 &g $2 &b $2 ] + +|10 @Console [ + &vect $2 &stdin $1 &pad1 $4 &type $1 + &stdout $1 &stderr $1 &proc-put $1 &pad2 $1 ¶m $2 &opts $1 &host-put $1 ] + +|20 @Screen [ + &vect $2 &w $2 &h $2 &auto $1 &pad $1 + &x $2 &y $2 &addr $2 &px $1 &sprite $1 ] + +|80 @Controller [ + &vect $2 &button $1 &key $1 &fn $1 ] + +|90 @Mouse [ + &vect $2 &x $2 &y $2 &state $1 &pad1 $1 + &pad2 $2 &scrollx $2 &scrolly $2 &pad3 $2 ] + +|a0 @File1 [ + &vect $2 &ok $2 &stat $2 &del $1 &append $1 + &name $2 &len $2 &r $2 &w $2 ] + +|b0 @File2 [ + &vect $2 &ok $2 &stat $2 &del $1 &append $1 + &name $2 &len $2 &r $2 &w $2 ] |0000 @tint $1 ( draw mode. 01=regular, 04=inverted ) @@ -124,13 +143,17 @@ @visual-bell $1 ( flash visual bell? otherwise do nothing ) @border-pad $2 ( use border? should be 0000 or 0010 ) + ( subprocess ) + @put-port $1 + @get-type $1 + |0100 ( metadata ) ;meta .System/metadata DEO2 ;meta/name .System/title DEO2 ( user configuration defaults ) - #01 .debug STZ + #00 .debug STZ #01 .show-banner STZ ( #0010 .border-pad STZ2 ) #0000 .border-pad STZ2 @@ -156,23 +179,54 @@ ;on-mouse .Mouse/vect DEO2 ( set up mouse callback ) ;on-read .Console/vect DEO2 ( set up stdin callback ) - setup-subprocess ( set up experimental subprocess support ) + setup-shell ( set up experimental subprocess support ) reset-terminal ( initialize terminal state and settings ) setup-debugging ( set up debugging if requested ) draw-banner ( draw banner if requested ) BRK +@env "TERM=ansi 00 + +@query + ( expansion cmd ) 03 + ( console device ) 10 + ( uuid ) 0123 1250 d878 4462 bc41 d092 7645 a2fa + ( version ) 00 + ( flags ) &flags 0000 + +@has-subprocess ( -> bool^ ) + ;query .System/expansion DEO2 + ;query/flags LDA2 #00ff EQU2 JMP2r + ( these only work with a patched uxnemu ) ( on other emulators they should be no-ops ) -@setup-subprocess ( -> ) - ;shell .Console/exec DEO2 ( set up bash subprocess ) - #80 .Console/mode DEO ( start bash subprocess ) +@setup-shell ( -> ) + has-subprocess ?{ + ( without subprocess, just use stdin/stdout ) + .Console/stdout .put-port STZ + #01 .get-type STZ + JMP2r + } + + ( with subprocess, use proc put/get ) + .Console/proc-put .put-port STZ + #21 .get-type STZ + + ( setenv 'TERM=ansi' ) + ;env .Console/param DEO2 + #11 .Console/host-put DEO + + ( exec 'bash -i' ) + #81 .Console/opts DEO + ;shell .Console/param DEO2 + #01 .Console/host-put DEO + + ( TODO: run stty to communicate terminal size? ) JMP2r @setup-debugging ( -> ) .debug LDZ ?&continue JMP2r &continue -( #99 #010e DEO ) ( put 99 in wst so #010e DEO reliably logs ) ;debug-log .File1/name DEO2 #01 .File1/append DEO JMP2r @@ -224,7 +278,7 @@ .rows LDZ2 #000c MUL2 ADD2 .Screen/h DEO2 JMP2r -@shell "bash 00 "-i 00 00 +@shell "bash 20 "-l 20 "-i 00 @load-theme ( -> ) ;&path .File1/name DEO2 @@ -381,18 +435,18 @@ ( send ESC [ $c ) @arrow ( c^ -> ) - .Console/w STH + ( .Console/proc-put ) .put-port LDZ STH #1b STHkr DEO LIT "[ STHkr DEO STHr DEO JMP2r @paste-from-buf ( size* -> ) ;paste-buf SWP2 OVR2 ADD2 SWP2 ( limit* start* ) &loop ( limit* pos* ) - LDAk .Console/w DEO INC2 ( limit* pos+1* ) + LDAk ( .Console/proc-put ) .put-port LDZ DEO INC2 ( limit* pos+1* ) GTH2k ?&loop POP2 POP2 JMP2r @bracket-paste ( c^ -> ) - .Console/w STH + ( .Console/proc-put ) .put-port LDZ STH #1b STHkr DEO LIT "[ STHkr DEO LIT "2 STHkr DEO @@ -607,16 +661,16 @@ .Controller/key DEI DUP #08 NEQ ?&done POP #7f ( send DEL instead of BS ) - &done .Console/w DEO BRK + &done ( .Console/proc-put ) .put-port LDZ DEO BRK @ctrl ( -> is-down? ) .Controller/button DEI #01 AND JMP2r @alt ( -> is-down? ) .Controller/button DEI #02 AND JMP2r ( alt-XYZ emits ESC and then emits XYZ ) @on-alt-key ( -> BRK ) - #1b .Console/w DEO + #1b ( .Console/proc-put ) .put-port LDZ DEO ctrl ?on-ctrl-key - .Controller/key DEI .Console/w DEO BRK + .Controller/key DEI ( .Console/proc-put ) .put-port LDZ DEO BRK ( control seqs: ) ( ctrl-sp -> 00 ) @@ -651,10 +705,15 @@ &rs #1e !&done &us #1f !&done &c1 LIT "@ SUB - &done .Console/w DEO BRK + &done ( .Console/proc-put ) .put-port LDZ DEO BRK + +@read-or-brk ( -> BRK? ) + .Console/type DEI .get-type LDZ EQU ?{ BRK } JMP2r @on-read-priv ( -> BRK ) - .Console/r DEI + read-or-brk + ( .Console/type DEI #21 EQU ?{ BRK } ) + .Console/stdin DEI DUP LIT "; EQU ?next-arg DUP LIT "0 LTH ?end-arg-priv DUP LIT "9 GTH ?end-arg-priv @@ -664,7 +723,9 @@ POP ;on-read-priv .Console/vect DEO2 BRK @on-read-csi ( -> BRK ) - .Console/r DEI + read-or-brk + ( .Console/type DEI #21 EQU ?{ BRK } ) + .Console/stdin DEI DUP LIT "? EQU ?start-priv DUP LIT "; EQU ?next-arg DUP LIT "0 LTH ?end-arg @@ -672,7 +733,9 @@ !add-to-arg @on-read-osc ( -> BRK ) - .Console/r DEI + read-or-brk + ( .Console/type DEI #21 EQU ?{ BRK } ) + .Console/stdin DEI DUP #07 ( bell ) EQU ?&end-osc #9c ( esc-\ ) EQU ?&end-osc BRK &end-osc ;on-read .Console/vect DEO2 BRK @@ -873,12 +936,12 @@ @dsr ( n* -> ) #0006 NEQ2 ?&done - #1b .Console/w DEO - LIT "[ .Console/w DEO + #1b ( .Console/proc-put ) .put-port LDZ DEO + LIT "[ ( .Console/proc-put ) .put-port LDZ DEO .cur-y LDZ2 INC2 emit-dec2 - LIT "; .Console/w DEO + LIT "; ( .Console/proc-put ) .put-port LDZ DEO .cur-x LDZ2 INC2 emit-dec2 - LIT "R .Console/w DEO + LIT "R ( .Console/proc-put ) .put-port LDZ DEO &done BRK @cnl ( n* -> ) clear-cursor #0000 .cur-x STZ2 !down-n @@ -948,7 +1011,9 @@ JMP2r @on-read-esc ( -> BRK ) - .Console/r DEI + read-or-brk + ( .Console/type DEI #21 EQU ?{ BRK } ) + .Console/stdin DEI DUP debug-esc DUP LIT "D EQU ?exec-ind DUP LIT "E EQU ?exec-nel @@ -995,7 +1060,9 @@ POP reset-args ;on-read-osc .Console/vect DEO2 BRK @on-read ( -> BRK ) - .Console/r DEI read BRK + read-or-brk + ( .Console/type DEI #21 EQU ?{ BRK } ) + .Console/stdin DEI read BRK @read ( c^ -> ) DUP debug-read @@ -1223,7 +1290,7 @@ JMP2r ( ) @highlight-cell ( cell* -> ) - NIP LITr 47 ( c^ [tint^] ) + NIP LITr 07 ( c^ [tint^] ) #00 SWP #40 SFT2 ;cp437 ADD2 ( addr* [tint^] ) .Screen/addr DEO2k ( addr* s^ [tint^] ) STHkr .Screen/sprite DEO ( addr* s^ [tint^] ) @@ -1256,14 +1323,21 @@ ( emit a signed short as a decimal ) @emit-sdec2 ( n* -> ) - DUP2k #1f SFT2 EQUk ?&s LIT2 "- 18 DEO + DUP2k #1f SFT2 EQUk ?&s LIT "- ( .Console/proc-put ) .put-port LDZ DEO &s MUL2 SUB2 ( fall-through to emit-dec2 ) ( emit an unsigned short as a decimal ) @emit-dec2 ( n* -> ) - LITr ff00 &read #000a DIV2k STH2k MUL2 SUB2 STH2r INCr ORAk ?&read - POP2 &write NIP #30 ADD #18 DEO OVRr ADDr STHkr ?&write - POP2r JMP2r + LIT2r ff00 ( n* [ff^ 0^] ) + &read ( ... x* ) + #000a DIV2k STH2k ( x* 10* x/10* [ff^ i^ x/10*] ) + MUL2 SUB2 STH2r ( x%10* x/10* [ff^ i^] ) + INCr ORAk ?&read ( x%10* x/10* [ff^ i+1^] ) + POP2 ( x0* ... xn* [ff^ i+1^] ) + &write + NIP #30 ADD ( .Console/proc-put ) .put-port LDZ DEO ( x0* ... xn-1* [ff^ j^] ) + OVRr ADDr STHkr ?&write ( x* ... xn-1* [ff^ j-1^] ) + POP2r JMP2r ( ) @debug-log "debug_term.log 00 @scratch $40 &pos $2 @@ -1300,9 +1374,9 @@ 0d 0a 20 20 c9 cd cd cd cd cd cd cd cd cd cd cd cd cd cd cd bb 0d 0a 20 20 ba 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ba 0d 0a - 20 20 ba 20 20 "d "e "t "e "r "m 20 20 "v "1 "0 20 20 ba 0d 0a + 20 20 ba 20 20 "d "e "t "e "r "m 20 20 "v "1 "2 20 20 ba 0d 0a 20 20 ba 20 20 20 20 "b "y 20 "d "_ "m 20 20 20 20 20 ba 0d 0a - 20 20 ba 20 20 "1 "8 20 "m "a "r 20 "2 "0 "2 "3 20 20 ba 0d 0a + 20 20 ba 20 20 "1 "5 20 "d "e "c 20 "2 "0 "2 "3 20 20 ba 0d 0a 20 20 ba 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ba 0d 0a 20 20 c8 cd cd cb cd cd cd cd cd cd cd cd cd cb cd cd bc 0d 0a 20 20 c9 cb cb ce cb cb cb cb cb cb cb cb cb ce cb cb bb 0d 0a