wamma lamma ding dong

main
Dozens B. McCuzzins 2021-11-13 21:53:07 -07:00
parent 991fef5612
commit 7f800007bd
6 changed files with 559 additions and 0 deletions

View File

@ -1,2 +1,21 @@
# quickforth
proof of concept running arbitrary forth in a cgi-bin like env
## Requirements
- retro forth
- quickserv
## Getting Started
1. run `quickserv_macos_x64` in a terminal (or download/install/build/etc an apropriate binary for your computer)
2. Open http://localhost:42069
## Resources
- retro - http://forth.works/book.html
- quickserv - https://github.com/jstrieb/quickserv

View File

@ -0,0 +1,10 @@
#!retro
arguments are passed like "--first x --second y" etc
~~~
#1 script:get-argument s:to-number
#3 script:get-argument s:to-number
+
'The_answer_is_%n s:format s:put
~~~

6
index.html 100644
View File

@ -0,0 +1,6 @@
<h1>wanna add some stuff?</h1>
<form action="/calculate">
<input name="first" type="number"> + <input name="second" type="number"> = ???
<br>
<button>Calculate</button>
</form>

7
justfile 100644
View File

@ -0,0 +1,7 @@
# show all commands
default:
@just --list
# look up a word and describe it
describe:
@cat words.txt | fzf | xargs retro-describe

BIN
quickserv_macos_x64 100755

Binary file not shown.

517
words.txt 100644
View File

