FORTH DEFINITIONS HEX : TEXT HERE C/L 1+ BLANKS WORD HERE PAD C/L 1+ CMOVE ; : LINE DUP FFF0 AND 17 ?ERROR SCR @ (LINE) DROP ; : 2DROP DROP DROP ; : 2DUP OVER OVER ; : 2SWAP ROT >R ROT R> ; DECIMAL VOCABULARY EDITOR IMMEDIATE HEX : WHERE DUP B/SCR / DUP SCR ! ." SCR # " DECIMAL . SWAP C/L /MOD C/L * ROT BLOCK + CR C/L TYPE CR HERE C@ - SPACES 5E EMIT [COMPILE] EDITOR QUIT ; EDITOR DEFINITIONS : #LOCATE R# @ C/L /MOD ; : #LEAD #LOCATE LINE SWAP ; : #LAG #LEAD DUP >R + C/L R> - ; : -MOVE LINE C/L CMOVE UPDATE ; : H LINE PAD 1+ C/L DUP PAD C! CMOVE ; : E LINE C/L BLANKS UPDATE ; : S DUP 1 - 0E DO I LINE I 1+ -MOVE -1 +LOOP E ; : D DUP H 0F DUP ROT DO I 1+ LINE I -MOVE LOOP E ; : M R# +! CR SPACE #LEAD TYPE 5F EMIT #LAG TYPE #LOCATE . DROP ; : T DUP C/L * R# ! H 0 M ; : L SCR @ LIST 0 M ; : R PAD 1+ SWAP -MOVE ; : P 1 TEXT R ; : I DUP S R ; : TOP 0 R# ! ; : CLEAR SCR ! 10 0 DO FORTH I EDITOR E LOOP ; : COPY B/SCR * OFFSET @ + SWAP B/SCR * B/SCR OVER + SWAP DO DUP FORTH I BLOCK 2 - ! 1+ UPDATE LOOP DROP FLUSH ; : -TEXT SWAP -DUP IF OVER + SWAP DO DUP C@ FORTH I C@ - IF 0= LEAVE ELSE 1+ THEN LOOP ELSE DROP 0= THEN ; : MATCH >R >R 2DUP R> R> 2SWAP OVER + SWAP DO 2DUP FORTH I -TEXT IF >R 2DROP R> - I SWAP - 0 SWAP 0 0 LEAVE THEN LOOP 2DROP SWAP 0= SWAP ; : 1LINE #LAG PAD COUNT MATCH R# +! ; : FIND BEGIN 3FF R# @ < IF TOP PAD HERE C/L 1+ CMOVE 0 ERROR ENDIF 1LINE UNTIL ; : DELETE >R #LAG + FORTH R - #LAG R MINUS R# +! #LEAD + SWAP CMOVE R> BLANKS UPDATE ; : N FIND 0 M ; : F 1 TEXT N ; : B PAD C@ MINUS M ; : X 1 TEXT FIND PAD C@ DELETE 0 M ; : TILL #LEAD + 1 TEXT 1LINE 0= 0 ?ERROR #LEAD + SWAP - DELETE 0 M ; HEX : ENTER? OVER = ; : ENTER QUERY 1 TEXT ; : NULL? TIB @ C@ 0= ; : .BS 7F EMIT ; DECIMAL : NEW FORTH 16 0 DO CR I 3 .R SPACE I ENTER? IF ENTER NULL? IF .BS I SCR @ .LINE ELSE I EDITOR R FORTH 1+ ENDIF ELSE I SCR @ .LINE ENDIF LOOP DROP ; : UNDER FORTH 1+ 16 0 DO CR I 3 .R SPACE I ENTER? IF ENTER NULL? IF .BS I SCR @ .LINE ELSE I EDITOR I FORTH 1+ ENDIF ELSE I SCR @ .LINE THEN LOOP DROP ; DECIMAL : C 1 TEXT PAD COUNT #LAG ROT OVER MIN >R FORTH R R# +! R - >R DUP HERE R CMOVE HERE #LEAD + R> CMOVE R> CMOVE UPDATE 0 M ; FORTH DEFINITIONS DECIMAL LATEST 12 +ORIGIN ! HERE 28 +ORIGIN ! HERE 30 +ORIGIN ! ' EDITOR 6 + 32 +ORIGIN ! HERE FENCE ! CR ." EDITOR LOADED" CR ;S