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}