234 lines
6.6 KiB
C
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
|