diff options
Diffstat (limited to 'src/frontend')
-rw-r--r-- | src/frontend/mame/info.cpp | 971 | ||||
-rw-r--r-- | src/frontend/mame/luaengine.cpp | 32 | ||||
-rw-r--r-- | src/frontend/mame/mame.cpp | 14 | ||||
-rw-r--r-- | src/frontend/mame/mame.h | 6 | ||||
-rw-r--r-- | src/frontend/mame/mameopts.cpp | 1 | ||||
-rw-r--r-- | src/frontend/mame/ui/filemngr.cpp | 3 | ||||
-rw-r--r-- | src/frontend/mame/ui/floppycntrl.cpp | 4 | ||||
-rw-r--r-- | src/frontend/mame/ui/floppycntrl.h | 2 | ||||
-rw-r--r-- | src/frontend/mame/ui/menu.cpp | 62 | ||||
-rw-r--r-- | src/frontend/mame/ui/menu.h | 10 | ||||
-rw-r--r-- | src/frontend/mame/ui/miscmenu.cpp | 4 | ||||
-rw-r--r-- | src/frontend/mame/ui/selgame.cpp | 10 | ||||
-rw-r--r-- | src/frontend/mame/ui/sliders.cpp | 60 | ||||
-rw-r--r-- | src/frontend/mame/ui/submenu.h | 4 | ||||
-rw-r--r-- | src/frontend/mame/ui/ui.cpp | 48 | ||||
-rw-r--r-- | src/frontend/mame/ui/ui.h | 4 |
16 files changed, 616 insertions, 619 deletions
diff --git a/src/frontend/mame/info.cpp b/src/frontend/mame/info.cpp index b23c8296992..f20175e4998 100644 --- a/src/frontend/mame/info.cpp +++ b/src/frontend/mame/info.cpp @@ -514,7 +514,7 @@ void info_xml_creator::output_bios() // skip if no ROMs if (m_drivlist.driver().rom == nullptr) return; - + // first determine the default BIOS name std::string defaultname; for (const rom_entry *rom = m_drivlist.driver().rom; !ROMENTRY_ISEND(rom); rom++) @@ -819,472 +819,471 @@ void info_xml_creator::output_sound(device_t &device) void info_xml_creator::output_input(const ioport_list &portlist) { - // enumerated list of control types - // NOTE: the order is chosen so that 'spare' button inputs are assigned to the - // most-likely-correct input device when info is output (you can think of it as - // a sort of likelihood order of having buttons) - enum - { - CTRL_DIGITAL_BUTTONS, - CTRL_DIGITAL_JOYSTICK, - CTRL_ANALOG_JOYSTICK, - CTRL_ANALOG_LIGHTGUN, - CTRL_ANALOG_DIAL, - CTRL_ANALOG_POSITIONAL, - CTRL_ANALOG_TRACKBALL, - CTRL_ANALOG_MOUSE, - CTRL_ANALOG_PADDLE, - CTRL_ANALOG_PEDAL, - CTRL_DIGITAL_KEYPAD, - CTRL_DIGITAL_KEYBOARD, - CTRL_DIGITAL_MAHJONG, - CTRL_DIGITAL_HANAFUDA, - CTRL_DIGITAL_GAMBLING, - CTRL_COUNT - }; - - enum - { - CTRL_P1, - CTRL_P2, - CTRL_P3, - CTRL_P4, - CTRL_P5, - CTRL_P6, - CTRL_P7, - CTRL_P8, + // enumerated list of control types + // NOTE: the order is chosen so that 'spare' button inputs are assigned to the + // most-likely-correct input device when info is output (you can think of it as + // a sort of likelihood order of having buttons) + enum + { + CTRL_DIGITAL_BUTTONS, + CTRL_DIGITAL_JOYSTICK, + CTRL_ANALOG_JOYSTICK, + CTRL_ANALOG_LIGHTGUN, + CTRL_ANALOG_DIAL, + CTRL_ANALOG_POSITIONAL, + CTRL_ANALOG_TRACKBALL, + CTRL_ANALOG_MOUSE, + CTRL_ANALOG_PADDLE, + CTRL_ANALOG_PEDAL, + CTRL_DIGITAL_KEYPAD, + CTRL_DIGITAL_KEYBOARD, + CTRL_DIGITAL_MAHJONG, + CTRL_DIGITAL_HANAFUDA, + CTRL_DIGITAL_GAMBLING, + CTRL_COUNT + }; + + enum + { + CTRL_P1, + CTRL_P2, + CTRL_P3, + CTRL_P4, + CTRL_P5, + CTRL_P6, + CTRL_P7, + CTRL_P8, CTRL_P9, CTRL_P10, - CTRL_PCOUNT - }; - - // directions - const UINT8 DIR_UP = 0x01; - const UINT8 DIR_DOWN = 0x02; - const UINT8 DIR_LEFT = 0x04; - const UINT8 DIR_RIGHT = 0x08; - - // initialize the list of control types - struct - { - const char * type; // general type of input - int player; // player which the input belongs to - int nbuttons; // total number of buttons - int maxbuttons; // max index of buttons (using IPT_BUTTONn) [probably to be removed soonish] - int ways; // directions for joystick - bool analog; // is analog input? - UINT8 helper[3]; // for dual joysticks [possibly to be removed soonish] - INT32 min; // analog minimum value - INT32 max; // analog maximum value - INT32 sensitivity; // default analog sensitivity - INT32 keydelta; // default analog keydelta - bool reverse; // default analog reverse setting - } control_info[CTRL_COUNT * CTRL_PCOUNT]; - - memset(&control_info, 0, sizeof(control_info)); - - // tracking info as we iterate - int nplayer = 0; - int ncoin = 0; - bool service = false; - bool tilt = false; - - // iterate over the ports - for (ioport_port &port : portlist) - { - int ctrl_type = CTRL_DIGITAL_BUTTONS; - bool ctrl_analog = FALSE; - for (ioport_field &field : port.fields()) - { - - // track the highest player number - if (nplayer < field.player() + 1) - nplayer = field.player() + 1; - - // switch off of the type - switch (field.type()) - { - // map joysticks - case IPT_JOYSTICK_UP: - ctrl_type = CTRL_DIGITAL_JOYSTICK; - control_info[field.player() * CTRL_COUNT + ctrl_type].type = "joy"; - control_info[field.player() * CTRL_COUNT + ctrl_type].player = field.player() + 1; - control_info[field.player() * CTRL_COUNT + ctrl_type].ways = field.way(); - control_info[field.player() * CTRL_COUNT + ctrl_type].helper[0] |= DIR_UP; - break; - case IPT_JOYSTICK_DOWN: - ctrl_type = CTRL_DIGITAL_JOYSTICK; - control_info[field.player() * CTRL_COUNT + ctrl_type].type = "joy"; - control_info[field.player() * CTRL_COUNT + ctrl_type].player = field.player() + 1; - control_info[field.player() * CTRL_COUNT + ctrl_type].ways = field.way(); - control_info[field.player() * CTRL_COUNT + ctrl_type].helper[0] |= DIR_DOWN; - break; - case IPT_JOYSTICK_LEFT: - ctrl_type = CTRL_DIGITAL_JOYSTICK; - control_info[field.player() * CTRL_COUNT + ctrl_type].type = "joy"; - control_info[field.player() * CTRL_COUNT + ctrl_type].player = field.player() + 1; - control_info[field.player() * CTRL_COUNT + ctrl_type].ways = field.way(); - control_info[field.player() * CTRL_COUNT + ctrl_type].helper[0] |= DIR_LEFT; - break; - case IPT_JOYSTICK_RIGHT: - ctrl_type = CTRL_DIGITAL_JOYSTICK; - control_info[field.player() * CTRL_COUNT + ctrl_type].type = "joy"; - control_info[field.player() * CTRL_COUNT + ctrl_type].player = field.player() + 1; - control_info[field.player() * CTRL_COUNT + ctrl_type].ways = field.way(); - control_info[field.player() * CTRL_COUNT + ctrl_type].helper[0] |= DIR_RIGHT; - break; - - case IPT_JOYSTICKLEFT_UP: - ctrl_type = CTRL_DIGITAL_JOYSTICK; - control_info[field.player() * CTRL_COUNT + ctrl_type].type = "joy"; - control_info[field.player() * CTRL_COUNT + ctrl_type].player = field.player() + 1; - control_info[field.player() * CTRL_COUNT + ctrl_type].ways = field.way(); - control_info[field.player() * CTRL_COUNT + ctrl_type].helper[1] |= DIR_UP; - break; - case IPT_JOYSTICKLEFT_DOWN: - ctrl_type = CTRL_DIGITAL_JOYSTICK; - control_info[field.player() * CTRL_COUNT + ctrl_type].type = "joy"; - control_info[field.player() * CTRL_COUNT + ctrl_type].player = field.player() + 1; - control_info[field.player() * CTRL_COUNT + ctrl_type].ways = field.way(); - control_info[field.player() * CTRL_COUNT + ctrl_type].helper[1] |= DIR_DOWN; - break; - case IPT_JOYSTICKLEFT_LEFT: - ctrl_type = CTRL_DIGITAL_JOYSTICK; - control_info[field.player() * CTRL_COUNT + ctrl_type].type = "joy"; - control_info[field.player() * CTRL_COUNT + ctrl_type].player = field.player() + 1; - control_info[field.player() * CTRL_COUNT + ctrl_type].ways = field.way(); - control_info[field.player() * CTRL_COUNT + ctrl_type].helper[1] |= DIR_LEFT; - break; - case IPT_JOYSTICKLEFT_RIGHT: - ctrl_type = CTRL_DIGITAL_JOYSTICK; - control_info[field.player() * CTRL_COUNT + ctrl_type].type = "joy"; - control_info[field.player() * CTRL_COUNT + ctrl_type].player = field.player() + 1; - control_info[field.player() * CTRL_COUNT + ctrl_type].ways = field.way(); - control_info[field.player() * CTRL_COUNT + ctrl_type].helper[1] |= DIR_RIGHT; - break; - - case IPT_JOYSTICKRIGHT_UP: - ctrl_type = CTRL_DIGITAL_JOYSTICK; - control_info[field.player() * CTRL_COUNT + ctrl_type].type = "joy"; - control_info[field.player() * CTRL_COUNT + ctrl_type].player = field.player() + 1; - control_info[field.player() * CTRL_COUNT + ctrl_type].ways = field.way(); - control_info[field.player() * CTRL_COUNT + ctrl_type].helper[2] |= DIR_UP; - break; - case IPT_JOYSTICKRIGHT_DOWN: - ctrl_type = CTRL_DIGITAL_JOYSTICK; - control_info[field.player() * CTRL_COUNT + ctrl_type].type = "joy"; - control_info[field.player() * CTRL_COUNT + ctrl_type].player = field.player() + 1; - control_info[field.player() * CTRL_COUNT + ctrl_type].ways = field.way(); - control_info[field.player() * CTRL_COUNT + ctrl_type].helper[2] |= DIR_DOWN; - break; - case IPT_JOYSTICKRIGHT_LEFT: - ctrl_type = CTRL_DIGITAL_JOYSTICK; - control_info[field.player() * CTRL_COUNT + ctrl_type].type = "joy"; - control_info[field.player() * CTRL_COUNT + ctrl_type].player = field.player() + 1; - control_info[field.player() * CTRL_COUNT + ctrl_type].ways = field.way(); - control_info[field.player() * CTRL_COUNT + ctrl_type].helper[2] |= DIR_LEFT; - break; - case IPT_JOYSTICKRIGHT_RIGHT: - ctrl_type = CTRL_DIGITAL_JOYSTICK; - control_info[field.player() * CTRL_COUNT + ctrl_type].type = "joy"; - control_info[field.player() * CTRL_COUNT + ctrl_type].player = field.player() + 1; - control_info[field.player() * CTRL_COUNT + ctrl_type].ways = field.way(); - control_info[field.player() * CTRL_COUNT + ctrl_type].helper[2] |= DIR_RIGHT; - break; - - // map analog inputs - case IPT_AD_STICK_X: - case IPT_AD_STICK_Y: - case IPT_AD_STICK_Z: - ctrl_analog = TRUE; - ctrl_type = CTRL_ANALOG_JOYSTICK; - control_info[field.player() * CTRL_COUNT + ctrl_type].type = "stick"; - control_info[field.player() * CTRL_COUNT + ctrl_type].player = field.player() + 1; - control_info[field.player() * CTRL_COUNT + ctrl_type].analog = TRUE; - break; - - case IPT_PADDLE: - case IPT_PADDLE_V: - ctrl_analog = TRUE; - ctrl_type = CTRL_ANALOG_PADDLE; - control_info[field.player() * CTRL_COUNT + ctrl_type].type = "paddle"; - control_info[field.player() * CTRL_COUNT + ctrl_type].player = field.player() + 1; - control_info[field.player() * CTRL_COUNT + ctrl_type].analog = TRUE; - break; - - case IPT_PEDAL: - case IPT_PEDAL2: - case IPT_PEDAL3: - ctrl_analog = TRUE; - ctrl_type = CTRL_ANALOG_PEDAL; - control_info[field.player() * CTRL_COUNT + ctrl_type].type = "pedal"; - control_info[field.player() * CTRL_COUNT + ctrl_type].player = field.player() + 1; - control_info[field.player() * CTRL_COUNT + ctrl_type].analog = TRUE; - break; - - case IPT_LIGHTGUN_X: - case IPT_LIGHTGUN_Y: - ctrl_analog = TRUE; - ctrl_type = CTRL_ANALOG_LIGHTGUN; - control_info[field.player() * CTRL_COUNT + ctrl_type].type = "lightgun"; - control_info[field.player() * CTRL_COUNT + ctrl_type].player = field.player() + 1; - control_info[field.player() * CTRL_COUNT + ctrl_type].analog = TRUE; - break; - - case IPT_POSITIONAL: - case IPT_POSITIONAL_V: - ctrl_analog = TRUE; - ctrl_type = CTRL_ANALOG_POSITIONAL; - control_info[field.player() * CTRL_COUNT + ctrl_type].type = "positional"; - control_info[field.player() * CTRL_COUNT + ctrl_type].player = field.player() + 1; - control_info[field.player() * CTRL_COUNT + ctrl_type].analog = TRUE; - break; - - case IPT_DIAL: - case IPT_DIAL_V: - ctrl_analog = TRUE; - ctrl_type = CTRL_ANALOG_DIAL; - control_info[field.player() * CTRL_COUNT + ctrl_type].type = "dial"; - control_info[field.player() * CTRL_COUNT + ctrl_type].player = field.player() + 1; - control_info[field.player() * CTRL_COUNT + ctrl_type].analog = TRUE; - break; - - case IPT_TRACKBALL_X: - case IPT_TRACKBALL_Y: - ctrl_analog = TRUE; - ctrl_type = CTRL_ANALOG_TRACKBALL; - control_info[field.player() * CTRL_COUNT + ctrl_type].type = "trackball"; - control_info[field.player() * CTRL_COUNT + ctrl_type].player = field.player() + 1; - control_info[field.player() * CTRL_COUNT + ctrl_type].analog = TRUE; - break; - - case IPT_MOUSE_X: - case IPT_MOUSE_Y: - ctrl_analog = TRUE; - ctrl_type = CTRL_ANALOG_MOUSE; - control_info[field.player() * CTRL_COUNT + ctrl_type].type = "mouse"; - control_info[field.player() * CTRL_COUNT + ctrl_type].player = field.player() + 1; - control_info[field.player() * CTRL_COUNT + ctrl_type].analog = TRUE; - break; - - // map buttons - case IPT_BUTTON1: - case IPT_BUTTON2: - case IPT_BUTTON3: - case IPT_BUTTON4: - case IPT_BUTTON5: - case IPT_BUTTON6: - case IPT_BUTTON7: - case IPT_BUTTON8: - case IPT_BUTTON9: - case IPT_BUTTON10: - case IPT_BUTTON11: - case IPT_BUTTON12: - case IPT_BUTTON13: - case IPT_BUTTON14: - case IPT_BUTTON15: - case IPT_BUTTON16: - ctrl_analog = FALSE; - if (control_info[field.player() * CTRL_COUNT + ctrl_type].type == nullptr) - { - control_info[field.player() * CTRL_COUNT + ctrl_type].type = "only_buttons"; - control_info[field.player() * CTRL_COUNT + ctrl_type].player = field.player() + 1; - control_info[field.player() * CTRL_COUNT + ctrl_type].analog = FALSE; - } - control_info[field.player() * CTRL_COUNT + ctrl_type].maxbuttons = MAX(control_info[field.player() * CTRL_COUNT + ctrl_type].maxbuttons, field.type() - IPT_BUTTON1 + 1); - control_info[field.player() * CTRL_COUNT + ctrl_type].nbuttons++; - break; - - // track maximum coin index - case IPT_COIN1: - case IPT_COIN2: - case IPT_COIN3: - case IPT_COIN4: - case IPT_COIN5: - case IPT_COIN6: - case IPT_COIN7: - case IPT_COIN8: + CTRL_PCOUNT + }; + + // directions + const UINT8 DIR_UP = 0x01; + const UINT8 DIR_DOWN = 0x02; + const UINT8 DIR_LEFT = 0x04; + const UINT8 DIR_RIGHT = 0x08; + + // initialize the list of control types + struct + { + const char * type; // general type of input + int player; // player which the input belongs to + int nbuttons; // total number of buttons + int maxbuttons; // max index of buttons (using IPT_BUTTONn) [probably to be removed soonish] + int ways; // directions for joystick + bool analog; // is analog input? + UINT8 helper[3]; // for dual joysticks [possibly to be removed soonish] + INT32 min; // analog minimum value + INT32 max; // analog maximum value + INT32 sensitivity; // default analog sensitivity + INT32 keydelta; // default analog keydelta + bool reverse; // default analog reverse setting + } control_info[CTRL_COUNT * CTRL_PCOUNT]; + + memset(&control_info, 0, sizeof(control_info)); + + // tracking info as we iterate + int nplayer = 0; + int ncoin = 0; + bool service = false; + bool tilt = false; + + // iterate over the ports + for (ioport_port &port : portlist) + { + int ctrl_type = CTRL_DIGITAL_BUTTONS; + bool ctrl_analog = FALSE; + for (ioport_field &field : port.fields()) + { + // track the highest player number + if (nplayer < field.player() + 1) + nplayer = field.player() + 1; + + // switch off of the type + switch (field.type()) + { + // map joysticks + case IPT_JOYSTICK_UP: + ctrl_type = CTRL_DIGITAL_JOYSTICK; + control_info[field.player() * CTRL_COUNT + ctrl_type].type = "joy"; + control_info[field.player() * CTRL_COUNT + ctrl_type].player = field.player() + 1; + control_info[field.player() * CTRL_COUNT + ctrl_type].ways = field.way(); + control_info[field.player() * CTRL_COUNT + ctrl_type].helper[0] |= DIR_UP; + break; + case IPT_JOYSTICK_DOWN: + ctrl_type = CTRL_DIGITAL_JOYSTICK; + control_info[field.player() * CTRL_COUNT + ctrl_type].type = "joy"; + control_info[field.player() * CTRL_COUNT + ctrl_type].player = field.player() + 1; + control_info[field.player() * CTRL_COUNT + ctrl_type].ways = field.way(); + control_info[field.player() * CTRL_COUNT + ctrl_type].helper[0] |= DIR_DOWN; + break; + case IPT_JOYSTICK_LEFT: + ctrl_type = CTRL_DIGITAL_JOYSTICK; + control_info[field.player() * CTRL_COUNT + ctrl_type].type = "joy"; + control_info[field.player() * CTRL_COUNT + ctrl_type].player = field.player() + 1; + control_info[field.player() * CTRL_COUNT + ctrl_type].ways = field.way(); + control_info[field.player() * CTRL_COUNT + ctrl_type].helper[0] |= DIR_LEFT; + break; + case IPT_JOYSTICK_RIGHT: + ctrl_type = CTRL_DIGITAL_JOYSTICK; + control_info[field.player() * CTRL_COUNT + ctrl_type].type = "joy"; + control_info[field.player() * CTRL_COUNT + ctrl_type].player = field.player() + 1; + control_info[field.player() * CTRL_COUNT + ctrl_type].ways = field.way(); + control_info[field.player() * CTRL_COUNT + ctrl_type].helper[0] |= DIR_RIGHT; + break; + + case IPT_JOYSTICKLEFT_UP: + ctrl_type = CTRL_DIGITAL_JOYSTICK; + control_info[field.player() * CTRL_COUNT + ctrl_type].type = "joy"; + control_info[field.player() * CTRL_COUNT + ctrl_type].player = field.player() + 1; + control_info[field.player() * CTRL_COUNT + ctrl_type].ways = field.way(); + control_info[field.player() * CTRL_COUNT + ctrl_type].helper[1] |= DIR_UP; + break; + case IPT_JOYSTICKLEFT_DOWN: + ctrl_type = CTRL_DIGITAL_JOYSTICK; + control_info[field.player() * CTRL_COUNT + ctrl_type].type = "joy"; + control_info[field.player() * CTRL_COUNT + ctrl_type].player = field.player() + 1; + control_info[field.player() * CTRL_COUNT + ctrl_type].ways = field.way(); + control_info[field.player() * CTRL_COUNT + ctrl_type].helper[1] |= DIR_DOWN; + break; + case IPT_JOYSTICKLEFT_LEFT: + ctrl_type = CTRL_DIGITAL_JOYSTICK; + control_info[field.player() * CTRL_COUNT + ctrl_type].type = "joy"; + control_info[field.player() * CTRL_COUNT + ctrl_type].player = field.player() + 1; + control_info[field.player() * CTRL_COUNT + ctrl_type].ways = field.way(); + control_info[field.player() * CTRL_COUNT + ctrl_type].helper[1] |= DIR_LEFT; + break; + case IPT_JOYSTICKLEFT_RIGHT: + ctrl_type = CTRL_DIGITAL_JOYSTICK; + control_info[field.player() * CTRL_COUNT + ctrl_type].type = "joy"; + control_info[field.player() * CTRL_COUNT + ctrl_type].player = field.player() + 1; + control_info[field.player() * CTRL_COUNT + ctrl_type].ways = field.way(); + control_info[field.player() * CTRL_COUNT + ctrl_type].helper[1] |= DIR_RIGHT; + break; + + case IPT_JOYSTICKRIGHT_UP: + ctrl_type = CTRL_DIGITAL_JOYSTICK; + control_info[field.player() * CTRL_COUNT + ctrl_type].type = "joy"; + control_info[field.player() * CTRL_COUNT + ctrl_type].player = field.player() + 1; + control_info[field.player() * CTRL_COUNT + ctrl_type].ways = field.way(); + control_info[field.player() * CTRL_COUNT + ctrl_type].helper[2] |= DIR_UP; + break; + case IPT_JOYSTICKRIGHT_DOWN: + ctrl_type = CTRL_DIGITAL_JOYSTICK; + control_info[field.player() * CTRL_COUNT + ctrl_type].type = "joy"; + control_info[field.player() * CTRL_COUNT + ctrl_type].player = field.player() + 1; + control_info[field.player() * CTRL_COUNT + ctrl_type].ways = field.way(); + control_info[field.player() * CTRL_COUNT + ctrl_type].helper[2] |= DIR_DOWN; + break; + case IPT_JOYSTICKRIGHT_LEFT: + ctrl_type = CTRL_DIGITAL_JOYSTICK; + control_info[field.player() * CTRL_COUNT + ctrl_type].type = "joy"; + control_info[field.player() * CTRL_COUNT + ctrl_type].player = field.player() + 1; + control_info[field.player() * CTRL_COUNT + ctrl_type].ways = field.way(); + control_info[field.player() * CTRL_COUNT + ctrl_type].helper[2] |= DIR_LEFT; + break; + case IPT_JOYSTICKRIGHT_RIGHT: + ctrl_type = CTRL_DIGITAL_JOYSTICK; + control_info[field.player() * CTRL_COUNT + ctrl_type].type = "joy"; + control_info[field.player() * CTRL_COUNT + ctrl_type].player = field.player() + 1; + control_info[field.player() * CTRL_COUNT + ctrl_type].ways = field.way(); + control_info[field.player() * CTRL_COUNT + ctrl_type].helper[2] |= DIR_RIGHT; + break; + + // map analog inputs + case IPT_AD_STICK_X: + case IPT_AD_STICK_Y: + case IPT_AD_STICK_Z: + ctrl_analog = TRUE; + ctrl_type = CTRL_ANALOG_JOYSTICK; + control_info[field.player() * CTRL_COUNT + ctrl_type].type = "stick"; + control_info[field.player() * CTRL_COUNT + ctrl_type].player = field.player() + 1; + control_info[field.player() * CTRL_COUNT + ctrl_type].analog = TRUE; + break; + + case IPT_PADDLE: + case IPT_PADDLE_V: + ctrl_analog = TRUE; + ctrl_type = CTRL_ANALOG_PADDLE; + control_info[field.player() * CTRL_COUNT + ctrl_type].type = "paddle"; + control_info[field.player() * CTRL_COUNT + ctrl_type].player = field.player() + 1; + control_info[field.player() * CTRL_COUNT + ctrl_type].analog = TRUE; + break; + + case IPT_PEDAL: + case IPT_PEDAL2: + case IPT_PEDAL3: + ctrl_analog = TRUE; + ctrl_type = CTRL_ANALOG_PEDAL; + control_info[field.player() * CTRL_COUNT + ctrl_type].type = "pedal"; + control_info[field.player() * CTRL_COUNT + ctrl_type].player = field.player() + 1; + control_info[field.player() * CTRL_COUNT + ctrl_type].analog = TRUE; + break; + + case IPT_LIGHTGUN_X: + case IPT_LIGHTGUN_Y: + ctrl_analog = TRUE; + ctrl_type = CTRL_ANALOG_LIGHTGUN; + control_info[field.player() * CTRL_COUNT + ctrl_type].type = "lightgun"; + control_info[field.player() * CTRL_COUNT + ctrl_type].player = field.player() + 1; + control_info[field.player() * CTRL_COUNT + ctrl_type].analog = TRUE; + break; + + case IPT_POSITIONAL: + case IPT_POSITIONAL_V: + ctrl_analog = TRUE; + ctrl_type = CTRL_ANALOG_POSITIONAL; + control_info[field.player() * CTRL_COUNT + ctrl_type].type = "positional"; + control_info[field.player() * CTRL_COUNT + ctrl_type].player = field.player() + 1; + control_info[field.player() * CTRL_COUNT + ctrl_type].analog = TRUE; + break; + + case IPT_DIAL: + case IPT_DIAL_V: + ctrl_analog = TRUE; + ctrl_type = CTRL_ANALOG_DIAL; + control_info[field.player() * CTRL_COUNT + ctrl_type].type = "dial"; + control_info[field.player() * CTRL_COUNT + ctrl_type].player = field.player() + 1; + control_info[field.player() * CTRL_COUNT + ctrl_type].analog = TRUE; + break; + + case IPT_TRACKBALL_X: + case IPT_TRACKBALL_Y: + ctrl_analog = TRUE; + ctrl_type = CTRL_ANALOG_TRACKBALL; + control_info[field.player() * CTRL_COUNT + ctrl_type].type = "trackball"; + control_info[field.player() * CTRL_COUNT + ctrl_type].player = field.player() + 1; + control_info[field.player() * CTRL_COUNT + ctrl_type].analog = TRUE; + break; + + case IPT_MOUSE_X: + case IPT_MOUSE_Y: + ctrl_analog = TRUE; + ctrl_type = CTRL_ANALOG_MOUSE; + control_info[field.player() * CTRL_COUNT + ctrl_type].type = "mouse"; + control_info[field.player() * CTRL_COUNT + ctrl_type].player = field.player() + 1; + control_info[field.player() * CTRL_COUNT + ctrl_type].analog = TRUE; + break; + + // map buttons + case IPT_BUTTON1: + case IPT_BUTTON2: + case IPT_BUTTON3: + case IPT_BUTTON4: + case IPT_BUTTON5: + case IPT_BUTTON6: + case IPT_BUTTON7: + case IPT_BUTTON8: + case IPT_BUTTON9: + case IPT_BUTTON10: + case IPT_BUTTON11: + case IPT_BUTTON12: + case IPT_BUTTON13: + case IPT_BUTTON14: + case IPT_BUTTON15: + case IPT_BUTTON16: + ctrl_analog = FALSE; + if (control_info[field.player() * CTRL_COUNT + ctrl_type].type == nullptr) + { + control_info[field.player() * CTRL_COUNT + ctrl_type].type = "only_buttons"; + control_info[field.player() * CTRL_COUNT + ctrl_type].player = field.player() + 1; + control_info[field.player() * CTRL_COUNT + ctrl_type].analog = FALSE; + } + control_info[field.player() * CTRL_COUNT + ctrl_type].maxbuttons = MAX(control_info[field.player() * CTRL_COUNT + ctrl_type].maxbuttons, field.type() - IPT_BUTTON1 + 1); + control_info[field.player() * CTRL_COUNT + ctrl_type].nbuttons++; + break; + + // track maximum coin index + case IPT_COIN1: + case IPT_COIN2: + case IPT_COIN3: + case IPT_COIN4: + case IPT_COIN5: + case IPT_COIN6: + case IPT_COIN7: + case IPT_COIN8: case IPT_COIN9: case IPT_COIN10: case IPT_COIN11: case IPT_COIN12: - ncoin = MAX(ncoin, field.type() - IPT_COIN1 + 1); - break; - - // track presence of keypads and keyboards - case IPT_KEYPAD: - ctrl_type = CTRL_DIGITAL_KEYPAD; - control_info[field.player() * CTRL_COUNT + ctrl_type].type = "keypad"; - control_info[field.player() * CTRL_COUNT + ctrl_type].player = field.player() + 1; - control_info[field.player() * CTRL_COUNT + ctrl_type].nbuttons++; - break; - - case IPT_KEYBOARD: - ctrl_type = CTRL_DIGITAL_KEYBOARD; - control_info[field.player() * CTRL_COUNT + ctrl_type].type = "keyboard"; - control_info[field.player() * CTRL_COUNT + ctrl_type].player = field.player() + 1; - control_info[field.player() * CTRL_COUNT + ctrl_type].nbuttons++; - break; - - // additional types - case IPT_SERVICE: - service = true; - break; - - case IPT_TILT: - tilt = true; - break; - - default: - if (field.type() > IPT_MAHJONG_FIRST && field.type() < IPT_MAHJONG_LAST) - { - ctrl_type = CTRL_DIGITAL_MAHJONG; - control_info[field.player() * CTRL_COUNT + ctrl_type].type = "mahjong"; - control_info[field.player() * CTRL_COUNT + ctrl_type].player = field.player() + 1; - control_info[field.player() * CTRL_COUNT + ctrl_type].nbuttons++; - } - else if (field.type() > IPT_HANAFUDA_FIRST && field.type() < IPT_HANAFUDA_LAST) - { - ctrl_type = CTRL_DIGITAL_HANAFUDA; - control_info[field.player() * CTRL_COUNT + ctrl_type].type = "hanafuda"; - control_info[field.player() * CTRL_COUNT + ctrl_type].player = field.player() + 1; - control_info[field.player() * CTRL_COUNT + ctrl_type].nbuttons++; - } - else if (field.type() > IPT_GAMBLING_FIRST && field.type() < IPT_GAMBLING_LAST) - { - ctrl_type = CTRL_DIGITAL_GAMBLING; - control_info[field.player() * CTRL_COUNT + ctrl_type].type = "gambling"; - control_info[field.player() * CTRL_COUNT + ctrl_type].player = field.player() + 1; - control_info[field.player() * CTRL_COUNT + ctrl_type].nbuttons++; - } - break; - } - - if (ctrl_analog) - { - // get the analog stats - if (field.minval() != 0) - control_info[field.player() * CTRL_COUNT + ctrl_type].min = field.minval(); - if (field.maxval() != 0) - control_info[field.player() * CTRL_COUNT + ctrl_type].max = field.maxval(); - if (field.sensitivity() != 0) - control_info[field.player() * CTRL_COUNT + ctrl_type].sensitivity = field.sensitivity(); - if (field.delta() != 0) - control_info[field.player() * CTRL_COUNT + ctrl_type].keydelta = field.delta(); - if (field.analog_reverse() != 0) - control_info[field.player() * CTRL_COUNT + ctrl_type].reverse = TRUE; - } - } - } - - // Clean-up those entries, if any, where buttons were defined in a separate port than the actual controller they belong to. - // This is quite often the case, especially for arcades where controls can be easily mapped to separate input ports on PCB. - // If such situation would only happen for joystick, it would be possible to work it around by initializing differently - // ctrl_type above, but it is quite common among analog inputs as well (for instance, this is the tipical situation - // for lightguns) and therefore we really need this separate loop. - for (int i = 0; i < CTRL_PCOUNT; i++) - { - bool fix_done = FALSE; - for (int j = 1; j < CTRL_COUNT; j++) - if (control_info[i * CTRL_COUNT].type != nullptr && control_info[i * CTRL_COUNT + j].type != nullptr && !fix_done) - { - control_info[i * CTRL_COUNT + j].nbuttons += control_info[i * CTRL_COUNT].nbuttons; - control_info[i * CTRL_COUNT + j].maxbuttons = MAX(control_info[i * CTRL_COUNT + j].maxbuttons, control_info[i * CTRL_COUNT].maxbuttons); - - memset(&control_info[i * CTRL_COUNT], 0, sizeof(control_info[0])); - fix_done = TRUE; - } - } - - // Output the input info - // First basic info - fprintf(m_output, "\t\t<input"); - fprintf(m_output, " players=\"%d\"", nplayer); - if (ncoin != 0) - fprintf(m_output, " coins=\"%d\"", ncoin); - if (service) - fprintf(m_output, " service=\"yes\""); - if (tilt) - fprintf(m_output, " tilt=\"yes\""); - fprintf(m_output, ">\n"); - - // Then controller specific ones - for (auto & elem : control_info) - if (elem.type != nullptr) - { - //printf("type %s - player %d - buttons %d\n", elem.type, elem.player, elem.nbuttons); - if (elem.analog) - { - fprintf(m_output, "\t\t\t<control type=\"%s\"", xml_normalize_string(elem.type)); - if (nplayer > 1) - fprintf(m_output, " player=\"%d\"", elem.player); - if (elem.nbuttons > 0) - fprintf(m_output, " buttons=\"%d\"", strcmp(elem.type, "stick") ? elem.nbuttons : elem.maxbuttons); - if (elem.min != 0 || elem.max != 0) - { - fprintf(m_output, " minimum=\"%d\"", elem.min); - fprintf(m_output, " maximum=\"%d\"", elem.max); - } - if (elem.sensitivity != 0) - fprintf(m_output, " sensitivity=\"%d\"", elem.sensitivity); - if (elem.keydelta != 0) - fprintf(m_output, " keydelta=\"%d\"", elem.keydelta); - if (elem.reverse) - fprintf(m_output, " reverse=\"yes\""); - - fprintf(m_output, "/>\n"); - } - else - { - if (elem.helper[1] == 0 && elem.helper[2] != 0) { elem.helper[1] = elem.helper[2]; elem.helper[2] = 0; } - if (elem.helper[0] == 0 && elem.helper[1] != 0) { elem.helper[0] = elem.helper[1]; elem.helper[1] = 0; } - if (elem.helper[1] == 0 && elem.helper[2] != 0) { elem.helper[1] = elem.helper[2]; elem.helper[2] = 0; } - const char *joys = (elem.helper[2] != 0) ? "triple" : (elem.helper[1] != 0) ? "double" : ""; - fprintf(m_output, "\t\t\t<control type=\"%s%s\"", joys, xml_normalize_string(elem.type)); - if (nplayer > 1) - fprintf(m_output, " player=\"%d\"", elem.player); - if (elem.nbuttons > 0) - fprintf(m_output, " buttons=\"%d\"", strcmp(elem.type, "joy") ? elem.nbuttons : elem.maxbuttons); - for (int lp = 0; lp < 3 && elem.helper[lp] != 0; lp++) - { - const char *plural = (lp==2) ? "3" : (lp==1) ? "2" : ""; - const char *ways; - std::string helper; - switch (elem.helper[lp] & (DIR_UP | DIR_DOWN | DIR_LEFT | DIR_RIGHT)) - { - case DIR_UP | DIR_DOWN | DIR_LEFT | DIR_RIGHT: - helper = string_format("%d", (elem.ways == 0) ? 8 : elem.ways); - ways = helper.c_str(); - break; - case DIR_LEFT | DIR_RIGHT: - ways = "2"; - break; - case DIR_UP | DIR_DOWN: - ways = "vertical2"; - break; - case DIR_UP: - case DIR_DOWN: - case DIR_LEFT: - case DIR_RIGHT: - ways = "1"; - break; - case DIR_UP | DIR_DOWN | DIR_LEFT: - case DIR_UP | DIR_DOWN | DIR_RIGHT: - case DIR_UP | DIR_LEFT | DIR_RIGHT: - case DIR_DOWN | DIR_LEFT | DIR_RIGHT: - ways = (elem.ways == 4) ? "3 (half4)" : "5 (half8)"; - break; - default: - ways = "strange2"; - break; - } - fprintf(m_output, " ways%s=\"%s\"", plural, ways); - } - fprintf(m_output, "/>\n"); - } - } - - fprintf(m_output, "\t\t</input>\n"); + ncoin = MAX(ncoin, field.type() - IPT_COIN1 + 1); + break; + + // track presence of keypads and keyboards + case IPT_KEYPAD: + ctrl_type = CTRL_DIGITAL_KEYPAD; + control_info[field.player() * CTRL_COUNT + ctrl_type].type = "keypad"; + control_info[field.player() * CTRL_COUNT + ctrl_type].player = field.player() + 1; + control_info[field.player() * CTRL_COUNT + ctrl_type].nbuttons++; + break; + + case IPT_KEYBOARD: + ctrl_type = CTRL_DIGITAL_KEYBOARD; + control_info[field.player() * CTRL_COUNT + ctrl_type].type = "keyboard"; + control_info[field.player() * CTRL_COUNT + ctrl_type].player = field.player() + 1; + control_info[field.player() * CTRL_COUNT + ctrl_type].nbuttons++; + break; + + // additional types + case IPT_SERVICE: + service = true; + break; + + case IPT_TILT: + tilt = true; + break; + + default: + if (field.type() > IPT_MAHJONG_FIRST && field.type() < IPT_MAHJONG_LAST) + { + ctrl_type = CTRL_DIGITAL_MAHJONG; + control_info[field.player() * CTRL_COUNT + ctrl_type].type = "mahjong"; + control_info[field.player() * CTRL_COUNT + ctrl_type].player = field.player() + 1; + control_info[field.player() * CTRL_COUNT + ctrl_type].nbuttons++; + } + else if (field.type() > IPT_HANAFUDA_FIRST && field.type() < IPT_HANAFUDA_LAST) + { + ctrl_type = CTRL_DIGITAL_HANAFUDA; + control_info[field.player() * CTRL_COUNT + ctrl_type].type = "hanafuda"; + control_info[field.player() * CTRL_COUNT + ctrl_type].player = field.player() + 1; + control_info[field.player() * CTRL_COUNT + ctrl_type].nbuttons++; + } + else if (field.type() > IPT_GAMBLING_FIRST && field.type() < IPT_GAMBLING_LAST) + { + ctrl_type = CTRL_DIGITAL_GAMBLING; + control_info[field.player() * CTRL_COUNT + ctrl_type].type = "gambling"; + control_info[field.player() * CTRL_COUNT + ctrl_type].player = field.player() + 1; + control_info[field.player() * CTRL_COUNT + ctrl_type].nbuttons++; + } + break; + } + + if (ctrl_analog) + { + // get the analog stats + if (field.minval() != 0) + control_info[field.player() * CTRL_COUNT + ctrl_type].min = field.minval(); + if (field.maxval() != 0) + control_info[field.player() * CTRL_COUNT + ctrl_type].max = field.maxval(); + if (field.sensitivity() != 0) + control_info[field.player() * CTRL_COUNT + ctrl_type].sensitivity = field.sensitivity(); + if (field.delta() != 0) + control_info[field.player() * CTRL_COUNT + ctrl_type].keydelta = field.delta(); + if (field.analog_reverse() != 0) + control_info[field.player() * CTRL_COUNT + ctrl_type].reverse = TRUE; + } + } + } + + // Clean-up those entries, if any, where buttons were defined in a separate port than the actual controller they belong to. + // This is quite often the case, especially for arcades where controls can be easily mapped to separate input ports on PCB. + // If such situation would only happen for joystick, it would be possible to work it around by initializing differently + // ctrl_type above, but it is quite common among analog inputs as well (for instance, this is the tipical situation + // for lightguns) and therefore we really need this separate loop. + for (int i = 0; i < CTRL_PCOUNT; i++) + { + bool fix_done = FALSE; + for (int j = 1; j < CTRL_COUNT; j++) + if (control_info[i * CTRL_COUNT].type != nullptr && control_info[i * CTRL_COUNT + j].type != nullptr && !fix_done) + { + control_info[i * CTRL_COUNT + j].nbuttons += control_info[i * CTRL_COUNT].nbuttons; + control_info[i * CTRL_COUNT + j].maxbuttons = MAX(control_info[i * CTRL_COUNT + j].maxbuttons, control_info[i * CTRL_COUNT].maxbuttons); + + memset(&control_info[i * CTRL_COUNT], 0, sizeof(control_info[0])); + fix_done = TRUE; + } + } + + // Output the input info + // First basic info + fprintf(m_output, "\t\t<input"); + fprintf(m_output, " players=\"%d\"", nplayer); + if (ncoin != 0) + fprintf(m_output, " coins=\"%d\"", ncoin); + if (service) + fprintf(m_output, " service=\"yes\""); + if (tilt) + fprintf(m_output, " tilt=\"yes\""); + fprintf(m_output, ">\n"); + + // Then controller specific ones + for (auto & elem : control_info) + if (elem.type != nullptr) + { + //printf("type %s - player %d - buttons %d\n", elem.type, elem.player, elem.nbuttons); + if (elem.analog) + { + fprintf(m_output, "\t\t\t<control type=\"%s\"", xml_normalize_string(elem.type)); + if (nplayer > 1) + fprintf(m_output, " player=\"%d\"", elem.player); + if (elem.nbuttons > 0) + fprintf(m_output, " buttons=\"%d\"", strcmp(elem.type, "stick") ? elem.nbuttons : elem.maxbuttons); + if (elem.min != 0 || elem.max != 0) + { + fprintf(m_output, " minimum=\"%d\"", elem.min); + fprintf(m_output, " maximum=\"%d\"", elem.max); + } + if (elem.sensitivity != 0) + fprintf(m_output, " sensitivity=\"%d\"", elem.sensitivity); + if (elem.keydelta != 0) + fprintf(m_output, " keydelta=\"%d\"", elem.keydelta); + if (elem.reverse) + fprintf(m_output, " reverse=\"yes\""); + + fprintf(m_output, "/>\n"); + } + else + { + if (elem.helper[1] == 0 && elem.helper[2] != 0) { elem.helper[1] = elem.helper[2]; elem.helper[2] = 0; } + if (elem.helper[0] == 0 && elem.helper[1] != 0) { elem.helper[0] = elem.helper[1]; elem.helper[1] = 0; } + if (elem.helper[1] == 0 && elem.helper[2] != 0) { elem.helper[1] = elem.helper[2]; elem.helper[2] = 0; } + const char *joys = (elem.helper[2] != 0) ? "triple" : (elem.helper[1] != 0) ? "double" : ""; + fprintf(m_output, "\t\t\t<control type=\"%s%s\"", joys, xml_normalize_string(elem.type)); + if (nplayer > 1) + fprintf(m_output, " player=\"%d\"", elem.player); + if (elem.nbuttons > 0) + fprintf(m_output, " buttons=\"%d\"", strcmp(elem.type, "joy") ? elem.nbuttons : elem.maxbuttons); + for (int lp = 0; lp < 3 && elem.helper[lp] != 0; lp++) + { + const char *plural = (lp==2) ? "3" : (lp==1) ? "2" : ""; + const char *ways; + std::string helper; + switch (elem.helper[lp] & (DIR_UP | DIR_DOWN | DIR_LEFT | DIR_RIGHT)) + { + case DIR_UP | DIR_DOWN | DIR_LEFT | DIR_RIGHT: + helper = string_format("%d", (elem.ways == 0) ? 8 : elem.ways); + ways = helper.c_str(); + break; + case DIR_LEFT | DIR_RIGHT: + ways = "2"; + break; + case DIR_UP | DIR_DOWN: + ways = "vertical2"; + break; + case DIR_UP: + case DIR_DOWN: + case DIR_LEFT: + case DIR_RIGHT: + ways = "1"; + break; + case DIR_UP | DIR_DOWN | DIR_LEFT: + case DIR_UP | DIR_DOWN | DIR_RIGHT: + case DIR_UP | DIR_LEFT | DIR_RIGHT: + case DIR_DOWN | DIR_LEFT | DIR_RIGHT: + ways = (elem.ways == 4) ? "3 (half4)" : "5 (half8)"; + break; + default: + ways = "strange2"; + break; + } + fprintf(m_output, " ways%s=\"%s\"", plural, ways); + } + fprintf(m_output, "/>\n"); + } + } + + fprintf(m_output, "\t\t</input>\n"); } @@ -1446,10 +1445,10 @@ void info_xml_creator::output_images(device_t &device, const char *root_tag) // is this device available as media switch? if (!loadable) fprintf(m_output, " fixed_image=\"1\""); - - // is this device mandatory? - if (imagedev.must_be_loaded()) - fprintf(m_output, " mandatory=\"1\""); + + // is this device mandatory? + if (imagedev.must_be_loaded()) + fprintf(m_output, " mandatory=\"1\""); if (imagedev.image_interface() && imagedev.image_interface()[0]) fprintf(m_output, " interface=\"%s\"", xml_normalize_string(imagedev.image_interface())); @@ -1457,27 +1456,27 @@ void info_xml_creator::output_images(device_t &device, const char *root_tag) // close the XML tag fprintf(m_output, ">\n"); - if (loadable) - { - const char *name = imagedev.instance_name(); - const char *shortname = imagedev.brief_instance_name(); - - fprintf(m_output, "\t\t\t<instance"); - fprintf(m_output, " name=\"%s\"", xml_normalize_string(name)); - fprintf(m_output, " briefname=\"%s\"", xml_normalize_string(shortname)); - fprintf(m_output, "/>\n"); - - std::string extensions(imagedev.file_extensions()); - - char *ext = strtok((char *)extensions.c_str(), ","); - while (ext != nullptr) - { - fprintf(m_output, "\t\t\t<extension"); - fprintf(m_output, " name=\"%s\"", xml_normalize_string(ext)); - fprintf(m_output, "/>\n"); - ext = strtok(nullptr, ","); - } - } + if (loadable) + { + const char *name = imagedev.instance_name(); + const char *shortname = imagedev.brief_instance_name(); + + fprintf(m_output, "\t\t\t<instance"); + fprintf(m_output, " name=\"%s\"", xml_normalize_string(name)); + fprintf(m_output, " briefname=\"%s\"", xml_normalize_string(shortname)); + fprintf(m_output, "/>\n"); + + std::string extensions(imagedev.file_extensions()); + + char *ext = strtok((char *)extensions.c_str(), ","); + while (ext != nullptr) + { + fprintf(m_output, "\t\t\t<extension"); + fprintf(m_output, " name=\"%s\"", xml_normalize_string(ext)); + fprintf(m_output, "/>\n"); + ext = strtok(nullptr, ","); + } + } fprintf(m_output, "\t\t</device>\n"); } } diff --git a/src/frontend/mame/luaengine.cpp b/src/frontend/mame/luaengine.cpp index 72c36e3bd47..2d5d458bfff 100644 --- a/src/frontend/mame/luaengine.cpp +++ b/src/frontend/mame/luaengine.cpp @@ -1469,7 +1469,7 @@ int lua_engine::lua_screen::l_draw_line(lua_State *L) //------------------------------------------------- // draw_text - draw text on a screen container -// if x is a position, then y is a pixel position, otherwise x and y are screen size relative +// if x is a position, then y is a pixel position, otherwise x and y are screen size relative // -> manager:machine().screens[":screen"]:draw_text(x, y, message) //------------------------------------------------- @@ -2093,26 +2093,26 @@ int lua_engine::lua_machine::l_logerror(lua_State *L) std::string lua_engine::get_print_buffer(lua_State *L) { - int nargs = lua_gettop(L); - - const std::string sep = " "; - - std::ostringstream ss; - bool first = true; - - for (int i = 1; i <= nargs; i++) { - const char* c = lua_tostring(L, i); - const std::string str = c ? c : "<nil>"; - if (first) first = false; - else ss << sep; - ss << str; - } + int nargs = lua_gettop(L); + + const std::string sep = " "; + + std::ostringstream ss; + bool first = true; + + for (int i = 1; i <= nargs; i++) { + const char* c = lua_tostring(L, i); + const std::string str = c ? c : "<nil>"; + if (first) first = false; + else ss << sep; + ss << str; + } return ss.str(); } int lua_engine::l_osd_printf_verbose(lua_State *L) { - osd_printf_verbose("%s\n",get_print_buffer(L).c_str()); + osd_printf_verbose("%s\n",get_print_buffer(L).c_str()); return 0; } diff --git a/src/frontend/mame/mame.cpp b/src/frontend/mame/mame.cpp index c162e5ff12a..782645998eb 100644 --- a/src/frontend/mame/mame.cpp +++ b/src/frontend/mame/mame.cpp @@ -54,7 +54,7 @@ mame_machine_manager::mame_machine_manager(emu_options &options,osd_interface &o m_lua(global_alloc(lua_engine)), m_new_driver_pending(nullptr), m_firstrun(true), - m_autoboot_timer(nullptr) + m_autoboot_timer(nullptr) { } @@ -263,17 +263,17 @@ void mame_machine_manager::reset() // setup autoboot if needed m_autoboot_timer->adjust(attotime(options().autoboot_delay(),0),0); } - + ui_manager* mame_machine_manager::create_ui(running_machine& machine) { m_ui = std::make_unique<mame_ui_manager>(machine); m_ui->init(); machine.add_notifier(MACHINE_NOTIFY_RESET, machine_notify_delegate(FUNC(mame_machine_manager::reset), this)); - + // start the inifile manager m_inifile = std::make_unique<inifile_manager>(machine); - + m_ui->set_startup_text("Initializing...", true); // allocate autoboot timer @@ -288,8 +288,8 @@ ui_manager* mame_machine_manager::create_ui(running_machine& machine) return m_ui.get(); } -void mame_machine_manager::create_custom(running_machine& machine) -{ +void mame_machine_manager::create_custom(running_machine& machine) +{ // set up the cheat engine m_cheat = std::make_unique<cheat_manager>(machine); } @@ -335,4 +335,4 @@ void emulator_info::periodic_check() bool emulator_info::frame_hook() { return mame_machine_manager::instance()->lua()->frame_hook(); -}
\ No newline at end of file +} diff --git a/src/frontend/mame/mame.h b/src/frontend/mame/mame.h index 8cf1a29d50b..cb7fd1c7ed6 100644 --- a/src/frontend/mame/mame.h +++ b/src/frontend/mame/mame.h @@ -46,16 +46,16 @@ public: lua_engine *lua() { return m_lua; } virtual void update_machine() override; - + void reset(); TIMER_CALLBACK_MEMBER(autoboot_callback); - + virtual ui_manager* create_ui(running_machine& machine) override; virtual void create_custom(running_machine& machine) override; virtual void ui_initialize(running_machine& machine) override; - + /* execute as configured by the OPTION_SYSTEMNAME option on the specified options */ int execute(); void start_luaengine(); diff --git a/src/frontend/mame/mameopts.cpp b/src/frontend/mame/mameopts.cpp index a0754f4cfd5..9d894709d58 100644 --- a/src/frontend/mame/mameopts.cpp +++ b/src/frontend/mame/mameopts.cpp @@ -423,4 +423,3 @@ bool mame_options::parse_one_ini(emu_options &options, const char *basename, int return result; } - diff --git a/src/frontend/mame/ui/filemngr.cpp b/src/frontend/mame/ui/filemngr.cpp index a0400e234bb..685b91869a0 100644 --- a/src/frontend/mame/ui/filemngr.cpp +++ b/src/frontend/mame/ui/filemngr.cpp @@ -180,13 +180,12 @@ void ui_menu_file_manager::handle() selected_device = (device_image_interface *) event->itemref; if (selected_device != nullptr) { - m_curr_selected = TRUE; floppy_image_device *floppy_device = dynamic_cast<floppy_image_device *>(selected_device); if (floppy_device != nullptr) { ui_menu::stack_push(global_alloc_clear<ui_menu_control_floppy_image>(machine(), container, floppy_device)); - } + } else { ui_menu::stack_push(global_alloc_clear<ui_menu_control_device_image>(machine(), container, selected_device)); diff --git a/src/frontend/mame/ui/floppycntrl.cpp b/src/frontend/mame/ui/floppycntrl.cpp index 05a4e03c825..b19f9b0d256 100644 --- a/src/frontend/mame/ui/floppycntrl.cpp +++ b/src/frontend/mame/ui/floppycntrl.cpp @@ -83,7 +83,7 @@ void ui_menu_control_floppy_image::hook_load(std::string filename, bool softlist osd_file::error filerr; std::string tmp_path; util::core_file::ptr tmp_file; - // attempt to open the file for writing but *without* create + // attempt to open the file for writing but *without* create filerr = util::zippath_fopen(filename.c_str(), OPEN_FLAG_READ | OPEN_FLAG_WRITE, tmp_file, tmp_path); if(filerr == osd_file::error::NONE) tmp_file.reset(); @@ -167,4 +167,4 @@ void ui_menu_control_floppy_image::handle() default: ui_menu_control_device_image::handle(); } -}
\ No newline at end of file +} diff --git a/src/frontend/mame/ui/floppycntrl.h b/src/frontend/mame/ui/floppycntrl.h index 08ac1e85d68..f9fe4307e2e 100644 --- a/src/frontend/mame/ui/floppycntrl.h +++ b/src/frontend/mame/ui/floppycntrl.h @@ -33,4 +33,4 @@ protected: }; -#endif /* __UI_FLOPPY_IMAGE_H__ */
\ No newline at end of file +#endif /* __UI_FLOPPY_IMAGE_H__ */ diff --git a/src/frontend/mame/ui/menu.cpp b/src/frontend/mame/ui/menu.cpp index c26d22562aa..9f89fdfef2b 100644 --- a/src/frontend/mame/ui/menu.cpp +++ b/src/frontend/mame/ui/menu.cpp @@ -557,37 +557,37 @@ void ui_menu::draw(UINT32 flags, float origx0, float origy0) float visible_left = (1.0f - visible_width) * 0.5f; float visible_top = (1.0f - (visible_main_menu_height + visible_extra_menu_height)) * 0.5f; -/* float visible_left; - float visible_top; - if (origx0 == 0.0f && origy0 == 0.0f) - { - visible_left = (1.0f - visible_width) * 0.5f; - visible_top = (1.0f - (visible_main_menu_height + visible_extra_menu_height)) * 0.5f; - } - else - { - INT32 mouse_target_x, mouse_target_y; - float m_x, m_y; - render_target *mouse_target = machine().ui_input().find_mouse(&mouse_target_x, &mouse_target_y, &mouse_button); - if (mouse_target != nullptr) - { - if (mouse_target->map_point_container(origx0, origy0, *container, m_x, m_y)) - { - visible_left = m_x; - visible_top = m_y; - } - else - { - visible_left = (1.0f - visible_width) * 0.5f; - visible_top = (1.0f - (visible_main_menu_height + visible_extra_menu_height)) * 0.5f; - } - } - else - { - visible_left = (1.0f - visible_width) * 0.5f; - visible_top = (1.0f - (visible_main_menu_height + visible_extra_menu_height)) * 0.5f; - } - } +/* float visible_left; + float visible_top; + if (origx0 == 0.0f && origy0 == 0.0f) + { + visible_left = (1.0f - visible_width) * 0.5f; + visible_top = (1.0f - (visible_main_menu_height + visible_extra_menu_height)) * 0.5f; + } + else + { + INT32 mouse_target_x, mouse_target_y; + float m_x, m_y; + render_target *mouse_target = machine().ui_input().find_mouse(&mouse_target_x, &mouse_target_y, &mouse_button); + if (mouse_target != nullptr) + { + if (mouse_target->map_point_container(origx0, origy0, *container, m_x, m_y)) + { + visible_left = m_x; + visible_top = m_y; + } + else + { + visible_left = (1.0f - visible_width) * 0.5f; + visible_top = (1.0f - (visible_main_menu_height + visible_extra_menu_height)) * 0.5f; + } + } + else + { + visible_left = (1.0f - visible_width) * 0.5f; + visible_top = (1.0f - (visible_main_menu_height + visible_extra_menu_height)) * 0.5f; + } + } */ // if the menu is at the bottom of the extra, adjust visible_top += customtop; diff --git a/src/frontend/mame/ui/menu.h b/src/frontend/mame/ui/menu.h index 39458546397..4741751614f 100644 --- a/src/frontend/mame/ui/menu.h +++ b/src/frontend/mame/ui/menu.h @@ -59,11 +59,11 @@ enum ui_menu_reset_options // menu-related events struct ui_menu_event { - void *itemref; // reference for the selected item - ui_menu_item_type type; // item type (eventually will go away when itemref is proper ui_menu_item class rather than void*) - int iptkey; // one of the IPT_* values from inptport.h - unicode_char unichar; // unicode character if iptkey == IPT_SPECIAL - render_bounds mouse; // mouse position if iptkey == IPT_CUSTOM + void *itemref; // reference for the selected item + ui_menu_item_type type; // item type (eventually will go away when itemref is proper ui_menu_item class rather than void*) + int iptkey; // one of the IPT_* values from inptport.h + unicode_char unichar; // unicode character if iptkey == IPT_SPECIAL + render_bounds mouse; // mouse position if iptkey == IPT_CUSTOM }; struct ui_menu_pool diff --git a/src/frontend/mame/ui/miscmenu.cpp b/src/frontend/mame/ui/miscmenu.cpp index 38a2d944533..b997efd6f17 100644 --- a/src/frontend/mame/ui/miscmenu.cpp +++ b/src/frontend/mame/ui/miscmenu.cpp @@ -824,7 +824,7 @@ void ui_menu_machine_configure::custom_render(void *selectedref, float top, floa // compute our bounds float x1 = 0.5f - 0.5f * maxwidth; -// float x1 = origx1; +// float x1 = origx1; float x2 = x1 + maxwidth; float y1 = origy1 - top; float y2 = origy1 - UI_BOX_TB_BORDER; @@ -856,7 +856,7 @@ void ui_menu_machine_configure::setup_bios() for (const rom_entry *rom = m_drv->rom; !ROMENTRY_ISEND(rom); ++rom) if (ROMENTRY_ISDEFAULT_BIOS(rom)) default_name = ROM_GETNAME(rom); - + int bios_count = 0; for (const rom_entry *rom = m_drv->rom; !ROMENTRY_ISEND(rom); ++rom) { diff --git a/src/frontend/mame/ui/selgame.cpp b/src/frontend/mame/ui/selgame.cpp index 25411715817..9af54557662 100644 --- a/src/frontend/mame/ui/selgame.cpp +++ b/src/frontend/mame/ui/selgame.cpp @@ -1018,14 +1018,14 @@ void ui_menu_select_game::inkey_select(const ui_menu_event *m_event) // special case for configure options if ((FPTR)driver == CONF_OPTS) ui_menu::stack_push(global_alloc_clear<ui_menu_game_options>(machine(), container)); - + // special case for configure machine else if ((FPTR)driver == CONF_MACHINE) { - if (m_prev_selected != nullptr) - ui_menu::stack_push(global_alloc_clear<ui_menu_machine_configure>(machine(), container, (const game_driver *)m_prev_selected)); - else - return; + if (m_prev_selected != nullptr) + ui_menu::stack_push(global_alloc_clear<ui_menu_machine_configure>(machine(), container, (const game_driver *)m_prev_selected)); + else + return; } // special case for configure plugins diff --git a/src/frontend/mame/ui/sliders.cpp b/src/frontend/mame/ui/sliders.cpp index 75d40c2ace3..72fe2398745 100644 --- a/src/frontend/mame/ui/sliders.cpp +++ b/src/frontend/mame/ui/sliders.cpp @@ -142,21 +142,21 @@ void ui_menu_sliders::populate() std::vector<ui_menu_item> ui_sliders = mame_machine_manager::instance()->ui().get_slider_list(); for (ui_menu_item item : ui_sliders) { - if (item.type == ui_menu_item_type::SLIDER) - { - slider_state* slider = reinterpret_cast<slider_state *>(item.ref); - INT32 curval = (*slider->update)(machine(), slider->arg, slider->id, &tempstring, SLIDER_NOCHANGE); - UINT32 flags = 0; - if (curval > slider->minval) - flags |= MENU_FLAG_LEFT_ARROW; - if (curval < slider->maxval) - flags |= MENU_FLAG_RIGHT_ARROW; - item_append(slider->description, tempstring.c_str(), flags, (void *)slider, ui_menu_item_type::SLIDER); - } - else - { - item_append(item); - } + if (item.type == ui_menu_item_type::SLIDER) + { + slider_state* slider = reinterpret_cast<slider_state *>(item.ref); + INT32 curval = (*slider->update)(machine(), slider->arg, slider->id, &tempstring, SLIDER_NOCHANGE); + UINT32 flags = 0; + if (curval > slider->minval) + flags |= MENU_FLAG_LEFT_ARROW; + if (curval < slider->maxval) + flags |= MENU_FLAG_RIGHT_ARROW; + item_append(slider->description, tempstring.c_str(), flags, (void *)slider, ui_menu_item_type::SLIDER); + } + else + { + item_append(item); + } } item_append(ui_menu_item_type::SEPARATOR); @@ -165,21 +165,21 @@ void ui_menu_sliders::populate() std::vector<ui_menu_item> osd_sliders = machine().osd().get_slider_list(); for (ui_menu_item item : osd_sliders) { - if (item.type == ui_menu_item_type::SLIDER) - { - slider_state* slider = reinterpret_cast<slider_state *>(item.ref); - INT32 curval = (*slider->update)(machine(), slider->arg, slider->id, &tempstring, SLIDER_NOCHANGE); - UINT32 flags = 0; - if (curval > slider->minval) - flags |= MENU_FLAG_LEFT_ARROW; - if (curval < slider->maxval) - flags |= MENU_FLAG_RIGHT_ARROW; - item_append(slider->description, tempstring.c_str(), flags, (void *)slider, ui_menu_item_type::SLIDER); - } - else - { - item_append(item); - } + if (item.type == ui_menu_item_type::SLIDER) + { + slider_state* slider = reinterpret_cast<slider_state *>(item.ref); + INT32 curval = (*slider->update)(machine(), slider->arg, slider->id, &tempstring, SLIDER_NOCHANGE); + UINT32 flags = 0; + if (curval > slider->minval) + flags |= MENU_FLAG_LEFT_ARROW; + if (curval < slider->maxval) + flags |= MENU_FLAG_RIGHT_ARROW; + item_append(slider->description, tempstring.c_str(), flags, (void *)slider, ui_menu_item_type::SLIDER); + } + else + { + item_append(item); + } } custombottom = 2.0f * mame_machine_manager::instance()->ui().get_line_height() + 2.0f * UI_BOX_TB_BORDER; diff --git a/src/frontend/mame/ui/submenu.h b/src/frontend/mame/ui/submenu.h index 8168ab4bb7a..535de308cd2 100644 --- a/src/frontend/mame/ui/submenu.h +++ b/src/frontend/mame/ui/submenu.h @@ -153,8 +153,8 @@ static std::vector<ui_submenu::option> video_submenu_options = { }; //static std::vector<ui_submenu::option> export_submenu_options = { -// { ui_submenu::COMMAND, __("Export XML format (like -listxml)"), "exportxml" }, -// { ui_submenu::COMMAND, __("Export TXT format (like -listfull)"), "exporttxt" }, +// { ui_submenu::COMMAND, __("Export XML format (like -listxml)"), "exportxml" }, +// { ui_submenu::COMMAND, __("Export TXT format (like -listfull)"), "exporttxt" }, //}; #endif /* __UI_SUBMENU_H__ */ diff --git a/src/frontend/mame/ui/ui.cpp b/src/frontend/mame/ui/ui.cpp index c075c884d1b..031013a5a2d 100644 --- a/src/frontend/mame/ui/ui.cpp +++ b/src/frontend/mame/ui/ui.cpp @@ -267,18 +267,18 @@ static const UINT32 mouse_bitmap[32*32] = //------------------------------------------------- mame_ui_manager::mame_ui_manager(running_machine &machine) - : ui_manager(machine), - m_font(nullptr), - m_handler_callback(nullptr), - m_handler_param(0), - m_single_step(false), - m_showfps(false), - m_showfps_end(0), - m_show_profiler(false), - m_popup_text_end(0), - m_mouse_arrow_texture(nullptr), - m_mouse_show(false), - m_load_save_hold(false) + : ui_manager(machine), + m_font(nullptr), + m_handler_callback(nullptr), + m_handler_param(0), + m_single_step(false), + m_showfps(false), + m_showfps_end(0), + m_show_profiler(false), + m_popup_text_end(0), + m_mouse_arrow_texture(nullptr), + m_mouse_show(false), + m_load_save_hold(false) { } @@ -2068,17 +2068,17 @@ std::vector<ui_menu_item> mame_ui_manager::slider_init(running_machine &machine) } #endif - std::vector<ui_menu_item> items; - for (slider_state *slider : sliders) - { - ui_menu_item item; - item.text = slider->description; - item.subtext = ""; - item.flags = 0; - item.ref = slider; - item.type = ui_menu_item_type::SLIDER; - items.push_back(item); - } + std::vector<ui_menu_item> items; + for (slider_state *slider : sliders) + { + ui_menu_item item; + item.text = slider->description; + item.subtext = ""; + item.flags = 0; + item.ref = slider; + item.type = ui_menu_item_type::SLIDER; + items.push_back(item); + } return items; } @@ -2734,5 +2734,5 @@ void mame_ui_manager::popup_time_string(int seconds, std::string message) messagebox_backcolor = UI_BACKGROUND_COLOR; // set a timer - m_popup_text_end = osd_ticks() + osd_ticks_per_second() * seconds; + m_popup_text_end = osd_ticks() + osd_ticks_per_second() * seconds; } diff --git a/src/frontend/mame/ui/ui.h b/src/frontend/mame/ui/ui.h index b45d20c6e63..29cad32fefd 100644 --- a/src/frontend/mame/ui/ui.h +++ b/src/frontend/mame/ui/ui.h @@ -155,7 +155,7 @@ public: std::string &game_info_astring(std::string &str); // slider controls - std::vector<ui_menu_item>& get_slider_list(void); + std::vector<ui_menu_item>& get_slider_list(void); // other void process_natural_keyboard(); @@ -166,7 +166,7 @@ public: // draw an outlined box with given line color and filled with a texture void draw_textured_box(render_container *container, float x0, float y0, float x1, float y1, rgb_t backcolor, rgb_t linecolor, render_texture *texture = nullptr, UINT32 flags = PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); virtual void popup_time_string(int seconds, std::string message) override; - + virtual void image_display(const device_type &type, device_image_interface *image) override; private: // instance variables |