blob: 34d03a6380aeb54bfa4e639aa4d5c2c4ee3418f8 (
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
33
34
|
namespace;
include rt, std;
// capture.start() sends everything the program writes into a string instead of
// the terminal, and capture.end(buf) stops it and terminates the string. nothing may
// be printed during a capture, or it lands in the buffer too.
include std;
fn main() {
let buf = std.capture.start();
rt.put_s("hello world!");
rt.put_n(42);
rt.put_c(10);
std.capture.end(buf); // stops the capture and terminates the string
// the capture is off again, so these go to the terminal
rt.put_n(rt.outmode); rt.put_c(10); // 0
rt.put_n(rt.outbuf == 0); rt.put_c(10); // 1, the buffer is handed over
rt.put_n(rt.len_w(buf)); rt.put_c(10); // 15
rt.put_s(buf); // hello world!42
// a second capture does not disturb the first, and both read back
let two = std.capture.start();
rt.put_s("second");
std.capture.end(two);
rt.put_n(rt.eq_w(buf, "hello world!42\n")); rt.put_c(10); // 1
rt.put_n(rt.eq_w(two, "second")); rt.put_c(10); // 1
// capture_stdin returns an empty string, so an unused capture is empty
let three = std.capture.start();
std.capture.end(three);
rt.put_n(rt.len_w(three)); rt.put_c(10); // 0
return 0;
}
|