From 5bf3baff05bd43afb68afa5f7453907918bf7c6d Mon Sep 17 00:00:00 2001 From: Virgil Dupras Date: Fri, 1 May 2020 13:17:40 -0400 Subject: [PATCH] editor: add edit buffer Also, add word "C!+" and fix PSP leak in FILL. --- blk/050 | 1 + blk/104 | 11 +++++++---- blk/105 | 15 +++------------ blk/155 | 4 +--- blk/436 | 2 ++ emul/forth.bin | Bin 5760 -> 5777 bytes 6 files changed, 14 insertions(+), 19 deletions(-) diff --git a/blk/050 b/blk/050 index 80df44d..1c3616a 100644 --- a/blk/050 +++ b/blk/050 @@ -7,6 +7,7 @@ Memory C@ a -- c Set c to byte at address a C@+ a -- a+1 c Fetch c from a and inc a. C! c a -- Store byte c in address a +C!+ c a -- a+1 Store byte c in a and inc a. CURRENT -- a Set a to wordref of last added entry. CURRENT* -- a A pointer to active CURRENT*. Useful when we have multiple active dicts. diff --git a/blk/104 b/blk/104 index 10984e0..0dc69e8 100644 --- a/blk/104 +++ b/blk/104 @@ -1,5 +1,6 @@ ( Cursor position in buffer. EDPOS/64 is line number ) VARIABLE EDPOS +CREATE EDBUF 64 ALLOT : _cpos BLK( + ; : _lpos 64 * _cpos ; : _pln ( lineno -- ) @@ -7,7 +8,9 @@ VARIABLE EDPOS I EDPOS @ _cpos = IF '^' EMIT THEN I C@ DUP 0x20 < IF DROP 0x20 THEN EMIT - LOOP ( lno ) - 1+ . ; -( user-facing lines are 1-based ) -: T 1- DUP 64 * EDPOS ! _pln ; + LOOP ( lno ) 1+ . ; +: _zbuf EDBUF 64 0 FILL ; +: _type ( -- ) + C< DUP 0xd = IF DROP EXIT THEN _zbuf EDBUF BEGIN ( c a ) + C!+ C< SWAP OVER 0x0d = UNTIL ( c a ) + 2DROP ; diff --git a/blk/105 b/blk/105 index aab4e3e..be76b66 100644 --- a/blk/105 +++ b/blk/105 @@ -1,16 +1,7 @@ -: P - EDPOS @ _cpos C< - 64 0 DO ( bpos c ) - DUP 0xd = IF DROP 0 THEN - 2DUP SWAP I + C! - DUP IF DROP C< THEN - LOOP - 2DROP - BLK!! -; - +( user-facing lines are 1-based ) +: T 1- DUP 64 * EDPOS ! _pln ; +: P _type EDBUF EDPOS @ _cpos 64 MOVE BLK!! ; : _mvln+ ( ln -- move ln 1 line further ) DUP 14 > IF DROP EXIT THEN _lpos DUP 64 + 64 MOVE ; - diff --git a/blk/155 b/blk/155 index 9d380a4..c8f89c8 100644 --- a/blk/155 +++ b/blk/155 @@ -1,6 +1,4 @@ : FILL ( a n b -- ) SWAP 2 PICK + ( a b a+n ) ROT ( b a+n a ) DO ( b ) DUP I C! - LOOP -; - + LOOP DROP ; diff --git a/blk/436 b/blk/436 index ae2d4ea..1bbd442 100644 --- a/blk/436 +++ b/blk/436 @@ -10,3 +10,5 @@ ( a -- a+1 c ) : C@+ DUP C@ SWAP 1+ SWAP ; +( c a -- a+1 ) +: C!+ SWAP OVER C! 1+ ; diff --git a/emul/forth.bin b/emul/forth.bin index 3316bad2839be6affc2e523462dd0b7a1a77bea1..3f040bcd04865ae3b4a976d41df75a4c21800ecc 100644 GIT binary patch delta 987 zcmXX_T}TvB6h3!mcGYd?&dkoNKW)~io4KVcDE;EDHZ7877Oq)AA?BipixXyup;-pK zX>IpG8lNPHpqGLLtv3lPdkR8)2zuxxg#LrVAhvUN_u-y<&v(D`-SabZqb^lf^x{6e zcn$!mr$wK<#<7ZhDu{H6tPxYZELjkZ$n2MQh{V`Mxx6_hTQC_3fUvL6)hAa+3bLmu zc{0jR6CBH*5NqOCl4JSP6niFjmi>_1rHAeytjlw53yxZ+y1FX^aGPq(q`S#FYo!Op zDQdGDG*GuLJG2tU?a_oeVvm^v_SKOD2KKltsIiAbCP|q3F*=zce>|}S88M2Dj z&-SP#+9x^)5?C;%V4SCT`sdEx{YlcP!k|71$v|U4wL|f_H^+_?)qzIShm{AbhS21Z)YA_rj`g)n`F3MIu)@g0T)+^*QXDugt|S9VY8lO08^SRWH$A zhez^3)~pB0XR!gXGbc~q#QE5Cjr2&#Yz8G*&QCV3H^v_57FZo8D)xG@Fg}7j5S1~6 z7n1j5-RJoXOiVwI)Z`e2@PK{QtEM;gjLpSThQ8ZCVspW zpV~y24{X1YrMGBEKW#XKhwxG6y2SmAu$-01$yQWja8F(>+^`M1#GB$_ca4HZhxTHp zI@;phB`B9LOi-a+S|azvdtyKSMGJ<56|_LVxFl@p^8)`?-xv*KgZ(qAl!URRn-GR4 zQbq{EcUJFjCJAQyYu&xRS?cw(MSm07Vjuhwv^$FH^dch&YyM@-FbHz-E8M@Z3&o{g Nl%;nIaAXl6{{cEX@ag~n delta 953 zcmXX^O=uHA6n?Y2N!pN|-Rx#tYf#rVhDJ@r2DD1k)}@Hn8iT1(FZCy-r8Fi|6{$oU zdl1t@X){7GC!t^uUZTVwym+t_^rnJT6x54W5WI>C>zgEpdHdcs-}~nM>_RvnZhUzc zUOoqa{KLlY9=b6Rk~I(B@h)epBQu-$YUSz#yXUNKFF*#h;4SL6b1g{#@g z5i^s$Y>sBHWJWMC>9C+ZI}tKLqMVSOKrqKX&{ZO{d&&%{pfy;R+U$K#$3OxLQcCUn zjh$6bPS2|r9FDcSL8K-KPzysI4D;%o#KZRS%xF5KfRheLWwk_>R9moxDt`V_$UuBa zRm8G-&Qa6l(X_-_1sbQwn;c1JQlTKYs>Bynq8m(bLju?yZMag_S74j