wamma lamma ding dong
parent
991fef5612
commit
7f800007bd
19
README.md
19
README.md
|
@ -1,2 +1,21 @@
|
||||||
# quickforth
|
# 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
|
||||||
|
|
|
@ -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
|
||||||
|
~~~
|
|
@ -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>
|
|
@ -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
|
Binary file not shown.
|
@ -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
|
Loading…
Reference in New Issue