/* < terminfointerpreter */ void terminfointerpreter(gpointer theEntry, gpointer userData) { terminfoEntry* anEntry = (terminfoEntry*)theEntry; int aData1 = (int)(anEntry->myData1); int aData2 = (int)(anEntry->myData2); ENTER("terminfointerpreter"); DISPLAY_CAPACITY(anEntry->myCapacity); copyCursor(&(anEntry->myStartingPosition), &myCursor); switch(anEntry->myCapacity) { case CLEAR: /* myContext.myLinePortionIndex=-1; */ myCursor.myCol=0; myCursor.myLine=0; /* { /\* Erase the lines *\/ */ /* char* aOutput=NULL; */ /* struct t_cursor aFirstCursor; */ /* struct t_cursor aLastCursor; */ /* aFirstCursor.myLine=0; */ /* aFirstCursor.myCol=0; */ /* aLastCursor.myLine=myContext.myNumberOfLine - 1; */ /* aLastCursor.myCol=0; */ /* eraseLine( this, & aFirstCursor, & aLastCursor, &(myContext.myDefaultStyle), & aOutput); */ /* if (aOutput != NULL) */ /* { */ /* free(aOutput); */ /* } */ /* } */ break; case CUB1: if (myCursor.myCol!=0) { myCursor.myCol--; } break; case CUD1: myCursor.myLine++; break; case CR: myCursor.myCol=0; break; case NEL: myCursor.myLine++; myCursor.myCol=0; break; case CUF1: myCursor.myCol++; break; case CUP: myCursor.myLine = (aData1 > 0) ? aData1 - 1 : aData1; myCursor.myCol = (aData2 > 0) ? aData2 - 1 : aData2; break; case CUU: myCursor.myLine-=aData1; break; case DCH: /* delete characters (shorter line) */ /* aData1 gives the number of characters to delete */ /* deleteCharacter( this, & myContext.myCursor, aData1, theOutput); */ break; case DL: /* delete lines */ /* aData1 gives the number of lines to delete */ /* deleteLine( this, aData1, theOutput); */ break; case ECH: /* Erase characters (same line length) */ /* aData1 gives the number of characters to erase */ /* eraseCharacter( this, & myContext.myCursor, aData1, & myContext.myCursor.myStyle, theOutput); */ break; case ED: /* Clear the display after the cursor */ { /* struct t_cursor aFirstCursor; */ /* struct t_cursor aLastCursor; */ /* switch( aData1) */ /* { */ /* case 1: /\* erase from start to cursor *\/ */ /* aFirstCursor.myLine=0; */ /* aFirstCursor.myCol=0; */ /* aLastCursor.myLine = myContext.myCursor.myLine; */ /* aLastCursor.myCol = myContext.myCursor.myCol; */ /* break; */ /* case 2: /\* whole display *\/ */ /* aFirstCursor.myLine=0; */ /* aFirstCursor.myCol=0; */ /* aLastCursor.myLine=myContext.myNumberOfLine - 1; */ /* aLastCursor.myCol=myContext.myNumberOfCol - 1; */ /* break; */ /* case 0: /\* from cursor to end of display *\/ */ /* default: */ /* aFirstCursor.myLine = myContext.myCursor.myLine; */ /* aFirstCursor.myCol = myContext.myCursor.myCol; */ /* aLastCursor.myLine=myContext.myNumberOfLine - 1; */ /* aLastCursor.myCol=myContext.myNumberOfCol - 1; */ /* break; */ /* } */ /* eraseLine( this, &aFirstCursor, &aLastCursor, &(myContext.myCursor.myStyle), theOutput); */ } break; case EL: { /* struct t_cursor aFirstCursor; */ /* struct t_cursor aLastCursor; */ /* aFirstCursor.myLine = myContext.myCursor.myLine; */ /* aFirstCursor.myCol = myContext.myCursor.myCol; */ /* aLastCursor.myLine = aFirstCursor.myLine; */ /* switch( aData1) */ /* { */ /* case 1: /\* erase from start of line to cursor *\/ */ /* aLastCursor.myCol=0; */ /* break; */ /* case 2: /\* whole line *\/ */ /* aFirstCursor.myCol=0; */ /* aLastCursor.myCol=myContext.myNumberOfCol - 1; */ /* break; */ /* case 0: /\* from cursor to end of line *\/ */ /* default: */ /* aLastCursor.myCol=myContext.myNumberOfCol - 1; */ /* break; */ /* } */ /* eraseLine( this, &aFirstCursor, &aLastCursor, &(myContext.myCursor.myStyle), theOutput); */ } break; case HOME: myCursor.myCol=0; myCursor.myLine=0; break; case HPA: myCursor.myCol=aData1 - 1; break; case HT: /* from kernel 2.6.12 vt.c */ while (myCursor.myCol < 160) { myCursor.myCol++; if (vc_tab_stop[ myCursor.myCol >> 5] & (1 << (myCursor.myCol & 31))) break; } break; case ICH: /* insert n characters */ /* insertCol( this, myContext.myCursor.myCol + aData1 - 1, &(myContext.myCursor.myStyle), theOutput); */ break; case IL: /* several lines are added (the content is shifted to the bottom of the screen) */ break; case RC: myCursor.myCol=mySavedCursor.myCol; myCursor.myLine=mySavedCursor.myLine; break; case SC: mySavedCursor.myCol=myCursor.myCol; mySavedCursor.myLine=myCursor.myLine; break; case SGR: copyStyle( &(myCursor.myStyle), (style*)(anEntry->myData1)); DISPLAY_STYLE(&(myCursor.myStyle)); break; case VPA: myCursor.myLine=(aData1 > 0) ? aData1 - 1 : aData1; break; case TEXTFIELD: { GString* aString = anEntry->myData1; myCursor.myCol += strlen(aString->str); } break; default: case RMACS: case BEL: break; } SHOW3("myLine=%d, myCol=%d\n", myCursor.myLine, myCursor.myCol); }
static int setKeyboard( enum keyboard *theKeyboard, enum language theCurrentLanguage) { ENTER("setKeyboard"); int aKeyboardRequest=1; int i=0; enum keyboard aKeyboard; int aKeyboardIsChanged=0; int aMaxKeyboard=0; if (!theKeyboard) { return 0; } if (theCurrentLanguage == Russian) { aMaxKeyboard = (MaxCyrillicKeyboard - FirstCyrillicKeyboard); // atm, Russian language implies a cyrillic keyboard if ((*theKeyboard < FirstCyrillicKeyboard) || (MaxCyrillicKeyboard >= *theKeyboard)) { *theKeyboard = russianKeyboard; aKeyboardIsChanged=1; } } else { aMaxKeyboard = MaxKeyboard; // atm, if language is not Russian, then no cyrillic keyboard if ((FirstCyrillicKeyboard <= *theKeyboard) && (*theKeyboard < MaxCyrillicKeyboard)) { *theKeyboard = americanKeyboard; aKeyboardIsChanged=1; } } aKeyboard = *theKeyboard; say( keyboardIs); say( aKeyboard); say( changeKeyboard); say( PleasePressKey); if (getAnswer() != MENU_Yes) { return aKeyboardIsChanged; } say( whichKeyboard); aMaxKeyboard = (theCurrentLanguage == Russian) ? (MaxCyrillicKeyboard - FirstCyrillicKeyboard) : MaxKeyboard; // The distinct keyboards are sorting in alphabetical order if (TheLanguageForSorting != theCurrentLanguage) { if (theCurrentLanguage == Russian) { for (i=FirstCyrillicKeyboard;i<MaxCyrillicKeyboard;i++) { TheKeyboards[ i - FirstCyrillicKeyboard] = i; SHOW3("i - FirstCyrillicKeyboard=%d, i=%d\n",i - FirstCyrillicKeyboard, i); } } else { for (i=0;i<MaxKeyboard;i++) { TheKeyboards[i] = i; } aMaxKeyboard = i; qsort( TheKeyboards, MaxKeyboard, sizeof(enum keyboard), sortKeyboardMessages); } TheLanguageForSorting = theCurrentLanguage; } // Looking for the index which matches aKeyboard for (i=0; i<aMaxKeyboard; i++) { if (TheKeyboards[i] == aKeyboard) { break; } } if (i >= aMaxKeyboard) { SHOW("Keyboard: Unexpected value"); return 0; } while( aKeyboardRequest) { SHOW3("say TheKeyboards[%d]=%d\n",i, TheKeyboards[i]); say( TheKeyboards[i]); // works because the enum values are the same! switch(getAnswer()) { case MENU_Yes: aKeyboardRequest=0; break; case MENU_Previous: i = (i > 0) ? i-1 : aMaxKeyboard-1; break; default: i = (i >= aMaxKeyboard-1) ? 0 : i+1; break; } } aKeyboardIsChanged = (TheKeyboards[i] != *theKeyboard); *theKeyboard = TheKeyboards[i]; return aKeyboardIsChanged; }
void operator()(ED e) const { SHOW3(TUHG, e, remain_pmap[e], TUHG_PRINT(e, g)); }