From bd538804dba0904c8951a75767d00e7a71834f5a Mon Sep 17 00:00:00 2001 From: "Kartik K. Agaram" Date: Fri, 2 Jul 2021 19:31:15 -0700 Subject: [PATCH] reorg primitives on screen --- shell/environment.mu | 26 ++++++------ shell/primitives.mu | 99 ++++++++++++++++++++++++++++++-------------- 2 files changed, 81 insertions(+), 44 deletions(-) diff --git a/shell/environment.mu b/shell/environment.mu index 48b9babe..879e6c84 100644 --- a/shell/environment.mu +++ b/shell/environment.mu @@ -24,7 +24,7 @@ fn test-environment { # setup: screen var screen-on-stack: screen var screen/edi: (addr screen) <- address screen-on-stack - initialize-screen screen, 0x80/width=72, 0x10/height, 0/no-pixel-graphics + initialize-screen screen, 0x80/width, 0x30/height, 0/no-pixel-graphics # type some code into sandbox type-in env, screen, "(+ 3 4)" # we don't have any global definitions here, so no macros # run code in sandbox @@ -49,7 +49,7 @@ fn test-environment { check-screen-row screen, 0xd/y, " ", "F - test-environment/13" check-screen-row screen, 0xe/y, " ", "F - test-environment/14" # bottom row is for a wordstar-style menu - check-screen-row screen, 0xf/y, " ^r run main ^s run sandbox ^g go to ^m to trace ^a << ^b ^e >> ", "F - test-environment/15" + check-screen-row screen, 0x2f/y, " ^r run main ^s run sandbox ^g go to ^m to trace ^a << ^b ^e >> ", "F - test-environment/15" } fn test-definition-in-environment { @@ -59,7 +59,7 @@ fn test-definition-in-environment { # setup: screen var screen-on-stack: screen var screen/edi: (addr screen) <- address screen-on-stack - initialize-screen screen, 0x80/width=72, 0x10/height, 0/no-pixel-graphics + initialize-screen screen, 0x80/width, 0x30/height, 0/no-pixel-graphics # define a global on the right (sandbox) side type-in env, screen, "(define f 42)" edit-environment env, 0x13/ctrl-s, 0/no-disk @@ -68,9 +68,9 @@ fn test-definition-in-environment { check-screen-row screen, 0/y, " ", "F - test-definition-in-environment/0" # global definition is now on the left side check-screen-row screen, 1/y, " (define f 42) screen: ", "F - test-definition-in-environment/1" - check-background-color-in-screen-row screen, 0/bg, 2/y, " ........ ", "F - test-environment/2" - check-background-color-in-screen-row screen, 0/bg, 3/y, " ........ ", "F - test-environment/3" - check-background-color-in-screen-row screen, 0/bg, 4/y, " ........ ", "F - test-environment/4" + check-background-color-in-screen-row screen, 0/bg, 2/y, " ........ ", "F - test-definition-in-environment/2" + check-background-color-in-screen-row screen, 0/bg, 3/y, " ........ ", "F - test-definition-in-environment/3" + check-background-color-in-screen-row screen, 0/bg, 4/y, " ........ ", "F - test-definition-in-environment/4" check-screen-row screen, 5/y, " ", "F - test-definition-in-environment/4" check-screen-row screen, 6/y, " keyboard: ", "F - test-definition-in-environment/5" check-background-color-in-screen-row screen, 0/bg, 6/y, " ................ ", "F - test-definition-in-environment/5-2" @@ -419,7 +419,7 @@ fn test-go-modal { # setup: screen var screen-on-stack: screen var screen/edi: (addr screen) <- address screen-on-stack - initialize-screen screen, 0x80/width=72, 0x10/height, 0/no-pixel-graphics + initialize-screen screen, 0x80/width, 0x10/height, 0/no-pixel-graphics # hit ctrl-g edit-environment env, 7/ctrl-g, 0/no-disk render-environment screen, env @@ -454,7 +454,7 @@ fn test-leave-go-modal { # setup: screen var screen-on-stack: screen var screen/edi: (addr screen) <- address screen-on-stack - initialize-screen screen, 0x80/width=72, 0x10/height, 0/no-pixel-graphics + initialize-screen screen, 0x80/width, 0x10/height, 0/no-pixel-graphics # hit ctrl-g edit-environment env, 7/ctrl-g, 0/no-disk render-environment screen, env @@ -487,7 +487,7 @@ fn test-jump-to-global { # setup: screen var screen-on-stack: screen var screen/edi: (addr screen) <- address screen-on-stack - initialize-screen screen, 0x80/width=72, 0x10/height, 0/no-pixel-graphics + initialize-screen screen, 0x80/width, 0x30/height, 0/no-pixel-graphics # define a global type-in env, screen, "(define f 42)" edit-environment env, 0x13/ctrl-s, 0/no-disk @@ -530,7 +530,7 @@ fn test-go-modal-prepopulates-word-at-cursor { # setup: screen var screen-on-stack: screen var screen/edi: (addr screen) <- address screen-on-stack - initialize-screen screen, 0x80/width=72, 0x10/height, 0/no-pixel-graphics + initialize-screen screen, 0x80/width, 0x10/height, 0/no-pixel-graphics # type a word at the cursor type-in env, screen, "fn1" # hit ctrl-g @@ -631,7 +631,7 @@ fn test-jump-to-nonexistent-global { # setup: screen var screen-on-stack: screen var screen/edi: (addr screen) <- address screen-on-stack - initialize-screen screen, 0x80/width=72, 0x10/height, 0/no-pixel-graphics + initialize-screen screen, 0x80/width, 0x10/height, 0/no-pixel-graphics # type in any (nonexistent) global name type-in env, screen, "f" # hit ctrl-g @@ -702,7 +702,7 @@ fn test-create-global { # setup: screen var screen-on-stack: screen var screen/edi: (addr screen) <- address screen-on-stack - initialize-screen screen, 0x80/width=72, 0x10/height, 0/no-pixel-graphics + initialize-screen screen, 0x80/width, 0x30/height, 0/no-pixel-graphics # hit ctrl-g edit-environment env, 7/ctrl-g, 0/no-disk render-environment screen, env @@ -740,7 +740,7 @@ fn test-create-nonexistent-global { # setup: screen var screen-on-stack: screen var screen/edi: (addr screen) <- address screen-on-stack - initialize-screen screen, 0x80/width=72, 0x10/height, 0/no-pixel-graphics + initialize-screen screen, 0x80/width, 0x10/height, 0/no-pixel-graphics # define a global type-in env, screen, "(define f 42)" edit-environment env, 0x13/ctrl-s, 0/no-disk diff --git a/shell/primitives.mu b/shell/primitives.mu index 44852c8a..64cfd84a 100644 --- a/shell/primitives.mu +++ b/shell/primitives.mu @@ -48,66 +48,103 @@ fn initialize-primitives _self: (addr global-table) { fn render-primitives screen: (addr screen), xmin: int, xmax: int, ymax: int { var y/ecx: int <- copy ymax - y <- subtract 0x10 + y <- subtract 0xf clear-rect screen, xmin, y, xmax, ymax, 0xdc/bg=green-bg y <- increment + var right-min/edx: int <- copy xmax + right-min <- subtract 0x1e + set-cursor-position screen, right-min, y + draw-text-wrapping-right-then-down-from-cursor screen, "primitives", right-min, y, xmax, ymax, 7/fg=grey, 0xdc/bg=green-bg + y <- increment + set-cursor-position screen, right-min, y + draw-text-wrapping-right-then-down-from-cursor screen, "fn apply set if while", right-min, y, xmax, ymax, 0x2a/fg=orange, 0xdc/bg=green-bg + y <- increment + set-cursor-position screen, right-min, y + draw-text-wrapping-right-then-down-from-cursor screen, "booleans", right-min, y, xmax, ymax, 7/fg=grey, 0xdc/bg=green-bg + y <- increment + set-cursor-position screen, right-min, y + draw-text-wrapping-right-then-down-from-cursor screen, "= and or not", right-min, y, xmax, ymax, 0x2a/fg=orange, 0xdc/bg=green-bg + y <- increment + set-cursor-position screen, right-min, y + draw-text-wrapping-right-then-down-from-cursor screen, "lists", right-min, y, xmax, ymax, 7/fg=grey, 0xdc/bg=green-bg + y <- increment + set-cursor-position screen, right-min, y + draw-text-wrapping-right-then-down-from-cursor screen, "cons car cdr no ", right-min, y, xmax, ymax, 0x2a/fg=orange, 0xdc/bg=green-bg + y <- increment + set-cursor-position screen, right-min, y + draw-text-wrapping-right-then-down-from-cursor screen, "numbers", right-min, y, xmax, ymax, 7/fg=grey, 0xdc/bg=green-bg + y <- increment + set-cursor-position screen, right-min, y + draw-text-wrapping-right-then-down-from-cursor screen, "+ - * / %", right-min, y, xmax, ymax, 0x2a/fg=orange, 0xdc/bg=green-bg + y <- increment + set-cursor-position screen, right-min, y + draw-text-wrapping-right-then-down-from-cursor screen, "< > <= >=", right-min, y, xmax, ymax, 0x2a/fg=orange, 0xdc/bg=green-bg + y <- increment + set-cursor-position screen, right-min, y + draw-text-wrapping-right-then-down-from-cursor screen, "sqrt abs sgn", right-min, y, xmax, ymax, 0x2a/fg=orange, 0xdc/bg=green-bg +#? { +#? compare screen, 0 +#? break-if-!= +#? var foo/eax: byte <- read-key 0/keyboard +#? compare foo, 0 +#? loop-if-= +#? } + y <- copy ymax + y <- subtract 0xe + var left-max/edx: int <- copy xmax + left-max <- subtract 0x20 var tmpx/eax: int <- copy xmin - tmpx <- draw-text-rightward screen, "cursor graphics", tmpx, xmax, y, 7/fg=grey, 0xdc/bg=green-bg + tmpx <- draw-text-rightward screen, "cursor graphics", tmpx, left-max, y, 7/fg=grey, 0xdc/bg=green-bg y <- increment var tmpx/eax: int <- copy xmin - tmpx <- draw-text-rightward screen, " print", tmpx, xmax, y, 0x2a/fg=orange, 0xdc/bg=green-bg - tmpx <- draw-text-rightward screen, ": screen a -> a", tmpx, xmax, y, 7/fg=grey, 0xdc/bg=green-bg + tmpx <- draw-text-rightward screen, " print", tmpx, left-max, y, 0x2a/fg=orange, 0xdc/bg=green-bg + tmpx <- draw-text-rightward screen, ": screen a -> a", tmpx, left-max, y, 7/fg=grey, 0xdc/bg=green-bg y <- increment var tmpx/eax: int <- copy xmin - tmpx <- draw-text-rightward screen, " lines columns", tmpx, xmax, y, 0x2a/fg=orange, 0xdc/bg=green-bg - tmpx <- draw-text-rightward screen, ": screen -> number", tmpx, xmax, y, 7/fg=grey, 0xdc/bg=green-bg + tmpx <- draw-text-rightward screen, " lines columns", tmpx, left-max, y, 0x2a/fg=orange, 0xdc/bg=green-bg + tmpx <- draw-text-rightward screen, ": screen -> number", tmpx, left-max, y, 7/fg=grey, 0xdc/bg=green-bg y <- increment var tmpx/eax: int <- copy xmin - tmpx <- draw-text-rightward screen, " up down left right", tmpx, xmax, y, 0x2a/fg=orange, 0xdc/bg=green-bg - tmpx <- draw-text-rightward screen, ": screen", tmpx, xmax, y, 7/fg=grey, 0xdc/bg=green-bg + tmpx <- draw-text-rightward screen, " up down left right", tmpx, left-max, y, 0x2a/fg=orange, 0xdc/bg=green-bg + tmpx <- draw-text-rightward screen, ": screen", tmpx, left-max, y, 7/fg=grey, 0xdc/bg=green-bg y <- increment var tmpx/eax: int <- copy xmin - tmpx <- draw-text-rightward screen, " cr", tmpx, xmax, y, 0x2a/fg=orange, 0xdc/bg=green-bg - tmpx <- draw-text-rightward screen, ": screen ", tmpx, xmax, y, 7/fg=grey, 0xdc/bg=green-bg - tmpx <- draw-text-rightward screen, "# move cursor down and to left margin", tmpx, xmax, y, 0x38/fg=trace, 0xdc/bg=green-bg + tmpx <- draw-text-rightward screen, " cr", tmpx, left-max, y, 0x2a/fg=orange, 0xdc/bg=green-bg + tmpx <- draw-text-rightward screen, ": screen ", tmpx, left-max, y, 7/fg=grey, 0xdc/bg=green-bg + tmpx <- draw-text-rightward screen, "# move cursor down and to left margin", tmpx, left-max, y, 0x38/fg=trace, 0xdc/bg=green-bg y <- increment var tmpx/eax: int <- copy xmin - tmpx <- draw-text-rightward screen, "pixel graphics", tmpx, xmax, y, 7/fg=grey, 0xdc/bg=green-bg + tmpx <- draw-text-rightward screen, "pixel graphics", tmpx, left-max, y, 7/fg=grey, 0xdc/bg=green-bg y <- increment var tmpx/eax: int <- copy xmin - tmpx <- draw-text-rightward screen, " width height", tmpx, xmax, y, 0x2a/fg=orange, 0xdc/bg=green-bg - tmpx <- draw-text-rightward screen, ": screen -> number", tmpx, xmax, y, 7/fg=grey, 0xdc/bg=green-bg + tmpx <- draw-text-rightward screen, " width height", tmpx, left-max, y, 0x2a/fg=orange, 0xdc/bg=green-bg + tmpx <- draw-text-rightward screen, ": screen -> number", tmpx, left-max, y, 7/fg=grey, 0xdc/bg=green-bg y <- increment var tmpx/eax: int <- copy xmin - tmpx <- draw-text-rightward screen, " pixel", tmpx, xmax, y, 0x2a/fg=orange, 0xdc/bg=green-bg - tmpx <- draw-text-rightward screen, ": screen x y color", tmpx, xmax, y, 7/fg=grey, 0xdc/bg=green-bg + tmpx <- draw-text-rightward screen, " pixel", tmpx, left-max, y, 0x2a/fg=orange, 0xdc/bg=green-bg + tmpx <- draw-text-rightward screen, ": screen x y color", tmpx, left-max, y, 7/fg=grey, 0xdc/bg=green-bg y <- increment var tmpx/eax: int <- copy xmin - tmpx <- draw-text-rightward screen, "screen/keyboard", tmpx, xmax, y, 7/fg=grey, 0xdc/bg=green-bg + tmpx <- draw-text-rightward screen, "screen/keyboard", tmpx, left-max, y, 7/fg=grey, 0xdc/bg=green-bg y <- increment var tmpx/eax: int <- copy xmin - tmpx <- draw-text-rightward screen, " clear", tmpx, xmax, y, 0x2a/fg=orange, 0xdc/bg=green-bg - tmpx <- draw-text-rightward screen, ": screen", tmpx, xmax, y, 7/fg=grey, 0xdc/bg=green-bg + tmpx <- draw-text-rightward screen, " clear", tmpx, left-max, y, 0x2a/fg=orange, 0xdc/bg=green-bg + tmpx <- draw-text-rightward screen, ": screen", tmpx, left-max, y, 7/fg=grey, 0xdc/bg=green-bg y <- increment var tmpx/eax: int <- copy xmin - tmpx <- draw-text-rightward screen, " key", tmpx, xmax, y, 0x2a/fg=orange, 0xdc/bg=green-bg - tmpx <- draw-text-rightward screen, ": () -> grapheme?", tmpx, xmax, y, 7/fg=grey, 0xdc/bg=green-bg + tmpx <- draw-text-rightward screen, " key", tmpx, left-max, y, 0x2a/fg=orange, 0xdc/bg=green-bg + tmpx <- draw-text-rightward screen, ": () -> grapheme?", tmpx, left-max, y, 7/fg=grey, 0xdc/bg=green-bg y <- increment var tmpx/eax: int <- copy xmin - tmpx <- draw-text-rightward screen, "streams", tmpx, xmax, y, 7/fg=grey, 0xdc/bg=green-bg + tmpx <- draw-text-rightward screen, "streams", tmpx, left-max, y, 7/fg=grey, 0xdc/bg=green-bg y <- increment var tmpx/eax: int <- copy xmin - tmpx <- draw-text-rightward screen, " stream", tmpx, xmax, y, 0x2a/fg=orange, 0xdc/bg=green-bg - tmpx <- draw-text-rightward screen, ": () -> stream ", tmpx, xmax, y, 7/fg=grey, 0xdc/bg=green-bg + tmpx <- draw-text-rightward screen, " stream", tmpx, left-max, y, 0x2a/fg=orange, 0xdc/bg=green-bg + tmpx <- draw-text-rightward screen, ": () -> stream ", tmpx, left-max, y, 7/fg=grey, 0xdc/bg=green-bg y <- increment var tmpx/eax: int <- copy xmin - tmpx <- draw-text-rightward screen, " write", tmpx, xmax, y, 0x2a/fg=orange, 0xdc/bg=green-bg - tmpx <- draw-text-rightward screen, ": stream grapheme -> stream", tmpx, xmax, y, 7/fg=grey, 0xdc/bg=green-bg - y <- increment - var tmpx/eax: int <- copy xmin - tmpx <- draw-text-rightward screen, "fn apply set if while cons car cdr no not and or = ", tmpx, xmax, y, 0x2a/fg=orange, 0xdc/bg=green-bg - # numbers - tmpx <- draw-text-rightward screen, "< > <= >= + - * / % sqrt abs sgn", tmpx, xmax, y, 0x2a/fg=orange, 0xdc/bg=green-bg + tmpx <- draw-text-rightward screen, " write", tmpx, left-max, y, 0x2a/fg=orange, 0xdc/bg=green-bg + tmpx <- draw-text-rightward screen, ": stream grapheme -> stream", tmpx, left-max, y, 7/fg=grey, 0xdc/bg=green-bg } fn primitive-global? _x: (addr global) -> _/eax: boolean {