mirror of
git://projects.qi-hardware.com/ben-blinkenlights.git
synced 2024-11-19 08:46:16 +02:00
ubb-patgen/ubb-patgen.c: accept file (- for standard input) as pattern source
This commit is contained in:
parent
653910b64b
commit
69aba6ae19
@ -14,6 +14,7 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
#include <ctype.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
@ -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 ------------------------------------------------------- */
|
/* ----- DMA control ------------------------------------------------------- */
|
||||||
|
|
||||||
|
|
||||||
@ -449,7 +489,7 @@ static void usage(const char *name)
|
|||||||
"usage: %s\n"
|
"usage: %s\n"
|
||||||
" %s [-q] -f freq_hz\n"
|
" %s [-q] -f freq_hz\n"
|
||||||
" %s [-q] [-f freq_hz] -c [active_s]\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 output bus clock on CLK without sending a pattern\n"
|
||||||
" -C temporarily output bus clock on CLK (for debugging)\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"
|
" -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"
|
" differences.\n\n"
|
||||||
" active_s keep running that many seconds after setting the clock\n"
|
" active_s keep running that many seconds after setting the clock\n"
|
||||||
" (default: exit immediately but leave the clock on)\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"
|
" pattern send the specified pattern on DAT0 through DAT3\n\n"
|
||||||
"Frequency: the frequency in Hz, optionally followed by \"M\" or \"k\",\n"
|
"Frequency: the frequency in Hz, optionally followed by \"M\" or \"k\",\n"
|
||||||
" optionally followed by \"Hz\", optionally followed by \"+\" or \"-\".\n"
|
" optionally followed by \"Hz\", optionally followed by \"+\" or \"-\".\n"
|
||||||
@ -538,6 +579,9 @@ int main(int argc, char **argv)
|
|||||||
usage(*argv);
|
usage(*argv);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pattern)
|
||||||
|
pattern = load_pattern(pattern);
|
||||||
|
|
||||||
ubb_open(UBB_ALL);
|
ubb_open(UBB_ALL);
|
||||||
|
|
||||||
PDFUNS = UBB_CMD;
|
PDFUNS = UBB_CMD;
|
||||||
|
Loading…
Reference in New Issue
Block a user