code wiki / (root) / nx_x11_window_real_test.nx

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}