mmsystem.c

来自「开放源码的编译器open watcom 1.6.0版的源代码」· C语言 代码 · 共 555 行 · 第 1/2 页

C
555
字号
/****************************************************************************
*
*                            Open Watcom Project
*
*    Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved.
*
*  ========================================================================
*
*    This file contains Original Code and/or Modifications of Original
*    Code as defined in and that are subject to the Sybase Open Watcom
*    Public License version 1.0 (the 'License'). You may not use this file
*    except in compliance with the License. BY USING THIS FILE YOU AGREE TO
*    ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is
*    provided with the Original Code and Modifications, and is also
*    available at www.sybase.com/developer/opensource.
*
*    The Original Code and all software distributed under the License are
*    distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
*    EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM
*    ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF
*    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR
*    NON-INFRINGEMENT. Please see the License for the specific language
*    governing rights and limitations under the License.
*
*  ========================================================================
*
* Description:  Cover functions for mmsystem.dll.
*
****************************************************************************/


#include <windows.h>
#include <mmsystem.h>
#include <stddef.h>
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <dos.h>
#include "winext.h"
#include "stubs.h"

#pragma aux BackPatch_mmsystem parm [ax];
extern LPVOID FAR BackPatch_mmsystem( char *str );

static UINT (FAR PASCAL *mmsystemmidiInAddBuffer)(HMIDIIN hMidiIn, LPMIDIHDR lpMidiInHdr, UINT uSize);
static UINT (FAR PASCAL *mmsystemmidiInPrepareHeader)(HMIDIIN hMidiIn, LPMIDIHDR lpMidiInHdr, UINT uSize);
static UINT (FAR PASCAL *mmsystemmidiInUnprepareHeader)(HMIDIIN hMidiIn, LPMIDIHDR lpMidiInHdr, UINT uSize);
static UINT (FAR PASCAL *mmsystemmidiOutLongMsg)(HMIDIOUT hMidiOut, LPMIDIHDR lpMidiOutHdr, UINT uSize);
static UINT (FAR PASCAL *mmsystemmidiOutPrepareHeader)(HMIDIOUT hMidiOut, LPMIDIHDR lpMidiOutHdr, UINT uSize);
static UINT (FAR PASCAL *mmsystemmidiOutUnprepareHeader)(HMIDIOUT hMidiOut, LPMIDIHDR lpMidiOutHdr, UINT uSize);
static UINT (FAR PASCAL *mmsystemmmioAdvance)(HMMIO hmmio, LPMMIOINFO lpmmioinfo, UINT uFlags);
static UINT (FAR PASCAL *mmsystemmmioGetInfo)(HMMIO hmmio, LPMMIOINFO lpmmioinfo, UINT uFlags);
static HMMIO (FAR PASCAL *mmsystemmmioOpen)(LPSTR szFileName, LPMMIOINFO lpmmioinfo, DWORD dwOpenFlags);
static UINT (FAR PASCAL *mmsystemmmioClose)(HMMIO hmmio, UINT flags);
static UINT (FAR PASCAL *mmsystemmmioRename)(LPCSTR szFileName, LPCSTR szNewFileName, LPMMIOINFO lpmmioinfo, DWORD dwRenameFlags);
static UINT (FAR PASCAL *mmsystemmmioSetInfo)(HMMIO hmmio, LPMMIOINFO lpmmioinfo, UINT uFlags);
static LONG (FAR PASCAL *mmsystemmmioRead)(HMMIO hmmio, HPSTR pch, LONG cch);
static LONG (FAR PASCAL *mmsystemmmioWrite)(HMMIO hmmio, HPSTR pch, LONG cch);
static UINT (FAR PASCAL *mmsystemwaveInAddBuffer)(HWAVEIN hWaveIn, LPWAVEHDR lpWaveInHdr, UINT uSize);
static UINT (FAR PASCAL *mmsystemwaveInPrepareHeader)(HWAVEIN hWaveIn, LPWAVEHDR lpWaveInHdr, UINT uSize);
static UINT (FAR PASCAL *mmsystemwaveInUnprepareHeader)(HWAVEIN hWaveIn, LPWAVEHDR lpWaveInHdr, UINT uSize);
static UINT (FAR PASCAL *mmsystemwaveOutPrepareHeader)(HWAVEOUT hWaveOut, LPWAVEHDR lpWaveOutHdr, UINT uSize);
static UINT (FAR PASCAL *mmsystemwaveOutUnprepareHeader)(HWAVEOUT hWaveOut, LPWAVEHDR lpWaveOutHdr, UINT uSize);
static UINT (FAR PASCAL *mmsystemwaveOutWrite)(HWAVEOUT hWaveOut, LPWAVEHDR lpWaveOutHdr, UINT uSize);


