fb82418d88
specifically, script:current-line was not working. this patch isn't fully tested, but does fix issues in my test case. it makes `script:current-line` immediate (so references inside a definition will actually make sense) and fixes an issue that was causing indented lines to be counted twice. since this now skips indention, it should cut down on the number of evaluations on empty tokens, which will save a little time when running programs. FossilOrigin-Name: 0393f609b505ec2a364831078f36ec44b633ea579e7bc0b74a9665c07f08d7ce
51 lines
1.5 KiB
Forth
51 lines
1.5 KiB
Forth
# Scripting Support
|
|
|
|
This is the scripting interface words for use with retro-unix
|
|
or other interfaces providing device type 9 support.
|
|
|
|
## Rev. 0
|
|
|
|
The initial version of this I/O device provides support for some
|
|
basic interactions.
|
|
|
|
- obtaining the name of the script
|
|
- obtaining the number of arguments passed
|
|
- obtaining the arguments passed
|
|
- "including" a file (which has RETRO process the file as inuput)
|
|
|
|
## Rev. 1
|
|
|
|
In 2020.10, the device was extended to add support for new additional
|
|
introspection and control of the `include` process.
|
|
|
|
- obtaining the current file name
|
|
- obtaining the current line number
|
|
- direct RETRO to ignore the rest of the current line
|
|
- direct RETRO to ignore any remaining lines in the file
|
|
|
|
## Rev. 2
|
|
|
|
Adds support for `abort`.
|
|
|
|
# The Code
|
|
|
|
~~~
|
|
{{
|
|
:script:operation
|
|
#9 io:scan-for
|
|
dup n:negative? [ drop 'Error:_device_(0009)_not_found s:put nl ] if;
|
|
io:invoke ;
|
|
---reveal---
|
|
:script:arguments (-n) #0 script:operation ;
|
|
:script:get-argument (n-s) s:empty swap #1 script:operation ;
|
|
:include (s-) #2 script:operation ;
|
|
:script:name (-s) s:empty #3 script:operation ;
|
|
|
|
:script:current-file (-s) s:empty #4 script:operation ;
|
|
:script:current-line (-n) #5 script:operation class:data ; immediate
|
|
:script:ignore-to-eol (-) #6 script:operation ;
|
|
:script:abort-include (-) #7 script:operation ;
|
|
|
|
:abort (-) &Compiler v:off #8 script:operation ;
|
|
}}
|
|
~~~
|