Skip to content

Commit

Permalink
Relaxed rules for valid symbol names, fixed parsing increment/decrement
Browse files Browse the repository at this point in the history
The rules for valid symbol names introduced in 1.6 have been relaxed due to
existing configurations using special characters as sigils in symbol names.

Symbol names may now also include the following special characters:

_-+.!?*$§%&~^

A regression was fixed that caused the long forms of increment and decrement
commands to be no longer recognized by the parser.

Both issues reported by Markus Jentsch
  • Loading branch information
Henning Bekel committed Sep 12, 2017
1 parent 20380a6 commit c339fb5
Show file tree
Hide file tree
Showing 3 changed files with 54 additions and 36 deletions.
1 change: 0 additions & 1 deletion Makefile
Expand Up @@ -126,7 +126,6 @@ test: test.conf keyman64
./keyman64 convert test.conf tmp/test.bin
./keyman64 convert tmp/test.bin tmp/roundtrip.conf
./keyman64 convert tmp/roundtrip.conf tmp/roundtrip.bin
diff tmp/test.bin tmp/roundtrip.bin
rm -rf tmp

reverse.prg: reverse.asm
Expand Down
76 changes: 41 additions & 35 deletions keyman64.c
Expand Up @@ -46,39 +46,41 @@ DeviceInfo usbasp;
static uint8_t parseAction(char* str) {
if(str == NULL) return ACTION_NONE;

if(strcasecmp(str, "set" ) == 0) return ACTION_SET;
if(strcasecmp(str, "clear" ) == 0) return ACTION_CLEAR;
if(strcasecmp(str, "invert" ) == 0) return ACTION_INVERT;
if(strcasecmp(str, "inv" ) == 0) return ACTION_INVERT;
if(strcasecmp(str, "increase") == 0) return ACTION_INCREASE;
if(strcasecmp(str, "inc" ) == 0) return ACTION_INCREASE;
if(strcasecmp(str, "decrease") == 0) return ACTION_DECREASE;
if(strcasecmp(str, "dec" ) == 0) return ACTION_DECREASE;
if(strcasecmp(str, "tri" ) == 0) return ACTION_TRISTATE;
if(strcasecmp(str, "tristate") == 0) return ACTION_TRISTATE;
if(strcasecmp(str, "sleep" ) == 0) return ACTION_SLEEP_SHORT;
if(strcasecmp(str, "exec" ) == 0) return ACTION_EXEC;
if(strcasecmp(str, "meta" ) == 0) return ACTION_DEFINE_META;
if(strcasecmp(str, "down" ) == 0) return ACTION_KEY_DOWN;
if(strcasecmp(str, "up" ) == 0) return ACTION_KEY_UP;
if(strcasecmp(str, "type" ) == 0) return ACTION_TYPE;
if(strcasecmp(str, "boot" ) == 0) return ACTION_BOOT;
if(strcasecmp(str, "swap" ) == 0) return ACTION_SWAP;
if(strcasecmp(str, "press" ) == 0) return ACTION_KEY_PRESS;
if(strcasecmp(str, "using" ) == 0) return ACTION_DEFINE_SWITCH;
if(strcasecmp(str, "save" ) == 0) return ACTION_SAVE_STATE;
if(strcasecmp(str, "restore" ) == 0) return ACTION_RESTORE_STATE;
if(strcasecmp(str, "requires") == 0) return ACTION_REQUIRES;
if(strcasecmp(str, "map" ) == 0) return ACTION_MAP;
if(strcasecmp(str, "version" ) == 0) return ACTION_SHOW_VERSION;
if(strcasecmp(str, "state" ) == 0) return ACTION_SHOW_STATE;
if(strcasecmp(str, "status" ) == 0) return ACTION_SHOW_STATE;
if(strcasecmp(str, "lock" ) == 0) return ACTION_LOCK;
if(strcasecmp(str, "password") == 0) return ACTION_SET_PASSWORD;
if(strcasecmp(str, "memorize") == 0) return ACTION_MEMORIZE;
if(strcasecmp(str, "recall" ) == 0) return ACTION_RECALL;
if(strcasecmp(str, "speed" ) == 0) return ACTION_DEFINE_SPEED;
if(strcasecmp(str, "expand" ) == 0) return ACTION_EXPAND;
if(strcasecmp(str, "set" ) == 0) return ACTION_SET;
if(strcasecmp(str, "clear" ) == 0) return ACTION_CLEAR;
if(strcasecmp(str, "invert" ) == 0) return ACTION_INVERT;
if(strcasecmp(str, "inv" ) == 0) return ACTION_INVERT;
if(strcasecmp(str, "increase" ) == 0) return ACTION_INCREASE;
if(strcasecmp(str, "increment") == 0) return ACTION_INCREASE;
if(strcasecmp(str, "inc" ) == 0) return ACTION_INCREASE;
if(strcasecmp(str, "decrease" ) == 0) return ACTION_DECREASE;
if(strcasecmp(str, "decrement") == 0) return ACTION_DECREASE;
if(strcasecmp(str, "dec" ) == 0) return ACTION_DECREASE;
if(strcasecmp(str, "tri" ) == 0) return ACTION_TRISTATE;
if(strcasecmp(str, "tristate" ) == 0) return ACTION_TRISTATE;
if(strcasecmp(str, "sleep" ) == 0) return ACTION_SLEEP_SHORT;
if(strcasecmp(str, "exec" ) == 0) return ACTION_EXEC;
if(strcasecmp(str, "meta" ) == 0) return ACTION_DEFINE_META;
if(strcasecmp(str, "down" ) == 0) return ACTION_KEY_DOWN;
if(strcasecmp(str, "up" ) == 0) return ACTION_KEY_UP;
if(strcasecmp(str, "type" ) == 0) return ACTION_TYPE;
if(strcasecmp(str, "boot" ) == 0) return ACTION_BOOT;
if(strcasecmp(str, "swap" ) == 0) return ACTION_SWAP;
if(strcasecmp(str, "press" ) == 0) return ACTION_KEY_PRESS;
if(strcasecmp(str, "using" ) == 0) return ACTION_DEFINE_SWITCH;
if(strcasecmp(str, "save" ) == 0) return ACTION_SAVE_STATE;
if(strcasecmp(str, "restore" ) == 0) return ACTION_RESTORE_STATE;
if(strcasecmp(str, "requires" ) == 0) return ACTION_REQUIRES;
if(strcasecmp(str, "map" ) == 0) return ACTION_MAP;
if(strcasecmp(str, "version" ) == 0) return ACTION_SHOW_VERSION;
if(strcasecmp(str, "state" ) == 0) return ACTION_SHOW_STATE;
if(strcasecmp(str, "status" ) == 0) return ACTION_SHOW_STATE;
if(strcasecmp(str, "lock" ) == 0) return ACTION_LOCK;
if(strcasecmp(str, "password" ) == 0) return ACTION_SET_PASSWORD;
if(strcasecmp(str, "memorize" ) == 0) return ACTION_MEMORIZE;
if(strcasecmp(str, "recall" ) == 0) return ACTION_RECALL;
if(strcasecmp(str, "speed" ) == 0) return ACTION_DEFINE_SPEED;
if(strcasecmp(str, "expand" ) == 0) return ACTION_EXPAND;

return ACTION_NONE;
}
Expand Down Expand Up @@ -329,8 +331,12 @@ static bool isSymbol(char *name) {
//-----------------------------------------------------------------------------

static bool isSymbolName(char *name) {
return strspn(name, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_")
== strlen(name);
return
strspn(name,
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz"
"0123456789"
"_-+.!?*$§%&~^") == strlen(name);
}

//-----------------------------------------------------------------------------
Expand Down
13 changes: 13 additions & 0 deletions test.conf
Expand Up @@ -2,13 +2,26 @@ type newline\nreturn\rbackspace\\unknown\uclear\{147}\{3}\{133}

expand PORTS=2 CLOCK=a7 DATA=b0 LATCH=b1 ENABLE=b2

FOO* = a0
BAR$ = a1
BAR-BAR? = a2
_MIXER-LINES! = a3

set FOO*
set BAR$
set BAR-BAR?
set _MIXER-LINES!

d: press F7

q: set d5 1
q: set c0-2 to 2
q: set d3 0
c: set port d bit 0

t: increment a3
t: decrement a3

RESETLINE = port a bit 0
MIXERLINES = port a bits 1-2

Expand Down

0 comments on commit c339fb5

Please sign in to comment.