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}