// 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; }
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); } }
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); }
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); }
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); }
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; }
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; } } }