FreeCalypso > hg > fc-sim-tools
comparison 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 |
comparison
equal
deleted
inserted
replaced
| 39:61a8ac93764f | 40:8f505d413815 |
|---|---|
| 1 /* | |
| 2 * This module handles the parsing of the baud rate and speed enhancement | |
| 3 * command line argument. | |
| 4 */ | |
| 5 | |
| 6 #include <ctype.h> | |
| 7 #include <stdio.h> | |
| 8 #include <stdlib.h> | |
| 9 | |
| 10 unsigned baud_base, baud_spenh, spenh_host_max; | |
| 11 | |
| 12 void | |
| 13 parse_baud_spenh_arg(arg) | |
| 14 char *arg; | |
| 15 { | |
| 16 char *cp; | |
| 17 | |
| 18 if (!isdigit(*arg)) { | |
| 19 inv: fprintf(stderr, | |
| 20 "error: invalid baud/spenh selection argument \"%s\"\n", | |
| 21 arg); | |
| 22 exit(1); | |
| 23 } | |
| 24 baud_base = strtoul(arg, &cp, 10); | |
| 25 if (!*cp) | |
| 26 return; | |
| 27 if (*cp++ != ',') | |
| 28 goto inv; | |
| 29 if (!isdigit(*cp)) | |
| 30 goto inv; | |
| 31 baud_spenh = strtoul(cp, &cp, 10); | |
| 32 if (!*cp) { | |
| 33 spenh_host_max = 1; | |
| 34 return; | |
| 35 } | |
| 36 if (*cp++ != ',') | |
| 37 goto inv; | |
| 38 if (!isdigit(*cp) || cp[1]) | |
| 39 goto inv; | |
| 40 spenh_host_max = *cp - '0'; | |
| 41 switch (spenh_host_max) { | |
| 42 case 1: | |
| 43 case 2: | |
| 44 case 4: | |
| 45 case 8: | |
| 46 break; | |
| 47 default: | |
| 48 fprintf(stderr, | |
| 49 "error: speed enhancement multiplier can only be 1, 2, 4 or 8\n"); | |
| 50 exit(1); | |
| 51 } | |
| 52 } |
