retroforth/interface/scripting.retro
crc 6199343fa7 fix more uses of deprecated names
FossilOrigin-Name: 79d334bf87cdb99181e95b3f9a2df0eedf1e23f493b8d2540f9db2db848ca862
2020-10-01 13:28:46 +00:00

50 lines
1.6 KiB
Text

# Scripting Support
This is the scripting interface words for use with retro-unix
or other interfaces providing device type 9 support.
The initial words were provided in a `sys:` namespace. In 2020.10
this is changing to `script:`, with the old names being deprecated.
## 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
# The Code
~~~
{{
'Scripting var
:identify
@Scripting n:zero? [
#9 io:scan-for dup n:negative?
[ drop 'IO_DEVICE_TYPE_0009_NOT_FOUND s:put nl ]
[ !Scripting ] choose ] if ;
---reveal---
:script:arguments (-n) identify #0 @Scripting io:invoke ;
:script:get-argument (n-s) s:empty swap identify #1 @Scripting io:invoke ;
:include (s-) identify #2 @Scripting io:invoke ;
:script:name (-s) s:empty identify #3 @Scripting io:invoke ;
:script:current-file (-s) s:empty identify #4 @Scripting io:invoke ;
:script:current-line (-n) identify #5 @Scripting io:invoke ;
:script:ignore-to-eol (-) identify #6 @Scripting io:invoke ;
:script:abort-include (-) identify #7 @Scripting io:invoke ;
}}
~~~