code wiki / (root) / nx_fin_extract.nx

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}