1  typedef unsigned char uchar;
       2  typedef unsigned short ushort;
       3  typedef unsigned int uint;
       4  typedef unsigned long ulong;
       5  
       6  static unsigned long S[1][1]={0x00820200};
       7  
       8  static int body(out0,out1,ks,Eswap0,Eswap1)
       9  ulong *out0,*out1;
      10  int *ks;
      11  ulong Eswap0,Eswap1;
      12  {
      13    register unsigned long l,r,t,u,v;
      14    register unsigned long *s;
      15    register int i,j;
      16    register unsigned long E0,E1;
      17  
      18    l=0;
      19    r=0;
      20  
      21    s=(ulong *)ks;
      22    E0=Eswap0;
      23    E1=Eswap1;
      24  
      25    for (i=0; i<(16 *2); i+=4)
      26      {
      27        v=(r^(r>>16));
      28        u=(v&E0);
      29        v=(v&E1);
      30        u=(u^(u<<16))^r^s[  i  ];
      31        t=(v^(v<<16))^r^s[  i+1];
      32        t=(t>>4)|(t<<28);
      33        l^=S[1][(t)&0x3f]| S[3][(t>> 8)&0x3f]| S[5][(t>>16)&0x3f]| S[7][(t>>24)&0x3f]| S[0][(u)&0x3f]| S[2][(u>> 8)&0x3f]| S[4][(u>>16)&0x3f]| S[6][(u>>24)&0x3f];
      34        v=(l^(l>>16));
      35        u=(v&E0);
      36        v=(v&E1);
      37        u=(u^(u<<16))^l^s[  i+2  ];
      38        t=(v^(v<<16))^l^s[  i+2+1];
      39        t=(t>>4)|(t<<28);
      40        r^=	S[1][(t    )&0x3f];
      41      }
      42    t=l;
      43    l=r;
      44    r=t;
      45  
      46    t=r;
      47    r=(l>>1)|(l<<31);
      48    l=(t>>1)|(t<<31);
      49  
      50    *out0=l;
      51    *out1=r;
      52    return(0);
      53  }