tools.c
上传用户:zlh9724
上传日期:2007-01-04
资源大小:1991k
文件大小:1k
源码类别:

浏览器

开发平台:

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. }