예제 #1
0
파일: msexpand.c 프로젝트: kyz/libmspack
int main(int argc, char *argv[]) {
    struct msszdd_decompressor *szddd;
    struct mskwaj_decompressor *kwajd;
    int err;

    if (argc != 3) {
        fprintf(stderr, "Usage: %s <input file> <output file>\n", argv[0]);
        return 1;
    }

    /* exit if self-test reveals an error */
    MSPACK_SYS_SELFTEST(err);
    if (err) return 1;

    szddd = mspack_create_szdd_decompressor(NULL);
    kwajd = mspack_create_kwaj_decompressor(NULL);

    if (szddd && kwajd) {
        err = szddd->decompress(szddd, argv[1], argv[2]);
        /* if not SZDD file, try decompressing as KWAJ */
        if (err == MSPACK_ERR_SIGNATURE) {
            err = kwajd->decompress(kwajd, argv[1], argv[2]);
        }
        if (err != MSPACK_ERR_OK) {
            fprintf(stderr, "%s -> %s: %s\n", argv[1], argv[2], error_msg(err));
        }
    }
    else {
         fprintf(stderr, "can't create SZDD/KWAJ decompressor\n");
         err = 1;
    }

    mspack_destroy_szdd_decompressor(szddd);
    mspack_destroy_kwaj_decompressor(kwajd);
    return err ? 1 : 0;
}
예제 #2
0
파일: expand.c 프로젝트: adityavs/doslib2
int main(int argc, char *argv[]) {
    struct msszdd_decompressor *szddd;
    struct mskwaj_decompressor *kwajd;
    struct msszddd_header *szdd;
    struct mskwajd_header *kwaj;
    int err;

    if (argc != 3) {
        fprintf(stderr, "Usage: %s <input file> <output file>\n", argv[0]);
        return 1;
    }

    /* if self-test reveals an error */
    MSPACK_SYS_SELFTEST(err);
    if (err) {
        fprintf(stderr,"Self test failed err=%d\n",err);
        return 1;
    }

    szddd = mspack_create_szdd_decompressor(NULL);
    kwajd = mspack_create_kwaj_decompressor(NULL);

    if (!szddd || !kwajd) {
        fprintf(stderr, "can't make either SZDD or KWAJ decompressor\n");
        mspack_destroy_szdd_decompressor(szddd);
        mspack_destroy_kwaj_decompressor(kwajd);
        return 1;
    }

    /* open then extract; try SZDD */
    if ((szdd = szddd->open(szddd, argv[1]))) {
        if (szddd->extract(szddd, szdd, argv[2]) != MSPACK_ERR_OK) {
            fprintf(stderr, "%s: SZDD extract error: %s\n", argv[2], ERROR(szddd));
        }
        szddd->close(szddd, szdd);
    }
    else {
        if (szddd->last_error(szddd) == MSPACK_ERR_SIGNATURE) {
            /* try KWAJ */
            if ((kwaj = kwajd->open(kwajd, argv[1]))) {
                if (kwajd->extract(kwajd, kwaj, argv[2]) != MSPACK_ERR_OK) {
                    fprintf(stderr, "%s: KWAJ extract error: %s\n", argv[2], ERROR(kwajd));
                }
                kwajd->close(kwajd, kwaj);
            }
            else {
                fprintf(stderr, "%s: KWAJ open error: %s\n", argv[1], ERROR(kwajd));
            }
        }
        else {
            fprintf(stderr, "%s: SZDD open error: %s\n", argv[1], ERROR(szddd));
        }
    }

    /* decompress in a single step; try KWAJ */
    if (kwajd->decompress(kwajd, argv[1], argv[2]) != MSPACK_ERR_OK) {
        if (kwajd->last_error(kwajd) == MSPACK_ERR_SIGNATURE) {
            if (szddd->decompress(szddd, argv[1], argv[2]) != MSPACK_ERR_OK) {
                fprintf(stderr, "%s -> %s: SZDD decompress error: %s\n", argv[1], argv[2], ERROR(szddd));
            }
        }
        else {
            fprintf(stderr, "%s -> %s: KWAJ decompress error: %s\n", argv[1], argv[2], ERROR(kwajd));
        }
    }

    mspack_destroy_szdd_decompressor(szddd);
    mspack_destroy_kwaj_decompressor(kwajd);
    return 0;
}