| 2908 |
FirstPrm = FALSE; |
FirstPrm = FALSE; |
| 2909 |
} |
} |
| 2910 |
|
|
| 2911 |
|
void RequestStatusString(unsigned char *StrBuff, int StrLen) { |
| 2912 |
|
unsigned char RepStr[256]; |
| 2913 |
|
int len = 0; |
| 2914 |
|
|
| 2915 |
|
switch (StrBuff[0]) { |
| 2916 |
|
case '"': |
| 2917 |
|
switch (StrBuff[1]) { |
| 2918 |
|
case 'p': // DECSCL |
| 2919 |
|
switch (ts.TerminalID) { |
| 2920 |
|
case IdVT220J: |
| 2921 |
|
case IdVT282: |
| 2922 |
|
len = _snprintf_s_l(RepStr, sizeof(RepStr), _TRUNCATE, "0$r62;%d", CLocale, Send8BitMode?0:1); |
| 2923 |
|
break; |
| 2924 |
|
case IdVT320: |
| 2925 |
|
case IdVT382: |
| 2926 |
|
len = _snprintf_s_l(RepStr, sizeof(RepStr), _TRUNCATE, "0$r63;%d", CLocale, Send8BitMode?0:1); |
| 2927 |
|
break; |
| 2928 |
|
case IdVT420: |
| 2929 |
|
len = _snprintf_s_l(RepStr, sizeof(RepStr), _TRUNCATE, "0$r64;%d", CLocale, Send8BitMode?0:1); |
| 2930 |
|
break; |
| 2931 |
|
case IdVT520: |
| 2932 |
|
case IdVT525: |
| 2933 |
|
len = _snprintf_s_l(RepStr, sizeof(RepStr), _TRUNCATE, "0$r65;%d", CLocale, Send8BitMode?0:1); |
| 2934 |
|
break; |
| 2935 |
|
default: |
| 2936 |
|
len = _snprintf_s_l(RepStr, sizeof(RepStr), _TRUNCATE, "0$r61;1", CLocale); |
| 2937 |
|
break; |
| 2938 |
|
} |
| 2939 |
|
break; |
| 2940 |
|
} |
| 2941 |
|
break; |
| 2942 |
|
} |
| 2943 |
|
if (len > 0) { |
| 2944 |
|
SendDCSstr(RepStr, len); |
| 2945 |
|
} |
| 2946 |
|
else { |
| 2947 |
|
SendDCSstr("1$r", 0); |
| 2948 |
|
} |
| 2949 |
|
} |
| 2950 |
|
|
| 2951 |
|
void ParseDCS(BYTE Cmd, unsigned char *StrBuff, int len) { |
| 2952 |
|
switch (ICount) { |
| 2953 |
|
case 0: |
| 2954 |
|
break; |
| 2955 |
|
case 1: |
| 2956 |
|
switch (IntChar[1]) { |
| 2957 |
|
case '!': |
| 2958 |
|
if (Cmd == '{') { // DECSTUI |
| 2959 |
|
if (! (ts.TermFlag & TF_LOCKTUID)) { |
| 2960 |
|
int i; |
| 2961 |
|
for (i=0; i<8 && isxdigit(StrBuff[i]); i++) { |
| 2962 |
|
if (islower(StrBuff[i])) { |
| 2963 |
|
StrBuff[i] = toupper(StrBuff[i]); |
| 2964 |
|
} |
| 2965 |
|
} |
| 2966 |
|
if (len == 8 && i == 8) { |
| 2967 |
|
strncpy_s(ts.TerminalUID, sizeof(ts.TerminalUID), StrBuff, _TRUNCATE); |
| 2968 |
|
} |
| 2969 |
|
} |
| 2970 |
|
} |
| 2971 |
|
break; |
| 2972 |
|
case '$': |
| 2973 |
|
if (Cmd == 'q') { // DECRQSS |
| 2974 |
|
RequestStatusString(StrBuff, len); |
| 2975 |
|
} |
| 2976 |
|
break; |
| 2977 |
|
default: |
| 2978 |
|
break; |
| 2979 |
|
} |
| 2980 |
|
break; |
| 2981 |
|
default: |
| 2982 |
|
break; |
| 2983 |
|
} |
| 2984 |
|
} |
| 2985 |
|
|
| 2986 |
#define ModeDcsFirst 1 |
#define ModeDcsFirst 1 |
| 2987 |
#define ModeDcsString 2 |
#define ModeDcsString 2 |
| 2988 |
void DeviceControl(BYTE b) |
void DeviceControl(BYTE b) |
| 2990 |
static unsigned char StrBuff[256]; |
static unsigned char StrBuff[256]; |
| 2991 |
static int DcsParseMode = ModeDcsFirst; |
static int DcsParseMode = ModeDcsFirst; |
| 2992 |
static int StrLen; |
static int StrLen; |
| 2993 |
static char Cmd; |
static BYTE Cmd; |
| 2994 |
|
|
| 2995 |
if ((ESCFlag && (b=='\\')) || (b==ST && ts.KanjiCode!=IdSJIS)) { |
if ((ESCFlag && (b=='\\')) || (b==ST && ts.KanjiCode!=IdSJIS)) { |
| 2996 |
if (DcsParseMode == ModeDcsString) { |
if (DcsParseMode == ModeDcsString) { |
| 2997 |
|
ParseDCS(Cmd, StrBuff, StrLen); |
| 2998 |
StrBuff[StrLen] = 0; |
StrBuff[StrLen] = 0; |
|
switch (ICount) { |
|
|
case 0: |
|
|
break; |
|
|
case 1: |
|
|
if (IntChar[1] == '!' && Cmd == '{') { // DECSTUI |
|
|
if (! (ts.TermFlag & TF_LOCKTUID)) { |
|
|
int i; |
|
|
for (i=0; i<8 && isxdigit(StrBuff[i]); i++) { |
|
|
if (islower(StrBuff[i])) { |
|
|
StrBuff[i] = toupper(StrBuff[i]); |
|
|
} |
|
|
} |
|
|
if (StrLen == 8 && i == 8) { |
|
|
strncpy_s(ts.TerminalUID, sizeof(ts.TerminalUID), StrBuff, _TRUNCATE); |
|
|
} |
|
|
} |
|
|
} |
|
|
break; |
|
|
default: |
|
|
break; |
|
|
} |
|
| 2999 |
} |
} |
| 3000 |
ESCFlag = FALSE; |
ESCFlag = FALSE; |
| 3001 |
ParseMode = SavedMode; |
ParseMode = SavedMode; |