| 44 |
#define ModeDLE 7 |
#define ModeDLE 7 |
| 45 |
#define ModeCAN 8 |
#define ModeCAN 8 |
| 46 |
|
|
| 47 |
#define NParamMax 16 |
#define NParamMax 16 |
| 48 |
#define IntCharMax 5 |
#define NSParamMax 16 |
| 49 |
|
#define IntCharMax 5 |
| 50 |
|
|
| 51 |
/* DEC Locator Flag */ |
/* DEC Locator Flag */ |
| 52 |
#define DecLocatorOneShot 1 |
#define DecLocatorOneShot 1 |
| 98 |
static BOOL Special; |
static BOOL Special; |
| 99 |
|
|
| 100 |
static int Param[NParamMax+1]; |
static int Param[NParamMax+1]; |
| 101 |
static int NParam; |
static int SubParam[NParamMax+1][NSParamMax+1]; |
| 102 |
|
static int NParam, NSParam[NParamMax+1]; |
| 103 |
static BOOL FirstPrm; |
static BOOL FirstPrm; |
| 104 |
static BYTE IntChar[IntCharMax+1]; |
static BYTE IntChar[IntCharMax+1]; |
| 105 |
static int ICount; |
static int ICount; |
| 160 |
|
|
| 161 |
static _locale_t CLocale = NULL; |
static _locale_t CLocale = NULL; |
| 162 |
|
|
| 163 |
|
void ClearParams() |
| 164 |
|
{ |
| 165 |
|
ICount = 0; |
| 166 |
|
NParam = 1; |
| 167 |
|
NSParam[1] = 0; |
| 168 |
|
Param[1] = 0; |
| 169 |
|
Prv = 0; |
| 170 |
|
} |
| 171 |
|
|
| 172 |
void ResetSBuffer(PStatusBuff sbuff) |
void ResetSBuffer(PStatusBuff sbuff) |
| 173 |
{ |
{ |
| 174 |
sbuff->CursorX = 0; |
sbuff->CursorX = 0; |
| 822 |
PutChar(b); /* Disp C1 char in VT100 mode */ |
PutChar(b); /* Disp C1 char in VT100 mode */ |
| 823 |
return; |
return; |
| 824 |
} |
} |
| 825 |
ICount = 0; |
ClearParams(); |
| 826 |
FirstPrm = TRUE; |
FirstPrm = TRUE; |
|
NParam = 1; |
|
|
Param[1] = 0; |
|
|
Prv = 0; |
|
| 827 |
ParseMode = ModeCSI; |
ParseMode = ModeCSI; |
| 828 |
WriteToPrnFile(0,TRUE); // flush prn buff |
WriteToPrnFile(0,TRUE); // flush prn buff |
| 829 |
WriteToPrnFile(b,FALSE); |
WriteToPrnFile(b,FALSE); |
| 991 |
SSflag = TRUE; |
SSflag = TRUE; |
| 992 |
break; |
break; |
| 993 |
case DCS: |
case DCS: |
| 994 |
|
ClearParams(); |
| 995 |
ESCFlag = FALSE; |
ESCFlag = FALSE; |
|
ICount = 0; |
|
|
NParam = 1; |
|
|
Param[1] = 0; |
|
|
Prv = 0; |
|
| 996 |
ParseMode = ModeDCS; |
ParseMode = ModeDCS; |
| 997 |
break; |
break; |
| 998 |
case SOS: |
case SOS: |
| 1000 |
ParseMode = ModeSOS; |
ParseMode = ModeSOS; |
| 1001 |
break; |
break; |
| 1002 |
case CSI: |
case CSI: |
| 1003 |
ICount = 0; |
ClearParams(); |
| 1004 |
FirstPrm = TRUE; |
FirstPrm = TRUE; |
|
NParam = 1; |
|
|
Param[1] = 0; |
|
|
Prv = 0; |
|
| 1005 |
ParseMode = ModeCSI; |
ParseMode = ModeCSI; |
| 1006 |
break; |
break; |
| 1007 |
case OSC: |
case OSC: |
| 1008 |
Param[1] = 0; |
ClearParams(); |
| 1009 |
ParseMode = ModeXS; |
ParseMode = ModeXS; |
| 1010 |
break; |
break; |
| 1011 |
case PM: |
case PM: |
| 1228 |
case 0: |
case 0: |
| 1229 |
switch (b) { |
switch (b) { |
| 1230 |
case '[': /* CSI */ |
case '[': /* CSI */ |
| 1231 |
ICount = 0; |
ClearParams(); |
| 1232 |
FirstPrm = TRUE; |
FirstPrm = TRUE; |
|
NParam = 1; |
|
|
Param[1] = 0; |
|
|
Prv = 0; |
|
| 1233 |
WriteToPrnFile(ESC,FALSE); |
WriteToPrnFile(ESC,FALSE); |
| 1234 |
WriteToPrnFile('[',FALSE); |
WriteToPrnFile('[',FALSE); |
| 1235 |
ParseMode = ModeCSI; |
ParseMode = ModeCSI; |
| 1328 |
SSflag = TRUE; |
SSflag = TRUE; |
| 1329 |
break; |
break; |
| 1330 |
case 'P': /* DCS */ |
case 'P': /* DCS */ |
| 1331 |
|
ClearParams(); |
| 1332 |
ESCFlag = FALSE; |
ESCFlag = FALSE; |
|
NParam = 1; |
|
|
Param[1] = 0; |
|
| 1333 |
ParseMode = ModeDCS; |
ParseMode = ModeDCS; |
| 1334 |
return; |
return; |
| 1335 |
case 'X': /* SOS */ |
case 'X': /* SOS */ |
| 1336 |
ESCFlag = FALSE; |
ESCFlag = FALSE; |
| 1337 |
ParseMode = ModeSOS; |
ParseMode = ModeSOS; |
| 1338 |
return; |
return; |
| 1339 |
case 'Z': AnswerTerminalType(); break; |
case 'Z': /* DECID */ |
| 1340 |
|
AnswerTerminalType(); |
| 1341 |
|
break; |
| 1342 |
case '[': /* CSI */ |
case '[': /* CSI */ |
| 1343 |
ICount = 0; |
ClearParams(); |
| 1344 |
FirstPrm = TRUE; |
FirstPrm = TRUE; |
|
NParam = 1; |
|
|
Param[1] = 0; |
|
|
Prv = 0; |
|
| 1345 |
ParseMode = ModeCSI; |
ParseMode = ModeCSI; |
| 1346 |
return; |
return; |
| 1347 |
case '\\': break; /* ST */ |
case '\\': break; /* ST */ |
| 1348 |
case ']': /* XTERM sequence (OSC) */ |
case ']': /* XTERM sequence (OSC) */ |
| 1349 |
NParam = 1; |
ClearParams(); |
|
Param[1] = 0; |
|
| 1350 |
ParseMode = ModeXS; |
ParseMode = ModeXS; |
| 1351 |
return; |
return; |
| 1352 |
case '^': |
case '^': |
| 1837 |
|
|
| 1838 |
void CSSetAttr() // SGR |
void CSSetAttr() // SGR |
| 1839 |
{ |
{ |
| 1840 |
int i, P; |
int i, j, P, r, g, b, color; |
| 1841 |
|
|
| 1842 |
UpdateStr(); |
UpdateStr(); |
| 1843 |
for (i=1 ; i<=NParam ; i++) |
for (i=1 ; i<=NParam ; i++) |
| 1909 |
break; |
break; |
| 1910 |
|
|
| 1911 |
case 38: /* text color (256color mode) */ |
case 38: /* text color (256color mode) */ |
| 1912 |
if ((ts.ColorFlag & CF_XTERM256) && i < NParam && Param[i+1] == 5) { |
if (ts.ColorFlag & CF_XTERM256) { |
| 1913 |
i++; |
/* |
| 1914 |
if (i < NParam) { |
* Change foreground color. accept following formats. |
| 1915 |
P = Param[++i]; |
* |
| 1916 |
|
* 38 ; 2 ; r ; g ; b |
| 1917 |
|
* 38 ; 2 : r : g : b |
| 1918 |
|
* 38 : 2 : r : g : b |
| 1919 |
|
* 38 ; 5 ; idx |
| 1920 |
|
* 38 ; 5 : idx |
| 1921 |
|
* 38 : 5 : idx |
| 1922 |
|
* |
| 1923 |
|
*/ |
| 1924 |
|
color = -1; |
| 1925 |
|
j = 0; |
| 1926 |
|
if (NSParam[i] > 0) { |
| 1927 |
|
P = SubParam[i][1]; |
| 1928 |
|
j++; |
| 1929 |
|
} |
| 1930 |
|
else if (i < NParam) { |
| 1931 |
|
P = Param[i+1]; |
| 1932 |
|
if (P == 2 || P == 5) { |
| 1933 |
|
i++; |
| 1934 |
|
} |
| 1935 |
|
} |
| 1936 |
|
switch (P) { |
| 1937 |
|
case 2: |
| 1938 |
|
r = g = b = 0; |
| 1939 |
|
if (NSParam[i] > 0) { |
| 1940 |
|
if (j < NSParam[i]) { |
| 1941 |
|
r = SubParam[i][++j]; |
| 1942 |
|
if (j < NSParam[i]) { |
| 1943 |
|
g = SubParam[i][++j]; |
| 1944 |
|
} |
| 1945 |
|
if (j < NSParam[i]) { |
| 1946 |
|
b = SubParam[i][++j]; |
| 1947 |
|
} |
| 1948 |
|
color = DispFindClosestColor(r, g, b); |
| 1949 |
|
} |
| 1950 |
|
} |
| 1951 |
|
else if (i < NParam && NSParam[i+1] > 0) { |
| 1952 |
|
r = Param[++i]; |
| 1953 |
|
g = SubParam[i][1]; |
| 1954 |
|
if (NSParam[i] > 1) { |
| 1955 |
|
b = SubParam[i][2]; |
| 1956 |
|
} |
| 1957 |
|
color = DispFindClosestColor(r, g, b); |
| 1958 |
|
} |
| 1959 |
|
else if (i+2 < NParam) { |
| 1960 |
|
r = Param[++i]; |
| 1961 |
|
g = Param[++i]; |
| 1962 |
|
b = Param[++i]; |
| 1963 |
|
color = DispFindClosestColor(r, g, b); |
| 1964 |
|
} |
| 1965 |
|
break; |
| 1966 |
|
case 5: |
| 1967 |
|
if (NSParam[i] > 0) { |
| 1968 |
|
if (j < NSParam[i]) { |
| 1969 |
|
color = SubParam[i][++j]; |
| 1970 |
|
} |
| 1971 |
|
} |
| 1972 |
|
else if (i < NParam) { |
| 1973 |
|
color = Param[++i]; |
| 1974 |
|
} |
| 1975 |
|
break; |
| 1976 |
|
} |
| 1977 |
|
if (color >= 0) { |
| 1978 |
CharAttr.Attr2 |= Attr2Fore; |
CharAttr.Attr2 |= Attr2Fore; |
| 1979 |
CharAttr.Fore = P; |
CharAttr.Fore = color; |
| 1980 |
BuffSetCurCharAttr(CharAttr); |
BuffSetCurCharAttr(CharAttr); |
| 1981 |
} |
} |
| 1982 |
} |
} |
| 2002 |
break; |
break; |
| 2003 |
|
|
| 2004 |
case 48: /* Back color (256color mode) */ |
case 48: /* Back color (256color mode) */ |
| 2005 |
if ((ts.ColorFlag & CF_XTERM256) && i < NParam && Param[i+1] == 5) { |
if (ts.ColorFlag & CF_XTERM256) { |
| 2006 |
i++; |
color = -1; |
| 2007 |
if (i < NParam) { |
j = 0; |
| 2008 |
P = Param[++i]; |
if (NSParam[i] > 0) { |
| 2009 |
|
P = SubParam[i][1]; |
| 2010 |
|
j++; |
| 2011 |
|
} |
| 2012 |
|
else if (i < NParam) { |
| 2013 |
|
P = Param[i+1]; |
| 2014 |
|
if (P == 2 || P == 5) { |
| 2015 |
|
i++; |
| 2016 |
|
} |
| 2017 |
|
} |
| 2018 |
|
switch (P) { |
| 2019 |
|
case 2: |
| 2020 |
|
r = g = b = 0; |
| 2021 |
|
if (NSParam[i] > 0) { |
| 2022 |
|
if (j < NSParam[i]) { |
| 2023 |
|
r = SubParam[i][++j]; |
| 2024 |
|
if (j < NSParam[i]) { |
| 2025 |
|
g = SubParam[i][++j]; |
| 2026 |
|
} |
| 2027 |
|
if (j < NSParam[i]) { |
| 2028 |
|
b = SubParam[i][++j]; |
| 2029 |
|
} |
| 2030 |
|
color = DispFindClosestColor(r, g, b); |
| 2031 |
|
} |
| 2032 |
|
} |
| 2033 |
|
else if (i < NParam && NSParam[i+1] > 0) { |
| 2034 |
|
r = Param[++i]; |
| 2035 |
|
g = SubParam[i][1]; |
| 2036 |
|
if (NSParam[i] > 1) { |
| 2037 |
|
b = SubParam[i][2]; |
| 2038 |
|
} |
| 2039 |
|
color = DispFindClosestColor(r, g, b); |
| 2040 |
|
} |
| 2041 |
|
else if (i+2 < NParam) { |
| 2042 |
|
r = Param[++i]; |
| 2043 |
|
g = Param[++i]; |
| 2044 |
|
b = Param[++i]; |
| 2045 |
|
color = DispFindClosestColor(r, g, b); |
| 2046 |
|
} |
| 2047 |
|
break; |
| 2048 |
|
case 5: |
| 2049 |
|
if (NSParam[i] > 0) { |
| 2050 |
|
if (j < NSParam[i]) { |
| 2051 |
|
color = SubParam[i][++j]; |
| 2052 |
|
} |
| 2053 |
|
} |
| 2054 |
|
else if (i < NParam) { |
| 2055 |
|
color = Param[++i]; |
| 2056 |
|
} |
| 2057 |
|
break; |
| 2058 |
|
} |
| 2059 |
|
if (color >= 0) { |
| 2060 |
CharAttr.Attr2 |= Attr2Back; |
CharAttr.Attr2 |= Attr2Back; |
| 2061 |
CharAttr.Back = P; |
CharAttr.Back = color; |
| 2062 |
BuffSetCurCharAttr(CharAttr); |
BuffSetCurCharAttr(CharAttr); |
| 2063 |
} |
} |
| 2064 |
} |
} |
| 3130 |
} |
} |
| 3131 |
else if ((b>=0x30) && (b<=0x39)) |
else if ((b>=0x30) && (b<=0x39)) |
| 3132 |
{ |
{ |
| 3133 |
Param[NParam] = Param[NParam]*10 + b - 0x30; |
if (NSParam[NParam] > 0) { |
| 3134 |
|
SubParam[NParam][NSParam[NParam]] = SubParam[NParam][NSParam[NParam]]*10 + b - 0x30; |
| 3135 |
|
} |
| 3136 |
|
else { |
| 3137 |
|
Param[NParam] = Param[NParam]*10 + b - 0x30; |
| 3138 |
|
} |
| 3139 |
|
} |
| 3140 |
|
else if (b==0x3A) |
| 3141 |
|
{ /* ':' Subparameter delimiter */ |
| 3142 |
|
if (NSParam[NParam] < NSParamMax) { |
| 3143 |
|
NSParam[NParam]++; |
| 3144 |
|
SubParam[NParam][NSParam[NParam]] = 0; |
| 3145 |
|
} |
| 3146 |
} |
} |
| 3147 |
else if (b==0x3B) |
else if (b==0x3B) |
| 3148 |
{ |
{ /* ';' Parameter delimiter */ |
| 3149 |
if (NParam < NParamMax) |
if (NParam < NParamMax) |
| 3150 |
{ |
{ |
| 3151 |
NParam++; |
NParam++; |
| 3152 |
Param[NParam] = 0; |
Param[NParam] = 0; |
| 3153 |
|
NSParam[NParam] = 0; |
| 3154 |
} |
} |
| 3155 |
} |
} |
| 3156 |
else if ((b>=0x3C) && (b<=0x3F)) |
else if ((b>=0x3C) && (b<=0x3F)) |