https://github.com/akkartik/mu/blob/main/signatures.mu
  1 sig pixel-on-real-screen x: int, y: int, color: int
  2 sig draw-code-point-on-real-screen c: code-point, x: int, y: int, color: int, background-color: int -> _/eax: int
  3 sig overlay-code-point-on-real-screen c: code-point, x: int, y: int, color: int, background-color: int -> _/eax: int
  4 sig draw-code-point-on-screen-array screen-data: (addr array byte), c: code-point, x: int, y: int, color: int, background-color: int, screen-width: int, screen-height: int -> _/eax: int
  5 sig wide-code-point? c: code-point -> _/eax: boolean
  6 sig combining-code-point? c: code-point -> _/eax: boolean
  7 sig cursor-position-on-real-screen -> _/eax: int, _/ecx: int
  8 sig set-cursor-position-on-real-screen x: int, y: int
  9 sig draw-cursor-on-real-screen c: code-point
 10 sig color-rgb color: int -> _/ecx: int, _/edx: int, _/ebx: int
 11 sig timer-counter -> _/eax: int
 12 sig read-key kbd: (addr keyboard) -> _/eax: byte
 13 sig read-ata-disk disk: (addr disk), lba: int, n: int, out: (addr stream byte)
 14 sig write-ata-disk disk: (addr disk), lba: int, n: int, out: (addr stream byte)
 15 sig read-mouse-event -> _/eax: int, _/ecx: int
 16 sig count-test-failure
 17 sig num-test-failures -> _/eax: int
 18 sig running-tests? -> _/eax: boolean
 19 sig string-equal? s: (addr array byte), benchmark: (addr array byte) -> _/eax: boolean
 20 sig string-starts-with? s: (addr array byte), benchmark: (addr array byte) -> _/eax: boolean
 21 sig check-strings-equal s: (addr array byte), expected: (addr array byte), msg: (addr array byte)
 22 sig check-stack
 23 sig show-stack-state
 24 sig debug-print x: (addr array byte), fg: int, bg: int
 25 sig debug-print? -> _/eax: boolean
 26 sig turn-on-debug-print
 27 sig turn-off-debug-print
 28 sig abort e: (addr array byte)
 29 sig dump-call-stack
 30 sig heap-bound -> _/eax: int
 31 sig count-event
 32 sig count-of-events -> _/eax: int
 33 sig clear-stream f: (addr stream _)
 34 sig rewind-stream f: (addr stream _)
 35 sig stream-data-equal? f: (addr stream byte), s: (addr array byte) -> _/eax: boolean
 36 sig streams-data-equal? a: (addr stream byte), b: (addr stream byte) -> _/eax: boolean
 37 sig check-stream-equal f: (addr stream byte), s: (addr array byte), msg: (addr array byte)
 38 sig check-streams-data-equal s: (addr stream _), expected: (addr stream _), msg: (addr array byte)
 39 sig next-stream-line-equal? f: (addr stream byte), s: (addr array byte) -> _/eax: boolean
 40 sig check-next-stream-line-equal f: (addr stream byte), s: (addr array byte), msg: (addr array byte)
 41 sig write f: (addr stream byte), s: (addr array byte)
 42 sig try-write f: (addr stream byte), s: (addr array byte) -> _/eax: boolean
 43 sig stream-size f: (addr stream byte) -> _/eax: int
 44 sig space-remaining-in-stream f: (addr stream byte) -> _/eax: int
 45 sig write-stream f: (addr stream byte), s: (addr stream byte)
 46 sig write-stream-immutable f: (addr stream byte), s: (addr stream byte)
 47 sig read-byte s: (addr stream byte) -> _/eax: byte
 48 sig peek-byte s: (addr stream byte) -> _/eax: byte
 49 sig append-byte f: (addr stream byte), n: int  # really just a byte, but I want to pass in literal numbers
 50 sig undo-append-byte f: (addr stream byte)  # take most recent append back out
 51 sig append-byte-hex f: (addr stream byte), n: int  # really just a byte, but I want to pass in literal numbers
 52 sig write-int32-hex f: (addr stream byte), n: int
 53 sig write-int32-hex-bits f: (addr stream byte), n: int, bits: int
 54 sig hex-int? in: (addr slice) -> _/eax: boolean
 55 sig parse-hex-int in: (addr array byte) -> _/eax: int
 56 sig parse-hex-int-from-slice in: (addr slice) -> _/eax: int
 57 sig hex-digit? c: byte -> _/eax: boolean
 58 sig parse-decimal-int in: (addr array byte) -> _/eax: int
 59 sig parse-decimal-int-from-slice in: (addr slice) -> _/eax: int
 60 sig parse-decimal-int-from-stream in: (addr stream byte) -> _/eax: int
 61 sig decimal-size n: int -> _/eax: int
 62 sig lookup h: (handle _T) -> _/eax: (addr _T)
 63 sig handle-equal? a: (handle _T), b: (handle _T) -> _/eax: boolean
 64 sig copy-handle src: (handle _T), dest: (addr handle _T)
 65 sig copy-array ad: (addr allocation-descriptor), src: (addr array _T), out: (addr handle array _T)
 66 sig slice-empty? s: (addr slice) -> _/eax: boolean
 67 sig slice-equal? s: (addr slice), p: (addr array byte) -> _/eax: boolean
 68 sig slice-starts-with? s: (addr slice), head: (addr array byte) -> _/eax: boolean
 69 sig write-slice out: (addr stream byte), s: (addr slice)
 70 sig slice-to-string ad: (addr allocation-descriptor), in: (addr slice), out: (addr handle array byte)
 71 sig write-int32-decimal out: (addr stream byte), n: int
 72 sig decimal-digit? c: code-point-utf8 -> _/eax: boolean
 73 sig to-decimal-digit in: code-point-utf8 -> _/eax: int
 74 sig next-word line: (addr stream byte), out: (addr slice)  # merges '#' comments into a single word
 75 sig next-raw-word line: (addr stream byte), out: (addr slice)  # does not merge '#' comments
 76 sig skip-chars-matching in: (addr stream byte), delimiter: byte
 77 sig skip-chars-matching-whitespace in: (addr stream byte)
 78 sig skip-chars-not-matching in: (addr stream byte), delimiter: byte
 79 sig skip-chars-not-matching-whitespace in: (addr stream byte)
 80 sig stream-empty? s: (addr stream _) -> _/eax: boolean
 81 sig stream-full? s: (addr stream _) -> _/eax: boolean
 82 sig stream-to-array in: (addr stream _), out: (addr handle array _)
 83 sig unquote-stream-to-array in: (addr stream _), out: (addr handle array _)
 84 sig stream-first s: (addr stream byte) -> _/eax: byte
 85 sig stream-final s: (addr stream byte) -> _/eax: byte
 86 sig copy-array-object src: (addr array _), dest-ah: (addr handle array _)
 87 sig array-equal? a: (addr array int), b: (addr array int) -> _/eax: boolean
 88 sig parse-array-of-ints s: (addr array byte), out: (addr handle array int)
 89 sig parse-array-of-decimal-ints s: (addr array byte), out: (addr handle array int)
 90 sig check-array-equal a: (addr array int), expected: (addr array byte), msg: (addr array byte)
 91 sig integer-divide a: int, b: int -> _/eax: int, _/edx: int
 92 sig to-code-point in: code-point-utf8 -> _/eax: code-point
 93 sig to-utf8 in: code-point -> _/eax: code-point-utf8
 94 sig read-code-point-utf8 in: (addr stream byte) -> _/eax: code-point-utf8
 95 sig utf8-length g: code-point-utf8 -> _/edx: int
 96 sig shift-left-bytes n: int, k: int -> _/eax: int
 97 sig write-code-point-utf8 out: (addr stream byte), g: code-point-utf8
 98 sig fill-in-rational _out: (addr float), nr: int, dr: int
 99 sig fill-in-sqrt _out: (addr float), n: int
