diff options
author | Peter Hutterer <peter.hutterer@who-t.net> | 2012-05-17 14:37:36 +1000 |
---|---|---|
committer | Peter Hutterer <peter.hutterer@who-t.net> | 2012-05-17 14:43:01 +1000 |
commit | bb20e90bd894ecf4efeba209af9536ec8d922538 (patch) | |
tree | 8463e36e5225a635110ddf0c8be694ed7ffa59f6 | |
parent | 4e4b73612b7d472fc21676ff4bd39e53d42ea191 (diff) |
Add support for comment lines starting with '#'
Very basic parser, recognises comments at the top of the file, and only if
'#' is the first character of that line.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
-rw-r--r-- | README | 8 | ||||
-rw-r--r-- | src/evemu.c | 18 |
2 files changed, 23 insertions, 3 deletions
@@ -10,15 +10,17 @@ evemu produces two different data formats, one for the device description and one for the device event data. hex data is without a 0x prefix. Device Description Format: + # comments are allowed at the top of the file only + # Only lines with # as first character are regonized N: <device name> I: <bustype (hex)> <vendor (hex)> <product (hex)> <version (hex)> - # for each kernel property (2.3.38 only) + --- for each kernel property (2.3.38 only) --- P: <byte 0 (hex)> <byte 1 (hex)> ... <byte 7 (hex)> P: <byte 8 (hex)> ... - # for each index from 0 to EV_CNT + --- for each index from 0 to EV_CNT --- B: <index (hex)> <byte 0 (hex)> <byte 1 (hex)> ... <byte 7 (hex)> B: <index (hex)> <byte 8 (hex)> ... - # for each absolute axis + --- for each absolute axis --- A: <index (hex)> <min> <max> <fuzz> <flat> diff --git a/src/evemu.c b/src/evemu.c index 57371a5..9101f66 100644 --- a/src/evemu.c +++ b/src/evemu.c @@ -63,6 +63,19 @@ #define SYSCALL(call) while (((call) == -1) && (errno == EINTR)) +static void skip_comment_block(FILE *fp) +{ + int first_char; + + while ((first_char = getc(fp)) == '#') { + char *line = NULL; + size_t n = 0; + getline(&line, &n, fp); + free(line); + } + ungetc(first_char, fp); +} + static void copy_bits(unsigned char *mask, const unsigned long *bits, int bytes) { int i; @@ -329,6 +342,7 @@ static void read_abs(struct evemu_device *dev, FILE *fp) { struct input_absinfo abs; unsigned int index; + while (fscanf(fp, "A: %02x %d %d %d %d\n", &index, &abs.minimum, &abs.maximum, &abs.fuzz, &abs.flat) > 0) dev->abs[index] = abs; @@ -342,6 +356,8 @@ int evemu_read(struct evemu_device *dev, FILE *fp) memset(dev, 0, sizeof(*dev)); + skip_comment_block(fp); + ret = fscanf(fp, "N: %m[^\n]\n", &devname); if (ret <= 0) { if (devname != NULL) @@ -458,6 +474,8 @@ int evemu_play(FILE *fp, int fd) struct timeval evtime; int ret; + skip_comment_block(fp); + memset(&evtime, 0, sizeof(evtime)); while (evemu_read_event_realtime(fp, &ev, &evtime) > 0) SYSCALL(ret = write(fd, &ev, sizeof(ev))); |