⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 snd_next.m

📁 Quake 2 Source code for students by Theerthan You can also download from idsoftwares.com
💻 M
📖 第 1 页 / 共 5 页
字号:

#import <servers/netname.h>
#import <libc.h>

#include "../client/client.h"

double	snd_basetime;
port_t devPort;

extern	port_t	task_self_;
#define	task_self()	task_self_

//========================================================================

#ifndef	_ntsoundNTSound
#define	_ntsoundNTSound

/* Module NTSound */

#include <mach/kern_return.h>
#include <mach/port.h>
#include <mach/message.h>

#ifndef	mig_external
#define mig_external extern
#endif

#include <mach/std_types.h>
#include <mach/mach_types.h>
typedef short *sound_data_t;

#define NTSOUNDNAME "NEXTIME_Sound"

/* Routine ntsoundAcquire */
mig_external kern_return_t ntsoundAcquire (
        port_t kern_serv_port,
        port_t owner_port,
        vm_offset_t *dmaAddress,
        int *dmaSize,
        int *success);

/* Routine ntsoundRelease */
mig_external kern_return_t ntsoundRelease (
        port_t kern_serv_port,
        port_t owner_port);

/* Routine ntsoundStart */
mig_external kern_return_t ntsoundStart (
        port_t kern_serv_port,
        port_t owner_port);

/* Routine ntsoundStop */
mig_external kern_return_t ntsoundStop (
        port_t kern_serv_port,
        port_t owner_port);

/* Routine ntsoundConfig */
mig_external kern_return_t ntsoundConfig (
        port_t kern_serv_port,
        port_t owner_port,
        int channelCount,
        int samplingRate,
        int encoding,
        int useInterrupts);

/* Routine ntsoundBytesProcessed */
mig_external kern_return_t ntsoundBytesProcessed (
        port_t kern_serv_port,
        port_t owner_port,
        int *byte_count);

/* Routine ntsoundDMACount */
mig_external kern_return_t ntsoundDMACount (
        port_t kern_serv_port,
        port_t owner_port,
        int *dma_count);

/* Routine ntsoundInterruptCount */
mig_external kern_return_t ntsoundInterruptCount (
        port_t kern_serv_port,
        port_t owner_port,
        int *irq_count);

/* Routine ntsoundWrite */
mig_external kern_return_t ntsoundWrite (
        port_t kern_serv_port,
        port_t owner_port,
        sound_data_t data,
        unsigned int dataCnt,
        int *actual_count);

/* Routine ntsoundSetVolume */
mig_external kern_return_t ntsoundSetVolume (
        port_t kern_serv_port,
        port_t owner_port,
        int value);

/* Routine ntsoundWireRange */
mig_external kern_return_t ntsoundWireRange (
        port_t device_port,
        port_t token,
        port_t task,
        vm_offset_t addr,
        vm_size_t size,
        boolean_t wire);

#endif	_ntsoundNTSound

//========================================================================

extern	port_t	name_server_port;

#define NX_SoundDeviceParameterKeyBase		0
#define NX_SoundDeviceParameterValueBase	200
#define NX_SoundStreamParameterKeyBase		400
#define NX_SoundStreamParameterValueBase	600
#define NX_SoundParameterTagMax			799

typedef enum _NXSoundParameterTag {
   NX_SoundDeviceBufferSize = NX_SoundDeviceParameterKeyBase,
   NX_SoundDeviceBufferCount,
   NX_SoundDeviceDetectPeaks,
   NX_SoundDeviceRampUp,
   NX_SoundDeviceRampDown,
   NX_SoundDeviceInsertZeros,
   NX_SoundDeviceDeemphasize,
   NX_SoundDeviceMuteSpeaker,
   NX_SoundDeviceMuteHeadphone,
   NX_SoundDeviceMuteLineOut,
   NX_SoundDeviceOutputLoudness,
   NX_SoundDeviceOutputAttenuationStereo,
   NX_SoundDeviceOutputAttenuationLeft,
   NX_SoundDeviceOutputAttenuationRight,
   NX_SoundDeviceAnalogInputSource,
   NX_SoundDeviceMonitorAttenuation,
   NX_SoundDeviceInputGainStereo,
   NX_SoundDeviceInputGainLeft,
   NX_SoundDeviceInputGainRight,

   NX_SoundDeviceAnalogInputSource_Microphone
       = NX_SoundDeviceParameterValueBase,
   NX_SoundDeviceAnalogInputSource_LineIn,

   NX_SoundStreamDataEncoding = NX_SoundStreamParameterKeyBase,
   NX_SoundStreamSamplingRate,
   NX_SoundStreamChannelCount,
   NX_SoundStreamHighWaterMark,
   NX_SoundStreamLowWaterMark,
   NX_SoundStreamSource,
   NX_SoundStreamSink,
   NX_SoundStreamDetectPeaks,
   NX_SoundStreamGainStereo,
   NX_SoundStreamGainLeft,
   NX_SoundStreamGainRight,

   NX_SoundStreamDataEncoding_Linear16 = NX_SoundStreamParameterValueBase,
   NX_SoundStreamDataEncoding_Linear8,
   NX_SoundStreamDataEncoding_Mulaw8,
   NX_SoundStreamDataEncoding_Alaw8,
   NX_SoundStreamDataEncoding_AES,
   NX_SoundStreamSource_Analog,
   NX_SoundStreamSource_AES,
   NX_SoundStreamSink_Analog,
   NX_SoundStreamSink_AES
} NXSoundParameterTag;

