Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

1425 lines
52 KiB

/***************************************************************************\
*
* Module Name: BSEDOS.H
*
* OS/2 Base Include File
*
* Copyright (c) International Business Machines Corporation 1987
* Copyright (c) Microsoft Corporation 1987
*
* =======================================================================
*
* Subcomponents marked with "+" are partially included by default
*
* #define: To include:
*
* + INCL_DOSPROCESS Process and thread support
* INCL_DOSINFOSEG InfoSeg support
* + INCL_DOSFILEMGR File Management
* + INCL_DOSMEMMGR Memory Management
* + INCL_DOSSEMAPHORES Semaphore support
* + INCL_DOSDATETIME Date/Time and Timer support
* INCL_DOSMODULEMGR Module manager
* + INCL_DOSRESOURCES Resource support
* INCL_DOSNLS National Language Support
* INCL_DOSSIGNALS Signals
* INCL_DOSMISC Miscellaneous
* INCL_DOSMONITORS Monitors
* INCL_DOSQUEUES Queues
* INCL_DOSSESMGR Session Manager Support
* INCL_DOSDEVICES Device specific, ring 2 support
* INCL_DOSNMPIPES Named Pipes Support
* INCL_DOSPROFILE DosProfile API
*
\***************************************************************************/
#define INCL_DOSINCLUDED
#ifdef INCL_DOS
#define INCL_DOSPROCESS
#define INCL_DOSINFOSEG
#define INCL_DOSFILEMGR
#define INCL_DOSMEMMGR
#define INCL_DOSSEMAPHORES
#define INCL_DOSDATETIME
#define INCL_DOSMODULEMGR
#define INCL_DOSRESOURCES
#define INCL_DOSNLS
#define INCL_DOSSIGNALS
#define INCL_DOSMISC
#define INCL_DOSMONITORS
#define INCL_DOSQUEUES
#define INCL_DOSSESMGR
#define INCL_DOSDEVICES
#define INCL_DOSNMPIPES
#define INCL_DOSPROFILE
#endif /* INCL_DOS */
#ifdef INCL_ERRORS
#define INCL_DOSERRORS
#endif /* INCL_ERRORS */
#if (defined(INCL_DOSPROCESS) || !defined(INCL_NOCOMMON))
/*** General services */
USHORT APIENTRY DosBeep(USHORT usFrequency, USHORT usDuration);
/*** Process and Thread support */
VOID APIENTRY DosExit(USHORT fTerminate, USHORT usExitCode);
/* DosExit codes */
#define EXIT_THREAD 0
#define EXIT_PROCESS 1
#endif /* common INCL_DOSPROCESS definitions */
#ifdef INCL_DOSPROCESS
typedef struct _PIDINFO { /* pidi */
PID pid;
TID tid;
PID pidParent;
} PIDINFO;
typedef PIDINFO FAR *PPIDINFO;
typedef VOID (FAR *PFNTHREAD)(VOID);
USHORT APIENTRY DosCreateThread(PFNTHREAD pfnFun, PTID pTid, PBYTE pbStack);
USHORT APIENTRY DosResumeThread(TID tid);
USHORT APIENTRY DosSuspendThread(TID tid);
/* Action code values */
#define DCWA_PROCESS 0
#define DCWA_PROCESSTREE 1
/* Wait option values */
#define DCWW_WAIT 0
#define DCWW_NOWAIT 1
typedef struct _RESULTCODES { /* resc */
USHORT codeTerminate;
USHORT codeResult;
} RESULTCODES;
typedef RESULTCODES FAR *PRESULTCODES;
USHORT APIENTRY DosCwait(USHORT fScope, USHORT fWait, PRESULTCODES prescResults,
PPID ppidProcess, PID pidWaitProcess);
USHORT APIENTRY DosSleep(ULONG ulTime);
/* codeTerminate values (also passed to ExitList routines) */
#define TC_EXIT 0
#define TC_HARDERROR 1
#define TC_TRAP 2
#define TC_KILLPROCESS 3
typedef VOID (PASCAL FAR *PFNEXITLIST)(USHORT);
USHORT APIENTRY DosEnterCritSec(VOID);
USHORT APIENTRY DosExitCritSec(VOID);
USHORT APIENTRY DosExitList(USHORT fFnCode, PFNEXITLIST pfnFunction);
/* DosExitList functions */
#define EXLST_ADD 1
#define EXLST_REMOVE 2
#define EXLST_EXIT 3
USHORT APIENTRY DosExecPgm(PCHAR pchFailName, SHORT cbFailName,
USHORT fExecFlags, PSZ pszArgs, PSZ pszEnv,
PRESULTCODES prescResults, PSZ pszPgmName);
/* DosExecPgm functions */
#define EXEC_SYNC 0
#define EXEC_ASYNC 1
#define EXEC_ASYNCRESULT 2
#define EXEC_TRACE 3
#define EXEC_BACKGROUND 4
#define EXEC_LOAD 5
USHORT APIENTRY DosGetPID(PPIDINFO ppidInfo);
USHORT APIENTRY DosGetPPID(USHORT pidChild, PUSHORT ppidParent);
USHORT APIENTRY DosGetPrty(USHORT usScope, PUSHORT pusPriority, USHORT pid);
USHORT APIENTRY DosSetPrty(USHORT usScope, USHORT fPrtyClass, SHORT sChange,
USHORT id);
/* Priority scopes */
#define PRTYS_PROCESS 0
#define PRTYS_PROCESSTREE 1
#define PRTYS_THREAD 2
/* Priority classes */
#define PRTYC_NOCHANGE 0
#define PRTYC_IDLETIME 1
#define PRTYC_REGULAR 2
#define PRTYC_TIMECRITICAL 3
#define PRTYC_FOREGROUNDSERVER 4
/* Priority deltas */
#define PRTYD_MINIMUM -31
#define PRTYD_MAXIMUM 31
USHORT APIENTRY DosKillProcess(USHORT usScope, PID pidProcess);
#define DKP_PROCESSTREE 0
#define DKP_PROCESS 1
#endif /* INCL_DOSPROCESS */
/*** InfoSeg support */
#ifdef INCL_DOSINFOSEG
/* Global Information Segment */
typedef struct _GINFOSEG { /* gis */
ULONG time;
ULONG msecs;
UCHAR hour;
UCHAR minutes;
UCHAR seconds;
UCHAR hundredths;
USHORT timezone;
USHORT cusecTimerInterval;
UCHAR day;
UCHAR month;
USHORT year;
UCHAR weekday;
UCHAR uchMajorVersion;
UCHAR uchMinorVersion;
UCHAR chRevisionLetter;
UCHAR sgCurrent;
UCHAR sgMax;
UCHAR cHugeShift;
UCHAR fProtectModeOnly;
USHORT pidForeground;
UCHAR fDynamicSched;
UCHAR csecMaxWait;
USHORT cmsecMinSlice;
USHORT cmsecMaxSlice;
USHORT bootdrive;
UCHAR amecRAS[32];
UCHAR csgWindowableVioMax;
UCHAR csgPMMax;
} GINFOSEG;
typedef GINFOSEG FAR *PGINFOSEG;
/* Local Information Segment */
typedef struct _LINFOSEG { /* lis */
PID pidCurrent;
PID pidParent;
USHORT prtyCurrent;
TID tidCurrent;
USHORT sgCurrent;
UCHAR rfProcStatus;
UCHAR dummy1;
BOOL fForeground;
UCHAR typeProcess;
UCHAR dummy2;
SEL selEnvironment;
USHORT offCmdLine;
USHORT cbDataSegment;
USHORT cbStack;
USHORT cbHeap;
HMODULE hmod;
SEL selDS;
} LINFOSEG;
typedef LINFOSEG FAR *PLINFOSEG;
/* Process Type codes (local information segment typeProcess field) */
#define PT_FULLSCREEN 0 /* Full screen application */
#define PT_REALMODE 1 /* Real mode process */
#define PT_WINDOWABLEVIO 2 /* VIO windowable application */
#define PT_PM 3 /* Presentation Manager application */
#define PT_DETACHED 4 /* Detached application */
/* Process Status Flag definitions (local info seg rfProcStatus field) */
#define PS_EXITLIST 1 /* Thread is in exitlist routine */
USHORT APIENTRY DosGetInfoSeg(PSEL pselGlobal, PSEL pselLocal);
/* Helper macros used to convert selector to PINFOSEG or LINFOSEG */
#define MAKEPGINFOSEG(sel) ((PGINFOSEG)MAKEP(sel, 0))
#define MAKEPLINFOSEG(sel) ((PLINFOSEG)MAKEP(sel, 0))
#endif /* INCL_DOSINFOSEG */
#ifndef INCL_SAADEFS
/*
* CCHMAXPATH is the maximum fully qualified path name length including
* the drive letter, colon, backslashes and terminating NULL.
*/
#define CCHMAXPATH 260
/*
* CCHMAXPATHCOMP is the maximum individual path component name length
* including a terminating NULL.
*/
#define CCHMAXPATHCOMP 256
#endif /* !INCL_SAADEFS */
#if (defined(INCL_DOSFILEMGR) || !defined(INCL_NOCOMMON))
/*** File manager */
/* DosSetFilePtr() file position codes */
#define FILE_BEGIN 0x0000 /* relative to beginning of file */
#define FILE_CURRENT 0x0001 /* relative to current fptr position*/
#define FILE_END 0x0002 /* relative to end of file */
/* DosFindFirst/Next Directory handle types */
#define HDIR_SYSTEM 0x0001 /* Use system handle (1) */
#define HDIR_CREATE 0xFFFF /* Allocate a new, unused handle */
/* DosCopy control bits - may be or'ed together */
#define DCPY_EXISTING 0x00001 /* Copy even if target exists */
#define DCPY_APPEND 0x00002 /* Append to existing file, don't replace*/
/* Dosopen/DosQFHandState/DosQueryFileInfo et al file attributes; also */
/* known as Dso File Mode bits... */
#define FILE_NORMAL 0x0000
#define FILE_READONLY 0x0001
#define FILE_HIDDEN 0x0002
#define FILE_SYSTEM 0x0004
#define FILE_DIRECTORY 0x0010
#define FILE_ARCHIVED 0x0020
/* DosOpen() actions */
#define FILE_EXISTED 0x0001
#define FILE_CREATED 0x0002
#define FILE_TRUNCATED 0x0003
/* DosOpen() open flags */
#define FILE_OPEN 0x0001
#define FILE_TRUNCATE 0x0002
#define FILE_CREATE 0x0010
/* applies if file already exists */
#define OPEN_ACTION_FAIL_IF_EXISTS 0x0000 /* ---- ---- ---- 0000 */
#define OPEN_ACTION_OPEN_IF_EXISTS 0x0001 /* ---- ---- ---- 0001 */
#define OPEN_ACTION_REPLACE_IF_EXISTS 0x0002 /* ---- ---- ---- 0010 */
/* applies if file does not exist */
#define OPEN_ACTION_FAIL_IF_NEW 0x0000 /* ---- ---- 0000 ---- */
#define OPEN_ACTION_CREATE_IF_NEW 0x0010 /* ---- ---- 0001 ---- */
/* DosOpen/DosSetFHandState flags */
#define OPEN_ACCESS_READONLY 0x0000 /* ---- ---- ---- -000 */
#define OPEN_ACCESS_WRITEONLY 0x0001 /* ---- ---- ---- -001 */
#define OPEN_ACCESS_READWRITE 0x0002 /* ---- ---- ---- -010 */
#define OPEN_SHARE_DENYREADWRITE 0x0010 /* ---- ---- -001 ---- */
#define OPEN_SHARE_DENYWRITE 0x0020 /* ---- ---- -010 ---- */
#define OPEN_SHARE_DENYREAD 0x0030 /* ---- ---- -011 ---- */
#define OPEN_SHARE_DENYNONE 0x0040 /* ---- ---- -100 ---- */
#define OPEN_FLAGS_NOINHERIT 0x0080 /* ---- ---- 1--- ---- */
#define OPEN_FLAGS_NO_LOCALITY 0x0000 /* ---- -000 ---- ---- */
#define OPEN_FLAGS_SEQUENTIAL 0x0100 /* ---- -001 ---- ---- */
#define OPEN_FLAGS_RANDOM 0x0200 /* ---- -010 ---- ---- */
#define OPEN_FLAGS_RANDOMSEQUENTIAL 0x0300 /* ---- -011 ---- ---- */
#define OPEN_FLAGS_NO_CACHE 0x1000 /* ---1 ---- ---- ---- */
#define OPEN_FLAGS_FAIL_ON_ERROR 0x2000 /* --1- ---- ---- ---- */
#define OPEN_FLAGS_WRITE_THROUGH 0x4000 /* -1-- ---- ---- ---- */
#define OPEN_FLAGS_DASD 0x8000 /* 1--- ---- ---- ---- */
/* DosSearchPath() constants */
#define SEARCH_PATH 0x0000
#define SEARCH_CUR_DIRECTORY 0x0001
#define SEARCH_ENVIRONMENT 0x0002
#define SEARCH_IGNORENETERRS 0x0004
/*
* DosFileIO
*/
/* File IO command words */
#define FIO_LOCK 0 /* Lock Files */
#define FIO_UNLOCK 1 /* Unlock Files */
#define FIO_SEEK 2 /* Seek (set file ptr) */
#define FIO_READ 3 /* File Read */
#define FIO_WRITE 4 /* File Write */
/* Lock Sharing Modes */
#define FIO_NOSHARE 0 /* None */
#define FIO_SHAREREAD 1 /* Read-Only */
typedef struct _FIOLOCKCMD { /* FLC FileLockCmd prefix */
USHORT usCmd; /* Cmd = FIO_LOCK */
USHORT cLockCnt; /* Lock records that follow */
ULONG cTimeOut; /* in Msec */
} FIOLOCKCMD;
typedef FIOLOCKCMD FAR *PFIOLOCKCMD;
typedef struct _FIOLOCKREC { /* FLR FileLockRecord */
USHORT fShare; /* FIO_NOSHARE or FIO_SHAREREAD */
ULONG cbStart; /* Starting offset for lock region */
ULONG cbLength; /* Length of lock region */
} FIOLOCKREC;
typedef FIOLOCKREC FAR *PFIOLOCKREC;
typedef struct _FIOUNLOCKCMD { /* FUC FileUnlockCmd prefix */
USHORT usCmd; /* Cmd = FIO_UNLOCK */
USHORT cUnlockCnt; /* Unlock records that follow */
} FIOUNLOCKCMD;
typedef FIOUNLOCKCMD FAR *PFIOUNLOCKCMD;
typedef struct _FIOUNLOCKREC { /* FUR FileUnlockRecord */
ULONG cbStart; /* Starting offset for unlock region */
ULONG cbLength; /* Length of unlock region */
} FIOUNLOCKREC;
typedef FIOUNLOCKREC FAR *PFIOUNLOCKREC;
typedef struct _FIOSEEKCMD { /* Seek command structure */
USHORT usCmd; /* Cmd = FIO_SEEK */
USHORT fsMethod; /* One of&gml FPM_BEGINNING, FPM_CURRENT, */
/* or FPM_END */
ULONG cbDistance; /* Byte offset for seek */
ULONG cbNewPosition; /* Bytes from start of file after seek */
} FIOSEEKCMD;
typedef FIOSEEKCMD FAR *PFIOSEEKCMD;
typedef struct _FIOREADWRITE { /* RWC Read&Write command structure */
USHORT usCmd; /* Cmd = FIO_READ or FIO_WRITE */
PVOID pbBuffer; /* Pointer to data buffer */
USHORT cbBufferLen; /* Bytes in buffer or max size */
USHORT cbActualLen; /* Bytes actually read/written */
} FIOREADWRITE;
typedef FIOREADWRITE FAR *PFIOREADWRITE;
/***
* EA Info Levels & Find First/Next
* API's: DosFindFirst, DosQueryFileInfo, DosQueryPathInfo, DosSetFileInfo,
* DosSetPathInfo
*/
/* File info levels : All listed API's */
#define FIL_STANDARD 1 /* Info level 1, standard file info */
#define FIL_QUERYEASIZE 2 /* Level 2, return Full EA size */
#define FIL_QUERYEASFROMLIST 3 /* Level 3, return requested EA's */
/* File info levels: Dos...PathInfo only */
#define FIL_QUERYFULLNAME 5 /* Level 5, return fully qualified */
/* name of file */
#define FIL_NAMEISVALID 6 /* Level 6, check validity of */
/* file/path name for this FSD */
/* DosFindNotifyFirst() */
#define FNOTIL_STANDARD 1 /* Find-Notify Info level 1&gml Return */
/* standard directory change info */
/* DosFsAttach() */
/* Attact or detach */
#define FSATTACH 0 /* Attach file server */
#define FSDETACH 1 /* Detach file server */
/* DosFsCtl() */
/* Routing type */
#define FSCTL_HANDLE 1 /* File Handle directs req routing */
#define FSCTL_PATHNAME 2 /* Path Name directs req routing */
#define FSCTL_FSDNAME 3 /* FSD Name directs req routing */
/* DosQueryFSAttach() */
/* Information level types (defines method of query) */
#define FSAIL_QUERYNAME 1 /* Return data for a Drive or Device */
#define FSAIL_DEVNUMBER 2 /* Return data for Ordinal Device # */
#define FSAIL_DRVNUMBER 3 /* Return data for Ordinal Drive # */
/* Item types (from data structure item "iType") */
#define FSAT_CHARDEV 1 /* Resident character device */
#define FSAT_PSEUDODEV 2 /* Pusedu-character device */
#define FSAT_LOCALDRV 3 /* Local drive */
#define FSAT_REMOTEDRV 4 /* Remote drive attached to FSD */
typedef struct _FSQBUFFER { /* Data structure for QFSAttach */
USHORT iType; /* Item type */
USHORT cbName; /* Length of item name, sans NULL */
UCHAR szName[1]; /* ASCIIZ item name */
USHORT cbFSDName; /* Length of FSD name, sans NULL */
UCHAR szFSDName[1]; /* ASCIIZ FSD name */
USHORT cbFSAData; /* Length of FSD Attach data returned */
UCHAR rgFSAData[1]; /* FSD Attach data from FSD */
} FSQBUFFER;
typedef FSQBUFFER FAR *PFSQBUFFER;
/*
* File System Drive Information&gml DosQueryFSInfo DosSetFSInfo
*/
/* FS Drive Info Levels */
#define FSIL_ALLOC 1 /* Drive allocation info (Query only) */
#define FSIL_VOLSER 2 /* Drive Volume/Serial information */
/* DosQueryFHType() */
/* Handle classes (low 8 bits of Handle Type) */
#define FHT_DISKFILE 0x0000 /* Disk file handle */
#define FHT_CHRDEV 0x0001 /* Character device handle */
#define FHT_PIPE 0x0002 /* Pipe handle */
/* Handle bits (high 8 bits of Handle Type) */
#define FHB_DSKREMOTE 0x8000 /* Remote disk */
#define FHB_CHRDEVREMOTE 0x8000 /* Remote character device */
#define FHB_PIPEREMOTE 0x8000 /* Remote pipe */
typedef SHANDLE HFILE; /* hf */
typedef HFILE FAR *PHFILE;
#ifndef INCL_SAADEFS
/* File time and date types */
typedef struct _FTIME { /* ftime */
unsigned twosecs : 5;
unsigned minutes : 6;
unsigned hours : 5;
} FTIME;
typedef FTIME FAR *PFTIME;
typedef struct _FDATE { /* fdate */
unsigned day : 5;
unsigned month : 4;
unsigned year : 7;
} FDATE;
typedef FDATE FAR *PFDATE;
typedef struct _FILEFINDBUF { /* findbuf */
FDATE fdateCreation;
FTIME ftimeCreation;
FDATE fdateLastAccess;
FTIME ftimeLastAccess;
FDATE fdateLastWrite;
FTIME ftimeLastWrite;
ULONG cbFile;
ULONG cbFileAlloc;
USHORT attrFile;
UCHAR cchName;
CHAR achName[CCHMAXPATHCOMP];
} FILEFINDBUF;
typedef FILEFINDBUF FAR *PFILEFINDBUF;
typedef struct _FILEFINDBUF2 { /* findbuf2 */
FDATE fdateCreation;
FTIME ftimeCreation;
FDATE fdateLastAccess;
FTIME ftimeLastAccess;
FDATE fdateLastWrite;
FTIME ftimeLastWrite;
ULONG cbFile;
ULONG cbFileAlloc;
USHORT attrFile;
ULONG cbList;
UCHAR cchName;
CHAR achName[CCHMAXPATHCOMP];
} FILEFINDBUF2;
typedef FILEFINDBUF2 FAR *PFILEFINDBUF2;
/* extended attribute structures */
typedef struct _GEA { /* gea */
BYTE cbName; /* name length not including NULL */
CHAR szName[1]; /* attribute name */
} GEA;
typedef GEA far *PGEA;
typedef struct _GEALIST { /* geal */
ULONG cbList; /* total bytes of structure inc full list */
GEA list[1]; /* variable length GEA structures */
} GEALIST;
typedef GEALIST far * PGEALIST;
typedef struct _FEA { /* fea */
BYTE fEA; /* flags */
BYTE cbName; /* name length not including NULL */
USHORT cbValue; /* value length */
} FEA;
typedef FEA far *PFEA;
/* flags for _FEA.fEA */
#define FEA_NEEDEA 0x80 /* need EA bit */
typedef struct _FEALIST { /* feal */
ULONG cbList; /* total bytes of structure inc full list */
FEA list[1]; /* variable length FEA structures */
} FEALIST;
typedef FEALIST far * PFEALIST;
typedef struct _EAOP { /* eaop */
PGEALIST fpGEAList; /* general EA list */
PFEALIST fpFEAList; /* full EA list */
ULONG oError;
} EAOP;
typedef EAOP far * PEAOP;
/*
* Equates for EA types
*
* Values 0xFFFE thru 0x8000 are reserved.
* Values 0x0000 thru 0x7fff are user definable.
* Value 0xFFFC is not used
*/
#define EAT_BINARY 0xFFFE /* length preceeded binary */
#define EAT_ASCII 0xFFFD /* length preceeded ASCII */
#define EAT_BITMAP 0xFFFB /* length preceeded bitmap */
#define EAT_METAFILE 0xFFFA /* length preceeded metafile */
#define EAT_ICON 0xFFF9 /* length preceeded icon */
#define EAT_EA 0xFFEE /* length preceeded ASCII extended attribute */
/* name of associated data (#include)*/
#define EAT_MVMT 0xFFDF /* multi-valued, multi-typed field */
#define EAT_MVST 0xFFDE /* multi-valued, single-typed field */
#define EAT_ASN1 0xFFDD /* ASN.1 field */
#endif /* !INCL_SAADEFS */
USHORT APIENTRY DosOpen(PSZ pszFname, PHFILE phfOpen, PUSHORT pusAction,
ULONG ulFSize, USHORT usAttr, USHORT fsOpenFlags,
USHORT fsOpenMode, ULONG ulReserved);
USHORT APIENTRY DosOpen2(PSZ pszFname, PHFILE phf, PUSHORT pusAction,
ULONG ulFSize, USHORT usAttr, USHORT usOpenFlags,
ULONG usOpenMode, PEAOP pvEABuf, ULONG ulReserved);
USHORT APIENTRY DosClose(HFILE hf);
USHORT APIENTRY DosRead(HFILE hf, PVOID pBuf, USHORT cbBuf,
PUSHORT pcbBytesRead);
USHORT APIENTRY DosWrite(HFILE hf, PVOID bBuf, USHORT cbBuf,
PUSHORT pcbBytesWritten);
USHORT APIENTRY DosOplockRelease(ULONG cookie, USHORT procBlkKey);
USHORT APIENTRY DosOplockWait(PULONG pcookie, PULONG procBlkKey);
/* File system shutdown */
USHORT APIENTRY DosShutdown(ULONG ulReserved);
/* File time and date types */
typedef struct _FILESTATUS { /* fsts */
FDATE fdateCreation;
FTIME ftimeCreation;
FDATE fdateLastAccess;
FTIME ftimeLastAccess;
FDATE fdateLastWrite;
FTIME ftimeLastWrite;
ULONG cbFile;
ULONG cbFileAlloc;
USHORT attrFile;
} FILESTATUS;
typedef FILESTATUS FAR *PFILESTATUS;
typedef struct _FILESTATUS2 { /* fsts2 */
FDATE fdateCreation;
FTIME ftimeCreation;
FDATE fdateLastAccess;
FTIME ftimeLastAccess;
FDATE fdateLastWrite;
FTIME ftimeLastWrite;
ULONG cbFile;
ULONG cbFileAlloc;
USHORT attrFile;
ULONG cbList;
} FILESTATUS2;
typedef FILESTATUS2 FAR *PFILESTATUS2;
typedef struct _FSALLOCATE { /* fsalloc */
ULONG idFileSystem;
ULONG cSectorUnit;
ULONG cUnit;
ULONG cUnitAvail;
USHORT cbSector;
} FSALLOCATE;
typedef FSALLOCATE FAR *PFSALLOCATE;
typedef struct _VOLUMELABEL { /* vol */
BYTE cch;
CHAR szVolLabel[12];
} VOLUMELABEL;
typedef VOLUMELABEL FAR *PVOLUMELABEL;
typedef struct _FSINFO { /* fsinf */
FDATE fdateCreation;
FTIME ftimeCreation;
VOLUMELABEL vol;
} FSINFO;
typedef FSINFO FAR *PFSINFO;
/* HANDTYPE values */
#define HANDTYPE_FILE 0x0000
#define HANDTYPE_DEVICE 0x0001
#define HANDTYPE_PIPE 0x0002
#define HANDTYPE_NETWORK 0x8000
typedef struct _FILELOCK { /* flock */
LONG lOffset;
LONG lRange;
} FILELOCK;
typedef FILELOCK FAR *PFILELOCK;
typedef SHANDLE HDIR; /* hdir */
typedef HDIR FAR *PHDIR;
USHORT APIENTRY DosDelete(PSZ pszFName, ULONG ulReserverd);
USHORT APIENTRY DosDupHandle(HFILE hfOld, PHFILE phfNew);
USHORT APIENTRY DosQFHandState(HFILE hf, PUSHORT pfsOpenMode);
USHORT APIENTRY DosSetFHandState(HFILE hf, USHORT fsState);
USHORT APIENTRY DosQHandType(HFILE hf, PUSHORT pfsType, PUSHORT pusDevAttr);
USHORT APIENTRY DosReadAsync (HFILE hf, PULONG hsemRam, PUSHORT pusErrCode,
PVOID pBuf, USHORT cbBuf, PUSHORT pcbBytesRead);
USHORT APIENTRY DosWriteAsync(HFILE hf, PULONG hsemRam, PUSHORT pusErrCode,
PVOID pBuf, USHORT cbBuf, PUSHORT pcbBytesWritten);
USHORT APIENTRY DosFindFirst(PSZ pszFSpec, PHDIR phdir, USHORT usAttr,
PFILEFINDBUF pffb, USHORT cbBuf, PUSHORT pcSearch,
ULONG ulReserved);
USHORT APIENTRY DosFindFirst2(PSZ pszFSpec, PHDIR phdir, USHORT usAttr,
PVOID pBuf, USHORT cbBuf, PUSHORT pcSearch,
USHORT usInfoLevel, ULONG ulReserved);
USHORT APIENTRY DosFindNext(HDIR hdir, PFILEFINDBUF pffb, USHORT cbBuf,
PUSHORT pcSearch);
USHORT APIENTRY DosFindClose(HDIR hdir);
USHORT APIENTRY DosFindNotifyFirst(PSZ pszPath, PHDIR hdir, USHORT usAttr,
PBYTE pBuf, USHORT cbBuf, PUSHORT pcChg,
USHORT usInfoLevel, ULONG ulTimeOut,
ULONG ulReserved);
USHORT APIENTRY DosFindNotifyNext(HDIR hDir, PVOID pBuf, USHORT cbBuf,
PUSHORT pcChg, ULONG ulTimeOut);
USHORT APIENTRY DosFindNotifyClose(HDIR hDir);
USHORT APIENTRY DosFSAttach(PSZ pszDevName, PSZ pszFSD, PBYTE pData,
USHORT cbData, USHORT fsOp, ULONG ulReserved);
USHORT APIENTRY DosQFSAttach(PSZ pszDev, USHORT usOrdinal, USHORT usInfoLevel,
PBYTE pFSAttBuf, PUSHORT cbBuf, ULONG ulReserved);
USHORT APIENTRY DosFSCtl(PBYTE pData, USHORT cbData, PUSHORT pcbData,
PBYTE pParms, USHORT cbParms, PUSHORT pcbParms,
USHORT usFunCode, PSZ pszRoute, HFILE hf,
USHORT usRouteMethod, ULONG ulReserved);
USHORT APIENTRY DosNewSize(HFILE hf, ULONG ulNewSize);
USHORT APIENTRY DosBufReset(HFILE hf);
USHORT APIENTRY DosChgFilePtr(HFILE hf, LONG lOffset, USHORT fsMethod,
PULONG pulNewOffset);
USHORT APIENTRY DosSetFilePtr(HFILE hf, LONG lOffset, USHORT fsMethod,
PULONG pulNewOffset);
USHORT APIENTRY DosFileLocks(HFILE hf, PFILELOCK pUnlock, PFILELOCK pLock);
USHORT APIENTRY DosMove(PSZ pszOld, PSZ pszNew, ULONG ulReserved);
USHORT APIENTRY DosCopy(PSZ pszSrc, PSZ pszDst, USHORT usOpt, ULONG ulReserved);
USHORT APIENTRY DosEditName(USHORT usEditLevel, PSZ pszSrc, PSZ pszEdit,
PBYTE pszDst, USHORT cbDst);
USHORT APIENTRY DosFileIO(HFILE hf, PBYTE pbCmd, USHORT cbCmd, PUSHORT pulErr);
USHORT APIENTRY DosMkDir(PSZ pszDirName, ULONG usReserved);
USHORT APIENTRY DosMkDir2(PSZ pszDir, PEAOP pBuf, ULONG ulReserved);
USHORT APIENTRY DosRmDir(PSZ pszDir, ULONG ulReserved);
USHORT APIENTRY DosSelectDisk(USHORT usDrvNum);
USHORT APIENTRY DosQCurDisk(PUSHORT pusDrvNum, PULONG pulLogDrvMap);
USHORT APIENTRY DosChDir(PSZ pszDir, ULONG ulReserved);
USHORT APIENTRY DosQCurDir(USHORT usDrvNum, PBYTE pszPathBuf,
PUSHORT pcbPathBuf);
USHORT APIENTRY DosQFSInfo(USHORT usDrvNum, USHORT usInfoLevel, PBYTE pbInfo,
USHORT cbInfo);
USHORT APIENTRY DosSetFSInfo(USHORT usDrvNum, USHORT usInfoLevel, PBYTE pBuf,
USHORT cbBuf);
USHORT APIENTRY DosQVerify(PUSHORT pfVerifyOn);
USHORT APIENTRY DosSetVerify(USHORT fVerify);
USHORT APIENTRY DosSetMaxFH(USHORT usHandles);
USHORT APIENTRY DosQFileInfo(HFILE hf, USHORT usInfoLevel, PBYTE pInfoBuf,
USHORT cbInfoBuf);
USHORT APIENTRY DosSetFileInfo(HFILE hf, USHORT usInfoLevel, PBYTE pInfoBuf,
USHORT cbInfoBuf);
USHORT APIENTRY DosQPathInfo(PSZ pszPath, USHORT usInfoLevel, PBYTE pInfoBuf,
USHORT cbInfoBuf, ULONG ulReserved);
USHORT APIENTRY DosSetPathInfo(PSZ pszPath, USHORT usInfoLevel, PBYTE pInfoBuf,
USHORT cbInfoBuf, USHORT usFlags,
ULONG ulReserved);
/* defines for dossetpathinfo -pathinfo flag */
#define DSPI_WRTTHRU 0x10 /* write through */
USHORT APIENTRY DosQFileMode(PSZ pszFName, PUSHORT pusAttr, ULONG ulReserved);
USHORT APIENTRY DosSetFileMode(PSZ pszFName, USHORT usAttr, ULONG ulReserved);
USHORT APIENTRY DosEnumAttribute(USHORT, PVOID, ULONG, PVOID, ULONG, PULONG,
ULONG, ULONG);
typedef struct _DENA1 { /* level 1 info returned from DosEnumAttribute */
UCHAR reserved; /* 0 */
UCHAR cbName; /* length of name exculding NULL */
USHORT cbValue; /* length of value */
UCHAR szName[1]; /* variable length asciiz name */
} DENA1;
typedef DENA1 FAR *PDENA1;
#endif /* common INCL_DOSFILEMGR */
#if (defined(INCL_DOSMEMMGR) || !defined(INCL_NOCOMMON))
/*** Memory management */
USHORT APIENTRY DosAllocSeg(USHORT cbSize, PSEL pSel, USHORT fsAlloc);
USHORT APIENTRY DosReallocSeg(USHORT cbNewSize, SEL sel);
USHORT APIENTRY DosFreeSeg(SEL sel);
USHORT APIENTRY DosGiveSeg(SEL sel, PID pid, PSEL pSelRecipient);
USHORT APIENTRY DosGetSeg(SEL sel);
USHORT APIENTRY DosSizeSeg(SEL sel, PULONG pcbSize);
/* Segment attribute flags (used with DosAllocSeg) */
#define SEG_NONSHARED 0x0000
#define SEG_GIVEABLE 0x0001
#define SEG_GETTABLE 0x0002
#define SEG_DISCARDABLE 0x0004
#endif /* common INCL_DOSMEMMGR */
#ifdef INCL_DOSMEMMGR
USHORT APIENTRY DosAllocHuge(USHORT cSegs, USHORT cbPartialSeg, PSEL psel,
USHORT cMaxSegs, USHORT fsAlloc);
USHORT APIENTRY DosReallocHuge(USHORT cSegs, USHORT cbPartialSeg, SEL sel);
USHORT APIENTRY DosGetHugeShift(PUSHORT pusShiftCount);
USHORT APIENTRY DosAllocShrSeg(USHORT cbSeg, PSZ pszSegName, PSEL psel);
USHORT APIENTRY DosLockSeg(SEL sel);
USHORT APIENTRY DosUnlockSeg(SEL sel);
USHORT APIENTRY DosGetShrSeg(PSZ pszSegName, PSEL psel);
USHORT APIENTRY DosMemAvail(PULONG pcbFree);
USHORT APIENTRY DosCreateCSAlias(SEL selDS, PSEL pselCS);
USHORT APIENTRY DosSubAlloc(SEL sel, PUSHORT pusOffset, USHORT cb);
USHORT APIENTRY DosSubFree(SEL sel, USHORT offBlock, USHORT cb);
USHORT APIENTRY DosSubSet(SEL sel, USHORT fFlags, USHORT cbNew);
#endif /* INCL_DOSMEMMGR */
#if (defined(INCL_DOSSEMAPHORES) || !defined(INCL_NOCOMMON))
/*** Semaphore support */
#define SEM_INDEFINITE_WAIT -1L
#define SEM_IMMEDIATE_RETURN 0L
USHORT APIENTRY DosSemClear(HSEM hsem);
USHORT APIENTRY DosSemSet(HSEM hsem);
USHORT APIENTRY DosSemWait(HSEM hsem, LONG lTimeOut);
USHORT APIENTRY DosSemSetWait(HSEM hsem, LONG lTimeOut);
USHORT APIENTRY DosSemRequest(HSEM hsem, LONG lTimeOut);
#endif /* common INCL_DOSSEMAPHORES */
#ifdef INCL_DOSSEMAPHORES
typedef LHANDLE HSYSSEM; /* hssm */
typedef HSYSSEM FAR *PHSYSSEM;
USHORT APIENTRY DosCreateSem(USHORT fExclusive, PHSYSSEM phsem, PSZ pszSemName);
#define CSEM_PRIVATE 0
#define CSEM_PUBLIC 1
USHORT APIENTRY DosOpenSem(PHSEM phsem, PSZ pszSemName);
USHORT APIENTRY DosCloseSem(HSEM hsem);
typedef struct _MUXSEM { /* mxs */
USHORT zero;
HSEM hsem;
} MUXSEM;
typedef MUXSEM FAR *PMUXSEM;
typedef struct _MUXSEMLIST { /* mxsl */
USHORT cmxs;
MUXSEM amxs[16];
} MUXSEMLIST;
typedef MUXSEMLIST FAR *PMUXSEMLIST;
/*
* Since a MUXSEMLIST structure is actually a variable length
* structure, the following macro may be used to define a MUXSEMLIST
* structure having size elements, named "name".
*/
#define DEFINEMUXSEMLIST(name, size) \
struct { \
USHORT cmxs; \
MUXSEM amxs[size]; \
} name;
/*
* This function actually takes a far pointer to a MUXSEMLIST structure
* as its second parameter, but in order to allow its use with the
* DEFINEMUXSEMLIST macro, it is declared here as PVOID.
*/
USHORT APIENTRY DosMuxSemWait(PUSHORT pisemCleared, PVOID pmsxl, LONG lTimeOut);
/*** Fast safe ram semaphores */
typedef struct _DOSFSRSEM { /* dosfsrs */
USHORT cb;
PID pid;
TID tid;
USHORT cUsage;
USHORT client;
ULONG sem;
} DOSFSRSEM;
typedef DOSFSRSEM FAR *PDOSFSRSEM;
USHORT APIENTRY DosFSRamSemRequest(PDOSFSRSEM pdosfsrs, LONG lTimeOut);
USHORT APIENTRY DosFSRamSemClear(PDOSFSRSEM pdosfsrs);
#endif /* INCL_DOSSEMAPHORES */
#if (defined(INCL_DOSDATETIME) || !defined(INCL_NOCOMMON))
/*** Time support */
typedef struct _DATETIME { /* date */
UCHAR hours;
UCHAR minutes;
UCHAR seconds;
UCHAR hundredths;
UCHAR day;
UCHAR month;
USHORT year;
SHORT timezone;
UCHAR weekday;
} DATETIME;
typedef DATETIME FAR *PDATETIME;
USHORT APIENTRY DosGetDateTime(PDATETIME pdatetime);
USHORT APIENTRY DosSetDateTime(PDATETIME pdatetime);
#endif /* common INCL_DOSDATETIME */
#ifdef INCL_DOSDATETIME
typedef SHANDLE HTIMER;
typedef HTIMER FAR *PHTIMER;
USHORT APIENTRY DosTimerAsync(ULONG ulTime, HSEM hsem, PHTIMER phtimer);
USHORT APIENTRY DosTimerStart(ULONG ulTime, HSEM hsem, PHTIMER phtimer);
USHORT APIENTRY DosTimerStop(HTIMER htimer);
#endif /* INCL_DOSDATETIME */
/*** Module manager */
#ifdef INCL_DOSMODULEMGR
USHORT APIENTRY DosLoadModule(PSZ pszFailName, USHORT cbFileName,
PSZ pszModName, PHMODULE phmod);
USHORT APIENTRY DosFreeModule(HMODULE hmod);
USHORT APIENTRY DosGetProcAddr(HMODULE hmod, PSZ pszProcName,
PFN FAR * ppfnProcAddr);
USHORT APIENTRY DosGetModHandle(PSZ pszModName, PHMODULE phMod);
USHORT APIENTRY DosGetModName(HMODULE hmod, USHORT cbBuf, PCHAR pchBuf);
#endif /* INCL_DOSMODULEMGR */
#if (defined(INCL_DOSRESOURCES) || !defined(INCL_NOCOMMON))
/*** Resource support */
/* Predefined resource types */
#define RT_POINTER 1 /* mouse pointer shape */
#define RT_BITMAP 2 /* bitmap */
#define RT_MENU 3 /* menu template */
#define RT_DIALOG 4 /* dialog template */
#define RT_STRING 5 /* string tables */
#define RT_FONTDIR 6 /* font directory */
#define RT_FONT 7 /* font */
#define RT_ACCELTABLE 8 /* accelerator tables */
#define RT_RCDATA 9 /* binary data */
#define RT_MESSAGE 10 /* error mesage tables */
#define RT_DLGINCLUDE 11 /* dialog include file name */
#define RT_VKEYTBL 12 /* key to vkey tables */
#define RT_KEYTBL 13 /* key to UGL tables */
#define RT_CHARTBL 14
#define RT_DISPLAYINFO 15 /* screen display information */
#define RT_FKASHORT 16 /* function key area short form */
#define RT_FKALONG 17 /* function key area long form */
#define RT_HELPTABLE 18
#define RT_HELPSUBTABLE 19
#define RT_FDDIR 20
#define RT_FD 21
#define RT_MAX 22 /* 1st unused Resource Type */
#endif /* common INCL_DOSRESOURCES */
#ifdef INCL_DOSRESOURCES
USHORT APIENTRY DosGetResource(HMODULE hmod, USHORT idType, USHORT idName,
PSEL psel);
USHORT APIENTRY DosGetResource2(HMODULE hmod, USHORT idType, USHORT idName,
PVOID FAR * ppData);
USHORT APIENTRY DosFreeResource(PVOID pData);
#endif /* INCL_DOSRESOURCES */
/*** NLS Support */
#ifdef INCL_DOSNLS
typedef struct _COUNTRYCODE { /* ctryc */
USHORT country;
USHORT codepage;
} COUNTRYCODE;
typedef COUNTRYCODE FAR *PCOUNTRYCODE;
typedef struct _COUNTRYINFO { /* ctryi */
USHORT country;
USHORT codepage;
USHORT fsDateFmt;
CHAR szCurrency[5];
CHAR szThousandsSeparator[2];
CHAR szDecimal[2];
CHAR szDateSeparator[2];
CHAR szTimeSeparator[2];
UCHAR fsCurrencyFmt;
UCHAR cDecimalPlace;
UCHAR fsTimeFmt;
USHORT abReserved1[2];
CHAR szDataSeparator[2];
USHORT abReserved2[5];
} COUNTRYINFO;
typedef COUNTRYINFO FAR *PCOUNTRYINFO;
USHORT APIENTRY DosGetCtryInfo(USHORT cbBuf, PCOUNTRYCODE pctryc,
PCOUNTRYINFO pctryi, PUSHORT pcbCtryInfo);
USHORT APIENTRY DosGetDBCSEv(USHORT cbBuf, PCOUNTRYCODE pctryc, PCHAR pchBuf);
USHORT APIENTRY DosCaseMap(USHORT usLen, PCOUNTRYCODE pctryc, PCHAR pchStr);
USHORT APIENTRY DosGetCollate(USHORT cbBuf, PCOUNTRYCODE pctryc, PCHAR pchBuf,
PUSHORT pcbTable);
USHORT APIENTRY DosGetCp(USHORT cbBuf, PUSHORT pBuf, PUSHORT pcbCodePgLst);
USHORT APIENTRY DosSetCp(USHORT usCodePage, USHORT usReserved);
USHORT APIENTRY DosSetProcCp(USHORT usCodePage, USHORT usReserved);
#endif /* INCL_DOSNLS */
/*** Signal support */
#ifdef INCL_DOSSIGNALS
/* Signal Numbers for DosSetSigHandler */
#define SIG_CTRLC 1 /* Control C */
#define SIG_BROKENPIPE 2 /* Broken Pipe */
#define SIG_KILLPROCESS 3 /* Program Termination */
#define SIG_CTRLBREAK 4 /* Control Break */
#define SIG_PFLG_A 5 /* Process Flag A */
#define SIG_PFLG_B 6 /* Process Flag B */
#define SIG_PFLG_C 7 /* Process Flag C */
#define SIG_CSIGNALS 8 /* number of signals plus one */
/* Flag Numbers for DosFlagProcess */
#define PFLG_A 0 /* Process Flag A */
#define PFLG_B 1 /* Process Flag B */
#define PFLG_C 2 /* Process Flag C */
/* Signal actions */
#define SIGA_KILL 0
#define SIGA_IGNORE 1
#define SIGA_ACCEPT 2
#define SIGA_ERROR 3
#define SIGA_ACKNOWLEDGE 4
/* DosHoldSignal constants */
#define HLDSIG_ENABLE 0
#define HLDSIG_DISABLE 1
/* DosFlagProcess codes */
#define FLGP_SUBTREE 0
#define FLGP_PID 1
typedef VOID (PASCAL FAR *PFNSIGHANDLER)(USHORT, USHORT);
USHORT APIENTRY DosSetSigHandler(PFNSIGHANDLER pfnSigHandler,
PFNSIGHANDLER FAR * ppfnPrev, PUSHORT pfAction,
USHORT fAction, USHORT usSigNum);
USHORT APIENTRY DosFlagProcess(PID pid, USHORT fScope, USHORT usFlagNum,
USHORT usFlagArg);
USHORT APIENTRY DosHoldSignal(USHORT fDisable);
USHORT APIENTRY DosSendSignal(USHORT idProcess, USHORT usSigNumber);
#endif /* INCL_DOSSIGNALS */
/*** Monitor support */
#ifdef INCL_DOSMONITORS
typedef SHANDLE HMONITOR; /* hmon */
typedef HMONITOR FAR *PHMONITOR;
USHORT APIENTRY DosMonOpen(PSZ pszDevName, PHMONITOR phmon);
USHORT APIENTRY DosMonClose(HMONITOR hmon);
USHORT APIENTRY DosMonReg(HMONITOR hmon, PBYTE pbInBuf, PBYTE pbOutBuf,
USHORT fPosition, USHORT usIndex);
USHORT APIENTRY DosMonRead(PBYTE pbInBuf, USHORT fWait, PBYTE pbDataBuf,
PUSHORT pcbData);
USHORT APIENTRY DosMonWrite(PBYTE pbOutBuf, PBYTE pbDataBuf, USHORT cbData);
#endif /* INCL_DOSMONITORS */
/*** Pipe and queue support */
#ifdef INCL_DOSQUEUES
#if (defined(INCL_DOSFILEMGR) || !defined(INCL_NOCOMMON))
typedef SHANDLE HQUEUE; /* hq */
typedef HQUEUE FAR *PHQUEUE;
USHORT APIENTRY DosMakePipe(PHFILE phfRead, PHFILE phfWrite, USHORT cb);
USHORT APIENTRY DosCloseQueue(HQUEUE hqueue);
USHORT APIENTRY DosCreateQueue(PHQUEUE phqueue, USHORT fQueueOrder,
PSZ pszQueueName);
USHORT APIENTRY DosOpenQueue(PUSHORT ppidOwner, PHQUEUE phqueue,
PSZ pszQueueName);
USHORT APIENTRY DosPeekQueue(HQUEUE hqueue, PULONG pqresc, PUSHORT pcbElement,
PULONG ppBuf, PUSHORT pElemCode, UCHAR fWait,
PBYTE pbElemPrty, ULONG hsem);
USHORT APIENTRY DosPurgeQueue(HQUEUE hqueue);
USHORT APIENTRY DosQueryQueue(HQUEUE hqueue, PUSHORT pcElem);
USHORT APIENTRY DosReadQueue(HQUEUE hqueue, PULONG pqresc, PUSHORT pcbElem,
PULONG ppBuf, USHORT usElem, UCHAR fWait,
PBYTE pbElemPrty, HSEM hsem);
USHORT APIENTRY DosWriteQueue(HQUEUE hqueue, USHORT usRequest, USHORT cbBuf,
PBYTE pBuf, UCHAR fPriority);
#else /* INCL_DOSFILEMGR || !INCL_NOCOMMON */
#error PHFILE not defined - define INCL_DOSFILEMGR or undefine INCL_NOCOMMON
#endif /* INCL_DOSFILEMGR || !INCL_NOCOMMON */
#endif /* INCL_DOSQUEUES */
#ifdef INCL_DOSMISC
/* definitions for DOSSEARCHPATH control word */
#define DSP_IMPLIEDCUR 1 /* current dir will be searched first */
#define DSP_PATHREF 2 /* from envirnoment variable */
#define DSP_IGNORENETERR 4 /* ignore net errs & continue search */
/* definition for DOSQSYSINFO */
#define Q_MAX_PATH_LENGTH (0) /* index for query max path length */
USHORT APIENTRY DosError(USHORT fEnable);
USHORT APIENTRY DosSetVec(USHORT usVecNum, PFN pfnFun, PFN ppfnPrev);
USHORT APIENTRY DosGetMessage(PCHAR FAR * ppchVTable, USHORT usVCount,
PCHAR pchBuf, USHORT cbBuf, USHORT usMsgNum,
PSZ pszFileName, PUSHORT pcbMsg);
USHORT APIENTRY DosErrClass(USHORT usErrCode, PUSHORT pusClass,
PUSHORT pfsAction, PUSHORT pusLocus);
USHORT APIENTRY DosInsMessage(PCHAR FAR * ppchVTable, USHORT usVCount,
PSZ pszMsg, USHORT cbMsg, PCHAR pchBuf,
USHORT cbBuf, PUSHORT pcbMsg);
USHORT APIENTRY DosPutMessage(USHORT hf, USHORT cbMsg, PCHAR pchMsg);
USHORT APIENTRY DosSysTrace(USHORT, USHORT, USHORT, PCHAR);
USHORT APIENTRY DosDynamicTrace(USHORT, PBYTE, PBYTE);
USHORT APIENTRY DosPTrace(PBYTE pPtraceBuf);
USHORT APIENTRY DosQSysInfo(USHORT index, PBYTE pBuf, USHORT cbBuf);
USHORT APIENTRY DosGetEnv(PUSHORT pselEnv, PUSHORT pOffsetCmd);
USHORT APIENTRY DosScanEnv(PSZ pszVarName, PSZ FAR * ppszResult);
USHORT APIENTRY DosSearchPath(USHORT fsSearch, PSZ pszPath, PSZ pszFName,
PBYTE pBuf, USHORT cbBuf);
USHORT APIENTRY DosGetVersion(PUSHORT pVer);
USHORT APIENTRY DosGetMachineMode(PBYTE pMachMode);
#endif /* INCL_DOSMISC */
/*** Session manager support */
#ifdef INCL_DOSSESMGR
typedef struct _STARTDATA { /* stdata */
USHORT Length;
USHORT Related;
USHORT FgBg;
USHORT TraceOpt;
PSZ PgmTitle;
PSZ PgmName;
PBYTE PgmInputs;
PBYTE TermQ;
PBYTE Environment;
USHORT InheritOpt;
USHORT SessionType;
PSZ IconFile;
ULONG PgmHandle;
USHORT PgmControl;
USHORT InitXPos;
USHORT InitYPos;
USHORT InitXSize;
USHORT InitYSize;
} STARTDATA;
typedef STARTDATA FAR *PSTARTDATA;
typedef struct _STATUSDATA { /* stsdata */
USHORT Length;
USHORT SelectInd;
USHORT BondInd;
} STATUSDATA;
typedef STATUSDATA FAR *PSTATUSDATA;
USHORT APIENTRY DosStartSession(PSTARTDATA pstdata, PUSHORT pidSession,
PUSHORT ppid);
USHORT APIENTRY DosSetSession(USHORT idSession, PSTATUSDATA pstsdata);
USHORT APIENTRY DosSelectSession(USHORT idSession, ULONG ulReserved);
USHORT APIENTRY DosStopSession(USHORT fScope, USHORT idSession,
ULONG ulReserved);
USHORT APIENTRY DosQAppType(PSZ pszPrgName, PUSHORT pusType);
#endif /* INCL_DOSSESMGR */
/*** Device support */
#ifdef INCL_DOSDEVICES
USHORT APIENTRY DosDevConfig(PVOID pDevInfo, USHORT usItem, USHORT usReserved);
USHORT APIENTRY DosDevIOCtl(PVOID pData, PVOID pParms, USHORT usFun,
USHORT usCategory, HFILE hDev);
USHORT APIENTRY DosDevIOCtl2(PVOID pData, USHORT cbData, PVOID pParm,
USHORT cbParm, USHORT usFun, USHORT usCategory,
HFILE hDev);
USHORT APIENTRY DosSystemService(USHORT usCategory, PVOID pRequest,
PVOID pResponse);
USHORT APIENTRY DosCLIAccess(VOID);
USHORT APIENTRY DosPortAccess(USHORT usReserved, USHORT fRelease,
USHORT usFirstPort, USHORT usLastPort);
USHORT APIENTRY DosPhysicalDisk(USHORT usFun, PBYTE pOut, USHORT cbOut,
PBYTE pParm, USHORT cbParm);
USHORT APIENTRY DosR2StackRealloc(USHORT cbStack);
VOID APIENTRY DosCallback(PFN pfn);
#endif /* INCL_DOSDEVICES */
/*** DosNamedPipes API Support */
#ifdef INCL_DOSNMPIPES
typedef SHANDLE HPIPE; /* hp */
typedef HPIPE FAR *PHPIPE;
typedef struct _AVAILDATA { /* PeekNMPipe Bytes Available record */
USHORT cbpipe; /* bytes left in the pipe */
USHORT cbmessage; /* bytes left in current message */
} AVAILDATA;
typedef AVAILDATA FAR *PAVAILDATA;
USHORT APIENTRY DosCallNmPipe(PSZ pszName, PBYTE pInBuf, USHORT cbInBuf,
PBYTE pbOutBuf, USHORT cbOutBuf, PUSHORT pcbRead,
ULONG ulTimeOut);
USHORT APIENTRY DosConnectNmPipe(HPIPE hp);
USHORT APIENTRY DosDisConnectNmPipe(HPIPE hp);
USHORT APIENTRY DosMakeNmPipe(PSZ pszName, PHPIPE php, USHORT fsOpenMode,
USHORT fsPipeMode, USHORT cbOutBuf,
USHORT cbInBuf, ULONG ulTimeOut);
USHORT APIENTRY DosPeekNmPipe(HPIPE hp, PBYTE pBuf, USHORT cbBuf,
PUSHORT pcbRead, PAVAILDATA pAvail,
PUSHORT pfsState);
USHORT APIENTRY DosQNmPHandState(HPIPE hp, PUSHORT pfsState);
USHORT APIENTRY DosQNmPipeInfo(HPIPE hp, USHORT usInfoLevel, PBYTE pBuf,
USHORT cb);
USHORT APIENTRY DosQNmPipeSemState(HSEM hsem, PBYTE pBuf, USHORT cb);
USHORT APIENTRY DosSetNmPHandState(HPIPE hp, USHORT fsState);
USHORT APIENTRY DosSetNmPipeSem(HPIPE hp, HSEM hsem, USHORT usKeyVal);
USHORT APIENTRY DosTransactNmPipe(HPIPE hp, PBYTE bOutBuf, USHORT cbOut,
PBYTE pInBuf, USHORT cbIn, PUSHORT pcbRead);
USHORT APIENTRY DosWaitNmPipe(PSZ pszName, ULONG ulTimeOut);
/*** Data structures and equates used with named pipes ***/
struct npi_data1 { /* PipeInfo data block (returned, level 1) */
unsigned short npi_obuflen; /* length of outgoing I/O buffer */
unsigned short npi_ibuflen; /* length of incoming I/O buffer */
unsigned char npi_maxicnt; /* maximum number of instances */
unsigned char npi_curicnt; /* current number of instances */
unsigned char npi_namlen; /* length of pipe name */
char npi_name[1]; /* start of name */
}; /* npi_data1 */
struct npss { /* QNmPipeSemState information record */
unsigned char npss_status; /* type of record, 0 = EOI, 1 = read ok, */
/* 2 = write ok, 3 = pipe closed */
unsigned char npss_flag; /* additional info, 01 = waiting thread */
unsigned short npss_key; /* user's key value */
unsigned short npss_avail; /* available data/space if status = 1/2 */
}; /* npss */
/* values in npss_status */
#define NPSS_EOI 0 /* End Of Information */
#define NPSS_RDATA 1 /* read data available */
#define NPSS_WSPACE 2 /* write space available */
#define NPSS_CLOSE 3 /* pipe in CLOSING state */
/* values in npss_flag */
#define NPSS_WAIT 0x01 /* waiting thread on end of pipe */
/* defined bits in pipe mode */
#define NP_NBLK 0x8000 /* non-blocking read/write */
#define NP_SERVER 0x4000 /* set if server end */
#define NP_WMESG 0x0400 /* write messages */
#define NP_RMESG 0x0100 /* read as messages */
#define NP_ICOUNT 0x00FF /* instance count field */
/* Named pipes may be in one of several states depending on the actions
* that have been taken on it by the server end and client end. The
* following state/action table summarizes the valid state transitions:
*
* Current state Action Next state
*
* <none> server DosMakeNmPipe DISCONNECTED
* DISCONNECTED server connect LISTENING
* LISTENING client open CONNECTED
* CONNECTED server disconn DISCONNECTED
* CONNECTED client close CLOSING
* CLOSING server disconn DISCONNECTED
* CONNECTED server close CLOSING
* <any other> server close <pipe deallocated>
*
* If a server disconnects his end of the pipe, the client end will enter a
* special state in which any future operations (except close) on the file
* descriptor associated with the pipe will return an error.
*/
/*
* Values for named pipe state
*/
#define NP_DISCONNECTED 1 /* after pipe creation or Disconnect */
#define NP_LISTENING 2 /* after DosNmPipeConnect */
#define NP_CONNECTED 3 /* after Client open */
#define NP_CLOSING 4 /* after Client or Server close */
#endif /* INCL_DOSNMPIPES */
/*** DosProfile API support */
#ifdef INCL_DOSPROFILE
/* DosProfile ordinal number */
#define PROF_ORDINAL 133
/* DosProfile usType */
#define PROF_SYSTEM 0
#define PROF_USER 1
#define PROF_USEDD 2
#define PROF_KERNEL 4
#define PROF_VERBOSE 8
#define PROF_ENABLE 16
/* DosProfile usFunc */
#define PROF_ALLOC 0
#define PROF_CLEAR 1
#define PROF_ON 2
#define PROF_OFF 3
#define PROF_DUMP 4
#define PROF_FREE 5
/* DosProfile tic count granularity (DWORD) */
#define PROF_SHIFT 2
/* DosProfile module name string length */
#define PROF_MOD_NAME_SIZE 10
/* DosProfile error code for end of data */
#define PROF_END_OF_DATA 13
#endif /* INCL_DOSPROFILE */
#ifdef INCL_DOSMISC
/*** Miscelanious functions ***/
/* DosError() error-handling types */
#define HARDERROR_ENABLE 0x0001
#define HARDERROR_DISABLE 0x0000
#define EXCEPTION_ENABLE 0x0000
#define EXCEPTION_DISABLE 0x0002
/* DosGetMachineMode() machine modes */
#define MODE_REAL 0x0000
#define MODE_PROTECTED 0x0001
/* DosSetVec vectors */
#define VECTOR_DIVIDE_BY_ZERO 0x0000
#define VECTOR_OVERFLOW 0x0004
#define VECTOR_OUTOFBOUNDS 0x0005
#define VECTOR_INVALIDOPCODE 0x0006
#define VECTOR_NO_EXTENSION 0x0007
#define VECTOR_EXTENSION_ERROR 0x0010
USHORT APIENTRY DosError(USHORT);
USHORT APIENTRY DosErrClass(USHORT, PUSHORT, PUSHORT, PUSHORT);
USHORT APIENTRY DosQSysInfo(USHORT, PBYTE, USHORT);
USHORT APIENTRY DosGetEnv(PUSHORT, PUSHORT);
USHORT APIENTRY DosScanEnv(PSZ, PSZ FAR *);
USHORT APIENTRY DosGetVersion(PUSHORT);
USHORT APIENTRY DosGetMachineMode(PBYTE);
USHORT APIENTRY DosGetMessage(PCHAR FAR *, USHORT, PCHAR, USHORT, USHORT,
PSZ, PUSHORT);
USHORT APIENTRY DosInsMessage(PCHAR FAR *, USHORT, PSZ, USHORT, PCHAR,
USHORT, PUSHORT);
USHORT APIENTRY DosPutMessage(HFILE, USHORT, PCHAR);
#endif /* INCL_DOSMISC */