Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Jun 9, 2009, 1:11:55 AM (15 years ago)
Author:
scheusso
Message:

tab completion now working in ds console (as is backspace and direct input processing)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • code/branches/netp4/src/orxonox/gamestates/GSDedicated.cc

    r3121 r3122  
    131131                if ( inputIterator_>=MAX_COMMAND_LENGTH-1 && c!='\n' )
    132132                    continue;
    133                 this->commandLine_[this->inputIterator_++] = c;
    134                 if( c == '\n' )
     133                switch (c)
    135134                {
    136                     this->cleanLine_ = true;
    137                     boost::recursive_mutex::scoped_lock(this->inputQueueMutex_);
    138                     this->commandQueue_.push( std::string((const char*)this->commandLine_,inputIterator_) );
    139                     memset( this->commandLine_, 0, inputIterator_ );
    140                     inputIterator_ = 0;
    141                 }
    142                 else if( c == 0x8 ) // Backspace
    143                 {
    144                     boost::recursive_mutex::scoped_lock(this->inputQueueMutex_);
    145                     commandLine_[inputIterator_--]=0;
     135                    case '\n':
     136                        this->cleanLine_ = true;
     137                        {
     138                            boost::recursive_mutex::scoped_lock(this->inputQueueMutex_);
     139                            boost::recursive_mutex::scoped_lock(this->inputLineMutex_);
     140                            this->commandQueue_.push( std::string((const char*)this->commandLine_,inputIterator_) );
     141                        }
     142                        memset( this->commandLine_, 0, inputIterator_ );
     143                        inputIterator_ = 0;
     144                        std::cout << endl;
     145                        break;
     146                    case 127: // backspace
     147                    case '\b':
     148                    {
     149                        boost::recursive_mutex::scoped_lock(this->inputLineMutex_);
     150                        if(inputIterator_>0)
     151                            --inputIterator_;
     152                        break;
     153                    }
     154                    case '\t':
     155                    {
     156                        boost::recursive_mutex::scoped_lock(this->inputLineMutex_);
     157                        COUT(0) << endl << CommandExecutor::hint( std::string((const char*)this->commandLine_,inputIterator_) ) << endl;
     158                        strncpy((char*)this->commandLine_, CommandExecutor::complete( std::string((const char*)this->commandLine_,inputIterator_) ).c_str(), MAX_COMMAND_LENGTH);
     159                        inputIterator_ = strlen((const char*)this->commandLine_);
     160                        break;
     161                    }
     162                    default:
     163                    {
     164                        boost::recursive_mutex::scoped_lock(this->inputLineMutex_);
     165                        this->commandLine_[this->inputIterator_++] = c;
     166                        break;
     167                    }
    146168                }
    147169            }
     
    155177        std::cout << "\033[0G\033[K";
    156178        boost::recursive_mutex::scoped_lock(this->inputLineMutex_);
    157         std::cout << std::fixed << std::setprecision(2) << std::setw(5) << Game::getInstance().getAvgFPS() << " fps, " << std::setprecision(2) << std::setw(5) << Game::getInstance().getAvgTickTime() << " ms avg ticktime # " << this->commandLine_;
     179        std::cout << std::fixed << std::setprecision(2) << std::setw(5) << Game::getInstance().getAvgFPS() << " fps, " << std::setprecision(2) << std::setw(5) << Game::getInstance().getAvgTickTime() << " ms avg ticktime # " << std::string((const char*)this->commandLine_,inputIterator_);
    158180        //if ( this->cleanLine_ )
    159181        //    this->cleanLine_ = false;
     
    186208    void GSDedicated::setTerminalMode()
    187209    {
    188       termios new_settings;
     210        termios new_settings;
    189211     
    190       tcgetattr(0,this->originalTerminalSettings_);
    191       new_settings = *this->originalTerminalSettings_;
    192       new_settings.c_lflag &= (~ICANON);
    193       new_settings.c_cc[VTIME] = 0;
    194       new_settings.c_cc[VMIN] = 1;
    195       tcsetattr(0,TCSANOW,&new_settings);
    196       COUT(0) << endl;
    197       atexit(&GSDedicated::resetTerminalMode);
     212        tcgetattr(0,this->originalTerminalSettings_);
     213        new_settings = *this->originalTerminalSettings_;
     214        new_settings.c_lflag &= ~( ICANON | ECHO );
     215//         new_settings.c_lflag |= ( ISIG | IEXTEN );
     216        new_settings.c_cc[VTIME] = 0;
     217        new_settings.c_cc[VMIN] = 1;
     218        tcsetattr(0,TCSANOW,&new_settings);
     219        COUT(0) << endl;
     220//       atexit(&GSDedicated::resetTerminalMode);
    198221    }
    199222   
     
    201224    {
    202225#ifndef ORXONOX_PLATFORM_WINDOWS
    203       tcsetattr(0, TCSANOW, GSDedicated::originalTerminalSettings_);
     226        tcsetattr(0, TCSANOW, GSDedicated::originalTerminalSettings_);
    204227#endif
    205228    }
Note: See TracChangeset for help on using the changeset viewer.