diff options
author | Miodrag Milanovic <mmicko@gmail.com> | 2011-03-16 12:57:26 +0000 |
---|---|---|
committer | Miodrag Milanovic <mmicko@gmail.com> | 2011-03-16 12:57:26 +0000 |
commit | 9eea2335f91cadeb21fd8afbf3b9af05fabecf7f (patch) | |
tree | 09da76fca1ed3bad5131915ab8d5b1c0068f563f /src/emu/inptport.c | |
parent | 5fc16d9ce3664498e3a84b552d8967446c4a0897 (diff) |
Added possibility of altering default input port setting for devices. [Miodrag Milanovic]
Diffstat (limited to 'src/emu/inptport.c')
-rw-r--r-- | src/emu/inptport.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/emu/inptport.c b/src/emu/inptport.c index 5328325235c..abaea68723c 100644 --- a/src/emu/inptport.c +++ b/src/emu/inptport.c @@ -2932,6 +2932,29 @@ static int frame_get_digital_field_state(const input_field_config *field, int mo ***************************************************************************/ /*------------------------------------------------- + port_default_value - updates default value + of port settings according to device settings +-------------------------------------------------*/ + +static UINT32 port_default_value(const char *fulltag, UINT32 mask, UINT32 defval, device_config *owner) +{ + astring tempstring; + const input_device_default *def = NULL; + if (owner!=NULL) { + def = owner->input_ports_defaults(); + if (def!=NULL) { + while (def->tag!=NULL) { + if ((strcmp(fulltag,owner->subtag(tempstring,def->tag))==0) && (def->mask == mask)) { + return def->defvalue; + } + def++; + } + } + } + return defval; +} + +/*------------------------------------------------- port_config_detokenize - recursively detokenize a series of input port tokens -------------------------------------------------*/ @@ -3410,6 +3433,7 @@ static void port_config_detokenize(ioport_list &portlist, const input_port_token TOKEN_GET_UINT64_UNPACK2(ipt, mask, 32, defval, 32); if (curfield != NULL) field_config_insert(curfield, &maskbits, errorbuf, errorbuflen); + defval = port_default_value(fulltag,mask,defval,owner); curfield = field_config_alloc(curport, IPT_DIPSWITCH, defval, mask); cursetting = NULL; curfield->name = input_port_string_from_token(*ipt++); @@ -3488,6 +3512,7 @@ static void port_config_detokenize(ioport_list &portlist, const input_port_token TOKEN_GET_UINT64_UNPACK2(ipt, mask, 32, defval, 32); if (curfield != NULL) field_config_insert(curfield, &maskbits, errorbuf, errorbuflen); + defval = port_default_value(fulltag,mask,defval,owner); curfield = field_config_alloc(curport, IPT_CONFIG, defval, mask); cursetting = NULL; curfield->name = input_port_string_from_token(*ipt++); @@ -3519,6 +3544,7 @@ static void port_config_detokenize(ioport_list &portlist, const input_port_token TOKEN_GET_UINT64_UNPACK2(ipt, mask, 32, defval, 32); if (curfield != NULL) field_config_insert(curfield, &maskbits, errorbuf, errorbuflen); + defval = port_default_value(fulltag,mask,defval,owner); curfield = field_config_alloc(curport, IPT_CATEGORY, defval, mask); cursetting = NULL; curfield->name = input_port_string_from_token(*ipt++); |