Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

223 lines
5.6 KiB

#include "all.h"
#ifdef FEATURE_VRML
#include "wc_html.h"
#include "mci.h"
#include "vrml.h"
#include "blob.h"
#include "winview.h"
#include "htmlutil.h"
BOOL g_bManagePalette;
//////////////////////////////////////////////////////////////////////////
// Called by background blob downloader when a file that we requested
// has been retrieved.
//
void BackgroundVRMLFile_Callback(struct Mwin* tw, ELEMENT* pel){
char *pTemp;
if (tw && tw->w3doc && pel){
if (pel->pblob->szFileName) {
HTUnEscape(pel->pblob->szFileName); // Interpret % signs
pTemp = strchr( pel->pblob->szFileName, '|'); // Convert '|' -> ':', if present
if ( pTemp )
*pTemp = ':';
}
// If the file was retrieved for a VRMLInline, forward its name to the
// appropriate VRML window
//
if (pel->pVrml->dwFlags & VRMLF_INLINE) {
SendMessage(pel->pVrml->hWnd,
WM_VRML_STATUS,
VRML_NOTIFYINLINE,
(LPARAM) pel->pblob->szFileName);
}
// If it was a "normal" VRML world, start a new viewer window
//
else {
if (pel->pblob->szFileName) {
VRMLStart(pel,tw,pel->pblob->szFileName);
}
}
}
}
////////////////////////////////////////////////////////////////////////
BOOL VRMLConstruct(int nItemIndex, ELEMENT *pElement,struct Mwin *tw,char *szURL) {
pElement->pVrml = (VRMLOBJECT *) GTR_CALLOC(1,sizeof(VRMLOBJECT));
if (!pElement->pVrml) return FALSE;
pElement->pVrml->hWnd = NULL;
pElement->pVrml->dwFlags = 0;
pElement->pVrml->nItemIndex = nItemIndex;
pElement->pVrml->hLib = LoadLibrary("MSIEVRML");
return (NULL != pElement->pVrml->hLib);
}
/////////////////////////////////////////////////////////////////////////
void VRMLDestruct(ELEMENT *pElement) {
if (!pElement->pVrml) return;
VRMLStop(pElement);
FreeLibrary(pElement->pVrml->hLib);
GTR_FREE(pElement->pVrml);
pElement->pVrml = NULL;
}
////////////////////////////////////////////////////////////////////////
static BOOL VRMLStart(ELEMENT *pElement, struct Mwin* tw,char *szURL){
HWND hWnd;
if (NULL == pElement->pVrml) return FALSE;
if ((NULL == pElement->pVrml->hWnd) &&
(!pElement->pVrml->dwFlags & VRMLF_INLINE)) {
RECT windowRect;
FrameToDoc(tw->w3doc, pElement->pVrml->nItemIndex, &windowRect);
hWnd = CreateWindow("MSVRView",
"",
WS_CHILD,
windowRect.left, windowRect.top,
windowRect.right - windowRect.left, windowRect.bottom - windowRect.top,
tw->win,
(HMENU) tw->w3doc->next_control_id++,
wg.hInstance,
pElement->pVrml);
if (NULL == hWnd) return FALSE;
pElement->pVrml->hWnd = hWnd;
}
if (szURL) {
PostMessage(hWnd,WM_VRML_LOADFILE,0,(LPARAM) pElement->pblob->szFileName);
}
ShowWindow(hWnd,SW_SHOW);
return TRUE;
}
//////////////////////////////////////////////////////////////////////////
void VRMLStop(ELEMENT *pElement){
if (pElement->pVrml) {
if (pElement->pVrml->hWnd) {
SendMessage(pElement->pVrml->hWnd,WM_CLOSE,0,0);
pElement->pVrml->hWnd = NULL;
g_bManagePalette = TRUE;
}
}
}
//////////////////////////////////////////////////////////////////////////
void CreateVRMLInlineElement(ELEMENT *pel) {
// clone our existing Element
//
HText_add_element(NULL,ELE_IMAGE);
}
//////////////////////////////////////////////////////////////////////////
void VRMLSetStatusBar(struct Mwin *tw,LPSTR pString) {
BHBar_SetStatusField(tw,pString);
}
//////////////////////////////////////////////////////////////////////////
void VRMLFormatURL(LPSTR pString) {
make_URL_HumanReadable(pString,pString,TRUE);
}
//////////////////////////////////////////////////////////////////////////
BOOL VRMLRequestFile(struct Mwin *tw, VRMLFILEREQUEST *pReq) {
char *src = NULL;
ELEMENT *pel;
// Set up our invisible "downloader" element with the name of the
// requested file.
//
pel = &tw->w3doc->aElements[pReq->pVrml->nHiddenIndex];
pel->pVrml->hWnd = pReq->pVrml->hWnd;
src = x_ExpandRelativeAnchor(pReq->pUrl,tw->w3doc->szActualURL);
pel->pblob = BlobConstruct();
if (pel->pblob) {
BlobStoreUrl(pel->pblob, src);
if (src)
GTR_FREE(src);
return LoadImageFromPlaceholder(tw ,pReq->pVrml->nHiddenIndex);
}
return FALSE;
}
//////////////////////////////////////////////////////////////////////////
BOOL VRMLLoadDocument(struct Mwin *tw, LPSTR pszURL) {
char *src = NULL;
src = x_ExpandRelativeAnchor(pszURL,tw->w3doc->szActualURL);
if (src) {
tw->request->referer = tw->w3doc->szActualURL;
/* FTP filesize is here, if the link is part of an FTP dir listing */
tw->request->content_length_hint = 0;
TW_LoadDocument(tw, src, TW_LD_FL_RECORD, NULL,tw->request->referer);
tw->request->referer = NULL;
GTR_FREE(src);
}
return TRUE;
}
//////////////////////////////////////////////////////////////////////////
LRESULT HandleVRMLStatus(struct Mwin * tw,WPARAM wParam,LPARAM lParam) {
switch(wParam) { // wParam contains command code
case VRML_SETSTATUSTEXT:
VRMLSetStatusBar(tw,(LPSTR) lParam);
break;
case VRML_FORMATURL:
VRMLFormatURL((LPSTR) lParam);
break;
case VRML_REQUESTFILE:
return (LRESULT) VRMLRequestFile(tw, (VRMLFILEREQUEST *) lParam);
break;
case VRML_PALETTECONTROL:
g_bManagePalette = (BOOL) lParam;
break;
case VRML_LOADDOCUMENT:
VRMLLoadDocument(tw,(LPSTR) lParam);
break;
default:
XX_DMsg(DBG_WWW, ("WM_VRML_STATUS: Bad command code\n"));
break;
}
return (LRESULT) 0;
}
#endif