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

📄 hxcrt.cpp

📁 linux下的一款播放器
💻 CPP
字号:
/* ***** BEGIN LICENSE BLOCK ***** * Source last modified: $Id: hxcrt.cpp,v 1.6.36.3 2004/07/09 01:45:19 hubbe Exp $ *  * Portions Copyright (c) 1995-2004 RealNetworks, Inc. All Rights Reserved. *  * The contents of this file, and the files included with this file, * are subject to the current version of the RealNetworks Public * Source License (the "RPSL") available at * http://www.helixcommunity.org/content/rpsl unless you have licensed * the file under the current version of the RealNetworks Community * Source License (the "RCSL") available at * http://www.helixcommunity.org/content/rcsl, in which case the RCSL * will apply. You may also obtain the license terms directly from * RealNetworks.  You may not use this file except in compliance with * the RPSL or, if you have a valid RCSL with RealNetworks applicable * to this file, the RCSL.  Please see the applicable RPSL or RCSL for * the rights, obligations and limitations governing use of the * contents of the file. *  * Alternatively, the contents of this file may be used under the * terms of the GNU General Public License Version 2 or later (the * "GPL") in which case the provisions of the GPL are applicable * instead of those above. If you wish to allow use of your version of * this file only under the terms of the GPL, and not to allow others * to use your version of this file under the terms of either the RPSL * or RCSL, indicate your decision by deleting the provisions above * and replace them with the notice and other provisions required by * the GPL. If you do not delete the provisions above, a recipient may * use your version of this file under the terms of any one of the * RPSL, the RCSL or the GPL. *  * This file is part of the Helix DNA Technology. RealNetworks is the * developer of the Original Code and owns the copyrights in the * portions it created. *  * This file, and the files included with this file, is distributed * and made available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY * KIND, EITHER EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS * ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET * ENJOYMENT OR NON-INFRINGEMENT. *  * Technology Compatibility Kit Test Suite(s) Location: *    http://www.helixcommunity.org/content/tck *  * Contributor(s): *  * ***** END LICENSE BLOCK ***** */#include <stdio.h>#include <string.h> // for memset#include "hxtypes.h"#ifndef _MAC_MACHOvoid*	__nwa(size_t size, char* file, int line);//void*	__nw(size_t size, char* file, int line);extern "C" void*	__nwa__FUlPcl(size_t size, char*, int);//extern "C" void*	__nw__FUlPcl(size_t size, char* file, int line);//extern "C" void*	operator new(unsigned long, char*, long);#endifextern "C" short HXCRT_ASSERT(char* message);extern "C" {void*	HXMM_NEWDEBUG(unsigned long size, char* file, unsigned long line);void*	HXMM_NEW(unsigned long size);void HXMM_DELETE(void* ptr);void HXMM_INTERRUPTON(void);void HXMM_INTERRUPTOFF(void);BOOL HXMM_ATINTERRUPT(void);void HXMM_COMPACT(void);#ifndef _MAC_MACHOvoid* malloc(size_t size);void* calloc(size_t nmemb, size_t size);void* realloc(void* ptr, size_t size);void free(void* ptr);char *__ttyname(long);#endif}extern "C" short InstallConsole(short);extern "C" void RemoveConsole(void);extern "C" long WriteCharsToConsole(char*, long);extern "C" long ReadCharsFromConsole(char*, long);#ifndef _MAC_MACHOvoid* operator new(unsigned long size, char*, long);void* operator new(unsigned long size, char*, long){return operator new(size);}//void*	operator new[](size_t size, char* file, int line)void*	__nwa(size_t size, char* file, int line){	void* retval = HXMM_NEWDEBUG(size, file, line);	return retval;}void*	__nw(size_t size, char* file, int line);void*	__nw(size_t size, char* file, int line){	void* retval = HXMM_NEWDEBUG(size, file, line);	return retval;}void*	__nwa(size_t size){	void* retval = HXMM_NEW(size);	return retval;}void*	__nw(size_t size){	void* retval = HXMM_NEW(size);	return retval;}void __dl(void*	ptr){	HXMM_DELETE(ptr);}void __dla(void* ptr){	HXMM_DELETE(ptr);}void*	__nwa__FUlPcl(size_t size, char*, int){	void* retval = HXMM_NEW(size);	return retval;}#endif#pragma mark -CFBundleRef systemBundle = NULL;typedef void* (*MallocProcPtr) (size_t size);typedef void* (*ReallocProcPtr) (void* oldPtr, size_t size);typedef void* (*CallocProcPtr) (size_t nmemb, size_t size);typedef void* (*FreeProcPtr) (void* ptr);MallocProcPtr fpMalloc = NULL;ReallocProcPtr fpRealloc = NULL;CallocProcPtr fpCalloc = NULL;FreeProcPtr fpFree = NULL;static void LoadBundleIfNecessary(){	if (!systemBundle)	{		systemBundle = CFBundleGetBundleWithIdentifier(CFSTR("com.apple.Carbon"));				fpMalloc = (MallocProcPtr) CFBundleGetFunctionPointerForName(systemBundle, CFSTR("malloc"));		fpRealloc = (ReallocProcPtr) CFBundleGetFunctionPointerForName(systemBundle, CFSTR("realloc"));		fpCalloc = (CallocProcPtr) CFBundleGetFunctionPointerForName(systemBundle, CFSTR("calloc"));		fpFree = (FreeProcPtr) CFBundleGetFunctionPointerForName(systemBundle, CFSTR("free"));	}}#pragma mark -#define USE_NEW_POINTER_FOR_MALLOC 1#ifndef _MAC_MACHOvoid* malloc(size_t size){	LoadBundleIfNecessary();	if (fpMalloc)	{		return fpMalloc(size);	}	HXCRT_ASSERT("malloc function pointer not found");	return NULL;}void* calloc(size_t nmemb, size_t size){	if (fpCalloc)	{		return fpCalloc(nmemb, size);	}	HXCRT_ASSERT("calloc function pointer not found");	return NULL;}void* realloc(void* ptr, size_t size){	if (fpRealloc)	{		return fpRealloc(ptr, size);	}	HXCRT_ASSERT("realloc function pointer not found");	return NULL;}void free(void* ptr){	if (fpFree)	{		fpFree(ptr);		return;	}	HXCRT_ASSERT("free function pointer not found");	return;}#endif#pragma mark -short HXCRT_ASSERT(char* message){	printf("ASSERTION: %s\n", message);	return 0;}// Console stubs so stio.h stuff works#ifndef _MAC_MACHOshort InstallConsole(short fd){#pragma unused (fd)	return 0;}/* *	extern void RemoveConsole(void); * *	Removes the console package.  It is called after all other streams *	are closed and exit functions (installed by either atexit or _atexit) *	have been called.  Since there is no way to recover from an error, *	this function doesn't need to return any. */void RemoveConsole(void){}/* *	extern long WriteCharsToConsole(char *buffer, long n); * *	Writes a stream of output to the Console window.  This function is *	called by write. * *	char *buffer:	Pointer to the buffer to be written. *	long n:			The length of the buffer to be written. *	returns short:	Actual number of characters written to the stream, *					-1 if an error occurred. */long WriteCharsToConsole(char *buffer, long n){    while (n > 0)    {        	// try to break the string on carriage returns    	// (some consoles honor the \r causing lines overwriting themselves)		int lineLen = n;		bool skipReturn = false;    	for(int i=0;i<n;i++)    	{    		if (buffer[i] == '\r')    		{    			// found a CR -- print up to this point only     			lineLen = i;    			skipReturn = true; // otherwise some consoles will print two CR's for a line    			break;    		}    	}    	    	// and for sure break the line into blocks <= 200 bytes.		Str255 a;		long len = lineLen;		if (len > 200) len = 200;		a[0] = len;		BlockMoveData(buffer, &a[1], len);		DebugStr(a);		if (skipReturn)			len++;							n -= len;		buffer += len;    }	return 0;}/* *	extern long ReadCharsFromConsole(char *buffer, long n); * *	Reads from the Console into a buffer.  This function is called by *	read. * *	char *buffer:	Pointer to the buffer which will recieve the input. *	long n:			The maximum amount of characters to be read (size of *					buffer). *	returns short:	Actual number of characters read from the stream, *					-1 if an error occurred. */long ReadCharsFromConsole(char *buffer, long n){#pragma unused (buffer, n)	return 0;}char *__ttyname(long){	return (NULL);}#endifvoid*	HXMM_NEW(unsigned long	size){	LoadBundleIfNecessary();		if (fpMalloc)	{		return fpMalloc(size);	}	HXCRT_ASSERT("HXMM_NEW: malloc function pointer not found");	return NULL;}void*	HXMM_NEWDEBUG(unsigned long size, char* file, unsigned long line){        return HXMM_NEW(size);}void	HXMM_DELETE(void* ptr){	if (fpFree)	{		fpFree(ptr);		return;	}	HXCRT_ASSERT("HXMM_DELETE: free function pointer not found");}#define kMaxInterruptEquivalentTaskIDs 20MPTaskID gInterruptEquivalentTaskIDs[kMaxInterruptEquivalentTaskIDs];long gCurrentInterruptEquivalentTaskID = 0;void	HXMM_INTERRUPTON(void){	long whichTask;	MPTaskID curID = MPCurrentTaskID();	bool needToAdd = true;	for ( whichTask = 0; whichTask < gCurrentInterruptEquivalentTaskID; whichTask++ )	{		if ( !gInterruptEquivalentTaskIDs[whichTask] )		{			needToAdd = false;			gInterruptEquivalentTaskIDs[whichTask] = curID;			break;		}		else if ( gInterruptEquivalentTaskIDs[whichTask] == curID )		{			needToAdd = false;		}	}		if (needToAdd)	{		// HX_ASSERT(gCurrentInterruptEquivalentTaskID < kMaxInterruptEquivalentTaskIDs);		if (gCurrentInterruptEquivalentTaskID < kMaxInterruptEquivalentTaskIDs)		{			gInterruptEquivalentTaskIDs[gCurrentInterruptEquivalentTaskID] = curID;			gCurrentInterruptEquivalentTaskID++;		}	}}void	HXMM_INTERRUPTOFF(void){	long whichTask;	MPTaskID curID = MPCurrentTaskID();	bool needToAdd = true;	for ( whichTask = 0; whichTask < gCurrentInterruptEquivalentTaskID; whichTask++ )	{		if ( gInterruptEquivalentTaskIDs[whichTask] == curID )		{			// xxxbobclark if we knew for sure that HXMM_INTERRUPTON()			// would only be called at actual interrupt time (and not			// occasionally at system time) then we wouldn't need to do			// this. But since it's sometimes incorrectly called at system			// time, we don't want to hold an array that thinks that			// system time is interrupt time. Also since the embedded			// player has "system time" on different threads we can't			// just watch for the bad case of HXMM_INTERRUPTON() at			// system time...			gInterruptEquivalentTaskIDs[whichTask] = 0; // so it doesn't match later		}	}}BOOL	HXMM_ATINTERRUPT(void){	long whichTask;	MPTaskID curID = MPCurrentTaskID();	for ( whichTask = 0; whichTask < gCurrentInterruptEquivalentTaskID; whichTask++ )	{		if ( gInterruptEquivalentTaskIDs[whichTask] == curID )		{			return TRUE;		}	}		return FALSE;}void HXMM_COMPACT(void){	// do nothing}

⌨️ 快捷键说明

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