const fs = require('node:fs'); const path = require('node:path'); if(process.argv.length < 3) { console.log("error: no input file"); process.exit(1); } var f = fs.readFileSync(process.argv[2]); var magic = f.toString('hex', 0, 4); if(magic != "5041434b") { console.log("error: invalid file"); process.exit(1); } var size = f.readUInt32LE(4); var offset = 40; for(var i = 0; i < size; i++) { var filesize = f.readUint32LE(offset); offset+=4; var fileoffset = f.readUint32LE(offset); offset+=4; var mystery = f.readUint32LE(offset); offset+=4; var next = f.indexOf(0, offset, 'ascii'); var name = f.toString('ascii', offset, next).replaceAll("\\", "/"); offset = next+1; console.log("%s; %s", name, mystery); fs.mkdirSync(path.dirname(name), { recursive: true }); var data = fs.createWriteStream(name, 'binary'); data.end(f.slice(fileoffset, fileoffset+filesize)); }