/*++
Copyright (c) 1991 Microsoft Corporation
Module Name:
os2v12.h
Abstract:
Include file for OS/2 Subsystem Client 16 bit API support.
Author:
Patrick Questembert 16-Feb-92
Revision History:
--*/
#pragma pack(2) /* To cancel alignement done by 32-bit compiler since we
have in this include file only OS/2 1.x typedefs */
#define INCL_DOSINCLUDED
#ifndef INCL_BASEINCLUDED
#if !(defined(INCL_32) || defined(INCL_16))
#ifdef M_I386
#define INCL_32
#else /* not M_I386 */
#define INCL_16
#endif /* M_I386 */
#endif /* INCL_32 || INCL_16 */
#if !defined(INCL_16)
#pragma message ("16-bit Base API included when using 32-bit compiler")
#endif /* INCL_32 */
#endif /* INCL_BASEINCLUDED */
#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
#define INCL_DOSMVDM
#endif /* INCL_DOS */
#ifdef INCL_ERRORS
#define INCL_DOSERRORS
#endif /* INCL_ERRORS */
#if (defined(INCL_DOSPROCESS) || !defined(INCL_NOCOMMON))
/* DosExit codes */
#define EXIT_THREAD 0
#define EXIT_PROCESS 1
#endif /* common INCL_DOSPROCESS definitions */
#ifdef INCL_DOSPROCESS
typedef struct _PIDINFO { /* pidi */
USHORT pid;
USHORT tid;
USHORT pidParent;
} PIDINFO;
typedef PIDINFO FAR *PPIDINFO;
/* Action code values */
#define DCWA_PROCESS 0
#define DCWA_PROCESSTREE 1
/* Wait option values */
#define DCWW_WAIT 0
#define DCWW_NOWAIT 1
/* codeTerminate values (also passed to ExitList routines) */
#define TC_EXIT 0
#define TC_HARDERROR 1
#define TC_TRAP 2
#define TC_KILLPROCESS 3
/* DosExitList functions */
#define EXLST_ADD 1
#define EXLST_REMOVE 2
#define EXLST_EXIT 3
/* 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
/* 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
#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 */
USHORT pidCurrent;
USHORT pidParent;
USHORT prtyCurrent;
USHORT tidCurrent;
USHORT sgCurrent;
UCHAR rfProcStatus;
UCHAR dummy1;
USHORT fForeground;
UCHAR typeProcess;
UCHAR dummy2;
SEL selEnvironment;
USHORT offCmdLine;
USHORT cbDataSegment;
USHORT cbStack;
USHORT cbHeap;
USHORT 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 */
/* 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 */
/*
* 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
#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 1 /* Use system handle (1) */
/* 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*/
#define DCPY_FAILEAS 0x00004 /* Fail if EAs not supported on target*/
/* Dosopen/DosQFHandState/DosQueryFileInfo et al file attributes; also */
/* known as Dos 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--- ---- ---- ---- */
#define OPEN_FLAGS_NONSPOOLED 0x00040000
#define MUST_HAVE_READONLY ( (FILE_READONLY << 8) | FILE_READONLY )
#define MUST_HAVE_HIDDEN ( (FILE_HIDDEN << 8) | FILE_HIDDEN )
#define MUST_HAVE_SYSTEM ( (FILE_SYSTEM << 8) | FILE_SYSTEM )
#define MUST_HAVE_DIRECTORY ( (FILE_DIRECTORY << 8) | FILE_DIRECTORY )
#define MUST_HAVE_ARCHIVED ( (FILE_ARCHIVED << 8) | FILE_ARCHIVED )
/* 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 _FIOLOCKCMD16 { /* FLC FileLockCmd prefix */
USHORT usCmd; /* Cmd = FIO_LOCK */
USHORT cLockCnt; /* Lock records that follow */
ULONG cTimeOut; /* in Msec */
} FIOLOCKCMD16;
typedef FIOLOCKCMD16 FAR *PFIOLOCKCMD16;
typedef struct _FIOLOCKREC16 { /* FLR FileLockRecord */
USHORT fShare; /* FIO_NOSHARE or FIO_SHAREREAD */
ULONG cbStart; /* Starting offset for lock region */
ULONG cbLength; /* Length of lock region */
} FIOLOCKREC16;
typedef FIOLOCKREC16 FAR *PFIOLOCKREC16;
typedef struct _FIOUNLOCKCMD16 { /* FUC FileUnlockCmd prefix */
USHORT usCmd; /* Cmd = FIO_UNLOCK */
USHORT cUnlockCnt; /* Unlock records that follow */
} FIOUNLOCKCMD16;
typedef FIOUNLOCKCMD16 FAR *PFIOUNLOCKCMD16;
typedef struct _FIOUNLOCKREC16 { /* FUR FileUnlockRecord */
ULONG cbStart; /* Starting offset for unlock region */
ULONG cbLength; /* Length of unlock region */
} FIOUNLOCKREC16;
typedef FIOUNLOCKREC16 FAR *PFIOUNLOCKREC16;
typedef struct _FIOSEEKCMD16 { /* FSC 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 */
} FIOSEEKCMD16;
typedef FIOSEEKCMD16 FAR *PFIOSEEKCMD16;
typedef struct _FIOREADWRITE16 { /* 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 */
} FIOREADWRITE16;
typedef FIOREADWRITE16 FAR *PFIOREADWRITE16;
/***
* 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 */
#define FIL_QUERYALLEAS 4 /* Level 4, return all 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 */
#define FS_SPOOLATTACH 2 /* Register a spooler device */
#define FS_SPOOLDETACH 3 /* De-register a spooler device */
/* 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 _SPOOLATTACH { /* Data structure for spooler operations */
USHORT hNmPipe; /* Named pipe handle */
ULONG ulKey; /* Attached Key */
} SPOOLATTACH;
typedef SPOOLATTACH FAR *PSPOOLATTACH;
/*
* 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;
/* File time and date types */
//typedef struct _FTIME { /* ftime */
// USHORT twosecs : 5;
// USHORT minutes : 6;
// USHORT hours : 5;
//} FTIME;
//typedef FTIME FAR *PFTIME;
//typedef struct _FDATE { /* fdate */
// USHORT day : 5;
// USHORT month : 4;
// USHORT 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 */
typedef struct _FILESTATUS16 { /* fsts */
FDATE fdateCreation;
FTIME ftimeCreation;
FDATE fdateLastAccess;
FTIME ftimeLastAccess;
FDATE fdateLastWrite;
FTIME ftimeLastWrite;
ULONG cbFile;
ULONG cbFileAlloc;
USHORT attrFile;
} FILESTATUS16;
typedef FILESTATUS16 FAR *PFILESTATUS16;
typedef struct _FILESTATUS2_16 { /* fsts2 */
FDATE fdateCreation;
FTIME ftimeCreation;
FDATE fdateLastAccess;
FTIME ftimeLastAccess;
FDATE fdateLastWrite;
FTIME ftimeLastWrite;
ULONG cbFile;
ULONG cbFileAlloc;
USHORT attrFile;
ULONG cbList;
} FILESTATUS2_16;
typedef FILESTATUS2_16 FAR *PFILESTATUS2_16;
//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;
/* defines for dossetpathinfo -pathinfo flag */
#define DSPI_WRTTHRU 0x10 /* write through */
typedef struct _DENA1_16
{ /* _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_16;
typedef DENA1_16 FAR *PDENA1_16;
/* Infolevels for DosEnumAttribute */
//#define ENUMEA_LEVEL_NO_VALUE 1L /* FEA without value */
/* Reference types for DosEnumAttribute */
#define ENUMEA_REFTYPE_FHANDLE 0 /* file handle */
#define ENUMEA_REFTYPE_PATH 1 /* path name */
#define ENUMEA_REFTYPE_MAX ENUMEA_REFTYPE_PATH
#endif /* common INCL_DOSFILEMGR */
#if (defined(INCL_DOSMEMMGR) || !defined(INCL_NOCOMMON))
/*** Memory management */
/* Segment attribute flags (used with DosAllocSeg) */
#define SEG_NONSHARED 0x0000
#define SEG_GIVEABLE 0x0001
#define SEG_GETTABLE 0x0002
#define SEG_DISCARDABLE 0x0004
#define SEG_SIZEABLE 0x0008
#endif /* common INCL_DOSMEMMGR */
#if (defined(INCL_DOSSEMAPHORES) || !defined(INCL_NOCOMMON))
/*** Semaphore support */
#define SEM_INDEFINITE_WAIT -1L
#define SEM_IMMEDIATE_RETURN 0L
#endif /* common INCL_DOSSEMAPHORES */
#ifdef INCL_DOSSEMAPHORES
typedef LHANDLE HSYSSEM; /* hssm */
typedef HSYSSEM FAR *PHSYSSEM;
#define CSEM_PRIVATE 0
#define CSEM_PUBLIC 1
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;
/*** Fast safe ram semaphores */
typedef struct _DOSFSRSEM { /* dosfsrs */
USHORT cb;
USHORT pid;
USHORT tid;
USHORT cUsage;
USHORT client;
ULONG sem;
} DOSFSRSEM;
typedef DOSFSRSEM FAR *PDOSFSRSEM;
#endif /* INCL_DOSSEMAPHORES */
/*** Module manager */
#ifdef INCL_DOSMODULEMGR
#define PT_16BIT 0L
#define PT_32BIT 1L
#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 /* Help table for Cary Help manager */
#define RT_HELPSUBTABLE 19 /* Help subtable for Cary Help manager */
#define RT_FDDIR 20 /* DBCS uniq/font driver directory */
#define RT_FD 21 /* DBCS uniq/font driver */
#define RT_MAX 22 /* 1st unused Resource Type */
#endif /* common INCL_DOSRESOURCES */
/*** 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);
#endif /* INCL_DOSSIGNALS */
/*** Monitor support */
#ifdef INCL_DOSMONITORS
typedef SHANDLE HMONITOR; /* hmon */
typedef HMONITOR FAR *PHMONITOR;
#endif /* INCL_DOSMONITORS */
/*** Pipe and queue support */
#ifdef INCL_DOSQUEUES
#if (defined(INCL_DOSFILEMGR) || !defined(INCL_NOCOMMON))
#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 */
/* definitions for DosError - combine with | */
#define FERR_DISABLEHARDERR 0x00000000L /* disable hard error popups */
#define FERR_ENABLEHARDERR 0x00000001L /* enable hard error popups */
#define FERR_ENABLEEXCEPTION 0x00000000L /* enable exception popups */
#define FERR_DISABLEEXCEPTION 0x00000002L /* disable exception popups */
#endif /* INCL_DOSMISC */
/*** Session manager support */
#ifdef INCL_DOSSESMGR
#define SSF_RELATED_INDEPENDENT 0
#define SSF_RELATED_CHILD 1
#define SSF_FGBG_FORE 0
#define SSF_FGBG_BACK 1
#define SSF_TRACEOPT_NONE 0
#define SSF_TRACEOPT_TRACE 1
#define SSF_TRACEOPT_TRACEALL 2
#define SSF_INHERTOPT_SHELL 0
#define SSF_INHERTOPT_PARENT 1
/* note that these types are identical to those in pmshl.h for PROG_* */
#define SSF_TYPE_DEFAULT 0
#define SSF_TYPE_FULLSCREEN 1
#define SSF_TYPE_WINDOWABLEVIO 2
#define SSF_TYPE_PM 3
#define SSF_TYPE_VDM 4
#define SSF_TYPE_GROUP 5
#define SSF_TYPE_DLL 6
#define SSF_TYPE_WINDOWEDVDM 7
#define SSF_TYPE_PDD 8
#define SSF_TYPE_VDD 9
/* note that these flags are identical to those in pmshl.h for SHE_* */
#define SSF_CONTROL_VISIBLE 0x0000
#define SSF_CONTROL_INVISIBLE 0x0001
#define SSF_CONTROL_MAXIMIZE 0x0002
#define SSF_CONTROL_MINIMIZE 0x0004
#define SSF_CONTROL_NOAUTOCLOSE 0x0008
#define SSF_CONTROL_SETPOS 0x8000
typedef struct _REGISTERDATA { /* regdata */
USHORT Length;
USHORT NotifType;
PSZ DDName;
} REGISTERDATA;
typedef REGISTERDATA FAR *PREGISTERDATA;
#endif /* INCL_DOSSESMGR */
#if (defined(INCL_DOSSESMGR) || defined(INCL_DOSFILEMGR))
/* AppType returned in by DosQueryAppType in pFlags as follows */
#define FAPPTYP_NOTSPEC 0x0000
#define FAPPTYP_NOTWINDOWCOMPAT 0x0001
#define FAPPTYP_WINDOWCOMPAT 0x0002
#define FAPPTYP_WINDOWAPI 0x0003
#define FAPPTYP_BOUND 0x0008
#define FAPPTYP_DLL 0x0010
#define FAPPTYP_DOS 0x0020
#define FAPPTYP_PHYSDRV 0x0040 /* physical device driver */
#define FAPPTYP_VIRTDRV 0x0080 /* virtual device driver */
#define FAPPTYP_PROTDLL 0x0100 /* 'protected memory' dll */
#define FAPPTYP_32BIT 0x4000
#define FAPPTYP_EXETYPE FAPPTYP_WINDOWAPI
#define FAPPTYP_RESERVED ~(FAPPTYP_WINDOWAPI | FAPPTYP_BOUND | FAPPTYP_DLL | FAPPTYP_DOS | FAPPTYP_PHYSDRV | FAPPTYP_VIRTDRV | FAPPTYP_PROTDLL | FAPPTYP_32BIT)
#ifdef INCL_DOSFILEMGR
#define EAT_APPTYP_PMAPI 0x00 /* Uses PM API */
#define EAT_APPTYP_DOS 0x01 /* DOS APP */
#define EAT_APPTYP_PMW 0x02 /* Window compatible */
#define EAT_APPTYP_NOPMW 0x03 /* Not Window compatible */
#define EAT_APPTYP_EXETYPE 0x03 /* EXE type mask */
#define EAT_APPTYP_RESERVED ~(EAT_APPTYP_EXETYPE)
#endif /* INCL_DOSFILEMGR */
#endif /* INCL_DOSSESMGR || INCL_DOSFILEMGR */
/*** Device support */
#ifdef INCL_DOSDEVICES
#define DEVINFO_PRINTER 0 /* Number of printers attached */
#define DEVINFO_RS232 1 /* Number of RS232 ports */
#define DEVINFO_FLOPPY 2 /* Number of diskette drives */
#define DEVINFO_COPROCESSOR 3 /* Presence of math coprocessor */
#define DEVINFO_SUBMODEL 4 /* PC Submodel Type */
#define DEVINFO_MODEL 5 /* PC Model Type */
#define DEVINFO_ADAPTER 6 /* Primary display adapter type */
#define DEVINFO_COPROCESSORTYPE 7 /* Type of coprocessor functionality */
#define INFO_COUNT_PARTITIONABLE_DISKS 1 /* # of partitionable disks */
#define INFO_GETIOCTLHANDLE 2 /* Obtain handle */
#define INFO_FREEIOCTLHANDLE 3 /* Release handle */
#endif /* INCL_DOSDEVICES */
/*** DosNamedPipes API Support */
#ifdef INCL_DOSNMPIPES
typedef struct _AVAILDATA { /* AVAILDATA */
USHORT cbpipe; /* bytes left in the pipe */
USHORT cbmessage; /* bytes left in current message */
} AVAILDATA;
typedef AVAILDATA FAR *PAVAILDATA;
typedef struct _PIPEINFO { /* nmpinf */
USHORT cbOut; /* length of outgoing I/O buffer */
USHORT cbIn; /* length of incoming I/O buffer */
BYTE cbMaxInst; /* maximum number of instances */
BYTE cbCurInst; /* current number of instances */
BYTE cbName; /* length of pipe name */
CHAR szName[1]; /* start of name */
} PIPEINFO;
typedef PIPEINFO FAR *PPIPEINFO;
typedef struct _PIPESEMSTATE { /* nmpsmst */
BYTE fStatus; /* type of record, 0 = EOI, 1 = read ok, */
/* 2 = write ok, 3 = pipe closed */
BYTE fFlag; /* additional info, 01 = waiting thread */
USHORT usKey; /* user's key value */
USHORT usAvail; /* available data/space if status = 1/2 */
} PIPESEMSTATE;
typedef PIPESEMSTATE FAR *PPIPESEMSTATE;
#define NP_INDEFINITE_WAIT -1
#define NP_DEFAULT_WAIT 0L
/* DosPeekNmPipe() pipe states */
#define NP_STATE_DISCONNECTED 0x0001
#define NP_STATE_LISTENING 0x0002
#define NP_STATE_CONNECTED 0x0003
#define NP_STATE_CLOSING 0x0004
/* DosCreateNPipe open modes */
#define NP_ACCESS_INBOUND 0x0000
#define NP_ACCESS_OUTBOUND 0x0001
#define NP_ACCESS_DUPLEX 0x0002
#define NP_INHERIT 0x0000
#define NP_NOINHERIT 0x0080
#define NP_WRITEBEHIND 0x0000
#define NP_NOWRITEBEHIND 0x4000
/* DosCreateNPipe and DosQueryNPHState state */
#define NP_READMODE_BYTE 0x0000
#define NP_READMODE_MESSAGE 0x0100
#define NP_TYPE_BYTE 0x0000
#define NP_TYPE_MESSAGE 0x0400
#define NP_END_CLIENT 0x0000
#define NP_END_SERVER 0x4000
#define NP_WAIT 0x0000
#define NP_NOWAIT 0x8000
#define NP_UNLIMITED_INSTANCES 0x00FF
/* 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 */
/*** Virtual DOS Machine API support */
#ifdef INCL_DOSMVDM
typedef LHANDLE HVDD; /* hvdd */
typedef HVDD FAR *PHVDD; /* phvdd */
#endif /* INCL_DOSMVDM */
#pragma pack()