📄 temuvt102.cpp
字号:
the current screen, or of the emulation class itself. The token to be interpreteted comes in as a machine word possibly accompanied by two parameters. Likewise, the assigned operations, come with up to two arguments. One could consider making up a proper table from the function below. The technical reference manual provides more informations about this mapping.*/void TEmuVt102::tau( int token, int p, int q ){//scan_buffer_report();//if (token == TY_CHR___()) printf("%c",p); else//printf("tau(%d,%d,%d, %d,%d)\n",(token>>0)&0xff,(token>>8)&0xff,(token>>16)&0xffff,p,q); switch (token) { case TY_CHR___( ) : scr->ShowCharacter (p ); break; //UTF16 // 127 DEL : ignored on input case TY_CTL___('@' ) : /* NUL: ignored */ break; case TY_CTL___('A' ) : /* SOH: ignored */ break; case TY_CTL___('B' ) : /* STX: ignored */ break; case TY_CTL___('C' ) : /* ETX: ignored */ break; case TY_CTL___('D' ) : /* EOT: ignored */ break; case TY_CTL___('E' ) : reportAnswerBack ( ); break; //VT100 case TY_CTL___('F' ) : /* ACK: ignored */ break; case TY_CTL___('G' ) : gui->Bell ( ); break; //VT100 case TY_CTL___('H' ) : scr->BackSpace ( ); break; //VT100 case TY_CTL___('I' ) : scr->Tabulate ( ); break; //VT100 case TY_CTL___('J' ) : scr->NewLine ( ); break; //VT100 case TY_CTL___('K' ) : scr->NewLine ( ); break; //VT100 case TY_CTL___('L' ) : scr->NewLine ( ); break; //VT100 case TY_CTL___('M' ) : scr->Return ( ); break; //VT100 case TY_CTL___('N' ) : useCharset ( 1); break; //VT100 case TY_CTL___('O' ) : useCharset ( 0); break; //VT100 case TY_CTL___('P' ) : /* DLE: ignored */ break; case TY_CTL___('Q' ) : /* DC1: XON continue */ break; //VT100 case TY_CTL___('R' ) : /* DC2: ignored */ break; case TY_CTL___('S' ) : /* DC3: XOFF halt */ break; //VT100 case TY_CTL___('T' ) : /* DC4: ignored */ break; case TY_CTL___('U' ) : /* NAK: ignored */ break; case TY_CTL___('V' ) : /* SYN: ignored */ break; case TY_CTL___('W' ) : /* ETB: ignored */ break; case TY_CTL___('X' ) : scr->ShowCharacter ( 0x2592); break; //VT100 case TY_CTL___('Y' ) : /* EM : ignored */ break; case TY_CTL___('Z' ) : scr->ShowCharacter ( 0x2592); break; //VT100 case TY_CTL___('[' ) : /* ESC: cannot be seen here. */ break; case TY_CTL___('\\' ) : /* FS : ignored */ break; case TY_CTL___(']' ) : /* GS : ignored */ break; case TY_CTL___('^' ) : /* RS : ignored */ break; case TY_CTL___('_' ) : /* US : ignored */ break; case TY_ESC___('D' ) : scr->index ( ); break; //VT100 case TY_ESC___('E' ) : scr->NextLine ( ); break; //VT100 case TY_ESC___('H' ) : scr->changeTabStop (TRUE ); break; //VT100 case TY_ESC___('M' ) : scr->reverseIndex ( ); break; //VT100 case TY_ESC___('Z' ) : reportTerminalType ( ); break; case TY_ESC___('c' ) : reset ( ); break; case TY_ESC___('n' ) : useCharset ( 2); break; case TY_ESC___('o' ) : useCharset ( 3); break; case TY_ESC___('7' ) : saveCursor ( ); break; case TY_ESC___('8' ) : restoreCursor ( ); break; case TY_ESC___('=' ) : setMode (MODE_AppKeyPad); break; case TY_ESC___('>' ) : resetMode (MODE_AppKeyPad); break; case TY_ESC___('<' ) : setMode (MODE_Ansi ); break; //VT100 case TY_ESC_CS('(', '0') : setCharset (0, '0'); break; //VT100 case TY_ESC_CS('(', 'A') : setCharset (0, 'A'); break; //VT100 case TY_ESC_CS('(', 'B') : setCharset (0, 'B'); break; //VT100 case TY_ESC_CS(')', '0') : setCharset (1, '0'); break; //VT100 case TY_ESC_CS(')', 'A') : setCharset (1, 'A'); break; //VT100 case TY_ESC_CS(')', 'B') : setCharset (1, 'B'); break; //VT100 case TY_ESC_CS('*', '0') : setCharset (2, '0'); break; //VT100 case TY_ESC_CS('*', 'A') : setCharset (2, 'A'); break; //VT100 case TY_ESC_CS('*', 'B') : setCharset (2, 'B'); break; //VT100 case TY_ESC_CS('+', '0') : setCharset (3, '0'); break; //VT100 case TY_ESC_CS('+', 'A') : setCharset (3, 'A'); break; //VT100 case TY_ESC_CS('+', 'B') : setCharset (3, 'B'); break; //VT100 case TY_ESC_CS('%', 'G') : setCodec (1 ); break; //LINUX case TY_ESC_CS('%', '@') : setCodec (0 ); break; //LINUX case TY_ESC_DE('3' ) : /* IGNORED: double high, top half */ break; case TY_ESC_DE('4' ) : /* IGNORED: double high, bottom half */ break; case TY_ESC_DE('5' ) : /* IGNORED: single width, single high*/ break; case TY_ESC_DE('6' ) : /* IGNORED: double width, single high*/ break; case TY_ESC_DE('8' ) : scr->helpAlign ( ); break; case TY_CSI_PS('K', 0) : scr->clearToEndOfLine ( ); break; case TY_CSI_PS('K', 1) : scr->clearToBeginOfLine ( ); break; case TY_CSI_PS('K', 2) : scr->clearEntireLine ( ); break; case TY_CSI_PS('J', 0) : scr->clearToEndOfScreen ( ); break; case TY_CSI_PS('J', 1) : scr->clearToBeginOfScreen ( ); break; case TY_CSI_PS('J', 2) : scr->clearEntireScreen ( ); break; case TY_CSI_PS('g', 0) : scr->changeTabStop (FALSE ); break; //VT100 case TY_CSI_PS('g', 3) : scr->clearTabStops ( ); break; //VT100 case TY_CSI_PS('h', 4) : scr-> setMode (MODE_Insert ); break; case TY_CSI_PS('h', 20) : setMode (MODE_NewLine ); break; case TY_CSI_PS('i', 0) : /* IGNORE: attached printer */ break; //VT100 case TY_CSI_PS('l', 4) : scr-> resetMode (MODE_Insert ); break; case TY_CSI_PS('l', 20) : resetMode (MODE_NewLine ); break; case TY_CSI_PS('m', 0) : scr->setDefaultRendition ( ); break; case TY_CSI_PS('m', 1) : scr-> setRendition (RE_BOLD ); break; //VT100 case TY_CSI_PS('m', 4) : scr-> setRendition (RE_UNDERLINE); break; //VT100 case TY_CSI_PS('m', 5) : scr-> setRendition (RE_BLINK ); break; //VT100 case TY_CSI_PS('m', 7) : scr-> setRendition (RE_REVERSE ); break; case TY_CSI_PS('m', 10) : /* IGNORED: mapping related */ break; //LINUX case TY_CSI_PS('m', 11) : /* IGNORED: mapping related */ break; //LINUX case TY_CSI_PS('m', 12) : /* IGNORED: mapping related */ break; //LINUX case TY_CSI_PS('m', 22) : scr->resetRendition (RE_BOLD ); break; case TY_CSI_PS('m', 24) : scr->resetRendition (RE_UNDERLINE); break; case TY_CSI_PS('m', 25) : scr->resetRendition (RE_BLINK ); break; case TY_CSI_PS('m', 27) : scr->resetRendition (RE_REVERSE ); break; case TY_CSI_PS('m', 30) : scr->setForeColor ( 0); break; case TY_CSI_PS('m', 31) : scr->setForeColor ( 1); break; case TY_CSI_PS('m', 32) : scr->setForeColor ( 2); break; case TY_CSI_PS('m', 33) : scr->setForeColor ( 3); break; case TY_CSI_PS('m', 34) : scr->setForeColor ( 4); break; case TY_CSI_PS('m', 35) : scr->setForeColor ( 5); break; case TY_CSI_PS('m', 36) : scr->setForeColor ( 6); break; case TY_CSI_PS('m', 37) : scr->setForeColor ( 7); break; case TY_CSI_PS('m', 39) : scr->setForeColorToDefault( ); break; case TY_CSI_PS('m', 40) : scr->setBackColor ( 0); break; case TY_CSI_PS('m', 41) : scr->setBackColor ( 1); break; case TY_CSI_PS('m', 42) : scr->setBackColor ( 2); break; case TY_CSI_PS('m', 43) : scr->setBackColor ( 3); break; case TY_CSI_PS('m', 44) : scr->setBackColor ( 4); break; case TY_CSI_PS('m', 45) : scr->setBackColor ( 5); break; case TY_CSI_PS('m', 46) : scr->setBackColor ( 6); break; case TY_CSI_PS('m', 47) : scr->setBackColor ( 7); break; case TY_CSI_PS('m', 49) : scr->setBackColorToDefault( ); break; case TY_CSI_PS('m', 90) : scr->setForeColor ( 8); break; case TY_CSI_PS('m', 91) : scr->setForeColor ( 9); break; case TY_CSI_PS('m', 92) : scr->setForeColor ( 10); break; case TY_CSI_PS('m', 93) : scr->setForeColor ( 11); break; case TY_CSI_PS('m', 94) : scr->setForeColor ( 12); break; case TY_CSI_PS('m', 95) : scr->setForeColor ( 13); break; case TY_CSI_PS('m', 96) : scr->setForeColor ( 14); break; case TY_CSI_PS('m', 97) : scr->setForeColor ( 15); break; case TY_CSI_PS('m', 100) : scr->setBackColor ( 8); break; case TY_CSI_PS('m', 101) : scr->setBackColor ( 9); break; case TY_CSI_PS('m', 102) : scr->setBackColor ( 10); break; case TY_CSI_PS('m', 103) : scr->setBackColor ( 11); break; case TY_CSI_PS('m', 104) : scr->setBackColor ( 12); break; case TY_CSI_PS('m', 105) : scr->setBackColor ( 13); break; case TY_CSI_PS('m', 106) : scr->setBackColor ( 14); break; case TY_CSI_PS('m', 107) : scr->setBackColor ( 15); break; case TY_CSI_PS('n', 5) : reportStatus ( ); break; case TY_CSI_PS('n', 6) : reportCursorPosition ( ); break; case TY_CSI_PS('q', 0) : /* IGNORED: LEDs off */ break; //VT100 case TY_CSI_PS('q', 1) : /* IGNORED: LED1 on */ break; //VT100 case TY_CSI_PS('q', 2) : /* IGNORED: LED2 on */ break; //VT100 case TY_CSI_PS('q', 3) : /* IGNORED: LED3 on */ break; //VT100 case TY_CSI_PS('q', 4) : /* IGNORED: LED4 on */ break; //VT100 case TY_CSI_PS('x', 0) : reportTerminalParms ( 2); break; //VT100 case TY_CSI_PS('x', 1) : reportTerminalParms ( 3); break; //VT100 case TY_CSI_PN('@' ) : scr->insertChars (p ); break; case TY_CSI_PN('A' ) : scr->cursorUp (p ); break; //VT100 case TY_CSI_PN('B' ) : scr->cursorDown (p ); break; //VT100 case TY_CSI_PN('C' ) : scr->cursorRight (p ); break; //VT100 case TY_CSI_PN('D' ) : scr->cursorLeft (p ); break; //VT100 case TY_CSI_PN('G' ) : scr->setCursorX (p ); break; //LINUX case TY_CSI_PN('H' ) : scr->setCursorYX (p, q); break; //VT100 case TY_CSI_PN('L' ) : scr->insertLines (p ); break; case TY_CSI_PN('M' ) : scr->deleteLines (p ); break; case TY_CSI_PN('P' ) : scr->deleteChars (p ); break; case TY_CSI_PN('X' ) : scr->eraseChars (p ); break; case TY_CSI_PN('c' ) : reportTerminalType ( ); break; //VT100 case TY_CSI_PN('d' ) : scr->setCursorY (p ); break; //LINUX case TY_CSI_PN('f' ) : scr->setCursorYX (p, q); break; //VT100 case TY_CSI_PN('r' ) : scr->setMargins (p, q); break; //VT100 case TY_CSI_PN('y' ) : /* IGNORED: Confidence test */ break; //VT100 case TY_CSI_PR('h', 1) : setMode (MODE_AppCuKeys); break; //VT100 case TY_CSI_PR('l', 1) : resetMode (MODE_AppCuKeys); break; //VT100 case TY_CSI_PR('s', 1) : saveMode (MODE_AppCuKeys); break; //FIXME case TY_CSI_PR('r', 1) : restoreMode (MODE_AppCuKeys); break; //FIXME case TY_CSI_PR('l', 2) : resetMode (MODE_Ansi ); break; //VT100 case TY_CSI_PR('h', 3) : setColumns ( 132); break; //VT100 case TY_CSI_PR('l', 3) : setColumns ( 80); break; //VT100 case TY_CSI_PR('h', 4) : /* IGNORED: soft scrolling */ break; //VT100 case TY_CSI_PR('l', 4) : /* IGNORED: soft scrolling */ break; //VT100 case TY_CSI_PR('h', 5) : scr-> setMode (MODE_Screen ); break; //VT100 case TY_CSI_PR('l', 5) : scr-> resetMode (MODE_Screen ); break; //VT100 case TY_CSI_PR('h', 6) : scr-> setMode (MODE_Origin ); break; //VT100 case TY_CSI_PR('l', 6) : scr-> resetMode (MODE_Origin ); break; //VT100 case TY_CSI_PR('s', 6) : scr-> saveMode (MODE_Origin ); break; //FIXME case TY_CSI_PR('r', 6) : scr->restoreMode (MODE_Origin ); break; //FIXME case TY_CSI_PR('h', 7) : scr-> setMode (MODE_Wrap ); break; //VT100 case TY_CSI_PR('l', 7) : scr-> resetMode (MODE_Wrap ); break; //VT100 case TY_CSI_PR('s', 7) : scr-> saveMode (MODE_Wrap ); break; //FIXME case TY_CSI_PR('r', 7) : scr->restoreMode (MODE_Wrap ); break; //FIXME case TY_CSI_PR('h', 8) : /* IGNORED: autorepeat on */ break; //VT100 case TY_CSI_PR('l', 8) : /* IGNORED: autorepeat off */ break; //VT100 case TY_CSI_PR('h', 9) : /* IGNORED: interlace */ break; //VT100 case TY_CSI_PR('l', 9) : /* IGNORED: interlace */ break; //VT100 case TY_CSI_PR('h', 25) : setMode (MODE_Cursor ); break; //VT100 case TY_CSI_PR('l', 25) : resetMode (MODE_Cursor ); break; //VT100 case TY_CSI_PR('h', 41) : /* IGNORED: obsolete more(1) fix */ break; //XTERM case TY_CSI_PR('l', 41) : /* IGNORED: obsolete more(1) fix */ break; //XTERM case TY_CSI_PR('s', 41) : /* IGNORED: obsolete more(1) fix */ break; //XTERM case TY_CSI_PR('r', 41) : /* IGNORED: obsolete more(1) fix */ break; //XTERM case TY_CSI_PR('h', 47) : setMode (MODE_AppScreen); break; //VT100 case TY_CSI_PR('l', 47) : resetMode (MODE_AppScreen); break; //VT100 case TY_CSI_PR('h', 1000) : setMode (MODE_Mouse1000); break; //XTERM case TY_CSI_PR('l', 1000) : resetMode (MODE_Mouse1000); break; //XTERM case TY_CSI_PR('s', 1000) : saveMode (MODE_Mouse1000); break; //XTERM case TY_CSI_PR('r', 1000) : restoreMode (MODE_Mouse1000); break; //XTERM case TY_CSI_PR('h', 1001) : /* IGNORED: hilite mouse tracking */ break; //XTERM case TY_CSI_PR('l', 1001) : /* IGNORED: hilite mouse tracking */ break; //XTERM case TY_CSI_PR('s', 1001) : /* IGNORED: hilite mouse tracking */ break; //XTERM case TY_CSI_PR('r', 1001) : /* IGNORED: hilite mouse tracking */ break; //XTERM case TY_CSI_PR('h', 1047) : setMode (MODE_AppScreen); break; //XTERM case TY_CSI_PR('l', 1047) : resetMode (MODE_AppScreen); break; //XTERM //FIXME: Unitoken: save translations case TY_CSI_PR('h', 1048) : saveCursor ( ); break; //XTERM case TY_CSI_PR('l', 1048) : restoreCursor ( ); break; //XTERM //FIXME: every once in a while new sequences like this pop up in xterm. // Here's a guess of what they could mean. case TY_CSI_PR('h', 1049) : setMode (MODE_AppScreen); break; //XTERM case TY_CSI_PR('l', 1049) : resetMode (MODE_AppScreen); break; //XTERM //FIXME: when changing between vt52 and ansi mode evtl do some resetting. case TY_VT52__('A' ) : scr->cursorUp ( 1); break; //VT52 case TY_VT52__('B' ) : scr->cursorDown ( 1); break; //VT52 case TY_VT52__('C' ) : scr->cursorRight ( 1); break; //VT52 case TY_VT52__('D' ) : scr->cursorLeft ( 1); break; //VT52 case TY_VT52__('F' ) : setAndUseCharset (0, '0'); break; //VT52 case TY_VT52__('G' ) : setAndUseCharset (0, 'B'); break; //VT52 case TY_VT52__('H' ) : scr->setCursorYX (1,1 ); break; //VT52 case TY_VT52__('I' ) : scr->reverseIndex ( ); break; //VT52 case TY_VT52__('J' ) : scr->clearToEndOfScreen ( ); break; //VT52 case TY_VT52__('K' ) : scr->clearToEndOfLine ( ); break; //VT52 case TY_VT52__('Y' ) : scr->setCursorYX (p-31,q-31 ); break; //VT52 case TY_VT52__('Z' ) : reportTerminalType ( ); break; //VT52 case TY_VT52__('<' ) : setMode (MODE_Ansi ); break; //VT52 case TY_VT52__('=' ) : setMode (MODE_AppKeyPad); break; //VT52 case TY_VT52__('>' ) : resetMode (MODE_AppKeyPad); break; //VT52 default : ReportErrorToken(); break; };}/* ------------------------------------------------------------------------- *//* *//* Terminal to Host protocol *//* *//* ------------------------------------------------------------------------- *//* Outgoing bytes originate from several sources: - Replies to Enquiries. - Mouse Events - Keyboard Events*//**/void TEmuVt102::sendString(const char* s){ emit sndBlock(s,strlen(s));}// Replies ----------------------------------------------------------------- --// This section copes with replies sent as responses to an enquiry control code./**/void TEmuVt102::reportCursorPosition(){ char tmp[20]; sprintf(tmp,"\033[%d;%dR",scr->getCursorY()+1,scr->getCursorX()+1); sendString(tmp);}/* What follows here is rather obsolete and faked stuff. The correspondent enquiries are nevertheless issued.*//**/void TEmuVt102::reportTerminalType(){//FIXME: should change? if (getMode(MODE_Ansi))// sendString("\033[?1;2c"); // I'm a VT100 with AP0 //FIXME: send only in response to ^[[0c sendString("\033[>0;115;0c"); // I'm a VT220 //FIXME: send only in response to ^[[>c else sendString("\033/Z"); // I'm a VT52}void TEmuVt102::reportTerminalParms(int p)// DECREPTPARM{ char tmp[100]; sprintf(tmp,"\033[%d;1;1;112;112;1;0x",p); // not really true. sendString(tmp);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -