/*** *doscalls.h - functions declarations for OS/2 function calls * * Copyright (c) 1986-1991, Microsoft Corporation. All rights reserved. * *Purpose: * Function declarations to provide strong type checking on * arguments to OS/2 function calls used by the C run-time. * Only those functions which are referenced in the run-time * are included in this file. This saves compilation time, * reduces the amount of memory needed by the compiler, and * prevents recompilation due to changes that do not directly * affect the C run-time. This file should only be updated * when a change is made to BSEDOS.H which affects a * function used in a C module in the C run-time, or when a * "C" module is changed to use a new OS/2 function call. * * Note: functions reference only in ASM files are included also * so that this file can serve as a reference. * [Internal] * *Revision History: * 08-31-88 PHG created from BSEDOS.H, changed SHORT to INT * 10-10-88 GJF Made specific to 386 (changed "Dos" prefix to * "Sys", removed "far",...,etc.) * 11-09-88 JCR _DATETIME.year and _DATETIME.timezone are USHORT * 04-28-89 JCR Upgraded for OS/2 1.20 (32-bit) * 05-25-89 JCR New system calling convention = "_syscall" * 06-06-89 PHG Added several new systems calls, updated RESULTCODES * made SHANDLE/HFILE/HDIR a long * 07-05-89 PHG Added HDIR types, and VECTOR constants * 07-06-89 JCR Corrected memory calls and constants * 07-28-89 GJF Corrected copyright. Protected alignment of struct * fields with pack pragma * 08-10-89 JCR Changed DOS32FILELOCKS to DOS32SETFILELOCKS * 08-14-89 GJF Added prototypes for DOS32QUERYFHSTATE and * DOS32SETFILEHSTATE * 10-18-89 JCR Changed _NEWREGION to match change in OS2 mem APIs * 10-27-89 JCR Added DOS32GETTHREADINFO change (under switch DCR757) * 10-30-89 GJF Fixed copyright * 11-06-89 JCR Added DOS32FREEMEM * 11-10-89 JCR Added OBJ_TILE bit to _NEWREGION definition * 11-10-89 JCR Removed DOS32QUERYFILEMODE/SETFILEMODE (not supported), * Added DOS32QUERYPATHINFO/SETPATHINFO * 11-16-89 GJF Changed DOS32SETFILEHSTATE to DOS32SETFHSTATE * 11-17-89 JCR Corrected DOS32SETFILEPTR * 11-17-89 JCR Enabled DOS32GETTHREADINFO code (DCR757) * 02-28-90 GJF Added #ifndef _INC_DOSCALLS stuff * 05-07-90 JCR Added correct semaphore calls * 05-09-90 JCR Corrected CREATETHREAD, etc. * 05-28-90 SBM Added DOS32RESETBUFFER * 06-06-90 SBM Added tentative new DOS32QUERYFHSTATE flags * 07-02-90 GJF Fixed thread info structures to conform with MS 2012 * (aka DCR 1024). * 07-23-90 SBM Removed '32' from all API names * 08-23-90 GJF Added prototypes for new exception/signal API, removed * obsolete prototypes and definitions. * 12-10-90 GJF Updated values of new DOSQUERYFHSTATE flags. * 01-28-91 GJF Updated definition of struct _FILEFINDBUF * 08-20-91 JCR C++ and ANSI naming * ****/ #ifndef _INC_DOSCALLS #ifdef __cplusplus extern "C" { #endif /* ensure proper alignment of struct fields */ #pragma pack(4) #define PASCAL pascal #define VOID void #define APIENTRY _syscall /* OS/2 386 system calling convention = C arg passing, no leading underscore */ #define CHAR char /* ch */ /* always 8-bit */ #define SHORT short /* s */ /* always 16-bit */ #define LONG long /* l */ /* always 32-bit */ #define INT int /* i */ /* 286:16-bit, 386:32-bit */ typedef unsigned CHAR UCHAR; /* uch */ typedef unsigned SHORT USHORT; /* us */ typedef unsigned LONG ULONG; /* ul */ typedef unsigned INT UINT; /* ui */ typedef unsigned CHAR BYTE; /* b */ typedef CHAR *PSZ; typedef INT (PASCAL *PFN)(); typedef INT (PASCAL **PPFN)(); typedef BYTE *PBYTE; typedef CHAR *PCHAR; typedef SHORT *PSHORT; typedef LONG *PLONG; typedef INT *PINT; typedef UCHAR *PUCHAR; typedef USHORT *PUSHORT; typedef ULONG *PULONG; typedef UINT *PUINT; typedef VOID *PVOID; typedef UINT BOOL; /* f */ typedef BOOL *PBOOL; #define FALSE 0 #define TRUE 1 typedef ULONG SHANDLE; typedef SHANDLE HFILE; /* hf */ typedef HFILE *PHFILE; typedef ULONG HMTX; /* mutex semaphore */ typedef HMTX *PHMTX; typedef UINT PID; /* pid */ typedef PID *PPID; typedef UINT TID; /* tid */ typedef TID *PTID; /* File time and date types */ typedef struct _FTIME { /* ftime */ unsigned short twosecs : 5; unsigned short minutes : 6; unsigned short hours : 5; } FTIME; typedef FTIME *PFTIME; typedef struct _FDATE { /* fdate */ unsigned short day : 5; unsigned short month : 4; unsigned short year : 7; } FDATE; typedef FDATE *PFDATE; /* * CCHMAXPATH is the maximum fully qualified path name length including * the drive letter, colon, backslashes and terminating NULL. */ #define CCHMAXPATH 260 typedef struct _FILEFINDBUF { /* findbuf */ ULONG oNextEntryOffset; /* new field */ FDATE fdateCreation; FTIME ftimeCreation; FDATE fdateLastAccess; FTIME ftimeLastAccess; FDATE fdateLastWrite; FTIME ftimeLastWrite; ULONG cbFile; ULONG cbFileAlloc; ULONG attrFile; /* widened field */ UCHAR cchName; CHAR achName[CCHMAXPATH]; } FILEFINDBUF; typedef FILEFINDBUF *PFILEFINDBUF; /* Directory handle types */ #define HDIR_SYSTEM 0x0001 #define HDIR_CREATE 0xFFFF #define EXIT_THREAD 0 #define EXIT_PROCESS 1 VOID APIENTRY DOSEXIT(ULONG, ULONG); UINT APIENTRY DOSCREATETHREAD(PTID, VOID (*)(VOID), ULONG, ULONG, ULONG); UINT APIENTRY DOSRESUMETHREAD(TID); UINT APIENTRY DOSSUSPENDTHREAD(TID); /* Wait option values */ #define DCWW_WAIT 0 #define DCWW_NOWAIT 1 typedef struct _RESULTCODES { /* resc */ ULONG codeTerminate; ULONG codeResult; } RESULTCODES; typedef RESULTCODES *PRESULTCODES; /* codeTerminate values (also passed to ExitList routines) */ #define TC_EXIT 0 #define TC_HARDERROR 1 #define TC_TRAP 2 #define TC_KILLPROCESS 3 ULONG APIENTRY DOSWAITCHILD(ULONG, ULONG, PRESULTCODES, PPID, PID); UINT APIENTRY DOSSLEEP(ULONG); /* 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 ULONG APIENTRY DOSEXECPGM(PCHAR, ULONG, ULONG, PSZ, PSZ, PRESULTCODES, PSZ); typedef struct tib2_s { /* System Specific Thread Info Block */ ULONG tib2_ultid; /* Thread I.D. */ ULONG tib2_ulpri; /* Thread priority */ ULONG tib2_version; /* Version number for this structure */ USHORT tib2_usMCCount; /* Must Complete count */ USHORT tib2_fMCForceFlag; /* Must Complete force flag */ } TIB2; typedef TIB2 *PTIB2; typedef struct tib_s { /* Thread Information Block (TIB) */ PVOID tib_pexchain; /* Head of exception handler chain */ PVOID tib_pstack; /* Pointer to base of stack */ PVOID tib_pstacklimit; /* Pointer to end of stack */ PTIB2 tib_ptib2; /* Pointer to system specific TIB */ ULONG tib_version; /* Version number for this TIB structure */ PVOID tib_arbpointer; /* A pointer for the user */ } TIB; typedef TIB *PTIB; typedef struct pib_s { /* Process Information Block (PIB) */ ULONG pib_ulpid; /* Process I.D. */ ULONG pib_ulppid; /* Parent process I.D. */ ULONG pib_hmte; /* Program (.EXE) module handle */ PCHAR pib_pchcmd; /* Command line pointer */ PCHAR pib_pchenv; /* Environment pointer */ ULONG pib_flstatus; /* Process' status bits */ ULONG pib_ultype; /* Process' type code */ } PIB; typedef PIB *PPIB; ULONG APIENTRY DOSGETTHREADINFO(PTIB *, PPIB *); /* Global Info Seg */ typedef struct _GINFOSEG { /* gis */ ULONG time; ULONG msecs; UCHAR hour; UCHAR minutes; UCHAR seconds; UCHAR hundredths; UINT timezone; UINT cusecTimerInterval; UCHAR day; UCHAR month; UINT year; UCHAR weekday; UCHAR uchMajorVersion; UCHAR uchMinorVersion; UCHAR chRevisionLetter; UCHAR sgCurrent; UCHAR sgMax; UCHAR cHugeShift; UCHAR fProtectModeOnly; UINT pidForeground; UCHAR fDynamicSched; UCHAR csecMaxWait; UINT cmsecMinSlice; UINT cmsecMaxSlice; UINT bootdrive; UCHAR amecRAS[32]; } GINFOSEG; typedef GINFOSEG *PGINFOSEG; /* Local Info Seg */ typedef struct _LINFOSEG { /* lis */ PID pidCurrent; PID pidParent; UINT prtyCurrent; TID tidCurrent; UINT sgCurrent; UINT sgSub; BOOL fForeground; } LINFOSEG; typedef LINFOSEG *PLINFOSEG; /* Process Type codes (local info seg typeProcess field) */ #define PT_FULLSCREEN 0 #define PT_REALMODE 1 #define PT_WINDOWABLEVIO 2 #define PT_PM 3 #define PT_DETACHED 4 UINT APIENTRY DOSGETINFOSEG(PGINFOSEG *, PLINFOSEG *); /* correct?? */ /* extended attribute structures */ typedef struct _GEA { /* gea */ BYTE cbName; /* name length not including NULL */ CHAR szName[1]; /* attribute name */ } GEA; typedef GEA *PGEA; typedef struct _GEALIST { /* geal */ USHORT cbList; /* total bytes of structure including full list */ GEA list[1]; /* variable length GEA structures */ } GEALIST; typedef GEALIST * PGEALIST; typedef struct _FEA { /* fea */ BYTE bRsvd; /* reserved */ BYTE cbName; /* name length not including NULL */ USHORT cbValue; /* value length */ } FEA; typedef FEA *PFEA; typedef struct _FEALIST { /* feal */ USHORT cbList; /* total bytes of structure including full list */ FEA list[1]; /* variable length FEA structures */ } FEALIST; typedef FEALIST * PFEALIST; typedef struct _EAOP { /* eaop */ PGEALIST fpGEAList; /* general EA list */ PFEALIST fpFEAList; /* full EA list */ USHORT oError; } EAOP; typedef EAOP * PEAOP; ULONG APIENTRY DOSOPEN(PSZ, PHFILE, PULONG, ULONG, ULONG, ULONG, ULONG, PEAOP, ULONG); ULONG APIENTRY DOSCLOSE(HFILE); ULONG APIENTRY DOSREAD(HFILE, PVOID, ULONG, PULONG); ULONG APIENTRY DOSWRITE(HFILE, PVOID, ULONG, PULONG); /* 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 *PFILESTATUS; /* File locking/unlocking */ typedef struct _FILELOCK { LONG lOffset; LONG lRange; } FILELOCK; typedef FILELOCK *PFILELOCK; typedef SHANDLE HDIR; /* hdir */ typedef HDIR *PHDIR; /* DosOpen() open flags */ #define FILE_OPEN 0x0001 #define FILE_TRUNCATE 0x0002 #define FILE_CREATE 0x0010 /* DosOpen/DosSetFHandState flags */ #define OPEN_ACCESS_READONLY 0x0000 #define OPEN_ACCESS_WRITEONLY 0x0001 #define OPEN_ACCESS_READWRITE 0x0002 #define OPEN_SHARE_DENYREADWRITE 0x0010 #define OPEN_SHARE_DENYWRITE 0x0020 #define OPEN_SHARE_DENYREAD 0x0030 #define OPEN_SHARE_DENYNONE 0x0040 #define OPEN_FLAGS_NOINHERIT 0x0080 #define OPEN_FLAGS_FAIL_ON_ERROR 0x2000 #define OPEN_FLAGS_WRITE_THROUGH 0x4000 #define OPEN_FLAGS_DASD 0x8000 /* new DosQueryFHState flags from DCR 'Add full 32-bit support for runtime libraries.' NAMES TENTATIVE AND SUBJECT TO CHANGE. STAY AWAY. */ #define OPEN_FLAGS_CONSOLE 0x00080000 #define OPEN_FLAGS_RAWMODE 0x00100000 #define OPEN_FLAGS_EOF 0x00200000 /* HANDTYPE values */ #define HANDTYPE_FILE 0x00 #define HANDTYPE_DEVICE 0x01 #define HANDTYPE_PIPE 0x02 #define HANDTYPE_NETWORK 0x80 ULONG APIENTRY DOSDELETE(PSZ, ULONG); ULONG APIENTRY DOSDUPHANDLE(HFILE, PHFILE); ULONG APIENTRY DOSQUERYFHSTATE(HFILE, PULONG); ULONG APIENTRY DOSQUERYHTYPE(HFILE, PULONG, PULONG); ULONG APIENTRY DOSFINDFIRST(PSZ, PHDIR, ULONG, PFILEFINDBUF, ULONG, PULONG, ULONG); ULONG APIENTRY DOSFINDNEXT(HDIR, PFILEFINDBUF, ULONG, PULONG); ULONG APIENTRY DOSFINDCLOSE(HDIR); ULONG APIENTRY DOSSETFHSTATE(HFILE, ULONG); ULONG APIENTRY DOSSETFILESIZE(HFILE, ULONG); ULONG APIENTRY DOSSETFILEPTR(HFILE, ULONG, LONG, PULONG); ULONG APIENTRY DOSSETFILELOCKS(HFILE, PFILELOCK, PFILELOCK); ULONG APIENTRY DOSMOVE(PSZ, PSZ, ULONG); ULONG APIENTRY DOSCREATEDIR(PSZ, PEAOP, ULONG); ULONG APIENTRY DOSDELETEDIR(PSZ, ULONG); ULONG APIENTRY DOSQUERYCURRENTDISK(PULONG, PULONG); ULONG APIENTRY DOSSETDEFAULTDISK(ULONG); ULONG APIENTRY DOSSETCURRENTDIR(PSZ, ULONG); ULONG APIENTRY DOSQUERYCURRENTDIR(ULONG, PBYTE, PULONG); ULONG APIENTRY DOSSETMAXFH(ULONG); ULONG APIENTRY DOSQUERYFILEINFO(HFILE, ULONG, PFILESTATUS, ULONG); ULONG APIENTRY DOSQUERYPATHINFO(PCHAR, ULONG, PFILESTATUS, ULONG); ULONG APIENTRY DOSSETPATHINFO(PCHAR, ULONG, PFILESTATUS, ULONG, ULONG); ULONG APIENTRY DOSSETFILEINFO(HFILE, ULONG, PFILESTATUS, ULONG); ULONG APIENTRY DOSCREATEPIPE(PULONG, PULONG, ULONG); ULONG APIENTRY DOSQUERYSYSINFO(ULONG, ULONG, PBYTE, ULONG); ULONG APIENTRY DOSRESETBUFFER(HFILE); /* File attribute flags */ #define FILE_NORMAL 0x0000 #define FILE_READONLY 0x0001 #define FILE_HIDDEN 0x0002 #define FILE_SYSTEM 0x0004 #define FILE_DIRECTORY 0x0010 #define FILE_ARCHIVED 0x0020 /* DosSetFilePtr() file position codes */ #define FILE_BEGIN 0x0000 #define FILE_CURRENT 0x0001 #define FILE_END 0x0002 /* 386 allocation API */ /* Access protection */ #define PAG_READ 0x00000001 /* read access */ #define PAG_WRITE 0x00000002 /* write access */ #define PAG_EXECUTE 0x00000004 /* execute access */ #define PAG_GUARD 0x00000008 /* guard protection */ /* Commit */ #define PAG_COMMIT 0x00000010 /* commit storage */ #define PAG_DECOMMIT 0x00000020 /* decommit storage */ /* Allocation attributes */ #define OBJ_TILE 0x00000040 /* tile object */ #define OBJ_PROTECTED 0x00000080 /* protect object #define OBJ_GETTABLE 0x00000100 /* gettable by other processes */ #define OBJ_GIVEABLE 0x00000200 /* giveable to other processes */ /* Standard memory values for C lib (heap and mthread code) */ #define _NEWREGION (PAG_READ | PAG_WRITE | OBJ_TILE) #define _COMMIT (PAG_COMMIT | PAG_READ | PAG_WRITE) #define _DECOMMIT (PAG_DECOMMIT) UINT APIENTRY DOSALLOCMEM(PVOID, UINT, UINT, UINT); UINT APIENTRY DOSFREEMEM(PVOID); UINT APIENTRY DOSSETMEM(PVOID, UINT, UINT); /*** Semaphore support */ UINT APIENTRY DOSCREATEMUTEXSEM (PSZ, PHMTX, ULONG, ULONG); UINT APIENTRY DOSQUERYMUTEXSEM (HMTX, PID *, TID *, PULONG); UINT APIENTRY DOSREQUESTMUTEXSEM (HMTX, ULONG); UINT APIENTRY DOSRELEASEMUTEXSEM (HMTX); /*** 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 *PDATETIME; ULONG APIENTRY DOSGETDATETIME(PDATETIME); /* Exception/signal API */ /* Argument values for DOSSETSIGNALEXCEPTIONFOCUS */ #define SIG_UNSETFOCUS 0 #define SIG_SETFOCUS 1 /* Include type and constant definitions */ #include /* Prototypes */ UINT APIENTRY DOSRAISEEXCEPTION(_PEXCEPTIONREPORTRECORD); UINT APIENTRY DOSSENDSIGNALEXCEPTION(PID, ULONG); UINT APIENTRY DOSUNWINDEXCEPTION(_PEXCEPTIONREGISTRATIONRECORD, PVOID, _PEXCEPTIONREPORTRECORD); UINT APIENTRY DOSSETSIGNALEXCEPTIONFOCUS(ULONG, PULONG); UINT APIENTRY DOSENTERMUSTCOMPLETE(PULONG); UINT APIENTRY DOSEXITMUSTCOMPLETE(PULONG); UINT APIENTRY DOSACKNOWLEDGESIGNALEXCEPTION(ULONG); UINT APIENTRY DOSGETVERSION(PUINT); /* correct? */ UINT APIENTRY DOSGETMACHINEMODE(PBYTE); /* correct? */ ULONG APIENTRY DOSDEVCONFIG(PULONG, ULONG, ULONG); /* indices for DosQuerySysInfo */ #define _QSV_MAX_PATH_LENGTH 1 #define _QSV_MAX_TEXT_SESSIONS 2 #define _QSV_MAX_PM_SESSIONS 3 #define _QSV_MAX_VDM_SESSIONS 4 #define _QSV_BOOT_DRIVE 5 /* 1=A, 2=B, etc. */ #define _QSV_DYN_PRI_VARIATION 6 /* 0=Absolute, 1=Dynamic */ #define _QSV_MAX_WAIT 7 /* seconds */ #define _QSV_MIN_SLICE 8 /* milli seconds */ #define _QSV_MAX_SLICE 9 /* milli seconds */ #define _QSV_PAGE_SIZE 10 #define _QSV_VERSION_MAJOR 11 /* OS revision (major) */ #define _QSV_VERSION_MINOR 12 /* OS revision (minor) */ #define _QSV_VERSION_REVISION 13 /* Revision letter */ /* restore default alignment */ #pragma pack() #ifdef __cplusplus } #endif #define _INC_DOSCALLS #endif /* _INC_DOSCALLS */