int aim_CheckSum(unsigned char *buffer, int bufsize, long *checksum)
{    
   long check1;
   int i;

   check1 = ((*checksum & 0xFFFF0000) >> 16);
   
   for(i=0;i<bufsize;i++) {  
      check1 -= (int)buffer[i] << (1- i % 2)*8;
      }

   while(check1 <0) {
      check1 = (check1 & 0x0000FFFF) - ((~check1 & 0xFFFF0000) >> 16) -1;
      }

   *checksum = check1 << 16;

   return *checksum;
}
