blob: 7bff8a1ee9e9ee1b199c721d5a64990eed2cd9ba (
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
30
31
32
|
namespace;
include rt, std;
// 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 std;
void main() {
rt.put_s("argv: ");
for (int i = 0; i < std.argc; i++) { rt.put_s(std.argv[i]); if (i + 1 < std.argc) rt.put_s(" "); }
rt.put_c(10);
// envp holds NAME=value strings, so a program can walk all of them
let n = 0;
for (int i = 0; i < std.envc; i++) if (std.Text.starts(std.envp[i], "HOME=")) n = n + 1;
rt.put_s("HOME is set: "); rt.put_n(n > 0); rt.put_c(10);
// the same name the old way, one lookup instead of a walk
let v[80];
rt.put_n(std.Host.env("HOME", v, 80) > 0); rt.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 = std.capture.start();
rt.put_s("this goes into the buffer, not the terminal");
rt.put_c(10);
std.capture.end(buf); // stops the capture and terminates the string
rt.put_s("captured "); rt.put_n(rt.len_w(buf)); rt.put_s(" characters: ");
rt.put_s(buf);
return;
}
|