about summary refs log tree commit diff stats
path: root/prototypes
diff options
context:
space:
mode:
authorKartik Agaram <vc@akkartik.com>2020-07-14 04:34:21 -0700
committerKartik Agaram <vc@akkartik.com>2020-07-14 04:34:21 -0700
commit32b904728a71e7588e79fbddbcd370815883723b (patch)
treef9364f6d2ef515021e85d68980e673f6835f70f4 /prototypes
parent5e0ae917d07740b9a06f3255591245acfcd9389e (diff)
downloadmu-32b904728a71e7588e79fbddbcd370815883723b.tar.gz
6646 - in-progress prototype: tree editor
Diffstat (limited to 'prototypes')
-rw-r--r--prototypes/tile/5.mu111
1 files changed, 111 insertions, 0 deletions
diff --git a/prototypes/tile/5.mu b/prototypes/tile/5.mu
new file mode 100644
index 00000000..a41589cb
--- /dev/null
+++ b/prototypes/tile/5.mu
@@ -0,0 +1,111 @@
+type cell {
+  val: int  # single chars only for now
+  parent: (handle cell)
+  first-child: (handle cell)
+  next-sibling: (handle cell)
+  prev-sibling: (handle cell)
+}
+
+fn main -> exit-status/ebx: int {
+  var root-handle: (handle cell)
+  var root/esi: (addr handle cell) <- address root-handle
+  allocate root
+  var cursor/edi: (addr handle cell) <- copy root
+  enable-keyboard-immediate-mode
+  var root-addr/eax: (addr cell) <- lookup *root
+  render root-addr
+$main:loop: {
+    # process key
+    {
+      var c/eax: byte <- read-key
+      compare c, 4  # ctrl-d
+      break-if-= $main:loop
+      process c, root, cursor
+    }
+    # render tree
+    root-addr <- lookup root-handle
+    render root-addr
+    loop
+  }
+  clear-screen
+  enable-keyboard-type-mode
+  exit-status <- copy 0
+}
+
+#######################################################
+# Tree mutations
+#######################################################
+
+fn process c: byte, root: (addr handle cell), cursor: (addr handle cell) {
+  create-child cursor
+}
+
+fn create-child cursor: (addr handle cell) {
+  
+}
+
+#######################################################
+# Tree drawing
+#######################################################
+
+fn render root: (addr cell) {
+  clear-screen
+  var depth/eax: int <- tree-depth root
+  draw-box 5, 5, 0x23, 0x23  # 35, 35
+  move-cursor-on-screen 0x10, 0x10
+  print-int32-hex-to-screen depth
+}
+
+fn tree-depth node-on-stack: (addr cell) -> result/eax: int {
+  var tmp-result/edi: int <- copy 0
+  var node/eax: (addr cell) <- copy node-on-stack
+  var child/ecx: (addr handle cell) <- get node, first-child
+  var child-addr/eax: (addr cell) <- lookup *child
+  {
+    compare child-addr, 0
+    break-if-=
+    {
+      var tmp/eax: int <- tree-depth child-addr
+      compare tmp, tmp-result
+      break-if-<=
+      tmp-result <- copy tmp
+    }
+    child <- get child-addr, next-sibling
+    child-addr <- lookup *child
+    loop
+  }
+  result <- copy tmp-result
+  result <- increment
+}
+
+fn draw-box row1: int, col1: int, row2: int, col2: int {
+  clear-screen
+  draw-horizontal-line row1, col1, col2
+  draw-vertical-line row1, row2, col1
+  draw-horizontal-line row2, col1, col2
+  draw-vertical-line row1, row2, col2
+}
+
+fn draw-horizontal-line row: int, col1: int, col2: int {
+  var col/eax: int <- copy col1
+  move-cursor-on-screen row, col
+  {
+    compare col, col2
+    break-if->=
+    print-string-to-screen "-"
+    col <- increment
+    loop
+  }
+}
+
+fn draw-vertical-line row1: int, row2: int, col: int {
+  var row/eax: int <- copy row1
+  {
+    compare row, row2
+    break-if->=
+    move-cursor-on-screen row, col
+    print-string-to-screen "|"
+    row <- increment
+    loop
+  }
+}
14b9626f5892c441c871b1088ef3d60f06a9bf'>^
26a18498 ^
2e069918 ^




26a18498 ^
613b1d57 ^







0749772b ^
1a1a1671 ^

0749772b ^





1a1a1671 ^

0749772b ^


60ef3caa ^

2e069918 ^
60ef3caa ^
2e069918 ^


613b1d57 ^





60ef3caa ^

0749772b ^
0749772b ^
d4191729 ^

60ef3caa ^
2e069918 ^


613b1d57 ^






c414b962 ^
2e069918 ^
c414b962 ^

d4191729 ^


60ef3caa ^



0749772b ^


2e069918 ^
1a1a1671 ^

0749772b ^


2e069918 ^
0749772b ^










3ce95116 ^
2e069918 ^
1211a47e ^


48d439d1 ^
1211a47e ^





1a1a1671 ^

1211a47e ^





124be197 ^
03178cde ^
03178cde ^
1211a47e ^

31a31570 ^


1211a47e ^

31a31570 ^

03178cde ^

1211a47e ^

124be197 ^
1211a47e ^







1211a47e ^



c4f43035 ^
613b1d57 ^


































1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228