code wiki / _hdl_build / nx_serp_probe.nx

nx_serp_probe.nx source

↩ module page · 50 lines · 2163 B

1// nx_serp_probe.nx -- one-shot diagnostic: render dss_serve in-process for a query against a real local 2// shard and report whether the featured-answer panel fired (+ its text). argv: <domain> <q-urlencoded> 3import "nx_docportal_search_serve.nx" 4const K_MAGIC_2048: i64 = 2048 5const K_MAGIC_8192: i64 = 8192 6 7func p_puts(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 } 8func p_len(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } return n } 9func p_find(hay: *u8, hn: i64, ndl: *u8) -> i64 { 10 let nl: i64 = p_len(ndl) 11 var i: i64 = 0 12 while i + nl <= hn { 13 var m: i64 = 1 14 var j: i64 = 0 15 while j < nl { if hay[i + j] != ndl[j] { m = 0; j = nl } else { j = j + 1 } } 16 if m == 1 { return i } 17 i = i + 1 18 } 19 return 0 - 1 20} 21func main(argc: i64, argv: *i64) -> i64 { 22 if argc < 3 { p_puts("usage: nx_serp_probe <domain> <q>\n" as *u8); return 1 } 23 let req: *u8 = sys_mmap(K_MAGIC_2048) 24 var o: i64 = 0 25 let a: *u8 = "GET /search?q=" as *u8 26 var i: i64 = 0 27 while a[i] != (0 as u8) { req[o] = a[i]; o = o + 1; i = i + 1 } 28 let qv: *u8 = argv[2] as *u8 29 i = 0 30 while qv[i] != (0 as u8) { req[o] = qv[i]; o = o + 1; i = i + 1 } 31 let z: *u8 = " HTTP/1.1\r\nHost: x\r\n\r\n" as *u8 32 i = 0 33 while z[i] != (0 as u8) { req[o] = z[i]; o = o + 1; i = i + 1 } 34 let out: *u8 = sys_mmap(DSV_OUTCAP + K_MAGIC_8192) 35 let n: i64 = dss_serve(argv[1] as *u8, req, o, out) 36 p_puts("rendered bytes=" as *u8) 37 let bb: *u8 = sys_mmap(28); var m: i64 = n; var k: i64 = 0 38 if m == 0 { bb[0] = 48 as u8; k = 1 } 39 while m > 0 { bb[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 } 40 var x: i64 = 0; while x < k { sys_write(1, ((bb as i64) + k - 1 - x) as *u8, 1); x = x + 1 } 41 p_puts("\n" as *u8) 42 let at: i64 = p_find(out, n, "class=ans" as *u8) 43 if at < 0 { p_puts("ANSWER-PANEL: ABSENT\n" as *u8); return 0 } 44 p_puts("ANSWER-PANEL: PRESENT ->\n" as *u8) 45 var e: i64 = at + 400 46 if e > n { e = n } 47 sys_write(1, ((out as i64) + at) as *u8, e - at) 48 p_puts("\n" as *u8) 49 return 0 50}