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

📄 ibmcode.c

📁 证券交易系统
💻 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 + -