/*++
Copyright (c) 1991 Microsoft Corporation
Module Name:
os2dll16.h
Abstract:
Main include file for OS/2 Subsystem Client 16 bit API support
Author:
Yaron Shamir (YaronS) 15-Apr-1991
Revision History:
add SEG_SIZABLE (NirM) 7-jan-1993
--*/
/* 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
//
// Support for Huge Segments: we keep, per client, a linked
// list of HugeSegRecord records, each containing the info on
// base selector, maximum selectors for reallocation and link
// forward. This is used by DosFreeSeg to free up all the memory
// and selectors involved, and by DosReallocHuge to adhere to
// 1.X sematics for Huge Segments
//
typedef struct _HUGE_SEG_RECORD {
struct HUGE_SEG_RECORD *Next;
ULONG MaxNumSeg;
ULONG cNumSeg;
ULONG BaseSelector;
ULONG PartialSeg;
BOOLEAN fShared;
BOOLEAN fSizeable;
} HUGE_SEG_RECORD, *PHUGE_SEG_RECORD;
PHUGE_SEG_RECORD pHugeSegHead;
#define SEL_RPL3 0x3 // Rpl Ring 3
#define SEL_RPLCLR 0xfffc // Non RPL bits mask
/* LDT Descriptor (as defined by the NT support routines) */
typedef enum _I386DESCRIPTOR_TYPE {
INVALID, EXECUTE_CODE, EXECUTE_READ_CODE, READ_DATA, READ_WRITE_DATA
} I386DESCRIPTOR_TYPE;
typedef struct _I386DESCRIPTOR {
ULONG BaseAddress;
ULONG Limit;
I386DESCRIPTOR_TYPE Type;
} I386DESCRIPTOR;
//
// A high-level routine profile for LDT support. NT supports HW-like API
//
NTSTATUS
Nt386SetDescriptorLDT
(
HANDLE LDT,
ULONG Sel,
I386DESCRIPTOR Desc
);
#include "os2tile.h"
typedef unsigned short SEL;
typedef SEL *PSEL;
typedef unsigned short SHANDLE;
typedef void *LHANDLE;
//typedef LHANDLE HSYSSEM;
//typedef HSYSSEM *PHSYSSEM;
typedef USHORT PID16;
typedef PID16 *PPID16;
typedef USHORT TID16;
typedef TID16 *PTID16;
#pragma pack(1)
typedef struct _PIDINFO16 {
PID16 pid;
TID16 tid;
PID16 pidParent;
} PIDINFO16, *PPIDINFO16;
#pragma pack()
#define INCL_16
#define INCL_DOS
#define FAR
#define PASCAL
#define BOOL BOOLEAN
#define INCL_NOXLATE_DOS16
// #include "bsedos16.h"
#include "os2v12.h"
typedef struct _FILEFINDBUF1 { /* findbuf for DosFindFirst */
FDATE fdateCreation;
FTIME ftimeCreation;
FDATE fdateLastAccess;
FTIME ftimeLastAccess;
FDATE fdateLastWrite;
FTIME ftimeLastWrite;
ULONG cbFile;
ULONG cbFileAlloc;
USHORT attrFile;
UCHAR cchName;
CHAR achName[13];
} FILEFINDBUF1;
typedef FILEFINDBUF1 FAR *PFILEFINDBUF1;
//
// OS2 1.X Sempahore types
//
// We simulate the multi-semantic OS2 1.x Semaphore by two
// object, an event and a mutex.
// Clear - clear them both (Release, Post)
//
typedef struct _OS21X_SEM {
PVOID pMyself; // Myself makes RAM and SYS semaphore
// Handles to look the same (both becomes
// a pointer to an OS21X_SEM sempahore
//
HSEM Mutex;
TID OwnerThread;
USHORT RequestCount;
UCHAR FlagsByte;
UCHAR SysSemCount;
HSEM Event;
union {
ULONG SharedRamSignature; // in use for Ram Sem.
PCHAR SysSemName; // in use for System Sem. (its name)
} u;
struct OS21X_SEM *Next; // Per process list for cleanup
} OS21X_SEM, *POS21X_SEM;
#define SYSSEM_QUEUE 4
#define SYSSEM_PRIVATE 2
#define SYSSEM_PUBLIC 1
//
// per process Semaphore list head
//
struct OS21X_SEM *Od2Sem16ListHead;
//
// FSRAM Semaphores (Fast Safe RAM)
//
#pragma pack(1)
typedef struct _DOSFSRSEM16 {
USHORT cb;
PID16 pid;
TID16 tid;
USHORT cUsage;
USHORT client;
ULONG sem;
} DOSFRSEM16, *PDOSFSRSEM16;
#pragma pack()
BOOLEAN Od2ExitListInProgress;
typedef struct _OS21X_CS {
SEL selCS;
struct OS21X_CS *Next;
} OS21X_CS, *POS21X_CS;
typedef struct _OS21X_CSALIAS {
SEL selDS;
POS21X_CS pCSList;
HANDLE SectionHandle;
struct OS21X_CSALIAS *Next;
} OS21X_CSALIAS, *POS21X_CSALIAS;
struct OS21X_CSALIAS *Od2CSAliasListHead;
#pragma pack(1)
typedef struct _OD2_MSGFILE_HEADER16 {
UCHAR HeaderMsgFF;
CHAR Signature[ 7 ];
CHAR Component[ 3 ];
USHORT CountOfMessages;
USHORT BaseMessageId;
CHAR Reserved[ 16 ];
USHORT MessageOffsets[ 1 ];
} OD2_MSGFILE_HEADER16, *POD2_MSGFILE_HEADER16;
typedef struct _OD2_MSGFILE_HEADER_SYS16 {
UCHAR HeaderMsgFF;
CHAR Signature[ 7 ];
CHAR Component[ 3 ];
USHORT CountOfMessages;
USHORT BaseMessageId;
CHAR Reserved[ 16 ];
ULONG MessageOffsets[ 1 ];
} OD2_MSGFILE_HEADER_SYS16, *POD2_MSGFILE_HEADER_SYS16;
typedef struct _COUNTRYCODE16 {
USHORT country;
USHORT codepage;
} COUNTRYCODE16, *PCOUNTRYCODE16;
typedef struct _COUNTRYINFO16 {
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];
} COUNTRYINFO16, *PCOUNTRYINFO16;
#pragma pack()
//
// 16B Prototypes (for use by other OS2 16B APIs
//
APIRET
DosSemClear(
HSEM Sem);
APIRET
DosCloseSem(
IN HSEM hsem
);
APIRET
DosFreeSeg(
SEL Sel);
APIRET
DosAllocSeg(
IN USHORT cbSize,
OUT PSEL pSel,
IN USHORT fsAlloc);
APIRET
DosSizeSeg(
IN SEL sel,
PULONG pcbSize
);
APIRET
LDRGetProcAddr(
USHORT hmte,
PSZ pchname,
PULONG paddress);
APIRET
LDRGetModName(
ULONG hMod,
ULONG cbBuf,
PCHAR pchBuf);
APIRET
LDRGetModHandle(
PSZ pszModName,
ULONG len,
PULONG phMode);
APIRET
LDRQAppType(
IN PSZ pszAppName,
OUT PUSHORT pusType
);
APIRET
Od2GetSemNtEvent(
HSEM hsem,
PHANDLE pNtHandle
);
VOID
Od2JumpTo16ExitRoutine(
PFNEXITLIST ExitRoutine,
ULONG ExitReason);
#define SEM_FROM_SET 0
#define SEM_FROM_REQUESTWAIT 1
#define SEM_FROM_CLEAR 2
POS21X_SEM
Od2LookupOrCreateSem (
HSEM hsem,
PBOOLEAN firsttime,
ULONG source
);
#pragma pack(1)
typedef struct _R2StackEntry {
USHORT R2StackSize;
USHORT R2StackSel;
} R2StackEntry, *PR2StackEntry;
#pragma pack()