model_t pset = model, *candmods, *mptr;
char *string;
- //myname = argv[0];
+ myname = argv[0];
/* stdin must be binary */
#ifdef _WIN32
#endif /* _WIN32 */
SETBMP();
-
+
+ pos=0;
+ optind=1;
do {
c=getopt(argc, argv, "?A:BDFLMP:SVXa:bcdefhi:k:lm:p:q:rstuvw:x:yz");
switch(c) {
return 0;
//exit(EXIT_FAILURE);
}
- if(c < 0)
+ if(c < 0){
uerror("no preset models available");
+ return 0;
+ }
/* must set width so that parameter to -ipx is not zeroed */
width = plen(model.spoly);
rflags |= R_HAVEP | R_HAVEI | R_HAVERI | R_HAVERO | R_HAVEX;
break;
case 'D': /* D dump all models */
args = mcount();
- if(!args)
+ if(!args){
uerror("no preset models available");
+ return 0;
+ }
for(mode = 0; mode < args; ++mode) {
mbynum(&model, mode);
mcanon(&model);
* either attaching names to arbitrary models or forcing to a preset
* mmatch(&model, M_OVERWR);
*/
- if(~model.flags & P_MULXN)
+ if(~model.flags & P_MULXN){
uerror("not a Williams model compliant algorithm");
+ return 0;
+ }
string = mtostr(&model);
puts(string);
free(string);
}
break;
case 's': /* s search for algorithm */
- if(!width)
+ if(!width){
uerror("must specify positive -k or -w before -s");
- if(~model.flags & P_MULXN)
+ return 0;
+ }
+ if(~model.flags & P_MULXN){
uerror("cannot search for non-Williams compliant models");
+ return 0;
+ }
praloc(&model.spoly, width);
praloc(&model.init, width);
praloc(&model.xorout, width);
/* allocate argument array */
args = argc - optind;
- if(!(apolys = malloc(args * sizeof(poly_t))))
+ if(!(apolys = malloc(args * sizeof(poly_t)))){
uerror("cannot allocate memory for argument list");
+ return 0;
+ }
for(pptr = apolys; optind < argc; ++optind) {
if(uflags & C_INFILE)
if(uflags & C_RESULT) {
for(qptr = apolys; qptr < pptr; ++qptr)
pfree(qptr);
- return 1;
+ //return 1;
//exit(EXIT_SUCCESS);
}
- if(!(model.flags & P_REFIN) != !(model.flags & P_REFOUT))
+ if(!(model.flags & P_REFIN) != !(model.flags & P_REFOUT)){
uerror("cannot search for crossed-endian models");
+ return 0;
+ }
pass = 0;
do {
mptr = candmods = reveng(&model, qpoly, rflags, args, apolys);
break;
default: /* no mode specified */
fprintf(stderr, "%s: no mode switch specified. Use %s -h for help.\n", myname, myname);
- return 0;
//exit(EXIT_FAILURE);
}
uerror(const char *msg) {
/* Callback function to report fatal errors */
fprintf(stderr, "%s: %s\n", myname, msg);
- exit(EXIT_FAILURE);
+ return;
+ //exit(EXIT_FAILURE);
}
void
return(stdin);
if(!(handle = fopen(name, "rb"))) {
fprintf(stderr, "%s: cannot open '%s' for reading\n", myname, name);
- exit(EXIT_FAILURE);
+ return 0;
+ //exit(EXIT_FAILURE);
}
return(handle);
}
"\t-c calculate CRCs\t\t-d dump algorithm parameters\n"
"\t-D list preset algorithms\t-e echo (and reformat) input\n"
"\t-s search for algorithm\t\t-v calculate reversed CRCs\n"
- "\t-h | -u | -? show this help\n"
+ "\t-g search for alg given hex+crc\t-h | -u | -? show this help\n"
+ "Common Use Examples:\n"
+ "\t reveng -g 01020304e3\n"
+ "\t Searches for a known/common crc preset that computes the crc\n"
+ "\t on the end of the given hex string\n"
+ "\t reveng -w 8 -s 01020304e3 010204039d\n"
+ "\t Searches for any possible 8 bit width crc calc that computes\n"
+ "\t the crc on the end of the given hex string(s)\n"
+ "\t reveng -m CRC-8 -c 01020304\n"
+ "\t Calculates the crc-8 of the given hex string\n"
+ "\t reveng -D\n"
+ "\t Outputs a list of all known/common crc models with their\n"
+ "\t preset values\n"
"\n"
"Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015 Gregory Cook\n"
"This is free software; see the source for copying conditions. There is NO\n"