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()
|
778 | 778 | parsestate = groundtable; |
779 | 779 | break; |
780 | 780 | |
| 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 | |
781 | 789 | case CASE_DECSTBM: |
782 | 790 | /* DECSTBM - set scrolling region */ |
783 | 791 | |
… |
… |
TermParse::EscParse()
|
799 | 807 | break; |
800 | 808 | |
801 | 809 | case CASE_DECREQTPARM: |
| 810 | // DEXREQTPARM - request terminal parameters |
| 811 | _DecReqTermParms(param[0]); |
802 | 812 | parsestate = groundtable; |
803 | 813 | break; |
804 | 814 | |
… |
… |
TermParse::_DeviceStatusReport(int n)
|
1079 | 1089 | switch (n) { |
1080 | 1090 | case 5: |
1081 | 1091 | { |
| 1092 | // Device status report requested |
| 1093 | // reply with "no malfunction detected" |
1082 | 1094 | const char* toWrite = "\033[0n"; |
1083 | 1095 | write(fFd, toWrite, strlen(toWrite)); |
1084 | 1096 | break ; |
1085 | 1097 | } |
1086 | 1098 | 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); |
1089 | 1103 | write(fFd, sbuf, len); |
1090 | 1104 | break ; |
1091 | 1105 | default: |
… |
… |
TermParse::_DeviceStatusReport(int n)
|
1095 | 1109 | |
1096 | 1110 | |
1097 | 1111 | void |
| 1112 | TermParse::_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 | |
| 1134 | void |
1098 | 1135 | TermParse::_DecPrivateModeSet(int value) |
1099 | 1136 | { |
1100 | 1137 | switch (value) { |
diff --git src/apps/terminal/TermParse.h src/apps/terminal/TermParse.h
index 85fa2ad..a4bd40e 100644
|
|
private:
|
76 | 76 | status_t _ReadParserBuffer(); |
77 | 77 | |
78 | 78 | void _DeviceStatusReport(int n); |
| 79 | void _DecReqTermParms(int value); |
79 | 80 | void _DecPrivateModeSet(int value); |
80 | 81 | void _DecPrivateModeReset(int value); |
81 | 82 | void _DecSaveCursor(); |
diff --git src/apps/terminal/VTPrsTbl.c src/apps/terminal/VTPrsTbl.c
index 6ba0a0b..1d90403 100644
|
|
CASE_GROUND_STATE,
|
1135 | 1135 | CASE_GROUND_STATE, |
1136 | 1136 | CASE_GROUND_STATE, |
1137 | 1137 | CASE_GROUND_STATE, |
1138 | | CASE_GROUND_STATE, |
| 1138 | CASE_DA1, |
1139 | 1139 | /* d e f g */ |
1140 | 1140 | CASE_VPA, |
1141 | 1141 | CASE_GROUND_STATE, |
… |
… |
CASE_GROUND_STATE,
|
2135 | 2135 | /* X Y Z [ */ |
2136 | 2136 | CASE_GROUND_STATE, |
2137 | 2137 | CASE_GROUND_STATE, |
2138 | | CASE_GROUND_STATE, |
| 2138 | CASE_DA1, |
2139 | 2139 | CASE_CSI_STATE, |
2140 | 2140 | /* \ ] ^ _ */ |
2141 | 2141 | CASE_GROUND_STATE, |