summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2012-05-17 14:37:36 +1000
committerPeter Hutterer <peter.hutterer@who-t.net>2012-05-17 14:43:01 +1000
commitbb20e90bd894ecf4efeba209af9536ec8d922538 (patch)
tree8463e36e5225a635110ddf0c8be694ed7ffa59f6
parent4e4b73612b7d472fc21676ff4bd39e53d42ea191 (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--README8
-rw-r--r--src/evemu.c18
2 files changed, 23 insertions, 3 deletions
diff --git a/README b/README
index f0e4951..a4c587d 100644
--- a/README
+++ b/README
@@ -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)));