S" GETCOMPATIBLE.F"   INCLUDED
S" GETBYTECODE.F"     INCLUDED
S" GETTOKENS.F"       INCLUDED
S" GETSIMPLETOKENS.F" INCLUDED
S" GETCOMPILER.F"     INCLUDED
S" SIMPLEWORDS.F"     INCLUDED

: GET-FROM-PAD ( S: -- char )
   PAD C@ PAD CHAR+ PAD 80 CHARS MOVE ;

' GET-FROM-PAD (IS) INPUT-TOKEN

 T: .( ;T
: [HANDLE-TOKEN] HANDLE-TOKEN ; IMMEDIATE

: PUT-ONE ( S: addr token -- addr' )
  OVER C! CHAR+ ;
: PUT" ( S: 'string"' addr -- addr' )
   ['] S" EXECUTE ROT 2DUP C!  CHAR+ SWAP CHARS  2DUP + >R  MOVE  R> ;

CR .( should show ABCDE -> ) PAD LAST-TOKEN @ PUT-ONE DROP HANDLE-TOKEN ABCDE)
CR .( should show DEFGH -> )
PAD LAST-TOKEN @ PUT-ONE DROP : TARTRATE [HANDLE-TOKEN] DEFGH) ;

CR .( should show |  777 5 test| -> ) CHAR | EMIT
LAST-TOKEN @ PAD OVER PUT-ONE OVER PUT-ONE SWAP PUT-ONE DROP
 3 HANDLE-TOKENS   777) 5) test) CHAR | EMIT

CREATE TOKEN-BUFFER 264 CHARS ALLOT
( G: silly example of word that conditionally stops tokencompiling )
: .(( ( S: -- )
  INPUT-TOKEN DUP 3 = IF
    DROP INPUT-TOKEN DUP EMIT [CHAR] E = IF
      INPUT-TOKEN DUP EMIT [CHAR] N = IF
        INPUT-TOKEN DUP EMIT [CHAR] D = IF
          -1 STOP-READING !
        THEN
      ELSE
        INPUT-TOKEN EMIT
      THEN
    ELSE
      INPUT-TOKEN EMIT INPUT-TOKEN EMIT
    THEN
  ELSE
    TOKEN-BUFFER 0 ROT TOKENS>STRINGN TYPE
  THEN ;

T: .(( ;T

CR .( should show |TTTT END| -> ) CHAR | EMIT
LAST-TOKEN @ PAD OVER PUT-ONE PUT" TTTT " OVER PUT-ONE PUT" END" 2DROP
HANDLE-TOKENS-TIL-STOP CHAR | EMIT