/* #FN#
   Prepares the tape to be accessed or removed */
BOOL
/* #AS#
   Nothing */
CTapeDlg::
PrepareTape(
	LPSTR pszTapeFile,
	BOOL  bCheckIfExists /*=TRUE*/,
	BOOL  bForceInsert /*=FALSE*/
)
{
	BOOL bResult = FALSE;

	if( _IsPathAvailable( pszTapeFile ) )
	{
		CFileStatus fsStatus;

		if( !bCheckIfExists || CFile::GetStatus( pszTapeFile, fsStatus ) )
		{
			UINT unFileType = IAF_CAS_IMAGE;
			m_bCasImage = IsAtariFile( pszTapeFile, &unFileType );

			bForceInsert = bForceInsert || m_bCasImage || _stricmp( m_szTapeLast, pszTapeFile ) == 0;

			if( bForceInsert ||
				DisplayWarning( IDS_WARN_CASFILE, DONT_SHOW_CASFILE_WARN, TRUE ) )
			{
				/* Prevents from resource leaks */
				CASSETTE_Remove();
				/* We have to attach a selected file because there is need
				   to update some kernel-depending cassette parameters */
				if( CASSETTE_Insert( pszTapeFile ) )
				{
					/* A tape image has been properly inserted */
					bResult = TRUE;
				}
				else
					DisplayMessage( GetSafeHwnd(), IDS_ERROR_CAS_READ, 0, MB_ICONEXCLAMATION | MB_OK );
			}
		}
	}	
	/* It is a good idea to remove the tape if no success */
	if( !bResult )
		EjectTape();

	/* Save a name of the last used image */
	_strncpy( m_szTapeLast, pszTapeFile, FILENAME_MAX - 1 );

	return bResult;

} /* #OF# CTapeDlg::PrepareTape */
/* #FN#
   Displays "Configure Keyset B" dialog box */
void
/* #AS#
   Nothing */
