retroforth/example/shared.forth

28 lines
873 B
Text
Raw Normal View History

#!/usr/bin/env retro
This is a little server for the pastebin. Use it with inetd or similar:
gopher stream tcp nowait/6/30/2 nope /home/crc/retro/example/shared.forth
http stream tcp nowait/6/30/2 nope /home/crc/retro/example/shared.forth
It understands HTTP and Gopher, so can work for either. Use it with the
`share.forth` tool.
~~~
s:get 'REQUEST s:const
:http? REQUEST #0 #3 s:substr 'GET s:eq? ;
:extract REQUEST #32 s:tokenize #2 + fetch ;
:ok 'HTTP/1.0_200_OK\n s:format s:put ;
:mime 'Content-type:_text/plain\n\n s:format s:put ;
:file '/home/crc/public%s s:format ;
:read here swap file:slurp here ;
:missing drop 'Selector_not_found. ;
:get dup file:exists? [ read ] if; missing ;
:http ok mime extract file get s:put ;
:gopher REQUEST file get s:put ;
:serve http? [ http ] if; gopher ;
serve
~~~