Ejemplo n.º 1
0
/**
 * Show and process the joystick dialog.
 */
void Dialog_JoyDlg(void)
{
	int but;

	SDLGui_CenterDlg(joydlg);

	joydlg[DLGJOY_MSJY].state &= ~SG_SELECTED;
	joydlg[DLGJOY_JYJY].state &= ~SG_SELECTED;
	joydlg[DLGJOY_MSMS].state &= ~SG_SELECTED;

	int j0 = currprefs.jports[0].id/ JSEM_JOYS; 
	int j1 = currprefs.jports[1].id/ JSEM_JOYS;

	if (j0 == 2 && j1 == 1) { //mouse & joy-1
		joydlg[DLGJOY_MSJY].state |= SG_SELECTED;
	}
	else if (j0 == 1 && j1 == 1) { //joy-2 & joy-1
		joydlg[DLGJOY_JYJY].state |= SG_SELECTED;
	}
	else {
		joydlg[DLGJOY_MSMS].state |= SG_SELECTED;
	}

	do
	{
    		but = SDLGui_DoDialog(joydlg, NULL);

 		gui_poll_events();
	}
	while (but != DLGJOY_EXIT && but != SDLGUI_QUIT
	       && but != SDLGUI_ERROR && !bQuitProgram);
	

	if(joydlg[DLGJOY_MSJY].state & SG_SELECTED){
		changed_prefs.jports[0].id = JSEM_MICE;
		changed_prefs.jports[1].id = JSEM_JOYS;
		changed_prefs.mouse_settings[1]->enabled = 0;
	}
	else if(joydlg[DLGJOY_JYJY].state & SG_SELECTED){
		changed_prefs.jports[0].id = JSEM_JOYS + 1;
		changed_prefs.jports[1].id = JSEM_JOYS;
		changed_prefs.mouse_settings[1]->enabled = 0;
	}
	else if(joydlg[DLGJOY_MSMS].state & SG_SELECTED){
		changed_prefs.jports[0].id = JSEM_MICE;
		changed_prefs.jports[1].id = JSEM_MICE + 1;
		changed_prefs.mouse_settings[1]->enabled = 1;
	}

	inputdevice_config_change();
	check_prefs_changed_custom();


}
Ejemplo n.º 2
0
static void values_from_dialog(int changedport, bool reset)
{
	int i;
	int changed = 0;
	int prevport;

  if(reset)
    inputdevice_compa_clear (&workprefs, changedport);

	for (i = 0; i < MAX_JPORTS; i++) {
		int prevport = workprefs.jports[i].id;
		int max = JSEM_LASTKBD + inputdevice_get_device_total (IDTYPE_JOYSTICK);
		if (i < 2)
			max += inputdevice_get_device_total (IDTYPE_MOUSE);
    int id = cboPorts[i]->getSelected() - 1;
		if (id < 0) {
			workprefs.jports[i].id = JPORT_NONE;
		} else if (id >= max) {
			workprefs.jports[i].id = JPORT_NONE;
		} else if (id < JSEM_LASTKBD) {
			workprefs.jports[i].id = JSEM_KBDLAYOUT + id;
		} else if (id >= JSEM_LASTKBD + inputdevice_get_device_total (IDTYPE_JOYSTICK)) {
			workprefs.jports[i].id = JSEM_MICE + id - inputdevice_get_device_total (IDTYPE_JOYSTICK) - JSEM_LASTKBD;
		} else {
			workprefs.jports[i].id = JSEM_JOYS + id - JSEM_LASTKBD;
		}

		if (workprefs.jports[i].id != prevport)
			changed = 1;

	  if (i >= 2)
	    continue;

		if(cboPortModes[i] != NULL)
		  workprefs.jports[i].mode = inputmode_val[cboPortModes[i]->getSelected()];
		if(cboAutofires[i] != NULL)
		  workprefs.jports[i].autofire = cboAutofires[i]->getSelected();
	}

  if (changed)
    inputdevice_validate_jports (&workprefs, changedport, NULL);        

	RefreshPanelGamePort();

  inputdevice_config_change();
  if(reset)
    inputdevice_forget_unplugged_device(changedport);
}
Ejemplo n.º 3
0
// Handler for the XM_NOTIFY message
HRESULT COptionsScene::OnNotifyPress( HXUIOBJ hObjPressed, BOOL& bHandled )
{
 
	
	switch(m_GroupJoy.GetCurSel())
	{
		case 0:
			memset (&changed_prefs.jports[0], 0, sizeof (struct jport));
			memset (&changed_prefs.jports[1], 0, sizeof (struct jport));
			changed_prefs.jports[0].id  = JSEM_MICE;
			changed_prefs.jports[1].id  = JSEM_JOYS;
			changed_prefs.mouse_settings[0]->enabled = 1;
			config_changed = 1;
			inputdevice_config_change();			 
			break;
		case 1:
			memset (&changed_prefs.jports[0], 0, sizeof (struct jport));
			memset (&changed_prefs.jports[1], 0, sizeof (struct jport));			
			changed_prefs.jports[0].id  = JSEM_JOYS + 1;
			changed_prefs.jports[1].id  = JSEM_JOYS;
			changed_prefs.mouse_settings[1]->enabled = 0;	
			config_changed = 1;
			inputdevice_config_change();			 
			break;
		case 2:		 
			memset (&changed_prefs.jports[0], 0, sizeof (struct jport));
			memset (&changed_prefs.jports[1], 0, sizeof (struct jport));
			changed_prefs.jports[0].id  = JSEM_MICE;
			changed_prefs.jports[1].id  = JSEM_MICE + 1;
			changed_prefs.mouse_settings[0]->enabled = 0;			 		 
			changed_prefs.mouse_settings[1]->enabled = 1;		
			config_changed = 1;
			inputdevice_config_change();						 
			break;	 
 
	}

  
	 
	
	switch(m_GroupCPU.GetCurSel())
	{
		case 0:
			changed_prefs.cpu_model = 68000;		 			 
			check_prefs_changed_cpu();
			break;
		case 1:
			changed_prefs.cpu_model = 68010;			 			 
			check_prefs_changed_cpu();
			break;
		case 2:
			changed_prefs.cpu_model = 68020;		 
			check_prefs_changed_cpu();
			changed_prefs.address_space_24 = 0;			 
			break;
		case 3:
			changed_prefs.cpu_model = 68020;			 
			check_prefs_changed_cpu();
			changed_prefs.address_space_24 = 1;			 
			break;
		case 4:
			changed_prefs.cpu_model = 68030;	
			check_prefs_changed_cpu();
			changed_prefs.address_space_24 = 0;			 
			break;
		case 5:
			changed_prefs.cpu_model = 68040;	
			check_prefs_changed_cpu();
			changed_prefs.address_space_24 = 0;			 
			break;		

	}

	switch (m_GroupChipset.GetCurSel())
	{
	case 0:
		changed_prefs.chipset_mask = 0;
		break;
	case 1:
		changed_prefs.chipset_mask = CSMASK_ECS_AGNUS;
		break;
	case 2:
		changed_prefs.chipset_mask = CSMASK_ECS_DENISE;
		break;
	case 3:
		changed_prefs.chipset_mask = (CSMASK_ECS_AGNUS | CSMASK_ECS_DENISE);
		break;
	case 4:
		changed_prefs.chipset_mask = (CSMASK_AGA | CSMASK_ECS_AGNUS | CSMASK_ECS_DENISE);
		break;
	}
 

	switch(m_GroupChipMem.GetCurSel())
	{
		case 0:
			m_GroupFast.SetEnable(true);
			changed_prefs.chipmem_size = 0x80000; 
			changed_prefs.bogomem_size = 0x0; 
			memory_reset();
			break;
		case 1:
			m_GroupFast.SetEnable(true);
			changed_prefs.chipmem_size = 0x100000; 
			changed_prefs.bogomem_size = 0x0; 
			memory_reset();
			break;
		case 2:
			m_GroupFast.SetEnable(true);
			changed_prefs.chipmem_size = 0x200000; 
			changed_prefs.bogomem_size = 0x0; 
			memory_reset();
			break;
		case 3:
			m_GroupFast.SetCurSel(0);
			m_GroupFast.SetEnable(false);
			changed_prefs.fastmem_size = 0x00;
			changed_prefs.chipmem_size = 0x400000; 
			changed_prefs.bogomem_size = 0x0; 
			memory_reset();
			break;
		case 4:
			m_GroupFast.SetCurSel(0);
			m_GroupFast.SetEnable(false);
			changed_prefs.chipmem_size = 0x800000; 
			changed_prefs.fastmem_size = 0x00;
			changed_prefs.bogomem_size = 0x0; 
			memory_reset();
			break;
	}


	switch (m_GroupFast.GetCurSel())
	{
		case 0x00000000:
			changed_prefs.fastmem_size = 0x00000000; 
			memory_reset(); 
			break;
		case 0x100000:
			changed_prefs.fastmem_size = 0x100000; 
			memory_reset(); 
			break;
		case 0x200000:
			changed_prefs.fastmem_size = 0x200000; 
			memory_reset(); 
			break;
		case 0x400000:
			changed_prefs.fastmem_size = 0x400000; 
			memory_reset(); 
			break;
		case 0x800000:
			changed_prefs.fastmem_size = 0x800000; 
			memory_reset(); 
			break;
	}



	switch(m_GroupBogoMem.GetCurSel())
	{
		case 0:			 
			changed_prefs.bogomem_size = 0x0; 
			memory_reset();
			break;
		case 1:			 
			changed_prefs.bogomem_size = 0x80000; 
			memory_reset();
			break;
		case 2:			 
			changed_prefs.bogomem_size =  0x100000; 
			memory_reset();
			break;
		case 3:			 
			changed_prefs.bogomem_size =  0x180000; 
			memory_reset();
			break;
		case 4:			 
			changed_prefs.bogomem_size = 0x1c0000; 
			memory_reset();
			break;
	}

	switch(m_GroupFast.GetCurSel())
	{
		case 0:
			changed_prefs.fastmem_size = 0x00;		 
			memory_reset();
			break;
		case 1:
			changed_prefs.fastmem_size = 0x100000;			 
			memory_reset();
			break;
		case 2:
			changed_prefs.fastmem_size = 0x200000;			 
			memory_reset();
			break;
		case 3:
			changed_prefs.fastmem_size = 0x400000;
			memory_reset();
			break;
		case 4:
			changed_prefs.fastmem_size = 0x800000;
			memory_reset();
			break;
	}

	switch(m_GroupZ3Fast.GetCurSel())
	{
		case 0:
			changed_prefs.z3fastmem_size = 0x00;		 
			memory_reset();
			break;
		case 1:
			changed_prefs.z3fastmem_size = 0x800000;			 
			memory_reset();
			break;
		case 2:
			changed_prefs.z3fastmem_size = 0x2000000;
			memory_reset();
			break;
		case 3:
			changed_prefs.z3fastmem_size = 0x4000000;
			memory_reset();
			break;
		case 4:
			changed_prefs.z3fastmem_size = 0x8000000;
			memory_reset();
			break;
	}

	switch(m_GroupRTG.GetCurSel())
	{
		case 0:
			changed_prefs.gfxmem_size = 0x00;		 
			memory_reset();
			break;
		case 1:
			changed_prefs.gfxmem_size = 0x800000;			 
			memory_reset();
			break;
		case 2:
			changed_prefs.gfxmem_size = 0x2000000;
			memory_reset();
			break;
		case 3:
			changed_prefs.gfxmem_size = 0x4000000;
			memory_reset();
			break;
		case 4:
			changed_prefs.gfxmem_size = 0x8000000;
			memory_reset();
			break;
	}

 

	if (m_FasterRTG.IsChecked())
	{
		changed_prefs.picasso96_nocustom = 1;
		check_prefs_changed_gfx();
	}
	else
	{
		changed_prefs.picasso96_nocustom = 0;
		check_prefs_changed_gfx();
	}
 
	
	if (m_BSDSocket.IsChecked())
	{
		currprefs.socket_emu = 1;
	}
	else
	{
		currprefs.socket_emu = 0;
	}

	if (m_Picasso96.IsChecked())
	{
		currprefs.picasso96_modeflags = 212;	
		check_prefs_changed_gfx();
	}
	else
	{
		currprefs.picasso96_modeflags = 0;		 
		check_prefs_changed_gfx();
	}

	if (m_DriveClick.IsChecked())
	{
		changed_prefs.floppyslots[0].dfxclick = -1;
		changed_prefs.dfxclickvolume = 33;
		changed_prefs.dfxclickchannelmask = 0xFFFF;	
		check_prefs_changed_audio ();	 
		driveclick_check_prefs();
	}
	else
	{
		changed_prefs.floppyslots[0].dfxclick = 0; 		
		check_prefs_changed_audio ();	 
		driveclick_check_prefs();
	}
	 	 		
	
	if (m_24BitAddressing.IsChecked())
	{
		changed_prefs.address_space_24 = 1;
		check_prefs_changed_custom ();
	}
	else
	{
		changed_prefs.address_space_24 = 0;
		check_prefs_changed_custom ();
	}

	if (m_CycleExact.IsChecked())
	{
		changed_prefs.cpu_cycle_exact = 1;
		check_prefs_changed_custom ();
		check_prefs_changed_gfx();
	}
	else
	{
		changed_prefs.cpu_cycle_exact = 0;
		check_prefs_changed_custom ();
		check_prefs_changed_gfx();
	}


	if (m_ImmediateBlits.IsChecked())
	{
		changed_prefs.immediate_blits = 1;
		check_prefs_changed_custom ();
		check_prefs_changed_gfx();
	}
	else
	{
		changed_prefs.immediate_blits = 0;
		check_prefs_changed_custom ();
		check_prefs_changed_gfx();
	}


	if (m_ShowLeds.IsChecked())
	{
		currprefs.leds_on_screen = 1;
	}
	else
	{
		currprefs.leds_on_screen = 0;
	}

	
	if( XuiControlIsBackButton( hObjPressed ) )
	{

		config_changed = 1;		 
		fixup_prefs (&currprefs);
	
		this->NavigateBack();
	}		 
	
    bHandled = TRUE;
    return S_OK;
 }
