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}