windows-nt/Source/XPSP1/NT/sdktools/ztools/inc/tools.h
2020-09-26 16:20:57 +08:00

234 lines
6.6 KiB
C

/*
* tools.h - Header file for accessing TOOLS.LIB routines
* includes stdio.h and ctype.h
*
* 4/14/86 daniel lipkie added U_* flags for upd return values
*
* 31-Jul-1986 mz Add Connect definitions
* 02-Dec-1986 bw Added DOS5 FindFirst buffer definition & A_ALL constant
* 21-Jan-1987 bw Add DWORD define
* Add PIPE_READ / PIPE_WRITE values
* Add new rspawn return typedef
* 27-Jan-1987 bw Make DOS 3 findType available to DOS 5
* 18-Aug-1987 bw change .max to .vmax to make C 5.x happy
* 08-Mar-1988 bw Copy WORD() and DWORD() to MAKE*()
* 10-Mar-1988 mz Add LOADDS/EXPORT definitions
* 12-May-1988 mz Add VECTOR typedef
* 19-Aug-1988 mz Conditionally define TRUE/FALSE
*
* 03-Aug-1990 davegi Changed findType.attr & findType date/time stamps
* from unsigned to unsigned short (OS/2 2.0)
*
* 02-Oct-1990 w-barry Modified the findType structure to use
* FILEFINDBUF4 structure.
*
* 16-Nov-1990 w-barry Updated the FILE_XXXXX defines to the Win32
* standard.
*
* 21-Nov-1990 w-barry Redefined FindType to use the Win32 structure.
*
*/
#include "config.h"
#if !defined (FALSE)
#define FALSE 0
#endif
#if !defined (TRUE)
#define TRUE (!FALSE)
#endif
#if MSDOS
#define PSEPSTR "\\"
#define PSEPCHR '\\'
#else
#define PSEPSTR "/"
#define PSEPCHR '/'
#endif
#if !defined( _FLAGTYPE_DEFINED_ )
typedef char flagType;
#endif
typedef long ptrType;
#define SETFLAG(l,f) ((l) |= (f))
#define TESTFLAG(v,f) (((v)&(f))!=0)
#define RSETFLAG(l,f) ((l) &= ~(f))
#define SHIFT(c,v) {c--; v++;}
#if !defined(CW)
#define WORD(h,l) ((LOW((h))<<8)|LOW((l)))
#define DWORD(h,l) ((DLOW(h)<<16|DLOW(l)))
#if !defined(MAKEWORD)
#define MAKEWORD(l, h) ((LOW((h))<<8)|LOW((l)))
#endif
#if !defined(MAKELONG)
#define MAKELONG(l, h) ((DLOW(h)<<16|DLOW(l)))
#endif
#endif
#define LOW(w) ((int)(w)&0xFF)
#define HIGH(w) LOW((int)(w)>>8)
#define DLOW(l) ((long)(l)&0xFFFF)
#define DHIGH(l) DLOW((long)(l)>>16)
#define POINTER(seg,off) ((((long)(seg))<<4)+ (long)(off))
#define FNADDR(f) (f)
#define SELECT if(FALSE){
#define CASE(x) }else if((x)){
#define OTHERWISE }else{
#define ENDSELECT }
#define MAXARG 128 /* obsolete and begin deleted */
#define MAXLINELEN 1024 /* longest line of input */
#define MAXPATHLEN 260 /* longest filename acceptable */
#define PIPE_READ 0
#define PIPE_WRITE 1
#define FILE_ATTRIBUTE_VOLUME_LABEL 0x00
/*
* This is the value returned by rspawnl. The PID field will always hold
* the process ID of the background process. The in* fields will hold the
* handles of the pipe attached to the new processes stdin, and the out*
* fields correspond to stdout. If input/output from/to a pipe has not been
* requested, the fields will be -1. The fields are ordered read-write
* to allow a call pipe(&val.inReadHndl) or pipe(&val.outreadHndl).
*/
struct spawnInfo {
unsigned PID;
int inReadHndl;
int inWriteHndl;
int outReadHndl;
int outWriteHndl;
};
/* buffer description for findfirst and findnext
When DOS 3 and DOS 5 version have the same field name, the field contains
the same information
DOS 5 version includes the directory handle
*/
/***
*
* Old Style def'n
*
struct findType {
unsigned type ;
unsigned dir_handle ;
unsigned short create_date ;
unsigned short create_time ;
unsigned short access_date ;
unsigned short access_time ;
unsigned short date ;
unsigned short time ;
long length ;
long alloc ;
unsigned long attr ;
unsigned char nam_len ;
char name[MAXPATHLEN] ;
};
*
* ...end old def'n.
*
**/
/*
* NT Def'n
*/
//struct findType {
// unsigned type; /* type of object being searched */
// unsigned dir_handle; /* Dir search handle for FindNext */
// FILEFINDBUF4 fbuf; /* Aligned structure for Cruiser and NT */
//};
struct findType {
unsigned type; /* type of object being searched */
HANDLE dir_handle; /* Dir search handle for FindNext */
long attr; /* File attributes */
WIN32_FIND_DATA fbuf; /* Aligned structure for Cruiser and NT */
};
#define DWORD_SHIFT (sizeof(DWORD) * 8)
#define FILESIZE(wfd) (((DWORDLONG)(wfd).nFileSizeHigh << DWORD_SHIFT) + (wfd).nFileSizeLow)
#define FT_DONE 0xFF /* closed handle */
#define FT_FILE 0x00 /* enumerating files */
#define FT_SERV 0x01 /* enumerating servers */
#define FT_SHAR 0x02 /* enumerating shares */
#define FT_MASK 0xFF /* mask for type */
#define FT_MIX 0x8000 /* mixed case supported flag */
struct DOS3findType {
char reserved[21]; /* reserved for start up */
char attr; /* attribute found */
unsigned time; /* time of last modify */
unsigned date; /* date of last modify */
long length; /* file size */
char name[13]; /* asciz file name */
};
typedef struct findType FIND;
typedef FIND near * NPFIND;
// These attributes are redef'd from the previous hard coded versions.
/* attributes */
//#define A_RO FILE_ATTRIBUTE_READONLY /* read only */
//#define A_H FILE_ATTRIBUTE_HIDDEN /* hidden */
//#define A_S FILE_ATTRIBUTE_SYSTEM /* system */
//#define A_V FILE_ATTRIBUTE_VOLUME_LABEL /* volume id */
//#define A_D FILE_ATTRIBUTE_DIRECTORY /* directory */
//#define A_A FILE_ATTRIBUTE_ARCHIVE /* archive */
#define A_MOD ( FILE_ATTRIBUTE_READONLY + FILE_ATTRIBUTE_HIDDEN + FILE_ATTRIBUTE_SYSTEM + FILE_ATTRIBUTE_ARCHIVE) /* changeable attributes */
//#define A_ALL (A_RO|A_H|A_S|A_V|A_D|A_A)
#define A_ALL ( FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_ARCHIVE | FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_VOLUME_LABEL )
#define HASATTR(a,v) TESTFLAG(a,v) /* true if a has attribute v */
extern char XLTab[], XUTab[];
struct vectorType {
int vmax; /* max the vector can hold */
int count; /* count of elements in vector */
UINT_PTR elem[1]; /* elements in vector */
};
typedef struct vectorType VECTOR;
#include "parse.h"
#include "exe.h"
#include "fcb.h"
#include "dir.h"
#include "times.h"
#include "ttypes.h"
/* return flags for upd */
#define U_DRIVE 0x8
#define U_PATH 0x4
#define U_NAME 0x2
#define U_EXT 0x1
/* Connect definitions */
#define REALDRIVE 0x8000
#define ISTMPDRIVE(x) (((x)&REALDRIVE)==0)
#define TOKTODRV(x) ((x)&~REALDRIVE)
/* Heap Checking return codes */
#define HEAPOK 0
#define HEAPBADBEGIN -1
#define HEAPBADNODE -2