OLEVTBL.C

/* 
* OLEVTBL.C
*
* Creates or frees the procedure instances for the server, document,
* and object VTBLs. There are two functions for each table: one
* to initialize the table, the other to free the instances in the table.
*
* Copyright(c) Microsoft Corp. 1992-1994 All Rights Reserved
* Win32 version, January 1994
*/


#ifdef MAKEOLESERVER


#include <windows.h>
#include <ole.h>
#include "cosmo.h"
#include "oleglobl.h"

#ifdef MSC
/*
* This disables Microsoft VC++ 1.x warnings we get from assigning
* functions with our app-specific prototypes to the fixed prototypes
* in the VTBL structures. The functionality of this application was
* verified before adding this pragma.
*/
#pragma warning(disable:4028)
#ifndef WIN32
#pragma warning(disable:4113)
#endif
#endif


/*
* FOLEVtblInitServer
*
* Purpose:
* Creates procedure instances for all the OLE methods required
* by the server library for standard server methods.
*
* Parameters:
* hInst HINSTANCE of the application instance.
* pvt LPOLESERVERVTBL to the VTBL to initialize.
*
* Return Value:
* None
*
* Customization:
* None required.
*/

BOOL WINAPI FOLEVtblInitServer(HINSTANCE hInst, LPOLESERVERVTBL pvt)
{
BOOL fRet=TRUE;

#ifdef WIN32
pvt->Create =ServerCreate;
pvt->CreateFromTemplate=ServerCreateFromTemplate;
pvt->Edit =ServerEdit;
pvt->Execute =ServerExecute;
pvt->Exit =ServerExit;
pvt->Open =ServerOpen;
pvt->Release =ServerRelease;
#else
pvt->Create =(LPVOID)MakeProcInstance(ServerCreate, hInst);
pvt->CreateFromTemplate=(LPVOID)MakeProcInstance(ServerCreateFromTemplate, hInst);
pvt->Edit =(LPVOID)MakeProcInstance(ServerEdit, hInst);
pvt->Execute =(LPVOID)MakeProcInstance(ServerExecute, hInst);
pvt->Exit =(LPVOID)MakeProcInstance(ServerExit, hInst);
pvt->Open =(LPVOID)MakeProcInstance(ServerOpen, hInst);
pvt->Release =(LPVOID)MakeProcInstance(ServerRelease, hInst);

fRet =(NULL!=pvt->Create);
fRet&=(NULL!=pvt->CreateFromTemplate);
fRet&=(NULL!=pvt->Edit);
fRet&=(NULL!=pvt->Execute);
fRet&=(NULL!=pvt->Exit);
fRet&=(NULL!=pvt->Open);
fRet&=(NULL!=pvt->Release);
#endif

return fRet;
}


/*
* OLEVtblFreeServer
*
* Purpose:
* Frees all procedure instances in the server VTBL.
*
* Parameters:
* pvt LPOLESERVERVTBL to the VTBL to free.
*
* Return Value:
* none
*
* Customization:
* None required.
*/

void WINAPI OLEVtblFreeServer(LPOLESERVERVTBL pvt)
{
#ifndef WIN32
FreeProcInstance(pvt->Create);
FreeProcInstance(pvt->CreateFromTemplate);
FreeProcInstance(pvt->Edit);
FreeProcInstance(pvt->Exit);
FreeProcInstance(pvt->Open);
FreeProcInstance(pvt->Release);
#endif

return;
}





/*
* FOLEVtblInitDocument
*
* Purpose:
* Creates procedure instances for all the OLE methods required
* for document methods.
*
* Parameters:
* hInst HINSTANCE of the application instance.
* pvt LPOLESERVERDOCVTBL to the VTBL to initialize.
*
* Return Value:
* None
*
* Customization:
* None required.
*/

BOOL WINAPI FOLEVtblInitDocument(HINSTANCE hInst, LPOLESERVERDOCVTBL pvt)
{
BOOL fRet=TRUE;

#ifdef WIN32
pvt->Close =DocClose;
pvt->GetObject =DocGetObject;
pvt->Execute =DocExecute;
pvt->Release =DocRelease;
pvt->Save =DocSave;
pvt->SetColorScheme =DocSetColorScheme;
pvt->SetDocDimensions=DocSetDocDimensions;
pvt->SetHostNames =DocSetHostNames;
#else
pvt->Close =(LPVOID)MakeProcInstance(DocClose, hInst);
pvt->GetObject =(LPVOID)MakeProcInstance(DocGetObject, hInst);
pvt->Execute =(LPVOID)MakeProcInstance(DocExecute, hInst);
pvt->Release =(LPVOID)MakeProcInstance(DocRelease, hInst);
pvt->Save =(LPVOID)MakeProcInstance(DocSave, hInst);
pvt->SetColorScheme =(LPVOID)MakeProcInstance(DocSetColorScheme, hInst);
pvt->SetDocDimensions=(LPVOID)MakeProcInstance(DocSetDocDimensions, hInst);
pvt->SetHostNames =(LPVOID)MakeProcInstance(DocSetHostNames, hInst);

fRet =(NULL!=pvt->Close);
fRet&=(NULL!=pvt->GetObject);
fRet&=(NULL!=pvt->Execute);
fRet&=(NULL!=pvt->Release);
fRet&=(NULL!=pvt->Save);
fRet&=(NULL!=pvt->SetColorScheme);
fRet&=(NULL!=pvt->SetDocDimensions);
fRet&=(NULL!=pvt->SetHostNames);
#endif

return fRet;
}




