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

📄 getput.c

📁 开放源码的编译器open watcom 1.6.0版的源代码
💻 C
字号:
/*
 *  get/put short/long functions for little-endian platforms
 */

#include "wattcp.h"
#include "chksum.h"
#include "misc.h"

/*
 * Functions for get/put short/long. Pointer is _NOT_ advanced.
 */

#define GETSHORT(s, cp) {            \
        BYTE *t_cp = (BYTE*)(cp);    \
        (s) = ((WORD)t_cp[0] << 8)   \
            | ((WORD)t_cp[1]);       \
      }

#define GETLONG(l, cp) {             \
        BYTE *t_cp = (BYTE*)(cp);    \
        (l) = ((DWORD)t_cp[0] << 24) \
            | ((DWORD)t_cp[1] << 16) \
            | ((DWORD)t_cp[2] << 8)  \
            | ((DWORD)t_cp[3]);      \
      }

#define PUTSHORT(s, cp) {            \
        WORD  t_s  = (WORD)(s);      \
        BYTE *t_cp = (BYTE*)(cp);    \
        *t_cp++ = t_s >> 8;          \
        *t_cp   = t_s;               \
      }

#define PUTLONG(l, cp) {             \
        DWORD t_l  = (DWORD)(l);     \
        BYTE *t_cp = (BYTE*)(cp);    \
        *t_cp++ = (BYTE)(t_l >> 24); \
        *t_cp++ = (BYTE)(t_l >> 16); \
        *t_cp++ = (BYTE)(t_l >> 8);  \
        *t_cp   = (BYTE)t_l;         \
      }

WORD _getshort (const BYTE *x)   /* in <arpa/nameserv.h> */
{
  WORD res;
  GETSHORT (res, x);
  return (res);
}

DWORD _getlong (const BYTE *x)   /* in <arpa/nameserv.h> */
{
  DWORD res;
  GETLONG (res, x);
  return (res);
}

void __putshort (WORD var, BYTE *ptr)   /* in <resolv.h> */
{
  PUTSHORT (var, ptr);
}

void __putlong (DWORD var, BYTE *ptr)   /* in <resolv.h> */
{
  PUTLONG (var, ptr);
}

/*
 * If compiler/linker doesn't see our defines for htonl() etc.
 */
#undef htonl
#undef ntohl
#undef htons
#undef ntohs
#undef inchksum
#undef inchksum_fast

DWORD htonl (DWORD val) { return intel(val); }
DWORD ntohl (DWORD val) { return intel(val); }
WORD  htons (WORD  val) { return intel16(val); }
WORD  ntohs (WORD  val) { return intel16(val); }

WORD inchksum (const void *ptr, int len)
{
#if (DOSX)
  return _w32_inchksum_fast (ptr, len);
#else
  return _w32_inchksum (ptr, len);
#endif
}

/*
 * For old compatibility (linking old .o-files with new libwatt.a)
 */
#undef intel   
#undef intel16

DWORD intel  (DWORD val) { return htonl(val); }
WORD  intel16(WORD  val) { return htons(val); }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -