X-Git-Url: https://thelambdalab.xyz/gitweb/index.cgi?p=forth.jl.git;a=blobdiff_plain;f=src%2Fforth.jl;fp=src%2Fforth.jl;h=c54031374fd7f31a9fa67624398909175d454f36;hp=97dcc57dd4328cded9b96d176ced9b86df5e4c55;hb=c52194127d604bd365f7222936b46f34f62a4814;hpb=213140aac1ad3c08a74dd5eea06464c474d54cd2 diff --git a/src/forth.jl b/src/forth.jl index 97dcc57..c540313 100644 --- a/src/forth.jl +++ b/src/forth.jl @@ -683,7 +683,7 @@ READ_LINE_CFA = defPrimWord("READ-LINE", () -> begin eofFlag = endswith(line, '\n') ? 0 : -1 line = chomp(line) - println("Reading: $line"); + #println("Reading: $line"); putString(line, addr, maxSize) @@ -999,15 +999,22 @@ QUERY_CFA = defWord("QUERY", LIT_CFA, 0, TOIN_CFA, STORE_CFA, EXIT_CFA]) -# ( fid -- flag ) -# flag set to true if EOF is reached +EOF_FLAG, EOF_FLAG_CFA = defNewVar("EOF-FLAG", 0) + +# ( fid -- ) +# EOF-FLAG set to true if EOF is reached QUERY_FILE_CFA = defWord("QUERY-FILE", [FIB_CFA, LIT_CFA, 160, ROT_CFA, READ_LINE_CFA, - DROP_CFA, SWAP_CFA, + DROP_CFA, EOF_FLAG_CFA, STORE_CFA, NUMFIB_CFA, STORE_CFA, LIT_CFA, 0, TOIN_CFA, STORE_CFA, EXIT_CFA]) +QUERY_INPUT_CFA = defWord("QUERY-INPUT", + [SOURCE_ID_CFA, FETCH_CFA, QDUP_CFA, ZBRANCH_CFA, 3, + QUERY_FILE_CFA, EXIT_CFA, + QUERY_CFA, EXIT_CFA]) + WORD_CFA = defPrimWord("WORD", () -> begin delim = popPS() @@ -1041,7 +1048,7 @@ WORD_CFA = defPrimWord("WORD", () -> begin mem[countAddr] = count pushPS(countAddr) - println("Processing word: '$(getString(countAddr+1,mem[countAddr]))' (state $(mem[STATE]))") + #println("Processing word: '$(getString(countAddr+1,mem[countAddr]))' (state $(mem[STATE]))") return NEXT end) @@ -1241,10 +1248,11 @@ INCLUDED_CFA = defWord("INCLUDED", SOURCE_ID_CFA, FETCH_CFA, SWAP_CFA, # Store current source on stack SOURCE_ID_CFA, STORE_CFA, # Mark this as the current source SOURCE_ID_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, -12, # Loop + BRANCH_CFA, -14, # Loop SOURCE_ID_CFA, FETCH_CFA, CLOSE_FILE_CFA, DROP_CFA, # Close file SOURCE_ID_CFA, STORE_CFA, # Restore input source