aboutsummaryrefslogtreecommitdiff
path: root/docs/LEARN.md
diff options
context:
space:
mode:
Diffstat (limited to 'docs/LEARN.md')
-rw-r--r--docs/LEARN.md24
1 files changed, 24 insertions, 0 deletions
diff --git a/docs/LEARN.md b/docs/LEARN.md
index ed12caf..35ee914 100644
--- a/docs/LEARN.md
+++ b/docs/LEARN.md
@@ -531,6 +531,30 @@ output:
124
```
+### terminal input and output
+
+`std.Io` groups the terminal: `print(s)` and `println(s)` write a string, `nl()` a line break, and `put_c`, `put_s`, `put_n`, `put_hex`, `put_bs` and `put_f` write a character, a string, a decimal or hexadecimal integer, a packed byte string and a float. `get_c()`, `eof()`, `read(buf, n)` and `getline(buf, n)` read the program input; `getline` drops the line break and returns -1 at the end of the input. zc has no varargs or overloading, so `print` takes a string only and numbers use their own writers. the writers go through `rt.put_c`, so `std.capture` sees them, and the `rt` names (`rt.put_n` and the rest) keep working.
+
+[example source](../examples/learn/35-io.zc):
+
+```zc
+namespace;
+include std;
+fn main() {
+ std.Io.print("total: "); std.Io.put_n(6 * 7); std.Io.nl();
+ std.Io.print("ratio: "); std.Io.put_f(1.0 / 4.0); std.Io.nl();
+ std.Io.println("done");
+}
+```
+
+output:
+
+```text
+total: 42
+ratio: 0.250000
+done
+```
+
### host services
`rt.syscall(op, a, b, c)` calls the runtime interface to the vm's syscall gate. the runtime defines names such as `SYS_OPEN`, `SYS_READ`, `SYS_WRITE`, `SYS_GETENV`, and `SYS_TIME`. unsupported operations return -1. `std.Host.now()` wraps the clock request.