code wiki / (root) / nx_arousal_skin.nx

nx_arousal_skin.nx source

↩ module page · 77 lines · 3763 B

1// nx_arousal_skin.nx -- CLI over nx_arousal_skin_lib (skin optics). Holds NO math of its own; the 2// renderer shares the same lib so a CLI number and a rendered pixel can never disagree. 3// usage: nx_arousal_skin skin <site0-5> <perfusion_permil> <melanin_permil> [propensity_permil] 4// nx_arousal_skin sites 5// nx_arousal_skin selftest 6// license_tier: ORIGINAL expect_exit: 0 7import "nx_arousal_skin_lib.nx" 8 9func main(argc: i64, argv: *i64) -> i64 { 10 if argc < 2 { a_puts("REFUSED reason=no_verb\n" as *u8); return 2 } 11 let verb: *u8 = argv[1] as *u8 12 let cl: *i64 = sys_mmap(16) as *i64 13 cl[0] = 0 14 let cbuf: *u8 = sys_read_file("arousal_params.conf" as *u8, cl) 15 let cn: i64 = cl[0] 16 let ext: *i64 = sys_mmap(SK_EXTN * 8) as *i64 17 ext[0] = a_conf(cbuf, cn, "mel_ext_r" as *u8, 300) 18 ext[1] = a_conf(cbuf, cn, "mel_ext_g" as *u8, 500) 19 ext[2] = a_conf(cbuf, cn, "mel_ext_b" as *u8, 700) 20 ext[3] = a_conf(cbuf, cn, "hb_ext_r" as *u8, 100) 21 ext[4] = a_conf(cbuf, cn, "hb_ext_g" as *u8, 700) 22 ext[5] = a_conf(cbuf, cn, "hb_ext_b" as *u8, 900) 23 ext[6] = a_conf(cbuf, cn, "hb_base" as *u8, 150) 24 ext[7] = a_conf(cbuf, cn, "hb_span" as *u8, 600) 25 ext[8] = a_conf(cbuf, cn, "flush_span" as *u8, 300) 26 27 if verb[0] == (115 as u8) { 28 if verb[1] == (107 as u8) { 29 if argc < 5 { a_puts("REFUSED reason=skin_needs_3_args\n" as *u8); return 2 } 30 let site: i64 = a_atoi(argv[2] as *u8) 31 let perf: i64 = a_atoi(argv[3] as *u8) 32 let mel: i64 = a_atoi(argv[4] as *u8) 33 var prop: i64 = 1000 34 if argc >= 6 { prop = a_atoi(argv[5] as *u8) } 35 if site < 0 { a_puts("REFUSED reason=bad_site\n" as *u8); return 3 } 36 if site >= SK_NSITES { a_puts("REFUSED reason=bad_site\n" as *u8); return 3 } 37 if perf < 0 { a_puts("REFUSED reason=perfusion_out_of_range\n" as *u8); return 3 } 38 if perf > 1000 { a_puts("REFUSED reason=perfusion_out_of_range\n" as *u8); return 3 } 39 if mel < 0 { a_puts("REFUSED reason=melanin_out_of_range\n" as *u8); return 3 } 40 if mel > 1000 { a_puts("REFUSED reason=melanin_out_of_range\n" as *u8); return 3 } 41 if prop < 0 { a_puts("REFUSED reason=propensity_out_of_range\n" as *u8); return 3 } 42 if prop > 1000 { a_puts("REFUSED reason=propensity_out_of_range\n" as *u8); return 3 } 43 let out: *i64 = sys_mmap(SK_OUTN * 8) as *i64 44 sk_eval(site, perf, mel, prop, ext, out) 45 var rg: i64 = 0 46 if out[3] > 0 { rg = (out[2] * 1000) / out[3] } 47 a_puts("ok site=" as *u8); a_puts(sk_name(site)) 48 a_puts(" local_perf=" as *u8); a_putn(out[0]) 49 a_puts(" hb=" as *u8); a_putn(out[1]) 50 a_puts(" r=" as *u8); a_putn(out[2]) 51 a_puts(" g=" as *u8); a_putn(out[3]) 52 a_puts(" b=" as *u8); a_putn(out[4]) 53 a_puts(" rg=" as *u8); a_putn(rg) 54 a_puts(" flush=" as *u8); a_putn(out[5]) 55 a_puts("\n" as *u8) 56 return 0 57 } 58 if verb[1] == (105 as u8) { 59 var i: i64 = 0 60 while i < SK_NSITES { 61 a_puts("site=" as *u8); a_putn(i) 62 a_puts(" name=" as *u8); a_puts(sk_name(i)) 63 a_puts(" thresh=" as *u8); a_putn(sk_thresh(i)) 64 a_puts(" gain=" as *u8); a_putn(sk_site_gain(i)) 65 a_puts("\n" as *u8) 66 i = i + 1 67 } 68 return 0 69 } 70 a_puts("SKIN-SELFTEST conf_bytes=" as *u8); a_putn(cn) 71 a_puts(" nsites=" as *u8); a_putn(SK_NSITES) 72 a_puts("\n" as *u8) 73 return 0 74 } 75 a_puts("REFUSED reason=unknown_verb\n" as *u8) 76 return 2 77}