From 7e0f021a9aec35fd8e6725e87e3313b101d26f5e Mon Sep 17 00:00:00 2001 From: Tobias Klauser Date: Sun, 27 Jan 2008 11:37:44 +0100 Subject: Initial import (2.0.2-6) --- reference/C/CONTRIB/SNIP/portable.h | 166 ++++++++++++++++++++++++++++++++++++ 1 file changed, 166 insertions(+) create mode 100755 reference/C/CONTRIB/SNIP/portable.h (limited to 'reference/C/CONTRIB/SNIP/portable.h') diff --git a/reference/C/CONTRIB/SNIP/portable.h b/reference/C/CONTRIB/SNIP/portable.h new file mode 100755 index 0000000..5acb46d --- /dev/null +++ b/reference/C/CONTRIB/SNIP/portable.h @@ -0,0 +1,166 @@ +/*============================================================================ + + portable.h v1.00 Written by Scott Robert Ladd. + + _MSC_VER Microsoft C 6.0 and later + _QC Microsoft Quick C 2.51 and later + __TURBOC__ Borland Turbo C, Turbo C++, and Borland C++ + __BORLANDC__ Borland C++ + __ZTC__ Zortech C++ and Symantec C++ + __SC__ Symantec C++ + __WATCOM__ WATCOM C + __POWERC Mix Power C + + Revised: + 09/14/93 Fred Cole Moved MK_FP() macro to end of file to avoid + redefinition error when dos.h gets included + at the in/outport definitions for __TURBOC__ + 09/15/93 Thad Smith Add conditional code for TC 2.01 + Fix findfirst/findnext support for ZTC 3.0 + 10/15/93 Bob Stout Revise find first/next support + 04/03/94 Bob Stout Add Power C support, FAR +============================================================================*/ + + +/* prevent multiple inclusions of this header file */ + +#if !defined(PORTABLE_H) +#define PORTABLE_H + +/* +** Correct far pointer syntax +*/ + +#if defined(__POWERC) || (defined(__TURBOC__) && !defined(__BORLANDC__)) + #define FAR far +#else + #define FAR _far +#endif + +/*---------------------------------------------------------------------------- + Directory search macros and data structures + + DOSFileData MS-DOS file data structure + FIND_FIRST MS-DOS function 0x4E -- find first file matchine spec + FIND_NEXT MS-DOS function 0x4F -- find subsequent files +----------------------------------------------------------------------------*/ + +/* make sure the structure is packed on byte boundary */ + +#if defined(_MSC_VER) || defined(_QC) || defined(__WATCOM__) + #pragma pack(1) +#elif defined(__ZTC__) + #pragma ZTC align 1 +#elif defined(__TURBOC__) && (__TURBOC__ > 0x202) + #pragma option -a- +#endif + +/* use this structure in place of compiler-defined file structure */ + +typedef struct { + char reserved[21]; + char attrib; + unsigned time; + unsigned date; + long size; + char name[13]; + } DOSFileData; + +/* set structure alignment to default */ + +#if defined (_MSC_VER) || defined(_QC) || defined(__WATCOMC__) + #pragma pack() +#elif defined (__ZTC__) + #pragma ZTC align +#elif defined(__TURBOC__) && (__TURBOC__ > 0x202) + #pragma option -a. +#endif + +/* include proper header files and create macros */ + +#if defined (_MSC_VER) || defined(_QC) || defined(__WATCOMC) + #include "direct.h" + #define FIND_FIRST(spec,attr,buf) _dos_findfirst(spec,attr,\ + (struct find_t *)buf) + #define FIND_NEXT(buf) _dos_findnext((struct find_t *)buf) +#elif defined (__TURBOC__) + #include "dir.h" + #define FIND_FIRST(spec,attr,buf) findfirst(spec,(struct ffblk *)buf,attr) + #define FIND_NEXT(buf) findnext((struct ffblk *)buf) +#elif defined (__ZTC__) + #include "dos.h" + #define FIND_FIRST(spec,attr,buf) _dos_findfirst(spec,attr,\ + (struct find_t *)buf) + #define FIND_NEXT(buf) _dos_findnext((struct find_t *)buf) +#endif + +/*---------------------------------------------------------------------------- + I/O Port Macros + + IN_PORT read byte from I/O port + IN_PORTW read word from I/O port + OUT_PORT write byte to I/O port + OUT_PORTW write word to I/O port +----------------------------------------------------------------------------*/ + +#if defined(__TURBOC__) + #include "dos.h" + #define IN_PORT(port) inportb(port) + #define IN_PORTW(port) inport(port) + #define OUT_PORT(port, val) outportb(port, val) + #define OUT_PORTW(port, val) outport(port, val) +#else + #include "conio.h" + + #define IN_PORT(port) inp(port) + #define IN_PORTW(port) inpw(port) + #define OUT_PORT(port, val) outp(port, val) + #define OUT_PORTW(port, val) outpw(port, val) + +/*---------------------------------------------------------------------------- + Borland pseudo register macros + + These macros replace references to Borland's pseudo register + variables and geninterrup() funciton with traditional struct + REGS/int86 references. +----------------------------------------------------------------------------*/ + +#if !defined(__TURBOC__) + #include "dos.h" + + extern union REGS CPURegs; + + #define _AX CPURegs.x.ax + #define _BX CPURegs.x.bx + #define _CX CPURegs.x.cx + #define _DX CPURegs.x.dx + + #define _AH CPURegs.h.ah + #define _AL CPURegs.h.al + #define _BH CPURegs.h.bh + #define _BL CPURegs.h.bl + #define _CH CPURegs.h.ch + #define _CL CPURegs.h.cl + #define _DH CPURegs.h.dh + #define _DL CPURegs.h.dl + + #define geninterrupt(n) int86(n,&CPURegs,&CPURegs); + #define O_DENYALL 0x10 + #define O_DENYWRITE 0x20 + #define O_DENYREAD 0x30 + #define O_DENYNONE 0x40 +#endif + +#endif + +/*---------------------------------------------------------------------------- + Pointer-related macros + + MK_FP creates a far pointer from segment and offset values +----------------------------------------------------------------------------*/ + +#if !defined(MK_FP) + #define MK_FP(seg,off) ((void FAR *)(((long)(seg) << 16)|(unsigned)(off))) +#endif + +#endif -- cgit v1.2.3-54-g00ecf