code wiki / (root) / nx_mvault_context_gate.nx

nx_mvault_context_gate.nx source

↩ module page · 57 lines · 2310 B

1// nx_mvault_context_gate.nx -- proves contextual ingestion. 2// Load-bearing: the SAME jpeg is a loose IMAGE alone but a MANGA page when it 3// is part of a numbered image sequence ("looks like an image but is a book"). 4// run-exit == 0 means GREEN. 5 6import "nx_syscalls.nx" 7import "nx_mvault_ingest.nx" 8import "nx_media_pool.nx" 9import "nx_mvault_context.nx" 10 11func fill_pdf(b: *u8) -> i64 { 12 b[0] = 0x25 as u8; b[1] = 0x50 as u8; b[2] = 0x44 as u8; b[3] = 0x46 as u8 // %PDF 13 return 4 14} 15func fill_zip(b: *u8) -> i64 { 16 b[0] = 0x50 as u8; b[1] = 0x4B as u8; b[2] = 0x03 as u8; b[3] = 0x04 as u8 // PK.. 17 return 4 18} 19func fill_rar(b: *u8) -> i64 { 20 b[0] = 0x52 as u8; b[1] = 0x61 as u8; b[2] = 0x72 as u8; b[3] = 0x21 as u8 // Rar! 21 return 4 22} 23 24func main(argc: i64, argv: *i64) -> i64 { 25 var fails: i64 = 0 26 let b: *u8 = sys_mmap(16) 27 28 // container magic detectors 29 let pn: i64 = fill_pdf(b) 30 if mv_is_pdf(b, pn) != 1 { fails = fails + 1 } 31 if mv_is_zip(b, pn) == 1 { fails = fails + 1 } 32 let zn: i64 = fill_zip(b) 33 if mv_is_zip(b, zn) != 1 { fails = fails + 1 } 34 let rn: i64 = fill_rar(b) 35 if mv_is_rar(b, rn) != 1 { fails = fails + 1 } 36 37 // ctx -> type mappings 38 if mv_context_type(NX_MEDIA_TYPE_TEXT, MV_CTX_PDF) != MV_TYPE_BOOK { fails = fails + 1 } 39 if mv_context_type(NX_MEDIA_TYPE_TEXT, MV_CTX_EPUB) != MV_TYPE_BOOK { fails = fails + 1 } 40 if mv_context_type(NX_MEDIA_TYPE_IMAGE, MV_CTX_CBZ) != MV_TYPE_MANGA { fails = fails + 1 } 41 if mv_context_type(NX_MEDIA_TYPE_IMAGE, MV_CTX_CBR) != MV_TYPE_MANGA { fails = fails + 1 } 42 43 // ★ THE LOAD-BEARING CASE: a jpeg (sniff=IMAGE) in a numbered sequence is a 44 // MANGA page (a book), NOT a loose image; the same jpeg alone stays IMAGE. 45 if mv_context_type(NX_MEDIA_TYPE_IMAGE, MV_CTX_IMGSEQ) != MV_TYPE_MANGA { fails = fails + 1 } 46 if mv_context_type(NX_MEDIA_TYPE_IMAGE, MV_CTX_NONE) != MV_TYPE_IMAGE { fails = fails + 1 } 47 48 // no-context falls back to per-file type (video stays video) 49 if mv_context_type(NX_MEDIA_TYPE_VIDEO, MV_CTX_NONE) != MV_TYPE_VIDEO { fails = fails + 1 } 50 51 if fails == 0 { 52 sys_write(1, "MVAULT-CONTEXT-GATE GREEN 12/12\n" as *u8, 32) 53 return 0 54 } 55 sys_write(1, "MVAULT-CONTEXT-GATE RED\n" as *u8, 24) 56 return 1 57}