code wiki / (root) / nx_browser_demo_pangram.nx

nx_browser_demo_pangram.nx source

↩ module page · 87 lines · 3385 B

1// nx_browser_demo_pangram.nx -- demo program rendering the classic 2// pangram "THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG" across 3// three lines. Exercises the full 26-letter uppercase font subset 4// shipped this session. 5 6import "nx_syscalls.nx" 7import "nx_css_color_decode.nx" 8import "nx_paint_solid_rect.nx" 9import "nx_paint_text.nx" 10import "nx_paint_fb_ascii_dump.nx" 11const K_MAGIC_4096: i64 = 4096 12 13func _put_byte(buf: *u8, i: i64, v: i64) -> i64 { 14 buf[i] = v as u8 15 return 0 16} 17 18func main() -> i64 { 19 let w: i64 = 96 20 let h: i64 = 26 21 let pixels: *u8 = (sys_mmap((w * h * 4) as nx_size)) as *u8 22 let fb: *Framebuffer = (sys_mmap(NX_FRAMEBUFFER_BYTES as nx_size)) as *Framebuffer 23 nx_framebuffer_init(fb, pixels, w, h) 24 nx_framebuffer_clear(fb) 25 26 let white: *CssColor = (sys_mmap(NX_CSS_COLOR_BYTES as nx_size)) as *CssColor 27 white.r = 255 28 white.g = 255 29 white.b = 255 30 white.a = 255 31 32 // "THE QUICK BROWN\nFOX JUMPS OVER\nTHE LAZY DOG" 33 let text: *u8 = (sys_mmap(64)) as *u8 34 var p: i64 = 0 35 _put_byte(text, p, 84) p = p + 1 // 'T' 36 _put_byte(text, p, 72) p = p + 1 // 'H' 37 _put_byte(text, p, 69) p = p + 1 // 'E' 38 _put_byte(text, p, 32) p = p + 1 // ' ' 39 _put_byte(text, p, 81) p = p + 1 // 'Q' 40 _put_byte(text, p, 85) p = p + 1 // 'U' 41 _put_byte(text, p, 73) p = p + 1 // 'I' 42 _put_byte(text, p, 67) p = p + 1 // 'C' 43 _put_byte(text, p, 75) p = p + 1 // 'K' 44 _put_byte(text, p, 32) p = p + 1 // ' ' 45 _put_byte(text, p, 66) p = p + 1 // 'B' 46 _put_byte(text, p, 82) p = p + 1 // 'R' 47 _put_byte(text, p, 79) p = p + 1 // 'O' 48 _put_byte(text, p, 87) p = p + 1 // 'W' 49 _put_byte(text, p, 78) p = p + 1 // 'N' 50 _put_byte(text, p, 10) p = p + 1 // '\n' 51 _put_byte(text, p, 70) p = p + 1 // 'F' 52 _put_byte(text, p, 79) p = p + 1 // 'O' 53 _put_byte(text, p, 88) p = p + 1 // 'X' 54 _put_byte(text, p, 32) p = p + 1 // ' ' 55 _put_byte(text, p, 74) p = p + 1 // 'J' 56 _put_byte(text, p, 85) p = p + 1 // 'U' 57 _put_byte(text, p, 77) p = p + 1 // 'M' 58 _put_byte(text, p, 80) p = p + 1 // 'P' 59 _put_byte(text, p, 83) p = p + 1 // 'S' 60 _put_byte(text, p, 32) p = p + 1 // ' ' 61 _put_byte(text, p, 79) p = p + 1 // 'O' 62 _put_byte(text, p, 86) p = p + 1 // 'V' 63 _put_byte(text, p, 69) p = p + 1 // 'E' 64 _put_byte(text, p, 82) p = p + 1 // 'R' 65 _put_byte(text, p, 10) p = p + 1 // '\n' 66 _put_byte(text, p, 84) p = p + 1 // 'T' 67 _put_byte(text, p, 72) p = p + 1 // 'H' 68 _put_byte(text, p, 69) p = p + 1 // 'E' 69 _put_byte(text, p, 32) p = p + 1 // ' ' 70 _put_byte(text, p, 76) p = p + 1 // 'L' 71 _put_byte(text, p, 65) p = p + 1 // 'A' 72 _put_byte(text, p, 90) p = p + 1 // 'Z' 73 _put_byte(text, p, 89) p = p + 1 // 'Y' 74 _put_byte(text, p, 32) p = p + 1 // ' ' 75 _put_byte(text, p, 68) p = p + 1 // 'D' 76 _put_byte(text, p, 79) p = p + 1 // 'O' 77 _put_byte(text, p, 71) p = p + 1 // 'G' 78 let text_len: i64 = p 79 80 nx_paint_text(fb, 1, 1, text, text_len, white) 81 82 let out_buf: *u8 = (sys_mmap(K_MAGIC_4096)) as *u8 83 let n: i64 = nx_paint_fb_ascii_dump(fb, out_buf, K_MAGIC_4096) 84 if n < 0 { return 1 } 85 sys_write(1, out_buf, n) 86 return 0 87}