windows-nt/Source/XPSP1/NT/multimedia/media/mplayer2/mplayer.h
2020-09-26 16:20:57 +08:00

725 lines
28 KiB
C

/*-----------------------------------------------------------------------------+
| MPLAYER.H |
| |
| (C) Copyright Microsoft Corporation 1991. All rights reserved. |
| |
| Revision History |
| Oct-1992 MikeTri Ported to WIN32 / WIN16 common code |
| |
+-----------------------------------------------------------------------------*/
#if (DBG || defined(DEBUG_RETAIL))
#ifndef DEBUG
#define DEBUG
#endif
#endif
#include <stdlib.h> // Make sure _MAX_PATH is defined if it's there
#include <malloc.h>
#include "dynalink.h"
#include "menuids.h"
#include "helpids.h"
#include "mci.h"
#include "unicode.h"
#include "alloc.h"
#ifndef CHICAGO_PRODUCT
#ifndef RC_INVOKED
#include <winuserp.h>
#endif
#endif
#include <commctrl.h>
#define TBM_SHOWTICS (WM_USER+30)
/* Dialog style on Win4+
*/
#ifndef DS_CONTEXTHELP
#define DS_CONTEXTHELP 0
#endif
/* These macros were originally defined for 16-32 portability.
* The code is now expected to build for Win32 only.
*/
#define LONG2POINT(l, pt) ((pt).x = (SHORT)LOWORD(l), (pt).y = (SHORT)HIWORD(l))
#define GETWINDOWUINT(hwnd, index) (UINT)GetWindowLongPtr(hwnd, index)
#define GETWINDOWID(hwnd) GETWINDOWUINT((hwnd), GWL_ID)
#define GETHWNDINSTANCE(hwnd) (HINSTANCE)GetWindowLongPtr((hwnd), GWLP_HINSTANCE)
#define SETWINDOWUINT(hwnd, index, ui) (UINT)SetWindowLongPtr(hwnd, index, (LONG_PTR)(ui))
#define MMoveTo(hdc, x, y) MoveToEx(hdc, x, y, NULL)
#define MSetViewportExt(hdc, x, y) SetViewportExtEx(hdc, x, y, NULL)
#define MSetViewportOrg(hdc, x, y) SetViewportOrgEx(hdc, x, y, NULL)
#define MSetWindowExt(hdc, x, y) SetWindowExtEx(hdc, x, y, NULL)
#define MSetWindowOrg(hdc, x, y) SetWindowOrgEx(hdc, x, y, NULL)
#define MGetCurrentTask (HANDLE)ULongToPtr(GetCurrentThreadId())
#define _EXPORT
BOOL WINAPI MGetTextExtent(HDC hdc, LPSTR lpstr, INT cnt, INT *pcx, INT *pcy);
#ifndef RC_INVOKED
#pragma warning(disable: 4001) // nonstandard extension 'single line comment' was used
#pragma warning(disable: 4201) // nonstandard extension used : nameless struct/union
#pragma warning(disable: 4214) // nonstandard extension used : bit field types other than int
#pragma warning(disable: 4103) // used #pragma pack to change alignment (on Chicago)
#endif
#ifdef OLE1_HACK
/* Disgusting OLE1 hackery:
*/
void Ole1UpdateObject(void);
extern DWORD gDocVersion;
#define DOC_VERSION_NONE 0
#define DOC_VERSION_OLE1 1
#define DOC_VERSION_OLE2 2
VOID SetDocVersion( DWORD DocVersion );
#endif /* OLE1_HACK */
//
// have the debug version show preview.
//
extern BOOL gfShowPreview;
#define DEF_WIDTH ((GetACP()==932)?600:400)
#define DEF_HEIGHT 124
#define CAPTION_LEN 80 // max length of caption
/* BOGUS constants for Layout() */
#define FSARROW_WIDTH 20 // width of one arrow bitmap for SB
#define FSARROW_HEIGHT 17 // height
#define FSTRACK_HEIGHT 30 // height of the scrollbar
#define LARGE_CONTROL_WIDTH 172 // Width of full transport toolbar
#define SMALL_CONTROL_WIDTH 73 // width with only 3 buttons
#define SB_XPOS 4 // how far in to put scrollbar
#define SHOW_MARK_WIDTH 363 // when to drop mark buttons
#define MAP_HEIGHT 14 // height of trackmap window
#define FULL_TOOLBAR_WIDTH 307 // when to drop last 4 transport btns
#define MARK_WIDTH 52 // width of mark button toolbar
#define MAX_NORMAL_HEIGHT 73 // max size for non-windowed device
#define MIN_NORMAL_HEIGHT 27 // min size for anybody
#ifndef _MAX_PATH
#define _MAX_PATH 144 /* max. length of full pathname */
#endif
#define TOOLBAR_HEIGHT 27
#define BUTTONWIDTH 25
#define BUTTONHEIGHT 23
#define SZCODE TCHAR
/* Strings that MUST be ANSI even if we're compiling Unicode
* e.g. to pass to GetProcAddress, which is ANSI only:
*/
#define ANSI_SZCODE CHAR
#define ANSI_TEXT( quote ) quote
/* Macro for string replacement parameter in printf etc:
* (Anyone know of a better way to do this?)
*/
#ifdef UNICODE
#define TS L"ws"L
#ifdef DEBUG
#define DTS "ws" /* For unicode args to ASCII API */
#endif
#else
#define TS "s"
#ifdef DEBUG
#define DTS "s"
#endif
#endif /* UNICODE */
/* defines for set sel dlg box */
#define IDC_EDITALL 220 // these 3 are a group
#define IDC_EDITSOME 221
#define IDC_EDITNONE 222
#define IDC_EDITFROM 223
#define IDC_EDITTO 224
#define IDC_EDITNUM 225
#define IDC_SELECTG 226 /* Needed for Context sensitive help */
#define IDC_ETTEXT 227
#define IDC_ESTEXT 228
#define ARROWEDITDELTA 10 /* Add to arrow ID to get edit ID */
#define IDC_XARROWS 180
#define IDC_YARROWS 181
#define IDC_WARROWS 182
#define IDC_HARROWS 183
#define IDC_FARROWS 183
#define IDC_TARROWS 184
#define IDC_NARROWS 210
/* Controls for Selection range dialog */
#define IDC_MARKIN 150
#define IDC_MARKOUT 151
#define DLG_MCICOMMAND 942
#define IDC_MCICOMMAND 10
#define IDC_RESULT 11
/* Bit fields for the gwOptions */
// bottom two bits = Scale Mode (01 = FRAMES) (10 = TIME) (11 = TRACK)
#define OPT_SCALE 0x0003
#define OPT_TITLE 0x0004
#define OPT_BORDER 0x0008
#define OPT_PLAY 0x0010
#define OPT_BAR 0x0020
#define OPT_DITHER 0x0040
#define OPT_AUTORWD 0x0080
#define OPT_AUTOREP 0x0100
#define OPT_USEPALETTE 0x0200
#define OPT_DEFAULT (ID_TIME|OPT_TITLE|OPT_BORDER|OPT_PLAY|OPT_BAR)
#define OPT_FIRST OPT_TITLE
#if 1
#define OPT_LAST OPT_AUTOREP
#else
#define OPT_LAST OPT_USEPALETTE
#endif
#define IDC_CAPTIONTEXT 202
#define IDC_OLEOBJECT 203
#define IDC_TITLETEXT 160
#define TITLE_HEIGHT TOOLBAR_HEIGHT // height of title bar part of object picture
/* Options used when initial Open dialog is displayed:
*/
#define OPEN_NONE (UINT)-1
#define OPEN_VFW 0
#define OPEN_MIDI 1
#define OPEN_WAVE 2
#define MCIWND_STYLE WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | \
MCIWNDF_NOPLAYBAR | MCIWNDF_NOMENU | MCIWNDF_SHOWNAME | \
MCIWNDF_NOTIFYALL
/* Parameters for GetIconForCurrentDevice:
*/
#define GI_LARGE 0
#define GI_SMALL 1
/* For mapping strings to device IDs
*/
typedef struct _STRING_TO_ID_MAP
{
LPTSTR pString;
UINT ID;
}
STRING_TO_ID_MAP, *PSTRING_TO_ID_MAP;
/* global array of all mci devices */
typedef struct {
UINT wDeviceType; // flags, DTMCI_*
PTSTR szDevice; // name used to open device e.g. "WaveAudio"
PTSTR szDeviceName; // name to display to user e.g. "Wave Audio"
PTSTR szFileExt; // file extensions used by device.
} MCIDEVICE, *PMCIDEVICE;
#define MAX_MCI_DEVICES 50
extern UINT gwCurDevice; /* current device */
extern UINT gwNumDevices; /* number of available devices */
extern MCIDEVICE garMciDevices[]; /* array with info about a device */
/* global variables */
extern DWORD gwPlatformId; // Win95, NT etc
extern BOOL gfEmbeddedObject; // TRUE if editing embedded OLE object
extern BOOL gfPlayingInPlace; // TRUE if playing in place
extern BOOL gfParentWasEnabled; // TRUE if parent was enabled
extern BOOL gfShowWhilePlaying; //
extern BOOL gfDirty; //
extern int gfErrorBox; // TRUE if we have a message box active
extern BOOL gfErrorDeath; // Die when errorbox is up
extern BOOL gfOleInitialized;
extern BOOL gfOle2Open;
extern BOOL gfOle2IPEditing;
extern BOOL gfOle2IPPlaying;
extern RECT gInPlacePosRect;
extern HWND ghwndCntr;
extern HWND ghwndIPToolWindow;
extern HWND ghwndIPScrollWindow;
extern LPWSTR sz1Ole10Native;
extern UINT gwOptions; /* play options */
extern UINT gwOpenOption; /* Type of file to open */
extern BOOL gfOpenDialog; // If TRUE, put up open dialog
extern BOOL gfCloseAfterPlaying; // TRUE if we are to hide after play
extern BOOL gfRunWithEmbeddingFlag; // TRUE if run with "-Embedding"
extern HMENU ghMenu; /* normal menu */
extern HICON hiconApp; /* the applicaiion's icon */
extern HANDLE ghInst; /* the application's instance handle */
extern DWORD gfdwFlagsEx; /* the application's RTL status */
extern HANDLE ghInstPrev; /* the application's instance handle */
extern HFONT ghfontMap; /* font used for drawing the track map */
extern HWND ghwndApp; /* handle to the main dialog window */
extern HWND ghwndMap; /* handle to the track map window */
extern HWND ghwndTrackbar; /* handle to the horizontal track bar */
extern HWND ghwndToolbar; /* handle to the toolbar */
extern HWND ghwndMark; /* handle to the Mark buttons toolbar */
extern HWND ghwndFSArrows; /* handle to the scrollbar arrows */
extern HWND ghwndStatic; /* handle ot the static text window */
extern HWND ghwndMCI; /* MCI window returned from MCIWndCreate */
extern HBRUSH ghbrFillPat; /* The selection fill pattern. */
extern UINT gwHeightAdjust; /* Difference between client & non-c height */
extern LPTSTR gszCmdLine; /* null-terminated command line str. */
extern int giCmdShow; /* show command */
extern UINT gwDeviceID; /* current MCI device ID (or NULL) */
extern UINT gwStatus; /* status of current MCI device */
extern UINT gwNumTracks; /* current # of tracks in the medium */
extern UINT gwFirstTrack; /* number of first track */
extern BOOL gfValidMediaInfo; /* are we displaying valid media info? */
extern BOOL gfValidCaption; /* are we displaying a valid caption? */
extern BOOL gfPlayOnly; /* play only window? */
extern BOOL gfJustPlayed; /* Just sent a PlayMCI() command */
extern DWORD gdwLastSeekToPosition; /* Last requested seek position */
extern DWORD gdwMediaLength; /* length of entire medium in msec. */
extern DWORD gdwMediaStart; /* start of medium in msec. */
extern DWORD NEAR * gadwTrackStart; /* array of track start positions */
extern UINT gwOptions; /* the options from the dlg box */
extern SZCODE aszIntl[]; /* string for international section */
extern TCHAR gachAppName[]; /* string for holding the app. name */
extern TCHAR gachClassRoot[]; /* string for holding the class root OLE "Media Clip"*/
extern TCHAR chDecimal; /* Stores current decimal separator */
extern TCHAR chTime; /* Stores the current Time separator */
extern TCHAR chLzero; /* Stores if Leading Zero required for decimal numbers less than 1 */
extern TCHAR aszNotReadyFormat[];
extern TCHAR aszReadyFormat[];
extern TCHAR gachFileDevice[_MAX_PATH]; /* string holding the current file or device name */
extern TCHAR gachWindowTitle[_MAX_PATH]; /* string holding name */
extern TCHAR gachCaption[_MAX_PATH]; /* string holding name */
extern TCHAR gachOpenExtension[5]; /* Non-null if a device extension passed in */
extern TCHAR gachOpenDevice[128]; /* Non-null if a device extension passed in */
extern TCHAR gszHelpFileName[];/* name of the help file */
extern TCHAR gszHtmlHelpFileName[];/* name of the html help file */
extern DWORD gdwSeekPosition; /* Position to seek to after skipping track. */
extern BOOL gfScrollTrack; /* is user dragging the scrollbar thumb? */
extern UINT gwCurScale; /* scale is TIME/TRACKS/FRAMES */
extern INT gwCurZoom; /* current zoom factor */
extern HWND ghwndMCI; /* current window for window objects */
extern RECT grcSize; /* size of MCI object */
extern BOOL gfAppActive; /* Our app active? (incl. playback win) */
extern LONG glSelStart; /* See if selection changes (dirty object)*/
extern LONG glSelEnd; /* See if selection changes (dirty object)*/
extern HPALETTE ghpalApp;
extern BOOL gfInClose;
extern BOOL gfCurrentCDNotAudio; /* TRUE when we have a CD that we can't play */
extern BOOL gfWinIniChange;
extern DWORD gdwPosition; /* The Seek position we emedded */
extern BOOL gfSeenPBCloseMsg;
extern int giHelpContext; /* Contains the context id for help */
extern HANDLE heventDeviceMenuBuilt;/* Event will be signaled when device menu complete */
extern HANDLE heventCmdLineScanned; /* Event will be signaled when command line scanned */
// strings for registration database
extern SZCODE aszKeyMID[];
extern SZCODE aszKeyRMI[];
extern SZCODE aszKeyAVI[];
extern SZCODE aszKeyMMM[];
extern SZCODE aszKeyWAV[];
extern SZCODE szCDAudio[];
extern SZCODE szVideoDisc[];
extern SZCODE szSequencer[];
extern SZCODE szVCR[];
extern SZCODE szWaveAudio[];
extern SZCODE szAVIVideo[];
/* constants */
#define DEVNAME_MAXLEN 40 /* the maximum length of a device name */
/* IDs of icons and dialog boxes */
#define APPICON 10 /* ID of the application's icon */
#define IDI_DDEFAULT 11
#define IDI_DSOUND 12
#define IDI_DVIDEO 13
#define IDI_DANI 14
#define IDI_DMIDI 15
#define IDI_DCDA 16
#define IDC_DRAG 17
#define MPLAYERBOX 11 /* ID of the main "MPlayer" dialog box */
#define MPLAYERACCEL 1
/* IDs of the MPLAYERBOX (main dialog box) controls */
#define ID_MAP 20 /* ID of thetrack map */
#define ID_SB 21 /* ID of the horizontal scrollbar */
#define ID_STATIC 22 /* ID of the static text control */
#define ID_PLAY 23 /* Command 'Play' */
#define ID_PAUSE 24 /* Command 'Pause' */
#define ID_STOP 25 /* Command 'Stop' */
#define ID_PLAYSEL 26 /* Command 'Play Selection' */
#define ID_PLAYTOGGLE 27 /* For accelerator to toggle play/pause*/
#define ID_EJECT 28 /* Command 'Eject' */
#define ID_ESCAPE 29 /* Escape key was hit */
/* IDs of the string resources */
#define IDS_APPNAME 100 /* ID of the application name string */
#define IDS_OPENTITLE 101 /* ID of the "Open Media File" str. */
#define IDS_OUTOFMEMORY 102 /* ID of the "Out of memory" string */
#define IDS_CANTOPENFILEDEV 103 /* ID of the "Cannot open file/dev" str*/
#define IDS_DEVICEINUSE 104 /* ID of the "Device is in use" string */
#define IDS_CANTOPENFILE 105 /* ID of the "Cannot open file" string */
#define IDS_CANTACCESSFILEDEV 106 /* ID of the "Cannot access..." str. */
#define IDS_DEVICECANNOTPLAY 107 /* ID of the "Cannot play..." str. */
#define IDS_SCALE 108 /* ID of the "Scale" string */
#define IDS_CANTPLAY 109
#define IDS_CANTEDIT 110
#define IDS_CANTCOPY 111
#define IDS_FINDFILE 112
#define IDS_DEVICENOTINSTALLED 113
#define IDS_DEVICEERROR 114 /* ID of the "Device error" str. */
#define IDS_CANTPLAYSOUND 115
#define IDS_CANTPLAYVIDEO 116
#define IDS_CANTPLAYMIDI 117
#define IDS_NOTSOUNDFILE 118
#define IDS_NOTVIDEOFILE 119
#define IDS_NOTMIDIFILE 120
#define IDS_TIMEMODE 121 /* Moved "Set Selection" strings from */
#define IDS_FRAMEMODE 122 /* being embedded in DLGS.C ! */
#define IDS_TRACKMODE 123
#define IDS_SEC 124 /* "hrs", "min", "sec" and "msec" string ids. */
#define IDS_MIN 125
#define IDS_HRS 126
#define IDS_MSEC 127
#define IDS_FRAME 128 /* "frame" string id. */
#define IDS_UPDATEOBJECT 129
#define IDS_NOTREADYFORMAT 132
#define IDS_READYFORMAT 133
#define IDS_DEVICEMENUCOMPOUNDFORMAT 134
#define IDS_DEVICEMENUSIMPLEFORMAT 135
#define IDS_ALLFILES 136
#define IDS_ANYDEVICE 137
#define IDS_CLASSROOT 138
#define IDS_NOGOODTIMEFORMATS 139
#define IDS_FRAMERANGE 140
#define IDS_INIFILE 141 /* ID of the private INI file name */
#define IDS_HELPFILE 142 /* ID of help file name */
#define IDS_HTMLHELPFILE 147 /* ID of HTML help file */
#define IDS_NOMCIDEVICES 143 /* no MCI devices are installed. */
#define IDS_PLAYVERB 144
#define IDS_EDITVERB 145
#define IDS_CANTSTARTOLE 146
#define IDS_UNTITLED 149
#define IDS_CANTLOADLIB 151
#define IDS_CANTFINDPROC 152
#define IDS_MPLAYERWIDTH 200
#define IDS_CANTACCESSFILE 250
/* These macros and typedefs can be used to clarify whether we're talking about
* numbers of characters or numbers of bytes in a given buffer.
* Unfortunately C doesn't give us type checking to do this properly.
*/
#define BYTE_COUNT( buf ) sizeof(buf)
#define CHAR_COUNT( buf ) (sizeof(buf) / sizeof(TCHAR))
/* Find how many bytes are in a given string:
*/
#define STRING_BYTE_COUNT( str ) (STRLEN(str) * sizeof(TCHAR) + sizeof(TCHAR))
#define ANSI_STRING_BYTE_COUNT( str ) (strlen(str) * sizeof(CHAR) + sizeof(CHAR))
/* Check the length of a string or number of bytes where NULL is a valid
* pointer which should give a length of 0:
*/
#define STRLEN_NULLOK( str ) ((str) ? STRLEN(str) : 0)
#define STRING_BYTE_COUNT_NULLOK( str ) ((str) ? STRING_BYTE_COUNT(str) : 0)
/* Use this macro for loading strings. It make the parameter list tidier
* and ensures we pass the buffer size in CHARACTERS, not bytes.
* This assumes that the buffer is static, not dynamically allocated.
*/
#define LOADSTRING( id, buf ) LoadString(ghInst, (UINT)id, buf, CHAR_COUNT(buf))
#define LOADSTRINGFROM( inst, id, buf ) LoadString(inst, id, buf, CHAR_COUNT(buf))
/* track map scale values */
#define SCALE_HOURS 153 /* draw the scale in hours */
#define SCALE_MINUTES 154 /* draw the scale in minutes */
#define SCALE_SECONDS 155 /* draw the scale in seconds */
#define SCALE_MSEC 156 /* draw it in milli vanilliseconds */
#define SCALE_FRAMES 157 /* draw scale in 'frames' */
#define SCALE_TRACKS 158
#define SCALE_NOTRACKS 159
#define IDS_CLOSE 160
#define IDS_UPDATE 161
#define IDS_NOPICTURE 162
#define IDS_EXIT 163
#define IDS_EXITRETURN 164
#define IDS_SSNOTREADY 170
#define IDS_SSPAUSED 171
#define IDS_SSPLAYING 172
#define IDS_SSSTOPPED 173
#define IDS_SSOPEN 174
#define IDS_SSPARKED 175
#define IDS_SSRECORDING 176
#define IDS_SSSEEKING 177
#define IDS_SSUNKNOWN 178
#define IDS_OLEVER 180
#define IDS_OLEINIT 181
#define IDS_OLENOMEM 182
//InPlace menu names.
#define IDS_EDITMENU 185
#define IDS_INSERTMENU 186
#define IDS_SCALEMENU 187
#define IDS_COMMANDMENU 188
#define IDS_HELPMENU 189
#define IDS_NONE 190
#define IDS_MSGFORMAT 191
#define IDS_FORMATEMBEDDEDTITLE 192
#define IDS_IS_RTL 193
// String for registry fix-up message
#define IDS_BADREG 195
#define IDS_FIXREGERROR 196
#define IDS_NETWORKERROR 197
#define IDS_UNKNOWNNETWORKERROR 198
#define IDS_INSERTAUDIODISC 199
/* macros for displaying error messages */
#define MB_ERROR (MB_ICONEXCLAMATION | MB_OK)
#define Error(hwnd, idsFmt) \
( ErrorResBox(hwnd, ghInst, MB_ERROR, IDS_APPNAME, (idsFmt)), FALSE )
#define Error1(hwnd, idsFmt, arg1) \
( ErrorResBox(hwnd, ghInst, MB_ERROR, IDS_APPNAME, (idsFmt), (arg1)), \
FALSE )
#define Error2(hwnd, idsFmt, arg1, arg2) \
( ErrorResBox(hwnd, ghInst, MB_ERROR, IDS_APPNAME, (idsFmt), (arg1), \
(arg2)), FALSE )
/* app tabbing code */
BOOL IsDannyDialogMessage(HWND hwndApp, MSG msg);
/* calc where the tics belong on the scrollbar */
void FAR PASCAL CalcTicsOfDoom(void);
/* Layout the main window and the children */
void FAR PASCAL Layout(void);
/* prototypes from "errorbox.c" */
short FAR cdecl ErrorResBox(HWND hwnd, HANDLE hInst, UINT flags,
UINT idAppName, UINT idErrorStr, ...);
/* function prototypes from "framebox.c" */
BOOL FAR PASCAL frameboxInit(HANDLE hInst, HANDLE hPrev);
/* function prototypes from "dlgs.c" */
BOOL FAR PASCAL mciDialog(HWND hwnd);
BOOL FAR PASCAL setselDialog(HWND hwnd);
BOOL FAR PASCAL optionsDialog(HWND hwnd);
/* function prototypes from "arrow.c" */
BOOL FAR PASCAL ArrowInit(HANDLE hInst);
/* function prototypes from "mplayer.c" */
void FAR PASCAL FormatTime(DWORD_PTR dwPosition, LPTSTR szNum, LPTSTR szBuf, BOOL fRound);
void FAR PASCAL UpdateDisplay(void);
void FAR PASCAL EnableTimer(BOOL fEnable);
LRESULT FAR PASCAL MPlayerWndProc(HWND hwnd, UINT wMsg, WPARAM wParam, LPARAM lParam);
HICON GetIconForCurrentDevice(UINT Size, UINT DefaultID);
void SetMPlayerIcon(void);
/* function prototypes from "init.c" */
BOOL FAR PASCAL AppInit(HANDLE hInst, HANDLE hPrev, LPTSTR szCmdLine);
void FAR PASCAL InitMPlayerDialog(HWND hwnd);
BOOL FAR PASCAL GetIntlSpecs(void);
void FAR PASCAL SmartWindowPosition (HWND hWndDlg, HWND hWndShow, BOOL fForce);
void FAR PASCAL SizeMPlayer(void);
void FAR PASCAL SetMPlayerSize(LPRECT prc);
void FAR PASCAL InitDeviceMenu(void);
void WaitForDeviceMenu(void);
VOID FAR PASCAL CompleteOpenDialog(BOOL FileSelected);
/* function prototypes from "open.c" */
INT_PTR FAR PASCAL DoOpen(UINT wCurDevice, LPTSTR SzFileName);
BOOL FAR PASCAL DoChooseDevice(UINT wID);
void FAR PASCAL CheckDeviceMenu(void);
BOOL FAR PASCAL OpenMciDevice(LPCTSTR szFile, LPCTSTR szDevice);
UINT FAR PASCAL IsMCIDevice(LPCTSTR szDevice);
/* function prototype from "trackmap.c" */
LRESULT FAR PASCAL fnMPlayerTrackMap(HWND hwnd, UINT wMsg, WPARAM wParam,
LPARAM lParam);
/* function prototype from init.c */
void FAR PASCAL WriteOutPosition(void);
void FAR PASCAL WriteOutOptions(void);
void FAR PASCAL ReadOptions(void);
void MapStatusString(LPTSTR lpstatusstr);
/* function prototype from "math.asm", if needed */
#define MULDIV32( number, numerator, denominator ) \
MulDiv( (int)number, (int)numerator, (int)denominator )
/* function prototype from "doverb.c" */
LPTSTR FAR FileName(LPCTSTR);
/* constants */
#define WM_USER_DESTROY (WM_USER+120)
#define WM_SEND_OLE_CHANGE (WM_USER+122)
#define WM_STARTTRACK (WM_USER+123)
#define WM_ENDTRACK (WM_USER+124)
#define WM_BADREG (WM_USER+125)
#define WM_DOLAYOUT (WM_USER+126)
#define WM_GETDIB (WM_USER+127)
#define WM_NOMCIDEVICES (WM_USER+128)
/* constants */
#define SCROLL_GRANULARITY ((gdwMediaLength+127)/128) /* granularity of the scrollbar */
#define SCROLL_BIGGRAN ((gdwMediaLength+15)/16) /* gran. for page up/down in time mode */
#define UPDATE_TIMER 1 /* # of the timer being used */
#define UPDATE_MSEC 500 /* msec between display updates */
#define UPDATE_INACTIVE_MSEC 2000 /* msec betw. upds. when inactive*/
#define SKIPTRACKDELAY_MSEC 3000 /* max msec for double-page-left */
#define SetDlgFocus(hwnd) SendMessage(ghwndApp, WM_NEXTDLGCTL, (WPARAM)(hwnd), 1L)
#ifdef DEBUG
#define STATICDT
#define STATICFN
int __iDebugLevel;
extern void cdecl dprintf(LPSTR, ...);
#define DPF0 dprintf
#define DPF if (__iDebugLevel > 0) dprintf
#define DPFI if (__iDebugLevel >= 1) dprintf
#define DPF1 if (__iDebugLevel >= 1) dprintf
#define DPF2 if (__iDebugLevel >= 2) dprintf
#define DPF3 if (__iDebugLevel >= 3) dprintf
#define DPF4 if (__iDebugLevel >= 4) dprintf
#define CPF
#else
#define STATICDT static
#define STATICFN static
#define DPF0 ; / ## /
#define DPFI ; / ## /
#define DPF ; / ## /
#define DPF1 ; / ## /
#define DPF2 ; / ## /
#define DPF3 ; / ## /
#define DPF4 ; / ## /
#define CPF / ## /
#endif
#ifdef DEBUG
LPVOID DbgGlobalLock(HGLOBAL hglbMem);
BOOL DbgGlobalUnlock(HGLOBAL hglbMem);
HGLOBAL DbgGlobalFree(HGLOBAL hglbMem);
#define GLOBALLOCK(hglbMem) DbgGlobalLock(hglbMem)
#define GLOBALUNLOCK(hglbMem) DbgGlobalUnlock(hglbMem);
#define GLOBALFREE(hglbMem) DbgGlobalFree(hglbMem)
#else
#define GLOBALLOCK(hglbMem) GlobalLock(hglbMem)
#define GLOBALUNLOCK(hglbMem) GlobalUnlock(hglbMem);
#define GLOBALFREE(hglbMem) GlobalFree(hglbMem)
#endif
/*----Constants--------------------------------------------------------------*/
/* Push buttons */
#define psh15 0x040e
#define pshHelp psh15
/* Checkboxes */
#define chx1 0x0410
/* Static text */
#define stc1 0x0440
#define stc2 0x0441
#define stc3 0x0442
#define stc4 0x0443
/* Listboxes */
#define lst1 0x0460
#define lst2 0x0461
/* Combo boxes */
#define cmb1 0x0470
#define cmb2 0x0471
/* Edit controls */
#define edt1 0x0480
/**************************************************************************
***************************************************************************/
#define GetWS(hwnd) GetWindowLongPtr(hwnd, GWL_STYLE)
#define PutWS(hwnd, f) SetWindowLongPtr(hwnd, GWL_STYLE, f)
#define TestWS(hwnd,f) (GetWS(hwnd) & f)
#define SetWS(hwnd, f) ((PutWS(hwnd, GetWS(hwnd) | f) & (f)) != (f))
#define ClrWS(hwnd, f) ((PutWS(hwnd, GetWS(hwnd) & ~(f)) & (f)) != 0)
#define GetWSEx(hwnd) GetWindowLongPtr(hwnd, GWL_EXSTYLE)
#define PutWSEx(hwnd, f) SetWindowLongPtr(hwnd, GWL_EXSTYLE, f)
#define SetWSEx(hwnd, f) ((PutWSEx(hwnd, GetWSEx(hwnd) | f) & (f)) != (f))
#define ClrWSEx(hwnd, f) ((PutWSEx(hwnd, GetWSEx(hwnd) & ~(f)) & (f)) != 0)
// server related stuff.
void FAR PASCAL ServerUnblock(void);
void FAR PASCAL BlockServer(void);
void FAR PASCAL UnblockServer(void);
void FAR PASCAL PlayInPlace(HWND hwndApp, HWND hwndClient, LPRECT prc);
void FAR PASCAL EditInPlace(HWND hwndApp, HWND hwndClient, LPRECT prc);
void FAR PASCAL EndPlayInPlace(HWND hwndApp);
void FAR PASCAL EndEditInPlace(HWND hwndApp);
void FAR PASCAL DelayedFixLink(UINT verb, BOOL fShow, BOOL fActivate);
void DirtyObject(BOOL fDocStgChangeOnly);
void CleanObject(void);
void UpdateObject(void);
BOOL FAR PASCAL IsObjectDirty(void);
void FAR PASCAL TerminateServer(void);
void FAR PASCAL SetEmbeddedObjectFlag(BOOL flag);
HMENU GetInPlaceMenu(void);
void PostCloseMessage();
void FAR PASCAL InitDoc(BOOL fUntitled);