# HG changeset patch # User Mychaela Falconia # Date 1616271804 0 # Node ID 8f505d4138156e826e4da20df6067daa7dfb8956 # Parent 61a8ac93764f9a3ebb40fec2b7bc227459db1e5b serial: full baud/spenh argument parsing implemented diff -r 61a8ac93764f -r 8f505d413815 serial/Makefile --- a/serial/Makefile Sat Mar 20 20:03:29 2021 +0000 +++ b/serial/Makefile Sat Mar 20 20:23:24 2021 +0000 @@ -6,7 +6,7 @@ INSTBIN=${INSTALL_PREFIX}/bin -ATR_OBJS= atrmain.o collect_atr.o invtable.o serport.o +ATR_OBJS= atrmain.o baud_parse.o collect_atr.o invtable.o serport.o all: ${PROGS} diff -r 61a8ac93764f -r 8f505d413815 serial/atrmain.c --- a/serial/atrmain.c Sat Mar 20 20:03:29 2021 +0000 +++ b/serial/atrmain.c Sat Mar 20 20:23:24 2021 +0000 @@ -5,6 +5,8 @@ #include #include +extern unsigned baud_base; + main(argc, argv) char **argv; { @@ -15,7 +17,8 @@ exit(1); } open_serial_port(argv[1]); - set_serial_params(atoi(argv[2])); + parse_baud_spenh_arg(argv[2]); + set_serial_params(baud_base); set_serial_nonblock(0); serial_card_reset(); rc = collect_atr(); diff -r 61a8ac93764f -r 8f505d413815 serial/baud_parse.c --- /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 +#include +#include + +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); + } +}