Ticket #4659: term-reports.patch

File term-reports.patch, 3.0 KB (added by joshe, 12 years ago)

Implement DA and DECREQTPARM, fix DSR 6

  • src/apps/terminal/TermParse.cpp

    commit 7c456acc39b2ed7cfc3af9ffc082b9183a0c7afa
    Author: Joshua R. Elsasser <joshua@elsasser.org>
    Date:   Sun Sep 27 13:11:38 2009 +0000
    
        Implement or fix several report sequences: DA, DEXREQTPARM, and DSR 6.
    
    diff --git src/apps/terminal/TermParse.cpp src/apps/terminal/TermParse.cpp
    index 6c8bde0..2c5dcb2 100644
    TermParse::EscParse()  
    778778                    parsestate = groundtable;
    779779                    break;
    780780
     781                case CASE_DA1:
     782                    // DA - report device attributes
     783                    if (param[0] < 1)
     784                        // claim to be a VT102
     785                        write(fFd, "\033[?6c", 5);
     786                    parsestate = groundtable;
     787                    break;
     788
    781789                case CASE_DECSTBM:
    782790                    /* DECSTBM - set scrolling region */
    783791
    TermParse::EscParse()  
    799807                    break;
    800808
    801809                case CASE_DECREQTPARM:
     810                    // DEXREQTPARM - request terminal parameters
     811                    _DecReqTermParms(param[0]);
    802812                    parsestate = groundtable;
    803813                    break;
    804814
    TermParse::_DeviceStatusReport(int n)  
    10791089    switch (n) {
    10801090        case 5:
    10811091        {
     1092            // Device status report requested
     1093            // reply with "no malfunction detected"
    10821094            const char* toWrite = "\033[0n";
    10831095            write(fFd, toWrite, strlen(toWrite));
    10841096            break ;
    10851097        }
    10861098        case 6:
    1087             len = sprintf(sbuf, "\033[%ld;%ldR", fBuffer->Height(),
    1088                 fBuffer->Width()) ;
     1099            // Cursor position report requested
     1100            len = sprintf(sbuf, "\033[%ld;%ldR",
     1101                fBuffer->Cursor().y + 1,
     1102                fBuffer->Cursor().x + 1);
    10891103            write(fFd, sbuf, len);
    10901104            break ;
    10911105        default:
    TermParse::_DeviceStatusReport(int n)  
    10951109
    10961110
    10971111void
     1112TermParse::_DecReqTermParms(int value)
     1113{
     1114    // Terminal parameters report:
     1115    //   type (2 or 3);
     1116    //   no parity (1);
     1117    //   8 bits per character (1);
     1118    //   transmit speed 38400bps (128);
     1119    //   receive speed 38400bps (128);
     1120    //   bit rate multiplier 16 (1);
     1121    //   no flags (0)
     1122    char parms[] = "\033[?;1;1;128;128;1;0x";
     1123
     1124    if (value < 1)
     1125        parms[2] = '2';
     1126    else if (value == 1)
     1127        parms[2] = '3';
     1128    else
     1129        return;
     1130
     1131    write(fFd, parms, strlen(parms));
     1132}
     1133
     1134void
    10981135TermParse::_DecPrivateModeSet(int value)
    10991136{
    11001137    switch (value) {
  • src/apps/terminal/TermParse.h

    diff --git src/apps/terminal/TermParse.h src/apps/terminal/TermParse.h
    index 85fa2ad..a4bd40e 100644
    private:  
    7676    status_t _ReadParserBuffer();
    7777
    7878    void _DeviceStatusReport(int n);
     79    void _DecReqTermParms(int value);
    7980    void _DecPrivateModeSet(int value);
    8081    void _DecPrivateModeReset(int value);
    8182    void _DecSaveCursor();
  • src/apps/terminal/VTPrsTbl.c

    diff --git src/apps/terminal/VTPrsTbl.c src/apps/terminal/VTPrsTbl.c
    index 6ba0a0b..1d90403 100644
    CASE_GROUND_STATE,  
    11351135CASE_GROUND_STATE,
    11361136CASE_GROUND_STATE,
    11371137CASE_GROUND_STATE,
    1138 CASE_GROUND_STATE,
     1138CASE_DA1,
    11391139/*  d       e       f       g   */
    11401140CASE_VPA,
    11411141CASE_GROUND_STATE,
    CASE_GROUND_STATE,  
    21352135/*  X       Y       Z       [   */
    21362136CASE_GROUND_STATE,
    21372137CASE_GROUND_STATE,
    2138 CASE_GROUND_STATE,
     2138CASE_DA1,
    21392139CASE_CSI_STATE,
    21402140/*  \       ]       ^       _   */
    21412141CASE_GROUND_STATE,