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}