Exemple #1
0
//===========================================================================
void LoadConfiguration()
{

#define LOAD(a,b) RegLoadValue(CONFIG,a,1,(unsigned long *)b);
	LOAD(EMUJOY,    &joytype);
	LOAD(EMUSOM,    &soundtype);
	LOAD(EMUSLOT,   &NewSlotAux);
	LOAD(EMUVELCPU, &speed);
	LOAD(EMUDISCO,  (DWORD *)&enhancedisk);
	LOAD(EMUVIDEO,  &videotype);
	LOAD(EMUVIDEOM, &monochrome);
	LOAD(EMUSCANLINES,  &ScanLines); // Scan Lines
	LOAD(EMUIMPRESSORA, &ImpressoraPorta);
	LOAD(EMUCOLARRAPIDO, &ColarRapido);

#undef LOAD
	SetCurrentCLK6502();
}
/*LRESULT CALLBACK FrameWndProc (
	HWND   window,
	UINT   message,
	WPARAM wparam,
	LPARAM lparam)*/
void	FrameDispatchMessage(SDL_Event * e) // process given SDL event
{
	int mysym = e->key.keysym.sym; // keycode
	int mymod = e->key.keysym.mod; // some special keys flags
	int x,y;	// used for mouse cursor position

   switch (e->type) //type of SDL event
   {
     case SDL_ACTIVEEVENT:
	g_bAppActive = e->active.gain; // if gain==1, app is active
        break;

    case SDL_KEYDOWN:
//	    printf("keyb %d is down!\n", mysym);
	    if(mysym >= SDLK_0 && mysym <= SDLK_9 && mymod & KMOD_CTRL) {
		    FrameQuickState(mysym - SDLK_0, mymod);
		    break;
	    }

	    if(mysym < 128 && mysym != SDLK_PAUSE) { // it should be ASCII code?
		if ((g_nAppMode == MODE_RUNNING) || (g_nAppMode == MODE_LOGO) ||
			((g_nAppMode == MODE_STEPPING) && (mysym != SDLK_ESCAPE)))
			{
				KeybQueueKeypress(mysym,ASCII);
			}
			else
			if ((g_nAppMode == MODE_DEBUG) || (g_nAppMode == MODE_STEPPING))
			{
				DebuggerInputConsoleChar(mysym);
			}
			break;
	}
	else {// this is function key?
//		KeybUpdateCtrlShiftStatus(); // if ctrl or shift or alt was pressed?------?
		if ((mysym >= SDLK_F1) && (mysym <= SDLK_F12) && (buttondown == -1))
		{
//			SetUsingCursor(0);	-- for what purpose???
			buttondown = mysym - SDLK_F1;	// special function keys processing

/*			if (fullscreen && (buttonover != -1)) {
				if (buttonover != buttondown)
				EraseButton(buttonover);
				buttonover = -1;
			}
			DrawButton((HDC)0,buttondown);*/
		}
		else if (mysym == SDLK_KP_PLUS) // Gray + - speed up the emulator!
		{
			g_dwSpeed = g_dwSpeed + 2;
			if(g_dwSpeed > SPEED_MAX) g_dwSpeed = SPEED_MAX; // no Maximum tresspassing!
			printf("Now speed=%d\n", (int)g_dwSpeed);
			SetCurrentCLK6502();
		}
		else if (mysym == SDLK_KP_MINUS) // Gray + - speed up the emulator!
		{
			if(g_dwSpeed > SPEED_MIN) g_dwSpeed = g_dwSpeed - 1;// dw is unsigned value!
			//if(g_dwSpeed <= SPEED_MIN) g_dwSpeed = SPEED_MIN; // no Minimum tresspassing!
			printf("Now speed=%d\n", (int)g_dwSpeed);
			SetCurrentCLK6502();
		}
		else if (mysym == SDLK_KP_MULTIPLY) // Gray * - normal speed!
		{
			g_dwSpeed = 10;// dw is unsigned value!
			printf("Now speed=%d\n", (int)g_dwSpeed);
			SetCurrentCLK6502();
		}


		else if (mysym == SDLK_CAPSLOCK) // CapsLock
		{
				KeybToggleCapsLock();
		}
		else if (mysym == SDLK_PAUSE)	// Pause - let us pause all things for the best
		{
			SetUsingCursor(0); // release cursor?
			switch (g_nAppMode)
			{
			case MODE_RUNNING: // go in pause
				g_nAppMode = MODE_PAUSED;
				SoundCore_SetFade(FADE_OUT); // fade out sound?**************
				break;
			case MODE_PAUSED: // go to the normal mode?
				g_nAppMode = MODE_RUNNING;
				SoundCore_SetFade(FADE_IN);  // fade in sound?***************
				break;
			case MODE_STEPPING:
				DebuggerInputConsoleChar( DEBUG_EXIT_KEY );
				break;
			}
			DrawStatusArea(/*(HDC)0,*/DRAW_TITLE);
			if ((g_nAppMode != MODE_LOGO) && (g_nAppMode != MODE_DEBUG))
				VideoRedrawScreen();
			g_bResetTiming = true;
		}
		else if (mysym == SDLK_SCROLLOCK)	// SCROLL LOCK pressed
		{
			g_bScrollLock_FullSpeed = !g_bScrollLock_FullSpeed; // turn on/off full speed?
		}
		else if ((g_nAppMode == MODE_RUNNING) || (g_nAppMode == MODE_LOGO) || (g_nAppMode == MODE_STEPPING))
		{
			// Note about Alt Gr (Right-Alt):
			// . WM_KEYDOWN[Left-Control], then:
			// . WM_KEYDOWN[Right-Alt]
			BOOL autorep  = 0; //previous key was pressed? 30bit of lparam
			BOOL extended = (mysym >= 273); // 24bit of lparam - is an extended key, what is it???
			if ((!JoyProcessKey(mysym ,extended, 1, autorep)) && (g_nAppMode != MODE_LOGO))
				KeybQueueKeypress(mysym, NOT_ASCII);
		}
		else if (g_nAppMode == MODE_DEBUG)
			DebuggerProcessKey(mysym);	// someone should realize debugger for Linapple!?--bb
/*
		if (wparam == VK_F10)
		{
			SetUsingCursor(0);
			return 0;
		}
		break;*/
    }//else
    break;

    case SDL_KEYUP:
//	int mysym = e->key.keysym.sym; // keycode
	if ((mysym >= SDLK_F1) && (mysym <= SDLK_F12) && (buttondown == mysym-SDLK_F1))
	{
		buttondown = -1;
// 			if (fullscreen)
// 				EraseButton(wparam-VK_F1);
// 			else
// 				DrawButton((HDC)0,wparam-VK_F1);
		ProcessButtonClick(mysym-SDLK_F1, mymod); // process function keys - special events
	}
	else
	{	// mysym >= 300 (or 273????)- check for extended key, what is it EXACTLY???
		JoyProcessKey(mysym,(mysym >= 273), 0, 0);
	}
	break;

    case SDL_MOUSEBUTTONDOWN:
	if(e->button.button == SDL_BUTTON_LEFT) {// left mouse button was pressed

	    if (buttondown == -1)
	  {
        x = e->button.x; // mouse cursor coordinates
        y = e->button.y;
        if (usingcursor) // we use mouse cursor for our special needs?
	{
	   KeybUpdateCtrlShiftStatus(); // if either of ALT, SHIFT or CTRL is pressed
	   if (g_bShiftKey | g_bCtrlKey)
	   {
           	 SetUsingCursor(0); // release mouse cursor for user
	   }
          else
	  {
		if (sg_Mouse.Active())
			sg_Mouse.SetButton(BUTTON0, BUTTON_DOWN);
		else
		        JoySetButton(BUTTON0, BUTTON_DOWN);
	  }
	}// we do not use mouse
        else if ( (/*(x < buttonx) &&*/ JoyUsingMouse() && ((g_nAppMode == MODE_RUNNING) ||
		   (g_nAppMode == MODE_STEPPING))) || (sg_Mouse.Active()) )
		{
          		SetUsingCursor(1); // capture cursor
		}
		DebuggerMouseClick( x, y );
      }
//RelayEvent(WM_LBUTTONDOWN,wparam,lparam);
     }//if left mouse button down
     else if(e->button.button == SDL_BUTTON_RIGHT) {
	if (usingcursor)
        {
	     if (sg_Mouse.Active())
		     sg_Mouse.SetButton(BUTTON1, BUTTON_DOWN);
	     else
		     JoySetButton(BUTTON1, BUTTON_DOWN);
        }
     }

      break; // end of MOSEBUTTONDOWN event

    case SDL_MOUSEBUTTONUP:
     if (e->button.button == SDL_BUTTON_LEFT) {// left mouse button was released
     if (usingcursor)
      {
		if (sg_Mouse.Active())
			sg_Mouse.SetButton(BUTTON0, BUTTON_UP);
		else
		    JoySetButton(BUTTON0, BUTTON_UP);
      }
//      RelayEvent(WM_LBUTTONUP,wparam,lparam);
     }
     else if(e->button.button == SDL_BUTTON_RIGHT) {
	     if (usingcursor)
	     {
		     if (sg_Mouse.Active())
			     sg_Mouse.SetButton(BUTTON1, BUTTON_UP);
		     else
			     JoySetButton(BUTTON1, BUTTON_UP);
	     }
     }
     break; // MOUSEBUTTONUP event

    case SDL_MOUSEMOTION:
      x = e->motion.x;// get relative coordinates of mouse cursor
      y = e->motion.y;
      if (usingcursor)
      {
//        DrawCrosshairs(x,y); I do not like those crosshairs, but... --bb
		if (sg_Mouse.Active())
	            sg_Mouse.SetPosition(x, VIEWPORTCX-4, y, VIEWPORTCY-4);
		else
		    JoySetPosition(x, VIEWPORTCX-4, y, VIEWPORTCY-4);
      }
//      RelayEvent(WM_MOUSEMOVE,wparam,lparam);
      break;

    case SDL_USEREVENT:
	if (e->user.code == 1) // should do restart?
		ProcessButtonClick(BTN_RUN, 0);
	break;

   }//switch

//  return DefWindowProc(window,message,wparam,lparam);
}
Exemple #3
0
//Reads configuration from the registry entries
void LoadConfiguration(void)
{
	DWORD dwComputerType;

	if (REGLOAD(TEXT(REGVALUE_APPLE2_TYPE), &dwComputerType))
	{
		if ((dwComputerType >= A2TYPE_MAX) || (dwComputerType >= A2TYPE_UNDEFINED && dwComputerType < A2TYPE_CLONE))
			dwComputerType = A2TYPE_APPLE2EENHANCED;

		g_Apple2Type = (eApple2Type) dwComputerType;
	}
	else	// Support older AppleWin registry entries
	{
		REGLOAD(TEXT(REGVALUE_OLD_APPLE2_TYPE), &dwComputerType);
		switch (dwComputerType)
		{
			// NB. No A2TYPE_APPLE2E (this is correct)
		case 0:	g_Apple2Type = A2TYPE_APPLE2;
		case 1:	g_Apple2Type = A2TYPE_APPLE2PLUS;
		case 2:	g_Apple2Type = A2TYPE_APPLE2EENHANCED;
		default:	g_Apple2Type = A2TYPE_APPLE2EENHANCED;
		}
	}

	switch (g_Apple2Type) //Sets the character set for the Apple model/clone
	{
	case A2TYPE_APPLE2:			g_nCharsetType  = 0; break; 
	case A2TYPE_APPLE2PLUS:		g_nCharsetType  = 0; break; 
	case A2TYPE_APPLE2E:		g_nCharsetType  = 0; break; 
	case A2TYPE_APPLE2EENHANCED:g_nCharsetType  = 0; break; 
	case A2TYPE_PRAVETS82:	    g_nCharsetType  = 1; break; 
	case A2TYPE_PRAVETS8A:	    g_nCharsetType  = 2; break; 
	case A2TYPE_PRAVETS8M:	    g_nCharsetType  = 3; break; //This charset has a very small difference with the PRAVETS82 one an probably has some misplaced characters. Still the Pravets82 charset is used, because setting charset to 3 results in some problems.
	}

	//

	if (!REGLOAD(TEXT(REGVALUE_JOYSTICK0_EMU_TYPE), &joytype[JN_JOYSTICK0]))
		LoadConfigOldJoystick(JN_JOYSTICK0);
	if (!REGLOAD(TEXT(REGVALUE_JOYSTICK1_EMU_TYPE), &joytype[JN_JOYSTICK1]))
		LoadConfigOldJoystick(JN_JOYSTICK1);

	REGLOAD(TEXT("Sound Emulation")     ,&soundtype);

	char aySerialPortName[ CSuperSerialCard::SIZEOF_SERIALCHOICE_ITEM ];
	if (RegLoadString(	TEXT("Configuration"),
		TEXT(REGVALUE_SERIAL_PORT_NAME),
		TRUE,
		aySerialPortName,
		sizeof(aySerialPortName) ) )
	{
		sg_SSC.SetSerialPortName(aySerialPortName);
	}

	REGLOAD(TEXT(REGVALUE_EMULATION_SPEED)   ,&g_dwSpeed);
	REGLOAD(TEXT(REGVALUE_ENHANCE_DISK_SPEED),(DWORD *)&enhancedisk);

	Config_Load_Video();

	REGLOAD(TEXT("Uthernet Active")   ,(DWORD *)&tfe_enabled);

	SetCurrentCLK6502();

	//

	DWORD dwTmp;

	if(REGLOAD(TEXT(REGVALUE_THE_FREEZES_F8_ROM), &dwTmp))
		sg_PropertySheet.SetTheFreezesF8Rom(dwTmp);

	if(REGLOAD(TEXT(REGVALUE_SPKR_VOLUME), &dwTmp))
		SpkrSetVolume(dwTmp, sg_PropertySheet.GetVolumeMax());

	if(REGLOAD(TEXT(REGVALUE_MB_VOLUME), &dwTmp))
		MB_SetVolume(dwTmp, sg_PropertySheet.GetVolumeMax());

	if(REGLOAD(TEXT(REGVALUE_SAVE_STATE_ON_EXIT), &dwTmp))
		g_bSaveStateOnExit = dwTmp ? true : false;


	if(REGLOAD(TEXT(REGVALUE_DUMP_TO_PRINTER), &dwTmp))
		g_bDumpToPrinter = dwTmp ? true : false;

	if(REGLOAD(TEXT(REGVALUE_CONVERT_ENCODING), &dwTmp))
		g_bConvertEncoding = dwTmp ? true : false;

	if(REGLOAD(TEXT(REGVALUE_FILTER_UNPRINTABLE), &dwTmp))
		g_bFilterUnprintable = dwTmp ? true : false;

	if(REGLOAD(TEXT(REGVALUE_PRINTER_APPEND), &dwTmp))
		g_bPrinterAppend = dwTmp ? true : false;


	if(REGLOAD(TEXT(REGVALUE_HDD_ENABLED), &dwTmp))
		HD_SetEnabled(dwTmp ? true : false);

	char szHDVPathname[MAX_PATH] = {0};
	if(RegLoadString(TEXT(REG_PREFS), TEXT(REGVALUE_PREF_LAST_HARDDISK_1), 1, szHDVPathname, sizeof(szHDVPathname)))
		HD_InsertDisk(HARDDISK_1, szHDVPathname);
	if(RegLoadString(TEXT(REG_PREFS), TEXT(REGVALUE_PREF_LAST_HARDDISK_2), 1, szHDVPathname, sizeof(szHDVPathname)))
		HD_InsertDisk(HARDDISK_2, szHDVPathname);

	if(REGLOAD(TEXT(REGVALUE_PDL_XTRIM), &dwTmp))
		JoySetTrim((short)dwTmp, true);
	if(REGLOAD(TEXT(REGVALUE_PDL_YTRIM), &dwTmp))
		JoySetTrim((short)dwTmp, false);

	if(REGLOAD(TEXT(REGVALUE_SCROLLLOCK_TOGGLE), &dwTmp))
		sg_PropertySheet.SetScrollLockToggle(dwTmp);

	if(REGLOAD(TEXT(REGVALUE_CURSOR_CONTROL), &dwTmp))
		sg_PropertySheet.SetJoystickCursorControl(dwTmp);
	if(REGLOAD(TEXT(REGVALUE_AUTOFIRE), &dwTmp))
		sg_PropertySheet.SetAutofire(dwTmp);
	if(REGLOAD(TEXT(REGVALUE_CENTERING_CONTROL), &dwTmp))
		sg_PropertySheet.SetJoystickCenteringControl(dwTmp);

	if(REGLOAD(TEXT(REGVALUE_MOUSE_CROSSHAIR), &dwTmp))
		sg_PropertySheet.SetMouseShowCrosshair(dwTmp);
	if(REGLOAD(TEXT(REGVALUE_MOUSE_RESTRICT_TO_WINDOW), &dwTmp))
		sg_PropertySheet.SetMouseRestrictToWindow(dwTmp);

	if(REGLOAD(TEXT(REGVALUE_SLOT4), &dwTmp))
		g_Slot4 = (SS_CARDTYPE) dwTmp;
	if(REGLOAD(TEXT(REGVALUE_SLOT5), &dwTmp))
		g_Slot5 = (SS_CARDTYPE) dwTmp;

	if (g_Slot4 == CT_MockingboardC || g_Slot4 == CT_Phasor)
		MB_SetSoundcardType(g_Slot4);
	else
		MB_SetSoundcardType(CT_Empty);

	//

	char szFilename[MAX_PATH] = {0};

	// Current/Starting Dir is the "root" of where the user keeps his disk images
	RegLoadString(TEXT(REG_PREFS), TEXT(REGVALUE_PREF_START_DIR), 1, szFilename, MAX_PATH);
	if (szFilename[0] == 0)
		GetCurrentDirectory(sizeof(szFilename), szFilename);
	SetCurrentImageDir(szFilename);

	Disk_LoadLastDiskImage(DRIVE_1);
	Disk_LoadLastDiskImage(DRIVE_2);

	//

	szFilename[0] = 0;
	RegLoadString(TEXT(REG_CONFIG),TEXT(REGVALUE_SAVESTATE_FILENAME),1,szFilename,sizeof(szFilename));
	Snapshot_SetFilename(szFilename);	// If not in Registry than default will be used (ie. g_sCurrentDir + default filename)

	szFilename[0] = 0;
	RegLoadString(TEXT(REG_CONFIG),TEXT(REGVALUE_PRINTER_FILENAME),1,szFilename,sizeof(szFilename));
	Printer_SetFilename(szFilename);	// If not in Registry than default will be used

	dwTmp = 10;
	REGLOAD(TEXT(REGVALUE_PRINTER_IDLE_LIMIT), &dwTmp);
	Printer_SetIdleLimit(dwTmp);

	char szUthernetInt[MAX_PATH] = {0};
	RegLoadString(TEXT(REG_CONFIG),TEXT("Uthernet Interface"),1,szUthernetInt,MAX_PATH);  
	update_tfe_interface(szUthernetInt,NULL);

	if (REGLOAD(TEXT(REGVALUE_WINDOW_SCALE), &dwTmp))
		SetViewportScale(dwTmp);

	if (REGLOAD(TEXT(REGVALUE_CONFIRM_REBOOT), &dwTmp))
		g_bConfirmReboot = dwTmp;
}