@ -0,0 +1,517 @@
s:index-of
s:index-of
a:index-of-string
a:index-of
a:contains-string?
s:contains-string?
s:contains-char?
s:split-on-string
s:split
d:words-beginning-with
d:words-with
d:words
listen
banner
//
bye
NoEcho
clear
s:get-word
s:get
parse-until
image:save
TIB
clock:utc:second
clock:utc:minute
clock:utc:hour
clock:utc:year
clock:utc:month
clock:utc:day
clock:second
clock:minute
clock:hour
clock:year
clock:month
clock:day
clock:timestamp
clock:operation
abort
script:abort-include
script:ignore-to-eol
script:current-line
script:current-file
script:name
include
script:get-argument
script:arguments
socket:configure
socket:close
socket:recv
socket:send
socket:connect
socket:accept
socket:listen
socket:bind
socket:create
socket:gethostbyname
socket:operation
n:random
unix:slurp-pipe
unix:for-each-file
unix:count-files-in-cwd
unix:get-cwd
unix:pipe
unix:sleep
unix:putenv
unix:getenv
unix:chdir
unix:pclose
unix:popen
unix:kill
unix:wait
unix:getpid
unix:exit
unix:exec3
unix:exec2
unix:exec1
unix:exec0
unix:fork
unix:system
io:unix-syscall
e:put
f:dump-astack
f:dump-stack
f:fetch
f:store
e:to-f
f:to-e
f:signed-square
f:signed-sqrt
f:E1
e:clip
e:-inf?
e:inf?
e:nan?
e:zero?
e:min?
e:max?
e:n?
e:-INF
e:INF
e:NAN
e:MIN
e:MAX
f:sign
f:case
f:dec
f:inc
f:between?
f:limit
f:max
f:min
f:round
f:-inf?
f:inf?
f:nan?
f:-INF
f:INF
f:NAN
f:E
f:PI
f:put
f:abs
f:negate
f:negative?
f:positive?
f:square
sigil:.
f:rot
f:dup-pair
f:drop-pair
f:nip
f:tuck
f:over
f:adepth
f:pop
f:push
f:atan
f:acos
f:asin
f:tan
f:cos
f:sin
f:power
f:log
f:swap
f:drop
f:dup
f:depth
f:gt?
f:lt?
f:-eq?
f:eq?
f:sqrt
f:ceiling
f:floor
f:/
f:*
f:-
f:+
f:to-string
f:to-number
s:to-float
n:to-float
float:operation
file:spew
file:slurp
file:for-each-line
file:read-line
file:open-for-writing
file:open-for-append
file:open-for-reading
file:exists?
file:flush
file:delete
file:size
file:seek
file:tell
file:write
file:read
file:close
file:open
file:R+
file:A
file:W
file:R
file:operation
listen
s:get
c:get
FREE
dump-stack
reset
n:put
s:put
tab
sp
nl
c:put
io:scan-for
io:invoke
io:query
io:enumerate
hex
octal
binary
decimal
indexed-times
K
J
I
s:evaluate
a:ends-with?
a:begins-with?
a:-eq?
a:eq?
a:middle
a:right
a:left
}
{
a:make
a:index/string
a:index
a:reduce
a:store
a:fetch
a:th
a:reverse
a:map
a:contains/string?
a:contains?
a:filter
a:chop
a:prepend
a:append
a:to-string
a:copy
a:dup
a:for-each
a:from-string
a:counted-results
a:length
d:lookup-xt
d:for-each
does
curry
reorder
s:const
s:format
n:to-string
s:replace-all
s:tokenize-on-string
s:tokenize
s:replace
s:split/string
s:split/char
sigil:'
RewriteUnderscores
s:trim
s:trim-right
s:trim-left
s:to-lower
s:to-upper
c:to-number
c:toggle-case
c:to-string
c:to-lower
c:to-upper
c:-consonant?
c:-vowel?
c:-visible?
c:-whitespace?
c:-digit?
c:-uppercase?
c:-lowercase?
c:whitespace?
c:consonant?
c:vowel?
c:visible?
c:digit?
c:letter?
c:uppercase?
c:lowercase?
ASCII:US
ASCII:RS
ASCII:GS
ASCII:FS
ASCII:SUB
ASCII:EM
ASCII:CAN
ASCII:ETB
ASCII:SYN
ASCII:NAK
ASCII:DC4
ASCII:DC3
ASCII:DC2
ASCII:DC1
ASCII:DLE
ASCII:SI
ASCII:SO
ASCII:BEL
ASCII:ACK
ASCII:ENQ
ASCII:EOT
ASCII:ETX
ASCII:STX
ASCII:SOH
ASCII:DEL
ASCII:SPACE
ASCII:CR
ASCII:FF
ASCII:VT
ASCII:LF
ASCII:HT
ASCII:BS
ASCII:ESC
ASCII:NUL
$
'
s:WHITESPACE
s:PUNCTUATION
s:ASCII-LETTERS
s:ASCII-UPPERCASE
s:ASCII-LOWERCASE
s:DIGITS
s:copy
s:ends-with?
s:begins-with?
s:left
s:right
s:substr
s:map
s:filter
s:index/string
s:contains/string?
s:hash
s:contains/char?
s:index/char
s:for-each
s:append
s:prepend
s:reverse
s:chop
sigil:'
s:keep
s:skip
s:empty
s:temp
STRINGS
TempStringMax
TempStrings
buffer:preserve
buffer:set
buffer:size
buffer:empty
buffer:get
buffer:add
buffer:end
buffer:start
}}
---reveal---
{{
ScopeList
copy
v:update
v:preserve
allot
v:off
v:on
v:limit
v:dec
v:inc
v:dec-by
v:inc-by
n:between?
n:dec
n:inc
n:limit
n:abs
n:max
n:min
n:sqrt
n:square
n:negate
n:pow
mod
/
rot
-if:
if:
-if;
if;
n:odd?
n:even?
n:strictly-positive?
n:positive?
n:negative?
n:-zero?
n:zero?
n:MIN
n:MAX
gteq?
lteq?
not
s:case
case
FALSE
TRUE
sigil:|
times
until
while
tri@
tri*
tri
bi@
bi*
bi
sip
dip
dup-pair
?dup
drop-pair
nip
over
tuck
const
var
var-n
d:create
sigil:!
sigil:@
here
sigil:^
sigil:\
sigil:`
compiling?
compile:ret
compile:call
compile:jump
compile:lit
)
(
unhook
set-hook
hook
primitive
data
immediate
reclass
d:last.name
d:last.class
d:last.xt
d:last
depth
EOM
err:notfound
Base
r
d
i
Version
class:primitive
d:lookup
interpret
again
repeat
sigil:$
sigil:&
sigil::
sigil:#
d:add-header
class:data
class:macro
class:word
d:name
d:class
d:xt
d:link
Dictionary
]
[
;
s,
,
Heap
Compiler
sigil:(
-if
if
choose
s:length
s:eq?
s:to-number
store-next
fetch-next
0;
pop
push
shift
xor
or
and
/mod
*
-
+
store
fetch
gt?
lt?
-eq?
eq?
call
swap
drop
dup