Ejemplo n.º 4
0
/* handle_message()
 *
 * This is called from the GUI when a GUI event happened. Specifically,
 * HandleMessage (PPP_Messaging) forwards dispatched UI action
 * messages posted from JavaScript to handle_message().
 */
int32_t handle_message(const char* msg) {
    /* Grammar for messages from the UI:
     *
     * message ::= 'insert' drive fileURL
     *           | 'rom' fileURL
     *           | 'connect' port input
     *           | 'eject' drive
     *           | 'reset' | 'pause' | 'resume'
     *           | 'resize' <width> <height>
     * device  ::= 'kickstart' | drive
     * drive   ::= 'df0' | 'df1'
     * port    ::= 'port0' | 'port1'
     * input   ::= 'mouse' | 'joy0' | 'joy1' | 'kbd0' | 'kbd1'
     * fileURL ::= <a URL of the form blob://>
     */

    DEBUG_LOG("%s\n", msg);
    if (!gui_initialized) {
        DEBUG_LOG("GUI message refused; not yet initialized.\n");
        return -1;
    }

    /* TODO(cstefansen): scan the string instead of these shenanigans. */

    /* Copy to non-const buffer. */
    char buf[1024];
    (void) strncpy(buf, msg, sizeof(buf) - 1);
    buf[sizeof(buf) - 1] = '\0'; /* Ensure NUL termination. */

    /* Tokenize message up to 3 tokens (max given the grammar). */
    int32_t i = 0;
    char *t[3], *token, *rest = NULL, *sep = " ";

    for (token = strtok_r(buf, sep, &rest);
         token != NULL && i <= 3;
         token = strtok_r(NULL, sep, &rest), ++i) {
        t[i] = token;
    }

    /* Pipe message to UAE main thread. */
    if (i == 1 && !strcmp(t[0], "reset")) {
        write_comm_pipe_int(&from_gui_pipe, UAECMD_RESET, 1);
    } else if (i == 1 && !strcmp(t[0], "pause")) {
        /* It would be cleaner to call pause_sound and resume_sound in
         * gui_handle_events below, i.e, on the emulator thread. However,
         * if we're pausing because the tab is no longer in the foreground,
         * no graphics flush calls will unblock and no graphics callbacks will
         * be delivered until the tab is back in front. This means that the
         * emulator is probably already stuck in some call and won't get to
         * our UI request to pause the sound. */
        /* TODO(cstefansen)People are reporting pausing/resuming problems; let's
           not do this until investigated. */
        /* pause_sound(); */
        write_comm_pipe_int(&from_gui_pipe, UAECMD_PAUSE, 1);
    } else if (i == 1 && !strcmp(t[0], "resume")) {
        /* resume_sound(); */
        write_comm_pipe_int(&from_gui_pipe, UAECMD_RESUME, 1);
    } else if (i == 2 && !strcmp(t[0], "eject")) {
        int32_t drive_num;
        if (!strcmp(t[1], "df0")) {
            drive_num = 0;
        } else if (!strcmp(t[1], "df1")) {
            drive_num = 1;
        } else {
            return -1;
        }
        write_comm_pipe_int(&from_gui_pipe, UAECMD_EJECTDISK, 0);
        write_comm_pipe_int(&from_gui_pipe, drive_num, 1);
    } else if (i == 3 && !strcmp(t[0], "resize")) {
        long width = strtol(t[1], NULL, 10);
        long height = strtol(t[2], NULL, 10);
        if (width > INT_MAX || height > INT_MAX || errno == ERANGE
            || width <= 0  || height <= 0) {
            write_log("Could not parse width/height in message: %s\n", msg);
            return -1;
        }
        write_comm_pipe_int(&from_gui_pipe, UAECMD_RESIZE, 0);
        write_comm_pipe_int(&from_gui_pipe, (int32_t) width, 0);
        write_comm_pipe_int(&from_gui_pipe, (int32_t) height, 1);
    } else if (i == 3 && !strcmp(t[0], "insert")) {
        int32_t drive_num;
        if (!strcmp(t[1], "df0")) {
            drive_num = 0;
        } else if (!strcmp(t[1], "df1")) {
            drive_num = 1;
        } else {
            return -1;
        }
        uae_sem_wait(&gui_sem);
        if (new_disk_string[drive_num] != 0)
            free (new_disk_string[drive_num]);
        new_disk_string[drive_num] = strdup(t[2]);
        uae_sem_post(&gui_sem);
        write_comm_pipe_int (&from_gui_pipe, UAECMD_INSERTDISK, 0);
        write_comm_pipe_int (&from_gui_pipe, drive_num, 1);
    } else if (i == 2 && !strcmp(t[0], "rom")) {
        uae_sem_wait(&gui_sem);
        if (gui_romname != 0)
            free (gui_romname);
        gui_romname = strdup(t[1]);
        uae_sem_post(&gui_sem);
        write_comm_pipe_int(&from_gui_pipe, UAECMD_SELECT_ROM, 1);
    } else if (i == 3 && !strcmp(t[0], "connect")) {
        int32_t port_num;
        if (!strcmp(t[1], "port0")) {
            port_num = 0;
        } else if (!strcmp(t[1], "port1")) {
            port_num = 1;
        } else {
            return -1;
        }

        int32_t input_device =
                !strcmp(t[2], "mouse") ? JSEM_MICE :
                !strcmp(t[2], "joy0") ? JSEM_JOYS :
                !strcmp(t[2], "joy1") ? JSEM_JOYS + 1 :
                !strcmp(t[2], "kbd0") ? JSEM_KBDLAYOUT + 1 :
                !strcmp(t[2], "kbd1") ? JSEM_KBDLAYOUT + 2 :
                JSEM_END;

        changed_prefs.jports[port_num].id = input_device;
        if (changed_prefs.jports[port_num].id !=
            currprefs.jports[port_num].id) {
            /* It's a little fishy that the typical way to update input
             * devices doesn't use the comm pipe.
             */
            inputdevice_updateconfig (&changed_prefs);
            inputdevice_config_change();
        }
    } else {
        return -1;
    }
    return 0;
}