|
|
/******************************Module*Header*******************************\
* Module Name: cdplayer.h * * * * * Created: dd-mm-93 * Author: Stephen Estrop [StephenE] * * Copyright (c) 1993 Microsoft Corporation \**************************************************************************/ //#ifdef CHICAGO
#include <shellapi.h>
//#endif
/* -------------------------------------------------------------------------
** Replace the WM_MENUSELECT message craker because it contains a bug. ** ------------------------------------------------------------------------- */ #ifdef HANDLE_WM_MENUSELECT
#undef HANDLE_WM_MENUSELECT
#define HANDLE_WM_MENUSELECT(hwnd, wParam, lParam, fn) \
((fn)( (hwnd), (HMENU)(lParam), \ (UINT)LOWORD(wParam), NULL, (UINT)HIWORD(wParam)), 0L) #endif
#ifndef NUMELEMS
#define NUMELEMS(a) (sizeof((a))/sizeof((a)[0]))
#endif // NUMELEMS
#define NUM_OF_CONTROLS (IDC_CDPLAYER_LAST - IDC_CDPLAYER_FIRST + 1)
#define NUM_OF_BUTTONS (IDC_BUTTON8 - IDC_BUTTON1 + 1)
#define INDEX( _x_ ) ((_x_) - IDC_CDPLAYER_FIRST)
#if DBG
void dprintf( char *lpszFormat, ... ); void CDAssert( LPSTR x, LPSTR file, int line ); #undef ASSERT
#define ASSERT(_x_) if (!(_x_)) CDAssert( #_x_, __FILE__, __LINE__ )
#else
#undef ASSERT
#define ASSERT(_x_)
#endif
#define WM_CDPLAYER_MSG_BASE (WM_USER + 0x1000)
#define WM_NOTIFY_CDROM_COUNT (WM_CDPLAYER_MSG_BASE)
#define WM_NOTIFY_TOC_READ (WM_CDPLAYER_MSG_BASE+1)
#define HEARTBEAT_TIMER_ID 0x3243
#ifdef DAYTONA
#define HEARTBEAT_TIMER_RATE 250 /* 4 times a second */
#else
#define HEARTBEAT_TIMER_RATE 500 /* 2 times a second */
#endif
#define SKIPBEAT_TIMER_ID 0x3245
#define SKIPBEAT_TIMER_RATE 200 /* 5 times a second */
#define SKIPBEAT_TIMER_RATE2 100 /* 10 times a second */
#define SKIPBEAT_TIMER_RATE3 50 /* 20 times a second */
#define SKIP_ACCELERATOR_LIMIT1 5 /* 5 seconds */
#define SKIP_ACCELERATOR_LIMIT2 20 /* 20 seconds */
#define FRAMES_PER_SECOND 75
#define FRAMES_PER_MINUTE (60*FRAMES_PER_SECOND)
#define DISPLAY_UPD_LED 0x00000001
#define DISPLAY_UPD_TITLE_NAME 0x00000002
#define DISPLAY_UPD_TRACK_NAME 0x00000004
#define DISPLAY_UPD_TRACK_TIME 0x00000008
#define DISPLAY_UPD_DISC_TIME 0x00000010
#define DISPLAY_UPD_CDROM_STATE 0x00000020
#define DISPLAY_UPD_LEADOUT_TIME 0x80000000
#define INTRO_LOWER_LEN 5
#define INTRO_DEFAULT_LEN 10
#define INTRO_UPPER_LEN 15
// Audio Play Files consist completely of this header block. These
// files are readable in the root of any audio disc regardless of
// the capabilities of the drive.
//
// The "Unique Disk ID Number" is a calculated value consisting of
// a combination of parameters, including the number of tracks and
// the starting locations of those tracks.
//
// Applications interpreting CDDA RIFF files should be advised that
// additional RIFF file chunks may be added to this header in the
// future in order to add information, such as the disk and song title.
#define RIFF_RIFF 0x46464952
#define RIFF_CDDA 0x41444443
typedef struct { DWORD dwRIFF; // 'RIFF'
DWORD dwSize; // Chunk size = (file size - 8)
DWORD dwCDDA; // 'CDDA'
DWORD dwFmt; // 'fmt '
DWORD dwCDDASize; // Chunk size of 'fmt ' = 24
WORD wFormat; // Format tag
WORD wTrack; // Track number
DWORD DiscID; // Unique disk id
DWORD lbnTrackStart; // Track starting sector (LBN)
DWORD lbnTrackLength; // Track length (LBN count)
DWORD msfTrackStart; // Track starting sector (MSF)
DWORD msfTrackLength; // Track length (MSF)
} RIFFCDA;
BOOL InitInstance( HANDLE hInstance );
BOOL CALLBACK MainWndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam );
BOOL CDPlay_OnInitDialog( HWND hwnd, HWND hwndFocus, LPARAM lParam );
void CDPlay_OnInitMenuPopup( HWND hwnd, HMENU hMenu, UINT item, BOOL fSystemMenu );
#ifdef DAYTONA
void CDPlay_OnPaint( HWND hwnd ); #endif
void CDPlay_OnSysColorChange( HWND hwnd );
void CDPlay_OnWinIniChange( HWND hwnd, LPCTSTR lpszSectionName );
LRESULT CALLBACK SubClassedToolTips( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
LRESULT CDPlay_OnNotify( HWND hwnd, int idFrom, NMHDR *pnmhdr );
void CDPlay_OnLButtonDown( HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags );
UINT CDPlay_OnNCHitTest( HWND hwnd, int x, int y );
BOOL CDPlay_OnCopyData( HWND hwnd, PCOPYDATASTRUCT lpcpds );
BOOL CDPlay_OnTocRead( int iDriveRead );
BOOL CDPlay_OnDeviceChange( HWND hwnd, WPARAM wParam, LPARAM lParam);
void CDPlay_OnDropFiles( HWND hwnd, HDROP hdrop );
void CDPlay_OnMenuSelect( HWND hwnd, HMENU hmenu, int item, HMENU hmenuPopup, UINT flags );
BOOL CDPlay_OnDrawItem( HWND hwnd, const DRAWITEMSTRUCT *lpdis );
void CDPlay_OnCommand( HWND hwnd, int id, HWND hwndCtl, UINT codeNotify );
void CDPlay_OnDestroy( HWND hwnd );
BOOL CDPlay_OnClose( HWND hwnd, BOOL fShuttingDown );
void CDPlay_OnEndSession( HWND hwnd, BOOL fEnding );
void CDPlay_OnSize( HWND hwnd, UINT state, int cx, int cy );
void ShowStatusbar( void );
void ShowToolbar( void );
void ShowTrackInfo( void );
BOOL CALLBACK ChildEnumProc( HWND hwndChild, LPARAM lp );
BOOL CreateToolbarsAndStatusbar( HWND hwnd );
void AdjustChildButtons( HWND hwnd );
void FatalApplicationError( INT uIdStringResource, ... );
void LED_ToggleDisplayFont( HWND hwnd, BOOL fFont );
LPTSTR IdStr( int idResource );
void CheckMenuItemIfTrue( HMENU hMenu, UINT idItem, BOOL flag );
void ReadSettings( void );
void UpdateToolbarButtons( void );
void UpdateToolbarTimeButtons( void );
BOOL LockTableOfContents( int cdrom );
BOOL LockALLTableOfContents( void );
LPVOID AllocMemory( UINT uSize );
void SetPlayButtonsEnableState( void );
void CALLBACK HeartBeatTimerProc( HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime );
void CALLBACK SkipBeatTimerProc( HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime );
void UpdateDisplay( DWORD Flags );
HBRUSH Common_OnCtlColor( HWND hwnd, HDC hdc, HWND hwndChild, int type );
BOOL Common_OnMeasureItem( HWND hwnd, MEASUREITEMSTRUCT *lpMeasureItem );
void DrawTrackItem( HDC hdc, const RECT *r, DWORD item, BOOL selected );
void DrawDriveItem( HDC hdc, const RECT *r, DWORD item, BOOL selected );
void EnableToolTips( BOOL fEnable );
void CdPlayerAlreadyRunning( void );
void CdPlayerStartUp( void );
void CompleteCdPlayerStartUp( void );
BOOL IsPlayOptionGiven( LPTSTR lpCmdLine );
BOOL IsUpdateOptionGiven( LPTSTR lpCmdLine );
/* -------------------------------------------------------------------------
** Public Globals - Most of these should be treated as read only. ** ------------------------------------------------------------------------- */ #ifndef GLOBAL
#define GLOBAL extern
#endif
GLOBAL HINSTANCE g_hInst; GLOBAL HWND g_hwndApp; GLOBAL HWND g_hwndToolbar; GLOBAL HWND g_hwndStatusbar; GLOBAL HWND g_hwndControls[NUM_OF_CONTROLS]; GLOBAL BOOL g_fStatusbarVisible; GLOBAL BOOL g_fToolbarVisible; GLOBAL BOOL g_fSelectedOrder; GLOBAL BOOL g_fSingleDisk; GLOBAL BOOL g_fIntroPlay; GLOBAL BOOL g_fContinuous; GLOBAL BOOL g_fSaveOnExit; GLOBAL BOOL g_fDisplayT; GLOBAL BOOL g_fDisplayTr; GLOBAL BOOL g_fDisplayDr; GLOBAL BOOL g_fMultiDiskAvailable; GLOBAL BOOL g_fIsIconic; GLOBAL BOOL g_fSmallLedFont; GLOBAL BOOL g_fToolTips; GLOBAL BOOL g_fStopCDOnExit; GLOBAL BOOL g_fPlay;
GLOBAL int g_NumCdDevices; GLOBAL int g_LastCdrom; GLOBAL int g_CurrCdrom; GLOBAL int g_IntroPlayLength;
GLOBAL TCHAR g_szArtistTxt[50]; GLOBAL TCHAR g_szTitleTxt[50]; GLOBAL TCHAR g_szUnknownTxt[50]; GLOBAL TCHAR g_szTrackTxt[50]; GLOBAL TCHAR g_szEmpty[];
GLOBAL BOOL g_fFlashLed;
GLOBAL HBITMAP g_hbmTrack; GLOBAL HBITMAP g_hbmInsertPoint; GLOBAL HBITMAP g_hbmEditBtns;
GLOBAL HFONT g_hDlgFont; GLOBAL HFONT hLEDFontS; GLOBAL HFONT hLEDFontL; GLOBAL LPSTR g_lpCmdLine;
extern BOOL g_fTrackInfoVisible;
GLOBAL CRITICAL_SECTION g_csTOCSerialize;
|