diff --git a/events.c b/events.c index 62ddd4e..f8045ff 100644 --- a/events.c +++ b/events.c @@ -21,7 +21,7 @@ #include "mapper.h" #define MAX_SIGNALS 16 -#define MAX_EVENTS 32 +#define MAX_EVENTS 1024 #define MSECS(t) (1000 * ((t) / HZ) + 1000 * ((t) % HZ) / HZ) @@ -42,6 +42,7 @@ __uint16_t product; int jsnum; int mapped; + int duplicate; //two maps, one for shifted, and one for not shifted struct shift_map map[2]; }; @@ -59,7 +60,7 @@ //the code joystick is 0xff and product 0x00 //the code joystick must be handled by our code void install_event_handlers() { - int i, j, r; + int i, j, r, d; char name[256]; struct input_id id; for (i=0; i<=MAX_EVENTS; i++) { @@ -92,6 +93,13 @@ events[i]->product=id.product; events[i]->jsnum=-1; events[i]->mapped=0; + events[i]->duplicate=0; + + for (d=0; dvendor==id.vendor && events[d]->product==id.product) { + events[i]->duplicate = events[i]->duplicate + 1; + } + } for (j=0; jmap[0].button_press[j]=NULL; @@ -453,8 +461,13 @@ for (i=0; ivendor==btn->vendor)&& - (events[i]->product==btn->product)) - mapper=events[i]; + (events[i]->product==btn->product)) { + if (btn->joystick != 255) { + if (btn->joystick == events[i]->duplicate) mapper=events[i]; + } else { + mapper=events[i]; + } + } } if (mapper==NULL) return; diff --git a/mapparser.c b/mapparser.c index bcdb333..78d8044 100644 --- a/mapparser.c +++ b/mapparser.c @@ -519,7 +519,7 @@ static void parse_valuepairs() { struct token key; struct token value; - char message[256]; + char message[300]; key=readtoken(); while ((key.type!=NL)||(key.type!=EOF)) { if (key.type==NL) break; @@ -853,7 +853,7 @@ static void parse_lines() { struct token t; - char message[256]; + char message[300]; t=peektoken(); while (t.type!=EOF) { if (t.type==NL) { diff --git a/programparser.c b/programparser.c index 2634466..cbd4b05 100644 --- a/programparser.c +++ b/programparser.c @@ -272,7 +272,7 @@ static void expect(int type, char *token) { struct token t; - char msg[256]; + char msg[300]; t=readtoken(); if (t.type!=type) { @@ -291,7 +291,7 @@ static void add_symbol(struct token symbol, int num, int global) { int i; - char msg[256]; + char msg[300]; if (nsymbols>=MAX_SYMBOLS) { reportline(symbol.line, symbol.pos, "Symbol table exhausted"); @@ -567,7 +567,7 @@ struct token t; struct token id; int sym; - char msg[256]; + char msg[300]; t=readtoken(); switch (t.type) { case ID: @@ -887,7 +887,7 @@ static void parse_delay() { struct token t; - char msg[256]; + char msg[300]; int before=0, after=0, jump=0, reg=0; t=readtoken(); if (t.type!='(') { @@ -930,7 +930,7 @@ static void parse_signal() { struct token t; - char msg[256]; + char msg[300]; t=readtoken(); if (t.type!='(') { sprintf(msg, "( expected before %s", t.value); @@ -952,7 +952,7 @@ static void parse_wait() { struct token t; - char msg[256]; + char msg[300]; int before=0, after=0, test=0; t=readtoken(); if (t.type!='(') { @@ -988,7 +988,7 @@ static void parse_press() { struct token t; - char msg[256]; + char msg[300]; int key, valid; t=readtoken(); if (t.type!='(') { @@ -1031,7 +1031,7 @@ static void parse_release() { struct token t; - char msg[256]; + char msg[300]; t=readtoken(); int key, valid; if (t.type!='(') { @@ -1120,7 +1120,7 @@ static void parse_assign(struct token id) { struct token t; - char msg[256]; + char msg[300]; int sym=symbol_exists(id.value); int ofs=0; if (sym<0) { @@ -1199,7 +1199,7 @@ static void parse_statement() { struct token t; - char msg[256]; + char msg[300]; t=readtoken(); if (t.type==';') {