diff serial/baud_parse.c @ 40:8f505d413815

serial: full baud/spenh argument parsing implemented
author Mychaela Falconia <falcon@freecalypso.org>
date Sat, 20 Mar 2021 20:23:24 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/serial/baud_parse.c	Sat Mar 20 20:23:24 2021 +0000
@@ -0,0 +1,52 @@
+/*
+ * This module handles the parsing of the baud rate and speed enhancement
+ * command line argument.
+ */
+
+#include <ctype.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+unsigned baud_base, baud_spenh, spenh_host_max;
+
+void
+parse_baud_spenh_arg(arg)
+	char *arg;
+{
+	char *cp;
+
+	if (!isdigit(*arg)) {
+inv:		fprintf(stderr,
+			"error: invalid baud/spenh selection argument \"%s\"\n",
+			arg);
+		exit(1);
+	}
+	baud_base = strtoul(arg, &cp, 10);
+	if (!*cp)
+		return;
+	if (*cp++ != ',')
+		goto inv;
+	if (!isdigit(*cp))
+		goto inv;
+	baud_spenh = strtoul(cp, &cp, 10);
+	if (!*cp) {
+		spenh_host_max = 1;
+		return;
+	}
+	if (*cp++ != ',')
+		goto inv;
+	if (!isdigit(*cp) || cp[1])
+		goto inv;
+	spenh_host_max = *cp - '0';
+	switch (spenh_host_max) {
+	case 1:
+	case 2:
+	case 4:
+	case 8:
+		break;
+	default:
+		fprintf(stderr,
+	"error: speed enhancement multiplier can only be 1, 2, 4 or 8\n");
+		exit(1);
+	}
+}