typedef struct mminfo_list {
    struct mminfo_list          far *next;
    HMMIO                       handle;
    DWORD                       size;
    DWORD                       alias;
} mminfo_list;
typedef mminfo_list far *LPMMINFOLIST;

static LPMMINFOLIST     mminfoListHead;
static LPMMINFOLIST     mminfoListTail;

/*
 * GetMIDIHDRAlias - alias members of MIDIHDR struct
 */
static void GetMIDIHDRAlias( LPSTR _FAR *orig, LPMIDIHDR ptr )
{
    LPSTR       new;

    *orig = ptr->lpData;
    new = ptr->lpData;
    GetAlias( &new );
    ptr->lpData = new;

} /* GetMIDIHDRAlias */


/*
 * ReleaseMIDIHDRAlias - free aliases of members of MIDIHDR struct
 */
void ReleaseMIDIHDRAlias( LPSTR orig, LPMIDIHDR ptr )
{
    ReleaseAlias( orig, ptr->lpData );
    ptr->lpData = orig;

} /* ReleaseMIDIHDRAlias */

/*
 * GetWAVEHDRAlias - alias members of WAVEHDR struct
 */
static void GetWAVEHDRAlias( LPSTR _FAR *orig, LPWAVEHDR ptr )
{
    LPSTR       new;

    *orig = ptr->lpData;
    new = ptr->lpData;
    GetAlias( &new );
    ptr->lpData = new;

} /* GetWAVEHDRAlias */


/*
 * ReleaseWAVEHDRAlias - free aliases of members of WAVEHDR struct
 */
void ReleaseWAVEHDRAlias( LPSTR orig, LPWAVEHDR ptr )
{
    ReleaseAlias( orig, ptr->lpData );
    ptr->lpData = orig;

} /* ReleaseWAVEHDRAlias */


/*
 * __midiInAddBuffer - cover for mmsystem function midiInAddBuffer
 */
UINT FAR PASCAL __midiInAddBuffer( HMIDIIN hMidiIn, LPMIDIHDR lpMidiInHdr,
                        UINT uSize )
{
    UINT        rc;
    LPSTR       odata;

    if( mmsystemmidiInAddBuffer == NULL ) {
        mmsystemmidiInAddBuffer = BackPatch_mmsystem( "midiInAddBuffer" );
        if( mmsystemmidiInAddBuffer == NULL ) return( 0 );
    }
    GetMIDIHDRAlias( &odata, lpMidiInHdr );
    rc = mmsystemmidiInAddBuffer( hMidiIn, lpMidiInHdr, uSize );
    ReleaseMIDIHDRAlias( odata, lpMidiInHdr );
    return( rc );

} /* __midiInAddBuffer */

/*
 * __midiInPrepareHeader - cover for mmsystem function midiInPrepareHeader
 */
UINT FAR PASCAL __midiInPrepareHeader( HMIDIIN hMidiIn, LPMIDIHDR lpMidiInHdr,
                        UINT uSize )
{
    UINT        rc;
    LPSTR       odata;

    if( mmsystemmidiInPrepareHeader == NULL ) {
        mmsystemmidiInPrepareHeader = BackPatch_mmsystem( "midiInPrepareHeader" );
        if( mmsystemmidiInPrepareHeader == NULL ) return( 0 );
    }
    GetMIDIHDRAlias( &odata, lpMidiInHdr );
    rc = mmsystemmidiInPrepareHeader( hMidiIn, lpMidiInHdr, uSize );
    ReleaseMIDIHDRAlias( odata, lpMidiInHdr );
    return( rc );

} /* __midiInPrepareHeader */

/*
 * __midiInUnprepareHeader - cover for mmsystem function midiInUnprepareHeader
 */
UINT FAR PASCAL __midiInUnprepareHeader( HMIDIIN hMidiIn,
                        LPMIDIHDR lpMidiInHdr, UINT uSize )
{
    UINT        rc;
    LPSTR       odata;

    if( mmsystemmidiInUnprepareHeader == NULL ) {
        mmsystemmidiInUnprepareHeader = BackPatch_mmsystem( "midiInUnprepareHeader" );
        if( mmsystemmidiInUnprepareHeader == NULL ) return( 0 );
    }
    GetMIDIHDRAlias( &odata, lpMidiInHdr );
    rc = mmsystemmidiInUnprepareHeader( hMidiIn, lpMidiInHdr, uSize );
    ReleaseMIDIHDRAlias( odata, lpMidiInHdr );
    return( rc );

} /* __midiInUnprepareHeader */

