nx_fin_extract.nx source
↩ module page · 144 lines · 13373 B
1// nx_fin_extract.nx -- RUNG 2 of THE NISHI FINANCIAL ECOSYSTEM researcher: EXTRACT stage.
2// Streams each sovereignly-fetched knowledge/fetched/fin_*.raw (Wikipedia HTML) through the team's
3// own nx_html_to_text renderer (strips tags, decodes 110+ entities, suppresses script/style, collapses
4// whitespace) into clean, dated plain-text dossiers in the Nishi LIBRARY (knowledge/library/). 100%
5// sovereign (no curl/gcc/3rd-party parser) -- reuses nx_html_to_text (DRY #15). Buffers are reused per
6// file so no per-file accumulation. Re-runnable (overwrites). expect_exit: 0 license_tier: ORIGINAL
7import "nx_syscalls.nx"
8import "nx_html_to_text.nx"
9const K_MAGIC_8388608: i64 = 8388608
10
11func fx_puts(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 }
12func fx_putn(v: i64) -> i64 {
13 if v == 0 { sys_write(1, "0" as *u8, 1); return 0 }
14 var m: i64 = v
15 if m < 0 { sys_write(1, "-" as *u8, 1); m = 0 - m }
16 let d: *u8 = sys_mmap(24); var k: i64 = 0
17 while m > 0 { d[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 }
18 var j: i64 = k - 1
19 while j >= 0 { sys_write(1, ((d as i64)+j) as *u8, 1); j = j - 1 }
20 return 0
21}
22
23func read_all(path: *u8, buf: *u8, cap: i64) -> i64 {
24 let fd: i64 = sys_openat_rd(path)
25 if fd < 0 { return 0 - 1 }
26 var total: i64 = 0
27 var go: i64 = 1
28 while go == 1 {
29 let dst: *u8 = ((buf as i64) + total) as *u8
30 let n: i64 = sys_read(fd, dst, cap - total)
31 if n <= 0 { go = 0 } else { total = total + n; if total >= cap { go = 0 } }
32 }
33 sys_close(fd)
34 return total
35}
36
37// First index of NUL-terminated needle in text[from..n), or -1.
38func fx_find(text: *u8, n: i64, needle: *u8, from: i64) -> i64 {
39 var m: i64 = 0; while needle[m] != (0 as u8) { m = m + 1 }
40 if m == 0 { return from }
41 var i: i64 = from
42 while i + m <= n {
43 var j: i64 = 0; var ok: i64 = 1
44 while j < m { if text[i + j] != needle[j] { ok = 0; j = m } else { j = j + 1 } }
45 if ok == 1 { return i }
46 i = i + 1
47 }
48 return 0 - 1
49}
50
51func extract_one(inpath: *u8, outpath: *u8, raw: *u8, txt: *u8, cap: i64) -> i64 {
52 let n: i64 = read_all(inpath, raw, cap)
53 if n <= 0 { fx_puts(inpath); fx_puts(" READ-FAIL\n"); return 0 }
54 // Trim to the Wikipedia article body: [mw-content-text .. catlinks). Falls back to whole page.
55 var s: i64 = fx_find(raw, n, "mw-content-text" as *u8, 0)
56 if s < 0 { s = 0 }
57 var e: i64 = fx_find(raw, n, "catlinks" as *u8, s)
58 if e < 0 { e = n }
59 let bodyptr: *u8 = ((raw as i64) + s) as *u8
60 let m: i64 = nx_html_to_text(bodyptr, e - s, txt, cap)
61 if m <= 0 { fx_puts(inpath); fx_puts(" EXTRACT-EMPTY\n"); return 0 }
62 let fd: i64 = sys_openat_wr(outpath, 0x1a4)
63 if fd < 0 { fx_puts(outpath); fx_puts(" WRITE-FAIL\n"); return 0 }
64 sys_write(fd, txt, m)
65 sys_close(fd)
66 fx_puts(outpath); fx_puts(" ("); fx_putn(n); fx_puts("B->"); fx_putn(m); fx_puts("B)\n")
67 return 1
68}
69
70func main() -> i64 {
71 let cap: i64 = K_MAGIC_8388608
72 let raw: *u8 = sys_mmap(cap)
73 let txt: *u8 = sys_mmap(cap)
74 var ok: i64 = 0
75 ok = ok + extract_one("knowledge/fetched/fin_r1_heloc.raw" as *u8, "knowledge/library/fin_r1_heloc_2026-06-20.txt" as *u8, raw, txt, cap)
76 ok = ok + extract_one("knowledge/fetched/fin_r1_debt_consolidation.raw" as *u8, "knowledge/library/fin_r1_debt_consolidation_2026-06-20.txt" as *u8, raw, txt, cap)
77 ok = ok + extract_one("knowledge/fetched/fin_r2_unemployment.raw" as *u8, "knowledge/library/fin_r2_unemployment_2026-06-20.txt" as *u8, raw, txt, cap)
78 ok = ok + extract_one("knowledge/fetched/fin_r2_cobra.raw" as *u8, "knowledge/library/fin_r2_cobra_2026-06-20.txt" as *u8, raw, txt, cap)
79 ok = ok + extract_one("knowledge/fetched/fin_r2_ssdi.raw" as *u8, "knowledge/library/fin_r2_ssdi_2026-06-20.txt" as *u8, raw, txt, cap)
80 ok = ok + extract_one("knowledge/fetched/fin_r3_medical_debt.raw" as *u8, "knowledge/library/fin_r3_medical_debt_2026-06-20.txt" as *u8, raw, txt, cap)
81 ok = ok + extract_one("knowledge/fetched/fin_r3_no_surprises_act.raw" as *u8, "knowledge/library/fin_r3_no_surprises_act_2026-06-20.txt" as *u8, raw, txt, cap)
82 ok = ok + extract_one("knowledge/fetched/fin_r3_medical_billing.raw" as *u8, "knowledge/library/fin_r3_medical_billing_2026-06-20.txt" as *u8, raw, txt, cap)
83 ok = ok + extract_one("knowledge/fetched/fin_r4_foreclosure.raw" as *u8, "knowledge/library/fin_r4_foreclosure_2026-06-20.txt" as *u8, raw, txt, cap)
84 ok = ok + extract_one("knowledge/fetched/fin_r4_mortgage_modification.raw" as *u8, "knowledge/library/fin_r4_mortgage_modification_2026-06-20.txt" as *u8, raw, txt, cap)
85 ok = ok + extract_one("knowledge/fetched/fin_r5_credit_score.raw" as *u8, "knowledge/library/fin_r5_credit_score_2026-06-20.txt" as *u8, raw, txt, cap)
86 ok = ok + extract_one("knowledge/fetched/fin_r5_fcra.raw" as *u8, "knowledge/library/fin_r5_fcra_2026-06-20.txt" as *u8, raw, txt, cap)
87 ok = ok + extract_one("knowledge/fetched/fin_r6_fdcpa.raw" as *u8, "knowledge/library/fin_r6_fdcpa_2026-06-20.txt" as *u8, raw, txt, cap)
88 ok = ok + extract_one("knowledge/fetched/fin_r6_homestead.raw" as *u8, "knowledge/library/fin_r6_homestead_2026-06-20.txt" as *u8, raw, txt, cap)
89 ok = ok + extract_one("knowledge/fetched/fin_r6_chapter7.raw" as *u8, "knowledge/library/fin_r6_chapter7_2026-06-20.txt" as *u8, raw, txt, cap)
90 ok = ok + extract_one("knowledge/fetched/fin_r6_hoa.raw" as *u8, "knowledge/library/fin_r6_hoa_2026-06-20.txt" as *u8, raw, txt, cap)
91 ok = ok + extract_one("knowledge/fetched/fin_r7_refinancing.raw" as *u8, "knowledge/library/fin_r7_refinancing_2026-06-20.txt" as *u8, raw, txt, cap)
92 ok = ok + extract_one("knowledge/fetched/fin_r7_fha_loan.raw" as *u8, "knowledge/library/fin_r7_fha_loan_2026-06-20.txt" as *u8, raw, txt, cap)
93 ok = ok + extract_one("knowledge/fetched/fin_r8_fixed_point.raw" as *u8, "knowledge/library/fin_r8_fixed_point_2026-06-20.txt" as *u8, raw, txt, cap)
94 ok = ok + extract_one("knowledge/fetched/fin_r8_apr.raw" as *u8, "knowledge/library/fin_r8_apr_2026-06-20.txt" as *u8, raw, txt, cap)
95 ok = ok + extract_one("knowledge/fetched/fin_r9_double_entry.raw" as *u8, "knowledge/library/fin_r9_double_entry_2026-06-20.txt" as *u8, raw, txt, cap)
96 ok = ok + extract_one("knowledge/fetched/fin_r9_net_worth.raw" as *u8, "knowledge/library/fin_r9_net_worth_2026-06-20.txt" as *u8, raw, txt, cap)
97 ok = ok + extract_one("knowledge/fetched/fin_r10_cpt.raw" as *u8, "knowledge/library/fin_r10_cpt_2026-06-20.txt" as *u8, raw, txt, cap)
98 ok = ok + extract_one("knowledge/fetched/fin_r10_medicare.raw" as *u8, "knowledge/library/fin_r10_medicare_2026-06-20.txt" as *u8, raw, txt, cap)
99 ok = ok + extract_one("knowledge/fetched/fin_r11_rules_engine.raw" as *u8, "knowledge/library/fin_r11_rules_engine_2026-06-20.txt" as *u8, raw, txt, cap)
100 ok = ok + extract_one("knowledge/fetched/fin_r12_estate_planning.raw" as *u8, "knowledge/library/fin_r12_estate_planning_2026-06-20.txt" as *u8, raw, txt, cap)
101 ok = ok + extract_one("knowledge/fetched/fin_r12_advance_directive.raw" as *u8, "knowledge/library/fin_r12_advance_directive_2026-06-20.txt" as *u8, raw, txt, cap)
102 ok = ok + extract_one("knowledge/fetched/fin_r13_tax_sale.raw" as *u8, "knowledge/library/fin_r13_tax_sale_2026-06-20.txt" as *u8, raw, txt, cap)
103 ok = ok + extract_one("knowledge/fetched/fin_r14_paper_trading.raw" as *u8, "knowledge/library/fin_r14_paper_trading_2026-06-20.txt" as *u8, raw, txt, cap)
104 ok = ok + extract_one("knowledge/fetched/fin_r15_order.raw" as *u8, "knowledge/library/fin_r15_order_2026-06-20.txt" as *u8, raw, txt, cap)
105 ok = ok + extract_one("knowledge/fetched/fin_r16_market_data.raw" as *u8, "knowledge/library/fin_r16_market_data_2026-06-20.txt" as *u8, raw, txt, cap)
106 ok = ok + extract_one("knowledge/fetched/fin_r17_fix.raw" as *u8, "knowledge/library/fin_r17_fix_2026-06-20.txt" as *u8, raw, txt, cap)
107 ok = ok + extract_one("knowledge/fetched/fin_r18_backtesting.raw" as *u8, "knowledge/library/fin_r18_backtesting_2026-06-20.txt" as *u8, raw, txt, cap)
108 ok = ok + extract_one("knowledge/fetched/fin_r19_day_trading.raw" as *u8, "knowledge/library/fin_r19_day_trading_2026-06-20.txt" as *u8, raw, txt, cap)
109 ok = ok + extract_one("knowledge/fetched/fin_r19_pdt.raw" as *u8, "knowledge/library/fin_r19_pdt_2026-06-20.txt" as *u8, raw, txt, cap)
110 ok = ok + extract_one("knowledge/fetched/fin_r20_technical_analysis.raw" as *u8, "knowledge/library/fin_r20_technical_analysis_2026-06-20.txt" as *u8, raw, txt, cap)
111 ok = ok + extract_one("knowledge/fetched/fin_r20_fundamental_analysis.raw" as *u8, "knowledge/library/fin_r20_fundamental_analysis_2026-06-20.txt" as *u8, raw, txt, cap)
112 ok = ok + extract_one("knowledge/fetched/fin_r21_mpt.raw" as *u8, "knowledge/library/fin_r21_mpt_2026-06-20.txt" as *u8, raw, txt, cap)
113 ok = ok + extract_one("knowledge/fetched/fin_r21_kelly.raw" as *u8, "knowledge/library/fin_r21_kelly_2026-06-20.txt" as *u8, raw, txt, cap)
114 ok = ok + extract_one("knowledge/fetched/fin_r21_risk_management.raw" as *u8, "knowledge/library/fin_r21_risk_management_2026-06-20.txt" as *u8, raw, txt, cap)
115 ok = ok + extract_one("knowledge/fetched/fin_r22_stock.raw" as *u8, "knowledge/library/fin_r22_stock_2026-06-20.txt" as *u8, raw, txt, cap)
116 ok = ok + extract_one("knowledge/fetched/fin_r22_etf.raw" as *u8, "knowledge/library/fin_r22_etf_2026-06-20.txt" as *u8, raw, txt, cap)
117 ok = ok + extract_one("knowledge/fetched/fin_r23_options.raw" as *u8, "knowledge/library/fin_r23_options_2026-06-20.txt" as *u8, raw, txt, cap)
118 ok = ok + extract_one("knowledge/fetched/fin_r23_greeks.raw" as *u8, "knowledge/library/fin_r23_greeks_2026-06-20.txt" as *u8, raw, txt, cap)
119 ok = ok + extract_one("knowledge/fetched/fin_r24_futures.raw" as *u8, "knowledge/library/fin_r24_futures_2026-06-20.txt" as *u8, raw, txt, cap)
120 ok = ok + extract_one("knowledge/fetched/fin_r24_commodity.raw" as *u8, "knowledge/library/fin_r24_commodity_2026-06-20.txt" as *u8, raw, txt, cap)
121 ok = ok + extract_one("knowledge/fetched/fin_r25_forex.raw" as *u8, "knowledge/library/fin_r25_forex_2026-06-20.txt" as *u8, raw, txt, cap)
122 ok = ok + extract_one("knowledge/fetched/fin_r26_crypto.raw" as *u8, "knowledge/library/fin_r26_crypto_2026-06-20.txt" as *u8, raw, txt, cap)
123 ok = ok + extract_one("knowledge/fetched/fin_r26_wallet.raw" as *u8, "knowledge/library/fin_r26_wallet_2026-06-20.txt" as *u8, raw, txt, cap)
124 ok = ok + extract_one("knowledge/fetched/fin_r27_treasuries.raw" as *u8, "knowledge/library/fin_r27_treasuries_2026-06-20.txt" as *u8, raw, txt, cap)
125 ok = ok + extract_one("knowledge/fetched/fin_r27_bond.raw" as *u8, "knowledge/library/fin_r27_bond_2026-06-20.txt" as *u8, raw, txt, cap)
126 ok = ok + extract_one("knowledge/fetched/fin_r27_duration.raw" as *u8, "knowledge/library/fin_r27_duration_2026-06-20.txt" as *u8, raw, txt, cap)
127 ok = ok + extract_one("knowledge/fetched/fin_r28_adr.raw" as *u8, "knowledge/library/fin_r28_adr_2026-06-20.txt" as *u8, raw, txt, cap)
128 ok = ok + extract_one("knowledge/fetched/fin_r29_reit.raw" as *u8, "knowledge/library/fin_r29_reit_2026-06-20.txt" as *u8, raw, txt, cap)
129 ok = ok + extract_one("knowledge/fetched/fin_r30_re_investing.raw" as *u8, "knowledge/library/fin_r30_re_investing_2026-06-20.txt" as *u8, raw, txt, cap)
130 ok = ok + extract_one("knowledge/fetched/fin_r30_1031.raw" as *u8, "knowledge/library/fin_r30_1031_2026-06-20.txt" as *u8, raw, txt, cap)
131 ok = ok + extract_one("knowledge/fetched/fin_r31_alternatives.raw" as *u8, "knowledge/library/fin_r31_alternatives_2026-06-20.txt" as *u8, raw, txt, cap)
132 ok = ok + extract_one("knowledge/fetched/fin_r31_private_equity.raw" as *u8, "knowledge/library/fin_r31_private_equity_2026-06-20.txt" as *u8, raw, txt, cap)
133 ok = ok + extract_one("knowledge/fetched/fin_r32_financial_literacy.raw" as *u8, "knowledge/library/fin_r32_financial_literacy_2026-06-20.txt" as *u8, raw, txt, cap)
134 ok = ok + extract_one("knowledge/fetched/fin_r33_wash_sale.raw" as *u8, "knowledge/library/fin_r33_wash_sale_2026-06-20.txt" as *u8, raw, txt, cap)
135 ok = ok + extract_one("knowledge/fetched/fin_r33_ftc.raw" as *u8, "knowledge/library/fin_r33_ftc_2026-06-20.txt" as *u8, raw, txt, cap)
136 ok = ok + extract_one("knowledge/fetched/fin_r33_fatca.raw" as *u8, "knowledge/library/fin_r33_fatca_2026-06-20.txt" as *u8, raw, txt, cap)
137 ok = ok + extract_one("knowledge/fetched/fin_r34_kyc.raw" as *u8, "knowledge/library/fin_r34_kyc_2026-06-20.txt" as *u8, raw, txt, cap)
138 ok = ok + extract_one("knowledge/fetched/fin_r34_accredited.raw" as *u8, "knowledge/library/fin_r34_accredited_2026-06-20.txt" as *u8, raw, txt, cap)
139 ok = ok + extract_one("knowledge/fetched/fin_r35_macro.raw" as *u8, "knowledge/library/fin_r35_macro_2026-06-20.txt" as *u8, raw, txt, cap)
140 ok = ok + extract_one("knowledge/fetched/fin_r35_yield_curve.raw" as *u8, "knowledge/library/fin_r35_yield_curve_2026-06-20.txt" as *u8, raw, txt, cap)
141 ok = ok + extract_one("knowledge/fetched/fin_r35_business_cycle.raw" as *u8, "knowledge/library/fin_r35_business_cycle_2026-06-20.txt" as *u8, raw, txt, cap)
142 fx_puts("EXTRACTED: "); fx_putn(ok); fx_puts(" / 67 -> knowledge/library/\n")
143 return 0
144}