mu/apps/tile/main.mu

48 lines
1.3 KiB
Forth
Raw Normal View History

2020-09-16 16:26:38 +00:00
fn main args-on-stack: (addr array addr array byte) -> exit-status/ebx: int {
var args/eax: (addr array addr array byte) <- copy args-on-stack
var len/ecx: int <- length args
$main-body: {
# if no args, run in interactive mode
compare len, 1
{
break-if->
exit-status <- interactive args-on-stack
break $main-body
}
# else if single arg is 'test', run tests
compare len, 2
{
break-if-!=
var tmp/ecx: (addr addr array byte) <- index args, 1
var tmp2/eax: boolean <- string-equal? *tmp, "test"
compare tmp2, 0 # false
2020-09-16 16:26:38 +00:00
{
break-if-=
run-tests
exit-status <- copy 0 # TODO: get at Num-test-failures somehow
break $main-body
}
}
# otherwise error message
print-string-to-real-screen "usage: tile\n"
print-string-to-real-screen " or tile test\n"
exit-status <- copy 1
}
}
fn interactive args: (addr array addr array byte) -> exit-status/ebx: int {
enable-screen-grid-mode
enable-keyboard-immediate-mode
var env-storage: environment
var env/esi: (addr environment) <- address env-storage
initialize-environment env
render-loop env
enable-keyboard-type-mode
enable-screen-type-mode
exit-status <- copy 0
}
fn real-grapheme? g: grapheme -> result/eax: boolean {
result <- copy 1 # true
}