? toggle_reset.patch Index: lirc_client.c =================================================================== RCS file: /cvsroot/lirc/lirc/tools/lirc_client.c,v retrieving revision 5.26 diff -u -u -r5.26 lirc_client.c --- lirc_client.c 24 Mar 2007 12:54:43 -0000 5.26 +++ lirc_client.c 16 Dec 2007 08:08:44 -0000 @@ -615,6 +615,10 @@ { flags|=startup_mode; } + else if(strcasecmp(s,"toggle_reset")==0) + { + flags|=toggle_reset; + } else { lirc_printf("%s: unknown flag \"%s\"\n",lirc_prog,s); @@ -1484,6 +1488,7 @@ { struct lirc_code *codes; + /* no remote/button specified */ if(scan->code==NULL) { return rep==0 || @@ -1491,17 +1496,21 @@ ((rep-scan->rep_delay-1)%scan->rep)==0); } + /* remote/button match? */ if(scan->next_code->remote==LIRC_ALL || strcasecmp(scan->next_code->remote,remote)==0) { + printf("comparing: %s %s\n", button, scan->next_code->button); if(scan->next_code->button==LIRC_ALL || strcasecmp(scan->next_code->button,button)==0) { int iscode=0; + /* button sequence? */ if(scan->code->next==NULL || rep==0) { scan->next_code=scan->next_code->next; } + /* sequence completed? */ if(scan->next_code==NULL) { scan->next_code=scan->code; @@ -1512,10 +1521,19 @@ return iscode; } } + if(rep!=0) return(0); + + /* handle toggle_reset */ + if(scan->flags & toggle_reset) + { + scan->next_config = scan->config; + } + codes=scan->code; if(codes==scan->next_code) return(0); codes=codes->next; + /* rebase code sequence */ while(codes!=scan->next_code->next) { struct lirc_code *prev,*next; Index: lirc_client.h =================================================================== RCS file: /cvsroot/lirc/lirc/tools/lirc_client.h,v retrieving revision 5.10 diff -u -u -r5.10 lirc_client.h --- lirc_client.h 6 May 2006 09:40:07 -0000 5.10 +++ lirc_client.h 16 Dec 2007 08:08:44 -0000 @@ -30,7 +30,8 @@ quit=0x02, mode=0x04, ecno=0x08, - startup_mode=0x10 + startup_mode=0x10, + toggle_reset=0x20, }; struct lirc_list