Patch by Joshua R. Elsasser:
Implements DA, reporting that the terminal is a VT102. Implements DEXREQTPARM, reporting the same parameters that xterm does. Fixes DSR 6 to actually report the position of the cursor. Resolves ticket #4659. Thanks! git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33327 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -778,6 +778,14 @@ TermParse::EscParse()
|
|||||||
parsestate = groundtable;
|
parsestate = groundtable;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case CASE_DA1:
|
||||||
|
// DA - report device attributes
|
||||||
|
if (param[0] < 1)
|
||||||
|
// claim to be a VT102
|
||||||
|
write(fFd, "\033[?6c", 5);
|
||||||
|
parsestate = groundtable;
|
||||||
|
break;
|
||||||
|
|
||||||
case CASE_DECSTBM:
|
case CASE_DECSTBM:
|
||||||
/* DECSTBM - set scrolling region */
|
/* DECSTBM - set scrolling region */
|
||||||
|
|
||||||
@@ -799,6 +807,8 @@ TermParse::EscParse()
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case CASE_DECREQTPARM:
|
case CASE_DECREQTPARM:
|
||||||
|
// DEXREQTPARM - request terminal parameters
|
||||||
|
_DecReqTermParms(param[0]);
|
||||||
parsestate = groundtable;
|
parsestate = groundtable;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -1079,13 +1089,17 @@ TermParse::_DeviceStatusReport(int n)
|
|||||||
switch (n) {
|
switch (n) {
|
||||||
case 5:
|
case 5:
|
||||||
{
|
{
|
||||||
|
// Device status report requested
|
||||||
|
// reply with "no malfunction detected"
|
||||||
const char* toWrite = "\033[0n";
|
const char* toWrite = "\033[0n";
|
||||||
write(fFd, toWrite, strlen(toWrite));
|
write(fFd, toWrite, strlen(toWrite));
|
||||||
break ;
|
break ;
|
||||||
}
|
}
|
||||||
case 6:
|
case 6:
|
||||||
len = sprintf(sbuf, "\033[%ld;%ldR", fBuffer->Height(),
|
// Cursor position report requested
|
||||||
fBuffer->Width()) ;
|
len = sprintf(sbuf, "\033[%ld;%ldR",
|
||||||
|
fBuffer->Cursor().y + 1,
|
||||||
|
fBuffer->Cursor().x + 1);
|
||||||
write(fFd, sbuf, len);
|
write(fFd, sbuf, len);
|
||||||
break ;
|
break ;
|
||||||
default:
|
default:
|
||||||
@@ -1094,6 +1108,29 @@ TermParse::_DeviceStatusReport(int n)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
TermParse::_DecReqTermParms(int value)
|
||||||
|
{
|
||||||
|
// Terminal parameters report:
|
||||||
|
// type (2 or 3);
|
||||||
|
// no parity (1);
|
||||||
|
// 8 bits per character (1);
|
||||||
|
// transmit speed 38400bps (128);
|
||||||
|
// receive speed 38400bps (128);
|
||||||
|
// bit rate multiplier 16 (1);
|
||||||
|
// no flags (0)
|
||||||
|
char parms[] = "\033[?;1;1;128;128;1;0x";
|
||||||
|
|
||||||
|
if (value < 1)
|
||||||
|
parms[2] = '2';
|
||||||
|
else if (value == 1)
|
||||||
|
parms[2] = '3';
|
||||||
|
else
|
||||||
|
return;
|
||||||
|
|
||||||
|
write(fFd, parms, strlen(parms));
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
TermParse::_DecPrivateModeSet(int value)
|
TermParse::_DecPrivateModeSet(int value)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -76,6 +76,7 @@ private:
|
|||||||
status_t _ReadParserBuffer();
|
status_t _ReadParserBuffer();
|
||||||
|
|
||||||
void _DeviceStatusReport(int n);
|
void _DeviceStatusReport(int n);
|
||||||
|
void _DecReqTermParms(int value);
|
||||||
void _DecPrivateModeSet(int value);
|
void _DecPrivateModeSet(int value);
|
||||||
void _DecPrivateModeReset(int value);
|
void _DecPrivateModeReset(int value);
|
||||||
void _DecSaveCursor();
|
void _DecSaveCursor();
|
||||||
|
|||||||
@@ -1135,7 +1135,7 @@ CASE_GROUND_STATE,
|
|||||||
CASE_GROUND_STATE,
|
CASE_GROUND_STATE,
|
||||||
CASE_GROUND_STATE,
|
CASE_GROUND_STATE,
|
||||||
CASE_GROUND_STATE,
|
CASE_GROUND_STATE,
|
||||||
CASE_GROUND_STATE,
|
CASE_DA1,
|
||||||
/* d e f g */
|
/* d e f g */
|
||||||
CASE_VPA,
|
CASE_VPA,
|
||||||
CASE_GROUND_STATE,
|
CASE_GROUND_STATE,
|
||||||
@@ -2135,7 +2135,7 @@ CASE_GROUND_STATE,
|
|||||||
/* X Y Z [ */
|
/* X Y Z [ */
|
||||||
CASE_GROUND_STATE,
|
CASE_GROUND_STATE,
|
||||||
CASE_GROUND_STATE,
|
CASE_GROUND_STATE,
|
||||||
CASE_GROUND_STATE,
|
CASE_DA1,
|
||||||
CASE_CSI_STATE,
|
CASE_CSI_STATE,
|
||||||
/* \ ] ^ _ */
|
/* \ ] ^ _ */
|
||||||
CASE_GROUND_STATE,
|
CASE_GROUND_STATE,
|
||||||
|
|||||||
Reference in New Issue
Block a user