about summary refs log tree commit diff stats
path: root/archive/1.vm/filesystem.mu
diff options
context:
space:
mode:
Diffstat (limited to 'archive/1.vm/filesystem.mu')
-rw-r--r--archive/1.vm/filesystem.mu20
1 files changed, 20 insertions, 0 deletions
diff --git a/archive/1.vm/filesystem.mu b/archive/1.vm/filesystem.mu
new file mode 100644
index 00000000..6ea8e08c
--- /dev/null
+++ b/archive/1.vm/filesystem.mu
@@ -0,0 +1,20 @@
+# example program: copy one file into another, character by character
+# BEWARE: this will modify your file system
+# before running it, put some text into /tmp/mu-x
+# after running it, check /tmp/mu-y
+
+def main [
+  local-scope
+  source-file:&:source:char <- start-reading null/real-filesystem, [/tmp/mu-x]
+  sink-file:&:sink:char, write-routine:num <- start-writing null/real-filesystem, [/tmp/mu-y]
+  {
+    c:char, done?:bool, source-file <- read source-file
+    break-if done?
+    sink-file <- write sink-file, c
+    loop
+  }
+  close sink-file
+  # make sure to wait for the file to be actually written to disk
+  # (Mu practices structured concurrency: http://250bpm.com/blog:71)
+  wait-for-routine write-routine
+]