dq READ_WORD
dq INTERPRET_WORD
dq EXIT
+
+;; INTERPRET_STRING is a variant of INTERPRET that reads from a string instead
+;; of from the user. It takes a string as a (buffer, length) pair on the stack
+;; and interprets the entire string, even if the string has more than one word.
+forth INTERPRET_STRING, 'INTERPRET-STRING'
+ dq INPUT_LENGTH, PUT
+ dq INPUT_BUFFER, PUT
+
+ ;; Check if the buffer is-non-empty
+ ;; [TODO] This probably won't work for strings with whitespace at the end.
+ dq INPUT_LENGTH, GET
+ dq ZBRANCH, 8 * 5 ; to EXIT
+
+ dq READ_WORD
+
+ dq INTERPRET_WORD
+ dq BRANCH, -8 * 7 ; to INPUT-LENGTH @
+
+ dq LIT, 0, INPUT_BUFFER, PUT
+
+ dq EXIT