code wiki / (root) / nx_browser_demo_lowercase.nx

nx_browser_demo_lowercase.nx source

↩ module page · 86 lines · 3321 B

1// nx_browser_demo_lowercase.nx -- renders the lowercase pangram 2// "the quick brown fox jumps over the lazy dog" across three lines, 3// exercising the 26-letter lowercase font subset shipped this turn. 4 5import "nx_syscalls.nx" 6import "nx_css_color_decode.nx" 7import "nx_paint_solid_rect.nx" 8import "nx_paint_text.nx" 9import "nx_paint_fb_ascii_dump.nx" 10const K_MAGIC_4096: i64 = 4096 11 12func _put_byte(buf: *u8, i: i64, v: i64) -> i64 { 13 buf[i] = v as u8 14 return 0 15} 16 17func main() -> i64 { 18 let w: i64 = 96 19 let h: i64 = 26 20 let pixels: *u8 = (sys_mmap((w * h * 4) as nx_size)) as *u8 21 let fb: *Framebuffer = (sys_mmap(NX_FRAMEBUFFER_BYTES as nx_size)) as *Framebuffer 22 nx_framebuffer_init(fb, pixels, w, h) 23 nx_framebuffer_clear(fb) 24 25 let white: *CssColor = (sys_mmap(NX_CSS_COLOR_BYTES as nx_size)) as *CssColor 26 white.r = 255 27 white.g = 255 28 white.b = 255 29 white.a = 255 30 31 // "the quick brown\nfox jumps over\nthe lazy dog" 32 let text: *u8 = (sys_mmap(64)) as *u8 33 var p: i64 = 0 34 _put_byte(text, p, 116) p = p + 1 // 't' 35 _put_byte(text, p, 104) p = p + 1 // 'h' 36 _put_byte(text, p, 101) p = p + 1 // 'e' 37 _put_byte(text, p, 32) p = p + 1 // ' ' 38 _put_byte(text, p, 113) p = p + 1 // 'q' 39 _put_byte(text, p, 117) p = p + 1 // 'u' 40 _put_byte(text, p, 105) p = p + 1 // 'i' 41 _put_byte(text, p, 99) p = p + 1 // 'c' 42 _put_byte(text, p, 107) p = p + 1 // 'k' 43 _put_byte(text, p, 32) p = p + 1 // ' ' 44 _put_byte(text, p, 98) p = p + 1 // 'b' 45 _put_byte(text, p, 114) p = p + 1 // 'r' 46 _put_byte(text, p, 111) p = p + 1 // 'o' 47 _put_byte(text, p, 119) p = p + 1 // 'w' 48 _put_byte(text, p, 110) p = p + 1 // 'n' 49 _put_byte(text, p, 10) p = p + 1 // '\n' 50 _put_byte(text, p, 102) p = p + 1 // 'f' 51 _put_byte(text, p, 111) p = p + 1 // 'o' 52 _put_byte(text, p, 120) p = p + 1 // 'x' 53 _put_byte(text, p, 32) p = p + 1 // ' ' 54 _put_byte(text, p, 106) p = p + 1 // 'j' 55 _put_byte(text, p, 117) p = p + 1 // 'u' 56 _put_byte(text, p, 109) p = p + 1 // 'm' 57 _put_byte(text, p, 112) p = p + 1 // 'p' 58 _put_byte(text, p, 115) p = p + 1 // 's' 59 _put_byte(text, p, 32) p = p + 1 // ' ' 60 _put_byte(text, p, 111) p = p + 1 // 'o' 61 _put_byte(text, p, 118) p = p + 1 // 'v' 62 _put_byte(text, p, 101) p = p + 1 // 'e' 63 _put_byte(text, p, 114) p = p + 1 // 'r' 64 _put_byte(text, p, 10) p = p + 1 // '\n' 65 _put_byte(text, p, 116) p = p + 1 // 't' 66 _put_byte(text, p, 104) p = p + 1 // 'h' 67 _put_byte(text, p, 101) p = p + 1 // 'e' 68 _put_byte(text, p, 32) p = p + 1 // ' ' 69 _put_byte(text, p, 108) p = p + 1 // 'l' 70 _put_byte(text, p, 97) p = p + 1 // 'a' 71 _put_byte(text, p, 122) p = p + 1 // 'z' 72 _put_byte(text, p, 121) p = p + 1 // 'y' 73 _put_byte(text, p, 32) p = p + 1 // ' ' 74 _put_byte(text, p, 100) p = p + 1 // 'd' 75 _put_byte(text, p, 111) p = p + 1 // 'o' 76 _put_byte(text, p, 103) p = p + 1 // 'g' 77 let text_len: i64 = p 78 79 nx_paint_text(fb, 1, 1, text, text_len, white) 80 81 let out_buf: *u8 = (sys_mmap(K_MAGIC_4096)) as *u8 82 let n: i64 = nx_paint_fb_ascii_dump(fb, out_buf, K_MAGIC_4096) 83 if n < 0 { return 1 } 84 sys_write(1, out_buf, n) 85 return 0 86}