retroforth/example/amalgamate.retro
crc 755f064f62 update Makefile to use new nga-c sources, fix amalgamate tool for changes
FossilOrigin-Name: 5837a410e388941d6cb5822732bcd3d003aa313af0d54c548c662883de01c164
2021-04-19 17:28:08 +00:00

49 lines
972 B
Forth

# Amalgamate
The standard RETRO system is built using the Nga VM[1] and a
copy of the image exported as a C source file[2]. I sometimes
prefer to have these as a single file for easier sharing. This
is a quick little tool to combine them.
Output will be written to stdout.
## References
[1] vm/nga-c/retro.c
[2] vm/nga-c/image.c
## Code
Include compilation instructions and enable i/o devices.
~~~
'/*_Build_with_`cc_-lm_-O2_retro-unix.c_-o_retro`_*/ s:put nl nl
{ 'ENABLE_FLOATS
'ENABLE_FILES
'ENABLE_UNIX
'ENABLE_RNG
'ENABLE_CLOCK
'ENABLE_SCRIPTING
} [ '#define_%s s:format s:put nl ] a:for-each nl
~~~
Then extract and generate the single file source.
~~~
{{
:include-file
#10 + s:chop 'vm/nga-c/ s:prepend here swap file:slurp here s:put ;
:source:line
dup '#include_" s:begins-with?
[ include-file ] [ s:put nl ] choose ;
---reveal---
:amalgamate
'vm/nga-c/retro.c [ source:line ] file:for-each-line ;
}}
amalgamate
~~~