blob: 0c3de121ec4d3d860d92424a3290f69f06fc42bd (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
// the command line, the environment, and capturing what a program writes.
// run it as: ./bin/zy examples/cli2.zc one two (the first is this file's path
// when zy is given one, otherwise <eval>, exactly as argv[0] is in c)
include "src/lib/std.zc";
fn main() {
put_s("argv: ");
for (int i = 0; i < argc; i++) { put_s(argv[i]); if (i + 1 < argc) put_s(" "); }
put_c(10);
// envp holds NAME=value strings, so a program can walk all of them
let n = 0;
for (int i = 0; i < envc; i++) if (Text.starts(envp[i], "HOME=")) n = n + 1;
put_s("HOME is set: "); put_n(n > 0); put_c(10);
// the same name the old way, one lookup instead of a walk
let v[80];
put_n(Host.env("HOME", v, 80) > 0); put_c(10);
// capture what the program writes, instead of printing it. every put_c,
// put_s and put_n from here on lands in the buffer.
let buf = capture.start();
put_s("this goes into the buffer, not the terminal");
put_c(10);
buf.end(); // stops the capture and terminates the string
put_s("captured "); put_n(len_w(buf)); put_s(" characters: ");
put_s(buf);
return 0;
}
|