FreeCalypso > hg > fc-sim-sniff
view sw/sniff-dec/main.c @ 56:966a54303d68
simsniff-dec: factor out high-level decoding
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Wed, 04 Oct 2023 01:18:50 +0000 |
parents | 118a12e9483b |
children |
line wrap: on
line source
/* * simtrace3-sniff-dec main module: reading the log file. */ #include <ctype.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <strings.h> char *log_filename; char linebuf[128]; int lineno; unsigned fpga_word; static void process_line() { char *cp; cp = index(linebuf, '\n'); if (!cp) { fprintf(stderr, "%s line %d: too long or missing newline\n", log_filename, lineno); exit(1); } if (linebuf[0] != '[') return; cp = linebuf + 1; while (isdigit(*cp) || *cp == ':' || *cp == '.') cp++; if (*cp++ != ']') { invalid: fprintf(stderr, "%s line %d: failed to parse\n", log_filename, lineno); exit(1); } if (!isspace(*cp)) goto invalid; *cp++ = '\0'; if (strlen(linebuf) > 17) goto invalid; while (isspace(*cp)) cp++; if (!isxdigit(cp[0]) || !isxdigit(cp[1]) || !isxdigit(cp[2]) || !isxdigit(cp[3]) || !isspace(cp[4])) goto invalid; fpga_word = strtoul(cp, 0, 16); process_fpga_word(); } main(argc, argv) char **argv; { FILE *inf; if (argc != 2) { fprintf(stderr, "usage: %s logfile\n", argv[0]); exit(1); } log_filename = argv[1]; inf = fopen(log_filename, "r"); if (!inf) { perror(log_filename); exit(1); } for (lineno = 1; fgets(linebuf, sizeof linebuf, inf); lineno++) process_line(); exit(0); }