Develop and Download Open Source Software

Browse Subversion Repository

Diff of /trunk/teraterm/teraterm/vtterm.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 4217 by doda, Thu Dec 16 09:39:48 2010 UTC revision 4225 by doda, Fri Dec 17 06:10:40 2010 UTC
# Line 10  Line 10 
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"
# Line 924  void ParseControl(BYTE b) Line 925  void ParseControl(BYTE b)
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:
# Line 2905  void ControlSequence(BYTE b) Line 2908  void ControlSequence(BYTE b)
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)

Legend:
Removed from v.4217  
changed lines
  Added in v.4225

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26