nx_memory.nx source
↩ module page · 40 lines · 1807 B
1// nx_memory.nx -- CLI half of the consolidated memory tool (#6 of the 15). READ-ONLY seg-store surface:
2// stores <dir> | get <prefix> <key> | history <prefix> <key> | index <prefix> <idxkey>
3// exit: 0 ok | 3 absent | 4 tombstoned | 2 usage (codes surface in MCP _meta.exit_code)
4// license_tier: ORIGINAL
5import "nx_memory_lib.nx"
6
7const MXC_USAGE_RC: i64 = 2
8const MXC_RC_ABSENT: i64 = 3
9const MXC_RC_TOMB: i64 = 4
10const MXC_ARG_VERB: i64 = 1
11const MXC_ARG_P1: i64 = 2
12const MXC_ARG_P2: i64 = 3
13const MXC_ARGC_P1: i64 = 3
14const MXC_ARGC_P2: i64 = 4
15
16func main(argc: i64, argv: *i64) -> i64 {
17 if argc < MXC_ARGC_P1 { mx_puts("usage: nx_memory stores <dir> | get <prefix> <key> | history <prefix> <key> | index <prefix> <idxkey>\n" as *u8); return MXC_USAGE_RC }
18 let verb: *u8 = argv[MXC_ARG_VERB] as *u8
19 if mx_seq(verb, "stores" as *u8) == 1 {
20 if mx_stores(argv[MXC_ARG_P1] as *u8) < 0 { return MXC_RC_ABSENT }
21 return 0
22 }
23 if argc < MXC_ARGC_P2 { mx_puts("usage: nx_memory get|history|index <prefix> <key>\n" as *u8); return MXC_USAGE_RC }
24 if mx_seq(verb, "get" as *u8) == 1 {
25 let r: i64 = mx_get(argv[MXC_ARG_P1] as *u8, argv[MXC_ARG_P2] as *u8)
26 if r >= 0 { return 0 }
27 if r == 0 - (3 as i64) { return MXC_RC_TOMB }
28 return MXC_RC_ABSENT
29 }
30 if mx_seq(verb, "history" as *u8) == 1 {
31 if mx_history(argv[MXC_ARG_P1] as *u8, argv[MXC_ARG_P2] as *u8) > 0 { return 0 }
32 return MXC_RC_ABSENT
33 }
34 if mx_seq(verb, "index" as *u8) == 1 {
35 if mx_index(argv[MXC_ARG_P1] as *u8, argv[MXC_ARG_P2] as *u8) > 0 { return 0 }
36 return MXC_RC_ABSENT
37 }
38 mx_puts("usage: nx_memory stores <dir> | get <prefix> <key> | history <prefix> <key> | index <prefix> <idxkey>\n" as *u8)
39 return MXC_USAGE_RC
40}