OLEGLOBL.H

/* 
* OLEGLOBL.H
*
* Definitions an other globals specific to the OLE code.
*
* Copyright(c) Microsoft Corp. 1992-1994 All Rights Reserved
* Win32 version, January 1994
*/

#ifdef MAKEOLESERVER

#ifndef CCHPATHMAX
#define CCHPATHMAX 256
#endif

#ifndef CCHFILENAME
#define CCHFILENAMEMAX 15
#endif


typedef LPOLESERVER FAR *LPLPOLESERVER;
typedef LPOLESERVERDOC FAR *LPLPOLESERVERDOC;
typedef LPOLEOBJECT FAR *LPLPOLEOBJECT;

typedef LPVOID (WINAPI *LPVOIDPROC) (LPOLEOBJECT, LPSTR);


typedef struct
{
LPOLEOBJECTVTBL pvtbl; //Standard
BOOL fRelease; //Flag to watch if we need to wait
LPOLECLIENT pClient; //Necessary for notifications
HLOCAL hMem; //Memory handle to this structure
} COSMOOBJECT;


typedef COSMOOBJECT FAR *LPCOSMOOBJECT;
#define CBCOSMOOBJECT sizeof(COSMOOBJECT)


typedef struct
{
LPOLESERVERDOCVTBL pvtbl; //Standard
LHSERVERDOC lh; //Required by OleRegisterServerDoc
BOOL fRelease; //Flag to watch if we need to wait
ATOM aObject; //Name of the document's object
ATOM aClient; //Name of the connected client
HLOCAL hMem; //Memory handle to this structure
LPCOSMOOBJECT pObj; //Last object we allocated
} COSMODOC;


typedef COSMODOC FAR *LPCOSMODOC;
#define CBCOSMODOC sizeof(COSMODOC)


typedef struct
{
LPOLESERVERVTBL pvtbl; //Standard
LHSERVER lh; //Required by OleRegisterServer
BOOL fRelease; //Flag to watch if we need to wait
BOOL fEmbed; //TRUE if we're embedding only
BOOL fLink; //TRUE if we're linking only
UINT nCmdShow; //OLE-modified window show command
HWND hWnd; //Main application window
HLOCAL hMem; //Memory handle to this structure
LPCOSMODOC pDoc; //Last document we allocated
} COSMOSERVER;

typedef COSMOSERVER FAR *LPCOSMOSERVER;
#define CBCOSMOSERVER sizeof(COSMOSERVER)


/*
* Single data structure holding any OLE-specific global variables.
*/

typedef struct
{
LPCOSMOSERVER pSvr;

OLESERVERVTBL vtblSvr;
OLESERVERDOCVTBL vtblDoc;
OLEOBJECTVTBL vtblObj;

UINT cfNative;
UINT cfOwnerLink;
UINT cfObjectLink;
} XOLEGLOBALS;

typedef XOLEGLOBALS FAR *LPXOLEGLOBALS;
#define CBXOLEGLOBALS sizeof(XOLEGLOBALS)


//The single global
extern LPXOLEGLOBALS pOLE;


/*
* STDTARGETDEVICE structure for ObjSetTargetDevice.
*/


typedef struct
{
//Offsets are pointers into the data field.
UINT deviceNameOffset; //szDeviceName
UINT driverNameOffset; //szDriverName
UINT portNameOffset; //szPortName
UINT extDevModeOffset; //DEVMODE structure
UINT extDevModeSize; //Size of the DEVMOCE struct, for versioning.
UINT environmentOffset; //Current MS-DOS environment, in a string
UINT environmentSize; //Length of environment string.
BYTE data[];
} STDTARGETDEVICE;

typedef STDTARGETDEVICE FAR * LPSTDTARGETDEVICE;
#define CBSTDTARGETDEVICE sizeof(STDTARGETDEVICE)






/*
* Function prototypes for OLE-Specific functions.
*/



//OLECLIP.C
BOOL WINAPI FOLECopyNative(LPXOLEGLOBALS);
BOOL WINAPI FOLECopyLink(LPXOLEGLOBALS, BOOL, LPSTR);
HGLOBAL WINAPI HLinkConstruct(LPSTR, LPSTR, LPSTR);


//OLEDOC.C
LPCOSMODOC WINAPI PDocumentAllocate(LPOLESERVERDOCVTBL); //Helper
void WINAPI DocumentClean(LPCOSMODOC); //Helper

