about summary refs log tree commit diff stats
path: root/shell/gap-buffer.mu
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2021-04-14 22:04:38 -0700
committerKartik K. Agaram <vc@akkartik.com>2021-04-14 22:04:42 -0700
commit2359e5ed63d3fc7dcd70c9c95827e781a23afbe2 (patch)
tree609ff2e637433cc77b7076fc9da73c12541d764b /shell/gap-buffer.mu
parent8db35826e6d96c3248d62a40c2b5137e5bdc0f1e (diff)
downloadmu-2359e5ed63d3fc7dcd70c9c95827e781a23afbe2.tar.gz
shell: load data disk as s-expr rather than string
Diffstat (limited to 'shell/gap-buffer.mu')
-rw-r--r--shell/gap-buffer.mu15
1 files changed, 15 insertions, 0 deletions
diff --git a/shell/gap-buffer.mu b/shell/gap-buffer.mu
index 53f3bd54..ab515812 100644
--- a/shell/gap-buffer.mu
+++ b/shell/gap-buffer.mu
@@ -40,6 +40,21 @@ fn initialize-gap-buffer-with self: (addr gap-buffer), s: (addr array byte) {
   }
 }
 
+fn load-gap-buffer-from-stream self: (addr gap-buffer), in: (addr stream byte) {
+  rewind-stream in
+  {
+    var done?/eax: boolean <- stream-empty? in
+    compare done?, 0/false
+    break-if-!=
+    var key/eax: byte <- read-byte in
+    compare key, 0/null
+    break-if-=
+    var g/eax: grapheme <- copy key
+    edit-gap-buffer self, g
+    loop
+  }
+}
+
 fn emit-gap-buffer _self: (addr gap-buffer), out: (addr stream byte) {
   var self/esi: (addr gap-buffer) <- copy _self
   clear-stream out