code wiki / _hdl_build / nx_multilang_call_gate.nx

nx_multilang_call_gate.nx source

↩ module page · 118 lines · 5725 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" 16 17func rg(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 } 18func rgn(v: i64) -> i64 { 19 if v == 0 { sys_write(1, "0" as *u8, 1); return 0 } 20 var m: i64 = v; if m < 0 { sys_write(1, "-" as *u8, 1); m = 0 - m } 21 let d: *u8 = sys_mmap(24); var k: i64 = 0 22 while m > 0 { d[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 } 23 var j: i64 = k - 1 24 while j >= 0 { sys_write(1, ((d as i64)+j) as *u8, 1); j = j - 1 } 25 return 0 26} 27func slen(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} return n } 28func bcmp(a: *u8, alen: i64, b: *u8) -> i64 { 29 var i: i64 = 0 30 while i < alen { if b[i]==(0 as u8) { return 0 } if a[i]!=b[i] { return 0 } i=i+1 } 31 if b[alen]!=(0 as u8) { return 0 } 32 return 1 33} 34func mkfb(w: i64, h: i64) -> *Framebuffer { 35 let px: *u8 = sys_mmap(w * h * 4) 36 let fb: *Framebuffer = sys_mmap(NX_FRAMEBUFFER_BYTES) as *Framebuffer 37 nx_framebuffer_init(fb, px, w, h); nx_framebuffer_clear(fb) 38 return fb 39} 40// translate src (lang a -> lang b), print, and check byte-exact vs expected. returns the dst buffer. 41func tcheck(src: *u8, a: i64, b: i64, expect: *u8, lbl: *u8, pass: *i64, fail: *i64) -> *u8 { 42 let dst: *u8 = sys_mmap(256) 43 let dn: i64 = nx_multi_translate(src, slen(src), a, b, dst, 256) 44 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) 45 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) } 46 return dst 47} 48 49func main() -> i64 { 50 rg("=== nx_multilang_call_gate: EN-pivot translated call over EN/RU/BE/UK/PL ===\n" as *u8) 51 var pass: i64 = 0 52 var fail: i64 = 0 53 let pp: *i64 = sys_mmap(8) as *i64 54 let ff: *i64 = sys_mmap(8) as *i64 55 pp[0]=0; ff[0]=0 56 57 // direct pairs (EN <-> each) 58 tcheck("hello friend" as *u8, MM_EN, MM_RU, "привет друг" as *u8, "EN->RU" as *u8, pp, ff) 59 let be: *u8 = tcheck("hello love" as *u8, MM_EN, MM_BE, "вітаю любоў" as *u8, "EN->BE" as *u8, pp, ff) 60 tcheck("thanks friend" as *u8, MM_EN, MM_UK, "дякую друг" as *u8, "EN->UK" as *u8, pp, ff) 61 let pl: *u8 = tcheck("hello thanks" as *u8, MM_EN, MM_PL, "cześć dziękuję" as *u8, "EN->PL" as *u8, pp, ff) 62 tcheck("спасибо любовь" as *u8, MM_RU, MM_EN, "thanks love" as *u8, "RU->EN" as *u8, pp, ff) 63 tcheck("cześć przyjaciel" as *u8, MM_PL, MM_EN, "hello friend" as *u8, "PL->EN" as *u8, pp, ff) 64 // cross-pairs via the English pivot 65 tcheck("привет друг" as *u8, MM_RU, MM_PL, "cześć przyjaciel" as *u8, "RU->PL(pivot)" as *u8, pp, ff) 66 let uk: *u8 = tcheck("cześć miłość" as *u8, MM_PL, MM_UK, "привіт любов" as *u8, "PL->UK(pivot)" as *u8, pp, ff) 67 // neg-controls 68 tcheck("hello" as *u8, MM_EN, MM_EN, "hello" as *u8, "same-lang" as *u8, pp, ff) 69 tcheck("hello xyzzy" as *u8, MM_EN, MM_RU, "привет xyzzy" as *u8, "passthrough" as *u8, pp, ff) 70 pass = pp[0]; fail = ff[0] 71 72 // render BE / PL / UK captions natively + eyeball 73 let w: i64 = 320 74 let h: i64 = 64 75 let bar: *CssColor = sys_mmap(NX_CSS_COLOR_BYTES) as *CssColor 76 bar.r=0; bar.g=0; bar.b=0; bar.a=255 77 let fg: *CssColor = sys_mmap(NX_CSS_COLOR_BYTES) as *CssColor 78 fg.r=255; fg.g=235; fg.b=60; fg.a=255 79 let vid: *CssColor = sys_mmap(NX_CSS_COLOR_BYTES) as *CssColor 80 vid.r=30; vid.g=44; vid.b=64; vid.a=255 81 82 let fbs: *i64 = sys_mmap(3 * 8) as *i64 83 let caps: **u8 = sys_mmap(3 * 8) as **u8 84 caps[0]=be; caps[1]=pl; caps[2]=uk 85 var j: i64 = 0 86 while j < 3 { 87 let fb: *Framebuffer = mkfb(w, h) 88 nx_paint_solid_rect(fb, 0, 0, w, h, vid) 89 let set: i64 = nx_caption_render_uni(fb, caps[j], slen(caps[j]), 2, bar, fg) 90 if set > 0 { pass=pass+1 } else { fail=fail+1; rg(" render RED\n" as *u8) } 91 fbs[j] = fb as i64 92 j = j + 1 93 } 94 let H3: i64 = h * 3 95 let rgb: *u8 = sys_mmap(w * H3 * 3) 96 var p: i64 = 0 97 while p < 3 { 98 let fb: *Framebuffer = fbs[p] as *Framebuffer 99 var y: i64 = 0 100 while y < h { 101 var x: i64 = 0 102 while x < w { 103 let s: i64 = (y * w + x) * 4 104 let d: i64 = ((p * h + y) * w + x) * 3 105 rgb[d+0]=fb.pixels[s+0]; rgb[d+1]=fb.pixels[s+1]; rgb[d+2]=fb.pixels[s+2] 106 x = x + 1 107 } 108 y = y + 1 109 } 110 p = p + 1 111 } 112 nx_png_write_rgb("knowledge/nx_multilang_call.png" as *u8, rgb, w, H3) 113 rg(" eyeball -> knowledge/nx_multilang_call.png (BE / PL / UK)\n" as *u8) 114 115 rg("MULTILANG-CALL-GATE pass=" as *u8); rgn(pass); rg(" fail=" as *u8); rgn(fail) 116 if fail == 0 { rg(" verdict=GREEN -- EN-pivot translation across EN/RU/BE/UK/PL incl cross-pairs; native render; neg-controls hold\n" as *u8); sys_exit(0); return 0 } 117 rg(" verdict=RED\n" as *u8); sys_exit(1); return 1 118}