/*++

(C) Copyright Microsoft Corporation 1988-1992

Module Name:

    common.h

Author:

    Floyd A Rogers 2/7/92

Revision History:
        Floyd Rogers
        Created
--*/

#define IN
#define OUT
#define INOUT

//
// An ID_WORD indicates the following WORD is an ordinal rather 
// than a string
// 

#define ID_WORD 0xffff

typedef struct _STRING {
        DWORD discriminant;       // long to make the rest of the struct aligned
	union u {
		struct {
		  struct _STRING *pnext;
                  DWORD  ulOffsetToString;
		  USHORT cbD;
		  USHORT cb;
		  WCHAR  sz[1];
		} ss;
		WORD     Ordinal;
	} uu;
} STRING, *PSTRING, **PPSTRING;

#define IS_STRING 1
#define IS_ID     2

// defines to make deferencing easier
#define OffsetToString uu.ss.ulOffsetToString
#define cbData         uu.ss.cbD
#define cbsz           uu.ss.cb
#define szStr          uu.ss.sz
#define pn             uu.ss.pnext

typedef struct _RESNAME {
    struct _RESNAME *pnext;    // The first three fields should be the
    PSTRING Name;              // same in both res structures
    DWORD   OffsetToData;      //

    PSTRING Type;
    struct _RESNAME *pnextRes;
    RESADDITIONAL	*pAdditional;
    DWORD   OffsetToDataEntry;
    USHORT  ResourceNumber;
    USHORT  NumberOfLanguages;
    POBJLST pObjLst;
} RESNAME, *PRESNAME, **PPRESNAME;

typedef struct _RESTYPE {
    struct _RESTYPE *pnext;    // The first three fields should be the
    PSTRING Type;              // same in both res structures
    DWORD   OffsetToData;      //

    struct _RESNAME *NameHeadID;
    struct _RESNAME *NameHeadName;
    DWORD  NumberOfNamesID;
    DWORD  NumberOfNamesName;
    POBJLST pObjLst;
} RESTYPE, *PRESTYPE, **PPRESTYPE;