diff options
author | Kartik K. Agaram <vc@akkartik.com> | 2015-04-30 10:12:36 -0700 |
---|---|---|
committer | Kartik K. Agaram <vc@akkartik.com> | 2015-04-30 10:12:36 -0700 |
commit | 2ffa3edefb6ec461d440b32c2d40ef4305535845 (patch) | |
tree | 5a0e0263b747d3ad1977c7e56fbf0996b7bbabd4 | |
parent | 72c4fb2ddacc9fccb8ebe8cba9d1322ddcaac017 (diff) | |
download | mu-2ffa3edefb6ec461d440b32c2d40ef4305535845.tar.gz |
1227
-rw-r--r-- | cpp/.traces/clear-line-erases-printed-characters | 1076 | ||||
-rw-r--r-- | cpp/071print.mu | 25 |
2 files changed, 1101 insertions, 0 deletions
diff --git a/cpp/.traces/clear-line-erases-printed-characters b/cpp/.traces/clear-line-erases-printed-characters new file mode 100644 index 00000000..4aacb7e0 --- /dev/null +++ b/cpp/.traces/clear-line-erases-printed-characters @@ -0,0 +1,1076 @@ +parse/0: instruction: init-fake-screen +parse/0: ingredient: {name: "3", value: 0, type: 0, properties: ["3": "literal", "width": ]} +parse/0: ingredient: {name: "2", value: 0, type: 0, properties: ["2": "literal", "height": ]} +parse/0: product: {name: "1", value: 0, type: 2-11, properties: ["1": "address":"screen"]} +parse/0: instruction: print-character +parse/0: ingredient: {name: "1", value: 0, type: 2-11, properties: ["1": "address":"screen"]} +parse/0: ingredient: {name: "97", value: 0, type: 0, properties: ["97": "literal"]} +parse/0: product: {name: "1", value: 0, type: 2-11, properties: ["1": "address":"screen"]} +parse/0: instruction: move-cursor +parse/0: ingredient: {name: "1", value: 0, type: 2-11, properties: ["1": "address":"screen"]} +parse/0: ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal", "row": ]} +parse/0: ingredient: {name: "0", value: 0, type: 0, properties: ["0": "literal", "column": ]} +parse/0: product: {name: "1", value: 0, type: 2-11, properties: ["1": "address":"screen"]} +parse/0: instruction: clear-line +parse/0: ingredient: {name: "1", value: 0, type: 2-11, properties: ["1": "address":"screen"]} +parse/0: product: {name: "1", value: 0, type: 2-11, properties: ["1": "address":"screen"]} +parse/0: instruction: get +parse/0: ingredient: {name: "1", value: 0, type: 2-11, properties: ["1": "address":"screen", "deref": ]} +parse/0: ingredient: {name: "data", value: 0, type: 0, properties: ["data": "offset"]} +parse/0: product: {name: "2", value: 0, type: 2-5-4, properties: ["2": "address":"array":"character"]} +parse/0: instruction: copy +parse/0: ingredient: {name: "2", value: 0, type: 2-5-4, properties: ["2": "address":"array":"character", "deref": ]} +parse/0: product: {name: "3", value: 0, type: 5-4, properties: ["3": "array":"character"]} +name/0: element data of type screen is at offset 4 +after-brace/0: recipe test-clear-line-erases-printed-characters +after-brace/0: init-fake-screen ... +after-brace/0: print-character ... +after-brace/0: move-cursor ... +after-brace/0: clear-line ... +after-brace/0: get ... +after-brace/0: copy ... +new/0: routine allocated memory from 1000 to 101000 +schedule/0: test-clear-line-erases-printed-characters +run/0: instruction test-clear-line-erases-printed-characters/0 +run/0: {name: "1", value: 1, type: 2-11, properties: ["1": "address":"screen"]} <- init-fake-screen {name: "3", value: 3, type: 0, properties: ["3": "literal", "width": ]}, {name: "2", value: 2, type: 0, properties: ["2": "literal", "height": ]} +run/0: instruction init-fake-screen/0 +run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal", "capacity": ]} +mem/0: array size is 30 +mem/0: new alloc: 1000 +run/0: instruction init-fake-screen/1 +run/0: {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen"]} <- new {name: "screen", value: 11, type: 0, properties: ["screen": "type"]} +mem/0: new alloc: 1031 +mem/0: storing 1031 in location 1002 +run/0: instruction init-fake-screen/2 +run/0: {name: "width", value: 2, type: 2-1, properties: ["width": "address":"integer"]} <- get-address {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen", "deref": ]}, {name: "num-columns", value: 1, type: 0, properties: ["num-columns": "offset"]} +run/0: ingredient 0 is result +mem/0: location 1002 is 1031 +run/0: ingredient 1 is num-columns +run/0: address to copy is 1032 +run/0: product 0 is 1032 +mem/0: storing 1032 in location 1003 +run/0: instruction init-fake-screen/3 +run/0: {name: "width", value: 2, type: 2-1, properties: ["width": "address":"integer", "deref": ]} <- next-ingredient +run/0: product 0 is 3 +mem/0: location 1003 is 1032 +mem/0: storing 3 in location 1032 +run/0: instruction init-fake-screen/4 +run/0: {name: "height", value: 3, type: 2-1, properties: ["height": "address":"integer"]} <- get-address {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen", "deref": ]}, {name: "num-rows", value: 0, type: 0, properties: ["num-rows": "offset"]} +run/0: ingredient 0 is result +mem/0: location 1002 is 1031 +run/0: ingredient 1 is num-rows +run/0: address to copy is 1031 +run/0: product 0 is 1031 +mem/0: storing 1031 in location 1004 +run/0: instruction init-fake-screen/5 +run/0: {name: "height", value: 3, type: 2-1, properties: ["height": "address":"integer", "deref": ]} <- next-ingredient +run/0: product 0 is 2 +mem/0: location 1004 is 1031 +mem/0: storing 2 in location 1031 +run/0: instruction init-fake-screen/6 +run/0: {name: "row", value: 4, type: 2-1, properties: ["row": "address":"integer"]} <- get-address {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen", "deref": ]}, {name: "cursor-row", value: 2, type: 0, properties: ["cursor-row": "offset"]} +run/0: ingredient 0 is result +mem/0: location 1002 is 1031 +run/0: ingredient 1 is cursor-row +run/0: address to copy is 1033 +run/0: product 0 is 1033 +mem/0: storing 1033 in location 1005 +run/0: instruction init-fake-screen/7 +run/0: {name: "row", value: 4, type: 2-1, properties: ["row": "address":"integer", "deref": ]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]} +run/0: ingredient 0 is 0 +mem/0: location 1005 is 1033 +mem/0: storing 0 in location 1033 +run/0: instruction init-fake-screen/8 +run/0: {name: "column", value: 5, type: 2-1, properties: ["column": "address":"integer"]} <- get-address {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen", "deref": ]}, {name: "cursor-column", value: 3, type: 0, properties: ["cursor-column": "offset"]} +run/0: ingredient 0 is result +mem/0: location 1002 is 1031 +run/0: ingredient 1 is cursor-column +run/0: address to copy is 1034 +run/0: product 0 is 1034 +mem/0: storing 1034 in location 1006 +run/0: instruction init-fake-screen/9 +run/0: {name: "column", value: 5, type: 2-1, properties: ["column": "address":"integer", "deref": ]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]} +run/0: ingredient 0 is 0 +mem/0: location 1006 is 1034 +mem/0: storing 0 in location 1034 +run/0: instruction init-fake-screen/10 +run/0: {name: "bufsize", value: 6, type: 1, properties: ["bufsize": "integer"]} <- multiply {name: "width", value: 2, type: 2-1, properties: ["width": "address":"integer", "deref": ]}, {name: "height", value: 3, type: 2-1, properties: ["height": "address":"integer", "deref": ]} +run/0: ingredient 0 is width +mem/0: location 1003 is 1032 +mem/0: location 1032 is 3 +run/0: ingredient 1 is height +mem/0: location 1004 is 1031 +mem/0: location 1031 is 2 +run/0: ingredient 1 is 2 +run/0: product 0 is 6 +mem/0: storing 6 in location 1007 +run/0: instruction init-fake-screen/11 +run/0: {name: "buf", value: 7, type: 2-2-5-4, properties: ["buf": "address":"address":"array":"character"]} <- get-address {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen", "deref": ]}, {name: "data", value: 4, type: 0, properties: ["data": "offset"]} +run/0: ingredient 0 is result +mem/0: location 1002 is 1031 +run/0: ingredient 1 is data +run/0: address to copy is 1035 +run/0: product 0 is 1035 +mem/0: storing 1035 in location 1008 +run/0: instruction init-fake-screen/12 +run/0: {name: "buf", value: 7, type: 2-2-5-4, properties: ["buf": "address":"address":"array":"character", "deref": ]} <- new {name: "character", value: 0, type: 0, properties: ["character": "literal"]}, {name: "bufsize", value: 6, type: 1, properties: ["bufsize": "integer"]} +mem/0: location 1007 is 6 +mem/0: array size is 6 +mem/0: new alloc: 1036 +mem/0: location 1008 is 1035 +mem/0: storing 1036 in location 1035 +run/0: instruction init-fake-screen/13 +run/0: clear-screen {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen"]} +mem/0: location 1002 is 1031 +run/0: instruction clear-screen/0 +run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]} +mem/0: array size is 30 +mem/0: new alloc: 1043 +run/0: instruction clear-screen/1 +run/0: {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]} <- next-ingredient +run/0: product 0 is 1031 +mem/0: storing 1031 in location 1045 +run/0: instruction clear-screen/3 +run/0: break-unless {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: "", value: 12, type: , properties: ["": ]} +mem/0: location 1045 is 1031 +run/0: ingredient 0 is 1031 +run/0: jump-unless fell through +run/0: instruction clear-screen/4 +run/0: {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character"]} <- get {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "data", value: 4, type: 0, properties: ["data": "offset"]} +run/0: ingredient 0 is x +mem/0: location 1045 is 1031 +run/0: ingredient 1 is data +run/0: address to copy is 1035 +run/0: its type is 2 +mem/0: location 1035 is 1036 +run/0: product 0 is 1036 +mem/0: storing 1036 in location 1046 +run/0: instruction clear-screen/5 +run/0: {name: "max", value: 3, type: 1, properties: ["max": "integer"]} <- length {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]} +mem/0: location 1046 is 1036 +mem/0: storing 6 in location 1047 +run/0: instruction clear-screen/6 +run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- copy {name: "0", value: 0, type: 0, properties: ["0": "literal"]} +run/0: ingredient 0 is 0 +mem/0: storing 0 in location 1048 +run/0: instruction clear-screen/8 +run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]} +run/0: ingredient 0 is i +mem/0: location 1048 is 0 +run/0: ingredient 1 is max +mem/0: location 1047 is 6 +run/0: product 0 is 0 +mem/0: storing 0 in location 1049 +run/0: instruction clear-screen/9 +run/0: break-if {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]} +mem/0: location 1049 is 0 +run/0: ingredient 0 is 0 +run/0: jump-if fell through +run/0: instruction clear-screen/10 +run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]} +run/0: ingredient 0 is buf +mem/0: location 1046 is 1036 +run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]} +mem/0: location 1048 is 0 +run/0: address to copy is 1037 +run/0: product 0 is 1037 +mem/0: storing 1037 in location 1050 +run/0: instruction clear-screen/11 +run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]} +run/0: ingredient 0 is +mem/0: location 1050 is 1037 +mem/0: storing 0 in location 1037 +run/0: instruction clear-screen/12 +run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]} +run/0: ingredient 0 is i +mem/0: location 1048 is 0 +run/0: ingredient 1 is 1 +run/0: product 0 is 1 +mem/0: storing 1 in location 1048 +run/0: instruction clear-screen/13 +run/0: loop {name: "", value: -6, type: , properties: ["": ]} +run/0: ingredient 0 is -6 +run/0: jumping to instruction 8 +run/0: instruction clear-screen/8 +run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]} +run/0: ingredient 0 is i +mem/0: location 1048 is 1 +run/0: ingredient 1 is max +mem/0: location 1047 is 6 +run/0: product 0 is 0 +mem/0: storing 0 in location 1049 +run/0: instruction clear-screen/9 +run/0: break-if {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]} +mem/0: location 1049 is 0 +run/0: ingredient 0 is 0 +run/0: jump-if fell through +run/0: instruction clear-screen/10 +run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]} +run/0: ingredient 0 is buf +mem/0: location 1046 is 1036 +run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]} +mem/0: location 1048 is 1 +run/0: address to copy is 1038 +run/0: product 0 is 1038 +mem/0: storing 1038 in location 1050 +run/0: instruction clear-screen/11 +run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]} +run/0: ingredient 0 is +mem/0: location 1050 is 1038 +mem/0: storing 0 in location 1038 +run/0: instruction clear-screen/12 +run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]} +run/0: ingredient 0 is i +mem/0: location 1048 is 1 +run/0: ingredient 1 is 1 +run/0: product 0 is 2 +mem/0: storing 2 in location 1048 +run/0: instruction clear-screen/13 +run/0: loop {name: "", value: -6, type: , properties: ["": ]} +run/0: ingredient 0 is -6 +run/0: jumping to instruction 8 +run/0: instruction clear-screen/8 +run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]} +run/0: ingredient 0 is i +mem/0: location 1048 is 2 +run/0: ingredient 1 is max +mem/0: location 1047 is 6 +run/0: product 0 is 0 +mem/0: storing 0 in location 1049 +run/0: instruction clear-screen/9 +run/0: break-if {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]} +mem/0: location 1049 is 0 +run/0: ingredient 0 is 0 +run/0: jump-if fell through +run/0: instruction clear-screen/10 +run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]} +run/0: ingredient 0 is buf +mem/0: location 1046 is 1036 +run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]} +mem/0: location 1048 is 2 +run/0: address to copy is 1039 +run/0: product 0 is 1039 +mem/0: storing 1039 in location 1050 +run/0: instruction clear-screen/11 +run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]} +run/0: ingredient 0 is +mem/0: location 1050 is 1039 +mem/0: storing 0 in location 1039 +run/0: instruction clear-screen/12 +run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]} +run/0: ingredient 0 is i +mem/0: location 1048 is 2 +run/0: ingredient 1 is 1 +run/0: product 0 is 3 +mem/0: storing 3 in location 1048 +run/0: instruction clear-screen/13 +run/0: loop {name: "", value: -6, type: , properties: ["": ]} +run/0: ingredient 0 is -6 +run/0: jumping to instruction 8 +run/0: instruction clear-screen/8 +run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]} +run/0: ingredient 0 is i +mem/0: location 1048 is 3 +run/0: ingredient 1 is max +mem/0: location 1047 is 6 +run/0: product 0 is 0 +mem/0: storing 0 in location 1049 +run/0: instruction clear-screen/9 +run/0: break-if {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]} +mem/0: location 1049 is 0 +run/0: ingredient 0 is 0 +run/0: jump-if fell through +run/0: instruction clear-screen/10 +run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]} +run/0: ingredient 0 is buf +mem/0: location 1046 is 1036 +run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]} +mem/0: location 1048 is 3 +run/0: address to copy is 1040 +run/0: product 0 is 1040 +mem/0: storing 1040 in location 1050 +run/0: instruction clear-screen/11 +run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]} +run/0: ingredient 0 is +mem/0: location 1050 is 1040 +mem/0: storing 0 in location 1040 +run/0: instruction clear-screen/12 +run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]} +run/0: ingredient 0 is i +mem/0: location 1048 is 3 +run/0: ingredient 1 is 1 +run/0: product 0 is 4 +mem/0: storing 4 in location 1048 +run/0: instruction clear-screen/13 +run/0: loop {name: "", value: -6, type: , properties: ["": ]} +run/0: ingredient 0 is -6 +run/0: jumping to instruction 8 +run/0: instruction clear-screen/8 +run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]} +run/0: ingredient 0 is i +mem/0: location 1048 is 4 +run/0: ingredient 1 is max +mem/0: location 1047 is 6 +run/0: product 0 is 0 +mem/0: storing 0 in location 1049 +run/0: instruction clear-screen/9 +run/0: break-if {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]} +mem/0: location 1049 is 0 +run/0: ingredient 0 is 0 +run/0: jump-if fell through +run/0: instruction clear-screen/10 +run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]} +run/0: ingredient 0 is buf +mem/0: location 1046 is 1036 +run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]} +mem/0: location 1048 is 4 +run/0: address to copy is 1041 +run/0: product 0 is 1041 +mem/0: storing 1041 in location 1050 +run/0: instruction clear-screen/11 +run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]} +run/0: ingredient 0 is +mem/0: location 1050 is 1041 +mem/0: storing 0 in location 1041 +run/0: instruction clear-screen/12 +run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]} +run/0: ingredient 0 is i +mem/0: location 1048 is 4 +run/0: ingredient 1 is 1 +run/0: product 0 is 5 +mem/0: storing 5 in location 1048 +run/0: instruction clear-screen/13 +run/0: loop {name: "", value: -6, type: , properties: ["": ]} +run/0: ingredient 0 is -6 +run/0: jumping to instruction 8 +run/0: instruction clear-screen/8 +run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]} +run/0: ingredient 0 is i +mem/0: location 1048 is 5 +run/0: ingredient 1 is max +mem/0: location 1047 is 6 +run/0: product 0 is 0 +mem/0: storing 0 in location 1049 +run/0: instruction clear-screen/9 +run/0: break-if {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]} +mem/0: location 1049 is 0 +run/0: ingredient 0 is 0 +run/0: jump-if fell through +run/0: instruction clear-screen/10 +run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character"]} <- index-address {name: "buf", value: 2, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "i", value: 4, type: 1, properties: ["i": "integer"]} +run/0: ingredient 0 is buf +mem/0: location 1046 is 1036 +run/0: ingredient 1 is {name: "i", value: 4, type: 1, properties: ["i": "integer"]} +mem/0: location 1048 is 5 +run/0: address to copy is 1042 +run/0: product 0 is 1042 +mem/0: storing 1042 in location 1050 +run/0: instruction clear-screen/11 +run/0: {name: "c", value: 6, type: 2-4, properties: ["c": "address":"character", "deref": ]} <- copy {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]} +run/0: ingredient 0 is +mem/0: location 1050 is 1042 +mem/0: storing 0 in location 1042 +run/0: instruction clear-screen/12 +run/0: {name: "i", value: 4, type: 1, properties: ["i": "integer"]} <- add {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]} +run/0: ingredient 0 is i +mem/0: location 1048 is 5 +run/0: ingredient 1 is 1 +run/0: product 0 is 6 +mem/0: storing 6 in location 1048 +run/0: instruction clear-screen/13 +run/0: loop {name: "", value: -6, type: , properties: ["": ]} +run/0: ingredient 0 is -6 +run/0: jumping to instruction 8 +run/0: instruction clear-screen/8 +run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal {name: "i", value: 4, type: 1, properties: ["i": "integer"]}, {name: "max", value: 3, type: 1, properties: ["max": "integer"]} +run/0: ingredient 0 is i +mem/0: location 1048 is 6 +run/0: ingredient 1 is max +mem/0: location 1047 is 6 +run/0: product 0 is 1 +mem/0: storing 1 in location 1049 +run/0: instruction clear-screen/9 +run/0: break-if {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 4, type: , properties: ["": ]} +mem/0: location 1049 is 1 +run/0: ingredient 0 is 1 +run/0: ingredient 1 is +run/0: jumping to instruction 14 +run/0: instruction clear-screen/15 +run/0: reply {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "same-as-ingredient": "0"]} +mem/0: location 1045 is 1031 +run/0: instruction init-fake-screen/14 +run/0: reply {name: "result", value: 1, type: 2-11, properties: ["result": "address":"screen"]} +mem/0: location 1002 is 1031 +run/0: result 0 is 1031 +mem/0: storing 1031 in location 1 +run/0: instruction test-clear-line-erases-printed-characters/1 +run/0: {name: "1", value: 1, type: 2-11, properties: ["1": "address":"screen"]} <- print-character {name: "1", value: 1, type: 2-11, properties: ["1": "address":"screen"]}, {name: "97", value: 97, type: 0, properties: ["97": "literal"]} +mem/0: location 1 is 1031 +run/0: instruction print-character/0 +run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]} +mem/0: array size is 30 +mem/0: new alloc: 1074 +run/0: instruction print-character/1 +run/0: {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]} <- next-ingredient +run/0: product 0 is 1031 +mem/0: storing 1031 in location 1076 +run/0: instruction print-character/2 +run/0: {name: "c", value: 2, type: 4, properties: ["c": "character"]} <- next-ingredient +run/0: product 0 is 97 +mem/0: storing 97 in location 1077 +run/0: instruction print-character/4 +run/0: break-unless {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: "", value: 14, type: , properties: ["": ]} +mem/0: location 1076 is 1031 +run/0: ingredient 0 is 1031 +run/0: jump-unless fell through +run/0: instruction print-character/5 +run/0: {name: "row", value: 3, type: 2-1, properties: ["row": "address":"integer"]} <- get-address {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-row", value: 2, type: 0, properties: ["cursor-row": "offset"]} +run/0: ingredient 0 is x +mem/0: location 1076 is 1031 +run/0: ingredient 1 is cursor-row +run/0: address to copy is 1033 +run/0: product 0 is 1033 +mem/0: storing 1033 in location 1078 +run/0: instruction print-character/6 +run/0: {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer"]} <- get-address {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-column", value: 3, type: 0, properties: ["cursor-column": "offset"]} +run/0: ingredient 0 is x +mem/0: location 1076 is 1031 +run/0: ingredient 1 is cursor-column +run/0: address to copy is 1034 +run/0: product 0 is 1034 +mem/0: storing 1034 in location 1079 +run/0: instruction print-character/7 +run/0: {name: "width", value: 5, type: 1, properties: ["width": "integer"]} <- get {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "num-columns", value: 1, type: 0, properties: ["num-columns": "offset"]} +run/0: ingredient 0 is x +mem/0: location 1076 is 1031 +run/0: ingredient 1 is num-columns +run/0: address to copy is 1032 +run/0: its type is 1 +mem/0: location 1032 is 3 +run/0: product 0 is 3 +mem/0: storing 3 in location 1080 +run/0: instruction print-character/8 +run/0: {name: "index", value: 6, type: 1, properties: ["index": "integer"]} <- multiply {name: "row", value: 3, type: 2-1, properties: ["row": "address":"integer", "deref": ]}, {name: "width", value: 5, type: 1, properties: ["width": "integer"]} +run/0: ingredient 0 is row +mem/0: location 1078 is 1033 +mem/0: location 1033 is 0 +run/0: ingredient 1 is width +mem/0: location 1080 is 3 +run/0: ingredient 1 is 3 +run/0: product 0 is 0 +mem/0: storing 0 in location 1081 +run/0: instruction print-character/9 +run/0: {name: "index", value: 6, type: 1, properties: ["index": "integer"]} <- add {name: "index", value: 6, type: 1, properties: ["index": "integer"]}, {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]} +run/0: ingredient 0 is index +mem/0: location 1081 is 0 +run/0: ingredient 1 is column +mem/0: location 1079 is 1034 +mem/0: location 1034 is 0 +run/0: product 0 is 0 +mem/0: storing 0 in location 1081 +run/0: instruction print-character/10 +run/0: {name: "buf", value: 7, type: 2-5-4, properties: ["buf": "address":"array":"character"]} <- get {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "data", value: 4, type: 0, properties: ["data": "offset"]} +run/0: ingredient 0 is x +mem/0: location 1076 is 1031 +run/0: ingredient 1 is data +run/0: address to copy is 1035 +run/0: its type is 2 +mem/0: location 1035 is 1036 +run/0: product 0 is 1036 +mem/0: storing 1036 in location 1082 +run/0: instruction print-character/11 +run/0: {name: "cursor", value: 8, type: 2-4, properties: ["cursor": "address":"character"]} <- index-address {name: "buf", value: 7, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "index", value: 6, type: 1, properties: ["index": "integer"]} +run/0: ingredient 0 is buf +mem/0: location 1082 is 1036 +run/0: ingredient 1 is {name: "index", value: 6, type: 1, properties: ["index": "integer"]} +mem/0: location 1081 is 0 +run/0: address to copy is 1037 +run/0: product 0 is 1037 +mem/0: storing 1037 in location 1083 +run/0: instruction print-character/12 +run/0: {name: "cursor", value: 8, type: 2-4, properties: ["cursor": "address":"character", "deref": ]} <- copy {name: "c", value: 2, type: 4, properties: ["c": "character"]} +run/0: ingredient 0 is c +mem/0: location 1077 is 97 +mem/0: location 1083 is 1037 +mem/0: storing 97 in location 1037 +run/0: instruction print-character/14 +run/0: {name: "at-right?", value: 9, type: 3, properties: ["at-right?": "boolean"]} <- equal {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "width", value: 5, type: 1, properties: ["width": "integer"]} +run/0: ingredient 0 is column +mem/0: location 1079 is 1034 +mem/0: location 1034 is 0 +run/0: ingredient 1 is width +mem/0: location 1080 is 3 +run/0: product 0 is 0 +mem/0: storing 0 in location 1084 +run/0: instruction print-character/15 +run/0: break-if {name: "at-right?", value: 9, type: 3, properties: ["at-right?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]} +mem/0: location 1084 is 0 +run/0: ingredient 0 is 0 +run/0: jump-if fell through +run/0: instruction print-character/16 +run/0: {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]} <- add {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]} +run/0: ingredient 0 is column +mem/0: location 1079 is 1034 +mem/0: location 1034 is 0 +run/0: ingredient 1 is 1 +run/0: product 0 is 1 +mem/0: location 1079 is 1034 +mem/0: storing 1 in location 1034 +run/0: instruction print-character/18 +run/0: reply {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "same-as-ingredient": "0"]} +mem/0: location 1076 is 1031 +run/0: result 0 is 1031 +mem/0: storing 1031 in location 1 +run/0: instruction test-clear-line-erases-printed-characters/2 +run/0: {name: "1", value: 1, type: 2-11, properties: ["1": "address":"screen"]} <- move-cursor {name: "1", value: 1, type: 2-11, properties: ["1": "address":"screen"]}, {name: "0", value: 0, type: 0, properties: ["0": "literal", "row": ]}, {name: "0", value: 0, type: 0, properties: ["0": "literal", "column": ]} +mem/0: location 1 is 1031 +run/0: instruction move-cursor/0 +run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]} +mem/0: array size is 30 +mem/0: new alloc: 1105 +run/0: instruction move-cursor/1 +run/0: {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]} <- next-ingredient +run/0: product 0 is 1031 +mem/0: storing 1031 in location 1107 +run/0: instruction move-cursor/2 +run/0: {name: "new-row", value: 2, type: 1, properties: ["new-row": "integer"]} <- next-ingredient +run/0: product 0 is 0 +mem/0: storing 0 in location 1108 +run/0: instruction move-cursor/3 +run/0: {name: "new-column", value: 3, type: 1, properties: ["new-column": "integer"]} <- next-ingredient +run/0: product 0 is 0 +mem/0: storing 0 in location 1109 +run/0: instruction move-cursor/5 +run/0: break-unless {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: "", value: 5, type: , properties: ["": ]} +mem/0: location 1107 is 1031 +run/0: ingredient 0 is 1031 +run/0: jump-unless fell through +run/0: instruction move-cursor/6 +run/0: {name: "row", value: 4, type: 2-1, properties: ["row": "address":"integer"]} <- get-address {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-row", value: 2, type: 0, properties: ["cursor-row": "offset"]} +run/0: ingredient 0 is x +mem/0: location 1107 is 1031 +run/0: ingredient 1 is cursor-row +run/0: address to copy is 1033 +run/0: product 0 is 1033 +mem/0: storing 1033 in location 1110 +run/0: instruction move-cursor/7 +run/0: {name: "row", value: 4, type: 2-1, properties: ["row": "address":"integer", "deref": ]} <- copy {name: "new-row", value: 2, type: 1, properties: ["new-row": "integer"]} +run/0: ingredient 0 is new-row +mem/0: location 1108 is 0 +mem/0: location 1110 is 1033 +mem/0: storing 0 in location 1033 +run/0: instruction move-cursor/8 +run/0: {name: "column", value: 5, type: 2-1, properties: ["column": "address":"integer"]} <- get-address {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-column", value: 3, type: 0, properties: ["cursor-column": "offset"]} +run/0: ingredient 0 is x +mem/0: location 1107 is 1031 +run/0: ingredient 1 is cursor-column +run/0: address to copy is 1034 +run/0: product 0 is 1034 +mem/0: storing 1034 in location 1111 +run/0: instruction move-cursor/9 +run/0: {name: "column", value: 5, type: 2-1, properties: ["column": "address":"integer", "deref": ]} <- copy {name: "new-column", value: 3, type: 1, properties: ["new-column": "integer"]} +run/0: ingredient 0 is new-column +mem/0: location 1109 is 0 +mem/0: location 1111 is 1034 +mem/0: storing 0 in location 1034 +run/0: instruction move-cursor/10 +run/0: reply {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "same-as-ingredient": "0"]} +mem/0: location 1107 is 1031 +run/0: result 0 is 1031 +mem/0: storing 1031 in location 1 +run/0: instruction test-clear-line-erases-printed-characters/3 +run/0: {name: "1", value: 1, type: 2-11, properties: ["1": "address":"screen"]} <- clear-line {name: "1", value: 1, type: 2-11, properties: ["1": "address":"screen"]} +mem/0: location 1 is 1031 +run/0: instruction clear-line/0 +run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]} +mem/0: array size is 30 +mem/0: new alloc: 1136 +run/0: instruction clear-line/1 +run/0: {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]} <- next-ingredient +run/0: product 0 is 1031 +mem/0: storing 1031 in location 1138 +run/0: instruction clear-line/3 +run/0: break-unless {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: "", value: 11, type: , properties: ["": ]} +mem/0: location 1138 is 1031 +run/0: ingredient 0 is 1031 +run/0: jump-unless fell through +run/0: instruction clear-line/4 +run/0: {name: "n", value: 2, type: 1, properties: ["n": "integer"]} <- get {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "num-columns", value: 1, type: 0, properties: ["num-columns": "offset"]} +run/0: ingredient 0 is x +mem/0: location 1138 is 1031 +run/0: ingredient 1 is num-columns +run/0: address to copy is 1032 +run/0: its type is 1 +mem/0: location 1032 is 3 +run/0: product 0 is 3 +mem/0: storing 3 in location 1139 +run/0: instruction clear-line/5 +run/0: {name: "column", value: 3, type: 2-1, properties: ["column": "address":"integer"]} <- get-address {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-column", value: 3, type: 0, properties: ["cursor-column": "offset"]} +run/0: ingredient 0 is x +mem/0: location 1138 is 1031 +run/0: ingredient 1 is cursor-column +run/0: address to copy is 1034 +run/0: product 0 is 1034 +mem/0: storing 1034 in location 1140 +run/0: instruction clear-line/6 +run/0: {name: "original-column", value: 4, type: 1, properties: ["original-column": "integer"]} <- copy {name: "column", value: 3, type: 2-1, properties: ["column": "address":"integer", "deref": ]} +run/0: ingredient 0 is column +mem/0: location 1140 is 1034 +mem/0: location 1034 is 0 +mem/0: storing 0 in location 1141 +run/0: instruction clear-line/8 +run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal {name: "column", value: 3, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "n", value: 2, type: 1, properties: ["n": "integer"]} +run/0: ingredient 0 is column +mem/0: location 1140 is 1034 +mem/0: location 1034 is 0 +run/0: ingredient 1 is n +mem/0: location 1139 is 3 +run/0: product 0 is 0 +mem/0: storing 0 in location 1142 +run/0: instruction clear-line/9 +run/0: break-if {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]} +mem/0: location 1142 is 0 +run/0: ingredient 0 is 0 +run/0: jump-if fell through +run/0: instruction clear-line/10 +run/0: print-character {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]} +mem/0: location 1138 is 1031 +run/0: instruction print-character/0 +run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]} +mem/0: array size is 30 +mem/0: new alloc: 1167 +run/0: instruction print-character/1 +run/0: {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]} <- next-ingredient +run/0: product 0 is 1031 +mem/0: storing 1031 in location 1169 +run/0: instruction print-character/2 +run/0: {name: "c", value: 2, type: 4, properties: ["c": "character"]} <- next-ingredient +run/0: product 0 is 0 +mem/0: storing 0 in location 1170 +run/0: instruction print-character/4 +run/0: break-unless {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: "", value: 14, type: , properties: ["": ]} +mem/0: location 1169 is 1031 +run/0: ingredient 0 is 1031 +run/0: jump-unless fell through +run/0: instruction print-character/5 +run/0: {name: "row", value: 3, type: 2-1, properties: ["row": "address":"integer"]} <- get-address {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-row", value: 2, type: 0, properties: ["cursor-row": "offset"]} +run/0: ingredient 0 is x +mem/0: location 1169 is 1031 +run/0: ingredient 1 is cursor-row +run/0: address to copy is 1033 +run/0: product 0 is 1033 +mem/0: storing 1033 in location 1171 +run/0: instruction print-character/6 +run/0: {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer"]} <- get-address {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-column", value: 3, type: 0, properties: ["cursor-column": "offset"]} +run/0: ingredient 0 is x +mem/0: location 1169 is 1031 +run/0: ingredient 1 is cursor-column +run/0: address to copy is 1034 +run/0: product 0 is 1034 +mem/0: storing 1034 in location 1172 +run/0: instruction print-character/7 +run/0: {name: "width", value: 5, type: 1, properties: ["width": "integer"]} <- get {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "num-columns", value: 1, type: 0, properties: ["num-columns": "offset"]} +run/0: ingredient 0 is x +mem/0: location 1169 is 1031 +run/0: ingredient 1 is num-columns +run/0: address to copy is 1032 +run/0: its type is 1 +mem/0: location 1032 is 3 +run/0: product 0 is 3 +mem/0: storing 3 in location 1173 +run/0: instruction print-character/8 +run/0: {name: "index", value: 6, type: 1, properties: ["index": "integer"]} <- multiply {name: "row", value: 3, type: 2-1, properties: ["row": "address":"integer", "deref": ]}, {name: "width", value: 5, type: 1, properties: ["width": "integer"]} +run/0: ingredient 0 is row +mem/0: location 1171 is 1033 +mem/0: location 1033 is 0 +run/0: ingredient 1 is width +mem/0: location 1173 is 3 +run/0: ingredient 1 is 3 +run/0: product 0 is 0 +mem/0: storing 0 in location 1174 +run/0: instruction print-character/9 +run/0: {name: "index", value: 6, type: 1, properties: ["index": "integer"]} <- add {name: "index", value: 6, type: 1, properties: ["index": "integer"]}, {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]} +run/0: ingredient 0 is index +mem/0: location 1174 is 0 +run/0: ingredient 1 is column +mem/0: location 1172 is 1034 +mem/0: location 1034 is 0 +run/0: product 0 is 0 +mem/0: storing 0 in location 1174 +run/0: instruction print-character/10 +run/0: {name: "buf", value: 7, type: 2-5-4, properties: ["buf": "address":"array":"character"]} <- get {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "data", value: 4, type: 0, properties: ["data": "offset"]} +run/0: ingredient 0 is x +mem/0: location 1169 is 1031 +run/0: ingredient 1 is data +run/0: address to copy is 1035 +run/0: its type is 2 +mem/0: location 1035 is 1036 +run/0: product 0 is 1036 +mem/0: storing 1036 in location 1175 +run/0: instruction print-character/11 +run/0: {name: "cursor", value: 8, type: 2-4, properties: ["cursor": "address":"character"]} <- index-address {name: "buf", value: 7, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "index", value: 6, type: 1, properties: ["index": "integer"]} +run/0: ingredient 0 is buf +mem/0: location 1175 is 1036 +run/0: ingredient 1 is {name: "index", value: 6, type: 1, properties: ["index": "integer"]} +mem/0: location 1174 is 0 +run/0: address to copy is 1037 +run/0: product 0 is 1037 +mem/0: storing 1037 in location 1176 +run/0: instruction print-character/12 +run/0: {name: "cursor", value: 8, type: 2-4, properties: ["cursor": "address":"character", "deref": ]} <- copy {name: "c", value: 2, type: 4, properties: ["c": "character"]} +run/0: ingredient 0 is c +mem/0: location 1170 is 0 +mem/0: location 1176 is 1037 +mem/0: storing 0 in location 1037 +run/0: instruction print-character/14 +run/0: {name: "at-right?", value: 9, type: 3, properties: ["at-right?": "boolean"]} <- equal {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "width", value: 5, type: 1, properties: ["width": "integer"]} +run/0: ingredient 0 is column +mem/0: location 1172 is 1034 +mem/0: location 1034 is 0 +run/0: ingredient 1 is width +mem/0: location 1173 is 3 +run/0: product 0 is 0 +mem/0: storing 0 in location 1177 +run/0: instruction print-character/15 +run/0: break-if {name: "at-right?", value: 9, type: 3, properties: ["at-right?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]} +mem/0: location 1177 is 0 +run/0: ingredient 0 is 0 +run/0: jump-if fell through +run/0: instruction print-character/16 +run/0: {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]} <- add {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]} +run/0: ingredient 0 is column +mem/0: location 1172 is 1034 +mem/0: location 1034 is 0 +run/0: ingredient 1 is 1 +run/0: product 0 is 1 +mem/0: location 1172 is 1034 +mem/0: storing 1 in location 1034 +run/0: instruction print-character/18 +run/0: reply {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "same-as-ingredient": "0"]} +mem/0: location 1169 is 1031 +run/0: instruction clear-line/11 +run/0: loop {name: "", value: -4, type: , properties: ["": ]} +run/0: ingredient 0 is -4 +run/0: jumping to instruction 8 +run/0: instruction clear-line/8 +run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal {name: "column", value: 3, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "n", value: 2, type: 1, properties: ["n": "integer"]} +run/0: ingredient 0 is column +mem/0: location 1140 is 1034 +mem/0: location 1034 is 1 +run/0: ingredient 1 is n +mem/0: location 1139 is 3 +run/0: product 0 is 0 +mem/0: storing 0 in location 1142 +run/0: instruction clear-line/9 +run/0: break-if {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]} +mem/0: location 1142 is 0 +run/0: ingredient 0 is 0 +run/0: jump-if fell through +run/0: instruction clear-line/10 +run/0: print-character {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]} +mem/0: location 1138 is 1031 +run/0: instruction print-character/0 +run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]} +mem/0: array size is 30 +mem/0: new alloc: 1198 +run/0: instruction print-character/1 +run/0: {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]} <- next-ingredient +run/0: product 0 is 1031 +mem/0: storing 1031 in location 1200 +run/0: instruction print-character/2 +run/0: {name: "c", value: 2, type: 4, properties: ["c": "character"]} <- next-ingredient +run/0: product 0 is 0 +mem/0: storing 0 in location 1201 +run/0: instruction print-character/4 +run/0: break-unless {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: "", value: 14, type: , properties: ["": ]} +mem/0: location 1200 is 1031 +run/0: ingredient 0 is 1031 +run/0: jump-unless fell through +run/0: instruction print-character/5 +run/0: {name: "row", value: 3, type: 2-1, properties: ["row": "address":"integer"]} <- get-address {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-row", value: 2, type: 0, properties: ["cursor-row": "offset"]} +run/0: ingredient 0 is x +mem/0: location 1200 is 1031 +run/0: ingredient 1 is cursor-row +run/0: address to copy is 1033 +run/0: product 0 is 1033 +mem/0: storing 1033 in location 1202 +run/0: instruction print-character/6 +run/0: {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer"]} <- get-address {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-column", value: 3, type: 0, properties: ["cursor-column": "offset"]} +run/0: ingredient 0 is x +mem/0: location 1200 is 1031 +run/0: ingredient 1 is cursor-column +run/0: address to copy is 1034 +run/0: product 0 is 1034 +mem/0: storing 1034 in location 1203 +run/0: instruction print-character/7 +run/0: {name: "width", value: 5, type: 1, properties: ["width": "integer"]} <- get {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "num-columns", value: 1, type: 0, properties: ["num-columns": "offset"]} +run/0: ingredient 0 is x +mem/0: location 1200 is 1031 +run/0: ingredient 1 is num-columns +run/0: address to copy is 1032 +run/0: its type is 1 +mem/0: location 1032 is 3 +run/0: product 0 is 3 +mem/0: storing 3 in location 1204 +run/0: instruction print-character/8 +run/0: {name: "index", value: 6, type: 1, properties: ["index": "integer"]} <- multiply {name: "row", value: 3, type: 2-1, properties: ["row": "address":"integer", "deref": ]}, {name: "width", value: 5, type: 1, properties: ["width": "integer"]} +run/0: ingredient 0 is row +mem/0: location 1202 is 1033 +mem/0: location 1033 is 0 +run/0: ingredient 1 is width +mem/0: location 1204 is 3 +run/0: ingredient 1 is 3 +run/0: product 0 is 0 +mem/0: storing 0 in location 1205 +run/0: instruction print-character/9 +run/0: {name: "index", value: 6, type: 1, properties: ["index": "integer"]} <- add {name: "index", value: 6, type: 1, properties: ["index": "integer"]}, {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]} +run/0: ingredient 0 is index +mem/0: location 1205 is 0 +run/0: ingredient 1 is column +mem/0: location 1203 is 1034 +mem/0: location 1034 is 1 +run/0: product 0 is 1 +mem/0: storing 1 in location 1205 +run/0: instruction print-character/10 +run/0: {name: "buf", value: 7, type: 2-5-4, properties: ["buf": "address":"array":"character"]} <- get {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "data", value: 4, type: 0, properties: ["data": "offset"]} +run/0: ingredient 0 is x +mem/0: location 1200 is 1031 +run/0: ingredient 1 is data +run/0: address to copy is 1035 +run/0: its type is 2 +mem/0: location 1035 is 1036 +run/0: product 0 is 1036 +mem/0: storing 1036 in location 1206 +run/0: instruction print-character/11 +run/0: {name: "cursor", value: 8, type: 2-4, properties: ["cursor": "address":"character"]} <- index-address {name: "buf", value: 7, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "index", value: 6, type: 1, properties: ["index": "integer"]} +run/0: ingredient 0 is buf +mem/0: location 1206 is 1036 +run/0: ingredient 1 is {name: "index", value: 6, type: 1, properties: ["index": "integer"]} +mem/0: location 1205 is 1 +run/0: address to copy is 1038 +run/0: product 0 is 1038 +mem/0: storing 1038 in location 1207 +run/0: instruction print-character/12 +run/0: {name: "cursor", value: 8, type: 2-4, properties: ["cursor": "address":"character", "deref": ]} <- copy {name: "c", value: 2, type: 4, properties: ["c": "character"]} +run/0: ingredient 0 is c +mem/0: location 1201 is 0 +mem/0: location 1207 is 1038 +mem/0: storing 0 in location 1038 +run/0: instruction print-character/14 +run/0: {name: "at-right?", value: 9, type: 3, properties: ["at-right?": "boolean"]} <- equal {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "width", value: 5, type: 1, properties: ["width": "integer"]} +run/0: ingredient 0 is column +mem/0: location 1203 is 1034 +mem/0: location 1034 is 1 +run/0: ingredient 1 is width +mem/0: location 1204 is 3 +run/0: product 0 is 0 +mem/0: storing 0 in location 1208 +run/0: instruction print-character/15 +run/0: break-if {name: "at-right?", value: 9, type: 3, properties: ["at-right?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]} +mem/0: location 1208 is 0 +run/0: ingredient 0 is 0 +run/0: jump-if fell through +run/0: instruction print-character/16 +run/0: {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]} <- add {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]} +run/0: ingredient 0 is column +mem/0: location 1203 is 1034 +mem/0: location 1034 is 1 +run/0: ingredient 1 is 1 +run/0: product 0 is 2 +mem/0: location 1203 is 1034 +mem/0: storing 2 in location 1034 +run/0: instruction print-character/18 +run/0: reply {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "same-as-ingredient": "0"]} +mem/0: location 1200 is 1031 +run/0: instruction clear-line/11 +run/0: loop {name: "", value: -4, type: , properties: ["": ]} +run/0: ingredient 0 is -4 +run/0: jumping to instruction 8 +run/0: instruction clear-line/8 +run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal {name: "column", value: 3, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "n", value: 2, type: 1, properties: ["n": "integer"]} +run/0: ingredient 0 is column +mem/0: location 1140 is 1034 +mem/0: location 1034 is 2 +run/0: ingredient 1 is n +mem/0: location 1139 is 3 +run/0: product 0 is 0 +mem/0: storing 0 in location 1142 +run/0: instruction clear-line/9 +run/0: break-if {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]} +mem/0: location 1142 is 0 +run/0: ingredient 0 is 0 +run/0: jump-if fell through +run/0: instruction clear-line/10 +run/0: print-character {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: " ", value: 0, type: 0, properties: [" ": "literal-string"]} +mem/0: location 1138 is 1031 +run/0: instruction print-character/0 +run/0: {name: "default-space", value: 0, type: 2-5-1, properties: ["default-space": "address":"array":"location"]} <- new {name: "location", value: 1, type: 0, properties: ["location": "type"]}, {name: "30", value: 30, type: 0, properties: ["30": "literal"]} +mem/0: array size is 30 +mem/0: new alloc: 1229 +run/0: instruction print-character/1 +run/0: {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]} <- next-ingredient +run/0: product 0 is 1031 +mem/0: storing 1031 in location 1231 +run/0: instruction print-character/2 +run/0: {name: "c", value: 2, type: 4, properties: ["c": "character"]} <- next-ingredient +run/0: product 0 is 0 +mem/0: storing 0 in location 1232 +run/0: instruction print-character/4 +run/0: break-unless {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen"]}, {name: "", value: 14, type: , properties: ["": ]} +mem/0: location 1231 is 1031 +run/0: ingredient 0 is 1031 +run/0: jump-unless fell through +run/0: instruction print-character/5 +run/0: {name: "row", value: 3, type: 2-1, properties: ["row": "address":"integer"]} <- get-address {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-row", value: 2, type: 0, properties: ["cursor-row": "offset"]} +run/0: ingredient 0 is x +mem/0: location 1231 is 1031 +run/0: ingredient 1 is cursor-row +run/0: address to copy is 1033 +run/0: product 0 is 1033 +mem/0: storing 1033 in location 1233 +run/0: instruction print-character/6 +run/0: {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer"]} <- get-address {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "cursor-column", value: 3, type: 0, properties: ["cursor-column": "offset"]} +run/0: ingredient 0 is x +mem/0: location 1231 is 1031 +run/0: ingredient 1 is cursor-column +run/0: address to copy is 1034 +run/0: product 0 is 1034 +mem/0: storing 1034 in location 1234 +run/0: instruction print-character/7 +run/0: {name: "width", value: 5, type: 1, properties: ["width": "integer"]} <- get {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "num-columns", value: 1, type: 0, properties: ["num-columns": "offset"]} +run/0: ingredient 0 is x +mem/0: location 1231 is 1031 +run/0: ingredient 1 is num-columns +run/0: address to copy is 1032 +run/0: its type is 1 +mem/0: location 1032 is 3 +run/0: product 0 is 3 +mem/0: storing 3 in location 1235 +run/0: instruction print-character/8 +run/0: {name: "index", value: 6, type: 1, properties: ["index": "integer"]} <- multiply {name: "row", value: 3, type: 2-1, properties: ["row": "address":"integer", "deref": ]}, {name: "width", value: 5, type: 1, properties: ["width": "integer"]} +run/0: ingredient 0 is row +mem/0: location 1233 is 1033 +mem/0: location 1033 is 0 +run/0: ingredient 1 is width +mem/0: location 1235 is 3 +run/0: ingredient 1 is 3 +run/0: product 0 is 0 +mem/0: storing 0 in location 1236 +run/0: instruction print-character/9 +run/0: {name: "index", value: 6, type: 1, properties: ["index": "integer"]} <- add {name: "index", value: 6, type: 1, properties: ["index": "integer"]}, {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]} +run/0: ingredient 0 is index +mem/0: location 1236 is 0 +run/0: ingredient 1 is column +mem/0: location 1234 is 1034 +mem/0: location 1034 is 2 +run/0: product 0 is 2 +mem/0: storing 2 in location 1236 +run/0: instruction print-character/10 +run/0: {name: "buf", value: 7, type: 2-5-4, properties: ["buf": "address":"array":"character"]} <- get {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "deref": ]}, {name: "data", value: 4, type: 0, properties: ["data": "offset"]} +run/0: ingredient 0 is x +mem/0: location 1231 is 1031 +run/0: ingredient 1 is data +run/0: address to copy is 1035 +run/0: its type is 2 +mem/0: location 1035 is 1036 +run/0: product 0 is 1036 +mem/0: storing 1036 in location 1237 +run/0: instruction print-character/11 +run/0: {name: "cursor", value: 8, type: 2-4, properties: ["cursor": "address":"character"]} <- index-address {name: "buf", value: 7, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}, {name: "index", value: 6, type: 1, properties: ["index": "integer"]} +run/0: ingredient 0 is buf +mem/0: location 1237 is 1036 +run/0: ingredient 1 is {name: "index", value: 6, type: 1, properties: ["index": "integer"]} +mem/0: location 1236 is 2 +run/0: address to copy is 1039 +run/0: product 0 is 1039 +mem/0: storing 1039 in location 1238 +run/0: instruction print-character/12 +run/0: {name: "cursor", value: 8, type: 2-4, properties: ["cursor": "address":"character", "deref": ]} <- copy {name: "c", value: 2, type: 4, properties: ["c": "character"]} +run/0: ingredient 0 is c +mem/0: location 1232 is 0 +mem/0: location 1238 is 1039 +mem/0: storing 0 in location 1039 +run/0: instruction print-character/14 +run/0: {name: "at-right?", value: 9, type: 3, properties: ["at-right?": "boolean"]} <- equal {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "width", value: 5, type: 1, properties: ["width": "integer"]} +run/0: ingredient 0 is column +mem/0: location 1234 is 1034 +mem/0: location 1034 is 2 +run/0: ingredient 1 is width +mem/0: location 1235 is 3 +run/0: product 0 is 0 +mem/0: storing 0 in location 1239 +run/0: instruction print-character/15 +run/0: break-if {name: "at-right?", value: 9, type: 3, properties: ["at-right?": "boolean"]}, {name: "", value: 1, type: , properties: ["": ]} +mem/0: location 1239 is 0 +run/0: ingredient 0 is 0 +run/0: jump-if fell through +run/0: instruction print-character/16 +run/0: {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]} <- add {name: "column", value: 4, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "1", value: 1, type: 0, properties: ["1": "literal"]} +run/0: ingredient 0 is column +mem/0: location 1234 is 1034 +mem/0: location 1034 is 2 +run/0: ingredient 1 is 1 +run/0: product 0 is 3 +mem/0: location 1234 is 1034 +mem/0: storing 3 in location 1034 +run/0: instruction print-character/18 +run/0: reply {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "same-as-ingredient": "0"]} +mem/0: location 1231 is 1031 +run/0: instruction clear-line/11 +run/0: loop {name: "", value: -4, type: , properties: ["": ]} +run/0: ingredient 0 is -4 +run/0: jumping to instruction 8 +run/0: instruction clear-line/8 +run/0: {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]} <- greater-or-equal {name: "column", value: 3, type: 2-1, properties: ["column": "address":"integer", "deref": ]}, {name: "n", value: 2, type: 1, properties: ["n": "integer"]} +run/0: ingredient 0 is column +mem/0: location 1140 is 1034 +mem/0: location 1034 is 3 +run/0: ingredient 1 is n +mem/0: location 1139 is 3 +run/0: product 0 is 1 +mem/0: storing 1 in location 1142 +run/0: instruction clear-line/9 +run/0: break-if {name: "done?", value: 5, type: 3, properties: ["done?": "boolean"]}, {name: "", value: 2, type: , properties: ["": ]} +mem/0: location 1142 is 1 +run/0: ingredient 0 is 1 +run/0: ingredient 1 is +run/0: jumping to instruction 12 +run/0: instruction clear-line/13 +run/0: {name: "column", value: 3, type: 2-1, properties: ["column": "address":"integer", "deref": ]} <- copy {name: "original-column", value: 4, type: 1, properties: ["original-column": "integer"]} +run/0: ingredient 0 is original-column +mem/0: location 1141 is 0 +mem/0: location 1140 is 1034 +mem/0: storing 0 in location 1034 +run/0: instruction clear-line/14 +run/0: reply {name: "x", value: 1, type: 2-11, properties: ["x": "address":"screen", "same-as-ingredient": "0"]} +mem/0: location 1138 is 1031 +run/0: result 0 is 1031 +mem/0: storing 1031 in location 1 +run/0: instruction test-clear-line-erases-printed-characters/4 +run/0: {name: "2", value: 2, type: 2-5-4, properties: ["2": "address":"array":"character"]} <- get {name: "1", value: 1, type: 2-11, properties: ["1": "address":"screen", "deref": ]}, {name: "data", value: 4, type: 0, properties: ["data": "offset"]} +run/0: ingredient 0 is 1 +mem/0: location 1 is 1031 +run/0: ingredient 1 is data +run/0: address to copy is 1035 +run/0: its type is 2 +mem/0: location 1035 is 1036 +run/0: product 0 is 1036 +mem/0: storing 1036 in location 2 +run/0: instruction test-clear-line-erases-printed-characters/5 +run/0: {name: "3", value: 3, type: 5-4, properties: ["3": "array":"character"]} <- copy {name: "2", value: 2, type: 2-5-4, properties: ["2": "address":"array":"character", "deref": ]} +run/0: ingredient 0 is 2 +mem/0: location 2 is 1036 +mem/0: location 1036 is 6 +mem/0: location 1037 is 0 +mem/0: location 1038 is 0 +mem/0: location 1039 is 0 +mem/0: location 1040 is 0 +mem/0: location 1041 is 0 +mem/0: location 1042 is 0 +mem/0: storing 6 in location 3 +mem/0: storing 0 in location 4 +mem/0: storing 0 in location 5 +mem/0: storing 0 in location 6 +mem/0: storing 0 in location 7 +mem/0: storing 0 in location 8 +mem/0: storing 0 in location 9 diff --git a/cpp/071print.mu b/cpp/071print.mu index bd7f2411..b34f9844 100644 --- a/cpp/071print.mu +++ b/cpp/071print.mu @@ -154,6 +154,31 @@ recipe move-cursor [ reply x:address:screen/same-as-ingredient:0 ] +scenario clear-line-erases-printed-characters [ + run [ +#? $start-tracing #? 3 + 1:address:screen <- init-fake-screen 3:literal/width, 2:literal/height + # print a character + 1:address:screen <- print-character 1:address:screen, 97:literal # 'a' + # move cursor to start of line + 1:address:screen <- move-cursor 1:address:screen, 0:literal/row, 0:literal/column + # clear line + 1:address:screen <- clear-line 1:address:screen + 2:address:array:character <- get 1:address:screen/deref, data:offset + 3:array:character <- copy 2:address:array:character/deref + ] + # screen should be blank + memory should contain [ + 3 <- 6 # width*height + 4 <- 0 + 5 <- 0 + 6 <- 0 + 7 <- 0 + 8 <- 0 + 9 <- 0 + ] +] + recipe cursor-down [ default-space:address:array:location <- new location:type, 30:literal x:address:screen <- next-ingredient |