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

📄 gcf400.cpp

📁 液晶电视完整代码可实现人机界面
💻 CPP
📖 第 1 页 / 共 2 页
字号:
  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 = (long)(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 = (long)(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;      for(i = 0; i < lenE; i++)      {        j = Ebuf[i];        if(i < lenE - 1)        {          if(j < 0xF0 || j > 0xF9) return -1;          double_val = double_val * 10.0 + (j & 0x0F) * 1.0;        }        else        {          if((j & 0xF0) != 0xF0 && (j & 0xF0) != 0xD0) return -1;          double_val = double_val * 10.0 + (j & 0x0F) * 1.0;          if((j & 0xF0) == 0xD0) double_val = -double_val;          double_val = double_val / pow(10, (double)fld_dec);        }      }      val_ptr->double_val = double_val;      j = 0;      break;    case 'B':      j = fld_len > 4 ? 4 : 2;      if(lenE != j) return -4;      for(i = 0; i < lenE; i++)      {        j = Ebuf[i];        long_val = long_val << 8 | j;      }      val_ptr->long_val = long_val;      j = 0;      break;    case 'F':      j = -3;      break;    case 'A':    case 'H':      if(lenE > lenA) return -4;    case 'L':    case 'T':    case 'Z':      for(i = 0; i < lenE; i++)        Abuf[i] = EBCDICtoASCII(Ebuf[i]);      j = i;      break;    case 'J':    case 'E':    case 'O':      hz_stat = NO;      for(i = 0, j = 0; i < lenE; i++)      {        if(hz_stat == NO && Ebuf[i] == 0x0E)        {          hz_stat = YES;          continue;        }        if(hz_stat == YES)        {          if(Ebuf[i] == 0x0F || (i+1) >= lenE)          {            hz_stat = NO;            continue;          }          if(Ebuf[i+1] == 0x0F)          {            hz_stat = NO;            continue;          }        }        if(hz_stat == YES)        {          EB = Ebuf[i] << 8 | Ebuf[i+1];          if(gl_E2Acvt7x_6B == YES)            EB = EBCDIC_cvt7x_6B(EB);          GB = HZ_E2A(EB);          Abuf[j++] = (GB & 0xFF00) >> 8;          Abuf[j++] = GB & 0x00FF;          i++;        }        else          Abuf[j++] = EBCDICtoASCII(Ebuf[i]);      }      break;    case 'G':      if(lenE != fld_len * 2) return -4;      for(i = 0, j = 0; i < lenE; i++)      {        EB = Ebuf[i] << 8 | Ebuf[i+1];        if(gl_E2Acvt7x_6B == YES)          EB = EBCDIC_cvt7x_6B(EB);        GB = HZ_E2A(EB);        Abuf[j++] = (GB & 0xFF00) >> 8;        Abuf[j++] = GB & 0x00FF;        i++;      }      break;    default :      j = -2;  }  return j;}/* ------------------------------------------------------------------------- */USGC *truncate_Estr(USGC *Estr, int len)/*   Truncate the EBCDIC string to length of len   M.L.Y  1999.12.13*/{  int  byte_stat = 0;  /* byte stat: 0 -- SBCS byte, -1 -- 0x0E, -2 -- 0x0F, 1---N -- DBCS byte */  int  i;  for(i = 0; i < len; i++)  {    if(Estr[i] == 0x0E)      byte_stat = -1;    else if(Estr[i] == 0x0F)      byte_stat = -2;    else    {      if(byte_stat == -2)        /* last char is 0x0F */        byte_stat = 0;           /* SBCS char */      else if(byte_stat == -1)   /* last char is 0x0E */        byte_stat = 1;           /* DBCS 1st char */      else if(byte_stat > 0)     /* last char is DBCS char */        byte_stat++;             /* count bytes */    }  }  if(byte_stat == -1)    Estr[len-1] = 0x40;          /* blank space */  else if(byte_stat > 0)  {    if(byte_stat % 2 == 1)      Estr[len-1] = 0x0F;    else    {      Estr[len-2] = 0x0F;      Estr[len-1] = 0x40;        /* blank space */    }  }  Estr[len] = 0x00;  return Estr;}/* ------------------------------------------------------------------------- */int  C400trigraphs_to_std_C(USGC *strfrom, USGC *strto)/*   Convert the C source line include AS/400 ILE C/400 trigraphs to   standard C, return conversion number:     ??= -> #       ??/ -> \     ??( -> [       ??' -> ^     ??) -> ]       ??! -> |     ??< -> {       ??- -> ~     ??> -> }   M.L.Y  1998.09.08*/{  int  i, j, k, m, n, conv;  char *trigraphs = "()<>='!-/";  char *standardc = "[]{}#^|~\\";  m = strlen(trigraphs);  for(i = 0, j = 0, n = 0; strfrom[i] != NUL; )  {    conv = NO;    if(strfrom[i] == '?' && strfrom[i+1] == '?')    {      for(k = 0; k < m; k++)      {        if(strfrom[i+2] == trigraphs[k])        {          strto[j++] = standardc[k];          i = i + 3;          conv = YES;          n++;          break;        }      }    }    if(conv != YES)    {      strto[j++] = strfrom[i++];    }  }  strto[j] = NUL;  return n;}/* ------------------------------------------------------------------------- */int  std_C_to_C400trigraphs(USGC *strfrom, USGC *strto)/*   Convert the standard C source line to AS/400 ILE C/400 trigraphs,   return conversion number:     [ -> ??(       ^ -> ??'     ] -> ??)       ~ -> ??-     \ -> ??/   M.L.Y  1998.09.08*/{  int  i, j, k, m, n, conv;  char *standardc = "[]^~\\";  char *trigraphs = "()'-/";  m = strlen(standardc);  for(i = 0, j = 0, n = 0; strfrom[i] != NUL; i++)  {    conv = NO;    for(k = 0; k < m; k++)    {      if(strfrom[i] == standardc[k])      {        strto[j++] = '?';        strto[j++] = '?';        strto[j++] = trigraphs[k];        conv = YES;        n++;        break;      }    }    if(conv != YES)    {      strto[j++] = strfrom[i];    }  }  strto[j] = NUL;  return n;}/* End of file */

⌨️ 快捷键说明

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