- // Write
- if( MAX_INPUT_CHARS8 - term->InputWrite >= len )
- memcpy( &term->InputBuffer[term->InputWrite], buf, len );
- else {
- memcpy( &term->InputBuffer[term->InputWrite], buf, MAX_INPUT_CHARS8 - term->InputWrite );
- memcpy( &term->InputBuffer[0], buf, len - (MAX_INPUT_CHARS8 - term->InputWrite) );
- }
- // Roll the buffer over
- term->InputWrite += len;
- term->InputWrite %= MAX_INPUT_CHARS8;
- if( (term->InputWrite - term->InputRead + MAX_INPUT_CHARS8)%MAX_INPUT_CHARS8 < len ) {
- term->InputRead = term->InputWrite + 1;
- term->InputRead %= MAX_INPUT_CHARS8;
- }
- }
- else
- {
- // Encode the raw UTF-32 Key
- ((Uint32*)term->InputBuffer)[ term->InputWrite ] = Codepoint;
- term->InputWrite ++;
- term->InputWrite %= MAX_INPUT_CHARS32;
- if(term->InputRead == term->InputWrite) {
- term->InputRead ++;
- term->InputRead %= MAX_INPUT_CHARS32;
- }
- }
-
- VFS_MarkAvaliable(&term->Node, 1);
-
- // Wake up the thread waiting on us
- //if( term->ReadingThread >= 0 ) {
- // Threads_WakeTID(term->ReadingThread);
- //}
-}
-
-/**
- * \fn void VT_int_ClearLine(tVTerm *Term, int Num)
- * \brief Clears a line in a virtual terminal
- */
-void VT_int_ClearLine(tVTerm *Term, int Num)
-{
- int i;
- tVT_Char *cell = &Term->Text[ Num*Term->TextWidth ];
- if( Num < 0 || Num >= Term->TextHeight * (giVT_Scrollback + 1) ) return ;
- //ENTER("pTerm iNum", Term, Num);
- for( i = Term->TextWidth; i--; )
- {
- cell[ i ].Ch = 0;
- cell[ i ].Colour = Term->CurColour;
- }
- //LEAVE('-');
-}
-
-/**
- * \fn int VT_int_ParseEscape(tVTerm *Term, char *Buffer)
- * \brief Parses a VT100 Escape code
- */
-int VT_int_ParseEscape(tVTerm *Term, char *Buffer)
-{
- char c;
- int argc = 0, j = 1;
- int tmp;
- int args[6] = {0,0,0,0};
-
- switch(Buffer[0])
- {
- //Large Code
- case '[':
- // Get Arguments
- c = Buffer[j++];
- if( '0' <= c && c <= '9' )
- {
- do {
- if(c == ';') c = Buffer[j++];
- while('0' <= c && c <= '9') {
- args[argc] *= 10;
- args[argc] += c-'0';
- c = Buffer[j++];
- }
- argc ++;
- } while(c == ';');
- }
-
- // Get Command
- if( ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z'))
- {
- switch(c)