nx_step_sample_fetch.nx source
↩ module page · 48 lines · 2488 B
1// nx_step_sample_fetch.nx -- R1a of the CAD car-twin ladder: bank the CANONICAL STEP assembly test file
2// as1-oc-214.stp (AP214, OpenCASCADE export of the classic NIST as1 bolt/nut/plate/rod/bracket assembly)
3// = the REAL input for nx_step_parse gates (rigged self-authored fixtures banned). Verified 2026-07-07:
4// valid ISO-10303-21, about 1100 entities, PRODUCT + NEXT_ASSEMBLY_USAGE_OCCURRENCE present.
5// Saves knowledge/fetched/step_as1.stp. expect_exit: 0 license_tier: ORIGINAL
6import "nx_syscalls.nx"
7import "nx_x509_trust_store.nx"
8import "nx_trust_store_load_from_certdata.nx"
9import "nx_https_fetch_follow.nx"
10const K_MAGIC_4194304: i64 = 4194304
11
12func sf_puts(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 }
13func sf_putn(v: i64) -> i64 {
14 let bb: *u8 = sys_mmap(28)
15 var m: i64 = v
16 if m < 0 { sf_puts("-" as *u8); m = 0 - m }
17 let t: *u8 = sys_mmap(28)
18 var k: i64 = 0
19 if m == 0 { t[0] = 48 as u8; k = 1 }
20 while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 }
21 var i: i64 = 0
22 while i < k { bb[i] = t[k - 1 - i]; i = i + 1 }
23 sys_write(1, bb, k)
24 return 0
25}
26func sf_have(path: *u8) -> i64 { let fd: i64 = sys_openat_rd(path); if fd < 0 { return 0 } sys_close(fd); return 1 }
27
28func main() -> i64 {
29 let opath: *u8 = "knowledge/fetched/step_as1.stp" as *u8
30 if sf_have(opath) == 1 { sf_puts("step_as1.stp [have-skip]\nverdict=GREEN\n" as *u8); return 0 }
31 let r: i64 = nx_trust_store_load_from_certdata("data/mozilla_certdata.txt" as *u8, 512, K_MAGIC_4194304)
32 if r <= 0 { sf_puts("STEP-FETCH: certdata load failed\n" as *u8); return 1 }
33 let store: *TrustStore = r as *TrustStore
34 let cap: i64 = K_MAGIC_4194304
35 let out: *u8 = sys_mmap(cap)
36 let status: *i64 = sys_mmap(8) as *i64
37 let url: *u8 = "https://raw.githubusercontent.com/stepcode/stepcode/master/data/ap214e3/as1-oc-214.stp" as *u8
38 let n: i64 = nx_https_fetch_follow(url, store, out, cap, 6, status)
39 sf_puts(url); sf_puts(" status=" as *u8); sf_putn(status[0]); sf_puts(" bytes=" as *u8); sf_putn(n); sf_puts("\n" as *u8)
40 if n <= 0 { sf_puts("verdict=FAIL\n" as *u8); return 1 }
41 if status[0] != 200 { sf_puts("verdict=FAIL non-200\n" as *u8); return 1 }
42 let fd: i64 = sys_openat_wr(opath, 0x1a4)
43 if fd < 0 { sf_puts("SAVE-FAIL\n" as *u8); return 1 }
44 sys_write(fd, out, n)
45 sys_close(fd)
46 sf_puts("SAVED verdict=GREEN\n" as *u8)
47 return 0
48}