This commit is contained in:
FluorescentCIAAfricanAmerican
2020-04-22 12:56:21 -04:00
commit 3bf9df6b27
15370 changed files with 5489726 additions and 0 deletions
+584
View File
@@ -0,0 +1,584 @@
//========= Copyright Valve Corporation, All rights reserved. ============//
// CWMPEventDispatch.cpp : Implementation of the event dispatcher
//
#include "CWMPEventDispatch.h"
#include "CWMPHost.h"
extern HWND g_hBlackFadingWindow;
extern CComPtr<IWMPPlayer> g_spWMPPlayer;
extern CWMPHost* g_pFrame;
extern double g_timeAtFadeStart;
extern bool g_bFadeIn;
bool g_bFadeWindowTriggered = false;
bool IsFullScreen();
bool SetFullScreen( bool bWantToBeFullscreen );
bool IsVideoPlaying();
void PlayVideo( bool bPlay );
bool ShowFadeWindow( bool bShow );
void LogPlayerEvent( EventType_t e, float pos );
void LogPlayerEvent( EventType_t e );
HRESULT CWMPEventDispatch::Invoke(
DISPID dispIdMember,
REFIID riid,
LCID lcid,
WORD wFlags,
DISPPARAMS FAR* pDispParams,
VARIANT FAR* pVarResult,
EXCEPINFO FAR* pExcepInfo,
unsigned int FAR* puArgErr )
{
if (!pDispParams)
return E_POINTER;
if (pDispParams->cNamedArgs != 0)
return DISP_E_NONAMEDARGS;
HRESULT hr = DISP_E_MEMBERNOTFOUND;
switch (dispIdMember)
{
case DISPID_WMPCOREEVENT_OPENSTATECHANGE:
OpenStateChange(pDispParams->rgvarg[0].lVal /* NewState */ );
break;
case DISPID_WMPCOREEVENT_PLAYSTATECHANGE:
PlayStateChange(pDispParams->rgvarg[0].lVal /* NewState */);
break;
case DISPID_WMPCOREEVENT_AUDIOLANGUAGECHANGE:
AudioLanguageChange(pDispParams->rgvarg[0].lVal /* LangID */);
break;
case DISPID_WMPCOREEVENT_STATUSCHANGE:
StatusChange();
break;
case DISPID_WMPCOREEVENT_SCRIPTCOMMAND:
ScriptCommand(pDispParams->rgvarg[1].bstrVal /* scType */, pDispParams->rgvarg[0].bstrVal /* Param */ );
break;
case DISPID_WMPCOREEVENT_NEWSTREAM:
NewStream();
break;
case DISPID_WMPCOREEVENT_DISCONNECT:
Disconnect(pDispParams->rgvarg[0].lVal /* Result */ );
break;
case DISPID_WMPCOREEVENT_BUFFERING:
Buffering(pDispParams->rgvarg[0].boolVal /* Start */);
break;
case DISPID_WMPCOREEVENT_ERROR:
Error();
break;
case DISPID_WMPCOREEVENT_WARNING:
Warning(pDispParams->rgvarg[1].lVal /* WarningType */, pDispParams->rgvarg[0].lVal /* Param */, pDispParams->rgvarg[2].bstrVal /* Description */);
break;
case DISPID_WMPCOREEVENT_ENDOFSTREAM:
EndOfStream(pDispParams->rgvarg[0].lVal /* Result */ );
break;
case DISPID_WMPCOREEVENT_POSITIONCHANGE:
PositionChange(pDispParams->rgvarg[1].dblVal /* oldPosition */, pDispParams->rgvarg[0].dblVal /* newPosition */);
break;
case DISPID_WMPCOREEVENT_MARKERHIT:
MarkerHit(pDispParams->rgvarg[0].lVal /* MarkerNum */);
break;
case DISPID_WMPCOREEVENT_DURATIONUNITCHANGE:
DurationUnitChange(pDispParams->rgvarg[0].lVal /* NewDurationUnit */);
break;
case DISPID_WMPCOREEVENT_CDROMMEDIACHANGE:
CdromMediaChange(pDispParams->rgvarg[0].lVal /* CdromNum */);
break;
case DISPID_WMPCOREEVENT_PLAYLISTCHANGE:
PlaylistChange(pDispParams->rgvarg[1].pdispVal /* Playlist */, (WMPPlaylistChangeEventType) pDispParams->rgvarg[0].lVal /* change */);
break;
case DISPID_WMPCOREEVENT_CURRENTPLAYLISTCHANGE:
CurrentPlaylistChange((WMPPlaylistChangeEventType) pDispParams->rgvarg[0].lVal /* change */);
break;
case DISPID_WMPCOREEVENT_CURRENTPLAYLISTITEMAVAILABLE:
CurrentPlaylistItemAvailable(pDispParams->rgvarg[0].bstrVal /* bstrItemName */);
break;
case DISPID_WMPCOREEVENT_MEDIACHANGE:
MediaChange(pDispParams->rgvarg[0].pdispVal /* Item */);
break;
case DISPID_WMPCOREEVENT_CURRENTMEDIAITEMAVAILABLE:
CurrentMediaItemAvailable(pDispParams->rgvarg[0].bstrVal /* bstrItemName */);
break;
case DISPID_WMPCOREEVENT_CURRENTITEMCHANGE:
CurrentItemChange(pDispParams->rgvarg[0].pdispVal /* pdispMedia */);
break;
case DISPID_WMPCOREEVENT_MEDIACOLLECTIONCHANGE:
MediaCollectionChange();
break;
case DISPID_WMPCOREEVENT_MEDIACOLLECTIONATTRIBUTESTRINGADDED:
MediaCollectionAttributeStringAdded(pDispParams->rgvarg[1].bstrVal /* bstrAttribName */, pDispParams->rgvarg[0].bstrVal /* bstrAttribVal */ );
break;
case DISPID_WMPCOREEVENT_MEDIACOLLECTIONATTRIBUTESTRINGREMOVED:
MediaCollectionAttributeStringRemoved(pDispParams->rgvarg[1].bstrVal /* bstrAttribName */, pDispParams->rgvarg[0].bstrVal /* bstrAttribVal */ );
break;
case DISPID_WMPCOREEVENT_MEDIACOLLECTIONATTRIBUTESTRINGCHANGED:
MediaCollectionAttributeStringChanged(pDispParams->rgvarg[2].bstrVal /* bstrAttribName */, pDispParams->rgvarg[1].bstrVal /* bstrOldAttribVal */, pDispParams->rgvarg[0].bstrVal /* bstrNewAttribVal */);
break;
case DISPID_WMPCOREEVENT_PLAYLISTCOLLECTIONCHANGE:
PlaylistCollectionChange();
break;
case DISPID_WMPCOREEVENT_PLAYLISTCOLLECTIONPLAYLISTADDED:
PlaylistCollectionPlaylistAdded(pDispParams->rgvarg[0].bstrVal /* bstrPlaylistName */ );
break;
case DISPID_WMPCOREEVENT_PLAYLISTCOLLECTIONPLAYLISTREMOVED:
PlaylistCollectionPlaylistRemoved(pDispParams->rgvarg[0].bstrVal /* bstrPlaylistName */ );
break;
case DISPID_WMPCOREEVENT_PLAYLISTCOLLECTIONPLAYLISTSETASDELETED:
PlaylistCollectionPlaylistSetAsDeleted(pDispParams->rgvarg[1].bstrVal /* bstrPlaylistName */, pDispParams->rgvarg[0].boolVal /* varfIsDeleted */);
break;
case DISPID_WMPCOREEVENT_MODECHANGE:
ModeChange(pDispParams->rgvarg[1].bstrVal /* ModeName */, pDispParams->rgvarg[0].boolVal /* NewValue */);
break;
case DISPID_WMPCOREEVENT_MEDIAERROR:
MediaError(pDispParams->rgvarg[0].pdispVal /* pMediaObject */);
break;
case DISPID_WMPCOREEVENT_OPENPLAYLISTSWITCH:
OpenPlaylistSwitch(pDispParams->rgvarg[0].pdispVal /* pItem */);
break;
case DISPID_WMPCOREEVENT_DOMAINCHANGE:
DomainChange(pDispParams->rgvarg[0].bstrVal /* strDomain */);
break;
case DISPID_WMPOCXEVENT_SWITCHEDTOPLAYERAPPLICATION:
SwitchedToPlayerApplication();
break;
case DISPID_WMPOCXEVENT_SWITCHEDTOCONTROL:
SwitchedToControl();
break;
case DISPID_WMPOCXEVENT_PLAYERDOCKEDSTATECHANGE:
PlayerDockedStateChange();
break;
case DISPID_WMPOCXEVENT_PLAYERRECONNECT:
PlayerReconnect();
break;
case DISPID_WMPOCXEVENT_CLICK:
Click(pDispParams->rgvarg[3].iVal /* nButton */, pDispParams->rgvarg[2].iVal /* nShiftState */, pDispParams->rgvarg[1].lVal /* fX */, pDispParams->rgvarg[0].lVal /* fY */);
break;
case DISPID_WMPOCXEVENT_DOUBLECLICK:
DoubleClick(pDispParams->rgvarg[3].iVal /* nButton */, pDispParams->rgvarg[2].iVal /* nShiftState */, pDispParams->rgvarg[1].lVal /* fX */, pDispParams->rgvarg[0].lVal /* fY */);
break;
case DISPID_WMPOCXEVENT_KEYDOWN:
KeyDown(pDispParams->rgvarg[1].iVal /* nKeyCode */, pDispParams->rgvarg[0].iVal /* nShiftState */);
break;
case DISPID_WMPOCXEVENT_KEYPRESS:
KeyPress(pDispParams->rgvarg[0].iVal /* nKeyAscii */);
break;
case DISPID_WMPOCXEVENT_KEYUP:
KeyUp(pDispParams->rgvarg[1].iVal /* nKeyCode */, pDispParams->rgvarg[0].iVal /* nShiftState */);
break;
case DISPID_WMPOCXEVENT_MOUSEDOWN:
MouseDown(pDispParams->rgvarg[3].iVal /* nButton */, pDispParams->rgvarg[2].iVal /* nShiftState */, pDispParams->rgvarg[1].lVal /* fX */, pDispParams->rgvarg[0].lVal /* fY */);
break;
case DISPID_WMPOCXEVENT_MOUSEMOVE:
MouseMove(pDispParams->rgvarg[3].iVal /* nButton */, pDispParams->rgvarg[2].iVal /* nShiftState */, pDispParams->rgvarg[1].lVal /* fX */, pDispParams->rgvarg[0].lVal /* fY */);
break;
case DISPID_WMPOCXEVENT_MOUSEUP:
MouseUp(pDispParams->rgvarg[3].iVal /* nButton */, pDispParams->rgvarg[2].iVal /* nShiftState */, pDispParams->rgvarg[1].lVal /* fX */, pDispParams->rgvarg[0].lVal /* fY */);
break;
}
return( hr );
}
// Sent when the control changes OpenState
void CWMPEventDispatch::OpenStateChange(long NewState)
{
return;
}
// Sent when the control changes PlayState
void CWMPEventDispatch::PlayStateChange(long NewState)
{
WMPPlayState playstate;
if ( g_spWMPPlayer->get_playState( &playstate ) == S_OK )
{
switch ( playstate )
{
case wmppsPlaying:
{
static bool s_first = true;
if ( s_first )
{
s_first = false;
LogPlayerEvent( ET_MEDIABEGIN );
SetFullScreen( true );
ShowFadeWindow( false );
}
else
{
LogPlayerEvent( ET_PLAY );
}
break;
}
case wmppsPaused:
LogPlayerEvent( ET_PAUSE );
break;
case wmppsStopped:
LogPlayerEvent( ET_STOP );
break;
case wmppsMediaEnded:
LogPlayerEvent( ET_MEDIAEND );
if ( IsFullScreen() && !g_bFadeWindowTriggered )
{
g_bFadeWindowTriggered = true;
ShowFadeWindow( true );
}
break;
}
}
}
// Sent when the audio language changes
void CWMPEventDispatch::AudioLanguageChange(long LangID)
{
return;
}
// Sent when the status string changes
void CWMPEventDispatch::StatusChange()
{
}
// Sent when a synchronized command or URL is received
void CWMPEventDispatch::ScriptCommand(BSTR scType,BSTR Param)
{
return;
}
// Sent when a new stream is encountered (obsolete)
void CWMPEventDispatch::NewStream()
{
return;
}
// Sent when the control is disconnected from the server (obsolete)
void CWMPEventDispatch:: Disconnect(long Result )
{
return;
}
// Sent when the control begins or ends buffering
void CWMPEventDispatch:: Buffering(VARIANT_BOOL Start)
{
return;
}
// Sent when the control has an error condition
void CWMPEventDispatch::Error()
{
return;
}
// Sent when the control has an warning condition (obsolete)
void CWMPEventDispatch::Warning(long WarningType, long Param, BSTR Description)
{
return;
}
// Sent when the media has reached end of stream
void CWMPEventDispatch::EndOfStream(long Result)
{
return;
}
// Indicates that the current position of the movie has changed
void CWMPEventDispatch::PositionChange(double oldPosition,double newPosition)
{
LogPlayerEvent( ET_SCRUBFROM, ( float )oldPosition );
LogPlayerEvent( ET_SCRUBTO, ( float )newPosition );
}
// Sent when a marker is reached
void CWMPEventDispatch::MarkerHit(long MarkerNum )
{
return;
}
// Indicates that the unit used to express duration and position has changed
void CWMPEventDispatch::DurationUnitChange(long NewDurationUnit)
{
return;
}
// Indicates that the CD ROM media has changed
void CWMPEventDispatch::CdromMediaChange(long CdromNum)
{
return;
}
// Sent when a playlist changes
void CWMPEventDispatch::PlaylistChange(IDispatch * Playlist,WMPPlaylistChangeEventType change)
{
return;
}
// Sent when the current playlist changes
void CWMPEventDispatch::CurrentPlaylistChange(WMPPlaylistChangeEventType change )
{
return;
}
// Sent when a current playlist item becomes available
void CWMPEventDispatch::CurrentPlaylistItemAvailable(BSTR bstrItemName)
{
return;
}
// Sent when a media object changes
void CWMPEventDispatch::MediaChange(IDispatch * Item)
{
return;
}
// Sent when a current media item becomes available
void CWMPEventDispatch::CurrentMediaItemAvailable(BSTR bstrItemName)
{
return;
}
// Sent when the item selection on the current playlist changes
void CWMPEventDispatch::CurrentItemChange(IDispatch *pdispMedia)
{
return;
}
// Sent when the media collection needs to be requeried
void CWMPEventDispatch::MediaCollectionChange()
{
return;
}
// Sent when an attribute string is added in the media collection
void CWMPEventDispatch::MediaCollectionAttributeStringAdded(BSTR bstrAttribName, BSTR bstrAttribVal)
{
return;
}
// Sent when an attribute string is removed from the media collection
void CWMPEventDispatch::MediaCollectionAttributeStringRemoved(BSTR bstrAttribName, BSTR bstrAttribVal)
{
return;
}
// Sent when an attribute string is changed in the media collection
void CWMPEventDispatch::MediaCollectionAttributeStringChanged(BSTR bstrAttribName, BSTR bstrOldAttribVal, BSTR bstrNewAttribVal)
{
return;
}
// Sent when playlist collection needs to be requeried
void CWMPEventDispatch::PlaylistCollectionChange()
{
return;
}
// Sent when a playlist is added to the playlist collection
void CWMPEventDispatch::PlaylistCollectionPlaylistAdded(BSTR bstrPlaylistName)
{
return;
}
// Sent when a playlist is removed from the playlist collection
void CWMPEventDispatch::PlaylistCollectionPlaylistRemoved(BSTR bstrPlaylistName)
{
return;
}
// Sent when a playlist has been set or reset as deleted
void CWMPEventDispatch::PlaylistCollectionPlaylistSetAsDeleted(BSTR bstrPlaylistName, VARIANT_BOOL varfIsDeleted)
{
return;
}
// Playlist playback mode has changed
void CWMPEventDispatch::ModeChange(BSTR ModeName, VARIANT_BOOL NewValue)
{
return;
}
// Sent when the media object has an error condition
void CWMPEventDispatch::MediaError(IDispatch * pMediaObject)
{
while ( ShowCursor( TRUE ) < 0 )
;
ShowWindow( g_hBlackFadingWindow, SW_HIDE );
if ( g_pFrame )
{
g_pFrame->ShowWindow( SW_HIDE );
}
CComPtr< IWMPMedia > spWMPMedia;
if ( pMediaObject )
{
pMediaObject->QueryInterface( &spWMPMedia );
}
if ( spWMPMedia )
{
BSTR bstr;
spWMPMedia->get_sourceURL( &bstr );
char str[ 1024 ];
sprintf( str, "Unable to open media: %s\n", CW2T( bstr ) );
MessageBox( NULL, str, "Media Error", MB_OK | MB_ICONERROR );
}
else
{
MessageBox( NULL, "Media Error", "Media Error", MB_OK | MB_ICONERROR );
}
g_pFrame->PostMessage( WM_CLOSE );
}
// Current playlist switch with no open state change
void CWMPEventDispatch::OpenPlaylistSwitch(IDispatch *pItem)
{
return;
}
// Sent when the current DVD domain changes
void CWMPEventDispatch::DomainChange(BSTR strDomain)
{
return;
}
// Sent when display switches to player application
void CWMPEventDispatch::SwitchedToPlayerApplication()
{
}
// Sent when display switches to control
void CWMPEventDispatch::SwitchedToControl()
{
}
// Sent when the player docks or undocks
void CWMPEventDispatch::PlayerDockedStateChange()
{
}
// Sent when the OCX reconnects to the player
void CWMPEventDispatch::PlayerReconnect()
{
}
// Occurs when a user clicks the mouse
void CWMPEventDispatch::Click( short nButton, short nShiftState, long fX, long fY )
{
if ( IsFullScreen() )
{
SetFullScreen( false );
}
}
// Occurs when a user double-clicks the mouse
void CWMPEventDispatch::DoubleClick( short nButton, short nShiftState, long fX, long fY )
{
// the controls are just drawn into the main window, wheras the video has its own window
// this check allows us to only fullscreen on doubleclick within the video area
POINT pt = { fX, fY };
HWND hWnd = g_pFrame->ChildWindowFromPoint( pt );
if ( ChildWindowFromPoint( hWnd, pt ) != hWnd )
{
SetFullScreen( !IsFullScreen() );
}
}
// Occurs when a key is pressed
void CWMPEventDispatch::KeyDown( short nKeyCode, short nShiftState )
{
#if 1
if ( !g_pFrame )
return;
BOOL rval;
if ( nShiftState & 4 ) // 4 is the alt keymask
{
g_pFrame->OnSysKeyDown( WM_KEYDOWN, nKeyCode, 0, rval );
}
else
{
g_pFrame->OnKeyDown( WM_KEYDOWN, nKeyCode, 0, rval );
}
#endif
}
// Occurs when a key is pressed and released
void CWMPEventDispatch::KeyPress( short nKeyAscii )
{
return;
}
// Occurs when a key is released
void CWMPEventDispatch::KeyUp( short nKeyCode, short nShiftState )
{
return;
}
// Occurs when a mouse button is pressed
void CWMPEventDispatch::MouseDown( short nButton, short nShiftState, long fX, long fY )
{
}
// Occurs when a mouse pointer is moved
void CWMPEventDispatch::MouseMove( short nButton, short nShiftState, long fX, long fY )
{
return;
}
// Occurs when a mouse button is released
void CWMPEventDispatch::MouseUp( short nButton, short nShiftState, long fX, long fY )
{
}
+102
View File
@@ -0,0 +1,102 @@
//========= Copyright Valve Corporation, All rights reserved. ============//
// CWMPEventDispatch.h : Declaration of the event dispatcher
//
#pragma once
#include "stdafx.h"
// if these files aren't found, set your path to include the wmp sdk include directory
// download the sdk from http://www.microsoft.com/windows/windowsmedia/mp10/sdk.aspx
#include "wmpids.h"
#include "wmp.h"
class CWMPEventDispatch:
public CComObjectRootEx<CComSingleThreadModel>,
public IWMPEvents,
public _WMPOCXEvents
{
public:
BEGIN_COM_MAP(CWMPEventDispatch)
COM_INTERFACE_ENTRY(_WMPOCXEvents)
COM_INTERFACE_ENTRY(IWMPEvents)
COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()
// IDispatch methods
STDMETHOD(GetIDsOfNames)( REFIID riid,
OLECHAR FAR *FAR *rgszNames,
unsigned int cNames,
LCID lcid,
DISPID FAR *rgDispId )
{ return( E_NOTIMPL ); }
STDMETHOD(GetTypeInfo)( unsigned int iTInfo,
LCID lcid,
ITypeInfo FAR *FAR *ppTInfo )
{ return( E_NOTIMPL ); }
STDMETHOD(GetTypeInfoCount)( unsigned int FAR *pctinfo )
{
return( E_NOTIMPL );
}
STDMETHOD(Invoke)( DISPID dispIdMember,
REFIID riid,
LCID lcid,
WORD wFlags,
DISPPARAMS FAR* pDispParams,
VARIANT FAR* pVarResult,
EXCEPINFO FAR* pExcepInfo,
unsigned int FAR* puArgErr );
// IWMPEvents methods
void STDMETHODCALLTYPE OpenStateChange( long NewState );
void STDMETHODCALLTYPE PlayStateChange( long NewState );
void STDMETHODCALLTYPE AudioLanguageChange( long LangID );
void STDMETHODCALLTYPE StatusChange();
void STDMETHODCALLTYPE ScriptCommand( BSTR scType, BSTR Param );
void STDMETHODCALLTYPE NewStream();
void STDMETHODCALLTYPE Disconnect( long Result );
void STDMETHODCALLTYPE Buffering( VARIANT_BOOL Start );
void STDMETHODCALLTYPE Error();
void STDMETHODCALLTYPE Warning( long WarningType, long Param, BSTR Description );
void STDMETHODCALLTYPE EndOfStream( long Result );
void STDMETHODCALLTYPE PositionChange( double oldPosition, double newPosition);
void STDMETHODCALLTYPE MarkerHit( long MarkerNum );
void STDMETHODCALLTYPE DurationUnitChange( long NewDurationUnit );
void STDMETHODCALLTYPE CdromMediaChange( long CdromNum );
void STDMETHODCALLTYPE PlaylistChange( IDispatch * Playlist, WMPPlaylistChangeEventType change );
void STDMETHODCALLTYPE CurrentPlaylistChange( WMPPlaylistChangeEventType change );
void STDMETHODCALLTYPE CurrentPlaylistItemAvailable( BSTR bstrItemName );
void STDMETHODCALLTYPE MediaChange( IDispatch * Item );
void STDMETHODCALLTYPE CurrentMediaItemAvailable( BSTR bstrItemName );
void STDMETHODCALLTYPE CurrentItemChange( IDispatch *pdispMedia);
void STDMETHODCALLTYPE MediaCollectionChange();
void STDMETHODCALLTYPE MediaCollectionAttributeStringAdded( BSTR bstrAttribName, BSTR bstrAttribVal );
void STDMETHODCALLTYPE MediaCollectionAttributeStringRemoved( BSTR bstrAttribName, BSTR bstrAttribVal );
void STDMETHODCALLTYPE MediaCollectionAttributeStringChanged( BSTR bstrAttribName, BSTR bstrOldAttribVal, BSTR bstrNewAttribVal);
void STDMETHODCALLTYPE PlaylistCollectionChange();
void STDMETHODCALLTYPE PlaylistCollectionPlaylistAdded( BSTR bstrPlaylistName);
void STDMETHODCALLTYPE PlaylistCollectionPlaylistRemoved( BSTR bstrPlaylistName);
void STDMETHODCALLTYPE PlaylistCollectionPlaylistSetAsDeleted( BSTR bstrPlaylistName, VARIANT_BOOL varfIsDeleted);
void STDMETHODCALLTYPE ModeChange( BSTR ModeName, VARIANT_BOOL NewValue);
void STDMETHODCALLTYPE MediaError( IDispatch * pMediaObject);
void STDMETHODCALLTYPE OpenPlaylistSwitch( IDispatch *pItem );
void STDMETHODCALLTYPE DomainChange( BSTR strDomain);
void STDMETHODCALLTYPE SwitchedToPlayerApplication();
void STDMETHODCALLTYPE SwitchedToControl();
void STDMETHODCALLTYPE PlayerDockedStateChange();
void STDMETHODCALLTYPE PlayerReconnect();
void STDMETHODCALLTYPE Click( short nButton, short nShiftState, long fX, long fY );
void STDMETHODCALLTYPE DoubleClick( short nButton, short nShiftState, long fX, long fY );
void STDMETHODCALLTYPE KeyDown( short nKeyCode, short nShiftState );
void STDMETHODCALLTYPE KeyPress( short nKeyAscii );
void STDMETHODCALLTYPE KeyUp( short nKeyCode, short nShiftState );
void STDMETHODCALLTYPE MouseDown( short nButton, short nShiftState, long fX, long fY );
void STDMETHODCALLTYPE MouseMove( short nButton, short nShiftState, long fX, long fY );
void STDMETHODCALLTYPE MouseUp( short nButton, short nShiftState, long fX, long fY );
};
typedef CComObject<CWMPEventDispatch> CComWMPEventDispatch;
+603
View File
@@ -0,0 +1,603 @@
//========= Copyright Valve Corporation, All rights reserved. ============//
// CWMPHost.cpp : Implementation of the CWMPHost
//
#include "stdafx.h"
#include "CWMPHost.h"
#include <cstdio>
#include <assert.h>
#include <string>
extern HWND g_hBlackFadingWindow;
extern CWMPHost*g_pFrame;
extern LPTSTR g_lpCommandLine;
extern bool g_bFrameCreated;
extern double g_timeAtFadeStart;
extern bool g_bFadeIn;
extern bool g_bFadeWindowTriggered;
extern std::string g_URL;
bool ShowFadeWindow( bool bShow );
void LogPlayerEvent( EventType_t e, float pos );
CComPtr<IWMPPlayer> g_spWMPPlayer;
bool g_bWantToBeFullscreen = false;
bool g_bPlayOnRestore = false;
int g_desiredVideoScaleMode = ID_STRETCH_TO_FIT;
#define MAX_STRING 1024
bool FAILMSG(HRESULT hr)
{
if (FAILED(hr))
{
TCHAR szError[MAX_STRING];
::wsprintf(szError, _T("Error code = %08X"), hr);
::MessageBox(NULL, szError, _T("Error"), MB_OK | MB_ICONERROR);
}
return FAILED(hr);
}
void LogPlayerEvent( EventType_t e )
{
double dpos = 0.0f;
CComPtr<IWMPControls> spWMPControls;
if ( g_spWMPPlayer )
{
g_spWMPPlayer->get_controls(&spWMPControls);
if ( spWMPControls )
{
spWMPControls->get_currentPosition( &dpos );
}
}
LogPlayerEvent( e, ( float )dpos );
}
bool IsStretchedToFit()
{
if ( !g_spWMPPlayer )
return false;
CComPtr< IWMPPlayer2 > spWMPPlayer2;
g_spWMPPlayer.QueryInterface( &spWMPPlayer2 );
if ( !spWMPPlayer2 )
return false;
VARIANT_BOOL vbStretchToFit = VARIANT_FALSE;
spWMPPlayer2->get_stretchToFit( &vbStretchToFit );
return vbStretchToFit == VARIANT_TRUE;
}
bool SetVideoScaleMode( int videoScaleMode )
{
g_desiredVideoScaleMode = videoScaleMode;
if ( !g_spWMPPlayer )
return false;
long width = 0, height = 0;
CComPtr<IWMPMedia> spWMPMedia;
g_spWMPPlayer->get_currentMedia( &spWMPMedia );
if ( spWMPMedia )
{
spWMPMedia->get_imageSourceWidth ( &width );
spWMPMedia->get_imageSourceHeight( &height );
}
VARIANT_BOOL vbStretchToFit = VARIANT_FALSE;
switch ( videoScaleMode )
{
case ID_HALF_SIZE:
// TODO - set video player size
break;
case ID_FULL_SIZE:
// TODO - set video player size
break;
case ID_DOUBLE_SIZE:
// TODO - set video player size
break;
case ID_STRETCH_TO_FIT:
vbStretchToFit = VARIANT_TRUE;
break;
default:
return false;
}
CComPtr< IWMPPlayer2 > spWMPPlayer2;
g_spWMPPlayer.QueryInterface( &spWMPPlayer2 );
if ( !spWMPPlayer2 )
return false;
bool bStretchToFit = vbStretchToFit == VARIANT_TRUE;
if ( bStretchToFit == IsStretchedToFit() )
return true;
spWMPPlayer2->put_stretchToFit( vbStretchToFit );
return bStretchToFit == IsStretchedToFit();
}
bool IsFullScreen()
{
if ( !g_spWMPPlayer )
return false;
VARIANT_BOOL vbFullscreen = VARIANT_TRUE;
g_spWMPPlayer->get_fullScreen( &vbFullscreen );
return vbFullscreen == VARIANT_TRUE;
}
bool SetFullScreen( bool bWantToBeFullscreen )
{
g_bWantToBeFullscreen = bWantToBeFullscreen;
if ( !g_spWMPPlayer )
return false;
LogPlayerEvent( bWantToBeFullscreen ? ET_MAXIMIZE : ET_RESTORE );
bool bIsFullscreen = IsFullScreen();
CComPtr<IWMPPlayer2> spWMPPlayer2;
HRESULT hr = g_spWMPPlayer.QueryInterface(&spWMPPlayer2);
if ( hr != S_OK )
{
assert( spWMPPlayer2 == NULL ); // the MS documentation claims this shouldn't happen, but it does...
spWMPPlayer2 = NULL;
}
if ( spWMPPlayer2 )
{
VARIANT_BOOL vbStretch = VARIANT_TRUE;
spWMPPlayer2->get_stretchToFit( &vbStretch );
bool bStretch = vbStretch == VARIANT_TRUE;
if ( bStretch != g_bWantToBeFullscreen )
{
bIsFullscreen = !g_bWantToBeFullscreen;
}
}
if ( g_bWantToBeFullscreen == bIsFullscreen )
return true;
if ( g_bWantToBeFullscreen )
{
g_spWMPPlayer->put_uiMode(L"none");
g_spWMPPlayer->put_fullScreen(VARIANT_TRUE);
if ( spWMPPlayer2 )
{
spWMPPlayer2->put_stretchToFit( VARIANT_TRUE );
}
while ( ShowCursor( FALSE ) >= 0 )
;
}
else
{
g_spWMPPlayer->put_fullScreen(VARIANT_FALSE);
g_spWMPPlayer->put_uiMode(L"full");
if ( spWMPPlayer2 )
{
spWMPPlayer2->put_stretchToFit( g_desiredVideoScaleMode == ID_STRETCH_TO_FIT ? VARIANT_TRUE : VARIANT_FALSE );
}
g_pFrame->ShowWindow( SW_RESTORE );
while ( ShowCursor( TRUE ) < 0 )
;
}
bIsFullscreen = IsFullScreen();
if ( bIsFullscreen != g_bWantToBeFullscreen )
{
g_bWantToBeFullscreen = bIsFullscreen;
OutputDebugString( "SetFullScreen FAILED!\n" );
return false;
}
if ( spWMPPlayer2 )
{
if ( g_bWantToBeFullscreen )
{
VARIANT_BOOL vbStretch = VARIANT_TRUE;
spWMPPlayer2->get_stretchToFit( &vbStretch );
if ( vbStretch != VARIANT_TRUE )
{
OutputDebugString( "SetFullScreen FAILED to set stretchToFit!\n" );
return false;
}
}
}
return true;
}
bool IsVideoPlaying()
{
WMPPlayState playState;
g_spWMPPlayer->get_playState(&playState);
return playState == wmppsPlaying;
}
void PlayVideo( bool bPlay )
{
CComPtr<IWMPControls> spWMPControls;
g_spWMPPlayer->get_controls(&spWMPControls);
if ( spWMPControls )
{
if ( bPlay )
{
spWMPControls->play();
}
else
{
spWMPControls->pause();
}
}
}
/////////////////////////////////////////////////////////////////////////////
// CWMPHost
LRESULT CWMPHost::OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
AtlAxWinInit();
CComPtr<IAxWinHostWindow> spHost;
CComPtr<IConnectionPointContainer> spConnectionContainer;
CComWMPEventDispatch *pEventListener = NULL;
CComPtr<IWMPEvents> spEventListener;
HRESULT hr;
RECT rcClient;
m_dwAdviseCookie = 0;
m_hPopupMenu = 0;
// create window
GetClientRect(&rcClient);
m_wndView.Create(m_hWnd, rcClient, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN, WS_EX_CLIENTEDGE);
if (NULL == m_wndView.m_hWnd)
goto FAILURE;
// load OCX in window
hr = m_wndView.QueryHost(&spHost);
if (FAILMSG(hr))
goto FAILURE;
hr = spHost->CreateControl(CComBSTR(_T("{6BF52A52-394A-11d3-B153-00C04F79FAA6}")), m_wndView, 0);
if (FAILMSG(hr))
goto FAILURE;
hr = m_wndView.QueryControl(&g_spWMPPlayer);
if (FAILMSG(hr))
goto FAILURE;
// start listening to events
hr = CComWMPEventDispatch::CreateInstance(&pEventListener);
spEventListener = pEventListener;
if (FAILMSG(hr))
goto FAILURE;
hr = g_spWMPPlayer->QueryInterface(&spConnectionContainer);
if (FAILMSG(hr))
goto FAILURE;
// See if OCX supports the IWMPEvents interface
hr = spConnectionContainer->FindConnectionPoint(__uuidof(IWMPEvents), &m_spConnectionPoint);
if (FAILED(hr))
{
// If not, try the _WMPOCXEvents interface, which will use IDispatch
hr = spConnectionContainer->FindConnectionPoint(__uuidof(_WMPOCXEvents), &m_spConnectionPoint);
if (FAILMSG(hr))
goto FAILURE;
}
hr = m_spConnectionPoint->Advise(spEventListener, &m_dwAdviseCookie);
if (FAILMSG(hr))
goto FAILURE;
IWMPSettings *spWMPSettings;
g_spWMPPlayer->get_settings( &spWMPSettings );
if ( spWMPSettings )
{
spWMPSettings->put_volume( 100 );
}
g_spWMPPlayer->put_enableContextMenu( VARIANT_FALSE );
// set the url of the movie
hr = g_spWMPPlayer->put_URL( CT2W( g_URL.c_str() ) );
if (FAILED(hr))
OutputDebugString( "put_URL failed\n" );
return 0;
FAILURE:
OutputDebugString( "CWMPHost::OnCreate FAILED!\n" );
DestroyWindow();
if ( g_hBlackFadingWindow )
{
::DestroyWindow( g_hBlackFadingWindow );
}
// ::PostQuitMessage(0);
return 0;
}
LRESULT CWMPHost::OnClose(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
LogPlayerEvent( ET_CLOSE );
DestroyWindow();
if ( g_hBlackFadingWindow )
{
::DestroyWindow( g_hBlackFadingWindow );
}
return 0;
}
LRESULT CWMPHost::OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
// stop listening to events
if (m_spConnectionPoint)
{
if (0 != m_dwAdviseCookie)
m_spConnectionPoint->Unadvise(m_dwAdviseCookie);
m_spConnectionPoint.Release();
}
// close the OCX
if (g_spWMPPlayer)
{
g_spWMPPlayer->close();
g_spWMPPlayer.Release();
}
m_hWnd = NULL;
g_bFrameCreated = false;
bHandled = FALSE;
return 1;
}
LRESULT CWMPHost::OnErase(UINT /* uMsg */, WPARAM /* wParam */, LPARAM /* lParam */, BOOL& bHandled)
{
if ( g_bWantToBeFullscreen && !IsFullScreen() )
{
g_pFrame->BringWindowToTop();
SetFullScreen( false );
}
bHandled = TRUE;
return 0;
}
LRESULT CWMPHost::OnSize(UINT /* uMsg */, WPARAM wParam, LPARAM lParam, BOOL& /* lResult */)
{
if ( wParam == SIZE_MAXIMIZED )
{
SetFullScreen( true );
}
else
{
if ( wParam == SIZE_MINIMIZED )
{
LogPlayerEvent( ET_MINIMIZE );
if ( IsVideoPlaying() )
{
g_bPlayOnRestore = true;
PlayVideo( false );
}
}
else if ( wParam == SIZE_RESTORED )
{
LogPlayerEvent( ET_RESTORE );
}
RECT rcClient;
GetClientRect(&rcClient);
m_wndView.MoveWindow(rcClient.left, rcClient.top, rcClient.right-rcClient.left, rcClient.bottom-rcClient.top);
}
return 0;
}
LRESULT CWMPHost::OnContextMenu(UINT /* uMsg */, WPARAM /* wParam */, LPARAM lParam, BOOL& /* lResult */)
{
if ( !m_hPopupMenu )
{
m_hPopupMenu = CreatePopupMenu();
// AppendMenu( m_hPopupMenu, MF_STRING, ID_HALF_SIZE, "Zoom 50%" );
AppendMenu( m_hPopupMenu, MF_STRING, ID_FULL_SIZE, "Zoom 100%" );
// AppendMenu( m_hPopupMenu, MF_STRING, ID_DOUBLE_SIZE, "Zoom 200%" );
AppendMenu( m_hPopupMenu, MF_STRING, ID_STRETCH_TO_FIT, "Stretch to fit window" );
}
int x = GET_X_LPARAM( lParam );
int y = GET_Y_LPARAM( lParam );
TrackPopupMenu( m_hPopupMenu, TPM_LEFTALIGN | TPM_TOPALIGN, x, y, 0, m_hWnd, NULL );
return 0;
}
LRESULT CWMPHost::OnClick(UINT /* uMsg */, WPARAM /* wParam */, LPARAM /* lParam */, BOOL& /* lResult */)
{
if ( IsFullScreen() )
{
SetFullScreen( false );
}
return 1;
}
LRESULT CWMPHost::OnLeftDoubleClick(UINT /* uMsg */, WPARAM /* wParam */, LPARAM /* lParam */, BOOL& /* lResult */)
{
SetFullScreen( !IsFullScreen() );
return 1;
}
LRESULT CWMPHost::OnSysKeyDown(UINT /* uMsg */, WPARAM wParam, LPARAM /* lParam */, BOOL& /* lResult */)
{
switch ( wParam )
{
case VK_RETURN:
SetFullScreen( !IsFullScreen() );
break;
}
return 1;
}
LRESULT CWMPHost::OnKeyDown(UINT /* uMsg */, WPARAM wParam, LPARAM /* lParam */, BOOL& /* lResult */)
{
switch ( wParam )
{
case VK_SPACE:
PlayVideo( !IsVideoPlaying() );
break;
case VK_LEFT:
case VK_RIGHT:
{
CComPtr<IWMPControls> spWMPControls;
g_spWMPPlayer->get_controls(&spWMPControls);
if ( !spWMPControls )
break;
CComPtr<IWMPControls2> spWMPControls2;
spWMPControls.QueryInterface(&spWMPControls2);
if ( !spWMPControls2 )
break;
spWMPControls2->step( wParam == VK_LEFT ? -1 : 1 );
LogPlayerEvent( wParam == VK_LEFT ? ET_STEPBCK : ET_STEPFWD );
}
break;
case VK_UP:
case VK_DOWN:
{
CComPtr<IWMPControls> spWMPControls;
g_spWMPPlayer->get_controls(&spWMPControls);
if ( !spWMPControls )
break;
double curpos = 0.0f;
if ( spWMPControls->get_currentPosition( &curpos ) != S_OK )
break;
curpos += wParam == VK_UP ? -5.0f : 5.0f;
spWMPControls->put_currentPosition( curpos );
if ( !IsVideoPlaying() )
{
spWMPControls->play();
spWMPControls->pause();
}
LogPlayerEvent( wParam == VK_UP ? ET_JUMPBCK : ET_JUMPFWD );
}
break;
case VK_HOME:
{
CComPtr<IWMPControls> spWMPControls;
g_spWMPPlayer->get_controls(&spWMPControls);
if ( !spWMPControls )
break;
spWMPControls->put_currentPosition( 0.0f );
if ( !IsVideoPlaying() )
{
spWMPControls->play();
spWMPControls->pause();
}
LogPlayerEvent( ET_JUMPHOME );
}
break;
case VK_END:
{
CComPtr<IWMPMedia> spWMPMedia;
g_spWMPPlayer->get_currentMedia( &spWMPMedia );
if ( !spWMPMedia )
break;
CComPtr<IWMPControls> spWMPControls;
g_spWMPPlayer->get_controls(&spWMPControls);
if ( !spWMPControls )
break;
double duration = 0.0f;
if ( spWMPMedia->get_duration( &duration ) != S_OK )
break;
spWMPControls->put_currentPosition( duration - 0.050 ); // back a little more than a frame - this avoids triggering the end fade
spWMPControls->play();
spWMPControls->pause();
LogPlayerEvent( ET_JUMPEND );
}
break;
case VK_ESCAPE:
if ( IsFullScreen() && !g_bFadeWindowTriggered )
{
CComPtr<IWMPControls> spWMPControls;
g_spWMPPlayer->get_controls(&spWMPControls);
if ( spWMPControls )
{
spWMPControls->stop();
}
LogPlayerEvent( ET_FADEOUT );
g_bFadeWindowTriggered = true;
ShowFadeWindow( true );
}
break;
}
return 0;
}
LRESULT CWMPHost::OnNCActivate(UINT /* uMsg */, WPARAM wParam, LPARAM /* lParam */, BOOL& /* lResult */ )
{
if ( wParam )
{
if ( g_bWantToBeFullscreen )
{
SetFullScreen( true );
}
if ( g_bPlayOnRestore )
{
g_bPlayOnRestore = false;
PlayVideo( true );
}
}
return 1;
}
LRESULT CWMPHost::OnVideoScale(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
{
SetVideoScaleMode( wID );
return 0;
}
+94
View File
@@ -0,0 +1,94 @@
//========= Copyright Valve Corporation, All rights reserved. ============//
// CWMPHost.h : Declaration of the CWMPHost
//
#include "resource.h" // main symbols
#include <oledlg.h>
// if this file isn't found, set your path to include the wmp sdk include directory
// download the sdk from http://www.microsoft.com/windows/windowsmedia/mp10/sdk.aspx
#include "wmp.h"
#include "CWMPEventDispatch.h"
/////////////////////////////////////////////////////////////////////////////
// CWMPHost
class CWMPHost : public CWindowImpl< CWMPHost, CWindow, CWinTraits< WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN | WS_CLIPSIBLINGS, WS_EX_APPWINDOW | WS_EX_WINDOWEDGE > >
{
public:
DECLARE_WND_CLASS_EX(NULL, 0, 0)
BEGIN_MSG_MAP(CWMPHost)
MESSAGE_HANDLER(WM_CREATE, OnCreate)
MESSAGE_HANDLER(WM_DESTROY, OnDestroy)
MESSAGE_HANDLER(WM_CLOSE, OnClose)
MESSAGE_HANDLER(WM_SIZE, OnSize)
MESSAGE_HANDLER(WM_CONTEXTMENU, OnContextMenu)
MESSAGE_HANDLER(WM_LBUTTONDOWN, OnClick)
MESSAGE_HANDLER(WM_MBUTTONDOWN, OnClick)
MESSAGE_HANDLER(WM_RBUTTONDOWN, OnClick)
MESSAGE_HANDLER(WM_LBUTTONDBLCLK, OnLeftDoubleClick)
MESSAGE_HANDLER(WM_KEYDOWN, OnKeyDown)
MESSAGE_HANDLER(WM_SYSKEYDOWN, OnSysKeyDown)
MESSAGE_HANDLER(WM_ERASEBKGND, OnErase)
MESSAGE_HANDLER(WM_NCACTIVATE, OnNCActivate)
COMMAND_ID_HANDLER(ID_HALF_SIZE, OnVideoScale)
COMMAND_ID_HANDLER(ID_FULL_SIZE, OnVideoScale)
COMMAND_ID_HANDLER(ID_DOUBLE_SIZE, OnVideoScale)
COMMAND_ID_HANDLER(ID_STRETCH_TO_FIT, OnVideoScale)
END_MSG_MAP()
LRESULT OnClose(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnErase(UINT /* uMsg */, WPARAM /* wParam */, LPARAM /* lParam */, BOOL& bHandled);
LRESULT OnSize(UINT /* uMsg */, WPARAM /* wParam */, LPARAM /* lParam */, BOOL& /* lResult */);
LRESULT OnContextMenu(UINT /* uMsg */, WPARAM /* wParam */, LPARAM /* lParam */, BOOL& /* lResult */);
LRESULT OnClick(UINT /* uMsg */, WPARAM /* wParam */, LPARAM /* lParam */, BOOL& /* lResult */);
LRESULT OnLeftDoubleClick(UINT /* uMsg */, WPARAM /* wParam */, LPARAM /* lParam */, BOOL& /* lResult */);
LRESULT OnSysKeyDown(UINT /* uMsg */, WPARAM wParam, LPARAM /* lParam */, BOOL& /* lResult */);
LRESULT OnKeyDown(UINT /* uMsg */, WPARAM wParam, LPARAM /* lParam */, BOOL& /* lResult */);
LRESULT OnNCActivate(UINT /* uMsg */, WPARAM wParam, LPARAM /* lParam */, BOOL& /* lResult */);
LRESULT OnVideoScale(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
CAxWindow m_wndView;
CComPtr<IConnectionPoint> m_spConnectionPoint;
DWORD m_dwAdviseCookie;
HMENU m_hPopupMenu;
};
/////////////////////////////////////////////////////////////////////////////
// event logging - this should really be in its own smp.h or something...
enum EventType_t
{
ET_APPLAUNCH,
ET_APPEXIT,
ET_CLOSE,
ET_FADEOUT,
ET_MEDIABEGIN,
ET_MEDIAEND,
ET_JUMPHOME,
ET_JUMPEND,
ET_PLAY,
ET_PAUSE,
ET_STOP,
ET_SCRUBFROM,
ET_SCRUBTO,
ET_STEPFWD,
ET_STEPBCK,
ET_JUMPFWD,
ET_JUMPBCK,
ET_REPEAT,
ET_MAXIMIZE,
ET_MINIMIZE,
ET_RESTORE,
};
+65
View File
@@ -0,0 +1,65 @@
//========= Public Domain Code ================================================
//
// Purpose: Header file for the C++ ICE encryption class.
// Taken from public domain code, as written by Matthew Kwan - July 1996
// http://www.darkside.com.au/ice/
//=============================================================================
#ifndef _IceKey_H
#define _IceKey_H
/*
The IceKey class is used for encrypting and decrypting 64-bit blocks of data
with the ICE (Information Concealment Engine) encryption algorithm.
The constructor creates a new IceKey object that can be used to encrypt and decrypt data.
The level of encryption determines the size of the key, and hence its speed.
Level 0 uses the Thin-ICE variant, which is an 8-round cipher taking an 8-byte key.
This is the fastest option, and is generally considered to be at least as secure as DES,
although it is not yet certain whether it is as secure as its key size.
For levels n greater than zero, a 16n-round cipher is used, taking 8n-byte keys.
Although not as fast as level 0, these are very very secure.
Before an IceKey can be used to encrypt data, its key schedule must be set with the set() member function.
The length of the key required is determined by the level, as described above.
The member functions encrypt() and decrypt() encrypt and decrypt respectively data
in blocks of eight chracters, using the specified key.
Two functions keySize() and blockSize() are provided
which return the key and block size respectively, measured in bytes.
The key size is determined by the level, while the block size is always 8.
The destructor zeroes out and frees up all memory associated with the key.
*/
class IceSubkey;
class IceKey {
public:
IceKey (int n);
~IceKey ();
void set (const unsigned char *key);
void encrypt (const unsigned char *plaintext,
unsigned char *ciphertext) const;
void decrypt (const unsigned char *ciphertext,
unsigned char *plaintext) const;
int keySize () const;
int blockSize () const;
private:
void scheduleBuild (unsigned short *k, int n,
const int *keyrot);
int _size;
int _rounds;
IceSubkey *_keysched;
};
#endif
+392
View File
@@ -0,0 +1,392 @@
//========= Public Domain Code ================================================
//
// Purpose: C++ implementation of the ICE encryption algorithm.
// Taken from public domain code, as written by Matthew Kwan - July 1996
// http://www.darkside.com.au/ice/
//=============================================================================
#include "IceKey.H"
#pragma warning(disable: 4244)
/* Structure of a single round subkey */
class IceSubkey {
public:
unsigned long val[3];
};
/* The S-boxes */
static unsigned long ice_sbox[4][1024];
static int ice_sboxes_initialised = 0;
/* Modulo values for the S-boxes */
static const int ice_smod[4][4] = {
{333, 313, 505, 369},
{379, 375, 319, 391},
{361, 445, 451, 397},
{397, 425, 395, 505}};
/* XOR values for the S-boxes */
static const int ice_sxor[4][4] = {
{0x83, 0x85, 0x9b, 0xcd},
{0xcc, 0xa7, 0xad, 0x41},
{0x4b, 0x2e, 0xd4, 0x33},
{0xea, 0xcb, 0x2e, 0x04}};
/* Permutation values for the P-box */
static const unsigned long ice_pbox[32] = {
0x00000001, 0x00000080, 0x00000400, 0x00002000,
0x00080000, 0x00200000, 0x01000000, 0x40000000,
0x00000008, 0x00000020, 0x00000100, 0x00004000,
0x00010000, 0x00800000, 0x04000000, 0x20000000,
0x00000004, 0x00000010, 0x00000200, 0x00008000,
0x00020000, 0x00400000, 0x08000000, 0x10000000,
0x00000002, 0x00000040, 0x00000800, 0x00001000,
0x00040000, 0x00100000, 0x02000000, 0x80000000};
/* The key rotation schedule */
static const int ice_keyrot[16] = {
0, 1, 2, 3, 2, 1, 3, 0,
1, 3, 2, 0, 3, 1, 0, 2};
/*
* 8-bit Galois Field multiplication of a by b, modulo m.
* Just like arithmetic multiplication, except that additions and
* subtractions are replaced by XOR.
*/
static unsigned int
gf_mult (
register unsigned int a,
register unsigned int b,
register unsigned int m
) {
register unsigned int res = 0;
while (b) {
if (b & 1)
res ^= a;
a <<= 1;
b >>= 1;
if (a >= 256)
a ^= m;
}
return (res);
}
/*
* Galois Field exponentiation.
* Raise the base to the power of 7, modulo m.
*/
static unsigned long
gf_exp7 (
register unsigned int b,
unsigned int m
) {
register unsigned int x;
if (b == 0)
return (0);
x = gf_mult (b, b, m);
x = gf_mult (b, x, m);
x = gf_mult (x, x, m);
return (gf_mult (b, x, m));
}
/*
* Carry out the ICE 32-bit P-box permutation.
*/
static unsigned long
ice_perm32 (
register unsigned long x
) {
register unsigned long res = 0;
register const unsigned long *pbox = ice_pbox;
while (x) {
if (x & 1)
res |= *pbox;
pbox++;
x >>= 1;
}
return (res);
}
/*
* Initialise the ICE S-boxes.
* This only has to be done once.
*/
static void
ice_sboxes_init (void)
{
register int i;
for (i=0; i<1024; i++) {
int col = (i >> 1) & 0xff;
int row = (i & 0x1) | ((i & 0x200) >> 8);
unsigned long x;
x = gf_exp7 (col ^ ice_sxor[0][row], ice_smod[0][row]) << 24;
ice_sbox[0][i] = ice_perm32 (x);
x = gf_exp7 (col ^ ice_sxor[1][row], ice_smod[1][row]) << 16;
ice_sbox[1][i] = ice_perm32 (x);
x = gf_exp7 (col ^ ice_sxor[2][row], ice_smod[2][row]) << 8;
ice_sbox[2][i] = ice_perm32 (x);
x = gf_exp7 (col ^ ice_sxor[3][row], ice_smod[3][row]);
ice_sbox[3][i] = ice_perm32 (x);
}
}
/*
* Create a new ICE key.
*/
IceKey::IceKey (int n)
{
if (!ice_sboxes_initialised) {
ice_sboxes_init ();
ice_sboxes_initialised = 1;
}
if (n < 1) {
_size = 1;
_rounds = 8;
} else {
_size = n;
_rounds = n * 16;
}
_keysched = new IceSubkey[_rounds];
}
/*
* Destroy an ICE key.
*/
IceKey::~IceKey ()
{
int i, j;
for (i=0; i<_rounds; i++)
for (j=0; j<3; j++)
_keysched[i].val[j] = 0;
_rounds = _size = 0;
delete[] _keysched;
}
/*
* The single round ICE f function.
*/
static unsigned long
ice_f (
register unsigned long p,
const IceSubkey *sk
) {
unsigned long tl, tr; /* Expanded 40-bit values */
unsigned long al, ar; /* Salted expanded 40-bit values */
/* Left half expansion */
tl = ((p >> 16) & 0x3ff) | (((p >> 14) | (p << 18)) & 0xffc00);
/* Right half expansion */
tr = (p & 0x3ff) | ((p << 2) & 0xffc00);
/* Perform the salt permutation */
// al = (tr & sk->val[2]) | (tl & ~sk->val[2]);
// ar = (tl & sk->val[2]) | (tr & ~sk->val[2]);
al = sk->val[2] & (tl ^ tr);
ar = al ^ tr;
al ^= tl;
al ^= sk->val[0]; /* XOR with the subkey */
ar ^= sk->val[1];
/* S-box lookup and permutation */
return (ice_sbox[0][al >> 10] | ice_sbox[1][al & 0x3ff]
| ice_sbox[2][ar >> 10] | ice_sbox[3][ar & 0x3ff]);
}
/*
* Encrypt a block of 8 bytes of data with the given ICE key.
*/
void
IceKey::encrypt (
const unsigned char *ptext,
unsigned char *ctext
) const
{
register int i;
register unsigned long l, r;
l = (((unsigned long) ptext[0]) << 24)
| (((unsigned long) ptext[1]) << 16)
| (((unsigned long) ptext[2]) << 8) | ptext[3];
r = (((unsigned long) ptext[4]) << 24)
| (((unsigned long) ptext[5]) << 16)
| (((unsigned long) ptext[6]) << 8) | ptext[7];
for (i = 0; i < _rounds; i += 2) {
l ^= ice_f (r, &_keysched[i]);
r ^= ice_f (l, &_keysched[i + 1]);
}
for (i = 0; i < 4; i++) {
ctext[3 - i] = r & 0xff;
ctext[7 - i] = l & 0xff;
r >>= 8;
l >>= 8;
}
}
/*
* Decrypt a block of 8 bytes of data with the given ICE key.
*/
void
IceKey::decrypt (
const unsigned char *ctext,
unsigned char *ptext
) const
{
register int i;
register unsigned long l, r;
l = (((unsigned long) ctext[0]) << 24)
| (((unsigned long) ctext[1]) << 16)
| (((unsigned long) ctext[2]) << 8) | ctext[3];
r = (((unsigned long) ctext[4]) << 24)
| (((unsigned long) ctext[5]) << 16)
| (((unsigned long) ctext[6]) << 8) | ctext[7];
for (i = _rounds - 1; i > 0; i -= 2) {
l ^= ice_f (r, &_keysched[i]);
r ^= ice_f (l, &_keysched[i - 1]);
}
for (i = 0; i < 4; i++) {
ptext[3 - i] = r & 0xff;
ptext[7 - i] = l & 0xff;
r >>= 8;
l >>= 8;
}
}
/*
* Set 8 rounds [n, n+7] of the key schedule of an ICE key.
*/
void
IceKey::scheduleBuild (
unsigned short *kb,
int n,
const int *keyrot
) {
int i;
for (i=0; i<8; i++) {
register int j;
register int kr = keyrot[i];
IceSubkey *isk = &_keysched[n + i];
for (j=0; j<3; j++)
isk->val[j] = 0;
for (j=0; j<15; j++) {
register int k;
unsigned long *curr_sk = &isk->val[j % 3];
for (k=0; k<4; k++) {
unsigned short *curr_kb = &kb[(kr + k) & 3];
register int bit = *curr_kb & 1;
*curr_sk = (*curr_sk << 1) | bit;
*curr_kb = (*curr_kb >> 1) | ((bit ^ 1) << 15);
}
}
}
}
/*
* Set the key schedule of an ICE key.
*/
void
IceKey::set (
const unsigned char *key
) {
int i;
if (_rounds == 8) {
unsigned short kb[4];
for (i=0; i<4; i++)
kb[3 - i] = (key[i*2] << 8) | key[i*2 + 1];
scheduleBuild (kb, 0, ice_keyrot);
return;
}
for (i=0; i<_size; i++) {
int j;
unsigned short kb[4];
for (j=0; j<4; j++)
kb[3 - j] = (key[i*8 + j*2] << 8) | key[i*8 + j*2 + 1];
scheduleBuild (kb, i*8, ice_keyrot);
scheduleBuild (kb, _rounds - 8 - i*8, &ice_keyrot[8]);
}
}
/*
* Return the key size, in bytes.
*/
int
IceKey::keySize () const
{
return (_size * 8);
}
/*
* Return the block size, in bytes.
*/
int
IceKey::blockSize () const
{
return (8);
}
+45
View File
@@ -0,0 +1,45 @@
//========= Copyright Valve Corporation, All rights reserved. ============//
// stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently,
// but are changed infrequently
//
// This is a part of the Active Template Library.
// Copyright (C) 1996-1998 Microsoft Corporation
// All rights reserved.
//
// This source code is only intended as a supplement to the
// Active Template Library Reference and related
// electronic documentation provided with the library.
// See these sources for detailed information regarding the
// Active Template Library product.
#if !defined(AFX_STDAFX_H__48C9E972_76B0_11D1_B293_0040053089AE__INCLUDED_)
#define AFX_STDAFX_H__48C9E972_76B0_11D1_B293_0040053089AE__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#ifndef STRICT
#define STRICT
#endif
#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0501
#endif
#define _ATL_APARTMENT_THREADED
#include <atlbase.h>
extern CComModule _Module;
#include <atlcom.h>
#include <atlhost.h>
#include <atlctl.h>
#include <afxres.h>
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_STDAFX_H__48C9E972_76B0_11D1_B293_0040053089AE__INCLUDED)
+62
View File
@@ -0,0 +1,62 @@
//========= Copyright Valve Corporation, All rights reserved. ============//
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by smp.rc
//
#define IDS_PROJNAME 100
#define IDR_SMP 100
#define IDD_FILEOPEN_DIALOG 201
#define IDC_FILEOPEN_EDIT 201
#define IDR_MENU1 202
#define IDC_FILEOPEN_BROWSE 202
#define IDC_STRING_EDIT 203
#define IDI_ICON1 204
#define IDC_BOOLEAN_TRUE 204
#define IDD_STRING_DIALOG 205
#define IDC_BOOLEAN_FALSE 205
#define IDD_BOOLEAN_DIALOG 206
#define IDI_ICON 207
#define ID_WMPCORE 32800
#define ID_WMPCORE_CLOSE 32801
#define ID_WMPCORE_URL 32802
#define ID_WMPCORE_OPENSTATE 32803
#define ID_WMPCORE_PLAYSTATE 32804
#define ID_WMPCORE_CONTROLS 32805
#define ID_WMPCORE_SETTINGS 32806
#define ID_WMPCORE_CURRENTMEDIA 32807
#define ID_WMPCORE_MEDIACOLLECTION 32808
#define ID_WMPCORE_PLAYLISTCOLLECTION 32809
#define ID_WMPCORE_VERSIONINFO 32810
#define ID_WMPCORE_LAUNCHURL 32811
#define ID_WMPCORE_NETWORK 32812
#define ID_WMPCORE_CURRENTPLAYLIST 32813
#define ID_WMPCORE_CDROMCOLLECTION 32814
#define ID_WMPCORE_CLOSEDCAPTION 32815
#define ID_WMPCORE_ISONLINE 32816
#define ID_WMPCORE_ERROR 32817
#define ID_WMPCORE_STATUS 32818
#define ID_WMPCORE2 32819
#define ID_WMPCORE2_DVD 32820
#define ID_WMPPLAYER 32900
#define ID_WMPPLAYER_ENABLED 32901
#define ID_WMPPLAYER_FULLSCREEN 32902
#define ID_WMPPLAYER_ENABLECONTEXTMENU 32903
#define ID_WMPPLAYER_UIMODE 32904
#define ID_WMPPLAYER2 32905
#define ID_WMPPLAYER2_STRETCHTOFIT 32906
#define ID_HALF_SIZE 33000
#define ID_FULL_SIZE 33001
#define ID_DOUBLE_SIZE 33002
#define ID_STRETCH_TO_FIT 33003
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 208
#define _APS_NEXT_COMMAND_VALUE 32907
#define _APS_NEXT_CONTROL_VALUE 205
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif
+1441
View File
File diff suppressed because it is too large Load Diff
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

+228
View File
@@ -0,0 +1,228 @@
// Microsoft Visual C++ generated resource script.
//
#include "resource.h"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "afxres.h"
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// English (U.S.) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)
#endif //_WIN32
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE
BEGIN
"resource.h\0"
END
2 TEXTINCLUDE
BEGIN
"#include ""afxres.h""\r\n"
"\0"
END
3 TEXTINCLUDE
BEGIN
"\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Version
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,0,0,1
PRODUCTVERSION 1,0,0,1
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x4L
FILETYPE 0x1L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904B0"
BEGIN
VALUE "CompanyName", "Valve"
VALUE "FileDescription", "Steam Media Player"
VALUE "FileVersion", "1, 0, 0, 1"
VALUE "InternalName", "Steam Media Player"
VALUE "LegalCopyright", "Copyright 2005"
VALUE "OriginalFilename", "smp.exe"
VALUE "ProductName", "Steam Media Player"
VALUE "ProductVersion", "1, 0, 0, 1"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1200
END
END
/////////////////////////////////////////////////////////////////////////////
//
// Menu
//
IDR_MENU1 MENU
BEGIN
POPUP "&File"
BEGIN
MENUITEM "&Open URL", ID_FILE_OPEN
MENUITEM "E&xit", ID_APP_EXIT
END
POPUP "Interfaces"
BEGIN
MENUITEM "IWMPCore", ID_WMPCORE, INACTIVE
MENUITEM " close", ID_WMPCORE_CLOSE
MENUITEM " URL", ID_WMPCORE_URL
MENUITEM " openState", ID_WMPCORE_OPENSTATE
MENUITEM " playState", ID_WMPCORE_PLAYSTATE
MENUITEM " controls", ID_WMPCORE_CONTROLS
MENUITEM " settings", ID_WMPCORE_SETTINGS
MENUITEM " currentMedia", ID_WMPCORE_CURRENTMEDIA
MENUITEM " mediaCollection", ID_WMPCORE_MEDIACOLLECTION
MENUITEM " playlistCollection", ID_WMPCORE_PLAYLISTCOLLECTION
MENUITEM " versionInfo", ID_WMPCORE_VERSIONINFO
MENUITEM " launchURL", ID_WMPCORE_LAUNCHURL
MENUITEM " network", ID_WMPCORE_NETWORK
MENUITEM " currentPlaylist", ID_WMPCORE_CURRENTPLAYLIST
MENUITEM " cdromCollection", ID_WMPCORE_CDROMCOLLECTION
MENUITEM " closedCaption", ID_WMPCORE_CLOSEDCAPTION
MENUITEM " isOnline", ID_WMPCORE_ISONLINE
MENUITEM " error", ID_WMPCORE_ERROR
MENUITEM " status", ID_WMPCORE_STATUS
MENUITEM "IWMPCore2", ID_WMPCORE2, INACTIVE
MENUITEM " dvd", ID_WMPCORE2_DVD
MENUITEM "IWMPlayer", ID_WMPPLAYER, INACTIVE
MENUITEM " enabled", ID_WMPPLAYER_ENABLED
MENUITEM " fullScreen", ID_WMPPLAYER_FULLSCREEN
MENUITEM " enableContextMenu", ID_WMPPLAYER_ENABLECONTEXTMENU
MENUITEM " uiMode", ID_WMPPLAYER_UIMODE
MENUITEM "IWMPlayer2", ID_WMPPLAYER2, INACTIVE
MENUITEM " stretchToFit", ID_WMPPLAYER2_STRETCHTOFIT
END
END
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//
IDD_FILEOPEN_DIALOG DIALOGEX 0, 0, 274, 74
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Open URL"
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
EDITTEXT IDC_FILEOPEN_EDIT,7,25,235,14,ES_AUTOHSCROLL | WS_GROUP
PUSHBUTTON "...",IDC_FILEOPEN_BROWSE,246,26,21,14,0,
WS_EX_CLIENTEDGE
DEFPUSHBUTTON "OK",IDOK,160,53,50,14
PUSHBUTTON "Cancel",IDCANCEL,217,53,50,14
LTEXT "Enter URL to play:",IDC_STATIC,7,7,59,8
END
IDD_STRING_DIALOG DIALOG 0, 0, 244, 50
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Property"
FONT 8, "MS Shell Dlg"
BEGIN
DEFPUSHBUTTON "OK",IDOK,123,29,50,14
PUSHBUTTON "Cancel",IDCANCEL,183,29,50,14
EDITTEXT IDC_STRING_EDIT,7,7,226,13,ES_AUTOHSCROLL
END
IDD_BOOLEAN_DIALOG DIALOG 0, 0, 125, 58
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Boolean"
FONT 8, "MS Shell Dlg"
BEGIN
DEFPUSHBUTTON "OK",IDOK,7,37,50,14
PUSHBUTTON "Cancel",IDCANCEL,68,37,50,14
CONTROL "VARIANT_TRUE",IDC_BOOLEAN_TRUE,"Button",
BS_AUTORADIOBUTTON,7,7,85,10
CONTROL "VARIANT_FALSE",IDC_BOOLEAN_FALSE,"Button",
BS_AUTORADIOBUTTON,7,21,85,10
END
/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
//
#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO
BEGIN
IDD_STRING_DIALOG, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 237
TOPMARGIN, 7
BOTTOMMARGIN, 43
END
IDD_BOOLEAN_DIALOG, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 118
TOPMARGIN, 7
BOTTOMMARGIN, 51
END
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Icon
//
// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
IDI_ICON ICON "smp.ico"
#endif // English (U.S.) resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED
+36
View File
@@ -0,0 +1,36 @@
Microsoft Visual Studio Solution File, Format Version 8.00
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "smp", "smp.vcproj", "{F2E998F8-1482-4A51-A70C-C3B225A7A201}"
ProjectSection(ProjectDependencies) = postProject
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfiguration) = preSolution
Debug = Debug
Release = Release
Release MinDependency = Release MinDependency
Release MinSize = Release MinSize
Unicode Debug = Unicode Debug
Unicode Release MinDependency = Unicode Release MinDependency
Unicode Release MinSize = Unicode Release MinSize
EndGlobalSection
GlobalSection(ProjectConfiguration) = postSolution
{F2E998F8-1482-4A51-A70C-C3B225A7A201}.Debug.ActiveCfg = Debug|Win32
{F2E998F8-1482-4A51-A70C-C3B225A7A201}.Debug.Build.0 = Debug|Win32
{F2E998F8-1482-4A51-A70C-C3B225A7A201}.Release.ActiveCfg = Release MinSize|Win32
{F2E998F8-1482-4A51-A70C-C3B225A7A201}.Release.Build.0 = Release MinSize|Win32
{F2E998F8-1482-4A51-A70C-C3B225A7A201}.Release MinDependency.ActiveCfg = Release MinDependency|Win32
{F2E998F8-1482-4A51-A70C-C3B225A7A201}.Release MinDependency.Build.0 = Release MinDependency|Win32
{F2E998F8-1482-4A51-A70C-C3B225A7A201}.Release MinSize.ActiveCfg = Release MinSize|Win32
{F2E998F8-1482-4A51-A70C-C3B225A7A201}.Release MinSize.Build.0 = Release MinSize|Win32
{F2E998F8-1482-4A51-A70C-C3B225A7A201}.Unicode Debug.ActiveCfg = Unicode Debug|Win32
{F2E998F8-1482-4A51-A70C-C3B225A7A201}.Unicode Debug.Build.0 = Unicode Debug|Win32
{F2E998F8-1482-4A51-A70C-C3B225A7A201}.Unicode Release MinDependency.ActiveCfg = Unicode Release MinDependency|Win32
{F2E998F8-1482-4A51-A70C-C3B225A7A201}.Unicode Release MinDependency.Build.0 = Unicode Release MinDependency|Win32
{F2E998F8-1482-4A51-A70C-C3B225A7A201}.Unicode Release MinSize.ActiveCfg = Unicode Release MinSize|Win32
{F2E998F8-1482-4A51-A70C-C3B225A7A201}.Unicode Release MinSize.Build.0 = Unicode Release MinSize|Win32
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
EndGlobalSection
GlobalSection(ExtensibilityAddIns) = postSolution
EndGlobalSection
EndGlobal
+625
View File
@@ -0,0 +1,625 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="7.10"
Name="smp"
ProjectGUID="{6ACEBE96-D4A4-439D-881A-A3DD1F6FEB89}"
RootNamespace="smp"
SccProjectName=""
SccLocalPath=""
Keyword="AtlProj">
<Platforms>
<Platform
Name="Win32"/>
</Platforms>
<Configurations>
<Configuration
Name="Unicode Release MinSize|Win32"
OutputDirectory=".\ReleaseUMinSize"
IntermediateDirectory=".\ReleaseUMinSize"
ConfigurationType="1"
UseOfMFC="0"
UseOfATL="2"
ATLMinimizesCRunTimeLibraryUsage="TRUE"
CharacterSet="1">
<Tool
Name="VCCLCompilerTool"
Optimization="1"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories=".;..\..\common;..\..\dx8sdk\include;..\WMPSDK10\include"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
StringPooling="TRUE"
ExceptionHandling="TRUE"
RuntimeLibrary="5"
EnableFunctionLevelLinking="TRUE"
ForceConformanceInForLoopScope="TRUE"
UsePrecompiledHeader="2"
PrecompiledHeaderFile=".\ReleaseUMinSize/smp.pch"
AssemblerListingLocation=".\ReleaseUMinSize/"
ObjectFile=".\ReleaseUMinSize/"
ProgramDataBaseFileName=".\ReleaseUMinSize/"
WarningLevel="3"
SuppressStartupBanner="TRUE"
CompileAs="0"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="odbc32.lib odbccp32.lib comctl32.lib Msimg32.lib ws2_32.lib rpcrt4.lib ..\..\dx8sdk\lib\d3d8.lib"
OutputFile=".\ReleaseUMinSize/smp.exe"
LinkIncremental="1"
SuppressStartupBanner="TRUE"
IgnoreAllDefaultLibraries="FALSE"
ProgramDatabaseFile=".\ReleaseUMinSize/smp.pdb"
SubSystem="2"
TargetMachine="1"/>
<Tool
Name="VCMIDLTool"
TypeLibraryName=".\ReleaseUMinSize/smp.tlb"
HeaderFileName=""/>
<Tool
Name="VCPostBuildEventTool"/>
<Tool
Name="VCPreBuildEventTool"/>
<Tool
Name="VCPreLinkEventTool"/>
<Tool
Name="VCResourceCompilerTool"
PreprocessorDefinitions="NDEBUG"
Culture="1033"/>
<Tool
Name="VCWebServiceProxyGeneratorTool"/>
<Tool
Name="VCXMLDataGeneratorTool"/>
<Tool
Name="VCWebDeploymentTool"/>
<Tool
Name="VCManagedWrapperGeneratorTool"/>
<Tool
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
</Configuration>
<Configuration
Name="Release MinDependency|Win32"
OutputDirectory=".\ReleaseMinDependency"
IntermediateDirectory=".\ReleaseMinDependency"
ConfigurationType="1"
UseOfMFC="0"
UseOfATL="1"
ATLMinimizesCRunTimeLibraryUsage="TRUE"
CharacterSet="2">
<Tool
Name="VCCLCompilerTool"
Optimization="1"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories=".;..\..\common;..\..\dx8sdk\include;..\WMPSDK10\include"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
StringPooling="TRUE"
ExceptionHandling="TRUE"
RuntimeLibrary="5"
EnableFunctionLevelLinking="TRUE"
ForceConformanceInForLoopScope="TRUE"
UsePrecompiledHeader="2"
PrecompiledHeaderFile=".\ReleaseMinDependency/smp.pch"
AssemblerListingLocation=".\ReleaseMinDependency/"
ObjectFile=".\ReleaseMinDependency/"
ProgramDataBaseFileName=".\ReleaseMinDependency/"
WarningLevel="3"
SuppressStartupBanner="TRUE"
CompileAs="0"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="odbc32.lib odbccp32.lib comctl32.lib Msimg32.lib ws2_32.lib rpcrt4.lib psapi.lib ..\..\dx8sdk\lib\d3d8.lib"
OutputFile=".\ReleaseMinDependency/smp.exe"
LinkIncremental="1"
SuppressStartupBanner="TRUE"
IgnoreAllDefaultLibraries="FALSE"
IgnoreDefaultLibraryNames=""
ProgramDatabaseFile=".\ReleaseMinDependency/smp.pdb"
SubSystem="2"
TargetMachine="1"/>
<Tool
Name="VCMIDLTool"
TypeLibraryName=".\ReleaseMinDependency/smp.tlb"
HeaderFileName=""/>
<Tool
Name="VCPostBuildEventTool"/>
<Tool
Name="VCPreBuildEventTool"/>
<Tool
Name="VCPreLinkEventTool"/>
<Tool
Name="VCResourceCompilerTool"
PreprocessorDefinitions="NDEBUG"
Culture="1033"/>
<Tool
Name="VCWebServiceProxyGeneratorTool"/>
<Tool
Name="VCXMLDataGeneratorTool"/>
<Tool
Name="VCWebDeploymentTool"/>
<Tool
Name="VCManagedWrapperGeneratorTool"/>
<Tool
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
</Configuration>
<Configuration
Name="Unicode Release MinDependency|Win32"
OutputDirectory=".\ReleaseUMinDependency"
IntermediateDirectory=".\ReleaseUMinDependency"
ConfigurationType="1"
UseOfMFC="0"
UseOfATL="1"
ATLMinimizesCRunTimeLibraryUsage="TRUE"
CharacterSet="1">
<Tool
Name="VCCLCompilerTool"
Optimization="1"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories=".;..\..\common;..\..\dx8sdk\include;..\WMPSDK10\include"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
StringPooling="TRUE"
ExceptionHandling="TRUE"
RuntimeLibrary="5"
EnableFunctionLevelLinking="TRUE"
ForceConformanceInForLoopScope="TRUE"
UsePrecompiledHeader="2"
PrecompiledHeaderFile=".\ReleaseUMinDependency/smp.pch"
AssemblerListingLocation=".\ReleaseUMinDependency/"
ObjectFile=".\ReleaseUMinDependency/"
ProgramDataBaseFileName=".\ReleaseUMinDependency/"
WarningLevel="3"
SuppressStartupBanner="TRUE"
CompileAs="0"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="odbc32.lib odbccp32.lib comctl32.lib Msimg32.lib ws2_32.lib rpcrt4.lib ..\..\dx8sdk\lib\d3d8.lib"
OutputFile=".\ReleaseUMinDependency/smp.exe"
LinkIncremental="1"
SuppressStartupBanner="TRUE"
IgnoreAllDefaultLibraries="FALSE"
ProgramDatabaseFile=".\ReleaseUMinDependency/smp.pdb"
SubSystem="2"
TargetMachine="1"/>
<Tool
Name="VCMIDLTool"
TypeLibraryName=".\ReleaseUMinDependency/smp.tlb"
HeaderFileName=""/>
<Tool
Name="VCPostBuildEventTool"/>
<Tool
Name="VCPreBuildEventTool"/>
<Tool
Name="VCPreLinkEventTool"/>
<Tool
Name="VCResourceCompilerTool"
PreprocessorDefinitions="NDEBUG"
Culture="1033"/>
<Tool
Name="VCWebServiceProxyGeneratorTool"/>
<Tool
Name="VCXMLDataGeneratorTool"/>
<Tool
Name="VCWebDeploymentTool"/>
<Tool
Name="VCManagedWrapperGeneratorTool"/>
<Tool
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
</Configuration>
<Configuration
Name="Unicode Debug|Win32"
OutputDirectory=".\DebugU"
IntermediateDirectory=".\DebugU"
ConfigurationType="1"
UseOfMFC="0"
ATLMinimizesCRunTimeLibraryUsage="FALSE"
CharacterSet="1">
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories=".;..\..\common;..\..\dx8sdk\include;..\WMPSDK10\include"
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
ExceptionHandling="TRUE"
BasicRuntimeChecks="3"
RuntimeLibrary="5"
ForceConformanceInForLoopScope="TRUE"
UsePrecompiledHeader="2"
PrecompiledHeaderThrough="stdafx.h"
PrecompiledHeaderFile=".\DebugU/smp.pch"
AssemblerListingLocation=".\DebugU/"
ObjectFile=".\DebugU/"
ProgramDataBaseFileName=".\DebugU/"
WarningLevel="3"
SuppressStartupBanner="TRUE"
DebugInformationFormat="4"
CompileAs="0"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="odbc32.lib odbccp32.lib comctl32.lib Msimg32.lib ws2_32.lib rpcrt4.lib ..\..\dx8sdk\lib\d3d8.lib"
OutputFile=".\DebugU/smp.exe"
LinkIncremental="1"
SuppressStartupBanner="TRUE"
IgnoreAllDefaultLibraries="FALSE"
GenerateDebugInformation="TRUE"
ProgramDatabaseFile=".\DebugU/smp.pdb"
SubSystem="2"
EntryPointSymbol="wWinMainCRTStartup"
TargetMachine="1"/>
<Tool
Name="VCMIDLTool"
TypeLibraryName=".\DebugU/smp.tlb"
HeaderFileName=""/>
<Tool
Name="VCPostBuildEventTool"/>
<Tool
Name="VCPreBuildEventTool"/>
<Tool
Name="VCPreLinkEventTool"/>
<Tool
Name="VCResourceCompilerTool"
PreprocessorDefinitions="_DEBUG"
Culture="1033"/>
<Tool
Name="VCWebServiceProxyGeneratorTool"/>
<Tool
Name="VCXMLDataGeneratorTool"/>
<Tool
Name="VCWebDeploymentTool"/>
<Tool
Name="VCManagedWrapperGeneratorTool"/>
<Tool
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
</Configuration>
<Configuration
Name="Release MinSize|Win32"
OutputDirectory=".\ReleaseMinSize"
IntermediateDirectory=".\ReleaseMinSize"
ConfigurationType="1"
UseOfMFC="0"
UseOfATL="2"
ATLMinimizesCRunTimeLibraryUsage="TRUE"
CharacterSet="2">
<Tool
Name="VCCLCompilerTool"
Optimization="1"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories=".;..\..\common;..\..\dx8sdk\include;..\WMPSDK10\include"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
StringPooling="TRUE"
ExceptionHandling="TRUE"
RuntimeLibrary="5"
EnableFunctionLevelLinking="TRUE"
ForceConformanceInForLoopScope="TRUE"
UsePrecompiledHeader="2"
PrecompiledHeaderFile=".\ReleaseMinSize/smp.pch"
AssemblerListingLocation=".\ReleaseMinSize/"
ObjectFile=".\ReleaseMinSize/"
ProgramDataBaseFileName=".\ReleaseMinSize/"
WarningLevel="3"
SuppressStartupBanner="TRUE"
CompileAs="0"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="odbc32.lib odbccp32.lib comctl32.lib Msimg32.lib ws2_32.lib rpcrt4.lib psapi.lib ..\..\dx8sdk\lib\d3d8.lib"
OutputFile=".\ReleaseMinSize/smp.exe"
LinkIncremental="1"
SuppressStartupBanner="TRUE"
IgnoreAllDefaultLibraries="FALSE"
ProgramDatabaseFile=".\ReleaseMinSize/smp.pdb"
SubSystem="2"
TargetMachine="1"/>
<Tool
Name="VCMIDLTool"
TypeLibraryName=".\ReleaseMinSize/smp.tlb"
HeaderFileName=""/>
<Tool
Name="VCPostBuildEventTool"/>
<Tool
Name="VCPreBuildEventTool"/>
<Tool
Name="VCPreLinkEventTool"/>
<Tool
Name="VCResourceCompilerTool"
PreprocessorDefinitions="NDEBUG"
Culture="1033"/>
<Tool
Name="VCWebServiceProxyGeneratorTool"/>
<Tool
Name="VCXMLDataGeneratorTool"/>
<Tool
Name="VCWebDeploymentTool"/>
<Tool
Name="VCManagedWrapperGeneratorTool"/>
<Tool
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
</Configuration>
<Configuration
Name="Debug|Win32"
OutputDirectory=".\Debug"
IntermediateDirectory=".\Debug"
ConfigurationType="1"
UseOfMFC="0"
ATLMinimizesCRunTimeLibraryUsage="FALSE"
CharacterSet="2">
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories=".;..\..\common;..\..\dx8sdk\include;..\WMPSDK10\include"
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
ExceptionHandling="TRUE"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
ForceConformanceInForLoopScope="TRUE"
UsePrecompiledHeader="2"
PrecompiledHeaderFile=".\Debug/smp.pch"
AssemblerListingLocation=".\Debug/"
ObjectFile=".\Debug/"
ProgramDataBaseFileName=".\Debug/"
WarningLevel="3"
SuppressStartupBanner="TRUE"
DebugInformationFormat="4"
CompileAs="0"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="odbc32.lib odbccp32.lib comctl32.lib Msimg32.lib ws2_32.lib rpcrt4.lib psapi.lib ..\..\dx8sdk\lib\d3d8.lib"
OutputFile=".\Debug/smp.exe"
LinkIncremental="1"
SuppressStartupBanner="TRUE"
IgnoreAllDefaultLibraries="FALSE"
GenerateDebugInformation="TRUE"
ProgramDatabaseFile=".\Debug/smp.pdb"
SubSystem="2"
TargetMachine="1"/>
<Tool
Name="VCMIDLTool"
TypeLibraryName=".\Debug/smp.tlb"
HeaderFileName=""/>
<Tool
Name="VCPostBuildEventTool"/>
<Tool
Name="VCPreBuildEventTool"/>
<Tool
Name="VCPreLinkEventTool"/>
<Tool
Name="VCResourceCompilerTool"
PreprocessorDefinitions="_DEBUG"
Culture="1033"/>
<Tool
Name="VCWebServiceProxyGeneratorTool"/>
<Tool
Name="VCXMLDataGeneratorTool"/>
<Tool
Name="VCWebDeploymentTool"/>
<Tool
Name="VCManagedWrapperGeneratorTool"/>
<Tool
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<Filter
Name="Source Files"
Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat">
<File
RelativePath="CWMPEventDispatch.cpp">
<FileConfiguration
Name="Unicode Release MinSize|Win32">
<Tool
Name="VCCLCompilerTool"
Optimization="1"
AdditionalIncludeDirectories=""
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_UNICODE;_ATL_DLL;_ATL_MIN_CRT;$(NoInherit)"/>
</FileConfiguration>
<FileConfiguration
Name="Release MinDependency|Win32">
<Tool
Name="VCCLCompilerTool"
Optimization="1"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""/>
</FileConfiguration>
<FileConfiguration
Name="Unicode Release MinDependency|Win32">
<Tool
Name="VCCLCompilerTool"
Optimization="1"
AdditionalIncludeDirectories=""
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_UNICODE;_ATL_STATIC_REGISTRY;_ATL_MIN_CRT;$(NoInherit)"/>
</FileConfiguration>
<FileConfiguration
Name="Unicode Debug|Win32">
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories=""
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_UNICODE;$(NoInherit)"
BasicRuntimeChecks="3"/>
</FileConfiguration>
<FileConfiguration
Name="Release MinSize|Win32">
<Tool
Name="VCCLCompilerTool"
Optimization="1"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""/>
</FileConfiguration>
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
BasicRuntimeChecks="3"/>
</FileConfiguration>
</File>
<File
RelativePath="CWMPHost.cpp">
<FileConfiguration
Name="Unicode Release MinSize|Win32">
<Tool
Name="VCCLCompilerTool"
Optimization="1"
AdditionalIncludeDirectories=""
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_UNICODE;_ATL_DLL;_ATL_MIN_CRT;$(NoInherit)"/>
</FileConfiguration>
<FileConfiguration
Name="Release MinDependency|Win32">
<Tool
Name="VCCLCompilerTool"
Optimization="1"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""/>
</FileConfiguration>
<FileConfiguration
Name="Unicode Release MinDependency|Win32">
<Tool
Name="VCCLCompilerTool"
Optimization="1"
AdditionalIncludeDirectories=""
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_UNICODE;_ATL_STATIC_REGISTRY;_ATL_MIN_CRT;$(NoInherit)"/>
</FileConfiguration>
<FileConfiguration
Name="Unicode Debug|Win32">
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories=""
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_UNICODE;$(NoInherit)"
BasicRuntimeChecks="3"/>
</FileConfiguration>
<FileConfiguration
Name="Release MinSize|Win32">
<Tool
Name="VCCLCompilerTool"
Optimization="1"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""/>
</FileConfiguration>
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
BasicRuntimeChecks="3"/>
</FileConfiguration>
</File>
<File
RelativePath=".\IceKey.cpp">
</File>
<File
RelativePath="smp.cpp">
<FileConfiguration
Name="Unicode Release MinSize|Win32">
<Tool
Name="VCCLCompilerTool"
Optimization="1"
AdditionalIncludeDirectories=""
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_UNICODE;_ATL_DLL;_ATL_MIN_CRT;$(NoInherit)"/>
</FileConfiguration>
<FileConfiguration
Name="Release MinDependency|Win32">
<Tool
Name="VCCLCompilerTool"
Optimization="1"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""/>
</FileConfiguration>
<FileConfiguration
Name="Unicode Release MinDependency|Win32">
<Tool
Name="VCCLCompilerTool"
Optimization="1"
AdditionalIncludeDirectories=""
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_UNICODE;_ATL_STATIC_REGISTRY;_ATL_MIN_CRT;$(NoInherit)"/>
</FileConfiguration>
<FileConfiguration
Name="Unicode Debug|Win32">
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories=""
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_UNICODE;$(NoInherit)"
BasicRuntimeChecks="3"/>
</FileConfiguration>
<FileConfiguration
Name="Release MinSize|Win32">
<Tool
Name="VCCLCompilerTool"
Optimization="1"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""/>
</FileConfiguration>
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
BasicRuntimeChecks="3"/>
</FileConfiguration>
</File>
</Filter>
<Filter
Name="Header Files"
Filter="h;hpp;hxx;hm;inl">
<File
RelativePath=".\IceKey.H">
</File>
<File
RelativePath="Resource.h">
</File>
<File
RelativePath=".\StdAfx.h">
</File>
</Filter>
<Filter
Name="Resource Files"
Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe">
<File
RelativePath=".\smp.ico">
</File>
<File
RelativePath="smp.rc">
<FileConfiguration
Name="Unicode Release MinSize|Win32">
<Tool
Name="VCResourceCompilerTool"
PreprocessorDefinitions="NDEBUG;$(NoInherit)"/>
</FileConfiguration>
<FileConfiguration
Name="Unicode Release MinDependency|Win32">
<Tool
Name="VCResourceCompilerTool"
PreprocessorDefinitions="NDEBUG;$(NoInherit)"/>
</FileConfiguration>
<FileConfiguration
Name="Unicode Debug|Win32">
<Tool
Name="VCResourceCompilerTool"
PreprocessorDefinitions="_DEBUG;$(NoInherit)"/>
</FileConfiguration>
</File>
</Filter>
<Filter
Name="Library Files"
Filter="">
</Filter>
</Files>
<Globals>
</Globals>
</VisualStudioProject>