/*
* OLEVtblFreeDocument
*
* Purpose:
* Frees all procedure instances in the document VTBL.
*
* Parameters:
* pvt LPOLESERVERDOCVTBL to the VTBL to free.
*
* Return Value:
* none
*
* Customization:
* None required.
*/

void WINAPI OLEVtblFreeDocument(LPOLESERVERDOCVTBL pvt)
{
#ifndef WIN32
FreeProcInstance(pvt->Close);
FreeProcInstance(pvt->GetObject);
FreeProcInstance(pvt->Release);
FreeProcInstance(pvt->Save);
FreeProcInstance(pvt->SetColorScheme);
FreeProcInstance(pvt->SetDocDimensions);
FreeProcInstance(pvt->SetHostNames);
#endif

return;
}





/*
* FOLEVtblInitObject
*
* Purpose:
* Creates procedure instances for all the OLE methods required
* for object methods.
*
* Parameters:
* hInst HINSTANCE of the application instance.
* pvt LPOLEOBJECTVTBL to free.
*
* Return Value:
* None
*
* Customization:
* Your application might not use global variables for srvrvtbl,
* docvtbl, and objvtbl.
*/

BOOL WINAPI FOLEVtblInitObject(HINSTANCE hInst, LPOLEOBJECTVTBL pvt)
{
BOOL fRet=TRUE;

/*
* Local variables are used here just to make this one assignment
* more readable since it requires some typecasting to compile clean
* at warning level 3.
*/
#ifdef WIN32
pvt->QueryProtocol =ObjQueryProtocol;
pvt->DoVerb =ObjDoVerb;
pvt->EnumFormats =ObjEnumFormats;
pvt->GetData =ObjGetData;
pvt->Release =ObjRelease;
pvt->SetBounds =ObjSetBounds;
pvt->SetColorScheme =ObjSetColorScheme;
pvt->SetData =ObjSetData;
pvt->SetTargetDevice=ObjSetTargetDevice;
pvt->Show =ObjShow;
#else
pvt->QueryProtocol =(LPVOID)MakeProcInstance((FARPROC)ObjQueryProtocol, hInst);;
pvt->DoVerb =(LPVOID)MakeProcInstance(ObjDoVerb, hInst);
pvt->EnumFormats =(LPVOID)MakeProcInstance(ObjEnumFormats, hInst);
pvt->GetData =(LPVOID)MakeProcInstance(ObjGetData, hInst);
pvt->Release =(LPVOID)MakeProcInstance(ObjRelease, hInst);
pvt->SetBounds =(LPVOID)MakeProcInstance(ObjSetBounds, hInst);
pvt->SetColorScheme =(LPVOID)MakeProcInstance(ObjSetColorScheme, hInst);
pvt->SetData =(LPVOID)MakeProcInstance(ObjSetData, hInst);
pvt->SetTargetDevice=(LPVOID)MakeProcInstance(ObjSetTargetDevice, hInst);
pvt->Show =(LPVOID)MakeProcInstance(ObjShow, hInst);

fRet =(NULL!=pvt->QueryProtocol);
fRet&=(NULL!=pvt->DoVerb);
fRet&=(NULL!=pvt->EnumFormats);
fRet&=(NULL!=pvt->GetData);
fRet&=(NULL!=pvt->Release);
fRet&=(NULL!=pvt->SetBounds);
fRet =(NULL!=pvt->SetColorScheme);
fRet&=(NULL!=pvt->SetData);
fRet&=(NULL!=pvt->SetTargetDevice);
fRet&=(NULL!=pvt->Show);
#endif

return fRet; //TRUE by default in Win32
}





/*
* OLEVtblFreeObject
*
* Purpose:
* Frees all procedure instances in the object VTBL.
*
* Parameters:
* pvt LPOLEOBJECTVTBL to the VTBL to free.
*
* Return Value:
* none
*
* Customization:
* None required.
*/

void WINAPI OLEVtblFreeObject(LPOLEOBJECTVTBL pvt)
{
#ifndef WIN32
FreeProcInstance(pvt->DoVerb);
FreeProcInstance(pvt->EnumFormats);
FreeProcInstance(pvt->GetData);
FreeProcInstance((FARPROC)pvt->QueryProtocol);
FreeProcInstance(pvt->Release);
FreeProcInstance(pvt->SetBounds);
FreeProcInstance(pvt->SetColorScheme);
FreeProcInstance(pvt->SetData);
FreeProcInstance(pvt->SetTargetDevice);
FreeProcInstance(pvt->Show);
#endif

return;
}



#endif //MAKEOLESERVER