code wiki / _hdl_build / _ale_exec_gate.nx
_ale_exec_gate.nx source
↩ module page · 411 lines · 18979 B
1// _ale_exec_gate.nx -- the ALE-R2b gate: sovereign agent-core EXECUTE/dispatch organ.
2// Diff-lane / no-mocks: runs the REAL sovereign planner nx_ale_plan.elf to produce the ordered
3// plan, then the REAL sovereign executor nx_ale_exec.elf (both built nx_cc_sovereign->nxasm_x86_main,
4// NO gcc) over a REAL hello-class ALE fixture, and asserts:
5// (1) STAGE -- stage_input (step 1) copies the input_stage material into the sandbox:
6// the staged file EXISTS and byte-matches the materials_dir source
7// (2) TRANSFORM -- run_organ (step 2) applies the named deterministic transform: the
8// artifact's unit| lines are the transform of the staged kv| lines
9// (3) ARTIFACT -- write_artifact (step 3) produced a REAL non-empty file at artifact_path
10// (4) ORDER/NO-LEAKAGE -- a malformed out-of-order plan is REFUSED, AND the artifact is byte-
11// identical whether a decoy reference is planted in the sandbox or not
12// (the executor never opens the reference path -> no leakage end-to-end)
13// (5) DETERMINISTIC -- two runs on the same (plan,task,fresh sandbox) yield a BYTE-IDENTICAL artifact
14// (6) TAMPER REJECTED -- a plan MISSING write_artifact -> child exits NON-ZERO and writes NO artifact
15// (G) FEEDS GRADER -- nx_ale_grade.elf (ALE-R1a) on the produced artifact + reference scores 1000
16// Evidence -> knowledge/status/ale_exec.log (ALEEXECGATE row; the queue row's ||MARK= reads it).
17// Sovereign orchestration (fork/dup3/execve/wait4 + mkdirat). license_tier: ORIGINAL
18import "nx_syscalls.nx"
19
20func g_p(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 }
21func g_fp(fd: i64, s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(fd, s, n); return 0 }
22func g_fn(fd: i64, v: i64) -> i64 { let bb: *u8 = sys_mmap(28); var m: i64 = v; if m < 0 { m = 0 - m }; let t: *u8 = sys_mmap(28); var k: i64 = 0; if m == 0 { t[0] = 48; k = 1 }; while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 }; var i: i64 = 0; while i < k { bb[i] = t[k - 1 - i]; i = i + 1 }; sys_write(fd, bb, k); return 0 }
23
24// run nx_ale_plan.elf <task> <planout>; return child exit code
25func g_run_plan(task: *u8, planout: *u8) -> i64 {
26 let pid: i64 = sys_fork()
27 if pid == 0 {
28 let dn: i64 = sys_openat_wr("/dev/null" as *u8, 0x1a4)
29 if dn >= 0 { sys_dup3(dn, 1, 0); sys_dup3(dn, 2, 0) }
30 let argv: *i64 = sys_mmap(32) as *i64
31 argv[0] = "_offc/nx_ale_plan.elf" as *u8 as i64
32 argv[1] = task as i64
33 argv[2] = planout as i64
34 argv[3] = 0
35 let envp: *i64 = sys_mmap(16) as *i64
36 envp[0] = 0
37 sys_execve("_offc/nx_ale_plan.elf" as *u8, argv, envp)
38 sys_exit(127)
39 }
40 let st: *i64 = sys_mmap(16) as *i64
41 sys_wait4(pid, st, 0)
42 return (st[0] >> 8) & 0xff
43}
44
45// run nx_ale_exec.elf <plan> <task> <sandbox>; return child exit code
46func g_run_exec(plan: *u8, task: *u8, sandbox: *u8) -> i64 {
47 let pid: i64 = sys_fork()
48 if pid == 0 {
49 let dn: i64 = sys_openat_wr("/dev/null" as *u8, 0x1a4)
50 if dn >= 0 { sys_dup3(dn, 1, 0); sys_dup3(dn, 2, 0) }
51 let argv: *i64 = sys_mmap(48) as *i64
52 argv[0] = "_offc/nx_ale_exec.elf" as *u8 as i64
53 argv[1] = plan as i64
54 argv[2] = task as i64
55 argv[3] = sandbox as i64
56 argv[4] = 0
57 let envp: *i64 = sys_mmap(16) as *i64
58 envp[0] = 0
59 sys_execve("_offc/nx_ale_exec.elf" as *u8, argv, envp)
60 sys_exit(127)
61 }
62 let st: *i64 = sys_mmap(16) as *i64
63 sys_wait4(pid, st, 0)
64 return (st[0] >> 8) & 0xff
65}
66
67// run nx_ale_grade.elf <ref> <artifact> <scoreout>; return child exit code
68func g_run_grade(ref: *u8, art: *u8, scoreout: *u8) -> i64 {
69 let pid: i64 = sys_fork()
70 if pid == 0 {
71 let dn: i64 = sys_openat_wr("/dev/null" as *u8, 0x1a4)
72 if dn >= 0 { sys_dup3(dn, 1, 0); sys_dup3(dn, 2, 0) }
73 let argv: *i64 = sys_mmap(48) as *i64
74 argv[0] = "_offc/nx_ale_grade.elf" as *u8 as i64
75 argv[1] = ref as i64
76 argv[2] = art as i64
77 argv[3] = scoreout as i64
78 argv[4] = 0
79 let envp: *i64 = sys_mmap(16) as *i64
80 envp[0] = 0
81 sys_execve("_offc/nx_ale_grade.elf" as *u8, argv, envp)
82 sys_exit(127)
83 }
84 let st: *i64 = sys_mmap(16) as *i64
85 sys_wait4(pid, st, 0)
86 return (st[0] >> 8) & 0xff
87}
88
89// read whole file into buf (cap), return byte count (0 on open-fail / empty)
90func g_read(path: *u8, buf: *u8, cap: i64) -> i64 {
91 let fd: i64 = sys_openat_rd(path)
92 if fd < 0 { return 0 }
93 var n: i64 = 0
94 var go: i64 = 1
95 while go == 1 {
96 let r: i64 = sys_read(fd, (buf as i64 + n) as *u8, cap - 1 - n)
97 if r <= 0 { go = 0 } else { n = n + r }
98 if n >= cap - 1 { go = 0 }
99 }
100 sys_close(fd)
101 return n
102}
103
104func g_len(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } return n }
105
106// two files byte-identical? 1/0 (both must be non-empty)
107func g_files_eq(pa: *u8, pb: *u8) -> i64 {
108 let ba: *u8 = sys_mmap(262144)
109 let bb: *u8 = sys_mmap(262144)
110 let na: i64 = g_read(pa, ba, 262144)
111 let nb: i64 = g_read(pb, bb, 262144)
112 if na != nb { return 0 }
113 if na == 0 { return 0 }
114 var i: i64 = 0
115 while i < na { if ba[i] != bb[i] { return 0 } i = i + 1 }
116 return 1
117}
118
119// does buf[pos..] match pat (len pl)? 1/0
120func g_match(buf: *u8, n: i64, pos: i64, pat: *u8, pl: i64) -> i64 {
121 if pos + pl > n { return 0 }
122 var k: i64 = 0
123 while k < pl { if buf[pos + k] != pat[k] { return 0 } k = k + 1 }
124 return 1
125}
126
127// is pos a line start? (pos==0 or previous byte is newline)
128func g_is_bol(buf: *u8, pos: i64) -> i64 {
129 if pos == 0 { return 1 }
130 if buf[pos - 1] == (10 as u8) { return 1 }
131 return 0
132}
133
134// does the COMPLETE line `lit` (NUL-terminated, no newline) appear as a complete line in buf? 1/0
135func g_line_in(buf: *u8, n: i64, lit: *u8) -> i64 {
136 let ll: i64 = g_len(lit)
137 var j: i64 = 0
138 while j < n {
139 if g_is_bol(buf, j) == 1 {
140 if g_match(buf, n, j, lit, ll) == 1 {
141 let after: i64 = j + ll
142 if after == n { return 1 }
143 if after < n { if buf[after] == (10 as u8) { return 1 } }
144 }
145 }
146 j = j + 1
147 }
148 return 0
149}
150
151// write n bytes from buf to a fresh file at path. 1/0.
152func g_write_file(path: *u8, buf: *u8, n: i64) -> i64 {
153 let fd: i64 = sys_openat_wr(path, 0x1a4)
154 if fd < 0 { return 0 }
155 if n > 0 { sys_write(fd, buf, n) }
156 sys_close(fd)
157 return 1
158}
159
160func main() -> i64 {
161 let task: *u8 = "knowledge/specs/ale_exec_examples/task_exec.txt" as *u8
162 let materials: *u8 = "knowledge/specs/ale_exec_examples/materials/field_input.txt" as *u8
163 let reference: *u8 = "knowledge/specs/ale_exec_examples/reference.txt" as *u8
164 let planp: *u8 = "/tmp/_aleexec_g_plan" as *u8
165 let sb1: *u8 = "/tmp/_aleexec_g_sb1" as *u8
166 let sb2: *u8 = "/tmp/_aleexec_g_sb2" as *u8
167 let sbdec: *u8 = "/tmp/_aleexec_g_sbdecoy" as *u8
168 let sbbad: *u8 = "/tmp/_aleexec_g_sbbad" as *u8
169 let art1: *u8 = "/tmp/_aleexec_g_sb1/result.units" as *u8
170 let art2: *u8 = "/tmp/_aleexec_g_sb2/result.units" as *u8
171 let artdec: *u8 = "/tmp/_aleexec_g_sbdecoy/result.units" as *u8
172 let artbad: *u8 = "/tmp/_aleexec_g_sbbad/result.units" as *u8
173 let staged1: *u8 = "/tmp/_aleexec_g_sb1/field_input.txt" as *u8
174 let decoyref: *u8 = "/tmp/_aleexec_g_sbdecoy/reference.txt" as *u8
175 let badplan: *u8 = "/tmp/_aleexec_g_badplan" as *u8
176 let scoreout: *u8 = "/tmp/_aleexec_g_score" as *u8
177
178 // ALE-R3a: 2nd transform (copy_verbatim) fixture paths
179 let taskv: *u8 = "knowledge/specs/ale_exec_examples/task_exec_verbatim.txt" as *u8
180 let matv: *u8 = "knowledge/specs/ale_exec_examples/materials/verbatim_units.txt" as *u8
181 let refv: *u8 = "knowledge/specs/ale_exec_examples/reference_verbatim.txt" as *u8
182 let planv: *u8 = "/tmp/_aleexec_g_planv" as *u8
183 let sbv1: *u8 = "/tmp/_aleexec_g_sbv1" as *u8
184 let sbv2: *u8 = "/tmp/_aleexec_g_sbv2" as *u8
185 let sbvdec: *u8 = "/tmp/_aleexec_g_sbvdecoy" as *u8
186 let sbunk: *u8 = "/tmp/_aleexec_g_sbunk" as *u8
187 let artv1: *u8 = "/tmp/_aleexec_g_sbv1/result.copy" as *u8
188 let artv2: *u8 = "/tmp/_aleexec_g_sbv2/result.copy" as *u8
189 let artvdec: *u8 = "/tmp/_aleexec_g_sbvdecoy/result.copy" as *u8
190 let artunk: *u8 = "/tmp/_aleexec_g_sbunk/result.copy" as *u8
191 let stagedv1: *u8 = "/tmp/_aleexec_g_sbv1/verbatim_units.txt" as *u8
192 let decoyrefv: *u8 = "/tmp/_aleexec_g_sbvdecoy/reference_verbatim.txt" as *u8
193 let unkplan: *u8 = "/tmp/_aleexec_g_unkplan" as *u8
194 let scorev: *u8 = "/tmp/_aleexec_g_scorev" as *u8
195
196 g_p("=== ALE-exec gate (ALE-R2b/R3a: sovereign agent-core EXECUTE phase) ===\n" as *u8)
197
198 // fresh sandbox dirs (mkdir is idempotent: -EEXIST is harmless; artifact writes use O_TRUNC)
199 sys_mkdir(sb1, 0x1ed)
200 sys_mkdir(sb2, 0x1ed)
201 sys_mkdir(sbdec, 0x1ed)
202 sys_mkdir(sbbad, 0x1ed)
203 sys_mkdir(sbv1, 0x1ed)
204 sys_mkdir(sbv2, 0x1ed)
205 sys_mkdir(sbvdec, 0x1ed)
206 sys_mkdir(sbunk, 0x1ed)
207
208 // PLAN: produce the ordered plan from the task via the REAL planner (genuine plan->exec link)
209 let rcplan: i64 = g_run_plan(task, planp)
210
211 // EXEC #1 (good): run the executor over the fixture into sb1
212 let rc1: i64 = g_run_exec(planp, task, sb1)
213 // EXEC #2 (determinism): a 2nd fresh run into sb2
214 let rc2: i64 = g_run_exec(planp, task, sb2)
215
216 // (1) STAGE: staged file exists in sb1 AND byte-matches the materials source
217 var c1: i64 = 0
218 if g_files_eq(staged1, materials) == 1 { c1 = 1 }
219
220 // (2) TRANSFORM: the artifact's unit| lines are the transform of the staged kv| lines.
221 // Confirm the four expected unit| lines (kv| -> unit|) are present as complete lines.
222 let abuf: *u8 = sys_mmap(262144)
223 let an: i64 = g_read(art1, abuf, 262144)
224 var c2: i64 = 0
225 if g_line_in(abuf, an, "unit|row_count|3" as *u8) == 1 {
226 if g_line_in(abuf, an, "unit|header|id,name,score" as *u8) == 1 {
227 if g_line_in(abuf, an, "unit|sorted_by|id" as *u8) == 1 {
228 if g_line_in(abuf, an, "unit|checksum|7a1c" as *u8) == 1 { c2 = 1 }
229 }
230 }
231 }
232
233 // (3) ARTIFACT: a real non-empty file at artifact_path under sb1, child exited 0
234 var c3: i64 = 0
235 if rc1 == 0 { if an > 0 { c3 = 1 } }
236
237 // (4) ORDER/NO-LEAKAGE: artifact is byte-identical whether a decoy reference is planted in the
238 // sandbox or not (the executor never opens the reference path). Plant a decoy reference in
239 // sbdec, run there, and compare the produced artifact to sb1's (no-reference) artifact.
240 let refbuf: *u8 = sys_mmap(262144)
241 let refn: i64 = g_read(reference, refbuf, 262144)
242 g_write_file(decoyref, refbuf, refn)
243 let rcdec: i64 = g_run_exec(planp, task, sbdec)
244 var c4: i64 = 0
245 if rcdec == 0 { if g_files_eq(artdec, art1) == 1 { c4 = 1 } }
246
247 // (5) DETERMINISTIC: sb1 and sb2 artifacts byte-identical
248 var c5: i64 = 0
249 if rc1 == 0 { if rc2 == 0 { if g_files_eq(art1, art2) == 1 { c5 = 1 } } }
250
251 // (6) TAMPER REJECTED: a plan MISSING write_artifact -> non-zero exit AND no artifact written.
252 // Author a malformed plan (only stage_input + run_organ, no write_artifact step).
253 let bptxt: *u8 = "step|1|stage_input|field_input.txt\nstep|2|run_organ|extract_kv_to_units go\n" as *u8
254 g_write_file(badplan, bptxt, g_len(bptxt))
255 let rcbad: i64 = g_run_exec(badplan, task, sbbad)
256 let bbuf: *u8 = sys_mmap(4096)
257 let bn: i64 = g_read(artbad, bbuf, 4096)
258 var c6: i64 = 0
259 if rcbad != 0 { if bn == 0 { c6 = 1 } }
260
261 // (G) FEEDS GRADER: nx_ale_grade on the produced artifact + reference scores 1000
262 let rcg: i64 = g_run_grade(reference, art1, scoreout)
263 let scbuf: *u8 = sys_mmap(64)
264 let scn: i64 = g_read(scoreout, scbuf, 64)
265 var score: i64 = 0
266 var si: i64 = 0
267 while si < scn {
268 if scbuf[si] >= (48 as u8) { if scbuf[si] <= (57 as u8) { score = score * 10 + (scbuf[si] - 48) } }
269 si = si + 1
270 }
271 var cg: i64 = 0
272 if rcg == 0 { if score == 1000 { cg = 1 } }
273
274 // ================= ALE-R3a: data-driven vocabulary + 2nd transform (copy_verbatim) =================
275 // PLAN the verbatim task via the REAL planner; its instruction leading-token selects copy_verbatim.
276 let rcplanv: i64 = g_run_plan(taskv, planv)
277 // EXEC #1 (good) into sbv1, EXEC #2 (determinism) into sbv2
278 let rcv1: i64 = g_run_exec(planv, taskv, sbv1)
279 let rcv2: i64 = g_run_exec(planv, taskv, sbv2)
280
281 // (7) COPY_VERBATIM ARTIFACT: child exited 0, real non-empty artifact == staged input (identity).
282 let avbuf: *u8 = sys_mmap(262144)
283 let avn: i64 = g_read(artv1, avbuf, 262144)
284 var c7: i64 = 0
285 if rcv1 == 0 { if avn > 0 { if g_files_eq(artv1, stagedv1) == 1 { c7 = 1 } } }
286 // staged file present in sbv1 AND byte-matches the materials source (stage_input ran for transform 2 too)
287 var c7s: i64 = 0
288 if g_files_eq(stagedv1, matv) == 1 { c7s = 1 }
289
290 // (8) FEEDS GRADER (2nd transform): nx_ale_grade(reference_verbatim, artv1) == 1000 -> no regression.
291 let rcgv: i64 = g_run_grade(refv, artv1, scorev)
292 let scvbuf: *u8 = sys_mmap(64)
293 let scvn: i64 = g_read(scorev, scvbuf, 64)
294 var scorev2: i64 = 0
295 var svi: i64 = 0
296 while svi < scvn {
297 if scvbuf[svi] >= (48 as u8) { if scvbuf[svi] <= (57 as u8) { scorev2 = scorev2 * 10 + (scvbuf[svi] - 48) } }
298 svi = svi + 1
299 }
300 var c8: i64 = 0
301 if rcgv == 0 { if scorev2 == 1000 { c8 = 1 } }
302
303 // (9) DETERMINISTIC (2nd transform): sbv1 and sbv2 artifacts byte-identical
304 var c9: i64 = 0
305 if rcv1 == 0 { if rcv2 == 0 { if g_files_eq(artv1, artv2) == 1 { c9 = 1 } } }
306
307 // (10) NO-LEAKAGE (2nd transform): plant a decoy reference in sbvdec, run there, and confirm the
308 // produced artifact is byte-identical to sbv1's -- the executor never opened the reference path.
309 let refvbuf: *u8 = sys_mmap(262144)
310 let refvn: i64 = g_read(refv, refvbuf, 262144)
311 g_write_file(decoyrefv, refvbuf, refvn)
312 let rcvdec: i64 = g_run_exec(planv, taskv, sbvdec)
313 var c10: i64 = 0
314 if rcvdec == 0 { if g_files_eq(artvdec, artv1) == 1 { c10 = 1 } }
315
316 // (11) UNKNOWN-TOKEN REFUSED (data-driven negative control): a plan whose run_organ arg leads with
317 // a token ABSENT from the vocabulary table -> child exits NON-ZERO and writes NO artifact.
318 let uptxt: *u8 = "step|1|stage_input|verbatim_units.txt\nstep|2|run_organ|frobnicate the staged bytes somehow\nstep|3|write_artifact|result.copy\n" as *u8
319 g_write_file(unkplan, uptxt, g_len(uptxt))
320 let rcunk: i64 = g_run_exec(unkplan, taskv, sbunk)
321 let ubuf: *u8 = sys_mmap(4096)
322 let un: i64 = g_read(artunk, ubuf, 4096)
323 var c11: i64 = 0
324 if rcunk != 0 { if un == 0 { c11 = 1 } }
325
326 g_p(" rc_plan=" as *u8); g_fn(1, rcplan)
327 g_p(" rc_exec=" as *u8); g_fn(1, rc1)
328 g_p(" art_bytes=" as *u8); g_fn(1, an)
329 g_p(" rc_bad=" as *u8); g_fn(1, rcbad)
330 g_p(" bad_art_bytes=" as *u8); g_fn(1, bn)
331 g_p(" score=" as *u8); g_fn(1, score); g_p("\n" as *u8)
332 g_p(" c1_stage=" as *u8); g_fn(1, c1)
333 g_p(" c2_transform=" as *u8); g_fn(1, c2)
334 g_p(" c3_artifact=" as *u8); g_fn(1, c3)
335 g_p(" c4_order_no_leakage=" as *u8); g_fn(1, c4)
336 g_p(" c5_deterministic=" as *u8); g_fn(1, c5)
337 g_p(" c6_tamper_rejected=" as *u8); g_fn(1, c6)
338 g_p(" cg_feeds_grader=" as *u8); g_fn(1, cg)
339 g_p("\n" as *u8)
340 // ALE-R3a diagnostics (2nd transform copy_verbatim, data-driven dispatch)
341 g_p(" [R3a] rc_planv=" as *u8); g_fn(1, rcplanv)
342 g_p(" rc_execv=" as *u8); g_fn(1, rcv1)
343 g_p(" art_copy_bytes=" as *u8); g_fn(1, avn)
344 g_p(" scorev=" as *u8); g_fn(1, scorev2)
345 g_p(" rc_unknown=" as *u8); g_fn(1, rcunk)
346 g_p(" unk_art_bytes=" as *u8); g_fn(1, un); g_p("\n" as *u8)
347 g_p(" [R3a] c7_copy_artifact=" as *u8); g_fn(1, c7)
348 g_p(" c7s_stage=" as *u8); g_fn(1, c7s)
349 g_p(" c8_feeds_grader=" as *u8); g_fn(1, c8)
350 g_p(" c9_deterministic=" as *u8); g_fn(1, c9)
351 g_p(" c10_no_leakage=" as *u8); g_fn(1, c10)
352 g_p(" c11_unknown_refused=" as *u8); g_fn(1, c11)
353 g_p("\n" as *u8)
354
355 var allok: i64 = 1
356 if c1 == 0 { allok = 0 }
357 if c2 == 0 { allok = 0 }
358 if c3 == 0 { allok = 0 }
359 if c4 == 0 { allok = 0 }
360 if c5 == 0 { allok = 0 }
361 if c6 == 0 { allok = 0 }
362 if cg == 0 { allok = 0 }
363
364 // ALE-R3a checks: the rung is GREEN only if BOTH transforms + the data-driven negative control pass.
365 var r3aok: i64 = 1
366 if c7 == 0 { r3aok = 0 }
367 if c7s == 0 { r3aok = 0 }
368 if c8 == 0 { r3aok = 0 }
369 if c9 == 0 { r3aok = 0 }
370 if c10 == 0 { r3aok = 0 }
371 if c11 == 0 { r3aok = 0 }
372 if r3aok == 0 { allok = 0 }
373
374 let lfd: i64 = sys_openat_append("knowledge/status/ale_exec.log" as *u8, 0x1a4)
375 if allok == 1 {
376 g_p("ALEEXECGATE verdict=GREEN (stage transform artifact order+no-leakage deterministic; missing-write_artifact tamper REJECTED; feeds grader score=1000)\n" as *u8)
377 g_p("ALEEXECVOCAB verdict=GREEN (data-driven vocabulary dispatch; copy_verbatim 2nd transform 1000 no-regression; deterministic; no-leakage; UNKNOWN token REFUSED)\n" as *u8)
378 if lfd >= 0 {
379 g_fp(lfd, "ALEEXECGATE verdict=GREEN stage=1 transform=1 artifact=1 order_no_leakage=1 deterministic=1 tamper_rejected=1 feeds_grader=1 score=1000 rung=ALE-R2b epoch=" as *u8)
380 g_fn(lfd, sys_now_realtime_sec())
381 g_fp(lfd, "\n" as *u8)
382 g_fp(lfd, "ALEEXECVOCAB verdict=GREEN vocab_data_driven=1 copy_verbatim=1 copy_stage=1 copy_feeds_grader=1 score_kv=1000 score_copy=1000 deterministic=1 no_leakage=1 unknown_token_refused=1 both_no_regression=1 rung=ALE-R3a epoch=" as *u8)
383 g_fn(lfd, sys_now_realtime_sec())
384 g_fp(lfd, "\n" as *u8)
385 sys_close(lfd)
386 }
387 sys_exit(0)
388 return 0
389 }
390 g_p("ALEEXECGATE verdict=RED (a check did not fire)\n" as *u8)
391 if lfd >= 0 {
392 g_fp(lfd, "ALEEXECGATE verdict=RED c1=" as *u8); g_fn(lfd, c1)
393 g_fp(lfd, " c2=" as *u8); g_fn(lfd, c2)
394 g_fp(lfd, " c3=" as *u8); g_fn(lfd, c3)
395 g_fp(lfd, " c4=" as *u8); g_fn(lfd, c4)
396 g_fp(lfd, " c5=" as *u8); g_fn(lfd, c5)
397 g_fp(lfd, " c6=" as *u8); g_fn(lfd, c6)
398 g_fp(lfd, " cg=" as *u8); g_fn(lfd, cg)
399 g_fp(lfd, "\n" as *u8)
400 g_fp(lfd, "ALEEXECVOCAB verdict=RED c7=" as *u8); g_fn(lfd, c7)
401 g_fp(lfd, " c7s=" as *u8); g_fn(lfd, c7s)
402 g_fp(lfd, " c8=" as *u8); g_fn(lfd, c8)
403 g_fp(lfd, " c9=" as *u8); g_fn(lfd, c9)
404 g_fp(lfd, " c10=" as *u8); g_fn(lfd, c10)
405 g_fp(lfd, " c11=" as *u8); g_fn(lfd, c11)
406 g_fp(lfd, " rung=ALE-R3a\n" as *u8)
407 sys_close(lfd)
408 }
409 sys_exit(1)
410 return 1
411}