diff --git a/ubb-patgen/ubb-patgen.c b/ubb-patgen/ubb-patgen.c index 69edee4..af17e26 100644 --- a/ubb-patgen/ubb-patgen.c +++ b/ubb-patgen/ubb-patgen.c @@ -14,6 +14,7 @@ #include #include #include +#include #include #include #include @@ -194,6 +195,45 @@ static void *parse_pattern(const char *s, int *nibbles) } +static const char *load_pattern(const char *s) +{ + static char buf[20000]; /* more than enough :) */ + FILE *file; + char *p = buf; + int comment = 0; + int c; + + if (!strcmp(s, "-")) { + file = stdin; + } else { + file = fopen(s, "r"); + if (!file) + return s; + } + while ((c = fgetc(file)) != EOF) { + if (comment) { + comment = c != '\n'; + continue; + } + if (c == '#') { + comment = 1; + continue; + } + if (isspace(c)) + continue; + if (buf+sizeof(buf)-1 == p) { + fprintf(stderr, "%s: file is too big\n", s); + exit(1); + } + *p++ = c; + } + if (file != stdin) + fclose(file); + *p = 0; + return buf; +} + + /* ----- DMA control ------------------------------------------------------- */ @@ -449,7 +489,7 @@ static void usage(const char *name) "usage: %s\n" " %s [-q] -f freq_hz\n" " %s [-q] [-f freq_hz] -c [active_s]\n" -" %s [-q] [-f freq_hz] [-C] pattern\n\n" +" %s [-q] [-f freq_hz] [-C] file|pattern\n\n" " -c output bus clock on CLK without sending a pattern\n" " -C temporarily output bus clock on CLK (for debugging)\n" " -f freq_hz set bus clock to the specified frequency (default: 1 MHz)\n" @@ -457,6 +497,7 @@ static void usage(const char *name) " differences.\n\n" " active_s keep running that many seconds after setting the clock\n" " (default: exit immediately but leave the clock on)\n" +" file file containing the pattern\n" " pattern send the specified pattern on DAT0 through DAT3\n\n" "Frequency: the frequency in Hz, optionally followed by \"M\" or \"k\",\n" " optionally followed by \"Hz\", optionally followed by \"+\" or \"-\".\n" @@ -538,6 +579,9 @@ int main(int argc, char **argv) usage(*argv); } + if (pattern) + pattern = load_pattern(pattern); + ubb_open(UBB_ALL); PDFUNS = UBB_CMD;