aboutsummaryrefslogtreecommitdiff
path: root/examples/cli2.zc
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;
}