亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? tmrun.c

?? PNX系列設備驅動 PNX系列設備驅動
?? C
字號:
/*
 *  COPYRIGHT (c) 1997 by Philips Semiconductors
 *
 *   +-----------------------------------------------------------------+
 *   | THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED |
 *   | AND COPIED IN ACCORDANCE WITH THE TERMS AND CONDITIONS OF SUCH  |
 *   | A LICENSE AND WITH THE INCLUSION OF THE THIS COPY RIGHT NOTICE. |
 *   | THIS SOFTWARE OR ANY OTHER COPIES OF THIS SOFTWARE MAY NOT BE   |
 *   | PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON. THE   |
 *   | OWNERSHIP AND TITLE OF THIS SOFTWARE IS NOT TRANSFERRED.        |
 *   +-----------------------------------------------------------------+
 *
 *  Revision history         : 
 *    10/26/96:  CJP		:	Tested and basically working.
 *								More error checking and reporting added.
 *
 *    970106:  Tilakraj Roy :	Added support for the TMCons in tmDSPRunExecutable.
 *								Commenetd the use of tmDSPRunExecutable
 *    970114:  Tilakraj Roy :	Added command line processing of windows size
 *    970128:  Tilakraj Roy :	Added tmDSPExecutableStop in exit function
 *    970327:  Tilakraj Roy :	Revamped the entire code for proper error handling
 *								Added the ExitEvent for proper cleanup.
 *    970630:  Tilakraj Roy :	Added multiprocessor support.
 *    970631:  Tilakraj Roy :	Added	new cruntime support.
 *    970728:  Tilakraj Roy :	Fixed exit code error bug.
 *    971010:  Tilakraj Roy :	Ported to TMMan version 5.0
 *
 *
 *  Description              :  
 *
 *		This module is driver for the
 *		host part of the PC version of the Level 2 
 *		Remote Procedure Call Server. An implementation
 *		of this is needed for each particular host of
 *		a TM-1 board which uses TCS's generic ANSI C library.
 *		
 *		In its current form this module is intended to run as
 *		an independent executable that must be
 *		started from a PC command line. Its first argument
 *		must be the name of a TM-1 executable which is to be 
 *		downloaded, started, and which is passed all additional
 *		command line arguments. Between starting the executable
 *		and receiving its termination message, this module behaves
 *		as a server for the HostCall interface.
 *
 */

/*---------------------------- Includes --------------------------------------*/

#include "windows.h"
#include "stdio.h"

#include "tmmanapi.h"
#include "tmcrt.h"
#include "TMObj.h"

HANDLE	hExitEvent;
DWORD	GlobalExitCode = (~0x0);
BOOL	Interactive = TRUE;
BOOL	Server = FALSE;
DWORD	DSPHandle;
DWORD	TargetArgumentOffset ;

BOOL WINAPI tmrunControlHandler ( DWORD dwCtrlType );
UInt32 ODS( UInt8* FormatString, ... );

