Если просто, то так. Сперва строчки из исходников (считай, что они сами по себе - документация

)
src\win\spf_win_io.f:
: OPEN-FILE ( c-addr u fam — fileid ior ) \ 94 FILE
\ Открыть файл с именем, заданным строкой c-addr u, с методом доступа fam.
\ Смысл значения fam определен реализацией.
\ Если файл успешно открыт, ior ноль, fileid его идентификатор, и файл
\ позиционирован на начало.
\ Иначе ior - определенный реализацией код результата ввода/вывода,
\ и fileid неопределен.
: READ-FILE ( c-addr u1 fileid — u2 ior ) \ 94 FILE
\ Прочесть u1 символов в c-addr из текущей позиции файла,
\ идентифицируемого fileid.
\ Если u1 символов прочитано без исключений, ior ноль и u2 равен u1.
\ Если конец файла достигнут до прочтения u1 символов, ior ноль
\ и u2 - количество реально прочитанных символов.
\ Если операция производится когда значение, возвращаемое
\ FILE-POSITION равно значению, возвращаемому FILE-SIZE для файла
\ идентифицируемого fileid, ior и u2 нули.
\ Если возникла исключительная ситуация, то ior - определенный реализацией
\ код результата ввода/вывода, и u2 - количество нормально переданных в
\ c-addr символов.
\ Неопределенная ситуация возникает, если операция выполняется, когда
\ значение, возвращаемое FILE-POSITION больше чем значение, возвращаемое
\ FILE-SIZE для файла, идентифицируемого fileid, или требуемая операция
\ пытается прочесть незаписанную часть файла.
\ После завершения операции FILE-POSITION возвратит следующую позицию
\ в файле после последнего прочитанного символа.
: READ-LINE ( c-addr u1 fileid — u2 flag ior ) \ 94 FILE
\ Прочесть следующую строку из файла, заданного fileid, в память
\ по адресу c-addr. Читается не больше u1 символов. До двух
\ определенных реализацией символов "конец строки" могут быть
\ прочитаны в память за концом строки, но не включены в счетчик u2.
\ Буфер строки c-addr должен иметь размер как минимум u1+2 символа.
\ Если операция успешна, flag "истина" и ior ноль. Если конец строки
\ получен до того как прочитаны u1 символов, то u2 - число реально
\ прочитанных символов (0<=u2<=u1), не считая символов "конец строки".
\ Когда u1=u2 конец строки уже получен.
\ Если операция производится, когда значение, возвращаемое
\ FILE-POSITION равно значению, возвращаемому FILE-SIZE для файла,
\ идентифицируемого fileid, flag "ложь", ior ноль, и u2 ноль.
\ Если ior не ноль, то произошла исключительная ситуация и ior -
\ определенный реализацией код результата ввода-вывода.
\ Неопределенная ситуация возникает, если операция выполняется, когда
\ значение, возвращаемое FILE-POSITION больше чем значение, возвращаемое
\ FILE-SIZE для файла, идентифицируемого fileid, или требуемая операция
\ пытается прочесть незаписанную часть файла.
\ После завершения операции FILE-POSITION возвратит следующую позицию
\ в файле после последнего прочитанного символа.
и т.д. В общем, детально всё расписано

Примеры:
code forth
: TEST ( -- )
S" test.txt" \ имя файла. В переменную не заношу, будем работать через стек
2DUP R/W CREATE-FILE THROW
\ создали файл, в стеке - хендл. Для простоты все ненудевые коды возврата выбарсываем исключением
DUP S" 123456" ROT WRITE-FILE THROW
CLOSE-FILE THROW
\ Теперь тот же файл прочитаем и распечатаем. Напомню, что в стеке до сих пор - имя файла
R/O OPEN-FILE THROW
\ читаем по адресу HERE не более 1кБ
DUP HERE 1024 ROT \ преобразовали из ( fid ) в ( fid addr-here 1024 fid )
READ-FILE THROW \ получили число реально считанныйх байт
HERE SWAP TYPE \ распечатаем их с адреса HERE
CLOSE-FILE THROW \ всё, закончили
;
TEST BYE
Если же надо сделать include внешнего файла, то по стандарту, это делается так:
S" test.f" INCLUDED
Или же по FILE-ID:
S" test.f" R/O OPEN-FILE THROW INCLUDE-FILE
В SP-Forth есть упрощение. Если введённое слово не опознаётся как словарное слово, как число и т.п., то в пследнюю очередь тренслятор пытается его рассмотреть как имя включаемого файла. Т.е., если имя файла не содержит пробелов, то достаточно просто набрать его в своей программе - файл будет подключён. Кстати, именно так и выполняется запуск программ SP-Forth через командную строку. SP-Forth принимает во входных параметрах не имя программы, а саму программу - см.
code text
spf4.exe 2 2 * . BYE
-> 4
Но если указать в параметрах имя файла, не похожее на число или команду - то этот файл будет выполнен:
spf4.exe myfile.f
на самом деле соответствует
spf4.exe S" myfile.f" INCLUDED
(с поправкой на то, конечно, что кавычки в DOS-строке так просто не передать