Example #1
0
// Line mode -- currently uses sga/echo to determine when to enter line mode
// (as in RFC 858), but correct behaviour is as described in RFC 1184.
// (Paul Brannan 12/31/98)
// FIX ME!!  What to do with unflushed data when we change from line mode
// to character mode?
inline bool DoLineModeSpecial(char keychar, TConsole &Console, TNetwork &Network,
					   NetParams *pParams) {
	if(keychar == VK_BACK) {
		if(bufptr) bufptr--;
		DoEcho("\b \b", 3, Console, Network, pParams);
		return true;
	} else if(keychar == VK_RETURN) {
		Network.WriteString(buffer, bufptr);
		Network.WriteString("\012", 1);
		DoEcho("\r\n", 2, Console, Network, pParams);
		bufptr = 0;
		return true;
	}
	return false;
}
Example #2
0
VOID 
__cdecl 
wmain()
{
    HANDLE hDevice = INVALID_HANDLE_VALUE;
    BOOL echo = TRUE;
    LPWSTR devicePath = NULL;
    DWORD err = GetDevicePath((LPGUID)&BTHECHOSAMPLE_DEVICE_INTERFACE, &devicePath);

    if (ERROR_SUCCESS != err) {
        printf("Failed to find the BTHECHO device\n");
        exit(1);
    }

    hDevice = CreateFile(devicePath,
                         GENERIC_READ|GENERIC_WRITE,
                         FILE_SHARE_READ | FILE_SHARE_WRITE,
                         NULL,
                         OPEN_EXISTING,
                         0,
                         NULL );

    if (hDevice == INVALID_HANDLE_VALUE) {
        printf("Failed to open device. Error %d\n",GetLastError());
        LocalFree(devicePath);
        exit(1);
    } 

    printf("Opened device successfully\n");

    while (echo)
    {
        echo = DoEcho(hDevice);
    }
                
    if (INVALID_HANDLE_VALUE != hDevice) {
        CloseHandle(hDevice);
        printf("Closed device\n");
    }

    if (NULL != devicePath) {
        LocalFree(devicePath);
    }
}
Example #3
0
VOID 
__cdecl 
main()
{
    HANDLE hDevice;
    BOOL echo;
    PSP_DEVICE_INTERFACE_DETAIL_DATA deviceInterfaceDetailData = NULL;
        
    deviceInterfaceDetailData = GetDeviceInterfaceDetailData((LPGUID)&BTHECHOSAMPLE_DEVICE_INTERFACE);
    if (deviceInterfaceDetailData == NULL) {
        printf("Failed to get the device interface detail data\n");
        exit(1);
    }
    

    printf("DevicePath: %s\n", deviceInterfaceDetailData->DevicePath);

    hDevice = CreateFile(deviceInterfaceDetailData->DevicePath,
                         GENERIC_READ|GENERIC_WRITE,
                         FILE_SHARE_READ | FILE_SHARE_WRITE,
                         NULL,
                         OPEN_EXISTING,
                         0,
                         NULL );

    if (hDevice == INVALID_HANDLE_VALUE) {
        printf("Failed to open device. Error %d\n",GetLastError());
        LocalFree(deviceInterfaceDetailData);
        exit(1);
    } 

    printf("Opened device successfully\n");

    do
    {
        echo = DoEcho(hDevice);
    } while (echo);
                
    CloseHandle(hDevice);
    printf("Closed device\n");

    LocalFree(deviceInterfaceDetailData);
    
}
Example #4
0
static void UltraUpdate(void)
{
    fd_set read_fds, write_fds;
    int need_write;

    if (ULTRA_BPM != md_bpm) {
	gus_do_tempo(((md_bpm * 50) / 125) * 1);
	ULTRA_BPM = md_bpm;
    }
    UltraPlayer();
    if (oldRow != mp_sngpos || oldOrder != mp_patpos) {
	DoEcho();
	oldRow = mp_sngpos;
	oldOrder = mp_patpos;
    }
    do {

	need_write = gus_do_flush();

	FD_ZERO(&read_fds);
	FD_ZERO(&write_fds);

	do {

	    FD_SET(ultra_fd, &read_fds);
	    FD_SET(ultra_fd, &write_fds);

	    select(ultra_fd + 1, &read_fds, &write_fds, NULL, NULL);

	    if (FD_ISSET(ultra_fd, &read_fds))
		ProcessEcho();

	} while (!FD_ISSET(ultra_fd, &write_fds));

    } while (need_write > 0);
}
Example #5
0
bool	_HYConsoleWindow::ProcessEvent (_HYEvent* e)
{
	bool	done = false;
	
	_String firstArg;
	long	i,f,k;
	
	if (e->EventClass().Equal(&_hyButtonPushEvent))
	{
		firstArg = e->EventCode().Cut (0,(f=e->EventCode().Find(','))-1);
		k = firstArg.toNum();
		for (i=0;i<components.lLength;i++)
		{
			if (((_HYGuiObject*)components(i))->MatchID(k))
				break;
		}
		if (i==2)
		{
			firstArg 		= e->EventCode().Cut (f+1,-1);
			k 				= firstArg.toNum();
			_HYButtonBar * bb = (_HYButtonBar*)GetObject (2);
			
			switch	(k)
			{
				case 0:
				case 1:
					{

						_List menuChoices;
						if (k==0)
							for (long k=0; k<userHookins.lLength; k++)
							{
								_String *dName =  (_String*)userHookins(k),
										aName (*dName, dName->FindBackwards (
										#ifdef __MAC__
											':'
										#else
											#ifdef __WINDOZE__
											'\\'
											#else
											'/'
											#endif
										#endif
										,0,-1)+1,-1);
										
								menuChoices && & aName;
							}
						else
						{
							firstArg = "Search Commands";
							menuChoices && & firstArg;
							firstArg = "Search Descriptions";
							menuChoices && & firstArg;
							firstArg = "Search Notes";
							menuChoices && & firstArg;
							firstArg = "Export to LaTeX by name";
							menuChoices && & firstArg;
							firstArg = menuSeparator;
							menuChoices && & firstArg;
							firstArg = "Open in a window";
							menuChoices && & firstArg;
						}
						
						int h,v;
						bb->GetButtonLoc(k,h,v,true);
						_String userAction = HandlePullDown (menuChoices,h,v,0);
						bb->_UnpushButton();
						i = menuChoices.Find (&userAction);
						if (i>=0)
						{
							_ExecutionList uxl;
							if (k==0)
							{
								userAction = ((_String*)userHookins(i))->getStr();
							}
							else
								userAction = baseDirectory&"Help"&baseDirectory.sData[baseDirectory.sLength-1]&"Commands"&baseDirectory.sData[baseDirectory.sLength-1]&"query.bf";
							
							h = PushFilePath  (userAction);
							ReadBatchFile (userAction, uxl);
							
							if (k==1)
							{
								_String addin;
								switch (i)
								{
									case 0:
										addin = "Command";
										break;
									case 1:
										addin = "Description";
										break;
									case 2:
										addin = "Notes";
										break;
									case 3:
										addin = "Export";
										break;
									case 5:
										addin = "Window";
										break;
								}
								firstArg = ((_HYTextBox*)GetObject (1))->GetText();
								_FString qf = _FString (addin,false),
										 qt = _FString (firstArg,false);
								
								firstArg = "QUERY_FIELD";
								setParameter (firstArg,&qf);
								firstArg = "QUERY_TERM";
								setParameter (firstArg,&qt);
							}
								
							uxl.Execute();
							terminateExecution = false;
							if (h)
								PopFilePath   ();
							/*}
							else
							{
								userAction = userAction & " could not be found. Perhaps the file was recently moved or deleted.";
								ProblemReport (userAction, (Ptr)this);
							}*/
						}
					}
					break;
					
				case 2: 
					DoEcho();
					break;					

				case 3: 
				{
					_String webUpdate = baseDirectory&"TemplateBatchFiles"&baseDirectory.sData[baseDirectory.sLength-1]&"WebUpdate.bf";
					_ExecutionList wbl;
					k = PushFilePath  (webUpdate);
					ReadBatchFile (webUpdate, wbl);
					wbl.Execute();
					terminateExecution = false;
					if (k)
						PopFilePath   ();

				}
			}
			
			done = true;
		}
	}
	else
		if (e->EventClass().Equal(&_hyTextEditChange))
		{
			firstArg = e->EventCode().Cut (0,(f=e->EventCode().Find(','))-1);
			k = firstArg.toNum();
			for (i=0;i<components.lLength;i++)
			{
				if (((_HYGuiObject*)components(i))->MatchID(k))
					break;
			}
			if (i==0) // out box
			{
				_UpdateEditMenu();
				done = true;
			}		
			else
				if (i==1) // in box
				{
					firstArg 		= e->EventCode().Cut (f+1,-1);
					k 				= firstArg.toNum();
					_HYTextBox * ib = (_HYTextBox*)GetObject (1);
					
					if (k==2)
					{
						if (inputStatus == 1)
							inputStatus = 2;
					}
					else
					{
						if (k==3)
						// down arrow
						{
							if (inputLocation<recentInputs.lLength-1)
								ib->SetText (*(_String*)recentInputs(++inputLocation), false);
						}
						else 
							if (k==4)
							// up arrow
							{
								if (inputLocation>0)
									ib->SetText (*(_String*)recentInputs(--inputLocation), false);
							}
							else
							{	
								if (inputStatus == 1)
									inputLocation = recentInputs.lLength;
									
								_HYButtonBar * bb = (_HYButtonBar*)GetObject (2);
								bool 	onOff = ! ib->_IsEmpty();
								bb->EnableButton   (1,onOff);
							}
					}
					done = true;
				}		
		}
								
	if (done) 
	{
		DeleteObject (e);
		return true;
	}
	return _HYTWindow::ProcessEvent(e);	
}
Example #6
0
string osl_ExecuteSystemFunction(vector<OSL_LEXEM>* list)
{
	string _result;
	_result.resize(0);

	#ifdef _DEBUG_OSL
	WriteToLog(DEFAULT_OSL_LOG_NAME, "Executing system function...");
	#endif

	unsigned int param_count = 1;

	for(vector<OSL_LEXEM>::iterator it = list->begin();
		it != list->end();
		it++)
	{
		OSL_LEXEM lx = *it;

		if(osl_IsComma(lx.token))
			param_count++;
	}

	vector<OSL_LEXEM>::iterator i_first = list->begin();
	OSL_LEXEM first = *i_first;

	if(first.token == "echo")
	{
		vector<OSL_LEXEM>::iterator i_second = list->begin()+2;
		OSL_LEXEM second = *i_second;

		char* message = new char[second.token.length()+1];
		strcpy(message, (char*)second.token.data());

		message = osl_RemoveQuotesChr(message);
		DoEcho(message);
	}
	else if(first.token == "load")
	{
		vector<OSL_LEXEM>::iterator i_second = list->begin()+2;
		OSL_LEXEM second = *i_second;

		bool ok = DoLoad(osl_RemoveQuotesStr(second.token));

		ok == true ? _result = OSL_EXEC_OK : _result = OSL_EXEC_FAIL;
	}
	else if(first.token == "exit")
	{
		DoExit();
	}
	else if(first.token == "init")
	{
					vector<OSL_LEXEM>::iterator i_second = list->begin()+2;
					OSL_LEXEM second = *i_second;

					if(second.token == "gui")
					{
						if(!gui)
						{
							gui = new GUI();
							_result = OSL_EXEC_OK;
						}
						else
						{
							osl_Error("GUI already initialized");
							_result = OSL_EXEC_FAIL;
						}
					}
					else
					{
						osl_Error("init(): unknown parameter");
						_result = OSL_EXEC_FAIL;
					}
	}
	else if(first.token == "loadconfig")
	{
		vector<OSL_LEXEM>::iterator i_second = list->begin()+2;
		OSL_LEXEM second = *i_second;

		if(osl_IsStrConstant(second.token))
		{
			char* file = new char[second.token.length()+1];
			strcpy(file, (char*)second.token.data());
			file = osl_RemoveQuotesChr(file);

			bool ok = LoadConfig(file, &cfg);

			if(ok)
			{
				ApplyConfig(&cfg);
				_result = OSL_EXEC_OK;
			}
			else
				_result = OSL_EXEC_FAIL;
		}
		else
			osl_Error("LoadConfig(): Invalid argument");
	}
	else if(first.token == "loadfontfromfile")
	{
		WriteToLog(DEFAULT_OSL_LOG_NAME, "Trying to load font from file...");

		if(param_count == 3)
		{
			vector<OSL_LEXEM>::iterator i_second = list->begin()+2;
			OSL_LEXEM second = *i_second;
			vector<OSL_LEXEM>::iterator i_third = list->begin()+4;
			OSL_LEXEM third = *i_third;
			vector<OSL_LEXEM>::iterator i_fourth = list->begin()+6;
			OSL_LEXEM fourth = *i_fourth;

			if(osl_IsIntConstant(third.token) &&
				osl_IsIntConstant(fourth.token))
			{
				try
				{
					if(LoadFontFromFile((char*)osl_RemoveQuotesStr(second.token).c_str(),
						osl_StrToInt(third.token),
						osl_StrToInt(fourth.token)))
					{
						WriteToLog(DEFAULT_OSL_LOG_NAME, "LoadFontFromFile OK");
						_result = OSL_EXEC_OK;
					}
					else
					{
						WriteToLog(DEFAULT_OSL_LOG_NAME, "LoadFontFromFile FAILED");
						_result = OSL_EXEC_FAIL;
					}
				}
				catch(...)
				{
					osl_Error("Exception in try block: LoadFontFromFile");
					_result = OSL_EXEC_FAIL;
				}			
			}
			else
			{
				osl_Error("LoadFontFromFile() error: incompatible types");
				_result = OSL_EXEC_FAIL;
			}
		}
		else
		{
			osl_Error("LoadFontFromFile() error: function require one parameter");
			_result = OSL_EXEC_FAIL;
		}
	}
	else if(first.token == "loadfont")
	{
		WriteToLog(DEFAULT_OSL_LOG_NAME, "Trying to load font...");
		if(param_count == 4)
		{
			vector<OSL_LEXEM>::iterator i_second = list->begin()+2;
			OSL_LEXEM second = *i_second;
			vector<OSL_LEXEM>::iterator i_third = list->begin()+4;
			OSL_LEXEM third = *i_third;
			vector<OSL_LEXEM>::iterator i_fourth = list->begin()+6;
			OSL_LEXEM fourth = *i_fourth;
			vector<OSL_LEXEM>::iterator i_fifth = list->begin()+8;
			OSL_LEXEM fifth = *i_fifth;

			try
			{
				bool ok =
					LoadFont((char*)osl_RemoveQuotesStr(second.token).c_str(),
						osl_StrToInt(third.token),
						osl_StrToInt(fourth.token),
						(char*)osl_RemoveQuotesStr(fifth.token).c_str());

				ok == true ? _result = OSL_EXEC_OK : _result = OSL_EXEC_FAIL;
			}
			catch(...)
			{
				osl_Error("Exception in try block: LoadFont");
				_result = OSL_EXEC_FAIL;
			}
			WriteToLog(DEFAULT_OSL_LOG_NAME, "LoadFont OK");

		}
		else
		{
			osl_Error("LoadFont() error: function requires two parametres");
			_result = OSL_EXEC_FAIL;
		}
	}
	else if(first.token == "loadtexture")
	{
		WriteToLog(DEFAULT_OSL_LOG_NAME, "Trying to load texture...");
		if(param_count == 1)
		{
			vector<OSL_LEXEM>::iterator i_second = list->begin()+2;
			OSL_LEXEM second = *i_second;

			try
			{
				string s = osl_RemoveQuotesStr(second.token);
				char* n = new char[strlen(s.data())+1];
				sprintf(n, "%s\0", s.data());

				if(!LoadTexture(n))
				{
					osl_Error("LoadTexture() failed");
					_result = OSL_EXEC_FAIL;
				}
				else
					_result = OSL_EXEC_OK;
				delete[] n;
			}
			catch(...)
			{
				osl_Error("Exception in try block: LoadTexture");
				_result = OSL_EXEC_FAIL;
			}
			WriteToLog(DEFAULT_OSL_LOG_NAME, "LoadTexture OK");
		}
		else
		{
			osl_Error("LoadTexture() error: function requires one parameter");
			_result = OSL_EXEC_FAIL;
		}
	}
	else if(first.token == "newguielem")
	{
		if(param_count == 2)
		{
			vector<OSL_LEXEM>::iterator i_second = list->begin()+2;
			OSL_LEXEM second = *i_second;
			vector<OSL_LEXEM>::iterator i_third = list->begin()+4;
			OSL_LEXEM third = *i_third;

			NewGUIElem(osl_RemoveQuotesStr(second.token),
				osl_RemoveQuotesStr(third.token));
		}
		else
			osl_Error("NewGUIElem() error: function requires two parametres");
	}
	else if(first.token == "setguielem")
	{
		if(param_count == 3)
		{
			vector<OSL_LEXEM>::iterator i_second = list->begin()+2;
			OSL_LEXEM second = *i_second;
			vector<OSL_LEXEM>::iterator i_third = list->begin()+4;
			OSL_LEXEM third = *i_third;
			vector<OSL_LEXEM>::iterator i_fourth = list->begin()+6;
			OSL_LEXEM fourth = *i_fourth;

			SetGUIElem(osl_RemoveQuotesStr(second.token),
				osl_RemoveQuotesStr(third.token),
				osl_RemoveQuotesStr(fourth.token));
		}
		else if(param_count == 5)
		{
			vector<OSL_LEXEM>::iterator i_second = list->begin()+2;
			OSL_LEXEM second = *i_second;
			vector<OSL_LEXEM>::iterator i_third = list->begin()+4;
			OSL_LEXEM third = *i_third;
			vector<OSL_LEXEM>::iterator i_fourth = list->begin()+6;
			OSL_LEXEM fourth = *i_fourth;
			vector<OSL_LEXEM>::iterator i_fifth = list->begin()+8;
			OSL_LEXEM fifth = *i_fifth;
			vector<OSL_LEXEM>::iterator i_sixth = list->begin()+10;
			OSL_LEXEM sixth = *i_sixth;

			SetGUIElem(osl_RemoveQuotesStr(second.token),
				osl_RemoveQuotesStr(third.token),
				osl_RemoveQuotesStr(fourth.token),
				osl_RemoveQuotesStr(fifth.token),
				osl_RemoveQuotesStr(sixth.token));
		}
		else if(param_count == 6)
		{
			vector<OSL_LEXEM>::iterator i_second = list->begin()+2;
			OSL_LEXEM second = *i_second;
			vector<OSL_LEXEM>::iterator i_third = list->begin()+4;
			OSL_LEXEM third = *i_third;
			vector<OSL_LEXEM>::iterator i_fourth = list->begin()+6;
			OSL_LEXEM fourth = *i_fourth;
			vector<OSL_LEXEM>::iterator i_fifth = list->begin()+8;
			OSL_LEXEM fifth = *i_fifth;
			vector<OSL_LEXEM>::iterator i_sixth = list->begin()+10;
			OSL_LEXEM sixth = *i_sixth;
			vector<OSL_LEXEM>::iterator i_seventh = list->begin()+12;
			OSL_LEXEM seventh = *i_seventh;

			SetGUIElem(osl_RemoveQuotesStr(second.token),
				osl_RemoveQuotesStr(third.token),
				osl_RemoveQuotesStr(fourth.token),
				osl_RemoveQuotesStr(fifth.token),
				osl_RemoveQuotesStr(sixth.token),
				osl_RemoveQuotesStr(seventh.token));
		}
		else
			osl_Error("NewGUIElem() error: incorrect number of parametres");
	}
	else if(first.token == "createplayer")
	{
		if(param_count == 28)
		{
			vector<OSL_LEXEM>::iterator p1 = list->begin()+2;
			vector<OSL_LEXEM>::iterator p2 = list->begin()+4;
			vector<OSL_LEXEM>::iterator p3 = list->begin()+6;
			vector<OSL_LEXEM>::iterator p4 = list->begin()+8;
			vector<OSL_LEXEM>::iterator p5 = list->begin()+10;
			vector<OSL_LEXEM>::iterator p6 = list->begin()+12;
			vector<OSL_LEXEM>::iterator p7 = list->begin()+14;
			vector<OSL_LEXEM>::iterator p8 = list->begin()+16;
			vector<OSL_LEXEM>::iterator p9 = list->begin()+18;
			vector<OSL_LEXEM>::iterator p10 = list->begin()+20;
			vector<OSL_LEXEM>::iterator p11 = list->begin()+22;
			vector<OSL_LEXEM>::iterator p12 = list->begin()+24;
			vector<OSL_LEXEM>::iterator p13 = list->begin()+26;
			vector<OSL_LEXEM>::iterator p14 = list->begin()+28;
			vector<OSL_LEXEM>::iterator p15 = list->begin()+30;
			vector<OSL_LEXEM>::iterator p16 = list->begin()+32;
			vector<OSL_LEXEM>::iterator p17 = list->begin()+34;
			vector<OSL_LEXEM>::iterator p18 = list->begin()+36;
			vector<OSL_LEXEM>::iterator p19 = list->begin()+38;
			vector<OSL_LEXEM>::iterator p20 = list->begin()+40;
			vector<OSL_LEXEM>::iterator p21 = list->begin()+42;
			vector<OSL_LEXEM>::iterator p22 = list->begin()+44;
			vector<OSL_LEXEM>::iterator p23 = list->begin()+46;
			vector<OSL_LEXEM>::iterator p24 = list->begin()+48;
			vector<OSL_LEXEM>::iterator p25 = list->begin()+50;
			vector<OSL_LEXEM>::iterator p26 = list->begin()+52;
			vector<OSL_LEXEM>::iterator p27 = list->begin()+54;
			vector<OSL_LEXEM>::iterator p28 = list->begin()+56;

			CreatePlayer((*p1).token, (*p2).token, (*p3).token, (*p4).token,
				(*p5).token, (*p6).token, (*p7).token, (*p8).token, (*p9).token,
				(*p10).token, (*p11).token, (*p12).token, (*p13).token, (*p14).token,
				(*p15).token, (*p16).token, (*p17).token, (*p18).token, (*p19).token,
				(*p20).token, (*p21).token, (*p22).token, (*p23).token, (*p24).token,
				(*p25).token, (*p26).token, (*p27).token, (*p28).token);


		}
		else
			osl_Error("CreatePlayer() error: incorrect number of parametres");
	}
	else if(first.token == "createpowerup")
	{
		if(param_count == 4)
		{
			vector<OSL_LEXEM>::iterator p1 = list->begin()+2;
			vector<OSL_LEXEM>::iterator p2 = list->begin()+4;
			vector<OSL_LEXEM>::iterator p3 = list->begin()+6;
			vector<OSL_LEXEM>::iterator p4 = list->begin()+8;

			CreatePowerup((*p1).token, (*p2).token, (*p3).token, (*p4).token);

		}
		else
			osl_Error("CreatePowerup() error: incorrect number of parametres");
	}
	else if(first.token == "createenemy")
	{
		if(param_count == 3)
		{
			vector<OSL_LEXEM>::iterator p1 = list->begin()+2;
			vector<OSL_LEXEM>::iterator p2 = list->begin()+4;
			vector<OSL_LEXEM>::iterator p3 = list->begin()+6;

			CreateEnemy((*p1).token, (*p2).token, (*p3).token);
		}
		else
			osl_Error("CreateEnemy() error: incorrect number of parametres");
	}
	else
		osl_Error("Command is not implemented yet");

	return _result;

}
Example #7
0
int telProcessConsole(NetParams *pParams, KeyTranslator &KeyTrans,
					  TConsole &Console, TNetwork &Network, TMouse &Mouse,
					  Tnclip &Clipboard, HANDLE hThread)
{
	KeyDefType_const keydef;
	const char *p;
	int p_len;
	unsigned int i;
	int opval;
	HANDLE hConsole = GetStdHandle(STD_INPUT_HANDLE);

	SetConsoleMode(hConsole, ini.get_enable_mouse() ? ENABLE_MOUSE_INPUT : 0);

	const DWORD nHandle = 2;
	HANDLE hHandle[nHandle] = {hConsole, pParams->hExit};

	for (;;) {
		DWORD dwInput;
		switch (WaitForMultipleObjects(nHandle, hHandle, FALSE, INFINITE)) {
        case WAIT_OBJECT_0: {

			// Paul Brannan 7/29/98
			if(ini.get_input_redir()) {
				char InputBuffer[10];

				// Correction from Joe Manns <*****@*****.**>
				// to fix race conditions (4/13/99)
				int bResult;
				bResult = ReadFile(hConsole, InputBuffer, 10, &dwInput, 0);
				if(bResult && dwInput == 0) return TNNOCON;

				// no key translation for redirected input
				Network.WriteString(InputBuffer, dwInput);
				break;
			}

			INPUT_RECORD InputRecord[11];
			if (!ReadConsoleInput(hConsole, &InputRecord[0], 10, &dwInput))
				return TNPROMPT;

			for (i = 0; (unsigned)i < dwInput; i++){
				switch (InputRecord[i].EventType) {
				case KEY_EVENT:{
					if (KEYEVENT.bKeyDown) {

						WORD  keyCode  = KEYEVENT.wVirtualKeyCode;
						DWORD keyState = KEYEVENT.dwControlKeyState;

						// Paul Brannan 5/27/98
						// Moved the code that was here to FindClosestKey()
						keydef.szKeyDef = FindClosestKey(keyCode,
							keyState, KeyTrans);

						if(keydef.szKeyDef) {
							if(!keydef.op->sendstr)
								if((opval = do_op(keydef.op->the_op, Network,
									Clipboard)) != 0)
									return opval;
						}

						if(Network.get_line_mode()) {
							if(DoLineModeSpecial(KEYEVENT_CHAR, Console, Network, pParams))
								continue;
						}

						p = keydef.szKeyDef;
						if (p == NULL) { // if we don't have a translator
							if(!KEYEVENT_CHAR) continue;
							p_len = 1;
							p = KEYEVENT_PCHAR;
						} else {
							p_len = strlen(p);
						}

						// Local echo (Paul Brannan 5/16/98)
						DoEcho(p, p_len, Console, Network, pParams);
						// Line mode (Paul Brannan 12/31/98)
						DoLineMode(p, p_len, Console, Network);
					}
							   }
					break;

				case MOUSE_EVENT:
					if(!InputRecord[i].Event.MouseEvent.dwEventFlags) {
						ResetEvent(pParams->hUnPause);
						SetEvent(pParams->hPause);
						while (!*pParams->bNetPaused);	// thread paused
						// SuspendThread(hThread);

						// Put the mouse's X and Y coords back into the
						// input buffer
						DWORD Result;
						WriteConsoleInput(hConsole, &InputRecord[i], 1,
							&Result);

						Mouse.doMouse();

						SetEvent(pParams->hUnPause);
						// ResumeThread(hThread);
					}
					break;

				case FOCUS_EVENT:
					break;
				case WINDOW_BUFFER_SIZE_EVENT:
					// FIX ME!!  This should take care of the window re-sizing bug
					// Unfortunately, it doesn't.
					Console.sync();
					Network.do_naws(Console.GetWidth(), Console.GetHeight());
					break;
				}

			} // keep going until no more input
			break;
							}
        default:
			return TNNOCON;
		}
	}
}