: SRCH DUP BEGIN DUP C@ SWAP 1+ SWAP 0= END SWAP - 1- ; : STRING 1+ DUP SRCH ; VARIABLE IB 254 ALLOT : (") R@ COUNT DUP 1+ R> + >R ; : " 34 STATE @ IF COMPILE (") WORD HERE C@ 1+ ALLOT ELSE WORD HERE COUNT IB SWAP ROT OVER IB SWAP 1+ CMOVE 2DUP + 0 SWAP C! THEN ; IMMEDIATE : VAL OVER + BL SWAP C! 1- NUMBER ; : STR$ SWAP OVER DABS <# #S SIGN #> ; : MLEN DROP 1- C@ ; : S! DROP DUP 1- C@ ROT MIN 1 MAX 2DUP + 0 SWAP C! CMOVE ; : LEN SWAP DROP ; : MID$ SWAP >R ROT MIN 1 MAX SWAP OVER MAX OVER - 1+ SWAP R> + 1- SWAP OVER SRCH MIN ; : LEFT$ >R >R 1 SWAP R> R> MID$ ; : RIGHT$ >R >R 256 R> R> MID$ ; : S+ ROT >R ROT >R SWAP OVER IB SWAP CMOVE SWAP OVER + 255 MIN DUP >R OVER - SWAP IB + SWAP CMOVE R> 0 OVER IB + C! IB SWAP ; : SUB ROT MIN 1 MAX CMOVE ; : S= ROT OVER = IF 1 SWAP 0 DO DROP OVER C@ OVER C@ = IF 1+ SWAP 1+ SWAP 1 ELSE 0 LEAVE THEN LOOP ELSE DROP 0 THEN SWAP DROP SWAP DROP ;