nx_x11_window_real_test.nx source
↩ module page · 75 lines · 2463 B
1// nx_x11_window_real_test.nx -- bits-up real Windows window.
2//
3// Session 2 of the bits-up browser arc. Connects to WSLg's X server
4// at /tmp/.X11-unix/X0, creates a 600x400 window with a magenta
5// background, maps it, then sleeps 8 seconds so the user can SEE
6// it pop up on the Windows desktop.
7//
8// expect_exit: 0.
9// license_tier: ORIGINAL
10
11import "nx_syscalls.nx"
12import "nx_x11_connect.nx"
13import "nx_x11_window.nx"
14
15func dump_dec(l0: i64, l1: i64, v: i64) -> i64 {
16 let lab: *u8 = sys_mmap(8)
17 lab[0]=l0 as u8; lab[1]=l1 as u8; lab[2]=0x3D
18 sys_write(2, lab, 3)
19 var av: i64 = v
20 if av < 0 {
21 let neg: *u8 = sys_mmap(8); neg[0]=0x2D; sys_write(2, neg, 1)
22 av = 0 - av
23 }
24 let buf: *u8 = sys_mmap(16)
25 var pos: i64 = 0
26 if av == 0 { buf[0]=0x30; pos = 1 }
27 var x: i64 = av
28 while x > 0 {
29 buf[pos] = (0x30 + (x % 10)) as u8
30 x = x / 10; pos = pos + 1
31 }
32 let out: *u8 = sys_mmap(16); var oi: i64 = 0
33 while oi < pos { out[oi] = buf[pos - 1 - oi]; oi = oi + 1 }
34 sys_write(2, out, pos)
35 let nl: *u8 = sys_mmap(8); nl[0]=0x0A; sys_write(2, nl, 1)
36 return 0
37}
38
39func main() -> i64 {
40 let rc: i64 = nx_x11_connect_local(0)
41 if rc < 0 { return 1 }
42 let c: *X11Conn = rc as *X11Conn
43 dump_dec(0x46, 0x44, c.fd)
44
45 // Background color: 0x00FF00FF magenta (B=FF, G=00, R=FF) in 24bpp
46 // (X server interprets per-screen visual; 0x00FF00FF works for
47 // standard RGB888 visuals).
48 let bg: i64 = 0x00FF00FF
49 let event_mask: i64 = 0
50 let wid: i64 = nx_x11_create_window(c, 100, 100, 600, 400, bg, event_mask)
51 if wid < 0 { return 2 }
52 dump_dec(0x57, 0x49, wid) // WI= window id
53
54 // WM_NAME so WSLg's compositor labels + surfaces the window.
55 let title: *u8 = "Nishi Bits-Up Browser\x00"
56 var tl: i64 = 0
57 while title[tl] != 0 { tl = tl + 1 }
58 nx_x11_set_wm_name(c, wid, title, tl)
59
60 if nx_x11_map_window(c, wid) < 0 { return 3 }
61 let flush_rc: i64 = nx_x11_flush_via_get_input_focus(c)
62 dump_dec(0x46, 0x4C, flush_rc) // FL= 0 clean, 100+code = X11 error
63 if flush_rc != 0 { return 4 }
64
65 let ok: *u8 = "Bits-up X11 window mapped -- look at your Windows desktop\n\x00"
66 var i: i64 = 0
67 while ok[i] != 0 { i = i + 1 }
68 sys_write(1, ok, i)
69
70 // Sleep 8 seconds so user can see the window before we exit.
71 sys_sleep_ms(8000)
72
73 sys_close(c.fd)
74 return 0
75}