500 lines
9.1 KiB
C
500 lines
9.1 KiB
C
/******************************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;
|