OLESTATUS WINAPI DocClose(LPCOSMODOC);
OLESTATUS WINAPI DocGetObject(LPCOSMODOC, OLE_LPCSTR, LPLPOLEOBJECT, LPOLECLIENT);
OLESTATUS WINAPI DocExecute(LPCOSMODOC, HGLOBAL);
OLESTATUS WINAPI DocRelease(LPCOSMODOC);
OLESTATUS WINAPI DocSave(LPCOSMODOC);
OLESTATUS WINAPI DocSetColorScheme(LPCOSMODOC, OLE_CONST LOGPALETTE FAR *);
OLESTATUS WINAPI DocSetDocDimensions(LPCOSMODOC, OLE_CONST RECT FAR *);
OLESTATUS WINAPI DocSetHostNames(LPCOSMODOC, OLE_LPCSTR, OLE_LPCSTR);


//OLEEXIT.C
BOOL WINAPI FOLEExit(LPXOLEGLOBALS);


//OLEFILE.C
LPCOSMODOC WINAPI PDocRevokeAndCreate(LPXOLEGLOBALS);


//OLEINIT.C
BOOL WINAPI FOLEInstanceInit(LPXOLEGLOBALS, HINSTANCE, LPSTR, LPSTR FAR *, UINT);


//OLEMISC.C
void WINAPI MenuEmbeddingSet(HWND, LPSTR, BOOL);
void WINAPI OLEClientNotify(LPCOSMOOBJECT, UINT);
BOOL WINAPI FOLEReleaseWait(BOOL FAR *, LONG);



//OLEOBJ.C
LPCOSMOOBJECT WINAPI PObjectAllocate(LPOLEOBJECTVTBL);

LPVOID WINAPI ObjQueryProtocol(LPCOSMOOBJECT, OLE_LPCSTR);
OLESTATUS WINAPI ObjRelease(LPCOSMOOBJECT);
OLESTATUS WINAPI ObjShow(LPCOSMOOBJECT, BOOL);
OLESTATUS WINAPI ObjDoVerb(LPCOSMOOBJECT, UINT, BOOL, BOOL);
OLESTATUS WINAPI ObjGetData(LPCOSMOOBJECT, OLECLIPFORMAT, HGLOBAL FAR *);
OLESTATUS WINAPI ObjSetData(LPCOSMOOBJECT, OLECLIPFORMAT, HGLOBAL);
OLESTATUS WINAPI ObjSetTargetDevice(LPCOSMOOBJECT, HGLOBAL);
OLESTATUS WINAPI ObjSetBounds(LPCOSMOOBJECT, OLE_CONST RECT FAR *);
OLECLIPFORMAT WINAPI ObjEnumFormats(LPCOSMOOBJECT, OLECLIPFORMAT);
OLESTATUS WINAPI ObjSetColorScheme(LPCOSMOOBJECT, OLE_CONST LOGPALETTE FAR *);


//OLESVR.C
LPCOSMOSERVER WINAPI PServerAllocate(LPOLESERVERVTBL);

OLESTATUS WINAPI ServerCreate(LPCOSMOSERVER, LHSERVERDOC, OLE_LPCSTR, OLE_LPCSTR, LPLPOLESERVERDOC);
OLESTATUS WINAPI ServerCreateFromTemplate(LPCOSMOSERVER, LHSERVERDOC, OLE_LPCSTR, OLE_LPCSTR, OLE_LPCSTR, LPLPOLESERVERDOC);
OLESTATUS WINAPI ServerEdit(LPCOSMOSERVER, LHSERVERDOC, OLE_LPCSTR, OLE_LPCSTR, LPLPOLESERVERDOC);
OLESTATUS WINAPI ServerExecute(LPCOSMOSERVER, HGLOBAL);
OLESTATUS WINAPI ServerExit(LPCOSMOSERVER);
OLESTATUS WINAPI ServerOpen(LPCOSMOSERVER, LHSERVERDOC, OLE_LPCSTR, LPLPOLESERVERDOC);
OLESTATUS WINAPI ServerRelease(LPCOSMOSERVER);


//OLEVTBL.C
BOOL WINAPI FOLEVtblInitServer(HINSTANCE, LPOLESERVERVTBL);
BOOL WINAPI FOLEVtblInitDocument(HINSTANCE, LPOLESERVERDOCVTBL);
BOOL WINAPI FOLEVtblInitObject(HINSTANCE, LPOLEOBJECTVTBL);

void WINAPI OLEVtblFreeServer(LPOLESERVERVTBL);
void WINAPI OLEVtblFreeDocument(LPOLESERVERDOCVTBL);
void WINAPI OLEVtblFreeObject(LPOLEOBJECTVTBL);


#endif //MAKEOLESERVER