FreeCalypso > hg > ueda-linux
view pads2gpcb/cmdline.c @ 75:959df5ddf7a2
pads2gpcb: command line dimension input implemented
author | Mychaela Falconia <falcon@ivan.Harhan.ORG> |
---|---|
date | Mon, 01 Feb 2016 02:09:25 +0000 |
parents | |
children |
line wrap: on
line source
#include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <string.h> #include <strings.h> long cmdline_dim_arg(srcstr) char *srcstr; { long accum; int sign = 1, mult; char *cp; int maxdec, ndec; cp = index(srcstr, 'm'); if (!cp) { inv: fprintf(stderr, "invalid command line dimension input \"%s\"\n", srcstr); exit(1); } if (!strcmp(cp, "mm")) { mult = 1; maxdec = 6; } else if (!strcmp(cp, "mil")) { mult = 254; maxdec = 2; } else goto inv; cp = srcstr; if (*cp == '-') { cp++; sign = -1; } if (!isdigit(*cp)) goto inv; for (accum = 0; isdigit(*cp); ) { accum *= 10; accum += *cp++ - '0'; } if (*cp == '.') { cp++; for (ndec = 0; isdigit(*cp); ndec++) { if (ndec >= maxdec) { fprintf(stderr, "command line dimension input \"%s\": too many digits after '.'\n", srcstr); exit(1); } accum *= 10; accum += *cp++ - '0'; } } else ndec = 0; if (*cp != 'm') goto inv; while (ndec < maxdec) { accum *= 10; ndec++; } return(accum * mult * sign); }