X-Git-Url: https://thelambdalab.xyz/gitweb/index.cgi?a=blobdiff_plain;f=src%2Fforth.jl;h=9beb81485ead812a6b7022c8ba8bfd987a441f15;hb=0c38ac60ab45dd1f3db641b36a8a822862080e7e;hp=6afe492e4280322ff0c759209a640b3f063dc020;hpb=30a093845e2d1097242e948bb577fb71f73bc860;p=forth.jl.git diff --git a/src/forth.jl b/src/forth.jl index 6afe492..9beb814 100644 --- a/src/forth.jl +++ b/src/forth.jl @@ -1243,7 +1243,9 @@ INCLUDED_CFA = defWord("INCLUDED", 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 + SOURCE_ID_VAR_CFA, STORE_CFA, # Restore input source + LIT_CFA, 0, NUMIB_CFA, STORE_CFA, # Zero #IB + LIT_CFA, 0, TOIN_CFA, STORE_CFA, # Zero >IN EXIT_CFA]) INCLUDE_CFA = defWord("INCLUDE", [LIT_CFA, 32, WORD_CFA, @@ -1251,6 +1253,27 @@ INCLUDE_CFA = defWord("INCLUDE", [LIT_CFA, 32, WORD_CFA, SWAP_CFA, FETCH_CFA, INCLUDED_CFA, EXIT_CFA]); +oldCWD = "" +SETLIBCWD_CFA = defPrimWord("SETLIBCWD", () -> begin + global oldCWD = pwd() + if !isfile("lib.4th") # Exception for debugging. + cd(Pkg.dir("forth","src")) + end + return NEXT +end) + +RESTORECWD_CFA = defPrimWord("RESTORECWD", () -> begin + cd(oldCWD) + return NEXT +end) + +INCLUDED_LIB_CFA = defWord("INCLUDED-LIB", + [SETLIBCWD_CFA, INCLUDED_CFA, RESTORECWD_CFA, EXIT_CFA]) + +INCLUDE_LIB_CFA = defWord("INCLUDE-LIB", [LIT_CFA, 32, WORD_CFA, + DUP_CFA, INCR_CFA, + SWAP_CFA, FETCH_CFA, + INCLUDED_LIB_CFA, EXIT_CFA]); ABORT_CFA = defWord("ABORT", [CLOSE_FILES_CFA, DROP_CFA, PSP0_CFA, PSPSTORE_CFA, QUIT_CFA]) @@ -1267,12 +1290,7 @@ end) #### VM loop #### initialized = false -initFileName = nothing -if isfile("lib.4th") - initFileName = "lib.4th" -elseif isfile(Pkg.dir("forth","src", "lib.4th")) - initFileName = Pkg.dir("forth","src","lib.4th") -end +initFileName = "lib.4th" function run(;initialize=true) @@ -1288,7 +1306,7 @@ function run(;initialize=true) putString(initFileName, mem[H]) pushPS(mem[H]) pushPS(length(initFileName)) - pushRS(INCLUDED_CFA+1) + pushRS(INCLUDED_LIB_CFA+1) initialized = true else