diff options
Diffstat (limited to 'VP/decomp-slz.cpp')
-rw-r--r-- | VP/decomp-slz.cpp | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/VP/decomp-slz.cpp b/VP/decomp-slz.cpp new file mode 100644 index 0000000..fa09411 --- /dev/null +++ b/VP/decomp-slz.cpp @@ -0,0 +1,57 @@ +#include <stdio.h> +#include <stdlib.h> + +#include "lzss.h" +#include "fileutils.h" +#include "generic.h" + +int main(int argc, char ** argv) { + int sig, l, d, v; + FILE * fin = stdin, * fout = stdout; + + switch (argc) { + case 3: + if (!(fout = fopen(argv[2], "w"))) { + printm(M_ERROR, "Error opening file %s.\n", argv[3]); + exit(-1); + } + case 2: + if (!(fin = fopen(argv[1], "r"))) { + printm(M_ERROR, "Error opening file %s.\n", argv[2]); + exit(-1); + } + break; + case 1: + break; + default: + printm(M_BARE, "Usage: %s [filein] [fileout]\n", argv[0]); + exit(-1); + } + + verbosity = M_STATUS; + + fread(&sig, 1, 4, fin); + fread(&d, 1, 4, fin); + fread(&l, 1, 4, fin); + switch (sig) { + case 0x05a4c53: + printm(M_STATUS, "Detected a SLZ-type 0 file.\n"); + fread(&v, 1, 4, fin); + copy(fin, fout, d); + exit(0); + case 0x15a4c53: + scheme = schemes[VP_1]; + printm(M_STATUS, "Detected a SLZ-type 1 file.\n"); + break; + case 0x25a4c53: + scheme = schemes[VP_2]; + printm(M_STATUS, "Detected a SLZ-type 2 file.\n"); + break; + default: + printm(M_ERROR, "Not a SLZ file.\n"); + exit(-1); + } + + lzss_decomp(fin, fout, l); + exit(0); +} |