CJoystickDlg::
OnKeysetB()
{
	CKeysetDlg dlgKeyset;

	if( _IsFlagSet( m_ulInputState, IS_JOY_DONT_EXCLUDE ) ||
		DisplayWarning( IDS_WARN_KBJOY, DONT_SHOW_KBJOY_WARN, TRUE ) )
	{
		dlgKeyset.SetTitlePostfix( " B" );
		dlgKeyset.SetCurrentKeyset( KEYS_B_JOYSTICK + NUM_KBJOY_DEVICES );
		dlgKeyset.DoModal();
	}
} /* #OF# CJoystickDlg::OnKeysetB */
Beispiel #3
0
void
ReplaceInString(HKEY hKey, DWORD dwType, DWORD dwSize)
{
  static char cNewData[65536];
  switch (dwType)
    {
    case REG_SZ: case REG_EXPAND_SZ:
      {
	bool bDone = false;
	char *oldplace = cValueData;
	char *newplace = cNewData;
	for (;;)
	  {
	    char *nextplace = strstr(oldplace, cFrom);
	    if (nextplace == NULL)
	      {
		// Nothing done? Just break.
		if (!bDone)
		  break;

		size_t iBufSizeLeft = sizeof(cNewData)-(newplace-cNewData);
		size_t iLen = strlen(oldplace);
		if (iLen >= iBufSizeLeft)
		  {
		    _snprintf(cValueData, sizeof cValueData,
			      "Data too big after replacements: '%s\\%s'",
			      cKeyPath, cValueName);
		    cValueData[sizeof(cValueData)-1] = 0;
		    MessageBox(hwndProgressDialog, cValueData, "Error",
			       MB_ICONEXCLAMATION);
		    break;
		  }
		  
		strcpy(newplace, oldplace);
		newplace += iLen;
		cNewData[sizeof(cNewData)-1] = 0;
		LONG lErrNo =
		  RegSetValueEx(hKey, cValueName, 0, dwType, (LPBYTE)cNewData,
				(DWORD) (newplace - cNewData + 1));
		if (lErrNo != NO_ERROR)
		  {
		    DisplayWarning(lErrNo, "Error saving value in key");
		    dwReplaceErrorCounter++;
		  }
		else
		  dwReplaceCounter++;

		UpdateStatus();
		    
		break;
	      }

	    bDone = true;
	    nextplace[0] = 0;
	    size_t iBufSizeLeft = sizeof(cNewData)-(newplace-cNewData);
	    size_t iLen = strlen(oldplace);
	    if (iLen + iToLen >= iBufSizeLeft)
	      {
		_snprintf(cValueData, sizeof cValueData,
			  "Data too big after replacements: '%s\\%s'",
			  cKeyPath, cValueName);
		cValueData[sizeof(cValueData)-1] = 0;
		MessageBox(hwndProgressDialog, cValueData, "Error",
			   MB_ICONEXCLAMATION);
		break;
	      }
	    strcpy(newplace, oldplace);
	    newplace += iLen;
	    strcpy(newplace, cTo);
	    newplace += iToLen;
	    oldplace += iLen + iFromLen;
	  }
	break;
      }
    case REG_BINARY:
      {
	if (memstr(cValueData, cFrom, dwSize) == NULL)
	  {
	    bool bDone = false;
	    char *oldplace = cValueData;
	    char *newplace = cNewData;

	    if (wcFrom[0] == 0)
	      {
		if (MultiByteToWideChar(CP_ACP, 0, cFrom, -1, wcFrom,
					sizeof(wcFrom)/sizeof(*wcFrom)) == 0)
		  break;
		if (MultiByteToWideChar(CP_ACP, 0, cTo, -1, wcTo,
					sizeof(wcTo)/sizeof(*wcTo)) == 0)
		  break;
	      }

	    for (;;)
	      {
		char *nextplace =
		  (char*)memwcs((LPWSTR)oldplace, wcFrom,
				(dwSize - (oldplace-cValueData)) >> 1);
		if (nextplace == NULL)
		  {
		    // Nothing done? Just break.
		    if (!bDone)
		      break;

		    size_t iBufSizeLeft = sizeof(cNewData)-(newplace-cNewData);
		    size_t iLen = dwSize - (oldplace-cValueData);
		    if (iLen > iBufSizeLeft)
		      {
			_snprintf(cValueData, sizeof cValueData,
				  "Data too big after replacements: '%s\\%s'",
				  cKeyPath, cValueName);
			cValueData[sizeof(cValueData)-1] = 0;
			MessageBox(hwndProgressDialog, cValueData, "Error",
				   MB_ICONEXCLAMATION);
			break;
		      }
		  
		    memcpy(newplace, oldplace, iLen);
		    newplace += iLen;
		    LONG lErrNo =
		      RegSetValueEx(hKey, cValueName, 0, dwType,
				    (LPBYTE) cNewData,
				    (DWORD) (newplace - cNewData));
		    if (lErrNo != NO_ERROR)
		      {
			DisplayWarning(lErrNo, "Error saving value in key");
			dwReplaceErrorCounter++;
		      }
		    else
		      dwReplaceCounter++;

		    UpdateStatus();
		    
		    break;
		  }

		bDone = true;
		size_t iBufSizeLeft = sizeof(cNewData)-(newplace-cNewData);
		size_t iLen = nextplace - oldplace;
		if (iLen + iToLen > iBufSizeLeft)
		  {
		    _snprintf(cValueData, sizeof cValueData,
			      "Data too big after replacements: '%s\\%s'",
			      cKeyPath, cValueName);
		    cValueData[sizeof(cValueData)-1] = 0;
		    MessageBox(hwndProgressDialog, cValueData, "Error",
			       MB_ICONEXCLAMATION);
		    break;
		  }
		memcpy(newplace, oldplace, iLen);
		newplace += iLen;
		memcpy(newplace, wcTo, (iToLen << 1));
		newplace += (iToLen << 1);
		oldplace += iLen + (iFromLen << 1);
	      }
	    break;
	  }

	bool bDone = false;
	char *oldplace = cValueData;
	char *newplace = cNewData;
	for (;;)
	  {
	    char *nextplace = memstr(oldplace, cFrom,
				     dwSize - (oldplace-cValueData));
	    if (nextplace == NULL)
	      {
		// Nothing done? Just break.
		if (!bDone)
		  break;

		size_t iBufSizeLeft = sizeof(cNewData)-(newplace-cNewData);
		size_t iLen = dwSize - (oldplace-cValueData);
		if (iLen > iBufSizeLeft)
		  {
		    _snprintf(cValueData, sizeof cValueData,
			      "Data too big after replacements: '%s\\%s'",
			      cKeyPath, cValueName);
		    cValueData[sizeof(cValueData)-1] = 0;
		    MessageBox(hwndProgressDialog, cValueData, "Error",
			       MB_ICONEXCLAMATION);
		    break;
		  }
		  
		memcpy(newplace, oldplace, iLen);
		newplace += iLen;
		LONG lErrNo =
		  RegSetValueEx(hKey, cValueName, 0, dwType, (LPBYTE) cNewData,
				(DWORD) (newplace - cNewData));
		if (lErrNo != NO_ERROR)
		  {
		    DisplayWarning(lErrNo, "Error saving value in key");
		    dwReplaceErrorCounter++;
		  }
		else
		  dwReplaceCounter++;

		UpdateStatus();
		    
		break;
	      }

	    bDone = true;
	    size_t iBufSizeLeft = sizeof(cNewData)-(newplace-cNewData);
	    size_t iLen = nextplace - oldplace;
	    if (iLen + iToLen > iBufSizeLeft)
	      {
		_snprintf(cValueData, sizeof cValueData,
			  "Data too big after replacements: '%s\\%s'",
			  cKeyPath, cValueName);
		cValueData[sizeof(cValueData)-1] = 0;
		MessageBox(hwndProgressDialog, cValueData, "Error",
			   MB_ICONEXCLAMATION);
		break;
	      }
	    memcpy(newplace, oldplace, iLen);
	    newplace += iLen;
	    memcpy(newplace, cTo, iToLen);
	    newplace += iToLen;
	    oldplace += iLen + iFromLen;
	  }
	break;
      }
    case REG_MULTI_SZ:
      {
	bool bDone = false;
	char *oldplace = cValueData;
	char *newplace = cNewData;
	for (;;)
	  {
	    char *nextplace = strstr(oldplace, cFrom);
	    if (nextplace == NULL)
	      {
		size_t iBufSizeLeft = sizeof(cNewData)-(newplace-cNewData);
		size_t iLen = strlen(oldplace);
		if (iLen >= iBufSizeLeft - 1)
		  {
		    _snprintf(cValueData, sizeof cValueData,
			      "Data too big after replacements: '%s\\%s'",
			      cKeyPath, cValueName);
		    cValueData[sizeof(cValueData)-1] = 0;
		    MessageBox(hwndProgressDialog, cValueData, "Error",
			       MB_ICONEXCLAMATION);
		    break;
		  }
		  
		strcpy(newplace, oldplace);
		oldplace += iLen + 1;
		newplace += iLen + 1;
		if (oldplace[0] == 0)
		  {
		    if (!bDone)
		      break;

		    cNewData[sizeof(cNewData)-2] = 0;
		    cNewData[sizeof(cNewData)-1] = 0;
		    LONG lErrNo =
		      RegSetValueEx(hKey, cValueName, 0, dwType,
				    (LPBYTE) cNewData,
				    (DWORD) (newplace - cNewData + 1));
		    if (lErrNo != NO_ERROR)
		      {
			DisplayWarning(lErrNo,
				       "Error saving value in key");
			dwReplaceErrorCounter++;
		      }
		    else
		      dwReplaceCounter++;

		    UpdateStatus();
		  
		    break;
		  }
	      }
	    else
	      {
		bDone = true;
		nextplace[0] = 0;
		size_t iBufSizeLeft = sizeof(cNewData)-(newplace-cNewData);
		size_t iLen = strlen(oldplace);
		if (iLen + iToLen >= iBufSizeLeft - 1)
		  {
		    _snprintf(cValueData, sizeof cValueData,
			      "Data too big after replacements: '%s\\%s'",
			      cKeyPath, cValueName);
		    cValueData[sizeof(cValueData)-1] = 0;
		    MessageBox(hwndProgressDialog, cValueData, "Error",
			       MB_ICONEXCLAMATION);
		    break;
		  }
		strcpy(newplace, oldplace);
		newplace += iLen;
		strcpy(newplace, cTo);
		newplace += iToLen;
		oldplace += iLen + iFromLen;
	      }
	  }
	break;
      }
    }
Beispiel #4
0
void CNotificationImp::DisplayWarning(LanguageStringID StringID) const
{
    DisplayWarning(g_Lang->GetString(StringID).c_str());
}