compiler/tests/fixtures/runtime/library-common-tasks/main.ldn
skip to the library navigation
1-- Number the lines of the file named on the command line, as `cat -n`
2-- does, and say in words why when it cannot be read.
3import core/failure
4import core/io
5import core/text
6import hosted/system
7
8--- Write each line of the file at `path` to `out` after its number.
9numbered: (inout out: io.buffered_writer(system.host), host: system.host,
10 path: text.host_string) -> none ! ... =
11 file := try io.open_read(host, path)
12 defer io.close(host, file) else none
13 mut buffer: [4096]u8 = zeroed
14 mut lines := io.lines_over(host, file, buffer)
15 mut number: u64 = 0
16 loop do
17 item := try io.read_line(lines)
18 break when item.finished
19 inc number
20 try io.format(out, "{}: {}\n", [any(addr number), any(addr item.bytes)])
21 end loop
22end numbered
23
24public main: () -> (code: i32) =
25 host := system.new()
26 mut storage: [256]u8 = zeroed
27 mut out := io.buffered_over(host, io.out(host), storage)
28 defer io.flush(out) else none
29 code = 1
30 path := io.argument_at(host, 0) else (problem)
31 io.write(host, io.err(host), "usage: number FILE\n") else none
32 return
33 end
34 numbered(out, host, path) else (problem)
35 io.write(host, io.err(host), text.host_bytes(path)) else none
36 io.write(host, io.err(host), ": ") else none
37 io.write(host, io.err(host), failure.words(problem)) else none
38 io.write(host, io.err(host), "\n") else none
39 return
40 end
41 code = 0
42end main