view serial/baud_parse.c @ 49:831a224e182b

doc/Back-end-selection article written
author Mychaela Falconia <falcon@freecalypso.org>
date Sun, 21 Mar 2021 06:24:52 +0000
parents 8f505d413815
children
line wrap: on
line source

/*
 * 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);
	}
}