make-signatures.js (1632B)
1 // make-signatures.js - Create file format signature constants. 2 3 var Node = { 4 fs: require('fs') 5 }; 6 7 var signatures = { 8 ICONR: [0x49, 0x63, 0x6f, 0x6e, 0x0d], 9 RAR: [0x52, 0x61, 0x72, 0x21, 0x1a, 0x07], 10 TAR: [0x75, 0x73, 0x74, 0x61, 0x72], 11 XAR: [0x78, 0x61, 0x72, 0x21], 12 ZIP_CDH: [0x50, 0x4b, 0x01, 0x02], 13 ZIP_DDR: [0x50, 0x4b, 0x07, 0x08], 14 ZIP_EOCDL_64: [0x50, 0x4b, 0x06, 0x07], 15 ZIP_EOCDR_64: [0x50, 0x4b, 0x06, 0x06], 16 ZIP_EOCDR: [0x50, 0x4b, 0x05, 0x06], 17 ZIP_LFH: [0x50, 0x4b, 0x03, 0x04], 18 ZIP_PK: [0x50, 0x4b], 19 ZIP_SPAN: [0x50, 0x4b, 0x07, 0x08], 20 ZIP_TEMP: [0x50, 0x4b, 0x30, 0x30] 21 }; 22 23 var lines = []; 24 25 function line(string) { 26 lines.push(string); 27 } 28 29 function arrayName(name, octets) { 30 return 'const uint8_t PURE_S_' + name + '[' + octets.length + ']'; 31 } 32 33 function hex(octets) { 34 return octets.map( 35 function(octet) { 36 return '0x' + octet.toString(16).padStart(2, '0'); 37 } 38 ).join(', '); 39 } 40 41 var max = 0; 42 for (var name in signatures) { 43 var octets = signatures[name]; 44 var length = arrayName(name, octets).length; 45 if (length > max) max = length; 46 } 47 for (var name in signatures) { 48 var octets = signatures[name]; 49 var padded = arrayName(name, octets).padEnd(max, ' '); 50 line(padded + ' = {' + hex(octets) + '};'); 51 } 52 line(''); 53 for (var name in signatures) { 54 var octets = signatures[name]; 55 var padded = ('const uint64_t PURE_L_' + name).padEnd(max, ' '); 56 line(padded + ' = ' + octets.length + ';'); 57 } 58 59 Node.fs.writeFileSync('pure_signatures.h', lines.join('\n'), 'utf-8');