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

📄 portab.h

📁 GNU FreeDOS兼容MS DOS很好的东东.
💻 H
字号:
/****************************************************************//*                                                              *//*                           portab.h                           *//*                                                              *//*                 DOS-C portability typedefs, etc.             *//*                                                              *//*                         May 1, 1995                          *//*                                                              *//*                      Copyright (c) 1995                      *//*                      Pasquale J. Villani                     *//*                      All Rights Reserved                     *//*                                                              *//* This file is part of DOS-C.                                  *//*                                                              *//* DOS-C is free software; you can redistribute it and/or       *//* modify it under the terms of the GNU General Public License  *//* as published by the Free Software Foundation; either version *//* 2, or (at your option) any later version.                    *//*                                                              *//* DOS-C is distributed in the hope that it will be useful, but *//* WITHOUT ANY WARRANTY; without even the implied warranty of   *//* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See    *//* the GNU General Public License for more details.             *//*                                                              *//* You should have received a copy of the GNU General Public    *//* License along with DOS-C; see the file COPYING.  If not,     *//* write to the Free Software Foundation, 675 Mass Ave,         *//* Cambridge, MA 02139, USA.                                    *//****************************************************************/#ifdef MAIN#ifdef VERSION_STRINGSstatic char *portab_hRcsId =    "$Id: portab.h,v 1.34 2005/03/15 15:25:08 perditionc Exp $";#endif#endif/****************************************************************//*                                                              *//* Machine dependant portable types. Note that this section is  *//* used primarily for segmented architectures. Common types and *//* types used relating to segmented operations are found here.  *//*                                                              *//* Be aware that segmented architectures impose on linear       *//* architectures because they require special types to be used  *//* throught the code that must be reduced to empty preprocessor *//* replacements in the linear machine.                          *//*                                                              *//* #ifdef <segmeted machine>                                    *//* # define FAR far                                             *//* # define NEAR near                                           *//* #endif                                                       *//*                                                              *//* #ifdef <linear machine>                                      *//* # define FAR                                                 *//* # define NEAR                                                *//* #endif                                                       *//*                                                              *//****************************************************************/                                                        /* commandline overflow - removing -DI86 TE */#if defined(__TURBOC__)#define I86#define CDECL   cdecl#if __TURBOC__ > 0x202/* printf callers do the right thing for tc++ 1.01 but not tc 2.01 */#define VA_CDECL#else#define VA_CDECL cdecl#endif#define PASCAL  pascalvoid __int__(int);#ifndef FORSYSvoid __emit__(char, ...);#define disable() __emit__(0xfa)#define enable() __emit__(0xfb)#endif#elif defined	(_MSC_VER)#define I86#define asm __asm#pragma warning(disable: 4761) /* "integral size mismatch in argument;                                   conversion supplied" */#define CDECL   _cdecl#define VA_CDECL#define PASCAL  pascal#define __int__(intno) asm int intno;#define disable() asm cli#define enable() asm sti#define _CS getCS()static unsigned short __inline getCS(void){  asm mov ax, cs;}#define _SS getSS()static unsigned short __inline getSS(void){  asm mov ax, ss;}#elif defined(__WATCOMC__)      /* don't know a better way */#define I86#define __int__(intno) asm int intno;void disable(void);#pragma aux disable = "cli" modify exact [];void enable(void);#pragma aux enable = "sti" modify exact [];#define asm __asm#define far __far#define CDECL   __cdecl#define VA_CDECL#define PASCAL  pascal#define _CS getCS()unsigned short getCS(void);#pragma aux getCS = "mov dx,cs" value [dx] modify exact[dx];#define _SS getSS()unsigned short getSS(void);#pragma aux getSS = "mov dx,ss" value [dx] modify exact[dx];#if !defined(FORSYS) && !defined(EXEFLAT) && _M_IX86 >= 300#pragma aux default parm [ax dx cx] modify [ax dx es fs] /* min.unpacked size */#endif/* enable Possible loss of precision warning for compatibility with Borland */#pragma enable_message(130)#if _M_IX86 >= 300 || defined(M_I386)#define I386#endif#elif defined (_MYMC68K_COMILER_)#define MC68K#elif defined(__GNUC__)/* for warnings only ! */#define MC68K#else#error Unknown compilerWe might even deal with a pre-ANSI compiler. This will certainly not compile.#endif#ifdef I86#if _M_IX86 >= 300 || defined(M_I386)#define I386#elif _M_IX86 >= 100 || defined(M_I286)#define I186#endif#endif#ifdef MC68K#define far                     /* No far type          */#define interrupt               /* No interrupt type    */#define VOID           void#define FAR                     /* linear architecture  */#define NEAR                    /*    "        "        */#define INRPT          interrupt#define REG            register#define API            int      /* linear architecture  */#define NONNATIVE#define PARASIZE       4096     /* "paragraph" size     */#define CDECL#define PASCAL#ifdef __GNUC__#define CONST          const#define PROTOtypedef __SIZE_TYPE__  size_t;#else#define CONSTtypedef unsigned       size_t;#endif#endif#ifdef I86#define VOID           void#define FAR            far      /* segment architecture */#define NEAR           near     /*    "          "      */#define INRPT          interrupt#define CONST          const#define REG            register#define API            int far pascal   /* segment architecture */#define NATIVE#define PARASIZE       16       /* "paragraph" size     */typedef unsigned       size_t;#endif           /* functions, that are shared between C and ASM _must_               have a certain calling standard. These are declared              as 'ASMCFUNC', and is (and will be ?-) cdecl */#define ASMCFUNC CDECL#define ASMPASCAL PASCAL#define ASM ASMCFUNC/*                                                              *//* Boolean type & definitions of TRUE and FALSE boolean values  *//*                                                              */typedef int BOOL;#define FALSE           (1==0)#define TRUE            (1==1)/*                                                              *//* Common pointer types                                         *//*                                                              */#ifndef NULL#define NULL            0#endif/*                                                              *//* Convienence defines                                          *//*                                                              */#define FOREVER         while(TRUE)#ifndef max#define max(a,b)       (((a) > (b)) ? (a) : (b))#endif#ifndef min#define min(a,b)       (((a) < (b)) ? (a) : (b))#endif/*                                                              *//* Common byte, 16 bit and 32 bit types                         *//*                                                              */typedef char BYTE;typedef short WORD;typedef long DWORD;typedef unsigned char UBYTE;typedef unsigned short UWORD;typedef unsigned long UDWORD;typedef short SHORT;typedef unsigned int BITS;      /* for use in bit fields(!)     */typedef int COUNT;typedef unsigned int UCOUNT;typedef unsigned long ULONG;#ifdef WITHFAT32typedef unsigned long CLUSTER;#elsetypedef unsigned short CLUSTER;#endiftypedef unsigned short UNICODE;#if defined(STATICS) || defined(__WATCOMC__)#define STATIC static		 /* local calls inside module */#else#define STATIC#endif#ifdef UNIXtypedef char FAR *ADDRESS;#elsetypedef void FAR *ADDRESS;#endif#ifdef STRICTtypedef signed long LONG;#else#define LONG long#endif#define MK_UWORD(hib,lob) (((UWORD)(hib) <<  8u) | (UBYTE)(lob))#define MK_ULONG(hiw,low) (((ULONG)(hiw) << 16u) | (UWORD)(low))/* General far pointer macros                                           */#ifdef I86#ifndef MK_FP#if defined(__WATCOMC__)#define MK_FP(seg,ofs) 	      (((UWORD)(seg)):>((VOID *)(ofs)))#elif defined(__TURBOC__) && (__TURBOC__ > 0x202)#define MK_FP(seg,ofs)        ((void _seg *)(seg) + (void near *)(ofs))#else#define MK_FP(seg,ofs)        ((void FAR *)(((ULONG)(seg)<<16)|(UWORD)(ofs)))#endif#define pokeb(seg, ofs, b) (*((unsigned char far *)MK_FP(seg,ofs)) = b)#define poke(seg, ofs, w) (*((unsigned far *)MK_FP(seg,ofs)) = w)#define pokew poke#define pokel(seg, ofs, l) (*((unsigned long far *)MK_FP(seg,ofs)) = l)#define peekb(seg, ofs) (*((unsigned char far *)MK_FP(seg,ofs)))#define peek(seg, ofs) (*((unsigned far *)MK_FP(seg,ofs)))#define peekw peek#define peekl(seg, ofs) (*((unsigned long far *)MK_FP(seg,ofs)))#if defined(__TURBOC__) && (__TURBOC__ > 0x202)#define FP_SEG(fp)            ((unsigned)(void _seg *)(void far *)(fp))#else#define FP_SEG(fp)            ((unsigned)((ULONG)(VOID FAR *)(fp)>>16))#endif#define FP_OFF(fp)            ((unsigned)(fp))#endif#endif#ifdef MC68K#define MK_FP(seg,ofs)         ((VOID *)(&(((BYTE *)(size_t)(seg))[(ofs)])))#define FP_SEG(fp)             (0)#define FP_OFF(fp)             ((size_t)(fp))#endiftypedef VOID (FAR ASMCFUNC * intvec) (void);#define MK_PTR(type,seg,ofs) ((type FAR*) MK_FP (seg, ofs))#if __TURBOC__ > 0x202# define MK_SEG_PTR(type,seg) ((type _seg*) (seg))#else# define _seg FAR# define MK_SEG_PTR(type,seg) MK_PTR (type, seg, 0)#endif/*	this suppresses the warning	unreferenced parameter 'x'	and (hopefully) generates no code*/#define UNREFERENCED_PARAMETER(x) (void)x;#ifdef I86                      /* commandline overflow - removing /DPROTO TE */#define PROTO#endif#define LENGTH(x) (sizeof(x)/sizeof(x[0]))

⌨️ 快捷键说明

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