code wiki / _hdl_build / nx_vizsla_ics.nx
nx_vizsla_ics.nx
buildroot/runtime/_hdl_build/nx_vizsla_ics.nx
about
nx_vizsla_ics.nx -- NISHI VIZSLA R-CAL.4 (census PA14 interop): RFC 5545 iCalendar EXPORT.
Operator 2026-07-07: "exposing a calendar for a group to coordinate" -- the sovereign calendar
store becomes a standards-compliant .ics artifact ANY calendar app (Google/Apple/Outlook/
Thunderbird) can import or subscribe to. READ-ONLY over the R-CAL data plane (cal: events +
rec: RRULE records written by nx_vizsla_calendar); the data never needs a cloud account.
Command (argv[1]):
export <prefix> <from YYYY-MM-DD> <to YYYY-MM-DD> <out.ics>
cal: events with from<=date<=to -> VEVENT (DTSTART/DTEND local floating time)
rec: rules intersecting [from,to] (first occurrence <= to AND last >= from)
-> VEVENT anchored at sdate + native RRULE passthrough
(FREQ=DAILY|WEEKLY|MONTHLY|YEARLY;INTERVAL;COUNT)
RFC 5545 discipline (the gate's oracle): CRLF line ends; VERSION:2.0 + PRODID; every VEVENT
carries UID (stable "<id>-<YYYYMMDD>@nishi.vizsla") + DTSTAMP; TEXT escaping of \ ; , in
SUMMARY; content lines folded at 75 octets (continuation = CRLF + single space).
DETERMINISM: no clocks -- DTSTAMP derives from the record's own date, so the same store
exports byte-identical .ics every run (subscribable artifact, CID-friendly).
HONEST SCOPE: floating local time (no VTIMEZONE) -- right for a same-timezone friend group;
TZ-aware export is a later rung. Loud-fail: bad dates, to<from, unwritable out, unknown cmd.
spec: knowledge/research/2026-06-22-vizsla-sclass-roadmap.md license_tier: ORIGINAL
dependencies 3 imports · 0 importers
imports: nx_syscalls.nxnx_seg_store.nxnx_canon_cid.nx
imported by: nobody (leaf or entry point)
structs
| none |
consts
| 24 | const K_MAGIC_1970: i64 = 1970 |
| 25 | const K_MAGIC_146097: i64 = 146097 |
| 26 | const K_MAGIC_719468: i64 = 719468 |
| 27 | const K_MAGIC_146096: i64 = 146096 |
| 28 | const K_MAGIC_1460: i64 = 1460 |
| 29 | const K_MAGIC_36524: i64 = 36524 |
| 30 | const K_MAGIC_524288: i64 = 524288 |
| 31 | const K_MAGIC_4096: i64 = 4096 |
| 32 | const K_MAGIC_2048: i64 = 2048 |
| 33 | const K_MAGIC_1024: i64 = 1024 |
functions
| 35 | func vi_slen(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } return n } |
| 36 | func vi_p(s: *u8) -> i64 { sys_write(1, s, vi_slen(s)); return 0 } |
| 38 | func vi_eq(a: *u8, b: *u8) -> i64 called by 1: vi_occ |
| 49 | func vi_atoi(s: *u8) -> i64 |
| 60 | func vi_cat(dst: *u8, off: i64, s: *u8) -> i64 |
| 66 | func vi_catc(dst: *u8, off: i64, c: i64) -> i64 |
| 71 | func vi_catn(dst: *u8, off: i64, v: i64) -> i64 |
| 84 | func vi_kmemeq(b: *u8, off: i64, n: i64, s: *u8) -> i64 |
| 94 | func vi_field(rec: *u8, rl: i64, want: *u8, out: *u8, cap: i64) -> i64 |
| 121 | func vi_iskind(b: *u8, koff: i64, kl: i64, pfx: *u8) -> i64 calls 1: vi_kmemeq |
| 127 | func vi_datedays(s: *u8) -> i64 |
| 168 | func vi_ymd2days(y0: i64, m: i64, d: i64) -> i64 called by 1: vi_occ |
| 180 | func vi_civil(z0: i64, out: *i64) -> i64 |
| 198 | func vi_dim(y: i64, m: i64) -> i64 called by 1: vi_occ |
| 215 | func vi_occ(freq: *u8, sd0: i64, sy: i64, sm: i64, sd: i64, interval: i64, k: i64) -> i64 |
| 230 | func vi_dt8(dst: *u8, off: i64, s: *u8) -> i64 |
| 241 | func vi_hms(dst: *u8, off: i64, m: i64) -> i64 |
| 254 | func vi_esc(dst: *u8, off: i64, s: *u8) -> i64 calls 1: vi_catc |
| 273 | func vi_fold(rep: *u8, off: i64, lb: *u8, ll: i64, st: *i64) -> i64 |
| 302 | func vi_cmd_export(argc: i64, argv: *i64) -> i64 |
| 492 | func vi_find2(list: *i64, n: i64, s: *u8) -> i64 |
| 501 | func vi_dup(s: *u8) -> *u8 |
| 510 | func vi_put(keys: *i64, vals: *i64, nf: i64, kp: *u8, st: *i64) -> i64 |
| 539 | func vi_unfold(src: *u8, slen: i64, dst: *u8) -> i64 |
| 560 | func vi_prop(line: *u8, llen: i64, name: *u8, out: *u8, cap: i64) -> i64 |
| 592 | func vi_dtparse(v: *u8, datebuf: *u8) -> i64 |
| 618 | func vi_idfromuid(uid: *u8, out: *u8, cap: i64) -> i64 |
| 652 | func vi_rrparse(v: *u8, freq: *u8, ival: *u8, cnt: *u8) -> i64 |
| 682 | func vi_cmd_import(argc: i64, argv: *i64) -> i64 |
| 840 | func main(argc: i64, argv: *i64) -> i64 |