//========================================================================

//#include "NTSound.h"
#include <mach/mach_types.h>
#include <mach/message.h>
#include <mach/mig_errors.h>
#include <mach/msg_type.h>
#if	!defined(KERNEL) && !defined(MIG_NO_STRINGS)
#include <strings.h>
#endif
/* LINTLIBRARY */

extern port_t mig_get_reply_port();
extern void mig_dealloc_reply_port();

#ifndef	mig_internal
#define	mig_internal	static
#endif

#ifndef	TypeCheck
#define	TypeCheck 1
#endif

#ifndef	UseExternRCSId
#ifdef	hc
#define	UseExternRCSId		1
#endif
#endif

#ifndef	UseStaticMsgType
#if	!defined(hc) || defined(__STDC__)
#define	UseStaticMsgType	1
#endif
#endif

#define msg_request_port	msg_remote_port
#define msg_reply_port		msg_local_port


/* Routine Acquire */
mig_external kern_return_t ntsoundAcquire (
        port_t kern_serv_port,
        port_t owner_port,
        vm_offset_t *dmaAddress,
        int *dmaSize,
        int *success)
{
        typedef struct {
                msg_header_t Head;
                msg_type_t owner_portType;
                port_t owner_port;
        } Request;

        typedef struct {
                msg_header_t Head;
                msg_type_t RetCodeType;
                kern_return_t RetCode;
                msg_type_t dmaAddressType;
                vm_offset_t dmaAddress;
                msg_type_t dmaSizeType;
                int dmaSize;
                msg_type_t successType;
                int success;
        } Reply;

        union {
                Request In;
                Reply Out;
        } Mess;

        register Request *InP = &Mess.In;
        register Reply *OutP = &Mess.Out;

        msg_return_t msg_result;

#if	TypeCheck
        boolean_t msg_simple;
#endif	TypeCheck

        unsigned int msg_size = 32;

#if	UseStaticMsgType
        static const msg_type_t owner_portType = {
                /* msg_type_name = */		MSG_TYPE_PORT,
                /* msg_type_size = */		32,
                /* msg_type_number = */		1,
                /* msg_type_inline = */		TRUE,
                /* msg_type_longform = */	FALSE,
                /* msg_type_deallocate = */	FALSE,
                /* msg_type_unused = */		0,
        };
#endif	UseStaticMsgType

#if	UseStaticMsgType
        static const msg_type_t RetCodeCheck = {
                /* msg_type_name = */		MSG_TYPE_INTEGER_32,
                /* msg_type_size = */		32,
                /* msg_type_number = */		1,
                /* msg_type_inline = */		TRUE,
                /* msg_type_longform = */	FALSE,
                /* msg_type_deallocate = */	FALSE,
                /* msg_type_unused = */		0
        };
#endif	UseStaticMsgType

#if	UseStaticMsgType
        static const msg_type_t dmaAddressCheck = {
                /* msg_type_name = */		MSG_TYPE_INTEGER_32,
                /* msg_type_size = */		32,
                /* msg_type_number = */		1,
                /* msg_type_inline = */		TRUE,
                /* msg_type_longform = */	FALSE,
                /* msg_type_deallocate = */	FALSE,
                /* msg_type_unused = */		0
        };
#endif	UseStaticMsgType

#if	UseStaticMsgType
        static const msg_type_t dmaSizeCheck = {
                /* msg_type_name = */		MSG_TYPE_INTEGER_32,
                /* msg_type_size = */		32,
                /* msg_type_number = */		1,
                /* msg_type_inline = */		TRUE,
                /* msg_type_longform = */	FALSE,
                /* msg_type_deallocate = */	FALSE,
                /* msg_type_unused = */		0
        };
#endif	UseStaticMsgType

#if	UseStaticMsgType
        static const msg_type_t successCheck = {
                /* msg_type_name = */		MSG_TYPE_INTEGER_32,
                /* msg_type_size = */		32,
                /* msg_type_number = */		1,
                /* msg_type_inline = */		TRUE,
                /* msg_type_longform = */	FALSE,
                /* msg_type_deallocate = */	FALSE,
                /* msg_type_unused = */		0
        };
#endif	UseStaticMsgType

#if	UseStaticMsgType
        InP->owner_portType = owner_portType;
#else	UseStaticMsgType
        InP->owner_portType.msg_type_name = MSG_TYPE_PORT;
        InP->owner_portType.msg_type_size = 32;
        InP->owner_portType.msg_type_number = 1;
        InP->owner_portType.msg_type_inline = TRUE;
        InP->owner_portType.msg_type_longform = FALSE;
        InP->owner_portType.msg_type_deallocate = FALSE;
#endif	UseStaticMsgType

        InP->owner_port /* owner_port */ = /* owner_port */ owner_port;

        InP->Head.msg_simple = FALSE;
        InP->Head.msg_size = msg_size;
        InP->Head.msg_type = MSG_TYPE_NORMAL | MSG_TYPE_RPC;
        InP->Head.msg_request_port = kern_serv_port;
        InP->Head.msg_reply_port = mig_get_reply_port();
        InP->Head.msg_id = 1008;

        msg_result = msg_rpc(&InP->Head, MSG_OPTION_NONE, sizeof(Reply), 0, 0);
        if (msg_result != RPC_SUCCESS) {
                if (msg_result == RCV_INVALID_PORT)
                        mig_dealloc_reply_port();
                return msg_result;
        }

#if	TypeCheck
        msg_size = OutP->Head.msg_size;
        msg_simple = OutP->Head.msg_simple;
#endif	TypeCheck

        if (OutP->Head.msg_id != 1108)
                return MIG_REPLY_MISMATCH;

#if	TypeCheck
        if (((msg_size != 56) || (msg_simple != TRUE)) &&
            ((msg_size != sizeof(death_pill_t)) ||
             (msg_simple != TRUE) ||
             (OutP->RetCode == KERN_SUCCESS)))
                return MIG_TYPE_ERROR;
#endif	TypeCheck

#if	TypeCheck
#if	UseStaticMsgType
        if (* (int *) &OutP->RetCodeType != * (int *) &RetCodeCheck)
#else	UseStaticMsgType
        if ((OutP->RetCodeType.msg_type_inline != TRUE) ||
            (OutP->RetCodeType.msg_type_longform != FALSE) ||
            (OutP->RetCodeType.msg_type_name != MSG_TYPE_INTEGER_32) ||
            (OutP->RetCodeType.msg_type_number != 1) ||
            (OutP->RetCodeType.msg_type_size != 32))
#endif	UseStaticMsgType
                return MIG_TYPE_ERROR;
#endif	TypeCheck

        if (OutP->RetCode != KERN_SUCCESS)
                return OutP->RetCode;

#if	TypeCheck
#if	UseStaticMsgType
        if (* (int *) &OutP->dmaAddressType != * (int *) &dmaAddressCheck)
#else	UseStaticMsgType
        if ((OutP->dmaAddressType.msg_type_inline != TRUE) ||
            (OutP->dmaAddressType.msg_type_longform != FALSE) ||
            (OutP->dmaAddressType.msg_type_name != MSG_TYPE_INTEGER_32) ||
            (OutP->dmaAddressType.msg_type_number != 1) ||
            (OutP->dmaAddressType.msg_type_size != 32))
#endif	UseStaticMsgType
                return MIG_TYPE_ERROR;
#endif	TypeCheck

        *dmaAddress /* dmaAddress */ = /* *dmaAddress */ OutP->dmaAddress;

#if	TypeCheck
#if	UseStaticMsgType
        if (* (int *) &OutP->dmaSizeType != * (int *) &dmaSizeCheck)
#else	UseStaticMsgType
        if ((OutP->dmaSizeType.msg_type_inline != TRUE) ||
            (OutP->dmaSizeType.msg_type_longform != FALSE) ||
            (OutP->dmaSizeType.msg_type_name != MSG_TYPE_INTEGER_32) ||
            (OutP->dmaSizeType.msg_type_number != 1) ||
            (OutP->dmaSizeType.msg_type_size != 32))
#endif	UseStaticMsgType
                return MIG_TYPE_ERROR;
#endif	TypeCheck

⌨️ 快捷键说明

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