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

📄 mapcode.cpp

📁 液晶电视完整代码可实现人机界面
💻 CPP
📖 第 1 页 / 共 3 页
字号:
      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;}int MapEBCDIC(int argc, char argv[][M_MAX_PARA_LEN], char *in_data, int *len, char *out_data){	int inlen, bufsize, outlen;	inlen = strlen( in_data );	if ( argc != 1 ){		bufsize = inlen;	} else {		bufsize = atoi( argv[0] );		if ( bufsize < inlen )			bufsize = inlen;	}	strcpy( out_data, in_data );	outlen = Str_A2E ( (USGC *)out_data, inlen, (USGC *)out_data );	if ( outlen > 0 ){		out_data[outlen] = 0;		*len = outlen;		return 0;	}	return -1;  }int MapAllEBCDIC(int argc, char argv[][M_MAX_PARA_LEN], char *in_data, int *len, char *out_data){	int inlen, bufsize, outlen;	inlen = strlen( in_data );	if ( argc != 1 ){		bufsize = inlen;	} else {		bufsize = atoi( argv[0] );		if ( bufsize < inlen )			bufsize = inlen;	}	outlen = Str_A2E ( (USGC *)in_data, inlen, (USGC *)out_data );	if ( outlen > 0 ){		for ( ; outlen<bufsize; outlen++ )			out_data[outlen] = 0x40;		out_data[bufsize] = 0;		*len = bufsize;		return 0;	}	return -1;  }int MapASCII(int argc, char argv[][M_MAX_PARA_LEN], char *in_data, int *len, char *out_data){	int inlen, bufsize;//	int outlen;	inlen = strlen( in_data );	if ( argc != 1 ){		bufsize = inlen;	} else {		bufsize = atoi( argv[0] );	}#ifndef SNA	if ( *len < bufsize ){		memcpy(out_data, in_data, *len);		memset(out_data + *len, ' ', bufsize - *len);	} else {		memcpy(out_data, in_data, bufsize);	}	out_data[bufsize] = 0;	*len = bufsize;	return 0;#else	outlen = Str_E2A ( (USGC *)in_data, inlen , (USGC *)out_data );	if ( outlen > 0 ){		if ( outlen > bufsize )			outlen = bufsize;		out_data[outlen] = 0;		*len = outlen;		return 0;	}	return -1;  #endif}/* 半角字符串转换为全角字符串 */int convertB2Q(char *dbuf, char *src,int len) {    int i;    char *pd;    unsigned char c1,c2;        pd = dbuf;    for( i=0; src[i]; i++ ) {        if( (int)(pd - dbuf) > len-2 ) {            break;        }                /* 去掉半角空格, 在某些地方可能需要转为全角空格 */        if( src[i] == ' ') {            continue;        }        /* 去掉全角空格  */        if( src[i] == 0xa1 && src[i+1]==0xa1 ) {             i++;             continue;        }        /* 汉字直接赋值 */        if( (unsigned char)src[i] >= 0xa0 && (unsigned char)src[i+1]>=0xa0 ) {             *pd++ = src[i++];            *pd++ = src[i];            *pd = 0;            continue;        }        /* 指定范围内的半角转全角 */        if( (unsigned char)src[i]>='!' && (unsigned char)src[i]<='~') {            c1 = 0xa3;             c2 = src[i]+128;            *pd++ = c1;             *pd++ = c2;        }      }    *pd = 0;    return strlen(dbuf);}/* 全角字符串转换为半角字符串

⌨️ 快捷键说明

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