📄 tmacro.h
字号:
/* * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc. * All rights reserved. * * This software is copyrighted by and is the sole property of * VIA Networking Technologies, Inc. This software may only be used * in accordance with the corresponding license agreement. Any unauthorized * use, duplication, transmission, distribution, or disclosure of this * software is expressly forbidden. * * This software is provided by VIA Networking Technologies, Inc. "as is" * and any express or implied warranties, including, but not limited to, the * implied warranties of merchantability and fitness for a particular purpose * are disclaimed. In no event shall VIA Networking Technologies, Inc. * be liable for any direct, indirect, incidental, special, exemplary, or * consequential damages. * * File: tmacro.h * * Purpose: define basic common types and macros * * Author: Tevin Chen * * Date: May 21, 1996 * */#ifndef __TMACRO_H__#define __TMACRO_H__#if !defined(__TTYPE_H__)#include "ttype.h"#endif/****** Common helper macros ***********************************************/#if !defined(LONIBBLE)#define LONIBBLE(b) ((BYTE)(b) & 0x0F)#endif#if !defined(HINIBBLE)#define HINIBBLE(b) ((BYTE)(((WORD)(b) >> 4) & 0x0F))#endif#if !defined(LOBYTE)#define LOBYTE(w) ((BYTE)(w))#endif#if !defined(HIBYTE)#define HIBYTE(w) ((BYTE)(((WORD)(w) >> 8) & 0xFF))#endif#if !defined(LOWORD)#define LOWORD(d) ((WORD)(d))#endif#if !defined(HIWORD)#define HIWORD(d) ((WORD)((((DWORD)(d)) >> 16) & 0xFFFF))#endif#define LODWORD(q) ((q).u.dwLowDword)#define HIDWORD(q) ((q).u.dwHighDword)#if !defined(MAKEBYTE)#define MAKEBYTE(ln, hn) ((BYTE)(((BYTE)(ln) & 0x0F) | ((BYTE)(hn) << 4)))#endif#if !defined(MAKEWORD)#define MAKEWORD(lb, hb) ((WORD)(((BYTE)(lb)) | (((WORD)((BYTE)(hb))) << 8)))#endif#if !defined(MAKEDWORD)#define MAKEDWORD(lw, hw) ((DWORD)(((WORD)(lw)) | (((DWORD)((WORD)(hw))) << 16)))#endif#if !defined(MAKEQWORD)#define MAKEQWORD(ld, hd, pq) {pq->u.dwLowDword = ld; pq->u.dwHighDword = hd;}#endif#if !defined(MAKELONG)#define MAKELONG(low, high) ((LONG)(((WORD)(low)) | (((DWORD)((WORD)(high))) << 16)))#endif// Bytes Reverse: big endian to little endian convert#if !defined(REVWORD)#define REVWORD(w) ((WORD)( ((WORD)(w) >> 8) | ((WORD)(w) << 8) ))#endif#if !defined(REVDWORD)#define REVDWORD(d) (MAKEDWORD(MAKEWORD(HIBYTE(HIWORD(d)),LOBYTE(HIWORD(d))),MAKEWORD(HIBYTE(LOWORD(d)),LOBYTE(LOWORD(d)))))#endif/* map to known network names *//*#define ntohs(x) REVWORD(x)#define ntohl(x) REVDWORD(x)#define htons(x) REVWORD(x)#define htonl(x) REVDWORD(x)*//*#ifndef NOMINMAX#ifndef max#define max(a,b) (((a) > (b)) ? (a) : (b))#endif#ifndef min#define min(a,b) (((a) < (b)) ? (a) : (b))#endif#endif // NOMINMAX*//****** Misc macros ********************************************************/// get the field offset in the type(struct, class, ...)#define OFFSET(type, field) ((int)(&((type NEAR*)1)->field)-1)/* string equality shorthand */#define STR_EQ(x, y) (strcmp(x, y) == 0)#define STR_NE(x, y) (strcmp(x, y) != 0)// calculate element # of array#define ELEMENT_NUM(array) (sizeof(array) / sizeof(array[0]))//#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))// null statement#define NULL_FUNC()/* Since not all compilers support structure assignment, the ASSIGN() * macro is used. This controls how it's actually implemented. */#ifdef NOSTRUCTASSIGN /* Version for old compilers that don't support it */#define ASSIGN(a,b) memcpy((char *)&(a),(char *)&(b),sizeof(b);#else /* Version for compilers that do */#define ASSIGN(a,b) ((a) = (b))#endif#endif // __TMACRO_H__
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -