;; returns 1 if stream ends and 0 if an unknown word is found
dq p_gtR ; Keep the stream on the return stack.
p_evaluate_stream_PROMPT:
+ dq p_verboseQ
+ dq p_get
+ BRANCH 0,p_evaluate_stream_LOOP
dq p_depth
dq p_dot
dq p_literal_string
p_evaluate_stream_NOTWORD:
dq p_drop
dq p_number
+ dq p_dup
BRANCH 0,p_evaluate_stream_BAD ; branch if 0
+ dq p_drop
dq p_state
dq p_get
BRANCH 0,p_evaluate_stream_AFTER ; branch if 0
mov rax,qword [rax] ; tfa of most recent word
mov qword [rax+16],1 ; set the flags field to 1
next
+
+ WORD p_open_file_quote,'OPEN-FILE"'
+ ;; ( "name" -- fd )
+ dq p_double_quote
+ dq p_create
+ dq p_tfa2namez
+ dq p_literal,0
+ dq p_literal,0
+ dq sys_open
+ dq p_exit
+
+ WORD p_load_file_quote,'LOAD-FILE"'
+ ;; ( "name" -- )
+ ;; Create a word for the nominated file for a stream to,
+ ;; and store that stream pointer, then invoke evaluate-stream
+ dq p_open_file_quote ; fd
+ dq p_literal, 15000 ; buffer size
+ dq p_stream
+ dq p_dup
+ dq p_comma
+ dq p_evaluate_stream
+ dq p_exit