100 sig rational nr: int, dr: int -> _/xmm0: float
101 sig scale-down-and-round-up n: int, m: int -> _/ecx: int
102 sig substring in: (addr array byte), start: int, len: int, out-ah: (addr handle array byte)
103 sig split-string in: (addr array byte), delim: code-point-utf8, out: (addr handle array (handle array byte))
104 sig render-float-decimal screen: (addr screen), in: float, precision: int, x: int, y: int, color: int, background-color: int -> _/eax: int
105 sig write-float-decimal-approximate out: (addr stream byte), in: float, precision: int
106 sig decimal-digits n: int, _buf: (addr array byte) -> _/eax: int
107 sig reverse-digits _buf: (addr array byte), n: int
108 sig double-array-of-decimal-digits _buf: (addr array byte), _n: int -> _/eax: int
109 sig halve-array-of-decimal-digits _buf: (addr array byte), _n: int, _dp: int -> _/eax: int, _/edx: int
110 sig _write-float-array-of-decimal-digits out: (addr stream byte), _buf: (addr array byte), n: int, dp: int, precision: int
111 sig _write-float-array-of-decimal-digits-in-scientific-notation out: (addr stream byte), _buf: (addr array byte), n: int, dp: int, precision: int
112 sig float-size in: float, precision: int -> _/eax: int
113 sig initialize-screen _screen: (addr screen), width: int, height: int, pixel-graphics?: boolean
114 sig screen-size _screen: (addr screen) -> _/eax: int, _/ecx: int
115 sig draw-code-point _screen: (addr screen), c: code-point, x: int, y: int, color: int, background-color: int -> _/eax: int
116 sig overlay-code-point _screen: (addr screen), c: code-point, x: int, y: int, color: int, background-color: int -> _/eax: int
117 sig draw-narrow-code-point-on-fake-screen _screen: (addr screen), c: code-point, x: int, y: int, color: int, background-color: int
118 sig draw-wide-code-point-on-fake-screen _screen: (addr screen), c: code-point, x: int, y: int, color: int, background-color: int
119 sig screen-cell-index _screen: (addr screen), x: int, y: int -> _/ecx: int
120 sig cursor-position _screen: (addr screen) -> _/eax: int, _/ecx: int
121 sig set-cursor-position _screen: (addr screen), x: int, y: int
122 sig draw-cursor screen: (addr screen), c: code-point
123 sig clear-screen _screen: (addr screen)
124 sig fake-screen-empty? _screen: (addr screen) -> _/eax: boolean
125 sig clear-rect _screen: (addr screen), xmin: int, ymin: int, xmax: int, ymax: int, background-color: int
126 sig clear-real-screen
127 sig clear-rect-on-real-screen xmin: int, ymin: int, xmax: int, ymax: int, background-color: int
128 sig screen-cell-unused-at? _screen: (addr screen), x: int, y: int -> _/eax: boolean
129 sig screen-cell-unused-at-index? _screen: (addr screen), _index: int -> _/eax: boolean
130 sig screen-code-point-at _screen: (addr screen), x: int, y: int -> _/eax: code-point
131 sig screen-code-point-at-index _screen: (addr screen), _index: int -> _/eax: code-point
132 sig screen-color-at _screen: (addr screen), x: int, y: int -> _/eax: int
133 sig screen-color-at-index _screen: (addr screen), _index: int -> _/eax: int
134 sig screen-background-color-at _screen: (addr screen), x: int, y: int -> _/eax: int
135 sig screen-background-color-at-index _screen: (addr screen), _index: int -> _/eax: int
136 sig pixel screen: (addr screen), x: int, y: int, color: int
137 sig pixel-index _screen: (addr screen), x: int, y: int -> _/ecx: int
138 sig copy-pixels _screen: (addr screen), target-screen: (addr screen)
139 sig convert-screen-cells-to-pixels _screen: (addr screen)
140 sig move-cursor-left screen: (addr screen)
141 sig move-cursor-right screen: (addr screen)
142 sig move-cursor-up screen: (addr screen)
143 sig move-cursor-down screen: (addr screen)
144 sig move-cursor-to-left-margin-of-next-line screen: (addr screen)
145 sig draw-code-point-at-cursor-over-full-screen screen: (addr screen), c: code-point, color: int, background-color: int
146 sig draw-text-rightward screen: (addr screen), text: (addr array byte), x: int, xmax: int, y: int, color: int, background-color: int -> _/eax: int
147 sig draw-stream-rightward screen: (addr screen), stream: (addr stream byte), x: int, xmax: int, y: int, color: int, background-color: int -> _/eax: int
148 sig draw-text-rightward-over-full-screen screen: (addr screen), text: (addr array byte), x: int, y: int, color: int, background-color: int -> _/eax: int
149 sig draw-text-rightward-from-cursor screen: (addr screen), text: (addr array byte), xmax: int, color: int, background-color: int
150 sig draw-text-rightward-from-cursor-over-full-screen screen: (addr screen), text: (addr array byte), color: int, background-color: int
151 sig render-code-point screen: (addr screen), c: code-point, xmin: int, ymin: int, xmax: int, ymax: int, x: int, y: int, color: int, background-color: int -> _/eax: int, _/ecx: int
152 sig draw-text-wrapping-right-then-down screen: (addr screen), _text: (addr array byte), xmin: int, ymin: int, xmax: int, ymax: int, _x: int, _y: int, color: int, background-color: int -> _/eax: int, _/ecx: int
153 sig draw-stream-wrapping-right-then-down screen: (addr screen), stream: (addr stream byte), xmin: int, ymin: int, xmax: int, ymax: int, x: int, y: int, color: int, background-color: int -> _/eax: int, _/ecx: int
154 sig draw-stream-wrapping-right-then-down-from-cursor screen: (addr screen), stream: (addr stream byte), xmin: int, ymin: int, xmax: int, ymax: int, color: int, background-color: int
155 sig draw-stream-wrapping-right-then-down-from-cursor-over-full-screen screen: (addr screen), stream: (addr stream byte), color: int, background-color: int
156 sig move-cursor-rightward-and-downward screen: (addr screen), xmin: int, xmax: int
157 sig draw-text-wrapping-right-then-down-over-full-screen screen: (addr screen), text: (addr array byte), x: int, y: int, color: int, background-color: int -> _/eax: int, _/ecx: int
158 sig draw-text-wrapping-right-then-down-from-cursor screen: (addr screen), text: (addr array byte), xmin: int, ymin: int, xmax: int, ymax: int, color: int, background-color: int
159 sig draw-text-wrapping-right-then-down-from-cursor-over-full-screen screen: (addr screen), text: (addr array byte), color: int, background-color: int
160 sig draw-int32-hex-wrapping-right-then-down screen: (addr screen), n: int, xmin: int, ymin: int, xmax: int, ymax: int, x: int, y: int, color: int, background-color: int -> _/eax: int, _/ecx: int
161 sig draw-int32-hex-wrapping-right-then-down-over-full-screen screen: (addr screen), n: int, x: int, y: int, color: int, background-color: int -> _/eax: int, _/ecx: int
162 sig draw-int32-hex-wrapping-right-then-down-from-cursor screen: (addr screen), n: int, xmin: int, ymin: int, xmax: int, ymax: int, color: int, background-color: int
163 sig draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen screen: (addr screen), n: int, color: int, background-color: int
164 sig draw-int32-decimal-wrapping-right-then-down screen: (addr screen), n: int, xmin: int, ymin: int, xmax: int, ymax: int, x: int, y: int, color: int, background-color: int -> _/eax: int, _/ecx: int
165 sig draw-int32-decimal-wrapping-right-then-down-over-full-screen screen: (addr screen), n: int, x: int, y: int, color: int, background-color: int -> _/eax: int, _/ecx: int
166 sig draw-int32-decimal-wrapping-right-then-down-from-cursor screen: (addr screen), n: int, xmin: int, ymin: int, xmax: int, ymax: int, color: int, background-color: int
167 sig draw-int32-decimal-wrapping-right-then-down-from-cursor-over-full-screen screen: (addr screen), n: int, color: int, background-color: int
168 sig draw-text-downward screen: (addr screen), text: (addr array byte), x: int, y: int, ymax: int, color: int, background-color: int -> _/eax: int
169 sig draw-stream-downward screen: (addr screen), stream: (addr stream byte), x: int, y: int, ymax: int, color: int, background-color: int -> _/eax: int
170 sig draw-text-downward-from-cursor screen: (addr screen), text: (addr array byte), ymax: int, color: int, background-color: int
171 sig draw-text-wrapping-down-then-right screen: (addr screen), text: (addr array byte), xmin: int, ymin: int, xmax: int, ymax: int, _x: int, _y: int, color: int, background-color: int -> _/eax: int, _/ecx: int
172 sig draw-stream-wrapping-down-then-right screen: (addr screen), stream: (addr stream byte), xmin: int, ymin: int, xmax: int, ymax: int, x: int, y: int, color: int, background-color: int -> _/eax: int, _/ecx: int
173 sig draw-text-wrapping-down-then-right-over-full-screen screen: (addr screen), text: (addr array byte), x: int, y: int, color: int, background-color: int -> _/eax: int, _/ecx: int
174 sig draw-text-wrapping-down-then-right-from-cursor screen: (addr screen), text: (addr array byte), xmin: int, ymin: int, xmax: int, ymax: int, color: int, background-color: int
175 sig draw-text-wrapping-down-then-right-from-cursor-over-full-screen screen: (addr screen), text: (addr array byte), color: int, background-color: int
176 sig check-ints-equal _a: int, b: int, msg: (addr array byte)
177 sig check _a: boolean, msg: (addr array byte)
178 sig check-not _a: boolean, msg: (addr array byte)
179 sig draw-box-on-real-screen x1: int, y1: int, x2: int, y2: int, color: int
180 sig draw-horizontal-line-on-real-screen x1: int, x2: int, y: int, color: int
181 sig draw-vertical-line-on-real-screen x: int, y1: int, y2: int, color: int
182 sig check-screen-row screen: (addr screen), y: int, expected: (addr array byte), msg: (addr array byte)
183 sig check-screen-row-from _screen: (addr screen), x: int, y: int, expected: (addr array byte), msg: (addr array byte)
184 sig check-screen-row-in-color screen: (addr screen), fg: int, y: int, expected: (addr array byte), msg: (addr array byte)
185 sig check-screen-row-in-color-from _screen: (addr screen), fg: int, y: int, x: int, expected: (addr array byte), msg: (addr array byte)
186 sig check-screen-row-in-background-color screen: (addr screen), bg: int, y: int, expected: (addr array byte), msg: (addr array byte)
187 sig check-screen-row-in-background-color-from _screen: (addr screen), bg: int, y: int, x: int, expected: (addr array byte), msg: (addr array byte)
188 sig check-background-color-in-screen-row screen: (addr screen), bg: int, y: int, expected-bitmap: (addr array byte), msg: (addr array byte)
189 sig check-background-color-in-screen-row-from _screen: (addr screen), bg: int, y: int, x: int, expected-bitmap: (addr array byte), msg: (addr array byte)
190 sig nearest-color-euclidean r: int, g: int, b: int -> _/eax: int
191 sig euclidean-distance-squared r1: int, g1: int, b1: int, r2: int, g2: int, b2: int -> _/eax: int
192 sig hsl r: int, g: int, b: int -> _/ecx: int, _/edx: int, _/ebx: int
193 sig nearest-color-euclidean-hsl h: int, s: int, l: int -> _/eax: int
194 sig euclidean-hsl-squared h1: int, s1: int, l1: int, h2: int, s2: int, l2: int -> _/eax: int
195 sig maximum a: int, b: int -> _/eax: int
196 sig minimum a: int, b: int -> _/eax: int
197 sig abs n: int -> _/eax: int
198 sig sgn n: int -> _/eax: int
199 sig shift-left-by n: int, bits: int -> _/eax: int
200 sig shift-right-by n: int, bits: int -> _/eax: int
201 sig clear-lowest-bits _n: (addr int), bits: int
202 sig draw-line screen: (addr screen), x0: int, y0: int, x1: int, y1: int, color: int
203 sig draw-horizontal-line screen: (addr screen), y: int, x0: int, x1: int, color: int
204 sig draw-vertical-line screen: (addr screen), x: int, y0: int, y1: int, color: int
205 sig draw-rect screen: (addr screen), xmin: int, ymin: int, xmax: int, ymax: int, color: int
206 sig line-point u: float, x0: int, x1: int -> _/eax: int
207 sig draw-circle screen: (addr screen), cx: int, cy: int, radius: int, color: int
208 sig draw-disc screen: (addr screen), cx: int, cy: int, radius: int, color: int, border-color: int
209 sig draw-monotonic-bezier screen: (addr screen), x0: int, y0: int, x1: int, y1: int, x2: int, y2: int, color: int
210 sig bezier-point u: float, x0: int, x1: int, x2: int -> _/eax: int
211 sig load-sectors disk: (addr disk), lba: int, n: int, out: (addr stream byte)
212 sig store-sectors disk: (addr disk), lba: int, n: int, in: (addr stream byte)
213 sig initialize-image _self: (addr image), in: (addr stream byte)
214 sig render-image screen: (addr screen), _img: (addr image), xmin: int, ymin: int, width: int, height: int
215 sig initialize-image-from-pbm _self: (addr image), in: (addr stream byte)
216 sig render-pbm-image screen: (addr screen), _img: (addr image), xmin: int, ymin: int, width: int, height: int
217 sig initialize-image-from-pgm _self: (addr image), in: (addr stream byte)
218 sig render-pgm-image screen: (addr screen), _img: (addr image), xmin: int, ymin: int, width: int, height: int
219 sig nearest-grey level-255: byte -> _/eax: int
220 sig dither-pgm-unordered-monochrome _src: (addr image), _dest: (addr image)
221 sig dither-pgm-unordered _src: (addr image), _dest: (addr image)
222 sig _diffuse-dithering-error-floyd-steinberg errors: (addr array int), x: int, y: int, width: int, height: int, error: int
223 sig _accumulate-dithering-error errors: (addr array int), x: int, y: int, width: int, error: int
224 sig _read-dithering-error _errors: (addr array int), x: int, y: int, width: int -> _/esi: int
225 sig _write-dithering-error _errors: (addr array int), x: int, y: int, width: int, val: int
226 sig _read-pgm-buffer _buf: (addr array byte), x: int, y: int, width: int -> _/eax: byte
227 sig _write-raw-buffer _buf: (addr array byte), x: int, y: int, width: int, val: byte
228 sig show-errors errors: (addr array int), width: int, height: int, x: int, y: int
229 sig psd s: (addr array byte), d: int, fg: int, x: int, y: int
230 sig psx s: (addr array byte), d: int, fg: int, x: int, y: int
231 sig initialize-image-from-ppm _self: (addr image), in: (addr stream byte)
232 sig render-ppm-image screen: (addr screen), _img: (addr image), xmin: int, ymin: int, width: int, height: int
233 sig dither-ppm-unordered _src: (addr image), _dest: (addr image)
234 sig _ppm-error buf: (addr array byte), x: int, y: int, width: int, channel: int, _scale-f: float -> _/eax: int
235 sig _error-to-ppm-channel error: int -> _/eax: int
236 sig _read-ppm-buffer _buf: (addr array byte), x: int, y: int, width: int, channel: int -> _/eax: byte
237 sig render-raw-image screen: (addr screen), _img: (addr image), xmin: int, ymin: int, width: int, height: int
238 sig scale-image-height _img: (addr image), width: int -> _/ebx: int
239 sig next-word-skipping-comments line: (addr stream byte), out: (addr slice)
240 sig slide-up _a: (addr array int), start: int, end: int, target: int
241 sig slide-down _a: (addr array int), start: int, end: int, target: int
242 sig find-slide-down-slot-in-array _a: (addr array int), _val: int -> _/ecx: int
243 sig check-slide-up before: (addr array byte), start: int, end: int, target: int, after: (addr array byte), msg: (addr array byte)
244 sig check-slide-down before: (addr array byte), start: int, end: int, target: int, after: (addr array byte), msg: (addr array byte)
245 sig initialize-grapheme-stack _self: (addr grapheme-stack), n: int
246 sig clear-grapheme-stack _self: (addr grapheme-stack)
247 sig grapheme-stack-empty? _self: (addr grapheme-stack) -> _/eax: boolean
248 sig grapheme-stack-length _self: (addr grapheme-stack) -> _/eax: int
249 sig push-grapheme-stack _self: (addr grapheme-stack), _val: code-point-utf8
250 sig pop-grapheme-stack _self: (addr grapheme-stack) -> _/eax: code-point-utf8
251 sig copy-grapheme-stack _src: (addr grapheme-stack), dest: (addr grapheme-stack)
252 sig render-stack-from-bottom-wrapping-right-then-down screen: (addr screen), _self: (addr grapheme-stack), xmin: int, ymin: int, xmax: int, ymax: int, _x: int, _y: int, highlight-matching-open-paren?: boolean, open-paren-depth: int, color: int, background-color: int -> _/eax: int, _/ecx: int
253 sig render-stack-from-bottom screen: (addr screen), self: (addr grapheme-stack), x: int, y: int, highlight-matching-open-paren?: boolean, open-paren-depth: int -> _/eax: int
254 sig render-stack-from-top-wrapping-right-then-down screen: (addr screen), _self: (addr grapheme-stack), xmin: int, ymin: int, xmax: int, ymax: int, _x: int, _y: int, render-cursor?: boolean, color: int, background-color: int -> _/eax: int, _/ecx: int
255 sig render-stack-from-top screen: (addr screen), self: (addr grapheme-stack), x: int, y: int, render-cursor?: boolean -> _/eax: int
256 sig get-matching-close-paren-index _self: (addr grapheme-stack), render-cursor?: boolean -> _/edx: int
257 sig get-matching-open-paren-index _self: (addr grapheme-stack), control: boolean, depth: int -> _/edx: int
258 sig prefix-match? _self: (addr grapheme-stack), s: (addr stream byte) -> _/eax: boolean
259 sig suffix-match? _self: (addr grapheme-stack), s: (addr stream byte) -> _/eax: boolean
260 sig grapheme-stack-is-decimal-integer? _self: (addr grapheme-stack) -> _/eax: boolean
261 sig initialize-gap-buffer _self: (addr gap-buffer), capacity: int
262 sig clear-gap-buffer _self: (addr gap-buffer)
263 sig gap-buffer-empty? _self: (addr gap-buffer) -> _/eax: boolean
264 sig gap-buffer-capacity _gap: (addr gap-buffer) -> _/edx: int
265 sig initialize-gap-buffer-with self: (addr gap-buffer), keys: (addr array byte)
266 sig load-gap-buffer-from-stream self: (addr gap-buffer), in: (addr stream byte)
267 sig emit-gap-buffer self: (addr gap-buffer), out: (addr stream byte)
268 sig append-gap-buffer _self: (addr gap-buffer), out: (addr stream byte)
269 sig emit-stack-from-bottom _self: (addr grapheme-stack), out: (addr stream byte)
270 sig emit-stack-from-top _self: (addr grapheme-stack), out: (addr stream byte)
271 sig word-at-gap _self: (addr gap-buffer), out: (addr stream byte)
272 sig code-point-utf8-at-gap _self: (addr gap-buffer) -> _/eax: code-point-utf8
273 sig top-most-word _self: (addr grapheme-stack) -> _/eax: int
274 sig emit-stack-from-index _self: (addr grapheme-stack), start: int, out: (addr stream byte)
275 sig emit-stack-to-index _self: (addr grapheme-stack), end: int, out: (addr stream byte)
276 sig is-ascii-word-code-point-utf8? g: code-point-utf8 -> _/eax: boolean
277 sig render-gap-buffer-wrapping-right-then-down screen: (addr screen), _gap: (addr gap-buffer), xmin: int, ymin: int, xmax: int, ymax: int, render-cursor?: boolean, color: int, background-color: int -> _/eax: int, _/ecx: int
278 sig render-gap-buffer screen: (addr screen), gap: (addr gap-buffer), x: int, y: int, render-cursor?: boolean, color: int, background-color: int -> _/eax: int
279 sig gap-buffer-length _gap: (addr gap-buffer) -> _/eax: int
280 sig add-code-point-utf8-at-gap _self: (addr gap-buffer), g: code-point-utf8
281 sig add-code-point-at-gap self: (addr gap-buffer), c: code-point
282 sig gap-to-start self: (addr gap-buffer)
283 sig gap-to-end self: (addr gap-buffer)
284 sig gap-at-start? _self: (addr gap-buffer) -> _/eax: boolean
285 sig gap-at-end? _self: (addr gap-buffer) -> _/eax: boolean
286 sig gap-right _self: (addr gap-buffer) -> _/eax: code-point-utf8
287 sig gap-left _self: (addr gap-buffer) -> _/eax: code-point-utf8
288 sig index-of-gap _self: (addr gap-buffer) -> _/eax: int
289 sig first-code-point-utf8-in-gap-buffer _self: (addr gap-buffer) -> _/eax: code-point-utf8
290 sig code-point-utf8-before-cursor-in-gap-buffer _self: (addr gap-buffer) -> _/eax: code-point-utf8
291 sig delete-before-gap _self: (addr gap-buffer)
292 sig pop-after-gap _self: (addr gap-buffer) -> _/eax: code-point-utf8
293 sig gap-buffer-equal? _self: (addr gap-buffer), s: (addr array byte) -> _/eax: boolean
294 sig gap-buffers-equal? self: (addr gap-buffer), g: (addr gap-buffer) -> _/eax: boolean
295 sig gap-index _self: (addr gap-buffer), _n: int -> _/eax: code-point-utf8
296 sig copy-gap-buffer _src-ah: (addr handle gap-buffer), _dest-ah: (addr handle gap-buffer)
297 sig gap-buffer-is-decimal-integer? _self: (addr gap-buffer) -> _/eax: boolean
298 sig highlight-matching-open-paren? _gap: (addr gap-buffer), render-cursor?: boolean -> _/ebx: boolean, _/edi: int
299 sig rewind-gap-buffer _self: (addr gap-buffer)
300 sig gap-buffer-scan-done? _self: (addr gap-buffer) -> _/eax: boolean
301 sig peek-from-gap-buffer _self: (addr gap-buffer) -> _/eax: code-point-utf8
302 sig read-from-gap-buffer _self: (addr gap-buffer) -> _/eax: code-point-utf8
303 sig put-back-from-gap-buffer _self: (addr gap-buffer)
304 sig skip-spaces-from-gap-buffer self: (addr gap-buffer)
305 sig edit-gap-buffer self: (addr gap-buffer), key: code-point-utf8
306 sig gap-to-start-of-next-word self: (addr gap-buffer)
307 sig gap-to-end-of-previous-word self: (addr gap-buffer)
308 sig gap-to-previous-start-of-line self: (addr gap-buffer)
309 sig gap-to-next-end-of-line self: (addr gap-buffer)
310 sig gap-up self: (addr gap-buffer)
311 sig gap-down self: (addr gap-buffer)
312 sig count-columns-to-start-of-line self: (addr gap-buffer) -> _/edx: int
313 sig gap-to-end-of-line self: (addr gap-buffer)
314 sig parse-float-decimal in: (addr stream byte) -> _/xmm1: float
315 sig read-line-from-keyboard keyboard: (addr keyboard), out: (addr stream byte), screen: (addr screen), fg: int, bg: int