windows-nt/Source/XPSP1/NT/multimedia/media/mciseq/mciseq.h

170 lines
6.2 KiB
C
Raw Normal View History

2020-09-26 03:20:57 -05:00
/******************************************************************************
Copyright (c) 1985-1998 Microsoft Corporation
Title: mciseq.h - Multimedia Systems Media Control Interface streaming
MIDI file data internal header file.
Version: 1.00
Date: 27-Apr-1990
Author: Greg Simons
------------------------------------------------------------------------------
Change log:
DATE REV DESCRIPTION
----------- ----- -----------------------------------------------------------
27-APR-1990 GREGSI Original
*****************************************************************************/
//#define SEQDEBUG 1
#define MSEQ_PRODUCTNAME 1
#define IDS_MIDICAPTION 2
#define IDS_MIDITAB 3
#define IDDLGWARN 100
#define IDCHECK 102
/*************** Stream Stuff ***************************************/
#define NUMHDRS 2
#define BUFFSIZE 512
#ifndef cchLENGTH
#define cchLENGTH(_sz) (sizeof(_sz)/sizeof(_sz[0]))
#endif
typedef struct tag_HMSF
{
BYTE hours;
BYTE minutes;
BYTE seconds;
BYTE frames;
} HMSF;
typedef struct
{
/* All stream data for a track of an open sequence goes here */
DWORD beginning; // these are byte numbers within the open file
DWORD end;
DWORD current; // byte # to start reading from for next chunk
DWORD bufferNum; // current buffer number
LPMIDISEQHDR fileHeaders[NUMHDRS]; // pointers to midi file track data headers
} TrackStreamType;
typedef struct
{
/* All stream data for an open sequence goes here */
WCHAR szFilename[128]; // file name here for stream thread
HMIDISEQ hSeq; // handle to the sequence
HMMIO hmmio; // MMIO handle to midi file or RMID file
LPMMIOPROC pIOProc; // Optional MMIO proc
HMIDIOUT hmidiOut; // handle to dest. midi port
UINT wPortNum; // midi port number
DWORD dwFileLength;
ListHandle trackStreamListHandle;
BOOL streaming; // to flag streaming process to exit or not
DWORD streamTaskHandle; // handle to streaming task
HANDLE streamThreadHandle; // OS handle to stream thread
HWND hNotifyCB; // mci client's notify cb--NULL if none
UINT wNotifyMsg; // mci message (command) that async notify's for
DWORD dwNotifyOldTo; // x for last "play foo to x notify"
// (critical for abort/supersede)
MCIDEVICEID wDeviceID; // this stream's devID for Notify callback
int fileDivType; // file division type
DWORD userDisplayType; // song pointer, smpte x, or milliseconds
BOOL bLastPaused; // if last stop action was result of "mci_pause"
} SeqStreamType,
NEAR * pSeqStreamType;
extern ListHandle SeqStreamListHandle; // this is a global kept for the seq streamer
extern HINSTANCE hInstance;
// from mciseq.c
PUBLIC DWORD FAR PASCAL mciDriverEntry (MCIDEVICEID wDeviceID, UINT wMessage,
DWORD_PTR dwParam1, DWORD_PTR dwParam2);
PRIVATE BOOL NEAR PASCAL bAsync(UINT wMsg);
PRIVATE BOOL NEAR PASCAL bMutex(UINT wNewMsg, UINT wOldMsg, DWORD wNewFlags,
DWORD dwNewTo, DWORD dwOldTo);
PUBLIC VOID FAR PASCAL PrepareForNotify(pSeqStreamType pStream,
UINT wMessage, LPMCI_GENERIC_PARMS lpParms, DWORD dwTo);
PUBLIC VOID FAR PASCAL SetupMmseqCallback(pSeqStreamType pStream,
DWORD_PTR dwInstance);
PUBLIC VOID FAR PASCAL Notify(pSeqStreamType pStream, UINT wStatus);
PUBLIC VOID NEAR PASCAL EndStreamCycle(pSeqStreamType pStream);
PUBLIC DWORD NEAR PASCAL EndFileStream(pSeqStreamType pStream);
PUBLIC DWORD NEAR PASCAL msOpenStream(pSeqStreamType FAR * lppStream,
LPCWSTR szName, LPMMIOPROC pIOProc);
PUBLIC VOID FAR PASCAL StreamTrackReset(pSeqStreamType pStream,
UINT wTrackNum);
PUBLIC VOID FAR _LOADDS PASCAL mciStreamCycle(DWORD_PTR dwInst);
PUBLIC VOID FAR PASCAL _LOADDS mciSeqCallback(HANDLE h, UINT wMsg, DWORD_PTR dwInstance,
DWORD_PTR dw1, DWORD_PTR dw2);
// from mcicmds.c:
PUBLIC DWORD NEAR PASCAL msOpen(pSeqStreamType FAR *lppStream, MCIDEVICEID wDeviceID,
DWORD dwFlags, LPMCI_OPEN_PARMS lpOpen);
PUBLIC DWORD NEAR PASCAL msClose(pSeqStreamType pStream, MCIDEVICEID wDeviceID,
DWORD dwFlags);
PUBLIC DWORD NEAR PASCAL msPlay(pSeqStreamType pStream, MCIDEVICEID wDeviceID,
DWORD dwFlags, LPMCI_PLAY_PARMS lpPlay);
PUBLIC DWORD NEAR PASCAL msSeek(pSeqStreamType pStream, MCIDEVICEID wDeviceID,
DWORD dwParam1, LPMCI_SEEK_PARMS lpSeek);
PUBLIC DWORD NEAR PASCAL msStatus(pSeqStreamType pStream, MCIDEVICEID wDeviceID,
DWORD dwFlags, LPMCI_STATUS_PARMS lpStatus);
PUBLIC DWORD NEAR PASCAL msGetDevCaps(pSeqStreamType pStream, MCIDEVICEID wDeviceID,
DWORD dwParam1, LPMCI_GETDEVCAPS_PARMS lpCapParms);
PUBLIC DWORD NEAR PASCAL msInfo(pSeqStreamType pStream, MCIDEVICEID wDeviceID,
DWORD dwFlags, LPMCI_INFO_PARMS lpInfo);
PUBLIC DWORD NEAR PASCAL msSet(pSeqStreamType pStream, MCIDEVICEID wDeviceID,
DWORD dwFlags, LPMCI_SEQ_SET_PARMS lpSetParms);
// from Formats.c
PUBLIC BOOL NEAR PASCAL ColonizeOutput(pSeqStreamType pStream);
PUBLIC BOOL NEAR PASCAL FormatsEqual(pSeqStreamType pStream);
PUBLIC DWORD NEAR PASCAL CnvtTimeToSeq(pSeqStreamType pStream,
DWORD dwCurrent, MIDISEQINFO FAR * pSeqInfo);
PUBLIC DWORD NEAR PASCAL CnvtTimeFromSeq(pSeqStreamType pStream,
DWORD dwTicks, MIDISEQINFO FAR * pSeqInfo);
PUBLIC BOOL NEAR PASCAL RangeCheck(pSeqStreamType pStream, DWORD dwValue);
/***************************************************************************
DEBUGGING SUPPORT
***************************************************************************/
#if DBG
extern void mciseqDbgOut(LPSTR lpszFormat, ...);
int mciseqDebugLevel;
#define dprintf( _x_ ) mciseqDbgOut _x_
#define dprintf1( _x_ ) if (mciseqDebugLevel >= 1) mciseqDbgOut _x_
#define dprintf2( _x_ ) if (mciseqDebugLevel >= 2) mciseqDbgOut _x_
#define dprintf3( _x_ ) if (mciseqDebugLevel >= 3) mciseqDbgOut _x_
#define dprintf4( _x_ ) if (mciseqDebugLevel >= 4) mciseqDbgOut _x_
#else
#define dprintf(x)
#define dprintf1(x)
#define dprintf2(x)
#define dprintf3(x)
#define dprintf4(x)
#endif