summaryrefslogblamecommitdiffstats
path: root/private/os2/inc/os2dll16.h
blob: b24b96723fb0fad0205e742028d96171b040a273 (plain) (tree)

































































































































































































































































































































                                                                              
/*++

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()