// // override for plLoggable // bool plNetClientMgr::Log(const plString& str) const { if (str.IsNull() || str.IsEmpty()) { return true; } // prepend raw time plString buf2 = plFormat("{.2f} {}", hsTimer::GetSeconds(), ProcessTab(str.c_str())); if ( GetConsoleOutput() ) hsStatusMessage(buf2.c_str()); GetLog(); plNetObjectDebugger::GetInstance()->LogMsgIfMatch(buf2.c_str()); if (fStatusLog) { return fStatusLog->AddLine(buf2); } return true; }
int main( int argc, const char* argv[] ) { std::string s1("s1"); std::string s2("s2"); std::string s3 = s1+s2; GB_DriverBase = DriverBase::ptr(&GB_driver,smartpointer_nodeleter<DriverBase>()); GB_debug = false; GB_nofile = false; GB_num_arg_parsed = 1; GB_argc = argc; GB_argv = new std::string[argc]; for(int i=0; i<argc; ++i) GB_argv[i] = argv[i]; GB_cmdline = ""; // Get environment variables // CheckEnvDir( _T("AMI_HELP"), GB_help_dir, _T("tokens.html")); // CheckEnvDir( _T("AMI_SCRIPTS"), GB_scripts_dir, _T("scripts.amil")); GB_help_dir = "."; GB_scripts_dir = "."; RegisterBuiltinTypes(); AddWrapImports(); GB_typeconversions.DisplayTypes(); if(tty_break() != 0) return 1; std::string command_input; std::list<std::string> commands; start_color(); /* Start color */ init_pair(1, COLOR_RED, COLOR_BLACK); attron(COLOR_PAIR(1)); // Get all the mouse events mousemask(ALL_MOUSE_EVENTS, NULL); refresh(); NcursesWindow cmd_win; cmd_win.SetScreenPosition(1,1, 6, 85); cmd_win.Create(); keypad(cmd_win.GetWin(), true); scrollok(cmd_win.GetWin(),TRUE); NcursesWindow cout_win; cout_win.SetScreenPosition(7,1, 30, 85); cout_win.Create(); keypad(cout_win.GetWin(), true); scrollok(cout_win.GetWin(),TRUE); NcursesWindow cerr_win; cerr_win.SetScreenPosition(32,1, 50, 85); cerr_win.Create(); keypad(cerr_win.GetWin(), true); scrollok(cerr_win.GetWin(),TRUE); nc::nc_window_streambuf cout_buf( cout_win.GetWin(), std::cout ); nc::nc_window_streambuf cerr_buf( cerr_win.GetWin(), std::cerr ); std::cerr << "__Error test" << std::endl; // std::string current_command = ""; commands.push_front(current_command); std::list<std::string>::iterator commands_it = commands.begin(); int c; int cursor_x,cursor_y; cmd_win.SetCursorPos(0,0); NcursesWindow* current_win = &cmd_win; std::cout << "start" << std::endl; while (command_input!="quit") { attron(COLOR_PAIR(1)); cerr_win.Display(); cout_win.Display(); bool redraw=true; cmd_win.GetCursorXY(cursor_x,cursor_y); cmd_win.RefreshCusor(); c = getch(); int cy = cerr_win.GetCursorY(); // std::cout << "cerr y pos = " << cy << std::endl; bool key_mouse = false; switch(c) { case KEY_MOUSE: // do nothing for the moment key_mouse = true; MEVENT event; if (getmouse(&event)==OK) { std::cerr << "mouse state " << event.bstate << std::endl; // check on which window is the mouse if (cmd_win.IsInside(event.x,event.y)) current_win = &cmd_win; else if (cout_win.IsInside(event.x,event.y)) current_win = &cout_win; else current_win = &cerr_win; current_win->Display(); } break; default: // automatically set the command window if a character is pressed if ((c>=32)&&(c<=126)) if (current_win!=&cmd_win) current_win = &cmd_win; } if (current_win==&cmd_win) { // std::cout << "current_win is cmd win" << std::endl; // don't maintain completion if tab is not pressed if (c!=9) { in_completion = false; } switch(c) { // tab for completion case 9: ProcessTab(current_command,cursor_x); break; case KEY_UP: // save front command if (commands_it == commands.begin()) commands.front() = command_input; ++commands_it; if (commands_it == commands.end()) --commands_it; current_command = *commands_it; break; case KEY_DOWN: if (commands_it!=commands.begin()) --commands_it; current_command = *commands_it; break; case KEY_LEFT: cursor_x--; break; case KEY_RIGHT: cursor_x++; break; case KEY_BACKSPACE: // locate the character to remove // if one line command // if multiline command? if (cursor_x-1<current_command.size()) { current_command.erase(cursor_x-1,1); mvwprintw(cmd_win.GetWin(),0,0,"%s ",current_command.c_str()); } redraw = false; cursor_x--; break; // case KEY_DC: // break; case 10: { // current_command+="[enter]"; command_input = current_command; std::cout << current_command << std::endl; try{ GB_driver.parse_string(command_input+"\n"); } catch (std::exception& e) { std::cerr << e.what() << '\n'; } commands.front() = command_input; current_command = ""; commands.push_front(current_command); commands_it = commands.begin(); cursor_x = 0; cursor_y = 0; // // Get contents // char cerr_contents[1000]; // winnstr(cerr_win.GetWin(),cerr_contents,1000); // std::cout << "error window contents = [" << cerr_contents << "]" << std::endl; } break; default: if ((c>=32)&&(c<=126)) { int pos = std::min((int)current_command.size(),cursor_x); // std::cout << "pos = " << pos << std::endl; if (pos<0) pos = 0; current_command.insert(current_command.begin()+pos, char(c)); cursor_x++; } else std::cerr << (boost::format("[%1%]") % c).str() << std::endl; } if (redraw) { wclear(cmd_win.GetWin()); mvwprintw(cmd_win.GetWin(),0,0,"%s",current_command.c_str()); //wprintw(cmd_win.GetWin(),"%s",current_command.c_str()); } cmd_win.SetCursorPos(cursor_x,cursor_y); cmd_win.Display(); //std::cout << cout_buf.GetLineCount() << std::endl; } else { switch(c) { case KEY_UP: { current_win->ScrollUp(); current_win->Display(); //std::cerr << "KEY_UP:"<< err << std::endl; break; } case KEY_DOWN: { current_win->ScrollDown(); current_win->Display(); //std::cerr << "KEY_DOWN:" << err << std::endl; break; } case KEY_PPAGE: { current_win->ScrollUp(10); current_win->Display(); //std::cerr << "KEY_DOWN:" << err << std::endl; break; } case KEY_NPAGE: { current_win->ScrollDown(10); current_win->Display(); //std::cerr << "KEY_DOWN:" << err << std::endl; break; } } } /* print the message at the center of the screen */ // putchar(c); // std::getline(std::cin,command_input); //std::cout << " command is '" << command_input << "'" << std::endl; // GB_driver.parse_string(command_input+"\n"); } tty_fix(); return 0; }