?? mapcode.cpp
字號:
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; } { 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 + -