⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mapcode.cpp

📁 液晶电视完整代码可实现人机界面
💻 CPP
📖 第 1 页 / 共 3 页
字号:
USGS HZ_E2A(USGS EBCDIC_Code)/*   EBCDIC DBCS to ASCII DBCS   If the EBCDIC DBCS invalid, return ASCII DBCS blank (0xA1A1)*/{  USGC HB_A, LB_A, HB_E, LB_E;  USGS GB_Code;  /* USGS code_err = 0xFFFF; */  USGS GB_BLANK = 0xA1A1;  int  i, n_ea1, n_ea2;  HB_E = (EBCDIC_Code & 0xFF00) >> 8;  LB_E = EBCDIC_Code & 0x00FF;  if(EBCDIC_Code != 0x4040 && EBCDIC_Code < 0x4141)    return GB_BLANK;  if(EBCDIC_Code > 0x46EF && EBCDIC_Code < 0x48A0)    return GB_BLANK;  if(EBCDIC_Code > 0x6C9F)    return GB_BLANK;  if(LB_E < 0x41 || LB_E > 0xFD)    return GB_BLANK;  if(HB_E >= 0x48 && HB_E <= 0x6C && LB_E == 0x80)    return GB_BLANK;  if(HB_E >= 0x48 && HB_E <= 0x6C &&     LB_E >= 0x41 && LB_E <= 0xFD)  {    HB_A = (HB_E - 0x48) * 2 + 0xB0 - 1;    if(LB_E >= 0xA0)      HB_A = HB_A + 1;    if(LB_E < 0x80)      LB_A = LB_E - 0x41 + 0xA1;    else    {      if(LB_E < 0xA0)        LB_A = LB_E - 0x81 + 0xE0;      else  /* LB_E >= 0xA0 */        LB_A = LB_E + 1;    }    GB_Code = HB_A << 8 | LB_A;    return GB_Code;  }  n_ea1 = sizeof(HZE_A1)/sizeof(HZE_A1[0]);  n_ea2 = sizeof(HZE_A2)/sizeof(HZE_A2[0]);  for(i=0; i<n_ea1; i++)    if(EBCDIC_Code == HZE_A1[i][0]) return HZE_A1[i][1];  for(i=0; i<n_ea2; i++)    if(EBCDIC_Code >= HZE_A2[i][0] &&       EBCDIC_Code <= HZE_A2[i][1])      return HZE_A2[i][2] + EBCDIC_Code - HZE_A2[i][0];  return GB_BLANK;}/* ------------------------------------------------------------------------- */int  Str_A2E(USGC *src, int src_len, USGC *dest)/*   ASCII string to EBCDIC   Return length after string conversion*/{  int  i, j;  char hz_stat, is_hanzi;  USGS GB, EB;  hz_stat = NO;  for(i=0, j=0; i<src_len; i++)  {    is_hanzi = NO;    if(src[i] > 0xA0 && src[i] < 0xFF)    {      if((i+1) < src_len && src[i+1] > 0xA0 && src[i+1] < 0xFF)        is_hanzi = YES;    }    if(is_hanzi == YES)    {      GB = src[i] << 8 | src[i+1];      EB = HZ_A2E(GB);      if(hz_stat == NO)      {        hz_stat = YES;        dest[j++] = 0x0E;      }      dest[j++] = (EB & 0xFF00) >> 8;      dest[j++] = EB & 0x00FF;      i++;    }    else    {      if(hz_stat == YES)      {        hz_stat = NO;        dest[j++] = 0x0F;      }      dest[j++] = ASCIItoEBCDIC(src[i]);    }  }  if(hz_stat == YES)  {    hz_stat = NO;    dest[j++] = 0x0F;  }  dest[j] = NUL;  return j;}/* ------------------------------------------------------------------------- */int  Str_E2A(USGC *src, int src_len, USGC *dest)/*   EBCDIC string to ASCII   Return length after string conversion*/{  int  i, j;  char hz_stat;  USGS GB, EB;  hz_stat = NO;  for(i=0, j=0; i<src_len; i++)  {    if(hz_stat == NO && src[i] == 0x0E)    {      hz_stat = YES;      continue;    }    if(hz_stat == YES)    {      if(src[i] == 0x0F || (i+1) >= src_len)      {        hz_stat = NO;        continue;      }      if(src[i+1] == 0x0F)      {        hz_stat = NO;        continue;      }    }    if(hz_stat == YES)    {      EB = src[i] << 8 | src[i+1];      if(gl_E2Acvt7x_6B == YES)       /* M.L.Y  1999.10.28 add */        EB = EBCDIC_cvt7x_6B(EB);      GB = HZ_E2A(EB);      dest[j++] = (GB & 0xFF00) >> 8;      dest[j++] = GB & 0x00FF;      i++;    }    else      dest[j++] = EBCDICtoASCII(src[i]);  }  dest[j] = NUL;  return j;}/* ------------------------------------------------------------------------- */int  CvtFldA2E(USGC *Ebuf, int lenE, char fld_type, int fld_len,               int fld_dec, USGC *Abuf, int lenA, LDU *val_ptr)/*   ASCII string length: lenA   Field max length: lenE   Return: >=0 --- ok            -1 --- error Ebuf data            -2 --- error fld_type            -3 --- unsupport fld_type            -4 --- fld_len or lenA and lenE not match   M.L.Y  1999.11*/{  int  i, j;  char hz_stat, is_hanzi, HHB, LHB;  USGS GB, EB;  long long_val = 0;  double double_val = 0.0;  switch(fld_type)  {    case 'P':      j = fld_len / 2 + 1;      if(lenE != j) return -4;      double_val = val_ptr->double_val;      long_val = double_val * pow(10, (double)fld_dec);      for(i = 0; i < lenE; i++)      {        if(i == 0)        {          if(long_val < 0)          {            long_val = -long_val;            LHB = 0x0D;          }          else            LHB = 0x0F;          HHB = long_val % 10;          long_val /= 10;        }        else        {          LHB = long_val % 10;          long_val /= 10;          HHB = long_val % 10;          long_val /= 10;        }        j = HHB << 4 | LHB;        Ebuf[lenE-i-1] = j;      }      j = 0;      break;    case 'S':      if(lenE != fld_len) return -4;      double_val = val_ptr->double_val;      long_val = double_val * pow(10, (double)fld_dec);      for(i = 0; i < lenE; i++)      {        HHB = 0xF0;        if(i == 0 && long_val < 0)        {          long_val = -long_val;          HHB = 0xD0;        }        LHB = long_val % 10;        long_val /= 10;        j = HHB << 4 | LHB;        Ebuf[lenE-i-1] = j;      }      j = 0;      break;    case 'B':      j = fld_len > 4 ? 4 : 2;      if(lenE != j) return -4;      long_val = val_ptr->long_val;      for(i = 0; i < lenE; i++)        Ebuf[lenE-i-1] = (long_val >> (i*8)) & 0xFF;      j = 0;      break;    case 'F':      j = -3;      break;    case 'A':    case 'H':      if(lenA > lenE) return -4;    case 'L':    case 'T':    case 'Z':      for(i = 0; i < lenA; i++)        Ebuf[i] = ASCIItoEBCDIC(Abuf[i]);      j = i;      break;    case 'J':    case 'E':    case 'O':      hz_stat = NO;      for(i = 0, j = 0; i < lenA; i++)      {        is_hanzi = NO;        if(Abuf[i] > 0xA0 && Abuf[i] < 0xFF)        {          if((i+1) < lenA && Abuf[i+1] > 0xA0 && Abuf[i+1] < 0xFF)            is_hanzi = YES;        }        if(is_hanzi == YES)        {          GB = Abuf[i] << 8 | Abuf[i+1];          EB = HZ_A2E(GB);          if(hz_stat == NO)          {            hz_stat = YES;            Ebuf[j++] = 0x0E;          }          Ebuf[j++] = (EB & 0xFF00) >> 8;          Ebuf[j++] = EB & 0x00FF;          i++;        }        else        {          if(hz_stat == YES)          {            hz_stat = NO;            Ebuf[j++] = 0x0F;          }          Ebuf[j++] = ASCIItoEBCDIC(Abuf[i]);        }      }      if(hz_stat == YES)      {        hz_stat = NO;        Ebuf[j++] = 0x0F;      }      break;    case 'G':      if(lenE != fld_len * 2) return -4;      for(i = 0, j = 0; i < lenA; i++)      {        GB = Abuf[i] << 8 | Abuf[i+1];        EB = HZ_A2E(GB);        Ebuf[j++] = (EB & 0xFF00) >> 8;        Ebuf[j++] = EB & 0x00FF;        i++;      }      break;    default :      j = -2;  }  return j;}/* ------------------------------------------------------------------------- */int  CvtFldE2A(USGC *Ebuf, int lenE, char fld_type, int fld_len,               int fld_dec, USGC *Abuf, int lenA, LDU *val_ptr)/*   Field bytes: lenE   Abuf max len: lenA   Return: >=0 --- ok            -1 --- error Ebuf data            -2 --- error fld_type            -3 --- unsupport fld_type            -4 --- fld_len or lenA and lenE not match   M.L.Y  1999.11*/{  int  i, j;  char hz_stat;  USGS GB, EB;  long long_val = 0;  double double_val = 0.0;  switch(fld_type)  {    case 'P':      j = fld_len / 2 + 1;      if(lenE != j) return -4;      for(i = 0; i < lenE; i++)      {        j = Ebuf[i] >> 4;        double_val = double_val * 10.0 + j;        j = Ebuf[i] & 0x0F;        if(i < lenE - 1)          double_val = double_val * 10.0 + j;        else        {          if(j != 0x0F && j != 0x0D) return -1;          if(j == 0x0D) double_val = -double_val;          double_val = double_val / pow(10, (double)fld_dec);        }      }      val_ptr->double_val = double_val;      j = 0;      break;    case 'S':      if(lenE != fld_len) return -4;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -