| 27 |
#include "vtterm.h" |
#include "vtterm.h" |
| 28 |
|
|
| 29 |
#define MAPSIZE(x) (sizeof(x)/sizeof((x)[0])) |
#define MAPSIZE(x) (sizeof(x)/sizeof((x)[0])) |
| 30 |
#define Accept8BitCtrl ((ts.TerminalID>=IdVT220J) && (ts.TermFlag & TF_ACCEPT8BITCTRL)) |
#define Accept8BitCtrl ((VTlevel >= 2) && (ts.TermFlag & TF_ACCEPT8BITCTRL)) |
| 31 |
|
|
| 32 |
/* Parsing modes */ |
/* Parsing modes */ |
| 33 |
#define ModeFirst 0 |
#define ModeFirst 0 |
| 65 |
static BOOL AltScr; |
static BOOL AltScr; |
| 66 |
BOOL BracketedPaste; |
BOOL BracketedPaste; |
| 67 |
|
|
| 68 |
|
static int VTlevel; |
| 69 |
|
|
| 70 |
// save/restore cursor |
// save/restore cursor |
| 71 |
typedef struct { |
typedef struct { |
| 72 |
int CursorX, CursorY; |
int CursorX, CursorY; |
| 210 |
RelativeOrgMode = FALSE; |
RelativeOrgMode = FALSE; |
| 211 |
ts.ColorFlag &= ~CF_REVERSEVIDEO; |
ts.ColorFlag &= ~CF_REVERSEVIDEO; |
| 212 |
AutoRepeatMode = TRUE; |
AutoRepeatMode = TRUE; |
|
Send8BitMode = ts.Send8BitCtrl; |
|
| 213 |
FocusReportMode = FALSE; |
FocusReportMode = FALSE; |
| 214 |
MouseReportMode = IdMouseTrackNone; |
MouseReportMode = IdMouseTrackNone; |
| 215 |
DecLocatorFlag = 0; |
DecLocatorFlag = 0; |
| 216 |
|
|
| 217 |
|
ChangeTerminalID(); |
| 218 |
|
|
| 219 |
LastX = 0; |
LastX = 0; |
| 220 |
LastY = 0; |
LastY = 0; |
| 221 |
ButtonStat = 0; |
ButtonStat = 0; |
| 817 |
if ((ts.TermFlag & TF_ACCEPT8BITCTRL)==0) |
if ((ts.TermFlag & TF_ACCEPT8BITCTRL)==0) |
| 818 |
return; /* ignore C1 char */ |
return; /* ignore C1 char */ |
| 819 |
/* C1 chars are interpreted as C0 chars in VT100 mode */ |
/* C1 chars are interpreted as C0 chars in VT100 mode */ |
| 820 |
if (ts.TerminalID<IdVT220J) |
if (VTlevel < 2) |
| 821 |
b = b & 0x7F; |
b = b & 0x7F; |
| 822 |
} |
} |
| 823 |
} |
} |
| 1067 |
void ESCSpace(BYTE b) |
void ESCSpace(BYTE b) |
| 1068 |
{ |
{ |
| 1069 |
switch (b) { |
switch (b) { |
| 1070 |
case 'F': Send8BitMode = FALSE; break; // S7C1T |
case 'F': // S7C1T |
| 1071 |
case 'G': Send8BitMode = TRUE; break; // S8C1T |
Send8BitMode = FALSE; |
| 1072 |
|
break; |
| 1073 |
|
case 'G': // S8C1T |
| 1074 |
|
if (VTlevel >= 2) { |
| 1075 |
|
Send8BitMode = TRUE; |
| 1076 |
|
} |
| 1077 |
|
break; |
| 1078 |
} |
} |
| 1079 |
} |
} |
| 1080 |
|
|
| 2520 |
CursorBottom = NumOfLines-1-StatusLine; |
CursorBottom = NumOfLines-1-StatusLine; |
| 2521 |
ResetCharSet(); |
ResetCharSet(); |
| 2522 |
|
|
|
Send8BitMode = ts.Send8BitCtrl; |
|
|
|
|
| 2523 |
/* Attribute */ |
/* Attribute */ |
| 2524 |
CharAttr = DefCharAttr; |
CharAttr = DefCharAttr; |
| 2525 |
Special = FALSE; |
Special = FALSE; |
| 2546 |
/* Select terminal mode (software reset) */ |
/* Select terminal mode (software reset) */ |
| 2547 |
SoftReset(); |
SoftReset(); |
| 2548 |
if (NParam > 0) { |
if (NParam > 0) { |
| 2549 |
switch (Param[1]) { |
ChangeTerminalID(); |
| 2550 |
case 61: // VT-Level 1 (VT100) |
if (Param[1] >= 61 && Param[1] <= 65) { |
| 2551 |
Send8BitMode = FALSE; break; |
if (VTlevel > Param[1] - 60) { |
| 2552 |
case 62: // VT-Level 2 (VT200) |
VTlevel = Param[1] - 60; |
| 2553 |
case 63: // VT-Level 3 (VT300) |
} |
| 2554 |
case 64: // VT-Level 4 (VT400) |
} |
| 2555 |
case 65: // VT-Level 5 (VT500) |
else { |
| 2556 |
if (NParam > 1 && Param[2] == 1) |
VTlevel = 1; |
|
Send8BitMode = FALSE; |
|
|
else |
|
|
Send8BitMode = TRUE; |
|
|
break; |
|
| 2557 |
} |
} |
| 2558 |
|
|
| 2559 |
|
if (VTlevel < 2 || (NParam > 1 && Param[2] == 1)) |
| 2560 |
|
Send8BitMode = FALSE; |
| 2561 |
|
else |
| 2562 |
|
Send8BitMode = TRUE; |
| 2563 |
} |
} |
| 2564 |
break; |
break; |
| 2565 |
|
|
| 2566 |
case 'q': // DECSCA |
case 'q': // DECSCA |
| 2567 |
if (Param[1] < 0) |
if (Param[1] < 0) |
| 2568 |
Param[1] = 0; |
Param[1] = 0; |
| 2939 |
case '"': |
case '"': |
| 2940 |
switch (StrBuff[1]) { |
switch (StrBuff[1]) { |
| 2941 |
case 'p': // DECSCL |
case 'p': // DECSCL |
| 2942 |
switch (ts.TerminalID) { |
if (VTlevel > 1 && Send8BitMode) { |
| 2943 |
case IdVT220J: |
len = _snprintf_s_l(RepStr, sizeof(RepStr), _TRUNCATE, "0$r6%d;0\"p", CLocale, VTlevel); |
| 2944 |
case IdVT282: |
} |
| 2945 |
len = _snprintf_s_l(RepStr, sizeof(RepStr), _TRUNCATE, "0$r62;%d\"p", CLocale, Send8BitMode?0:1); |
else { |
| 2946 |
break; |
len = _snprintf_s_l(RepStr, sizeof(RepStr), _TRUNCATE, "0$r6%d;1\"p", CLocale, VTlevel); |
|
case IdVT320: |
|
|
case IdVT382: |
|
|
len = _snprintf_s_l(RepStr, sizeof(RepStr), _TRUNCATE, "0$r63;%d\"p", CLocale, Send8BitMode?0:1); |
|
|
break; |
|
|
case IdVT420: |
|
|
len = _snprintf_s_l(RepStr, sizeof(RepStr), _TRUNCATE, "0$r64;%d\"p", CLocale, Send8BitMode?0:1); |
|
|
break; |
|
|
case IdVT520: |
|
|
case IdVT525: |
|
|
len = _snprintf_s_l(RepStr, sizeof(RepStr), _TRUNCATE, "0$r65;%d\"p", CLocale, Send8BitMode?0:1); |
|
|
break; |
|
|
default: |
|
|
len = _snprintf_s_l(RepStr, sizeof(RepStr), _TRUNCATE, "0$r61;1\"p", CLocale); |
|
|
break; |
|
| 2947 |
} |
} |
| 2948 |
break; |
break; |
| 2949 |
|
|
| 4341 |
BOOL BracketedPasteMode() { |
BOOL BracketedPasteMode() { |
| 4342 |
return BracketedPaste; |
return BracketedPaste; |
| 4343 |
} |
} |
| 4344 |
|
|
| 4345 |
|
void ChangeTerminalID() { |
| 4346 |
|
switch (ts.TerminalID) { |
| 4347 |
|
case IdVT220J: |
| 4348 |
|
case IdVT282: |
| 4349 |
|
VTlevel = 2; |
| 4350 |
|
break; |
| 4351 |
|
case IdVT320: |
| 4352 |
|
case IdVT382: |
| 4353 |
|
VTlevel = 3; |
| 4354 |
|
break; |
| 4355 |
|
case IdVT420: |
| 4356 |
|
VTlevel = 4; |
| 4357 |
|
break; |
| 4358 |
|
case IdVT520: |
| 4359 |
|
case IdVT525: |
| 4360 |
|
VTlevel = 5; |
| 4361 |
|
break; |
| 4362 |
|
default: |
| 4363 |
|
VTlevel = 1; |
| 4364 |
|
} |
| 4365 |
|
|
| 4366 |
|
if (VTlevel == 1) { |
| 4367 |
|
Send8BitMode = FALSE; |
| 4368 |
|
} |
| 4369 |
|
else { |
| 4370 |
|
Send8BitMode = ts.Send8BitCtrl; |
| 4371 |
|
} |
| 4372 |
|
} |