| 10 |
#include <stdlib.h> |
#include <stdlib.h> |
| 11 |
#include <mbstring.h> |
#include <mbstring.h> |
| 12 |
#include <locale.h> |
#include <locale.h> |
| 13 |
|
#include <ctype.h> |
| 14 |
|
|
| 15 |
#include "buffer.h" |
#include "buffer.h" |
| 16 |
#include "ttwinman.h" |
#include "ttwinman.h" |
| 925 |
case DCS: |
case DCS: |
| 926 |
SavedMode = ParseMode; |
SavedMode = ParseMode; |
| 927 |
ESCFlag = FALSE; |
ESCFlag = FALSE; |
| 928 |
|
ICount = 0; |
| 929 |
NParam = 1; |
NParam = 1; |
| 930 |
Param[1] = -1; |
Param[1] = -1; |
| 931 |
|
Prv = 0; |
| 932 |
ParseMode = ModeDCS; |
ParseMode = ModeDCS; |
| 933 |
break; |
break; |
| 934 |
case SOS: |
case SOS: |
| 2908 |
FirstPrm = FALSE; |
FirstPrm = FALSE; |
| 2909 |
} |
} |
| 2910 |
|
|
| 2911 |
|
#define ModeDcsFirst 1 |
| 2912 |
|
#define ModeDcsString 2 |
| 2913 |
void DeviceControl(BYTE b) |
void DeviceControl(BYTE b) |
| 2914 |
{ |
{ |
| 2915 |
if (ESCFlag && (b=='\\') || (b==ST && ts.KanjiCode!=IdSJIS)) |
static char StrBuff[256]; |
| 2916 |
{ |
static int DcsParseMode = ModeDcsFirst; |
| 2917 |
ESCFlag = FALSE; |
static int StrLen; |
| 2918 |
ParseMode = SavedMode; |
static char Cmd; |
| 2919 |
return; |
|
| 2920 |
} |
if ((ESCFlag && (b=='\\')) || (b==ST && ts.KanjiCode!=IdSJIS)) { |
| 2921 |
|
if (DcsParseMode == ModeDcsString) { |
| 2922 |
|
StrBuff[StrLen] = 0; |
| 2923 |
|
switch (ICount) { |
| 2924 |
|
case 0: |
| 2925 |
|
break; |
| 2926 |
|
case 1: |
| 2927 |
|
if (IntChar[1] == '!' && Cmd == '{') { // DECSTUI |
| 2928 |
|
if (! (ts.TermFlag & TF_LOCKTUID)) { |
| 2929 |
|
int i; |
| 2930 |
|
for (i=0; i<8 && isxdigit(StrBuff[i]); i++) { |
| 2931 |
|
if (islower(StrBuff[i])) { |
| 2932 |
|
StrBuff[i] = toupper(StrBuff[i]); |
| 2933 |
|
} |
| 2934 |
|
} |
| 2935 |
|
if (StrLen == 8 && i == 8) { |
| 2936 |
|
strncpy_s(ts.TerminalUID, sizeof(ts.TerminalUID), StrBuff, _TRUNCATE); |
| 2937 |
|
} |
| 2938 |
|
} |
| 2939 |
|
} |
| 2940 |
|
break; |
| 2941 |
|
default: |
| 2942 |
|
break; |
| 2943 |
|
} |
| 2944 |
|
} |
| 2945 |
|
ESCFlag = FALSE; |
| 2946 |
|
ParseMode = SavedMode; |
| 2947 |
|
DcsParseMode = ModeDcsFirst; |
| 2948 |
|
StrLen = 0; |
| 2949 |
|
return; |
| 2950 |
|
} |
| 2951 |
|
|
| 2952 |
if (b==ESC) |
if (b==ESC) { |
| 2953 |
{ |
ESCFlag = TRUE; |
| 2954 |
ESCFlag = TRUE; |
return; |
| 2955 |
return; |
} |
| 2956 |
} |
else { |
| 2957 |
else ESCFlag = FALSE; |
ESCFlag = FALSE; |
| 2958 |
|
} |
| 2959 |
|
|
| 2960 |
if (b<=US) |
switch (DcsParseMode) { |
| 2961 |
ParseControl(b); |
case ModeDcsFirst: |
| 2962 |
else if ((b>=0x30) && (b<=0x39)) |
if (b<=US) { |
| 2963 |
{ |
ParseControl(b); |
| 2964 |
if (Param[NParam] < 0) Param[NParam] = 0; |
} |
| 2965 |
if (Param[NParam]<1000) |
else if ((b>=0x20) && (b<=0x2F)) { |
| 2966 |
Param[NParam] = Param[NParam]*10 + b - 0x30; |
if (ICount<IntCharMax) ICount++; |
| 2967 |
} |
IntChar[ICount] = b; |
| 2968 |
else if (b==0x3B) |
} |
| 2969 |
{ |
else if ((b>=0x30) && (b<=0x39)) { |
| 2970 |
if (NParam < NParamMax) |
if (Param[NParam] < 0) Param[NParam] = 0; |
| 2971 |
{ |
if (Param[NParam]<1000) |
| 2972 |
NParam++; |
Param[NParam] = Param[NParam]*10 + b - 0x30; |
| 2973 |
Param[NParam] = -1; |
} |
| 2974 |
} |
else if (b==0x3B) { |
| 2975 |
} |
if (NParam < NParamMax) { |
| 2976 |
else if ((b>=0x40) && (b<=0x7E)) |
NParam++; |
| 2977 |
{ |
Param[NParam] = -1; |
| 2978 |
if (b=='|') |
} |
| 2979 |
{ |
} |
| 2980 |
ParseMode = ModeDCUserKey; |
else if ((b>=0x40) && (b<=0x7E)) { |
| 2981 |
if (Param[1] < 1) ClearUserKey(); |
if (ICount == 0 && b=='|') { |
| 2982 |
WaitKeyId = TRUE; |
ParseMode = ModeDCUserKey; |
| 2983 |
NewKeyId = 0; |
if (Param[1] < 1) ClearUserKey(); |
| 2984 |
} |
WaitKeyId = TRUE; |
| 2985 |
else ParseMode = ModeSOS; |
NewKeyId = 0; |
| 2986 |
} |
} |
| 2987 |
|
else { |
| 2988 |
|
Cmd = b; |
| 2989 |
|
DcsParseMode = ModeDcsString; |
| 2990 |
|
} |
| 2991 |
|
} |
| 2992 |
|
else { |
| 2993 |
|
ParseMode = ModeSOS; |
| 2994 |
|
} |
| 2995 |
|
break; |
| 2996 |
|
|
| 2997 |
|
case ModeDcsString: |
| 2998 |
|
if (b <= US && b != HT && b != CR) { |
| 2999 |
|
ESCFlag = FALSE; |
| 3000 |
|
ParseMode = SavedMode; |
| 3001 |
|
DcsParseMode = ModeDcsFirst; |
| 3002 |
|
StrLen = 0; |
| 3003 |
|
} |
| 3004 |
|
else if (StrLen < sizeof(StrBuff)-1) { |
| 3005 |
|
StrBuff[StrLen++] = b; |
| 3006 |
|
} |
| 3007 |
|
break; |
| 3008 |
|
} |
| 3009 |
} |
} |
| 3010 |
|
|
| 3011 |
void DCUserKey(BYTE b) |
void DCUserKey(BYTE b) |