Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

882 lines
17 KiB

/*++
Copyright (c) 1992 Microsoft Corporation
Module Name:
cdplayer.h
Abstract:
This module contains defines and declarations for the
the CD Audio app.
Author:
Rick Turner (ricktu) 15-Feb-1992
Revision History:
Rick Turner (ricktu) 24-Nov-1992
Changed for new internal playlist and track structures
--*/
/********** Includes **********/
#ifndef IN_CDAPI
#include <ntddcdrm.h>
#endif
/********** Macros **********/
#define TENCHAR(x) ((CHAR)(((int)'0')+(x/10))) // returns "tens" char of x
#define ONECHAR(x) ((CHAR)(((int)'0')+(x%10))) // returns "ones" char of x
#define CDTIME(x) gDevices[x]->time
#define CURRTRACK(x) gDevices[x]->time.CurrTrack
#define TRACK_M(x,y) gDevices[x]->toc.TrackData[y].Address[1]
#define TRACK_S(x,y) gDevices[x]->toc.TrackData[y].Address[2]
#define TRACK_F(x,y) gDevices[x]->toc.TrackData[y].Address[3]
#define FIRSTTRACK(x) gDevices[x]->toc.FirstTrack
#define ALLTRACKS(x) gDevices[x]->CdInfo.AllTracks
#define PLAYLIST(x) gDevices[x]->CdInfo.PlayList
#define SAVELIST(x) gDevices[x]->CdInfo.SaveList
#define TITLE(x) gDevices[x]->CdInfo.Title
#define ARTIST(x) gDevices[x]->CdInfo.Artist
#define NUMTRACKS(x) gDevices[x]->CdInfo.NumTracks
#define ISCHECKED(x,y) (GetMenuState(x,y,MF_BYCOMMAND) && MF_CHECKED)
#define gState gDevices[gCurrCdrom]->State
#define ABS(x) ((x) < 0 ? (-(x)) : (x))
//#define RSTDBG
/********** Definitions for CD Player Child Windows **********/
#define CHILD_STYLE (WS_CHILD | WS_VISIBLE)
#define IDB_PLAY 102
#define IDB_STOP 103
#define IDB_PAUSE 104
#define IDB_TRACK_FORWARD 105
#define IDB_TRACK_REVERSE 106
#define IDB_SCAN_FORWARD 107
#define IDB_SCAN_REVERSE 108
#define IDT_TRACK_NAME 111
#define IDB_ORDER 112
#define IDB_RANDOM 113
#define IDB_SINGLE 115
#define IDB_MULTI 116
#define IDB_CONT 117
#define IDB_INTRO 118
#define IDB_DISP_T 119
#define IDB_DISP_TR 120
#define IDB_DISP_DR 121
#define IDB_EDIT 122
#define IDB_HELP 122
#define IDX_ARTIST 140
#define IDX_TITLE 141
#define IDX_TRACK 142
#define IDT_ARTIST 150
#define IDT_TITLE 151
#define IDT_TOTAL_TIME 152
#define IDT_REMAINING_TIME 153
#define IDT_LED_TEXT 154
#define IDB_EJECT 155
#define IDT_MESSAGE 156
#define IDT_TRACK_TIME 157
#define IDT_REMAINING_TRACK 158
#define IDB_CDROM 159
#define IDB_SKIP_TRACK 160
/********** MENU item id's for CD Audio Window **********/
#define DATABASE_MENU_BASE 200
#define IDM_DATABASE_EDIT (DATABASE_MENU_BASE+1)
#define IDM_DATABASE_SHOW (DATABASE_MENU_BASE+2)
#define IDM_DATABASE_SEARCH (DATABASE_MENU_BASE+3)
#define IDM_DATABASE_EXIT (DATABASE_MENU_BASE+4)
#define VIEW_MENU_BASE 300
#define IDM_VIEW_TOOLBAR (VIEW_MENU_BASE+1)
#define IDM_VIEW_TRACKINFO (VIEW_MENU_BASE+2)
#define IDM_VIEW_RULER (VIEW_MENU_BASE+3)
#define IDM_VIEW_STATUS (VIEW_MENU_BASE+4)
#define OPTIONS_MENU_BASE 400
#define IDM_OPTIONS_RANDOM (OPTIONS_MENU_BASE+1)
#define IDM_OPTIONS_SINGLE (OPTIONS_MENU_BASE+2)
#define IDM_OPTIONS_MULTI (OPTIONS_MENU_BASE+3)
#define IDM_OPTIONS_SELECTED (OPTIONS_MENU_BASE+4)
#define IDM_OPTIONS_INTRO (OPTIONS_MENU_BASE+5)
#define IDM_OPTIONS_CONTINUOUS (OPTIONS_MENU_BASE+6)
#define IDM_OPTIONS_SAVE_SETTINGS (OPTIONS_MENU_BASE+7)
#define HELP_MENU_BASE 500
#define IDM_HELP_CONTENTS (HELP_MENU_BASE+1)
#define IDM_HELP_SEARCH (HELP_MENU_BASE+2)
#define IDM_HELP_USING (HELP_MENU_BASE+3)
#define IDM_HELP_ABOUT (HELP_MENU_BASE+4)
/********** Accelerator key id's CD Audio Window **********/
#define IDK_SKIPF 500
#define IDK_SKIPB 501
#define IDK_PLAY 503
#define IDK_STOP 504
#define IDK_PAUSE 505
#define IDK_EJECT 506
#define IDK_RESCAN 507
#define IDK_RANDOM (IDM_OPTIONS_RANDOM)
#define IDK_MULTI_DISC (IDM_OPTIONS_MULTI)
#define IDK_SELECTED_ORDER (IDM_OPTIONS_SELECTED)
#define IDK_INTRO_PLAY (IDM_OPTIONS_INTRO)
#define IDK_CONTINUOUS (IDM_OPTIONS_CONTINUOUS)
#define IDK_EDIT_PLAY_LIST (IDM_DATABASE_EDIT)
/********** String ID's for stringtable in .rc file **********/
#define STR_NUM_STRINGS 41
#define STR_MAX_STRING_LEN 255
#define STR_CDPLAYER 1
#define STR_TERMINATE 2
#define STR_FAIL_INIT 3
#define STR_NO_CDROMS 4
#define STR_FATAL_ERROR 5
#define STR_SCANNING 6
#define STR_INITIALIZATION 7
#define STR_TRACK1 8
#define STR_SAVE_CHANGES 9
#define STR_SAVE_INFO 10
#define STR_CANCEL_PLAY 11
#define STR_RESCAN 12
#define STR_READING_TOC 13
#define STR_CHANGE_CDROM 14
#define STR_CDPLAYER_TIME 15
#define STR_NO_RES 16
#define STR_INSERT_DISC 17
#define STR_DATA_NO_DISC 18
#define STR_ERR_GEN 19
#define STR_ERR_NO_MEDIA 20
#define STR_ERR_UNREC_MEDIA 21
#define STR_ERR_NO_DEVICE 22
#define STR_ERR_INV_DEV_REQ 23
#define STR_ERR_NOT_READY 24
#define STR_ERR_BAD_SEC 25
#define STR_ERR_IO_ERROR 26
#define STR_ERR_DEFAULT 27
#define STR_DISC_INSERT 28
#define STR_DISC_EJECT 29
#define STR_INIT_TOTAL_PLAY 30
#define STR_INIT_TRACK_PLAY 31
#define STR_TOTAL_PLAY 32
#define STR_TRACK_PLAY 33
#define STR_NEW_ARTIST 34
#define STR_NEW_TITLE 35
#define STR_INIT_TRACK 36
#define STR_HDR_ARTIST 37
#define STR_HDR_TRACK 38
#define STR_HDR_TITLE 39
#define STR_UNKNOWN 40
#define STR_BAD_DISC 41
/********** Notification classes for Status Line **********/
#define SL_INFO 255
#define SL_ERROR 254
#define STATUS_LINE_LENGTH 75
/********** Inter-thread messages ***********/
#define MESS_SKIP_F 100
#define MESS_SKIP_B 101
#define MESS_PAUSE_AND_START_SCAN 102
#define MESS_START_SCAN 103
#define MESS_FF 104
#define MESS_RW 105
#define MESS_END_SCAN 106
#define MESS_SYNC_DISPLAY 107
#define MESS_STOP 108
#define MESS_NULL 0
#define Q_SIZE 4096
/********** Display Update Flags ***********/
#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
/********** General defines **********/
#define DOWN 1
#define UP 0
#define NORMAL UP
#define MYTIMEOUT (500L) // Half second
#define FRAMES_PER_SECOND 75
#define FRAMES_PER_MINUTE (60*FRAMES_PER_SECOND)
#define DISPLAY_TRACK_TIME 0
#define DISPLAY_TRACK_REM_TIME 1
#define DISPLAY_DISC_REM_TIME 2
#define TRACK_TIME_FORMAT " [%02d] %02d%s%02d "
#define TRACK_TIME_LEADOUT_FORMAT " [%02d]-%02d%s%02d "
#define TRACK_REM_FORMAT " [%02d]<%02d%s%02d>"
#define DISC_REM_FORMAT " [--]<%02d%s%02d>"
/********** Defines for cdrom state **********/
//
// These are bit flags
//
#define PLAYING 0x0001
#define STOPPED 0x0002
#define PAUSED 0x0004
#define SKIP_F 0x0008
#define SKIP_B 0x0010
#define FF 0x0020
#define RW 0x0040
#define CD_LOADED 0x0080
#define NO_CD 0x0100
#define DATA_CD_LOADED 0x0200
#define EDITING 0x0400
#define PAUSED_AND_MOVED 0x0800
#define PLAY_PENDING 0x1000
/********** Definitions for Buttons,Tabbing **********/
#define STATE_NEW 0x0
#define STATE_DISABLED 0x1
#define STATE_UP 0x2
#define STATE_DOWN 0x4
#define MAX_BUTTONS 30
#define WM_TAB (WM_USER)
#define WM_BACKTAB (WM_USER + 1)
#define WM_ENTER (WM_USER + 2)
#define WM_ESC (WM_USER + 3)
#define WM_GRAYCONTROLS (WM_USER + 4)
#define WM_ENABLE_CONTROLS (WM_USER + 5)
//
// Definitions for the different available bitmaps
//
#define BTN_DISABLED 0
#define BTN_UP 1
#define BTN_DOWN 2
#define BTN_UP_FOCUS 3
#define BTN_DOWN_FOCUS 4
#define BTN_DOWNSEL 5
//
// # of pixels around each edge of button bitmaps.
//
#define BTN_X_BORDER 2
#define BTN_Y_BORDER 2
//
// Tabsets are for ordering for tabbing when
// child windows are being randomly inserted/removed.
//
#define TOOLBAR_TABSET_NUM 1
#define CONTROL_TABSET_NUM 2
#define TRKINFO_TABSET_NUM 3
/********** Color Defines **********/
#define cdWHITE RGB(0xFF,0xFF,0xFF)
#define cdBLACK RGB(0x00,0x00,0x00)
#define cdLTGRAY RGB(0xC0,0xC0,0xC0)
#define cdDKGRAY RGB(0x80,0x80,0x80)
#define BKCOLOR cdDKGRAY
#define cdLED RGB(0x80,0x80,0x00)
#define cdINFO RGB(0x00,0x00,0x80)
#define cdERROR RGB(0x80,0x00,0x00)
/********** Type definitions for CD database entries, etc. **********/
#define TITLE_LENGTH 50
#define ARTIST_LENGTH 50
#define TRACK_TITLE_LENGTH 40
#define MAX_TRACKS 100
#define NEW_FRAMEOFFSET 1234567
typedef struct _TRACK_INF {
struct _TRACK_INF *next;
INT TocIndex;
UCHAR name[TRACK_TITLE_LENGTH];
} TRACK_INF, *PTRACK_INF;
typedef struct _TRACK_PLAY {
struct _TRACK_PLAY *prevplay;
struct _TRACK_PLAY *nextplay;
INT TocIndex;
INT min;
INT sec;
} TRACK_PLAY, *PTRACK_PLAY;
typedef struct _TIMES {
PTRACK_PLAY CurrTrack;
INT TotalMin;
INT TotalSec;
INT RemMin;
INT RemSec;
INT TrackCurMin;
INT TrackCurSec;
INT TrackTotalMin;
INT TrackTotalSec;
INT TrackRemMin;
INT TrackRemSec;
} TIMES, *PTIMES;
typedef struct _ENTRY {
PTRACK_INF AllTracks;
PTRACK_PLAY PlayList;
PTRACK_PLAY SaveList;
INT NumTracks;
DWORD Id;
BOOL save;
BOOL IsVirginCd;
INT iFrameOffset;
UCHAR Title[TITLE_LENGTH];
UCHAR Artist[TITLE_LENGTH];
} ENTRY, *PENTRY;
typedef struct _CDROM {
HANDLE hCd;
CHAR drive;
DWORD State;
CDROM_TOC toc;
ENTRY CdInfo;
TIMES time;
} CDROM, *PCDROM;
typedef struct _CURRPOS {
UCHAR AudioStatus;
INT Track;
INT Index;
INT m;
INT s;
INT f;
INT ab_m;
INT ab_s;
INT ab_f;
} CURRPOS, *PCURRPOS;
typedef struct _CHILDCONTROL {
LPSTR name;
LPSTR class;
DWORD id;
DWORD ParentId;
BOOL cdDisable;
DWORD style;
PBOOL pbMatch;
BOOL bMatchState;
BOOL isTabstop;
INT bmXOffset;
INT x;
INT y;
INT w;
INT h;
HWND *phwnd;
DWORD state;
WNDPROC lpfnDefProc;
} CHILDCONTROL, *PCHILDCONTROL;
//
// Data structure to store tab control information.
//
typedef struct tag_TabControlList {
HWND hControl;
HWND hParent;
WNDPROC lpfnDefProc;
INT TabSet; // ascending order for toolbar/control/trk info
} TAB_CNTL, *PTAB_CNTL;
/********** Function Prototypes **********/
//
// from button.c
//
LRESULT CALLBACK
ButtonWndProc(
IN HWND,
IN UINT,
IN WPARAM,
IN LPARAM
);
BOOL
CreateChildWindows(
IN DWORD,
IN HWND
);
VOID
SetOdCntl(
IN HWND,
IN CHAR,
IN BOOL
);
VOID
DrawOdButton(
IN LPDRAWITEMSTRUCT,
IN HBITMAP,
IN PCHILDCONTROL
);
VOID
CheckAndSetControls(
);
//
// from cdplayer.c
//
BOOL FAR PASCAL
WndProc(
IN HWND,
IN DWORD,
IN DWORD,
IN LONG
);
VOID
DrawBitmap(
IN HDC,
IN HBITMAP,
IN INT,
IN INT
);
VOID
MyFatalExit(
IN LPSTR
);
LPSTR
IdStr(
IN INT
);
//
// from database.c
//
VOID
EraseTrackList(
IN INT
);
DWORD
ComputeDiscId(
IN INT
);
DWORD
ComputeNewDiscId(
IN INT
);
BOOL
DeleteEntry(
IN DWORD
);
BOOL
WriteEntry(
IN INT
);
BOOL
ReadEntry(
IN INT,
IN DWORD
);
BOOL
ReadSettings(
VOID
);
BOOL
WriteSettings(
VOID
);
VOID
AddFindEntry(
IN INT,
IN DWORD,
OUT PCDROM_TOC
);
VOID
ErasePlayList(
IN INT cdrom
);
VOID
ResetPlayList(
IN INT cdrom
);
BOOL
GetDiscInfoFromUser(
IN INT
);
PTRACK_PLAY
CopyPlayList(
PTRACK_PLAY p
);
//
// From thrds.c
//
VOID
ResetTrackComboBox(
IN INT
);
VOID
ComputeDriveComboBox(
IN VOID
);
VOID
EditPlayList(
IN INT
);
VOID
RescanDevice(
IN INT
);
VOID
SwitchToCdrom(
IN INT,
IN BOOL
);
PTRACK_INF
FindTrackNodeFromTocIndex(
IN INT,
IN PTRACK_INF
);
VOID
FigureTrackTime(
IN INT,
IN INT,
OUT LPINT,
OUT LPINT
);
PTRACK_PLAY
FindFirstTrack(
IN INT
);
PTRACK_PLAY
FindNextTrack(
IN BOOL
);
INT
FindContiguousEnd(
IN INT,
IN PTRACK_PLAY
);
VOID
FlipBetweenShuffleAndOrder(
IN VOID
);
VOID
ComputeAndUseShufflePlayLists(
IN VOID
);
VOID
ComputeSingleShufflePlayList(
IN INT
);
VOID
RestorePlayListsFromShuffleLists(
IN VOID
);
VOID
CloseThreads(
VOID
);
VOID InitializeThreads(
VOID
);
VOID
TimeAdjustInitialize(
IN INT
);
VOID TimeAdjustIncSecond(
IN INT
);
VOID
TimeAdjustDecSecond(
IN INT
);
VOID TimeAdjustSkipToTrack(
IN INT,
IN PTRACK_PLAY
);
BOOL
PostDisplayMessage(
IN DWORD
);
DWORD
ReadDisplayMessage(
VOID
);
VOID
FlushDisplayMessageQueue(
VOID
);
VOID
ValidatePosition(
IN INT
);
#ifdef RSTDBG
VOID
CdPlayerDebugPrint(
INT,
LPSTR,
...
);
VOID
DumpPlayList(
PTRACK_PLAY
);
VOID
DumpTrackList(
PTRACK_INF
);
#define DBGPRINT(_x_) CdPlayerDebugPrint _x_
#define DUMPTRACKLIST(_x_) DumpTrackList _x_
#define DUMPPLAYLIST(_x_) DumpPlayList _x_
#else
#define DBGPRINT(_x_)
#define DUMPTRACKLIST(_x_)
#define DUMPPLAYLIST(_x_)
#endif
//
// From control.c
//
VOID
UpdateDisplay(
IN DWORD
);
//
// From status.c
//
VOID
StatusLine(
IN UINT,
IN LPSTR
);
//
// From cdapi.c
//
DWORD
ScanForCdromDevices(
VOID
);
BOOL
ReadTOC(
IN INT
);
BOOL
PlayCurrTrack(
IN INT
);
BOOL
StopTheCdromDrive(
IN INT
);
BOOL
PauseTheCdromDrive(
IN INT
);
BOOL
ResumeTheCdromDrive(
IN INT
);
BOOL
SeekToCurrSecond(
IN INT
);
BOOL
GetCurrPos(
IN INT,
OUT PCURRPOS
);
BOOL
SeekToTrackAndHold(
IN INT,
IN INT
);
BOOL
EjectTheCdromDisc(
IN INT
);
VOID
CheckUnitCdrom(
IN INT
);
/********** Global Variables! **********/
//
// CD_MAIN must be defined in one AND ONLY one source file. Currently
// this source file is cdplayer.c
//
#ifndef CD_MAIN
#define GLOBAL extern
#else
#define GLOBAL
#endif
GLOBAL HWND gMainWnd;
GLOBAL HWND gToolBarWnd;
GLOBAL HWND gControlWnd;
GLOBAL HWND gTrackInfoWnd;
GLOBAL HWND gStatusWnd;
GLOBAL HWND gLEDWnd;
GLOBAL HWND gTitleNameWnd;
GLOBAL HWND gDiscTimeWnd;
GLOBAL HWND gTrackTimeWnd;
GLOBAL HWND gCdromWnd;
GLOBAL HWND ghwndTitle,ghwndTrack;
GLOBAL HWND ghwndOrder,ghwndRandom,ghwndSingle,ghwndMulti,ghwndContinuous;
GLOBAL HWND ghwndIntro,ghwndDispT,ghwndDispTr,ghwndDispDr,ghwndEdit;
GLOBAL HWND ghwndPlay,ghwndPause,ghwndStop,ghwndSkipB,ghwndScanB;
GLOBAL HWND ghwndScanF,ghwndSkipF,ghwndEject;
GLOBAL HWND gTrackNameWnd;
GLOBAL HANDLE gInstance;
GLOBAL PCDROM gDevices[ 50 ];
GLOBAL INT gNumCdDevices;
GLOBAL INT gCurrCdrom;
GLOBAL INT gLastCdrom;
GLOBAL INT gMainWinWidth;
GLOBAL HBITMAP hbmCd;
GLOBAL HBITMAP hbmNoCd;
GLOBAL BOOL gIconic;
GLOBAL BOOL gRandom;
GLOBAL BOOL gOrder;
GLOBAL BOOL gContinuous;
GLOBAL BOOL gIntro;
GLOBAL BOOL gMulti;
GLOBAL BOOL gDisplayT;
GLOBAL BOOL gDisplayTr;
GLOBAL BOOL gDisplayDr;
GLOBAL BOOL gSaveSettings;
GLOBAL BOOL gPlaying;
GLOBAL BOOL gPaused;
GLOBAL BOOL gStopped;
GLOBAL BOOL gSkipF;
GLOBAL BOOL gScanF;
GLOBAL BOOL gScanB;
GLOBAL BOOL gSkipB;
GLOBAL BOOL gTrue;
GLOBAL HANDLE hPlayThrd;
GLOBAL HANDLE hPauseThrd;
GLOBAL HANDLE hProbeThrd;
GLOBAL HANDLE hPlayEv;
GLOBAL HANDLE hPauseEv;
GLOBAL HANDLE hFont;
GLOBAL HANDLE hPlayMutex;
GLOBAL HPEN hpBlack;
GLOBAL HPEN hpLtGray;
GLOBAL HPEN hpDkGray;
GLOBAL HPEN hpWhite;
GLOBAL HPEN hpBlue;
GLOBAL CHAR gszArtistTxt[50], gszTitleTxt[50], gszUnknownTxt[50], gszTrackTxt[50];
GLOBAL CHAR gszTimeSep[50];
extern CHILDCONTROL cChild[];
extern gNumControls;
extern CHAR gszButton[], gszCdText[], gszComboBox[], gszCdInfo[];
extern HFONT hStatusBarFont;
#ifdef RSTDBG
GLOBAL CHAR dbgs[2000];
GLOBAL INT CdPlayerDebugLevel;
#endif