/*******************************************************************************/
int main( int  argc, char *argv[] )
{
	TMStatus			Status;
	tmmanVersion		Version;
	WORD				wIdxArg;
	DWORD				DSPNumber = 0;
	DWORD				CRTHandle;
	CRunTimeParameterBlock	CRTParam;
	CHAR				szEventName[80];
	tmmanDSPInfo		DSPInfo;
	BOOL				TargetExitedNormally = FALSE;
	BOOL				DynamicApplication = FALSE;
	CHAR**				ArgumentVectorArray;
	DWORD				ArgumentCount;
	CHAR				TargetExecutableName[constTMManPathLength];
	DWORD				dwWindowLines = 0;

	TargetExecutableName[0] = '\0';

	CRTParam.OptionBitmap		= 0;
	CRTParam.StdInHandle		= (DWORD)GetStdHandle ( STD_INPUT_HANDLE );
	CRTParam.StdOutHandle		= (DWORD)GetStdHandle ( STD_OUTPUT_HANDLE );
	CRTParam.StdErrHandle		= (DWORD)GetStdHandle ( STD_ERROR_HANDLE );

	if ( argc == 1 )
	{
		goto mainUsage;
	}

	TargetArgumentOffset = argc;

	// process the command line parameters
	for ( wIdxArg = 1; wIdxArg < argc ; wIdxArg++ )
	{
		if( argv[wIdxArg][0] != '-' )
		{
			strcpy ( TargetExecutableName, argv[wIdxArg] );
			TargetArgumentOffset = wIdxArg;
			break;
		}

		switch ( toupper ( argv[wIdxArg][1]) )
		{
			case 'D' :
			if ( sscanf(&argv[wIdxArg][2], "%x", &DSPNumber ) != 1 )
			{
				goto mainUsage;
			}
			break;


			case 'V' :
			/* identify yourself! */
			fprintf (stderr, 
				"\nTMRun v%d.%d (c) 1998, Philips Semiconductors.\n", 
				constTMManDefaultVersionMajor, 
				constTMManDefaultVersionMinor );
			break;

			case 'S' :
			Server = TRUE;
			break;

			case 'B' :
			Interactive = FALSE;
			break;

			case 'W' :
			{
				COORD	ConsoleSize;
				if ( sscanf(&argv[wIdxArg][2], "%u", &dwWindowLines ) != 1 )
				{
					goto mainUsage;
				}
				ConsoleSize.X = 80;
				ConsoleSize.Y = (USHORT)dwWindowLines;
				SetConsoleScreenBufferSize (
					GetStdHandle ( STD_OUTPUT_HANDLE ), ConsoleSize );
			}
			break;
			
			// add other command line optons here
			case '?' : 
			default :
			goto mainUsage;
		}
	}

	// set the Windows size if it has not already been set
	// from the command line - do it here so that tmdbg, tmmon, tmgmon 
	// benefit from it BUG#503266, BUG#503264, BUG#503116
	if ( Server )
	{
		COORD	ConsoleSize;
		HKEY	RegistryHandle;

		if ( ERROR_SUCCESS == RegOpenKeyEx(  
			HKEY_LOCAL_MACHINE,
			constTMManRegistryPath,
			0,
			KEY_READ,
			&RegistryHandle ) )
		{
			ULONG	BytesXfered;
			DWORD	dwWindowLines;
			COORD	ConsoleSize;
			
			BytesXfered = sizeof ( ULONG );

			if ( ERROR_SUCCESS == RegQueryValueEx(
				RegistryHandle,
				TEXT("TMRunWindowSize"),
				NULL,
				NULL,
				(BYTE*)&dwWindowLines,
				&BytesXfered ) )
			{

				ConsoleSize.X = 80;
				if ( dwWindowLines > 500 ) dwWindowLines = 500; //BUG#503263
				ConsoleSize.Y = (USHORT)dwWindowLines;
				SetConsoleScreenBufferSize (
					GetStdHandle ( STD_OUTPUT_HANDLE ), ConsoleSize );

			}

			RegCloseKey ( RegistryHandle );
		}

	}

	// unused parameter
	CRTParam.CRTThreadCount		= 2;

	if ( ( ! Server ) && ( TargetExecutableName[0] == '\0' ) )
	{
		fprintf ( stderr, "TMRun : ERROR : Executable Image Name Missing\n");
		goto mainExit1;
	}

	// install a control C handler so that we can perform cleanup before exit.
	if ( SetConsoleCtrlHandler  ( tmrunControlHandler , TRUE ) != TRUE )
	{
		fprintf ( stderr, "TMRun : ERROR : Win32 SetConsoleCtrlHandler failed [0x%x]\n", GetLastError() );
		goto mainExit1;
	}

	/* check for compatible driver version */
	Version.Major = constTMManDefaultVersionMajor ; 
	Version.Minor = constTMManDefaultVersionMinor ;

	tmmanNegotiateVersion (  constTMManDefault, &Version );

	if ( ( Version.Major != constTMManDefaultVersionMajor ) ||
		( Version.Minor != constTMManDefaultVersionMinor) )
	{
		fprintf (stderr, "TMRun : ERROR :  tmrun.exe Version[%d.%d] is INCOMPATIBLE With TMMan32.dll Version[%d.%d]\n",
			constTMManDefaultVersionMajor, constTMManDefaultVersionMinor, 
			Version.Major, Version.Minor );

		goto	mainExit1;
	}

	Status = tmmanDSPOpen( 
		DSPNumber, 
		&DSPHandle);

	if ( Status != statusSuccess )
	{
		fprintf (stderr, "TMRun : ERROR : tmmanDSPOpen failed [0x%x](%s) \n", 
			Status, tmmanGetErrorString(Status) );
		goto	mainExit1;
	} 

	Status = tmmanDSPGetInfo ( 
		DSPHandle, 
		&DSPInfo );

	if ( Status != statusSuccess )
	{
		fprintf (stderr, "TMRun : ERROR : tmmanDSPGetInfo [0x%x](%s) \n",
			Status, tmmanGetErrorString(Status) );
		goto	mainExit1;
	} 

	wsprintf( szEventName, "TMRunExitEvent%x", DSPInfo.DSPNumber );

	hExitEvent = CreateEvent ( NULL, 
		TRUE, // auto reset event
		FALSE, // initial state is not signalled
		szEventName );	// anonymous

	if ( hExitEvent == INVALID_HANDLE_VALUE )
	{
		fprintf (stderr, "TMRun : ERROR : Win32 CreateEvent[%s] failed (0x%x)\n", 
			szEventName, GetLastError() );
		goto mainExit2;
	}

	ArgumentVectorArray = &argv[TargetArgumentOffset];
	ArgumentCount = argc - TargetArgumentOffset;

	
	cruntimeInit();

	if ( ! Server )
	{
		UInt32				ImageType,ImageEndian;

		// BEGIN APPLOAD
		if ( tmmanGetImageInfo (
			TargetExecutableName,
			&ImageType,
			&ImageEndian ) != True )
		{
			fprintf (stderr,
				"\r\nTMMon: ERROR  : Loading Executable [%s]: FAIL (File Not Found)", 
				TargetExecutableName );
			goto mainExit3;
		}

		if ( ImageType == TMObj_AppSegment ) 
		{
			UInt32	IdxArg, Idx;
			UInt8	TCSPath[constTMManPathLength];


			DynamicApplication = TRUE;

			if ( ( ArgumentVectorArray = 
				malloc ( ( argc - TargetArgumentOffset ) * sizeof ( char *) ) ) == NULL )
			{
				fprintf (stderr, "TMRun : ERROR : malloc : Argument Buffer :FAIL\n" );
				goto mainExit3;

			}

			// if the component is of -btype app then we have to recreate
			// the arguemnt list  as the appshell.out has to be argv[0]
			// argv[0] will be dealt with later copy the rest of the 
			// arguemnts first.
			for ( Idx = 1, IdxArg = TargetArgumentOffset ; 
				IdxArg < ( argc ) ; 
				Idx ++, IdxArg++ )
			{
				ArgumentVectorArray[Idx] = argv[IdxArg];
			}

			ArgumentCount = Idx;

			if ( tmmanGetTCSPath ( 
				TCSPath,
				constTMManPathLength ) != True )
			{
				sprintf ( TargetExecutableName, "%s", "appshell.out" ); 
			}
			else
			{
				// TCS\lib\el\appshell.out
				sprintf ( TargetExecutableName, "%s\\lib\\%s\\WinNT\\appshell.out",
					TCSPath, 
					( ImageEndian == LittleEndian ) ? "el" : "eb"  ); 
			}

			ArgumentVectorArray[0] = TargetExecutableName;
		}
	

		// END APPLOAD

		Status = tmmanDSPLoad ( 
			DSPHandle, 
			constTMManDefault,
			TargetExecutableName );

		if ( Status != statusSuccess )
		{
			fprintf ( stderr, "TMRun : ERROR : tmmanDSPLoad (%s) failed [0x%x](%s) \n", 
				TargetExecutableName, Status, tmmanGetErrorString(Status) );
			goto mainExit4;
		}
	} 

	CRTParam.OptionBitmap |= constCRunTimeFlagsUseSynchObject;
	CRTParam.SynchronizationObject = (DWORD)hExitEvent;
	CRTParam.VirtualNodeNumber = 0;

	if ( ! Interactive )
	{
		CRTParam.OptionBitmap |= constCRunTimeFlagsNonInteractive;
	}

	if ( cruntimeCreate( 
		DSPNumber,
		ArgumentCount,
		ArgumentVectorArray,
		&CRTParam,
		&CRTHandle ) != True )
	{
		fprintf( stderr,
			"TMRun : ERROR : Cannot Initialize C Run Time Server : CRT I/O calls will not work\n" );
		goto	mainExit4;
	}

	if ( ! Server )
	{
		Status = tmmanDSPStart  ( 
			DSPHandle );

		if ( Status != statusSuccess )
		{
			fprintf( stderr,
				"TMRun: ERROR : tmmanDSPStart failed [0x%x](%s)\n", 
				Status, tmmanGetErrorString(Status) );
			goto mainExit5;
		}
	}
	
	/* wait until the server's exit function is called */
	WaitForSingleObject (hExitEvent, INFINITE );
	//fprintf(stderr, "[WaitForSingleObject|Signalled]\n" );

/* mainExit6: */
	if ( ! Server )
	{
		tmmanDSPStop ( DSPHandle ); 
	}

mainExit5:	
	TargetExitedNormally = cruntimeDestroy( CRTHandle, &GlobalExitCode  );
	//fprintf(stderr, "tmrun:cruntimeDestroy:TargetExitedNormally[%s]:Interactive[%s]:ExitCode[0x%x]\n", 
	//	TargetExitedNormally ? "TRUE" : "FALSE", 
	//	Interactive ? "TRUE" : "FALSE",
	//	GlobalExitCode );

mainExit4:	
	if ( DynamicApplication )
	{
		free ( ArgumentVectorArray );
	}

mainExit3 :
	CloseHandle ( hExitEvent );
	
mainExit2 :
	cruntimeExit();
	tmmanDSPClose ( DSPHandle );


mainExit1 :
	if ( ( Interactive ) && ( TargetExitedNormally ) )
	{
		fprintf (stderr, "\nTMRun:Press [ENTER] to close server >>");
		fflush(stdout);
		getchar();
	}
	else
	{
		//fprintf(stderr, "[tmrun:WaitForKeyPress:SKIPPED]\n" );
	}	
	return (GlobalExitCode);

mainUsage :
	fprintf (stderr, "usage:TMRun [-dDSPNumber] [-b] [-wWindowSize] [-s] ExecutableImageName [Arg1] [Arg2] ...\n" );
	goto	mainExit1;
}

