| 2868 |
} |
} |
| 2869 |
} |
} |
| 2870 |
|
|
| 2871 |
|
void CSDolRequestMode() |
| 2872 |
|
{ |
| 2873 |
|
char buff[256]; |
| 2874 |
|
char *pp; |
| 2875 |
|
int len, resp = 0; |
| 2876 |
|
|
| 2877 |
|
if (NParam == 0) |
| 2878 |
|
Param[1] = 0; |
| 2879 |
|
|
| 2880 |
|
switch (Prv) { |
| 2881 |
|
case 0: /* ANSI Mode */ |
| 2882 |
|
resp = 4; |
| 2883 |
|
pp = ""; |
| 2884 |
|
switch (Param[1]) { |
| 2885 |
|
case 2: // KAM |
| 2886 |
|
if (KeybEnabled) |
| 2887 |
|
resp = 2; |
| 2888 |
|
else |
| 2889 |
|
resp = 1; |
| 2890 |
|
break; |
| 2891 |
|
case 4: // IRM |
| 2892 |
|
if (InsertMode) |
| 2893 |
|
resp = 1; |
| 2894 |
|
else |
| 2895 |
|
resp = 2; |
| 2896 |
|
break; |
| 2897 |
|
case 12: // SRM |
| 2898 |
|
if (ts.LocalEcho) |
| 2899 |
|
resp = 2; |
| 2900 |
|
else |
| 2901 |
|
resp = 1; |
| 2902 |
|
break; |
| 2903 |
|
case 20: // LNM |
| 2904 |
|
if (LFMode) |
| 2905 |
|
resp = 1; |
| 2906 |
|
else |
| 2907 |
|
resp = 2; |
| 2908 |
|
break; |
| 2909 |
|
case 33: // WYSTCURM |
| 2910 |
|
if (ts.NonblinkingCursor) |
| 2911 |
|
resp = 1; |
| 2912 |
|
else |
| 2913 |
|
resp = 2; |
| 2914 |
|
if ((ts.WindowFlag & WF_CURSORCHANGE) == 0) |
| 2915 |
|
resp += 2; |
| 2916 |
|
break; |
| 2917 |
|
case 34: // WYULCURM |
| 2918 |
|
if (ts.CursorShape == IdHCur) |
| 2919 |
|
resp = 1; |
| 2920 |
|
else |
| 2921 |
|
resp = 2; |
| 2922 |
|
if ((ts.WindowFlag & WF_CURSORCHANGE) == 0) |
| 2923 |
|
resp += 2; |
| 2924 |
|
break; |
| 2925 |
|
} |
| 2926 |
|
break; |
| 2927 |
|
|
| 2928 |
|
case '?': /* DEC Mode */ |
| 2929 |
|
pp = "?"; |
| 2930 |
|
switch (Param[1]) { |
| 2931 |
|
case 1: // DECCKM |
| 2932 |
|
if (AppliCursorMode) |
| 2933 |
|
resp = 1; |
| 2934 |
|
else |
| 2935 |
|
resp = 2; |
| 2936 |
|
break; |
| 2937 |
|
case 3: // DECCOLM |
| 2938 |
|
if (NumOfColumns == 132) |
| 2939 |
|
resp = 1; |
| 2940 |
|
else |
| 2941 |
|
resp = 2; |
| 2942 |
|
break; |
| 2943 |
|
case 5: // DECSCNM |
| 2944 |
|
if (ts.ColorFlag & CF_REVERSEVIDEO) |
| 2945 |
|
resp = 1; |
| 2946 |
|
else |
| 2947 |
|
resp = 2; |
| 2948 |
|
break; |
| 2949 |
|
case 6: // DECOM |
| 2950 |
|
if (RelativeOrgMode) |
| 2951 |
|
resp = 1; |
| 2952 |
|
else |
| 2953 |
|
resp = 2; |
| 2954 |
|
break; |
| 2955 |
|
case 7: // DECAWM |
| 2956 |
|
if (AutoWrapMode) |
| 2957 |
|
resp = 1; |
| 2958 |
|
else |
| 2959 |
|
resp = 2; |
| 2960 |
|
break; |
| 2961 |
|
case 8: // DECARM |
| 2962 |
|
if (AutoRepeatMode) |
| 2963 |
|
resp = 1; |
| 2964 |
|
else |
| 2965 |
|
resp = 2; |
| 2966 |
|
break; |
| 2967 |
|
case 9: // XT_MSE_X10 -- X10 Mouse Tracking |
| 2968 |
|
if (!ts.MouseEventTracking) |
| 2969 |
|
resp = 4; |
| 2970 |
|
else if (MouseReportMode == IdMouseTrackX10) |
| 2971 |
|
resp = 1; |
| 2972 |
|
else |
| 2973 |
|
resp = 2; |
| 2974 |
|
break; |
| 2975 |
|
case 12: // XT_CBLINK -- att610 cursor blinking |
| 2976 |
|
if (ts.NonblinkingCursor) |
| 2977 |
|
resp = 2; |
| 2978 |
|
else |
| 2979 |
|
resp = 1; |
| 2980 |
|
if ((ts.WindowFlag & WF_CURSORCHANGE) == 0) |
| 2981 |
|
resp += 2; |
| 2982 |
|
break; |
| 2983 |
|
case 19: // DECPEX |
| 2984 |
|
if (PrintEX) |
| 2985 |
|
resp = 1; |
| 2986 |
|
else |
| 2987 |
|
resp = 2; |
| 2988 |
|
break; |
| 2989 |
|
case 25: // DECTCEM |
| 2990 |
|
if (IsCaretEnabled()) |
| 2991 |
|
resp = 1; |
| 2992 |
|
else |
| 2993 |
|
resp = 2; |
| 2994 |
|
break; |
| 2995 |
|
case 38: // DECTEK |
| 2996 |
|
resp = 4; |
| 2997 |
|
break; |
| 2998 |
|
case 47: // XT_ALTSCRN -- Alternate Screen / (DECGRPM) |
| 2999 |
|
if ((ts.TermFlag & TF_ALTSCR) == 0) |
| 3000 |
|
resp = 4; |
| 3001 |
|
else if (AltScr) |
| 3002 |
|
resp = 1; |
| 3003 |
|
else |
| 3004 |
|
resp = 2; |
| 3005 |
|
break; |
| 3006 |
|
case 59: // DECKKDM |
| 3007 |
|
if (ts.Language!=IdJapanese) |
| 3008 |
|
resp = 0; |
| 3009 |
|
else if ((ts.KanjiCode == IdJIS) && (!ts.JIS7Katakana)) |
| 3010 |
|
resp = 4; |
| 3011 |
|
else |
| 3012 |
|
resp = 3; |
| 3013 |
|
break; |
| 3014 |
|
case 66: // DECNKM |
| 3015 |
|
if (AppliKeyMode) |
| 3016 |
|
resp = 1; |
| 3017 |
|
else |
| 3018 |
|
resp = 2; |
| 3019 |
|
break; |
| 3020 |
|
case 67: // DECBKM |
| 3021 |
|
if (ts.BSKey==IdBS) |
| 3022 |
|
resp = 1; |
| 3023 |
|
else |
| 3024 |
|
resp = 2; |
| 3025 |
|
break; |
| 3026 |
|
case 1000: // XT_MSE_X11 |
| 3027 |
|
if (!ts.MouseEventTracking) |
| 3028 |
|
resp = 4; |
| 3029 |
|
else if (MouseReportMode == IdMouseTrackVT200) |
| 3030 |
|
resp = 1; |
| 3031 |
|
else |
| 3032 |
|
resp = 2; |
| 3033 |
|
break; |
| 3034 |
|
case 1001: // XT_MSE_HL |
| 3035 |
|
#if 0 |
| 3036 |
|
if (!ts.MouseEventTracking) |
| 3037 |
|
resp = 4; |
| 3038 |
|
else if (MouseReportMode == IdMouseTrackVT200Hl) |
| 3039 |
|
resp = 1; |
| 3040 |
|
else |
| 3041 |
|
resp = 2; |
| 3042 |
|
#else |
| 3043 |
|
resp = 4; |
| 3044 |
|
#endif |
| 3045 |
|
break; |
| 3046 |
|
case 1002: // XT_MSE_BTN |
| 3047 |
|
if (!ts.MouseEventTracking) |
| 3048 |
|
resp = 4; |
| 3049 |
|
else if (MouseReportMode == IdMouseTrackBtnEvent) |
| 3050 |
|
resp = 1; |
| 3051 |
|
else |
| 3052 |
|
resp = 2; |
| 3053 |
|
break; |
| 3054 |
|
case 1003: // XT_MSE_ANY |
| 3055 |
|
if (!ts.MouseEventTracking) |
| 3056 |
|
resp = 4; |
| 3057 |
|
else if (MouseReportMode == IdMouseTrackAllEvent) |
| 3058 |
|
resp = 1; |
| 3059 |
|
else |
| 3060 |
|
resp = 2; |
| 3061 |
|
break; |
| 3062 |
|
case 1004: // XT_MSE_WIN |
| 3063 |
|
if (!ts.MouseEventTracking) |
| 3064 |
|
resp = 4; |
| 3065 |
|
else if (FocusReportMode) |
| 3066 |
|
resp = 1; |
| 3067 |
|
else |
| 3068 |
|
resp = 2; |
| 3069 |
|
break; |
| 3070 |
|
case 1005: // XT_MSE_UTF |
| 3071 |
|
if (!ts.MouseEventTracking) |
| 3072 |
|
resp = 4; |
| 3073 |
|
else if (MouseReportExtMode == IdMouseTrackExtUTF8) |
| 3074 |
|
resp = 1; |
| 3075 |
|
else |
| 3076 |
|
resp = 2; |
| 3077 |
|
break; |
| 3078 |
|
case 1006: // XT_MSE_SGR |
| 3079 |
|
if (!ts.MouseEventTracking) |
| 3080 |
|
resp = 4; |
| 3081 |
|
else if (MouseReportExtMode == IdMouseTrackExtSGR) |
| 3082 |
|
resp = 1; |
| 3083 |
|
else |
| 3084 |
|
resp = 2; |
| 3085 |
|
break; |
| 3086 |
|
case 1015: // urxvt-style extended mouse tracking |
| 3087 |
|
if (!ts.MouseEventTracking) |
| 3088 |
|
resp = 4; |
| 3089 |
|
else if (MouseReportExtMode == IdMouseTrackExtURXVT) |
| 3090 |
|
resp = 1; |
| 3091 |
|
else |
| 3092 |
|
resp = 2; |
| 3093 |
|
break; |
| 3094 |
|
case 1047: // XT_ALTS_47 |
| 3095 |
|
if ((ts.TermFlag & TF_ALTSCR) == 0) |
| 3096 |
|
resp = 4; |
| 3097 |
|
else if (AltScr) |
| 3098 |
|
resp = 1; |
| 3099 |
|
else |
| 3100 |
|
resp = 2; |
| 3101 |
|
break; |
| 3102 |
|
case 1048: |
| 3103 |
|
if ((ts.TermFlag & TF_ALTSCR) == 0) |
| 3104 |
|
resp = 4; |
| 3105 |
|
else |
| 3106 |
|
resp = 1; |
| 3107 |
|
break; |
| 3108 |
|
case 1049: // XT_EXTSCRN |
| 3109 |
|
if ((ts.TermFlag & TF_ALTSCR) == 0) |
| 3110 |
|
resp = 4; |
| 3111 |
|
else if (AltScr) |
| 3112 |
|
resp = 1; |
| 3113 |
|
else |
| 3114 |
|
resp = 2; |
| 3115 |
|
break; |
| 3116 |
|
case 2004: // RL_BRACKET |
| 3117 |
|
if (BracketedPaste) |
| 3118 |
|
resp = 1; |
| 3119 |
|
else |
| 3120 |
|
resp = 2; |
| 3121 |
|
break; |
| 3122 |
|
case 7727: // MinTTY Application Escape Mode |
| 3123 |
|
if (AppliEscapeMode) |
| 3124 |
|
resp = 1; |
| 3125 |
|
else |
| 3126 |
|
resp = 2; |
| 3127 |
|
break; |
| 3128 |
|
case 7786: // MinTTY Mousewheel reporting |
| 3129 |
|
if (!ts.TranslateWheelToCursor) |
| 3130 |
|
resp = 4; |
| 3131 |
|
else if (AcceptWheelToCursor) |
| 3132 |
|
resp = 1; |
| 3133 |
|
else |
| 3134 |
|
resp = 2; |
| 3135 |
|
break; |
| 3136 |
|
case 14001: // NetTerm Mouse Reporting (TT) |
| 3137 |
|
if (!ts.MouseEventTracking) |
| 3138 |
|
resp = 4; |
| 3139 |
|
else if (MouseReportMode == IdMouseTrackNetTerm) |
| 3140 |
|
resp = 1; |
| 3141 |
|
else |
| 3142 |
|
resp = 2; |
| 3143 |
|
break; |
| 3144 |
|
} |
| 3145 |
|
break; |
| 3146 |
|
} |
| 3147 |
|
|
| 3148 |
|
len = _snprintf_s(buff, sizeof(buff), _TRUNCATE, "%s%d;%d$y", pp, Param[1], resp); |
| 3149 |
|
SendCSIstr(buff, len); |
| 3150 |
|
} |
| 3151 |
|
|
| 3152 |
void CSDol(BYTE b) |
void CSDol(BYTE b) |
| 3153 |
{ |
{ |
| 3154 |
TCharAttr attr, mask; |
TCharAttr attr, mask; |
| 3156 |
mask = DefCharAttr; |
mask = DefCharAttr; |
| 3157 |
|
|
| 3158 |
switch (b) { |
switch (b) { |
| 3159 |
|
case 'p': // DECRQM |
| 3160 |
|
CSDolRequestMode(); |
| 3161 |
|
break; |
| 3162 |
case 'r': // DECCARA |
case 'r': // DECCARA |
| 3163 |
case 't': // DECRARA |
case 't': // DECRARA |
| 3164 |
if (Param[1] < 1 || NParam < 1) Param[1] = 1; |
if (Param[1] < 1 || NParam < 1) Param[1] = 1; |
| 3286 |
} |
} |
| 3287 |
} |
} |
| 3288 |
|
|
| 3289 |
|
void CSQDol(BYTE b) |
| 3290 |
|
{ |
| 3291 |
|
switch (b) { |
| 3292 |
|
case 'p': |
| 3293 |
|
CSDolRequestMode(); |
| 3294 |
|
break; |
| 3295 |
|
} |
| 3296 |
|
} |
| 3297 |
|
|
| 3298 |
void CSQuote(BYTE b) |
void CSQuote(BYTE b) |
| 3299 |
{ |
{ |
| 3300 |
int i, x, y; |
int i, x, y; |
| 3539 |
case '\'': CSQuote(b); break; /* intermediate char = '\'' */ |
case '\'': CSQuote(b); break; /* intermediate char = '\'' */ |
| 3540 |
} |
} |
| 3541 |
break; /* end of case Prv=0 */ |
break; /* end of case Prv=0 */ |
| 3542 |
|
case '?': |
| 3543 |
|
switch (IntChar[1]) { |
| 3544 |
|
case '$': CSQDol(b); break; /* intermediate char = '$' */ |
| 3545 |
|
} |
| 3546 |
|
break; /* end of case Prv=0 */ |
| 3547 |
} /* end of switch (Prv) */ |
} /* end of switch (Prv) */ |
| 3548 |
break; /* end of one intermediate char */ |
break; /* end of one intermediate char */ |
| 3549 |
} /* end of switch (Icount) */ |
} /* end of switch (Icount) */ |