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}