diff 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 diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pads2gpcb/cmdline.c	Mon Feb 01 02:09:25 2016 +0000
@@ -0,0 +1,63 @@
+#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);
+}