int exomizer(unsigned char *srcbuf, int len, int load, int start, unsigned char *destbuf) { int destlen; int max_offset = 65536; int max_passes = 65536; static match_ctx ctx; encode_match_data emd; encode_match_priv optimal_priv; search_nodep snp; match_ctx_init(ctx, srcbuf, len, max_offset); emd->out = NULL; emd->priv = optimal_priv; optimal_init(emd); snp = do_compress(ctx, emd, max_passes); destlen = generate_output(ctx, snp, sfx_c64ne, optimal_encode, emd, load, len, start, destbuf); optimal_free(emd); #if 0 /* RH */ search_node_free(snp); #endif /* RH */ match_ctx_free(ctx); return destlen; }
void crunch_backwards(struct membuf *inbuf, struct membuf *outbuf, struct crunch_options *options, /* IN */ struct crunch_info *info) /* OUT */ { static match_ctx ctx; encode_match_data emd; search_nodep snp; int outlen; int safety; int copy_used; if(options == NULL) { options = default_options; } outlen = membuf_memlen(outbuf); emd->out = NULL; optimal_init(emd); LOG(LOG_NORMAL, ("\nPhase 1: Instrumenting file" "\n-----------------------------\n")); LOG(LOG_NORMAL, (" Length of indata: %d bytes.\n", membuf_memlen(inbuf))); match_ctx_init(ctx, inbuf, options->max_len, options->max_offset, options->use_imprecise_rle); LOG(LOG_NORMAL, (" Instrumenting file, done.\n")); emd->out = NULL; optimal_init(emd); LOG(LOG_NORMAL, ("\nPhase 2: Calculating encoding" "\n-----------------------------\n")); snp = do_compress(ctx, emd, options->exported_encoding, options->max_passes, options->use_literal_sequences); LOG(LOG_NORMAL, (" Calculating encoding, done.\n")); LOG(LOG_NORMAL, ("\nPhase 3: Generating output file" "\n------------------------------\n")); LOG(LOG_NORMAL, (" Encoding: %s\n", optimal_encoding_export(emd))); safety = do_output(ctx, snp, emd, optimal_encode, outbuf, ©_used); LOG(LOG_NORMAL, (" Length of crunched data: %d bytes.\n", membuf_memlen(outbuf) - outlen)); optimal_free(emd); search_node_free(snp); match_ctx_free(ctx); if(info != NULL) { info->literal_sequences_used = copy_used; info->needed_safety_offset = safety; } }