📄 ibmcode.c
字号:
/* 与主机相关. Related to HOST. 代码转换工具, 组包工具 Tools for pack By CBC Beijing 北京建行*/#include <stdio.h>#include <ctype.h>#include <time.h>#include <string.h>#include "bank.h" unsigned char t[50];unsigned char header[30];unsigned char m[10];unsigned char *headstr(h)struct head h;{ int i,j; static char *p; unsigned char *ebc,*ebcdic(); char ts1[5],ts[11],tms[7],*transbcd(); ebc=ebcdic("TCZF"); for (i=0;i<4;i++,ebc++) header[i]=*ebc; header[4]=0; tms[0]='\0'; gettimea(tms); ts[0]='\0'; strcat(ts,"0"); strcat(ts,tms); strcat(ts,"0"); p=transbcd(ts); for(i=5;i<9;i++,p++) header[i]=*p; header[9]=0; p=transbcd(h.jym); header[10]=*p; header[11]=*(p+1); p=transbcd(h.gzh); header[12]=*p; header[13]=*(p+1); if(h.sqyh[0]=='\0') { header[14]=0; header[15]=0; } else { p=transbcd(h.sqyh); header[14]=*p; header[15]=*(p+1); } if (h.sqjb[0]=='\0') header[16]=0; else { p=transbcd(h.sqjb); header[16]=*p; } for(i=17;i<26;i++) header[i]=0; if(h.lsh!=0) { sprintf(ts,"%010d",h.lsh); p=transbcd(ts); for(i=21;i<26;i++,p++) header[i]=*p; } p=transbcd(h.bz); header[26]=*p;/*for(i=0;i<27;i++) printf("%x ",header[i]); printf("\n"); */ return(header);}int Hmegs(p,l,s,delimite,flag)int l;int flag;char s[];unsigned char *p;unsigned char delimite;{ int i; int Lx; unsigned char str1[2],str2[2]; unsigned char str[256]; unsigned char *ebcdic(); unsigned char *ebc; if(flag==0) { ebc=ebcdic(s); Lx=strlen(s); for(i=0;i<Lx;i++) { *(p+l+i)=*(ebc+i); } *(p+l+i)=delimite; return (l+i+1); } if(flag==1) { transibm(s); str1[0]=0x0e; str1[1]='\0'; str2[0]=0x0f; str2[1]='\0'; strcpy(str,str1); strcat(str,s); strcat(str,str2); Lx=strlen(str); for(i=0;i<Lx;i++) { *(p+l+i)=str[i]; } *(p+l+i)=delimite; return (l+i+1); }}transibm(str)char str[];{ int i,j,k,l; unsigned char s1[150],s2[150]; strcpy(s1,str); j=0; for(i=0;s1[i]!='\0';) { /*printf("s1[%d]=%x",i,s1[i]); */ if(s1[i]>=0x80) { s2[j]=s1[i]; /*printf("s2[%d]=%x ",j,s2[j]);*/ s2[++j]=s1[++i]; /*printf("s2[%d]=%x\n ",j,s2[j]);*/ i++; j++; } else /* check ascii and transfer GB */ { if (s1[i]<0x21 && s1[i] != 0x20) return(-1); if (s1[i]==0x20) { s2[j]=0xa1; s2[++j]=0xa1; i++; } else { s2[j]=0xa3; /*printf("s2[%d]=%x ",j,s2[j]);*/ s2[++j]=s1[i++]+0x80; /*printf("s2[%d]=%x\n ",j,s2[j]);*/ } j++; } } strcpy(s1,s2); s2[0]=0x00; for(i=0;s1[i]!='\0';i=i+2) { if (s1[i]<0xb0) /* not HZ transfer IBM EBCDIC */ { j=s1[i]-0xa1; k=s1[i+1]-0xa1; l=j*94+k; s2[i]=ibm[l][0]; s2[i+1]=ibm[l][1]; } else /* HZ transfer IBM EBCDIC */ { if (s1[i]==0xb0) { s2[i]=0x48; s2[i+1]=0xa0+s1[i+1]-0xa1; } else { if (s1[i]%2 != 0) { j=s1[i]-0xb0; s2[i]=0x49+j/2; if (s1[i+1]<0xe0) s2[i+1]=0x41+s1[i+1]-0xa1; else s2[i+1]=0x81+s1[i+1]-0xe0; } else { j=(s1[i]-1)-0xb0; s2[i]=0x49+j/2; s2[i+1]=0xa0+s1[i+1]-0xa1; } } } } s2[i]='\0'; strcpy(str,s2); /* for(i=0;s2[i]!='\0';++i) printf("s[%d]: %x ",i,s2[i]);*/ return(0);}unsigned char *ebcdic(s)char s[];{int i,j,k;char buf[27];unsigned char *p; strcpy(buf,"abcdefghijklmnopqrstuvwxyz"); for (i=0,j=0;s[i]!='\0';i++,j++){ if (isdigit(s[i])) t[j]=240+s[i]-'0'; for (k=0;k<27;k++){ if (s[i]==buf[k]) switch(k/9){ case 0:t[j]=129+(k%9); break; case 1:t[j]=145+(k%9); break; case 2:t[j]=162+(k%9); break; default: printf("case error!"); } else if (tolower(s[i])==buf[k]) switch(k/9){ case 0:t[j]=193+(k%9); break; case 1:t[j]=209+(k%9); break; case 2:t[j]=226+(k%9); break; default: printf("case error!"); } } }/* t[j]=0x41; */p=t; return(p);}char *transbcd(s)char s[];{int i,j;char *p;/*--- by gjh ---*/memset(m,'\0',sizeof(m));/*-------------*/for (i=0,j=0;s[i]!='\0';i+=2,j++){ if (s[i+1]=='\0') m[j]=s[i]-'0'; else m[j]=(s[i]-'0')*16+s[i+1]-'0';}p=m;return(p);}/* change ebcdic code to ascii code */asc(s,l,p)unsigned char s[];int l;char *p;{ int i,j,k; char buf[27]; strcpy(buf,"abcdefghijklmnopqrstuvwxyz"); for (i=0;i<l;i++) { if(s[i]>=240) { j=s[i]-240; *(p+i)=j+'0'; } if(s[i]<234&&s[i]>225) { j=s[i]-224+16; *(p+i)=toupper(buf[j]); } if(s[i]<218&&s[i]>208) { j=s[i]-208+8; *(p+i)=toupper(buf[j]); } if(s[i]<202&&s[i]>192) { j=s[i]-192-1; *(p+i)=toupper(buf[j]); } if(s[i]<170&&s[i]>161) { j=s[i]-160+16; *(p+i)=buf[j]; } if(s[i]<154&&s[i]>144) { j=s[i]-144+8; *(p+i)=buf[j]; } if(s[i]<138&&s[i]>128) { j=s[i]-128-1; *(p+i)=buf[j]; } } *(p+i)='\0';}killzero(s) /* 删除头部零 */char s[];{ int i,j,m; m=strlen(s)-1; for(i=0;i<m;i++) if(s[0] == '0') { for(j=0;j<m;j++) s[j]=s[j+1]; s[j]='\0'; } else break;}killzerq(s) /* 删除rq头部零 */char s[];{ int i,j,m,k; m=strlen(s)-1; for(i=0;i<m;i++) if(s[0] == '0') { if ((k=strlen(s))<=6) break; for(j=0;j<m;j++) s[j]=s[j+1]; s[j]='\0'; } else break;}int Hemg1(temp5,l,s,delimite)char temp5[];int l;char s[];char delimite;{int i;char p[300];for(i=0;i<300;i++) p[i]=0;for(i=0;temp5[i+l]!=delimite;i++){ if(i==300) { WriteLog(LOGFILE,"delimite [%d] Hemgc1 error!",delimite); exit(1); } p[i]=temp5[i+l];}strcpy(s,p);return(i+l+1);}int Hemg2(temp5,l,s,delimite)unsigned char temp5[];int l;char s[];unsigned char delimite;{int i;for(i=0;temp5[i+l+1]!=0x0f;i++){ if(i==150) { WriteLog(LOGFILE,"delimite Hemg2 error!"); exit(1); } s[i]=temp5[i+l+1];}s[i]='\0';retranhz(s);return(i+l+3);}retranhz(str) unsigned char str[]; { unsigned char s1[150],s2[150]; int i,j,k,l; strcpy(s1,str); for(i=0;s1[i]!='\0';i=i+2) { if (s1[i]<0x48) /* not HZ code transfer */ { for (j=0;j<831;++j) if (s1[i]==ibm[j][0] && s1[i+1]==ibm[j][1]) { s2[i]=j/94+0xa1; s2[i+1]=j%94+0xa1; break; } } else /* HZ code transfer */ { if (s1[i]==0x48) /* the frist line of GB HZ transfer*/ { s2[i]=0xb0; s2[i+1]=0xa1+s1[i+1]-0xa0; } else { if (s1[i+1]< 0xa0) /* GB HZ in the same line */ { s2[i]=0xb1+(s1[i]-0x49)*2; if (s1[i+1]<0x81) /* IBM HZ break point */ s2[i+1]=0xa1+s1[i+1]-0x41; else s2[i+1]=0xe0+s1[i+1]-0x81; } else /* GB HZ the next line begin */ { s2[i]=0xb1+(s1[i]-0x49)*2+1; s2[i+1]=0xa1+s1[i+1]-0xa0; } } } } s2[i]='\0'; strcpy(str,s2);}unsigned char *headstr_duizh(h)struct head h;{ int i,j; static char *p; unsigned char *ebc,*ebcdic(); char ts1[5],ts[11],tms[7],*transbcd(); ebc=ebcdic("ZQDJ"); for (i=0;i<4;i++,ebc++) header[i]=*ebc; header[4]=0; return(header);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -