code wiki / _hdl_build / nx_multilang_call_gate.nx

nx_multilang_call_gate.nx source

↩ module page · 126 lines · 6116 B

1// nx_multilang_call_gate.nx -- proves the EN-pivot multilingual translated call across EN/RU/BE/UK/PL, NO fake 2// green. Direct pairs (EN<->each) AND cross-pairs via the English pivot (RU->PL, PL->UK). Byte-exact asserts + 3// neg-controls (same-language verbatim, unknown passthrough). Renders BE/PL/UK captions to frames + eyeball -> 4// knowledge/nx_multilang_call.png. expect_exit: 0 license_tier: ORIGINAL 5import "nx_syscalls.nx" 6import "nx_css_color_decode.nx" 7import "nx_paint_solid_rect.nx" 8import "nx_font8x8.nx" 9import "nx_font_cyrillic8.nx" 10import "nx_font_latinext8.nx" 11import "nx_font_cyrillic_ext8.nx" 12import "nx_utf8.nx" 13import "nx_caption_render_uni.nx" 14import "nx_mt_multi.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 } 29func bcmp(a: *u8, alen: i64, b: *u8) -> i64 { 30 var i: i64 = 0 31 while i < alen { if b[i]==(0 as u8) { return 0 } if a[i]!=b[i] { return 0 } i=i+1 } 32 if b[alen]!=(0 as u8) { return 0 } 33 return 1 34} 35func mkfb(w: i64, h: i64) -> *Framebuffer { 36 let px: *u8 = sys_mmap(w * h * 4) 37 let fb: *Framebuffer = sys_mmap(NX_FRAMEBUFFER_BYTES) as *Framebuffer 38 nx_framebuffer_init(fb, px, w, h); nx_framebuffer_clear(fb) 39 return fb 40} 41// translate src (lang a -> lang b), print, and check byte-exact vs expected. returns the dst buffer. 42func tcheck(src: *u8, a: i64, b: i64, expect: *u8, lbl: *u8, pass: *i64, fail: *i64) -> *u8 { 43 let dst: *u8 = sys_mmap(256) 44 let dn: i64 = nx_multi_translate(src, slen(src), a, b, dst, 256) 45 rg(" " as *u8); rg(lbl); rg(" '" as *u8); sys_write(1, src, slen(src)); rg("' -> '" as *u8); sys_write(1, dst, dn); rg("'" as *u8) 46 if bcmp(dst, dn, expect) == 1 { *pass=*pass+1; rg(" GREEN\n" as *u8) } else { *fail=*fail+1; rg(" RED (want '" as *u8); rg(expect); rg("')\n" as *u8) } 47 return dst 48} 49 50func main() -> i64 { 51 rg("=== nx_multilang_call_gate: EN-pivot translated call over EN/RU/BE/UK/PL ===\n" as *u8) 52 var pass: i64 = 0 53 var fail: i64 = 0 54 let pp: *i64 = sys_mmap(8) as *i64 55 let ff: *i64 = sys_mmap(8) as *i64 56 pp[0]=0; ff[0]=0 57 58 // direct pairs (EN <-> each) 59 tcheck("hello friend" as *u8, MM_EN, MM_RU, "привет друг" as *u8, "EN->RU" as *u8, pp, ff) 60 let be: *u8 = tcheck("hello love" as *u8, MM_EN, MM_BE, "вітаю любоў" as *u8, "EN->BE" as *u8, pp, ff) 61 tcheck("thanks friend" as *u8, MM_EN, MM_UK, "дякую друг" as *u8, "EN->UK" as *u8, pp, ff) 62 let pl: *u8 = tcheck("hello thanks" as *u8, MM_EN, MM_PL, "cześć dziękuję" as *u8, "EN->PL" as *u8, pp, ff) 63 tcheck("спасибо любовь" as *u8, MM_RU, MM_EN, "thanks love" as *u8, "RU->EN" as *u8, pp, ff) 64 tcheck("cześć przyjaciel" as *u8, MM_PL, MM_EN, "hello friend" as *u8, "PL->EN" as *u8, pp, ff) 65 // cross-pairs via the English pivot 66 tcheck("привет друг" as *u8, MM_RU, MM_PL, "cześć przyjaciel" as *u8, "RU->PL(pivot)" as *u8, pp, ff) 67 let uk: *u8 = tcheck("cześć miłość" as *u8, MM_PL, MM_UK, "привіт любов" as *u8, "PL->UK(pivot)" as *u8, pp, ff) 68 // neg-controls 69 tcheck("hello" as *u8, MM_EN, MM_EN, "hello" as *u8, "same-lang" as *u8, pp, ff) 70 tcheck("hello xyzzy" as *u8, MM_EN, MM_RU, "привет xyzzy" as *u8, "passthrough" as *u8, pp, ff) 71 pass = pp[0]; fail = ff[0] 72 73 // render BE / PL / UK captions natively + eyeball 74 let w: i64 = 320 75 let h: i64 = 64 76 let bar: *CssColor = sys_mmap(NX_CSS_COLOR_BYTES) as *CssColor 77 bar.r=0; bar.g=0; bar.b=0; bar.a=255 78 let fg: *CssColor = sys_mmap(NX_CSS_COLOR_BYTES) as *CssColor 79 fg.r=255; fg.g=235; fg.b=60; fg.a=255 80 let vid: *CssColor = sys_mmap(NX_CSS_COLOR_BYTES) as *CssColor 81 vid.r=30; vid.g=44; vid.b=64; vid.a=255 82 83 let fbs: *i64 = sys_mmap(3 * 8) as *i64 84 let caps: **u8 = sys_mmap(3 * 8) as **u8 85 caps[0]=be; caps[1]=pl; caps[2]=uk 86 var j: i64 = 0 87 while j < 3 { 88 let fb: *Framebuffer = mkfb(w, h) 89 nx_paint_solid_rect(fb, 0, 0, w, h, vid) 90 let set: i64 = nx_caption_render_uni(fb, caps[j], slen(caps[j]), 2, bar, fg) 91 if set > 0 { pass=pass+1 } else { fail=fail+1; rg(" render RED\n" as *u8) } 92 fbs[j] = fb as i64 93 j = j + 1 94 } 95 let H3: i64 = h * 3 96 let rgb: *u8 = sys_mmap(w * H3 * 3) 97 var p: i64 = 0 98 while p < 3 { 99 let fb: *Framebuffer = fbs[p] as *Framebuffer 100 var y: i64 = 0 101 while y < h { 102 var x: i64 = 0 103 while x < w { 104 let s: i64 = (y * w + x) * 4 105 let d: i64 = ((p * h + y) * w + x) * 3 106 rgb[d+0]=fb.pixels[s+0]; rgb[d+1]=fb.pixels[s+1]; rgb[d+2]=fb.pixels[s+2] 107 x = x + 1 108 } 109 y = y + 1 110 } 111 p = p + 1 112 } 113 nx_png_write_rgb("knowledge/nx_multilang_call.png" as *u8, rgb, w, H3) 114 rg(" eyeball -> knowledge/nx_multilang_call.png (BE / PL / UK)\n" as *u8) 115 116 rg("MULTILANG-CALL-GATE pass=" as *u8); rgn(pass); rg(" fail=" as *u8); rgn(fail) 117 // MIGRATED onto nx_gate_verdict by nx_gate_dry_apply (D001, minimal form): every check 118 // row above is untouched, so the PASS/FAIL vector cannot change; only the hand-rolled 119 // verdict emission is replaced by the ONE shared base class. Proven by nx_gate_migrate verify. 120 let ctr__dry: *i64 = gv_ctr() 121 ctr__dry[0] = pass 122 ctr__dry[1] = pass + fail 123 let rc__dry: i64 = gv_verdict("MULTILANG-CALL-GATE" as *u8, ctr__dry, "EN-pivot translation across EN/RU/BE/UK/PL incl cross-pairs; native render; neg-controls hold" as *u8) 124 sys_exit(rc__dry) 125 return rc__dry 126}