wamma lamma ding dong
parent
991fef5612
commit
7f800007bd
19
README.md
19
README.md
|
@ -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
|
||||
|
|
|
@ -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