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
|
|
|
|
{
|
|
|
|
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 {
|
2020-09-16 22:37:35 +00:00
|
|
|
enable-screen-grid-mode
|
|
|
|
enable-keyboard-immediate-mode
|
|
|
|
var buf-storage: gap-buffer
|
|
|
|
var buf/esi: (addr gap-buffer) <- address buf-storage
|
|
|
|
initialize-gap-buffer buf
|
|
|
|
#
|
|
|
|
{
|
|
|
|
render 0, buf
|
|
|
|
var key/eax: byte <- read-key-from-real-keyboard
|
|
|
|
compare key, 0x71 # 'q'
|
|
|
|
break-if-=
|
|
|
|
var g/ecx: grapheme <- copy key
|
|
|
|
add-grapheme buf, g
|
|
|
|
loop
|
|
|
|
}
|
|
|
|
enable-keyboard-type-mode
|
|
|
|
enable-screen-type-mode
|
|
|
|
exit-status <- copy 0
|
|
|
|
}
|
|
|
|
|
|
|
|
fn render screen: (addr screen), buf: (addr gap-buffer) {
|
|
|
|
clear-screen screen
|
|
|
|
var nrows/eax: int <- copy 0
|
|
|
|
var ncols/ecx: int <- copy 0
|
|
|
|
nrows, ncols <- screen-size screen
|
|
|
|
var midcol/edx: int <- copy ncols
|
|
|
|
midcol <- shift-right 1
|
|
|
|
draw-vertical-line screen, 1, nrows, midcol
|
|
|
|
var midrow/ebx: int <- copy 0
|
|
|
|
{
|
|
|
|
var tmp/eax: int <- try-divide nrows, 3
|
|
|
|
midrow <- copy tmp
|
|
|
|
}
|
|
|
|
var left-col/edx: int <- copy midcol
|
|
|
|
left-col <- increment
|
|
|
|
draw-horizontal-line screen, midrow, left-col, ncols
|
|
|
|
# initialize cursor
|
|
|
|
var start-row/ebx: int <- copy midrow
|
|
|
|
start-row <- subtract 3
|
|
|
|
var start-col/edx: int <- copy left-col
|
|
|
|
start-col <- increment
|
|
|
|
move-cursor screen, start-row, start-col
|
|
|
|
#
|
|
|
|
render-gap-buffer screen, buf
|
2020-09-13 07:41:09 +00:00
|
|
|
}
|