about summary refs log tree commit diff stats
path: root/linux/print-file.mu
diff options
context:
space:
mode:
Diffstat (limited to 'linux/print-file.mu')
-rw-r--r--linux/print-file.mu39
1 files changed, 39 insertions, 0 deletions
diff --git a/linux/print-file.mu b/linux/print-file.mu
new file mode 100644
index 00000000..57e044dc
--- /dev/null
+++ b/linux/print-file.mu
@@ -0,0 +1,39 @@
+# accept a filename on the commandline, read it and print it out to screen
+# only ascii right now, just like the rest of Mu
+#
+# To run:
+#   $ ./translate_mu apps/print-file.mu
+#   $ echo abc > x
+#   $ ./a.elf x
+#   abc
+
+fn main _args: (addr array addr array byte) -> _/ebx: int {
+  var args/eax: (addr array addr array byte) <- copy _args
+  var n/ecx: int <- length args
+  compare n, 1
+  {
+    break-if->
+    print-string 0/screen, "usage: cat <filename>\n"
+    return 0
+  }
+  {
+    break-if-<=
+    var filename/edx: (addr addr array byte) <- index args 1
+    var in: (handle buffered-file)
+    {
+      var addr-in/eax: (addr handle buffered-file) <- address in
+      open *filename, 0/read-only, addr-in
+    }
+    var _in-addr/eax: (addr buffered-file) <- lookup in
+    var in-addr/ecx: (addr buffered-file) <- copy _in-addr
+    {
+      var c/eax: byte <- read-byte-buffered in-addr
+      compare c, 0xffffffff/end-of-file
+      break-if-=
+      var g/eax: grapheme <- copy c
+      print-grapheme 0/screen, g
+      loop
+    }
+  }
+  return 0
+}