Exemple #1
0
void BtnIMPVoicesPreviousCallback( GUI_BUTTON *btn, INT32 reason )
{

	// btn callback for IMP attrbite begin button
	if ( !(btn->uiFlags & BUTTON_ENABLED) )
		return;

	if ( reason & MSYS_CALLBACK_REASON_LBUTTON_DWN )
	{
		btn->uiFlags |= (BUTTON_CLICKED_ON);
	}
	else if ( reason & MSYS_CALLBACK_REASON_LBUTTON_UP )
	{
		if ( btn->uiFlags & BUTTON_CLICKED_ON )
		{
			btn->uiFlags &= ~(BUTTON_CLICKED_ON);

			// previous voice, please!!!
			DecrementVoice( );
			// play voice
			if ( !SoundIsPlaying( uiVocVoiceSound ) )
			{
				uiVocVoiceSound = PlayVoice( );
			}
			else
			{
				SoundStop( uiVocVoiceSound );
				uiVocVoiceSound = PlayVoice( );
			}

			fReDrawVoicesScreenFlag = TRUE;
		}
	}
}
void CWeaponGravityGun::EffectDestroy( void )
{
	m_active = false;
	SoundStop();

	DetachObject();
}
 PyObject* LMF_SoundStop  (PyObject *self, PyObject *args){
	int iSoundID;
	if (!PyArg_ParseTuple(args, "i", &iSoundID)) {
		ParsePyTupleError( __func__, __LINE__ );
		return nullptr;
	}
	SoundStop(iSoundID);
	Py_RETURN_NONE;
}
Exemple #4
0
void EffectsOff(void)
{
    if(EffectInUsePriory && EffectInUse) {
        for(int i = 0; i < 16; i++) SoundStop(i);
        EffectInUse = 0;
        lastSoundFlag = 0;

        //SoundVolumeCD = -1;
    }
}
Exemple #5
0
void EffectsOnOff(void)
{
    if(EffectInUsePriory) {
        EffectInUse = 1 - EffectInUse;
        if(!EffectInUse) {
            for(int i = 0; i < 16; i++) SoundStop(i);
            lastSoundFlag = 0;
        }
    }
}
void CWeaponGravityGun::EffectDestroy( void )
{
#ifdef CLIENT_DLL
	gHUD.m_bSkipClear = false;
#endif
	m_active = false;
	SoundStop();

	DetachObject();
}
void CWeaponGravityGun::SoundUpdate( void )
{
	int newState;
	
	if ( m_hObject )
		newState = SS_LOCKEDON;
	else
		newState = SS_SCANNING;

	if ( newState != m_soundState )
	{
		SoundStop();
		m_soundState = newState;
		SoundStart();
	}

	switch( m_soundState )
	{
	case SS_SCANNING:
		break;
	case SS_LOCKEDON:
		{
			CPASAttenuationFilter filter( this );

			float height = m_hObject->GetAbsOrigin().z - m_originalObjectPosition.z;

			// go from pitch 90 to 150 over a height of 500
			int pitch = 90 + (int)UTIL_LineFraction( height, 0, 500, 60 );

			assert(m_sndLockedOn!=NULL);
			if ( m_sndLockedOn != NULL )
			{
				(CSoundEnvelopeController::GetController()).SoundChangePitch( m_sndLockedOn, pitch, 0.0f );
			}

			// attenutate the movement sounds over 200 units of movement
			float distance = UTIL_LineFraction( m_movementLength, 0, 200, 1.0 );

			// blend the "mass" sounds between 50 and 500 kg
			IPhysicsObject *pPhys = GetPhysObjFromPhysicsBone( m_hObject, m_physicsBone );
			if ( pPhys == NULL )
			{
				// we no longer exist!
				break;
			}
			
			float fade = UTIL_LineFraction( pPhys->GetMass(), 50, 500, 1.0 );

			(CSoundEnvelopeController::GetController()).SoundChangeVolume( m_sndLightObject, fade * distance, 0.0f );

			(CSoundEnvelopeController::GetController()).SoundChangeVolume( m_sndHeavyObject, (1.0 - fade) * distance, 0.0f );
		}
		break;
	}
}
Exemple #8
0
////////////////////////////////////////////////////////////
/// Stop all sounds from buffer
////////////////////////////////////////////////////////////
void SoundBufferStop()
{
	Int32 i = 0;

	for (i = 0; i < SOUND_BUFFER_SIZE; i++)
	{
		if (SoundData[i].Buffer != 0)
		{
			// Stop sound
			SoundStop(&SoundData[i]);
		}
	}
}
Exemple #9
0
void SoundFinit(void)
{
	int i;
	if(XSoundInitFlag){
		for(i = 0; i < MAX_CHANNELS; ++i)
			SoundStop(i);
		/* SDL_Mixer version
		Mix_CloseAudio();*/
		delete clunk_object;
		context.deinit();
		XSoundInitFlag = 0;
	}
}
Exemple #10
0
void StartEFFECT(EFFECT_VALUE EffectValue,int loop,int pan)
{
    if(!EffectInUse || !SndData[EffectValue].lpDSB) return;
    int flag = SndData[EffectValue].flags;
    if(loop) flag |= DS_LOOPING;
    if(SndData[EffectValue].channel != LOCAL_CHANNEL)
        SetVolume(SndData[EffectValue].lpDSB,soundVolumecurrent);
    else
        SetVolume(SndData[EffectValue].lpDSB,soundVolume);

    if(EngineNoise && EffectValue == EFF_DRIVING) SoundStop(SndData[EffectValue].channel);
    if (SoundVolumePanning)
        SoundPan(SndData[EffectValue].channel, -pan*8);
    //if (SndData[EffectValue].status & ESCAVE_SOUND&&EffectValue!=EFF_NOISE)
    //	std::cout<<"StartEFFECT:"<<SndData[EffectValue].fname<<" int:"<<(int)EffectValue<<std::endl;
    SoundPlay(SndData[EffectValue].lpDSB,SndData[EffectValue].channel,SndData[EffectValue].priority,SndData[EffectValue].cropos,flag);
}
Exemple #11
0
static void AnimateUndo( LPRECT lpUndoRect )
/***********************************************************************/
{
RECT rect;
STRING szString;
ITEMID id1, id2;
int iHeight, iWidth, x1, x2, y;
#define DXANIMATION 71
#define DYANIMATION 76

SoundStartID( IDC_AMBULANCE1, YES/*bLoop*/, NULL/*hInstance*/ );
GetClientRect( lpImage->hWnd, &rect );
iHeight = RectHeight( &rect );
iWidth = RectWidth( &rect );
File2DispRect( lpUndoRect, &rect );
x1 = (rect.left + rect.right) / 2;
if ( x1 < iWidth - x1 )
	{ // closer to the left; come in from the left
	x1 = -DXANIMATION;
	x2 = rect.right;
	id1 = IDC_AMBULANCE2;
	id2 = IDC_AMBULANCE1;
	}
else
	{ // closer to the right; come in from the right
	x1 = iWidth - 1;
	x2 = rect.left - DXANIMATION;
	id1 = IDC_AMBULANCE1;
	id2 = IDC_AMBULANCE2;
	}
y = (rect.top + rect.bottom - DYANIMATION) / 2;
y = bound( y, 0, iHeight - DYANIMATION );

wsprintf( szString, "SETSPEED 35\rJUMP %d,%d\rMOVE %d,%d\r", x1, y, x2, y );
AnimateDibID( lpImage->hWnd, NULL/*&rect*/, hInstAstral, id1, NULL, szString );

UpdateImage( lpUndoRect, YES );
AstralUpdateWindow( lpImage->hWnd );

wsprintf( szString, "SETSPEED 35\rJUMP %d,%d\rMOVE %d,%d\r", x2, y, x1, y );
AnimateDibID( lpImage->hWnd, NULL/*&rect*/, hInstAstral, id2, NULL, szString );
SoundStop();
}
Exemple #12
0
void LoadMotorSound(void) {
    XBuffer buf;
    XStream ff(0);
    for(int i = 0; i < 3; i++) {
        buf.init();

        if(EngineNoise)
            buf < "resource/sound/effects/" < "/" < SndData[i].fname < ".wav";

        if(ff.open(buf.GetBuf(),XS_IN)) {
            ff.close();
            if (SndData[i].lpDSB) {
                SoundStop(SndData[i].channel);
                SoundRelease(SndData[i].lpDSB);
                SndData[i].lpDSB = NULL;
            }
            SoundLoad(buf.GetBuf(),&SndData[i].lpDSB);
        }
    }	//  end for i
}
Exemple #13
0
////////////////////////////////////////////////////////////
/// Destroy all sound data and buffer
////////////////////////////////////////////////////////////
void SoundBufferDestroy()
{
	Int32 i = 0;

	for (i = 0; i < SOUND_BUFFER_SIZE; i++)
	{
		if (SoundData[i].Buffer != 0)
		{
			// Stop sound
			SoundStop(&SoundData[i]);

			// Delete source
			ALCheck(alDeleteSources(1, &SoundData[i].Source));

			// Delete buffer
			ALCheck(alDeleteBuffers(1, &SoundData[i].Buffer));

			// Free data
			Delete(SoundData[i].Samples);
		}
	}
}
void CWeaponGravityGun::SoundUpdate( void )
{
	int newState;
	
	if ( m_hObject )
		newState = SS_LOCKEDON;
	else
		newState = SS_SCANNING;

	if ( newState != m_soundState )
	{
		SoundStop();
		m_soundState = newState;
		SoundStart();
	}

	switch( m_soundState )
	{
	case SS_SCANNING:
		break;
	case SS_LOCKEDON:
		{
			CPASAttenuationFilter filter( GetOwner() );
			filter.MakeReliable();

			float height = m_hObject->GetAbsOrigin().z - m_originalObjectPosition.z;

			// go from pitch 90 to 150 over a height of 500
			int pitch = 90 + (int)UTIL_LineFraction( height, 0, 500, 60 );

			CSoundParameters params;
			if ( GetParametersForSound( "Weapon_Physgun.LockedOn", params, NULL ) )
			{
				EmitSound_t ep( params );
				ep.m_nFlags = SND_CHANGE_VOL | SND_CHANGE_PITCH;
				ep.m_nPitch = pitch;

				EmitSound( filter, GetOwner()->entindex(), ep );
			}

			// attenutate the movement sounds over 200 units of movement
			float distance = UTIL_LineFraction( m_movementLength, 0, 200, 1.0 );

			// blend the "mass" sounds between 50 and 500 kg
			IPhysicsObject *pPhys = m_hObject->VPhysicsGetObject();
			
			float fade = UTIL_LineFraction( pPhys->GetMass(), 50, 500, 1.0 );

			if ( GetParametersForSound( "Weapon_Physgun.LightObject", params, NULL ) )
			{
				EmitSound_t ep( params );
				ep.m_nFlags = SND_CHANGE_VOL;
				ep.m_flVolume = fade * distance;

				EmitSound( filter, GetOwner()->entindex(), ep );
			}

			if ( GetParametersForSound( "Weapon_Physgun.HeavyObject", params, NULL ) )
			{
				EmitSound_t ep( params );
				ep.m_nFlags = SND_CHANGE_VOL;
				ep.m_flVolume = (1.0 - fade) * distance;

				EmitSound( filter, GetOwner()->entindex(), ep );
			}
		}
		break;
	}
}
void CWeaponGravityGun::SoundDestroy( void )
{
	SoundStop();
}
Exemple #16
0
void SoundPlay(void *lpDSB, int channel, int priority, int cropos, int flags)
{
	if(XSoundInitFlag){
		clunk::Sample *source = (clunk::Sample *)lpDSB;
		
		//if (channel==2)
		//	std::cout<<"SoundPlay:"<<source->name<<" channel:"<<channel<<" cropos:"<<cropos<<" pr1:"<<channels[channel].priority<<" pr2:"<<priority<<" playing:"<<clunk_object->playing(source->name)<<std::endl;
		if (cropos == 255) {
			if (!clunk_object->playing(source->name)||channels[channel].priority>priority) {
				SoundStop(channel);
				clunk_object->play(source->name, new clunk::Source(source, false, clunk::v3<float>(), 1, 1, channels[channel].pan*0.0001));
				if(flags & DS_LOOPING){
					clunk_object->set_loop(source->name, true);
				}
			} else {
				return;
			}
		} else {
			if (channels[channel].sound) {
				if (clunk_object->playing(channels[channel].sound->name)&&channels[channel].priority<priority) {
					return;
				}
				SoundStop(channel);
			}
			clunk_object->play(source->name, new clunk::Source(source, false, clunk::v3<float>(), 1, 1, channels[channel].pan*0.0001));
			if(flags & DS_LOOPING){
				clunk_object->set_loop(source->name, true);
			}
		}
		if(flags & DS_QUEUE){
			std::cout<<"DS_QUEUE!!!"<<std::endl;
			
		}
		if(flags & DS_STREAM){
			std::cout<<"DS_STREAM!!!"<<std::endl;
			
		}
		channels[channel].priority = priority;
		channels[channel].flags = flags;
		channels[channel].cropos = cropos;
		channels[channel].sound = source;
		/*
		//Other sound logic for FUTURE
		//channels[channel].priority = priority;
		//channels[channel].sound = (Mix_Chunk *)lpDSB;
		//channels[channel].flags = flags;
		//Mix_PlayChannel(-1, channels[channel].sound, 0);
		if(channels[channel].sound)
			{
			if(channels[channel].priority < priority)
				{
				//ErrH.Log("D1");
				SoundStop(channel);
				channels[channel].priority = priority;
				channels[channel].flags = flags;
				//SDL_Mixer version
				//channels[channel].sound = (Mix_Chunk *)lpDSB;
				//Mix_PlayChannel(channel, channels[channel].sound, 0);
				channels[channel].sound = (clunk::Sample *)lpDSB;
				clunk_object->play(channels[channel].sound->name, new clunk::Source(channels[channel].sound, false));
				if(flags & DS_LOOPING){
					clunk_object->set_loop(channels[channel].sound->name, true);
				}
				}
			else
				{
				if(channel<20)
					SoundPlay(lpDSB, channel+10, priority, cropos, flags);
				}
			}
		else
			{
			//ErrH.Log("D2");
			channels[channel].priority = priority;
			channels[channel].flags = flags;
			//SDL_Mixer version
			//channels[channel].sound = (Mix_Chunk *)lpDSB;
			//Mix_PlayChannel(channel, channels[channel].sound, 0);
			channels[channel].sound = (clunk::Sample *)lpDSB;
			clunk_object->play(channels[channel].sound->name, new clunk::Source(channels[channel].sound, false));
			if(flags & DS_LOOPING){
				clunk_object->set_loop(channels[channel].sound->name, true);
			}
			}*/
	}
}
Exemple #17
0
func Switch()
{
    var phase = GetPhase();
  if(open)
  {
   if(GetAction() == "Open")
   {
    open = 0;
    SetAction("Closes");
    if(update)
    {
     SoundStart();
     Sound("iris_atlantis_close");
    }
	else Sound("luke1");
   }
   if(GetAction() == "Opens")
   {
    open = 0;
    SetAction("Closes");
    if(update)
    {
     SoundStart();
     Sound("iris_atlantis_close");
    }
	else Sound("luke1");
    SetPhase(20-phase);
   }
   if(GetAction() == "Closes")
   {
    return(1);
   }
   if(GetAction() == "Close")
   {
    return(1);
   }
  }
  else
  {
   if(GetAction() == "Open")
   {
    return(1);
   }
   if(GetAction() == "Opens")
   {
    return(1);
   }
   if(GetAction() == "Closes")
   {
    open = 1;
    SetAction("Opens");
    if(update)
    {
     SoundStop();
     Sound("iris_atlantis_open");
    }
	else Sound("luke1");
    SetPhase(20 - phase);
   }
   if(GetAction() == "Close")
   {
    open = 1;
    SetAction("Opens");
    if(update)
    {
     SoundStop();
     Sound("iris_atlantis_open");
    }
	else Sound("luke1");
   }
  }
  return(1);
}
Exemple #18
0
void StopEFFECT(EFFECT_VALUE EffectValue)
{
    if(!EffectInUse) return;
    SoundStop(SndData[EffectValue].channel);
    if(EngineNoise && EffectValue == EFF_DRIVING && SndData[EFF_STOP].lpDSB) StartEFFECT(EFF_STOP);
}
Exemple #19
0
long DoCommand( HWND hWindow, WPARAM wParam, LPARAM lParam )
/***********************************************************************/
{
FNAME szFileName;
LPFRAME lpFrame;
LPOBJECT lpObject, lpBase;
RECT rect, rMask, rTemp, rAll;
HWND hWnd;
STRING szString;
int i, idFileType, x, y, dx, dy;
BOOL fDoZoom, bPrint, fHasZoom;
LPSTR lpszCmdLine;
HGLOBAL hMem;
ITEMID idDataType;
DWORD dwReturn;
int NewShape;
UINT wID;

SoundStartID( wParam, NO/*bLoop*/, NULL/*hInstance*/ );
/*
	WIN16:	ID          = wParam
			ctrl handle = LOWORD(lParam)
			notify code = HIWORD(lParam)

	WIN32:	ID          = LOWORD(wParam)
			ctrl handle = lParam
			notify code = HIWORD(wParam)
*/

#ifdef WIN32
	wID = LOWORD(wParam);
#else
	wID = wParam;
#endif

switch (wID)
	{
	case IDM_EXIT:
	DeactivateTool();
	PostMessage( hWndAstral, WM_CLOSE, 0, 0L);
    Delay (750);
	break;

	case IDM_CLOSE:
	DeactivateTool();
	/* Check to see if the image needs to be saved */
	if ( !ConfirmClose(NO,NO) )
		break;
	CloseImage( NO, lpImage ); // Close the active image
	break;

	case IDM_ABOUT:
	/* Bring up the modal 'About' dialog box */
	AstralDlg( NO|2, hInstAstral, hWindow, IDD_ABOUT, DlgAboutProc);
	break;

	case IDM_NEXTPAGE:
	if ( !lpImage )
		break;
	DeactivateTool();
	SendMessage( lpImage->hWnd, WM_SYSCOMMAND, SC_NEXTWINDOW, 0L );
	break;

	case IDM_NEW:
	DeactivateTool();
	SoundStartResource( "magic01", NO, NULL );
	AstralCursor( IDC_WAIT );
	New( Control.NewWidth, Control.NewHeight, Control.NewResolution,
		Control.NewDepth );
	AstralCursor( NULL );
	break;

	case IDM_OPEN:
	DeactivateTool();
	/* Bring up the modal 'File Open' box */
	if ( !(dwReturn = DoOpenDlg( hWindow, IDD_OPEN,
		Save.FileType, szFileName, NO )) )
		break;
	idFileType = LOWORD( dwReturn );
	Save.FileType = idFileType;
	PutDefaultInt( "FileType", idFileType - IDN_TIFF );
	AstralImageLoad( idFileType, szFileName, MAYBE, YES );
	break;

	case IDM_ALTOPEN:
	DeactivateTool();
	// Command line sent from a second instance prior to it closing
	/* If the caller passed in a file name, try to load it or print it */
	if ( !(lpszCmdLine = (LPSTR)lParam) )
		break;
	HandleCommandLine( hWindow, lpszCmdLine, &bPrint );
	break;

	case IDM_SAVE:
	DeactivateTool();
	HandleSaveCommand(hWindow, wID, YES);
	break;

	case IDM_SAVEAS:
	DeactivateTool();
	HandleSaveCommand(hWindow, wID, YES);
	break;

	case IDM_SAVESPECIAL:
	DeactivateTool();
	HandleSaveCommand(hWindow, wID, YES);
	break;

	case IDM_SAVEWALLPAPER:
	DeactivateTool();
	SaveWallpaper( "CRAYOLA", NO/*fTiled*/ );
	break;

	case IDM_REVERT:
	if ( !lpImage )
		break;
	DeactivateTool();
	if ( lpImage->fUntitled ) // If the picture doesn't have a name, get out
		break;
	if ( ImgChanged(lpImage) )
		{
		/* Check to see if its OK to trash changes */
		if ( AstralOKCancel(IDS_OKTOREVERT,
				(LPSTR)lpImage->CurFile) == IDCANCEL )
			break;
		}
	lstrcpy( szFileName, lpImage->CurFile );
	idFileType = lpImage->FileType;
	fDoZoom = IsZoomed(lpImage->hWnd);
	fHasZoom = Window.fHasZoom;
	CloseImage( NO, lpImage ); // Close the active image
	if ( !AstralImageLoad( idFileType, szFileName, fDoZoom, YES ) )
		break;
	break;

	case IDM_RECALLIMAGE0:
	case IDM_RECALLIMAGE1:
	case IDM_RECALLIMAGE2:
	case IDM_RECALLIMAGE3:
	case IDM_RECALLIMAGE4:
	case IDM_RECALLIMAGE5:
	case IDM_RECALLIMAGE6:
	case IDM_RECALLIMAGE7:
	case IDM_RECALLIMAGE8:
	case IDM_RECALLIMAGE9:
	DeactivateTool();
	GetMenuString( GetMenu(hWindow), wID,
		szFileName, sizeof(szFileName), MF_BYCOMMAND );
	i = 0;
	while ( szFileName[i] && szFileName[i] != ' ' )
		i++; // Skip over the numeric id in the string (3. junk.tif)
	lstrcpy(szString, &szFileName[i+1]);
	GetRecallFileName(szString);
	AstralImageLoad( NULL, szString, MAYBE, YES );
	break;

	case IDM_PRINT:
	if ( !lpImage )
		break;
	DeactivateTool();
	AstralCursor( IDC_WAIT );
	DoPrintSizeInits();
	SoundStartResource( "print", YES, NULL );
	PrintFile( hWindow, filename(lpImage->CurFile), YES, lpImage, NULL );
	SoundStop();
	AstralCursor( NULL );
	break;

	case IDM_PRINTSETUP:
	/* Bring up the setup dialog box for the active printer */
	AstralDlg( NO|2, hInstAstral, hWindow, IDD_PRINTSETUP,
		DlgPrintSetupProc);
	break;

	case IDC_SOUND:
	SoundToggle();
	break;

	case IDM_UNDO:
	if ( !lpImage )
		break;
	DeactivateTool();
	ImgEditUndo(lpImage, YES, NO);
	break;

	case IDM_CUT:
	case IDM_COPY:
	if ( !lpImage )
		break;
	DeactivateTool();

	// Create the clipboard files from the image
	ProgressBegin(1, IDS_PROGCOPY);
	if ( !ImgWriteClipOut( lpImage, NULL, NULL, &rMask, lpImage->DataType ) )
		{
		ProgressEnd();
		Message(IDS_EMEMALLOC);
		break;
		}
	ProgressEnd();

	OpenClipboard(hWindow);
	EmptyClipboard();

	// Passing a NULL data handle in SetClipboardData() means that
	// the data will be requested in a WM_RENDERFORMAT message
	hMem = ConstructObject( lpImage,
		IsRectEmpty(&rMask)? (LPRECT)NULL : (LPRECT)&rMask );
	if ( pOLE )
		{ // Any data put on before Native will become staticly copied
		SetClipboardData( pOLE->cfNative, NULL );
		SetClipboardData( pOLE->cfOwnerLink, hMem );
		}
	SetClipboardData( CF_DIB, NULL );
	if ( Control.DoPicture )
		SetClipboardData( CF_METAFILEPICT, NULL );
	if ( Control.DoBitmap )
		SetClipboardData( CF_BITMAP, NULL );
	SetClipboardData( CF_PALETTE, NULL );
	SetClipboardData( Control.cfImage, NULL );
	if ( pOLE && wID == IDM_COPY && !lpImage->fUntitled )
		{ // ObjectLink is retrieved during a Paste Link...
		SetClipboardData( pOLE->cfObjectLink, hMem );
		}
	CloseClipboard();
	if ( wID == IDM_COPY )
		break;

	// else fall through to IDM_DELETE

	case IDM_DELETE:
	if ( !lpImage )
		break;
	{
	COLORINFO ColorInfo;

	DeactivateTool();
	ColorInfo.gray   = 255;
	SetColorInfo( &ColorInfo, &ColorInfo, CS_GRAY );
	TintFill( lpImage, &ColorInfo, 255, MM_NORMAL,
		wID == IDM_CUT ? IDS_UNDOCUT : IDS_UNDODELETE );
	}
	break;

	case IDM_PASTE:
	if ( !lpImage )
		break;

	case IDM_PASTEASNEW:
	if ( !OpenClipboard(hWndAstral) )
		{
		Message( IDS_ECLIPOPEN );
		break;
		}
	if ( !IsClipboardFormatAvailable(CF_DIB) &&
	     !IsClipboardFormatAvailable(CF_BITMAP) &&
	     !IsClipboardFormatAvailable(Control.cfImage) )
		{
		Message( IDS_ECLIPOPEN );
		CloseClipboard();
		break;
		}
	CloseClipboard();

	DeactivateTool();
	// First put clipboard contents into a file(s)
	AstralCursor(IDC_WAIT);
	if ( !PasteFromClipboard( hWindow, (wID == IDM_PASTE) /*fNeedMask*/ ) )
		{
		AstralCursor(NULL);
		Message(IDS_EMEMALLOC);
		break;
		}
	if ( wID == IDM_PASTE )
		{
		ProgressBegin(1, IDS_PROGPASTECLIP);
		TransformObjectsStart( YES/*fNewObject*/ );
        if ( ImgCreateClipInObject( lpImage, NO ) )
			;
		ProgressEnd();
		}
	else
	if ( wID == IDM_PASTEASNEW )
		{
		if ( lpFrame = AstralFrameLoad( Names.PasteImageFile, -1,
			 &idDataType, &idFileType) )
			{
			if ( NewImageWindow(
				NULL,			// lpOldFrame
				NULL,			// Name
				lpFrame, 		// lpNewFrame
				idFileType,		// lpImage->FileType
				idDataType,		// lpImage->DataType
				FALSE,			// New view?
				IMG_DOCUMENT,	// lpImage->DocumentType
				NULL,			// lpImage->ImageName
				MAYBE
				) )
					lpImage->fChanged = YES;
			}
		}
	break;

	case IDM_ESCAPE:
	if (!lpImage)
		break;
	if (lpImage->hWnd == hZoomWindow)
		break;
	if ( Tool.bActive && Tool.lpToolProc )
		DestroyProc( lpImage->hWnd, 1L );
	break;

	case IDM_SIZEUP:
	case IDM_SIZEDOWN:
	if (!Retouch.hBrush)
		break;				 
	SetFocus( hWindow ); // Take focus away from any controls
	if ( Retouch.BrushShape == IDC_BRUSHCUSTOM )
		break;
	if ( wID == IDM_SIZEUP )
    {
    	if( bHexBrush && ( Retouch.BrushSize % 2 == 0 ) && ( Retouch.BrushSize > 6 ))
    		Retouch.BrushSize += 2;
        else        
    		Retouch.BrushSize++;
    }
	else	
    {
    	if( bHexBrush && ( Retouch.BrushSize % 2 == 0 ) && ( Retouch.BrushSize > 6 )) 
    		Retouch.BrushSize -= 2;
        else        
    		Retouch.BrushSize--;
    }
	if ( Retouch.BrushSize < 1 || Retouch.BrushSize > MAX_BRUSH_SIZE )
		{
		Retouch.BrushSize = bound( Retouch.BrushSize, 1,MAX_BRUSH_SIZE);
		MessageBeep(0);
		break;
		}
	if (lpImage)
		DisplayBrush(0, 0, 0, OFF);
	SetMgxBrushSize(Retouch.hBrush, Retouch.BrushSize);
	if (lpImage && Window.hCursor == Window.hNullCursor)
		DisplayBrush(lpImage->hWnd, 32767, 32767, ON);
	if ( Tool.hRibbon )
		SetSlide( Tool.hRibbon, IDC_BRUSHSIZE, Retouch.BrushSize );
	break;

	case IDM_SHAPEUP:
	case IDM_SHAPEDOWN:
	if (!Retouch.hBrush)
		break;
	SetFocus( hWindow ); // Take focus away from any controls
	NewShape = Retouch.BrushShape;
	if ( wID == IDM_SHAPEUP )
		NewShape++;
	else	NewShape--;
	if ( NewShape > IDC_BRUSHCUSTOM )
		NewShape = IDC_BRUSHCIRCLE;
	if ( NewShape < IDC_BRUSHCIRCLE )
		NewShape = IDC_BRUSHCUSTOM;
	if (lpImage)
	 	DisplayBrush(0, 0, 0, OFF);
	if (!SetMgxBrushShape(Retouch.hBrush, NewShape, Names.CustomBrush))
		{
		NewShape = IDC_BRUSHCIRCLE;
		SetMgxBrushShape(Retouch.hBrush, NewShape, Names.CustomBrush);
		}
	Retouch.BrushShape = NewShape;
	if (lpImage && Window.hCursor == Window.hNullCursor)
	 	DisplayBrush(lpImage->hWnd, 32767, 32767, ON);
	if ( Tool.hRibbon )
		{
		CheckComboItem( Tool.hRibbon, IDC_BRUSHSHAPE, IDC_BRUSHCIRCLE,
			IDC_BRUSHCUSTOMNEW, Retouch.BrushShape );
		SendMessage( Tool.hRibbon, WM_CONTROLENABLE, 0, 0L );
		}
	break;

	case IDM_MOVEUP:
	case IDM_MOVEDOWN:
	case IDM_MOVELEFT:
	case IDM_MOVERIGHT:
	if (!lpImage)
		break;
	lpBase = ImgGetBase(lpImage);
	if (ImgGetSelObject(lpImage, NULL) == lpBase)
		break;
	dx = dy = 0;
	if (wID == IDM_MOVEUP)
		--dy;
	if (wID == IDM_MOVEDOWN)
		++dy;
	if (wID == IDM_MOVELEFT)
		--dx;
	if (wID == IDM_MOVERIGHT)
		++dx;
	lpObject = NULL;
	while (lpObject = ImgGetSelObject(lpImage, lpObject))
		{
		rect = lpObject->rObject;
		OffsetRect(&rect, dx, dy);
		if (!AstralIntersectRect(&rTemp, &lpBase->rObject, &rect))
			break;
		}
	if (lpObject)
		break;
	AstralSetRectEmpty(&rAll);
	lpObject = NULL;
	while (lpObject = ImgGetSelObject(lpImage, lpObject))
		{
		rect = lpObject->rObject;
		OffsetRect(&lpObject->rObject, dx, dy);
		AstralUnionRect(&rAll, &rAll, &lpObject->rObject);
		if (!lpObject->Pixmap.fNewFrame &&
				EqualRect(&rect, &lpObject->rUndoObject))
			lpObject->rUndoObject = lpObject->rObject;
		UpdateImage(&rect, TRUE);
		UpdateImage(&lpObject->rObject, TRUE);
		}
	if (wID == IDM_MOVEUP)
		{
		x = (rAll.left + rAll.right)/2;
		y = rAll.top;
		}
	else
	if (wID == IDM_MOVEDOWN)
		{
		x = (rAll.left + rAll.right)/2;
		y = rAll.bottom;
		}
	else
	if (wID == IDM_MOVELEFT)
		{
		x = rAll.left;
		y = (rAll.top + rAll.bottom)/2;
		}
	else
	if (wID == IDM_MOVERIGHT)
		{
		x = rAll.right;
		y = (rAll.top + rAll.bottom)/2;
		}
	File2Display(&x, &y);
	AutoScroll(lpImage->hWnd, x, y);
	AstralUpdateWindow(lpImage->hWnd);
	DisplayInfo(-1, &rAll);
	break;

	case IDM_LASTTOOL:
	DeactivateTool();
	if ( Tool.idLast && (hWnd = AstralDlgGet(IDD_MAIN)) )
		SendMessage( hWnd, WM_COMMAND, Tool.idLast, 2L);
	break;

	case IDM_PREF:
	// prevent problems if running animations and they change
	// the wave mix dll setting in preferences
	StopAnimation();
	AstralDlg( NO|2, hInstAstral, hWindow, IDD_PREF, DlgPrefProc );
	break;

	case IDC_VIEWLAST: // duplicate of function in the view ribbon
	if ( !lpImage )
		break;
	RevertLastView();
	break;

//	case IDC_VIEWFULL: // duplicate of function in the view ribbon
//	if ( !lpImage )
//		break;
//	AstralDlg( NO, hInstAstral, hWindow, IDD_VIEWFULL, DlgFullScreenViewProc );
//	break;

	case IDC_VIEWALL: // duplicate of function in the view ribbon
	if ( !lpImage )
		break;
	ViewAll();
	break;

	case IDC_ZOOMIN: // duplicate of function in the view ribbon
	if ( !lpImage )
		break;

	if (!lpImage->lpDisplay)
		break;

	if (!lpImage->lpDisplay->ViewPercentage)
		break;

	x = ( lpImage->lpDisplay->FileRect.left
			+ lpImage->lpDisplay->FileRect.right ) / 2;
	y = ( lpImage->lpDisplay->FileRect.top
			+ lpImage->lpDisplay->FileRect.bottom ) / 2;
	SaveLastView();
	Zoom(x,y, +100, YES, ( View.ZoomWindow ^ CONTROL ) );
	break;

	case IDC_ZOOMOUT: // duplicate of function in the view ribbon
	if ( !lpImage )
		break;

	if (!lpImage->lpDisplay)
		break;

	if (!lpImage->lpDisplay->ViewPercentage)
		break;

	x = ( lpImage->lpDisplay->FileRect.left
			+ lpImage->lpDisplay->FileRect.right ) / 2;
	y = ( lpImage->lpDisplay->FileRect.top
			+ lpImage->lpDisplay->FileRect.bottom ) / 2;
	SaveLastView();
	Zoom(x,y, -100, YES,( View.ZoomWindow ^ CONTROL ) );
	break;

	case IDM_HELP:
	Control.Hints = !Control.Hints;
	PutDefInt (Control.Hints,Control.Hints);
	break;

	default:
	return( FALSE );
	}

return( TRUE );
}