code wiki / _hdl_build / nx_live_xlate_call_gate.nx
nx_live_xlate_call_gate.nx source
↩ module page · 119 lines · 6321 B
1// nx_live_xlate_call_gate.nx -- proves the live-translated call for "a girl in Belarus (RU) talking to a boy in
2// Texas (EN)", NO fake green. (1) the boy says "hello friend" -> the GIRL's screen shows it in RUSSIAN
3// "привет друг" (byte-exact) rendered in NATIVE Cyrillic; (2) the girl says "спасибо любовь" -> the BOY's screen
4// shows "thanks love" in Latin; (3) neg-control: same-locale = NO translation (verbatim). Eyeball ->
5// knowledge/nx_live_xlate_call.png (girl's screen top, boy's screen bottom). expect_exit: 0 license_tier: ORIGINAL
6import "nx_syscalls.nx"
7import "nx_css_color_decode.nx"
8import "nx_paint_solid_rect.nx"
9import "nx_font8x8.nx"
10import "nx_font_cyrillic8.nx"
11import "nx_utf8.nx"
12import "nx_caption_render_uni.nx"
13import "nx_mt_ruen.nx"
14import "nx_live_xlate_call.nx"
15import "nx_png_write.nx"
16import "nx_gate_verdict.nx"
17
18func rg(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 }
19func rgn(v: i64) -> i64 {
20 if v == 0 { sys_write(1, "0" as *u8, 1); return 0 }
21 var m: i64 = v; if m < 0 { sys_write(1, "-" as *u8, 1); m = 0 - m }
22 let d: *u8 = sys_mmap(24); var k: i64 = 0
23 while m > 0 { d[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 }
24 var j: i64 = k - 1
25 while j >= 0 { sys_write(1, ((d as i64)+j) as *u8, 1); j = j - 1 }
26 return 0
27}
28func slen(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} return n }
29// a (alen bytes) equals nul-terminated expected b ?
30func bcmp(a: *u8, alen: i64, b: *u8) -> i64 {
31 var i: i64 = 0
32 while i < alen { if b[i]==(0 as u8) { return 0 } if a[i]!=b[i] { return 0 } i=i+1 }
33 if b[alen]!=(0 as u8) { return 0 }
34 return 1
35}
36func mkfb(w: i64, h: i64) -> *Framebuffer {
37 let px: *u8 = sys_mmap(w * h * 4)
38 let fb: *Framebuffer = sys_mmap(NX_FRAMEBUFFER_BYTES) as *Framebuffer
39 nx_framebuffer_init(fb, px, w, h)
40 nx_framebuffer_clear(fb)
41 return fb
42}
43
44func main() -> i64 {
45 rg("=== nx_live_xlate_call_gate: Belarus girl (RU) <-> Texas boy (EN) live-translated call ===\n" as *u8)
46 let w: i64 = 320
47 let h: i64 = 120
48 var pass: i64 = 0
49 var fail: i64 = 0
50
51 let bar: *CssColor = sys_mmap(NX_CSS_COLOR_BYTES) as *CssColor
52 bar.r=0; bar.g=0; bar.b=0; bar.a=255
53 let fg: *CssColor = sys_mmap(NX_CSS_COLOR_BYTES) as *CssColor
54 fg.r=255; fg.g=235; fg.b=60; fg.a=255
55 let vidG: *CssColor = sys_mmap(NX_CSS_COLOR_BYTES) as *CssColor
56 vidG.r=64; vidG.g=40; vidG.b=44; vidG.a=255
57 let vidB: *CssColor = sys_mmap(NX_CSS_COLOR_BYTES) as *CssColor
58 vidB.r=28; vidB.g=44; vidB.b=70; vidB.a=255
59
60 // (1) boy (EN) -> girl (RU): "hello friend" -> "привет друг"
61 let boy_utt: *u8 = "hello friend" as *u8
62 let gcap: *u8 = sys_mmap(256)
63 let gn: i64 = lx_caption_for_listener(boy_utt, slen(boy_utt), LX_EN, LX_RU, gcap, 256)
64 rg(" boy(EN) '" as *u8); sys_write(1, boy_utt, slen(boy_utt)); rg("' -> girl(RU) '" as *u8); sys_write(1, gcap, gn); rg("'\n" as *u8)
65 if bcmp(gcap, gn, "привет друг" as *u8) == 1 { pass=pass+1; rg(" ROW EN->RU correct: GREEN\n" as *u8) } else { fail=fail+1; rg(" ROW EN->RU correct: RED\n" as *u8) }
66
67 // (2) girl (RU) -> boy (EN): "спасибо любовь" -> "thanks love"
68 let girl_utt: *u8 = "спасибо любовь" as *u8
69 let bcap: *u8 = sys_mmap(256)
70 let bn: i64 = lx_caption_for_listener(girl_utt, slen(girl_utt), LX_RU, LX_EN, bcap, 256)
71 rg(" girl(RU) '" as *u8); sys_write(1, girl_utt, slen(girl_utt)); rg("' -> boy(EN) '" as *u8); sys_write(1, bcap, bn); rg("'\n" as *u8)
72 if bcmp(bcap, bn, "thanks love" as *u8) == 1 { pass=pass+1; rg(" ROW RU->EN correct: GREEN\n" as *u8) } else { fail=fail+1; rg(" ROW RU->EN correct: RED\n" as *u8) }
73
74 // (3) neg-control: same locale -> NO translation (verbatim)
75 let same: *u8 = sys_mmap(64)
76 let sn: i64 = lx_caption_for_listener("hello" as *u8, 5, LX_EN, LX_EN, same, 64)
77 if bcmp(same, sn, "hello" as *u8) == 1 { pass=pass+1; rg(" ROW same-locale-no-translate: GREEN\n" as *u8) } else { fail=fail+1; rg(" ROW same-locale-no-translate: RED\n" as *u8) }
78
79 // render the GIRL's screen (native Cyrillic) and the BOY's screen (Latin)
80 let fbG: *Framebuffer = mkfb(w, h)
81 nx_paint_solid_rect(fbG, 0, 0, w, h, vidG)
82 let setG: i64 = nx_caption_render_uni(fbG, gcap, gn, 2, bar, fg)
83 if setG > 0 { pass=pass+1; rg(" ROW girl-screen-cyrillic-renders: GREEN (" as *u8); rgn(setG); rg("px)\n" as *u8) } else { fail=fail+1; rg(" ROW girl-screen: RED\n" as *u8) }
84
85 let fbB: *Framebuffer = mkfb(w, h)
86 nx_paint_solid_rect(fbB, 0, 0, w, h, vidB)
87 let setB: i64 = nx_caption_render_uni(fbB, bcap, bn, 2, bar, fg)
88 if setB > 0 { pass=pass+1; rg(" ROW boy-screen-latin-renders: GREEN (" as *u8); rgn(setB); rg("px)\n" as *u8) } else { fail=fail+1; rg(" ROW boy-screen: RED\n" as *u8) }
89
90 // eyeball: girl's screen (top) + boy's screen (bottom)
91 let H2: i64 = h * 2
92 let rgb: *u8 = sys_mmap(w * H2 * 3)
93 var y: i64 = 0
94 while y < h {
95 var x: i64 = 0
96 while x < w {
97 let s: i64 = (y * w + x) * 4
98 let d1: i64 = (y * w + x) * 3
99 rgb[d1+0]=fbG.pixels[s+0]; rgb[d1+1]=fbG.pixels[s+1]; rgb[d1+2]=fbG.pixels[s+2]
100 let d2: i64 = ((h + y) * w + x) * 3
101 rgb[d2+0]=fbB.pixels[s+0]; rgb[d2+1]=fbB.pixels[s+1]; rgb[d2+2]=fbB.pixels[s+2]
102 x = x + 1
103 }
104 y = y + 1
105 }
106 nx_png_write_rgb("knowledge/nx_live_xlate_call.png" as *u8, rgb, w, H2)
107 rg(" eyeball -> knowledge/nx_live_xlate_call.png (girl's screen top, boy's screen bottom)\n" as *u8)
108
109 rg("LIVE-XLATE-CALL-GATE pass=" as *u8); rgn(pass); rg(" fail=" as *u8); rgn(fail)
110 // MIGRATED onto nx_gate_verdict by nx_gate_dry_apply (D001, minimal form): every check
111 // row above is untouched, so the PASS/FAIL vector cannot change; only the hand-rolled
112 // verdict emission is replaced by the ONE shared base class. Proven by nx_gate_migrate verify.
113 let ctr__dry: *i64 = gv_ctr()
114 ctr__dry[0] = pass
115 ctr__dry[1] = pass + fail
116 let rc__dry: i64 = gv_verdict("LIVE-XLATE-CALL-GATE" as *u8, ctr__dry, "bidirectional RU<->EN translated call; girl reads native Cyrillic, boy reads Latin; same-locale verbatim" as *u8)
117 sys_exit(rc__dry)
118 return rc__dry
119}