nx_browser_demo_42.nx source
↩ module page · 49 lines · 1544 B
1// nx_browser_demo_42.nx -- visible end-to-end demo program. Paints
2// "42" into a 24x10 framebuffer, dumps it to stdout as ASCII art,
3// returns 0 on success. Run via qemu-riscv64 to SEE the bits-up
4// substrate's first text-rendering output.
5//
6// Pipeline used:
7// nx_framebuffer_init -- caller-supplied pixel buffer wrap
8// nx_framebuffer_clear -- zero
9// nx_paint_text -- 5x7 glyph rasterizer
10// nx_paint_fb_ascii_dump -- pixel -> char bucket dump
11// sys_write (fd 1) -- to stdout
12
13import "nx_syscalls.nx"
14import "nx_css_color_decode.nx"
15import "nx_paint_solid_rect.nx"
16import "nx_paint_text.nx"
17import "nx_paint_fb_ascii_dump.nx"
18
19func _put_byte(buf: *u8, i: i64, v: i64) -> i64 {
20 buf[i] = v as u8
21 return 0
22}
23
24func main() -> i64 {
25 let w: i64 = 24
26 let h: i64 = 10
27 let pixels: *u8 = (sys_mmap((w * h * 4) as nx_size)) as *u8
28 let fb: *Framebuffer = (sys_mmap(NX_FRAMEBUFFER_BYTES as nx_size)) as *Framebuffer
29 nx_framebuffer_init(fb, pixels, w, h)
30 nx_framebuffer_clear(fb)
31
32 let white: *CssColor = (sys_mmap(NX_CSS_COLOR_BYTES as nx_size)) as *CssColor
33 white.r = 255
34 white.g = 255
35 white.b = 255
36 white.a = 255
37
38 let text: *u8 = (sys_mmap(8)) as *u8
39 _put_byte(text, 0, 52) // '4'
40 _put_byte(text, 1, 50) // '2'
41
42 nx_paint_text(fb, 2, 2, text, 2, white)
43
44 let out_buf: *u8 = (sys_mmap(512)) as *u8
45 let n: i64 = nx_paint_fb_ascii_dump(fb, out_buf, 512)
46 if n < 0 { return 1 }
47 sys_write(1, out_buf, n)
48 return 0
49}