- [LIT_CFA, 0, STATE_CFA, STORE_CFA,
- LIT_CFA, 0, NUMTIB_CFA, STORE_CFA,
- RSP0_CFA, RSPSTORE_CFA,
- QUERY_CFA,
- INTERPRET_CFA, PROMPT_CFA,
- BRANCH_CFA,-4])
+ [LIT_CFA, 0, STATE_CFA, STORE_CFA, # Set mode to interpret
+ LIT_CFA, 0, SOURCE_ID_VAR_CFA, STORE_CFA, # Set terminal as input stream
+ LIT_CFA, 0, NUMTIB_CFA, STORE_CFA, # Clear the input buffer
+ RSP0_CFA, RSPSTORE_CFA, # Clear the return stack
+ QUERY_CFA, # Read line of input
+ INTERPRET_CFA, PROMPT_CFA, # Interpret line
+ BRANCH_CFA,-4]) # Loop
+
+INCLUDED_CFA = defWord("INCLUDED",
+ [LIT_CFA, 0, STATE_CFA, STORE_CFA, # Set mode to interpret
+ FAM_RO_CFA, OPEN_FILE_CFA, DROP_CFA, # Open the file
+ SOURCE_ID_VAR_CFA, FETCH_CFA, SWAP_CFA, # Store current source on stack
+ SOURCE_ID_VAR_CFA, STORE_CFA, # Mark this as the current source
+ SOURCE_ID_VAR_CFA, FETCH_CFA, QUERY_FILE_CFA, # Read line from file
+ EOF_FLAG_CFA, FETCH_CFA,
+ NUMFIB_CFA, FETCH_CFA, ZE_CFA, AND_CFA, # Test for EOF and empty line
+ INVERT_CFA, ZBRANCH_CFA, 4, # Break out if EOF
+ INTERPRET_CFA, # Interpret line
+ BRANCH_CFA, -14, # Loop
+ SOURCE_ID_VAR_CFA, FETCH_CFA,
+ CLOSE_FILE_CFA, DROP_CFA, # Close file
+ SOURCE_ID_VAR_CFA, STORE_CFA, # Restore input source
+ EXIT_CFA])
+
+INCLUDE_CFA = defWord("INCLUDE", [LIT_CFA, 32, WORD_CFA,
+ DUP_CFA, INCR_CFA,
+ SWAP_CFA, FETCH_CFA,
+ INCLUDED_CFA, EXIT_CFA]);
+