BOOL WINAPI tmrunControlHandler ( DWORD dwCtrlType )
{

   fprintf ( stderr, "\nTMRun:Control C Detected : Performing Cleanup\n" );
   SetEvent ( hExitEvent );
   return TRUE;
}


UInt32 ODS( 
	UInt8* FormatString, 
	... )
{
	UInt32	Items;
	UInt8	Buffer[1024];
	
	va_list	Arguments;

	va_start ( Arguments, FormatString );

	Items = vsprintf ( Buffer,  FormatString, Arguments );

	va_end ( Arguments );

	OutputDebugString ( Buffer ); 
	OutputDebugString ( "\n" ); 
	return Items;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲综合激情另类小说区| 国产麻豆午夜三级精品| 日韩av一二三| eeuss鲁片一区二区三区| 欧美肥大bbwbbw高潮| 国产欧美日韩综合精品一区二区| 亚洲国产aⅴ天堂久久| 成人一区二区三区中文字幕| 日韩欧美一级特黄在线播放| 亚洲午夜精品久久久久久久久| 高清免费成人av| 日韩欧美精品在线视频| 日韩精品久久理论片| 欧美亚洲图片小说| 亚洲视频在线一区| 99精品久久只有精品| wwww国产精品欧美| 蜜桃精品视频在线| 欧美老年两性高潮| 亚洲成a人v欧美综合天堂下载 | 欧美男生操女生| 最新日韩在线视频| 不卡的电影网站| 欧美激情一区在线| 国产91清纯白嫩初高中在线观看| 欧美videofree性高清杂交| 蜜臀久久久久久久| 日韩一区二区三区高清免费看看 | 国产一区二区精品在线观看| 91精品国产综合久久久蜜臀图片| 亚洲精品欧美激情| 欧美午夜片在线观看| 亚洲资源在线观看| 在线播放视频一区| 奇米影视一区二区三区| 欧美精品粉嫩高潮一区二区| 亚洲成人av中文| 欧美一区二区三区色| 美国欧美日韩国产在线播放| 欧美刺激午夜性久久久久久久 | 亚洲一二三区视频在线观看| 色综合激情久久| 一区二区免费看| 欧美区在线观看| 久久精品国产99| 国产亚洲美州欧州综合国| 高清beeg欧美| 一区二区三区在线观看欧美| 欧美色精品在线视频| 久久精品国产秦先生| 久久精品视频一区二区三区| 岛国一区二区三区| 亚洲精品videosex极品| 欧美精品视频www在线观看| 美女国产一区二区| 国产精品免费免费| 欧美久久久久中文字幕| 青青草97国产精品免费观看| 国产亚洲精品超碰| 91搞黄在线观看| 国内成人精品2018免费看| 欧美激情一区二区三区| 欧美日韩一级二级三级| 国产乱对白刺激视频不卡| 一区二区三区毛片| 久久人人超碰精品| 91成人免费网站| 国产麻豆精品视频| 一区二区欧美国产| 欧美激情综合网| 欧美日韩视频在线观看一区二区三区| 久久不见久久见免费视频7| 国产精品久久久久久久久免费相片| 欧美午夜精品理论片a级按摩| 另类中文字幕网| 亚洲精选视频免费看| 欧美精品一区二区三区蜜臀| 日本久久一区二区| 国产成人av一区| 青青草97国产精品免费观看无弹窗版| 中文字幕在线不卡视频| 日韩视频免费观看高清在线视频| 成人av免费观看| 狠狠网亚洲精品| 午夜欧美一区二区三区在线播放| 国产欧美日韩另类视频免费观看| 欧美二区乱c少妇| 欧美在线免费播放| 成人综合婷婷国产精品久久蜜臀 | 2024国产精品| 欧美日韩国产首页| 色综合天天做天天爱| 国产乱码精品一区二区三| 久久精品国产在热久久| 午夜精品免费在线观看| 一区二区三区四区在线免费观看| 国产亚洲精品aa午夜观看| 精品久久国产97色综合| 91精品国产色综合久久| 欧美日韩亚洲丝袜制服| 91久久精品一区二区三| 91论坛在线播放| 97se狠狠狠综合亚洲狠狠| 不卡的电影网站| 成人免费毛片aaaaa**| 国产精品一区二区果冻传媒| 精品一区二区免费| 精品一区二区日韩| 激情综合色综合久久综合| 另类的小说在线视频另类成人小视频在线| 亚洲一线二线三线久久久| 中文字幕中文在线不卡住| 国产精品另类一区| 国产精品素人视频| 欧美国产精品中文字幕| 国产精品成人网| 亚洲免费在线播放| 亚洲第一搞黄网站| 日本亚洲视频在线| 国产乱码精品一区二区三区五月婷| 久久66热re国产| 狠狠色2019综合网| 国产成人av在线影院| 99久久777色| 欧美伊人精品成人久久综合97| 欧美日韩一区高清| 日韩欧美专区在线| 国产日本亚洲高清| 亚洲蜜臀av乱码久久精品蜜桃| 亚洲精品视频在线看| 亚洲成av人片一区二区| 日本不卡不码高清免费观看| 久久福利视频一区二区| 福利一区二区在线| 在线免费观看日本欧美| 51精品视频一区二区三区| 精品国产三级电影在线观看| 国产嫩草影院久久久久| 一区二区视频在线| 舔着乳尖日韩一区| 国产精品自在在线| 色呦呦国产精品| 欧美va在线播放| 亚洲日本青草视频在线怡红院| 亚洲午夜影视影院在线观看| 免费在线一区观看| 不卡的电视剧免费网站有什么| 欧美天堂亚洲电影院在线播放| 日韩欧美在线观看一区二区三区| 久久精品这里都是精品| 一区二区三区不卡在线观看| 卡一卡二国产精品 | 尤物av一区二区| 六月丁香综合在线视频| 99精品视频一区| 精品日韩一区二区三区免费视频| 国产精品久久看| 看电影不卡的网站| 91免费在线播放| 精品少妇一区二区三区在线播放 | 久久综合色鬼综合色| 亚洲男同1069视频| 经典三级一区二区| 欧美曰成人黄网| 国产日本一区二区| 麻豆91免费观看| 一本高清dvd不卡在线观看 | 成人免费高清在线观看| 91精品国产色综合久久不卡电影 | 国产不卡在线播放| 欧美日本韩国一区二区三区视频 | 美女网站在线免费欧美精品| 99久久国产综合精品色伊| 日韩欧美亚洲国产精品字幕久久久 | 国产精品免费丝袜| 国产在线精品免费| 欧美福利一区二区| 一区二区三区四区不卡视频 | 亚洲国产成人午夜在线一区| 欧美aⅴ一区二区三区视频| 欧美在线你懂得| 亚洲色图在线视频| 国产成人av一区二区| 精品国产乱码久久久久久免费| 亚洲成人av一区二区| 色欧美乱欧美15图片| 综合激情成人伊人| 成人av小说网| 国产精品久久久久影院色老大| 国产一区日韩二区欧美三区| 91精品婷婷国产综合久久竹菊| 亚洲黄色小说网站| 一本色道久久综合精品竹菊| 成人欧美一区二区三区小说| 成人久久视频在线观看| 国产精品三级电影| 波多野结衣欧美| 国产精品不卡一区二区三区| 成人激情图片网| 中文字幕在线不卡|