home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DP Tool Club 14
/
CD_ASCQ_14_0694.iso
/
maj
/
653
/
portable.h
< prev
next >
Wrap
C/C++ Source or Header
|
1994-04-03
|
5KB
|
167 lines
/*============================================================================
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