/*
 * __midiOutLongMsg - cover for mmsystem function midiOutLongMsg
 */
UINT FAR PASCAL __midiOutLongMsg( HMIDIOUT hMidiOut, LPMIDIHDR lpMidiOutHdr,
                        UINT uSize )
{
    UINT        rc;
    LPSTR       odata;

    if( mmsystemmidiOutLongMsg == NULL ) {
        mmsystemmidiOutLongMsg = BackPatch_mmsystem( "midiOutLongMsg" );
        if( mmsystemmidiOutLongMsg == NULL ) return( 0 );
    }
    GetMIDIHDRAlias( &odata, lpMidiOutHdr );
    rc = mmsystemmidiOutLongMsg( hMidiOut, lpMidiOutHdr, uSize );
    ReleaseMIDIHDRAlias( odata, lpMidiOutHdr );
    return( rc );

} /* __midiOutLongMsg */

/*
 * __midiOutPrepareHeader - cover for mmsystem function midiOutPrepareHeader
 */
UINT FAR PASCAL __midiOutPrepareHeader( HMIDIOUT hMidiOut,
                        LPMIDIHDR lpMidiOutHdr, UINT uSize )
{
    UINT        rc;
    LPSTR       odata;

    if( mmsystemmidiOutPrepareHeader == NULL ) {
        mmsystemmidiOutPrepareHeader = BackPatch_mmsystem( "midiOutPrepareHeader" );
        if( mmsystemmidiOutPrepareHeader == NULL ) return( 0 );
    }
    GetMIDIHDRAlias( &odata, lpMidiOutHdr );
    rc = mmsystemmidiOutPrepareHeader( hMidiOut, lpMidiOutHdr, uSize );
    ReleaseMIDIHDRAlias( odata, lpMidiOutHdr );
    return( rc );

} /* __midiOutPrepareHeader */

/*
 * __midiOutUnprepareHeader - cover for mmsystem function midiOutUnprepareHeader
 */
UINT FAR PASCAL __midiOutUnprepareHeader( HMIDIOUT hMidiOut,
                        LPMIDIHDR lpMidiOutHdr, UINT uSize)
{
    UINT        rc;
    LPSTR       odata;

    if( mmsystemmidiOutUnprepareHeader == NULL ) {
        mmsystemmidiOutUnprepareHeader = BackPatch_mmsystem( "midiOutUnprepareHeader" );
        if( mmsystemmidiOutUnprepareHeader == NULL ) return( 0 );
    }
    GetMIDIHDRAlias( &odata, lpMidiOutHdr );
    rc = mmsystemmidiOutUnprepareHeader( hMidiOut, lpMidiOutHdr, uSize );
    ReleaseMIDIHDRAlias( odata, lpMidiOutHdr );
    return( rc );

} /* __midiOutUnprepareHeader */

/*
 * __mmioAdvance - cover for mmsystem function mmioAdvance
 */
UINT FAR PASCAL __mmioAdvance( HMMIO hmmio, LPMMIOINFO lpmmioinfo, UINT uFlags )
{
    UINT        rc;

    if( mmsystemmmioAdvance == NULL ) {
        mmsystemmmioAdvance = BackPatch_mmsystem( "mmioAdvance" );
        if( mmsystemmmioAdvance == NULL ) return( 0 );
    }
    rc = mmsystemmmioAdvance( hmmio, lpmmioinfo, uFlags );
    return( rc );

} /* __mmioAdvance */

/*
 * __mmioGetInfo - cover for mmsystem function mmioGetInfo
 */
UINT FAR PASCAL __mmioGetInfo( HMMIO hmmio, LPMMIOINFO lpmmioinfo, UINT uFlags )
{
    UINT        rc;

    if( mmsystemmmioGetInfo == NULL ) {
        mmsystemmmioGetInfo = BackPatch_mmsystem( "mmioGetInfo" );
        if( mmsystemmmioGetInfo == NULL ) return( 0 );
    }
    rc = mmsystemmmioGetInfo( hmmio, lpmmioinfo, uFlags );
    return( rc );

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?