code wiki / (root) / nx_browser_demo_42.nx

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}