tools.c
Upload User: zlh9724
Upload Date: 2007-01-04
Package Size: 1991k
Code Size: 1k
Category:

Browser Client

Development Platform:

Unix_Linux

  1. #include <stdio.h>
  2. #include <malloc.h>
  3. #include <unistd.h>
  4. #include "www.h"
  5. void *GetPointer(unsigned char **p)
  6. {
  7. #if defined POINTER_IS_64BIT
  8.     unsigned long c1, c2; /* must hold a 64bit Pointer wm 19.Jan.95 */
  9. #else
  10.     unsigned int c1, c2;
  11. #endif /* POINTER_IS_64BIT */
  12.     long str;
  13.     unsigned char *pp;
  14.     pp=*p;
  15.     c1 = *pp++; c2 = *pp++; str = (c1 | c2<<8);
  16.     c1 = *pp++; c2 = *pp++; str |= (c1 | c2<<8) << 16;
  17. #if defined POINTER_IS_64BIT
  18.     c1 = *pp++; c2 = *pp++; str |= (c1 | c2<<8) << 32;
  19.     c1 = *pp++; c2 = *pp++; str |= (c1 | c2<<8) << 48;
  20. #endif /* POINTER_IS_64BIT */
  21.     *p=pp;
  22.     return (void *)str;
  23. }
  24. void PutPointer(unsigned char **p, void *ptr)
  25. {
  26.      unsigned int ptr_16byte;
  27.      unsigned char *pp;
  28.      pp=*p; 
  29.      ptr_16byte = (unsigned int)((long)ptr & 0xFFFF);
  30.      *pp++ = (unsigned char) ( ptr_16byte & 0xFF );
  31.      *pp++ = (unsigned char) ( (ptr_16byte >> 8) & 0xFF );
  32.      ptr_16byte = (unsigned int)( ((long)ptr >> 16) & 0xFFFF);
  33.      *pp++ = (unsigned char) ( ptr_16byte & 0xFF );
  34.      *pp++ = (unsigned char) ( (ptr_16byte >> 8) & 0xFF );
  35. #if defined POINTER_IS_64BIT
  36.      ptr_16byte = (unsigned int)( ((long)ptr >> 32) & 0xFFFF);
  37.      *pp++ = (unsigned char) ( ptr_16byte & 0xFF );
  38.      *pp++ = (unsigned char) ( (ptr_16byte >> 8) & 0xFF );
  39.      ptr_16byte = (unsigned int)( ((long)ptr >> 48) & 0xFFFF);
  40.      *pp++ = (unsigned char) ( ptr_16byte & 0xFF );
  41.      *pp++ = (unsigned char) ( (ptr_16byte >> 8) & 0xFF );
  42. #endif /* POINTER_IS_64BIT */
  43.      *p=pp; 
  44. }