www.pudn.com > sfalic-03-src.rar.rar > cdfcmdline.c
#include "taskparams.h" #include "exitit.h" #include "cdfpred.h" #include "cdfstat.h" #include "cfamily.h" #include#include char *synmsg= "\n" PROGNAME "\nsfalic c|d infile outfile [switches]" "\n c - compress" "\n d - decompress (slower, not optimized yet)" "\n image format: PGM P5" "\n switches:" "\n -echo -- echo processed cmdline and input file header" "\n -noheader -- skip writting output file header (for testing only)" "\n -decoronly -- skip statistical compression stage (for testing only)" "\n compression switches:" "\n -generic8bpp -- compress 8bpp imgs using slower 16bpp routines" "\n (slower, for testing only)" "\n -pred pred -- pred number: " STR(MINpred) " to " STR(MAXpred) ", def.: " STR(DEFpred) "\n -1: raw binary copy " "\n 0-7: Loslles JPEG predictors," "\n 8: (3A+3B-2C)/4, 9: med(A,B,C)" "\n -evol evol -- model structure: " STR(MINevol) " to " STR(MAXevol) ", def.: " STR(DEFevol) "\n 1: consecutive bucket sizes: 1 1 1 2 2 4 4 8 8 ..." "\n 3: 1 2 4 8 16 32 64 ..." "\n 5: 1 4 16 64 256 1024 4096 16384 65536" "\n 6: memoryless model" "\n 0, 2, 4: obsolete" "\n -trigger trigger -- bucket trigger: " STR(MINtrigger) " to " STR(MAXtrigger) ", def.: " STR(DEFtrigger) "\n threshold for halving bucket counters" "\n must be an integer multiple of 10" "\n 0: auto select trigger for evol and wait mask" "\n -maxclen maxclen -- codeword length limit: img. depth+1 to " STR(MAXmaxclen) ", def.: " STR(DEFmaxclen) "\n -wm wmistart wmimax wminext -- model update frequency controll " "\n wmistart -- starting frequency index: " STR(MINwmistart) " to wmimax, def.: " STR(DEFwmistart) "\n 0: 100%, 1: 66%, 2: 40%, 3: 22.2%, 4: 11.8%," "\n 5: 6.06%, 6: 3.08%, 7: 1.55%, 8: 0.778%, ..." "\n wmimax -- target frequency index: wmistart to " STR(MAXwmimax) ", def.: " STR(DEFwmimax) "\n wminext -- number of pixels encoded before increasing" "\n frequency index: " STR(MINwminext) " to " STR(MAXwminext) ", def.: " STR(DEFwminext) "\n must be an integer power of 2" ; // wypelnia zmienne taskparams, w razie bledu konczy program void processcmdline(int argc, char **argv) { argv++; if (!*argv) exitit(synmsg, -1); if ( !strcmp(*argv, "c") ) /* kompresja */ { argv++; f_compress=1; } else if ( !strcmp(*argv, "d") ) /* dekompresja */ { argv++; f_compress=0; } else exitit(synmsg, -1); if (!*argv) exitit("no infile", 1); infilename=*argv; argv++; if (!*argv) exitit("no outfile", 1); outfilename=*argv; argv++; while (*argv) { if ( !strcmp(*argv, "-echo") ) { echo=1; argv++; continue; } if ( !strcmp(*argv, "-noheader") ) { noheader=1; argv++; continue; } if ( !strcmp(*argv, "-decoronly") ) { decoronly=1; argv++; continue; } if ( !strcmp(*argv, "-generic8bpp") ) { generic8bpp=1; argv++; continue; } if ( !strcmp(*argv, "-pred") ) { argv++; if (!f_compress) exitit("-pred in forbidden for decompression", 1); if(!*argv) exitit("-pred requires argument", 1); pred=atoi(*argv); if ( pred MAXpred ) exitit("-pred arg out of range", 1); argv++; continue; } if ( !strcmp(*argv, "-evol") ) { argv++; if (!f_compress) exitit("-evol in forbidden for decompression", 1); if(!*argv || **argv=='-') exitit("-evol requires argument", 1); evol=atoi(*argv); if ( evol MAXevol ) exitit("-evol arg out of range", 1); argv++; continue; } if ( !strcmp(*argv, "-trigger") ) { argv++; if (!f_compress) exitit("-trigger in forbidden for decompression", 1); if(!*argv || **argv=='-') exitit("-trigger requires argument", 1); trigger=atoi(*argv); if ( trigger MAXtrigger ) exitit("-trigger arg out of range", 1); argv++; continue; } if ( !strcmp(*argv, "-maxclen") ) { argv++; if (!f_compress) exitit("-maxclen in forbidden for decompression", 1); if(!*argv || **argv=='-') exitit("-maxclen requires argument", 1); maxclen=atoi(*argv); if ( maxclen<0 || maxclen>MAXmaxclen ) exitit("-maxclen arg out of range", 1); argv++; continue; } if ( !strcmp(*argv, "-wm") ) { argv++; if (!f_compress) exitit("-wm in forbidden for decompression", 1); if(!*argv || **argv=='-') exitit("-wm requires argument (s)", 1); wmistart=atoi(*argv); if ( wmistart MAXwmimax ) exitit("-wmistart arg out of range", 1); argv++; if(!*argv || **argv=='-') exitit("-wm requires argument (s)", 1); wmimax=atoi(*argv); if ( wmimax MAXwmimax ) exitit("-wmimax arg out of range", 1); argv++; if(!*argv || **argv=='-') exitit("-wm requires argument (s)", 1); wminext=atoi(*argv); if ( wminext MAXwminext ) exitit("-wminext arg out of range", 1); argv++; continue; } exitit("commandline syntax error", 1); } }