Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenmshtml_private.h
Go to the documentation of this file.
00001 /* 00002 * Copyright 2005-2009 Jacek Caban for CodeWeavers 00003 * 00004 * This library is free software; you can redistribute it and/or 00005 * modify it under the terms of the GNU Lesser General Public 00006 * License as published by the Free Software Foundation; either 00007 * version 2.1 of the License, or (at your option) any later version. 00008 * 00009 * This library is distributed in the hope that it will be useful, 00010 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00012 * Lesser General Public License for more details. 00013 * 00014 * You should have received a copy of the GNU Lesser General Public 00015 * License along with this library; if not, write to the Free Software 00016 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA 00017 */ 00018 00019 #include "wingdi.h" 00020 #include "docobj.h" 00021 #include "comcat.h" 00022 #include "mshtml.h" 00023 #include "mshtmhst.h" 00024 #include "hlink.h" 00025 #include "perhist.h" 00026 #include "dispex.h" 00027 00028 #include "wine/list.h" 00029 #include "wine/unicode.h" 00030 00031 #ifdef INIT_GUID 00032 #include "initguid.h" 00033 #endif 00034 00035 #include "nsiface.h" 00036 00037 #define NS_OK ((nsresult)0x00000000L) 00038 #define NS_ERROR_FAILURE ((nsresult)0x80004005L) 00039 #define NS_NOINTERFACE ((nsresult)0x80004002L) 00040 #define NS_ERROR_NOT_IMPLEMENTED ((nsresult)0x80004001L) 00041 #define NS_ERROR_NOT_AVAILABLE ((nsresult)0x80040111L) 00042 #define NS_ERROR_INVALID_ARG ((nsresult)0x80070057L) 00043 #define NS_ERROR_UNEXPECTED ((nsresult)0x8000ffffL) 00044 #define NS_ERROR_UNKNOWN_PROTOCOL ((nsresult)0x804b0012L) 00045 00046 #define NS_FAILED(res) ((res) & 0x80000000) 00047 #define NS_SUCCEEDED(res) (!NS_FAILED(res)) 00048 00049 #define NSAPI WINAPI 00050 00051 #define MSHTML_E_NODOC 0x800a025c 00052 00053 typedef struct HTMLDOMNode HTMLDOMNode; 00054 typedef struct ConnectionPoint ConnectionPoint; 00055 typedef struct BSCallback BSCallback; 00056 typedef struct event_target_t event_target_t; 00057 00058 /* NOTE: make sure to keep in sync with dispex.c */ 00059 typedef enum { 00060 NULL_tid, 00061 DispCEventObj_tid, 00062 DispDOMChildrenCollection_tid, 00063 DispHTMLAnchorElement_tid, 00064 DispHTMLBody_tid, 00065 DispHTMLCommentElement_tid, 00066 DispHTMLCurrentStyle_tid, 00067 DispHTMLDocument_tid, 00068 DispHTMLDOMTextNode_tid, 00069 DispHTMLElementCollection_tid, 00070 DispHTMLFormElement_tid, 00071 DispHTMLGenericElement_tid, 00072 DispHTMLFrameElement_tid, 00073 DispHTMLIFrame_tid, 00074 DispHTMLImg_tid, 00075 DispHTMLInputElement_tid, 00076 DispHTMLLocation_tid, 00077 DispHTMLNavigator_tid, 00078 DispHTMLOptionElement_tid, 00079 DispHTMLScreen_tid, 00080 DispHTMLScriptElement_tid, 00081 DispHTMLSelectElement_tid, 00082 DispHTMLStyle_tid, 00083 DispHTMLTable_tid, 00084 DispHTMLTableRow_tid, 00085 DispHTMLTextAreaElement_tid, 00086 DispHTMLUnknownElement_tid, 00087 DispHTMLWindow2_tid, 00088 HTMLDocumentEvents_tid, 00089 IHTMLAnchorElement_tid, 00090 IHTMLBodyElement_tid, 00091 IHTMLBodyElement2_tid, 00092 IHTMLCommentElement_tid, 00093 IHTMLCurrentStyle_tid, 00094 IHTMLCurrentStyle2_tid, 00095 IHTMLCurrentStyle3_tid, 00096 IHTMLCurrentStyle4_tid, 00097 IHTMLDocument2_tid, 00098 IHTMLDocument3_tid, 00099 IHTMLDocument4_tid, 00100 IHTMLDocument5_tid, 00101 IHTMLDOMChildrenCollection_tid, 00102 IHTMLDOMNode_tid, 00103 IHTMLDOMNode2_tid, 00104 IHTMLDOMTextNode_tid, 00105 IHTMLElement_tid, 00106 IHTMLElement2_tid, 00107 IHTMLElement3_tid, 00108 IHTMLElement4_tid, 00109 IHTMLElementCollection_tid, 00110 IHTMLEventObj_tid, 00111 IHTMLFiltersCollection_tid, 00112 IHTMLFormElement_tid, 00113 IHTMLFrameBase_tid, 00114 IHTMLFrameBase2_tid, 00115 IHTMLFrameElement3_tid, 00116 IHTMLGenericElement_tid, 00117 IHTMLIFrameElement_tid, 00118 IHTMLImageElementFactory_tid, 00119 IHTMLImgElement_tid, 00120 IHTMLInputElement_tid, 00121 IHTMLLocation_tid, 00122 IHTMLOptionElement_tid, 00123 IHTMLRect_tid, 00124 IHTMLScreen_tid, 00125 IHTMLScriptElement_tid, 00126 IHTMLSelectElement_tid, 00127 IHTMLStyle_tid, 00128 IHTMLStyle2_tid, 00129 IHTMLStyle3_tid, 00130 IHTMLStyle4_tid, 00131 IHTMLTable_tid, 00132 IHTMLTableRow_tid, 00133 IHTMLTextAreaElement_tid, 00134 IHTMLTextContainer_tid, 00135 IHTMLUniqueName_tid, 00136 IHTMLWindow2_tid, 00137 IHTMLWindow3_tid, 00138 IHTMLWindow4_tid, 00139 IOmNavigator_tid, 00140 LAST_tid 00141 } tid_t; 00142 00143 typedef struct dispex_data_t dispex_data_t; 00144 typedef struct dispex_dynamic_data_t dispex_dynamic_data_t; 00145 00146 #define MSHTML_DISPID_CUSTOM_MIN 0x60000000 00147 #define MSHTML_DISPID_CUSTOM_MAX 0x6fffffff 00148 #define MSHTML_CUSTOM_DISPID_CNT (MSHTML_DISPID_CUSTOM_MAX-MSHTML_DISPID_CUSTOM_MIN) 00149 00150 typedef struct { 00151 HRESULT (*value)(IUnknown*,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,IServiceProvider*); 00152 HRESULT (*get_dispid)(IUnknown*,BSTR,DWORD,DISPID*); 00153 HRESULT (*invoke)(IUnknown*,DISPID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,IServiceProvider*); 00154 } dispex_static_data_vtbl_t; 00155 00156 typedef struct { 00157 const dispex_static_data_vtbl_t *vtbl; 00158 const tid_t disp_tid; 00159 dispex_data_t *data; 00160 const tid_t* const iface_tids; 00161 } dispex_static_data_t; 00162 00163 typedef struct { 00164 const IDispatchExVtbl *lpIDispatchExVtbl; 00165 00166 IUnknown *outer; 00167 00168 dispex_static_data_t *data; 00169 dispex_dynamic_data_t *dynamic_data; 00170 } DispatchEx; 00171 00172 void init_dispex(DispatchEx*,IUnknown*,dispex_static_data_t*); 00173 void release_dispex(DispatchEx*); 00174 BOOL dispex_query_interface(DispatchEx*,REFIID,void**); 00175 HRESULT dispex_get_dprop_ref(DispatchEx*,const WCHAR*,BOOL,VARIANT**); 00176 HRESULT get_dispids(tid_t,DWORD*,DISPID**); 00177 HRESULT remove_prop(DispatchEx*,BSTR,VARIANT_BOOL*); 00178 00179 typedef struct HTMLWindow HTMLWindow; 00180 typedef struct HTMLDocumentNode HTMLDocumentNode; 00181 typedef struct HTMLDocumentObj HTMLDocumentObj; 00182 typedef struct HTMLFrameBase HTMLFrameBase; 00183 typedef struct NSContainer NSContainer; 00184 00185 typedef enum { 00186 SCRIPTMODE_GECKO, 00187 SCRIPTMODE_ACTIVESCRIPT 00188 } SCRIPTMODE; 00189 00190 typedef struct ScriptHost ScriptHost; 00191 00192 typedef enum { 00193 GLOBAL_SCRIPTVAR, 00194 GLOBAL_ELEMENTVAR 00195 } global_prop_type_t; 00196 00197 typedef struct { 00198 global_prop_type_t type; 00199 WCHAR *name; 00200 ScriptHost *script_host; 00201 DISPID id; 00202 } global_prop_t; 00203 00204 typedef struct { 00205 const IHTMLOptionElementFactoryVtbl *lpHTMLOptionElementFactoryVtbl; 00206 00207 LONG ref; 00208 00209 HTMLWindow *window; 00210 } HTMLOptionElementFactory; 00211 00212 typedef struct { 00213 DispatchEx dispex; 00214 const IHTMLImageElementFactoryVtbl *lpHTMLImageElementFactoryVtbl; 00215 00216 LONG ref; 00217 00218 HTMLWindow *window; 00219 } HTMLImageElementFactory; 00220 00221 struct HTMLLocation { 00222 DispatchEx dispex; 00223 const IHTMLLocationVtbl *lpHTMLLocationVtbl; 00224 00225 LONG ref; 00226 00227 HTMLWindow *window; 00228 }; 00229 00230 typedef struct { 00231 HTMLWindow *window; 00232 LONG ref; 00233 } windowref_t; 00234 00235 typedef struct nsChannelBSC nsChannelBSC; 00236 00237 struct HTMLWindow { 00238 DispatchEx dispex; 00239 const IHTMLWindow2Vtbl *lpHTMLWindow2Vtbl; 00240 const IHTMLWindow3Vtbl *lpHTMLWindow3Vtbl; 00241 const IHTMLWindow4Vtbl *lpHTMLWindow4Vtbl; 00242 const IHTMLPrivateWindowVtbl *lpIHTMLPrivateWindowVtbl; 00243 const IDispatchExVtbl *lpIDispatchExVtbl; 00244 00245 LONG ref; 00246 00247 windowref_t *window_ref; 00248 LONG task_magic; 00249 00250 HTMLDocumentNode *doc; 00251 HTMLDocumentObj *doc_obj; 00252 nsIDOMWindow *nswindow; 00253 HTMLWindow *parent; 00254 HTMLFrameBase *frame_element; 00255 READYSTATE readystate; 00256 00257 nsChannelBSC *bscallback; 00258 IMoniker *mon; 00259 LPOLESTR url; 00260 00261 IHTMLEventObj *event; 00262 00263 SCRIPTMODE scriptmode; 00264 struct list script_hosts; 00265 00266 HTMLOptionElementFactory *option_factory; 00267 HTMLImageElementFactory *image_factory; 00268 HTMLLocation *location; 00269 IHTMLScreen *screen; 00270 00271 global_prop_t *global_props; 00272 DWORD global_prop_cnt; 00273 DWORD global_prop_size; 00274 00275 struct list children; 00276 struct list sibling_entry; 00277 struct list entry; 00278 }; 00279 00280 typedef enum { 00281 UNKNOWN_USERMODE, 00282 BROWSEMODE, 00283 EDITMODE 00284 } USERMODE; 00285 00286 typedef struct _cp_static_data_t { 00287 tid_t tid; 00288 void (*on_advise)(IUnknown*,struct _cp_static_data_t*); 00289 DWORD id_cnt; 00290 DISPID *ids; 00291 } cp_static_data_t; 00292 00293 typedef struct ConnectionPointContainer { 00294 const IConnectionPointContainerVtbl *lpConnectionPointContainerVtbl; 00295 00296 ConnectionPoint *cp_list; 00297 IUnknown *outer; 00298 struct ConnectionPointContainer *forward_container; 00299 } ConnectionPointContainer; 00300 00301 struct ConnectionPoint { 00302 const IConnectionPointVtbl *lpConnectionPointVtbl; 00303 00304 ConnectionPointContainer *container; 00305 00306 union { 00307 IUnknown *unk; 00308 IDispatch *disp; 00309 IPropertyNotifySink *propnotif; 00310 } *sinks; 00311 DWORD sinks_size; 00312 00313 const IID *iid; 00314 cp_static_data_t *data; 00315 00316 ConnectionPoint *next; 00317 }; 00318 00319 struct HTMLDocument { 00320 const IHTMLDocument2Vtbl *lpHTMLDocument2Vtbl; 00321 const IHTMLDocument3Vtbl *lpHTMLDocument3Vtbl; 00322 const IHTMLDocument4Vtbl *lpHTMLDocument4Vtbl; 00323 const IHTMLDocument5Vtbl *lpHTMLDocument5Vtbl; 00324 const IHTMLDocument6Vtbl *lpHTMLDocument6Vtbl; 00325 const IPersistMonikerVtbl *lpPersistMonikerVtbl; 00326 const IPersistFileVtbl *lpPersistFileVtbl; 00327 const IPersistHistoryVtbl *lpPersistHistoryVtbl; 00328 const IMonikerPropVtbl *lpMonikerPropVtbl; 00329 const IOleObjectVtbl *lpOleObjectVtbl; 00330 const IOleDocumentVtbl *lpOleDocumentVtbl; 00331 const IOleDocumentViewVtbl *lpOleDocumentViewVtbl; 00332 const IOleInPlaceActiveObjectVtbl *lpOleInPlaceActiveObjectVtbl; 00333 const IViewObjectExVtbl *lpViewObjectExVtbl; 00334 const IOleInPlaceObjectWindowlessVtbl *lpOleInPlaceObjectWindowlessVtbl; 00335 const IServiceProviderVtbl *lpServiceProviderVtbl; 00336 const IOleCommandTargetVtbl *lpOleCommandTargetVtbl; 00337 const IOleControlVtbl *lpOleControlVtbl; 00338 const IHlinkTargetVtbl *lpHlinkTargetVtbl; 00339 const IPersistStreamInitVtbl *lpPersistStreamInitVtbl; 00340 const IDispatchExVtbl *lpIDispatchExVtbl; 00341 const ISupportErrorInfoVtbl *lpSupportErrorInfoVtbl; 00342 const IObjectWithSiteVtbl *lpObjectWithSiteVtbl; 00343 00344 IUnknown *unk_impl; 00345 IDispatchEx *dispex; 00346 00347 HTMLDocumentObj *doc_obj; 00348 HTMLDocumentNode *doc_node; 00349 00350 HTMLWindow *window; 00351 00352 LONG task_magic; 00353 00354 ConnectionPointContainer cp_container; 00355 ConnectionPoint cp_htmldocevents; 00356 ConnectionPoint cp_htmldocevents2; 00357 ConnectionPoint cp_propnotif; 00358 ConnectionPoint cp_dispatch; 00359 00360 IOleAdviseHolder *advise_holder; 00361 }; 00362 00363 static inline HRESULT htmldoc_query_interface(HTMLDocument *This, REFIID riid, void **ppv) 00364 { 00365 return IUnknown_QueryInterface(This->unk_impl, riid, ppv); 00366 } 00367 00368 static inline ULONG htmldoc_addref(HTMLDocument *This) 00369 { 00370 return IUnknown_AddRef(This->unk_impl); 00371 } 00372 00373 static inline ULONG htmldoc_release(HTMLDocument *This) 00374 { 00375 return IUnknown_Release(This->unk_impl); 00376 } 00377 00378 struct HTMLDocumentObj { 00379 HTMLDocument basedoc; 00380 DispatchEx dispex; 00381 const ICustomDocVtbl *lpCustomDocVtbl; 00382 00383 LONG ref; 00384 00385 NSContainer *nscontainer; 00386 00387 IOleClientSite *client; 00388 IDocHostUIHandler *hostui; 00389 IOleInPlaceSite *ipsite; 00390 IOleInPlaceFrame *frame; 00391 IOleInPlaceUIWindow *ip_window; 00392 IAdviseSink *view_sink; 00393 00394 DOCHOSTUIINFO hostinfo; 00395 00396 IOleUndoManager *undomgr; 00397 00398 HWND hwnd; 00399 HWND tooltips_hwnd; 00400 00401 BOOL request_uiactivate; 00402 BOOL in_place_active; 00403 BOOL ui_active; 00404 BOOL window_active; 00405 BOOL hostui_setup; 00406 BOOL container_locked; 00407 BOOL focus; 00408 INT download_state; 00409 00410 USERMODE usermode; 00411 LPWSTR mime; 00412 00413 DWORD update; 00414 }; 00415 00416 struct NSContainer { 00417 const nsIWebBrowserChromeVtbl *lpWebBrowserChromeVtbl; 00418 const nsIContextMenuListenerVtbl *lpContextMenuListenerVtbl; 00419 const nsIURIContentListenerVtbl *lpURIContentListenerVtbl; 00420 const nsIEmbeddingSiteWindowVtbl *lpEmbeddingSiteWindowVtbl; 00421 const nsITooltipListenerVtbl *lpTooltipListenerVtbl; 00422 const nsIInterfaceRequestorVtbl *lpInterfaceRequestorVtbl; 00423 const nsIWeakReferenceVtbl *lpWeakReferenceVtbl; 00424 const nsISupportsWeakReferenceVtbl *lpSupportsWeakReferenceVtbl; 00425 00426 nsIWebBrowser *webbrowser; 00427 nsIWebNavigation *navigation; 00428 nsIBaseWindow *window; 00429 nsIWebBrowserFocus *focus; 00430 00431 nsIEditor *editor; 00432 nsIController *editor_controller; 00433 00434 LONG ref; 00435 00436 NSContainer *parent; 00437 HTMLDocumentObj *doc; 00438 00439 nsIURIContentListener *content_listener; 00440 00441 HWND hwnd; 00442 }; 00443 00444 typedef struct nsWineURI nsWineURI; 00445 00446 HRESULT set_wine_url(nsWineURI*,LPCWSTR); 00447 nsresult on_start_uri_open(NSContainer*,nsIURI*,PRBool*); 00448 00449 typedef struct { 00450 const nsIHttpChannelVtbl *lpHttpChannelVtbl; 00451 const nsIUploadChannelVtbl *lpUploadChannelVtbl; 00452 const nsIHttpChannelInternalVtbl *lpIHttpChannelInternalVtbl; 00453 00454 LONG ref; 00455 00456 nsWineURI *uri; 00457 nsIInputStream *post_data_stream; 00458 nsILoadGroup *load_group; 00459 nsIInterfaceRequestor *notif_callback; 00460 nsISupports *owner; 00461 nsLoadFlags load_flags; 00462 nsIURI *original_uri; 00463 char *content_type; 00464 char *charset; 00465 PRUint32 response_status; 00466 struct list response_headers; 00467 UINT url_scheme; 00468 } nsChannel; 00469 00470 struct ResponseHeader { 00471 struct list entry; 00472 WCHAR *header; 00473 WCHAR *data; 00474 }; 00475 00476 typedef struct { 00477 HRESULT (*qi)(HTMLDOMNode*,REFIID,void**); 00478 void (*destructor)(HTMLDOMNode*); 00479 event_target_t **(*get_event_target)(HTMLDOMNode*); 00480 HRESULT (*call_event)(HTMLDOMNode*,DWORD,BOOL*); 00481 HRESULT (*put_disabled)(HTMLDOMNode*,VARIANT_BOOL); 00482 HRESULT (*get_disabled)(HTMLDOMNode*,VARIANT_BOOL*); 00483 HRESULT (*get_document)(HTMLDOMNode*,IDispatch**); 00484 HRESULT (*get_readystate)(HTMLDOMNode*,BSTR*); 00485 HRESULT (*get_dispid)(HTMLDOMNode*,BSTR,DWORD,DISPID*); 00486 HRESULT (*invoke)(HTMLDOMNode*,DISPID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,IServiceProvider*); 00487 HRESULT (*bind_to_tree)(HTMLDOMNode*); 00488 } NodeImplVtbl; 00489 00490 struct HTMLDOMNode { 00491 DispatchEx dispex; 00492 const IHTMLDOMNodeVtbl *lpHTMLDOMNodeVtbl; 00493 const IHTMLDOMNode2Vtbl *lpHTMLDOMNode2Vtbl; 00494 const NodeImplVtbl *vtbl; 00495 00496 LONG ref; 00497 00498 nsIDOMNode *nsnode; 00499 HTMLDocumentNode *doc; 00500 event_target_t *event_target; 00501 ConnectionPointContainer *cp_container; 00502 00503 HTMLDOMNode *next; 00504 }; 00505 00506 typedef struct { 00507 HTMLDOMNode node; 00508 ConnectionPointContainer cp_container; 00509 00510 const IHTMLElementVtbl *lpHTMLElementVtbl; 00511 const IHTMLElement2Vtbl *lpHTMLElement2Vtbl; 00512 const IHTMLElement3Vtbl *lpHTMLElement3Vtbl; 00513 00514 nsIDOMHTMLElement *nselem; 00515 } HTMLElement; 00516 00517 #define HTMLELEMENT_TIDS \ 00518 IHTMLDOMNode_tid, \ 00519 IHTMLDOMNode2_tid, \ 00520 IHTMLElement_tid, \ 00521 IHTMLElement2_tid, \ 00522 IHTMLElement3_tid, \ 00523 IHTMLElement4_tid 00524 00525 typedef struct { 00526 HTMLElement element; 00527 00528 const IHTMLTextContainerVtbl *lpHTMLTextContainerVtbl; 00529 00530 ConnectionPoint cp; 00531 } HTMLTextContainer; 00532 00533 struct HTMLFrameBase { 00534 HTMLElement element; 00535 00536 const IHTMLFrameBaseVtbl *lpIHTMLFrameBaseVtbl; 00537 const IHTMLFrameBase2Vtbl *lpIHTMLFrameBase2Vtbl; 00538 00539 HTMLWindow *content_window; 00540 00541 nsIDOMHTMLFrameElement *nsframe; 00542 nsIDOMHTMLIFrameElement *nsiframe; 00543 }; 00544 00545 typedef struct _mutation_queue_t { 00546 DWORD type; 00547 nsISupports *nsiface; 00548 00549 struct _mutation_queue_t *next; 00550 } mutation_queue_t; 00551 00552 typedef struct nsDocumentEventListener nsDocumentEventListener; 00553 00554 struct HTMLDocumentNode { 00555 HTMLDOMNode node; 00556 HTMLDocument basedoc; 00557 00558 const IInternetHostSecurityManagerVtbl *lpIInternetHostSecurityManagerVtbl; 00559 00560 const nsIDocumentObserverVtbl *lpIDocumentObserverVtbl; 00561 const nsIRunnableVtbl *lpIRunnableVtbl; 00562 00563 LONG ref; 00564 00565 nsIDOMHTMLDocument *nsdoc; 00566 HTMLDOMNode *nodes; 00567 BOOL content_ready; 00568 event_target_t *body_event_target; 00569 00570 IInternetSecurityManager *secmgr; 00571 ICatInformation *catmgr; 00572 nsDocumentEventListener *nsevent_listener; 00573 BOOL *event_vector; 00574 00575 mutation_queue_t *mutation_queue; 00576 mutation_queue_t *mutation_queue_tail; 00577 00578 struct list bindings; 00579 struct list selection_list; 00580 struct list range_list; 00581 }; 00582 00583 #define HTMLWINDOW2(x) ((IHTMLWindow2*) &(x)->lpHTMLWindow2Vtbl) 00584 #define HTMLWINDOW3(x) ((IHTMLWindow3*) &(x)->lpHTMLWindow3Vtbl) 00585 #define HTMLWINDOW4(x) ((IHTMLWindow4*) &(x)->lpHTMLWindow4Vtbl) 00586 00587 #define HTMLDOC(x) ((IHTMLDocument2*) &(x)->lpHTMLDocument2Vtbl) 00588 #define HTMLDOC3(x) ((IHTMLDocument3*) &(x)->lpHTMLDocument3Vtbl) 00589 #define HTMLDOC4(x) ((IHTMLDocument4*) &(x)->lpHTMLDocument4Vtbl) 00590 #define HTMLDOC5(x) ((IHTMLDocument5*) &(x)->lpHTMLDocument5Vtbl) 00591 #define HTMLDOC6(x) ((IHTMLDocument6*) &(x)->lpHTMLDocument6Vtbl) 00592 #define PERSIST(x) ((IPersist*) &(x)->lpPersistFileVtbl) 00593 #define PERSISTMON(x) ((IPersistMoniker*) &(x)->lpPersistMonikerVtbl) 00594 #define PERSISTFILE(x) ((IPersistFile*) &(x)->lpPersistFileVtbl) 00595 #define MONPROP(x) ((IMonikerProp*) &(x)->lpMonikerPropVtbl) 00596 #define OLEOBJ(x) ((IOleObject*) &(x)->lpOleObjectVtbl) 00597 #define OLEDOC(x) ((IOleDocument*) &(x)->lpOleDocumentVtbl) 00598 #define DOCVIEW(x) ((IOleDocumentView*) &(x)->lpOleDocumentViewVtbl) 00599 #define OLEWIN(x) ((IOleWindow*) &(x)->lpOleInPlaceActiveObjectVtbl) 00600 #define ACTOBJ(x) ((IOleInPlaceActiveObject*) &(x)->lpOleInPlaceActiveObjectVtbl) 00601 #define VIEWOBJ(x) ((IViewObject*) &(x)->lpViewObjectExVtbl) 00602 #define VIEWOBJ2(x) ((IViewObject2*) &(x)->lpViewObjectExVtbl) 00603 #define VIEWOBJEX(x) ((IViewObjectEx*) &(x)->lpViewObjectExVtbl) 00604 #define INPLACEOBJ(x) ((IOleInPlaceObject*) &(x)->lpOleInPlaceObjectWindowlessVtbl) 00605 #define INPLACEWIN(x) ((IOleInPlaceObjectWindowless*) &(x)->lpOleInPlaceObjectWindowlessVtbl) 00606 #define SERVPROV(x) ((IServiceProvider*) &(x)->lpServiceProviderVtbl) 00607 #define CMDTARGET(x) ((IOleCommandTarget*) &(x)->lpOleCommandTargetVtbl) 00608 #define CONTROL(x) ((IOleControl*) &(x)->lpOleControlVtbl) 00609 #define HLNKTARGET(x) ((IHlinkTarget*) &(x)->lpHlinkTargetVtbl) 00610 #define CONPTCONT(x) ((IConnectionPointContainer*) &(x)->lpConnectionPointContainerVtbl) 00611 #define PERSTRINIT(x) ((IPersistStreamInit*) &(x)->lpPersistStreamInitVtbl) 00612 #define PERSISTHIST(x) ((IPersistHistory*) &(x)->lpPersistHistoryVtbl) 00613 #define CUSTOMDOC(x) ((ICustomDoc*) &(x)->lpCustomDocVtbl) 00614 #define OBJSITE(x) ((IObjectWithSite*) &(x)->lpObjectWithSiteVtbl) 00615 00616 #define NSWBCHROME(x) ((nsIWebBrowserChrome*) &(x)->lpWebBrowserChromeVtbl) 00617 #define NSCML(x) ((nsIContextMenuListener*) &(x)->lpContextMenuListenerVtbl) 00618 #define NSURICL(x) ((nsIURIContentListener*) &(x)->lpURIContentListenerVtbl) 00619 #define NSEMBWNDS(x) ((nsIEmbeddingSiteWindow*) &(x)->lpEmbeddingSiteWindowVtbl) 00620 #define NSIFACEREQ(x) ((nsIInterfaceRequestor*) &(x)->lpInterfaceRequestorVtbl) 00621 #define NSTOOLTIP(x) ((nsITooltipListener*) &(x)->lpTooltipListenerVtbl) 00622 #define NSEVENTLIST(x) ((nsIDOMEventListener*) &(x)->lpDOMEventListenerVtbl) 00623 #define NSWEAKREF(x) ((nsIWeakReference*) &(x)->lpWeakReferenceVtbl) 00624 #define NSSUPWEAKREF(x) ((nsISupportsWeakReference*) &(x)->lpSupportsWeakReferenceVtbl) 00625 00626 #define NSDOCOBS(x) ((nsIDocumentObserver*) &(x)->lpIDocumentObserverVtbl) 00627 00628 #define NSRUNNABLE(x) ((nsIRunnable*) &(x)->lpIRunnableVtbl) 00629 00630 #define NSCHANNEL(x) ((nsIChannel*) &(x)->lpHttpChannelVtbl) 00631 #define NSHTTPCHANNEL(x) ((nsIHttpChannel*) &(x)->lpHttpChannelVtbl) 00632 #define NSUPCHANNEL(x) ((nsIUploadChannel*) &(x)->lpUploadChannelVtbl) 00633 #define NSHTTPINTERNAL(x) ((nsIHttpChannelInternal*) &(x)->lpIHttpChannelInternalVtbl) 00634 00635 #define HTTPNEG(x) ((IHttpNegotiate2*) &(x)->lpHttpNegotiate2Vtbl) 00636 #define STATUSCLB(x) ((IBindStatusCallback*) &(x)->lpBindStatusCallbackVtbl) 00637 #define BINDINFO(x) ((IInternetBindInfo*) &(x)->lpInternetBindInfoVtbl); 00638 00639 #define HTMLELEM(x) ((IHTMLElement*) &(x)->lpHTMLElementVtbl) 00640 #define HTMLELEM2(x) ((IHTMLElement2*) &(x)->lpHTMLElement2Vtbl) 00641 #define HTMLELEM3(x) ((IHTMLElement3*) &(x)->lpHTMLElement3Vtbl) 00642 #define HTMLDOMNODE(x) ((IHTMLDOMNode*) &(x)->lpHTMLDOMNodeVtbl) 00643 #define HTMLDOMNODE2(x) ((IHTMLDOMNode2*) &(x)->lpHTMLDOMNode2Vtbl) 00644 00645 #define HTMLTEXTCONT(x) ((IHTMLTextContainer*) &(x)->lpHTMLTextContainerVtbl) 00646 #define HTMLFRAMEBASE(x) ((IHTMLFrameBase*) &(x)->lpIHTMLFrameBaseVtbl) 00647 #define HTMLFRAMEBASE2(x) ((IHTMLFrameBase2*) &(x)->lpIHTMLFrameBase2Vtbl) 00648 00649 #define HTMLOPTFACTORY(x) ((IHTMLOptionElementFactory*) &(x)->lpHTMLOptionElementFactoryVtbl) 00650 #define HTMLIMGFACTORY(x) ((IHTMLImageElementFactory*) &(x)->lpHTMLImageElementFactoryVtbl) 00651 #define HTMLLOCATION(x) ((IHTMLLocation*) &(x)->lpHTMLLocationVtbl) 00652 00653 #define DISPATCHEX(x) ((IDispatchEx*) &(x)->lpIDispatchExVtbl) 00654 00655 #define SUPPERRINFO(x) ((ISupportErrorInfo*) &(x)->lpSupportErrorInfoVtbl) 00656 00657 #define HOSTSECMGR(x) ((IInternetHostSecurityManager*) &(x)->lpIInternetHostSecurityManagerVtbl) 00658 00659 #define DEFINE_THIS2(cls,ifc,iface) ((cls*)((BYTE*)(iface)-offsetof(cls,ifc))) 00660 #define DEFINE_THIS(cls,ifc,iface) DEFINE_THIS2(cls,lp ## ifc ## Vtbl,iface) 00661 00662 HRESULT HTMLDocument_Create(IUnknown*,REFIID,void**); 00663 HRESULT HTMLLoadOptions_Create(IUnknown*,REFIID,void**); 00664 HRESULT create_doc_from_nsdoc(nsIDOMHTMLDocument*,HTMLDocumentObj*,HTMLWindow*,HTMLDocumentNode**); 00665 00666 HRESULT HTMLWindow_Create(HTMLDocumentObj*,nsIDOMWindow*,HTMLWindow*,HTMLWindow**); 00667 void update_window_doc(HTMLWindow*); 00668 HTMLWindow *nswindow_to_window(const nsIDOMWindow*); 00669 nsIDOMWindow *get_nsdoc_window(nsIDOMDocument*); 00670 HTMLOptionElementFactory *HTMLOptionElementFactory_Create(HTMLWindow*); 00671 HTMLImageElementFactory *HTMLImageElementFactory_Create(HTMLWindow*); 00672 HRESULT HTMLLocation_Create(HTMLWindow*,HTMLLocation**); 00673 IOmNavigator *OmNavigator_Create(void); 00674 HRESULT HTMLScreen_Create(IHTMLScreen**); 00675 00676 void HTMLDocument_HTMLDocument3_Init(HTMLDocument*); 00677 void HTMLDocument_HTMLDocument5_Init(HTMLDocument*); 00678 void HTMLDocument_Persist_Init(HTMLDocument*); 00679 void HTMLDocument_OleCmd_Init(HTMLDocument*); 00680 void HTMLDocument_OleObj_Init(HTMLDocument*); 00681 void HTMLDocument_View_Init(HTMLDocument*); 00682 void HTMLDocument_Window_Init(HTMLDocument*); 00683 void HTMLDocument_Service_Init(HTMLDocument*); 00684 void HTMLDocument_Hlink_Init(HTMLDocument*); 00685 00686 void HTMLDocumentNode_SecMgr_Init(HTMLDocumentNode*); 00687 00688 HRESULT HTMLCurrentStyle_Create(HTMLElement*,IHTMLCurrentStyle**); 00689 00690 void ConnectionPoint_Init(ConnectionPoint*,ConnectionPointContainer*,REFIID,cp_static_data_t*); 00691 void ConnectionPointContainer_Init(ConnectionPointContainer*,IUnknown*); 00692 void ConnectionPointContainer_Destroy(ConnectionPointContainer*); 00693 00694 NSContainer *NSContainer_Create(HTMLDocumentObj*,NSContainer*); 00695 void NSContainer_Release(NSContainer*); 00696 00697 void init_mutation(HTMLDocumentNode*); 00698 void release_mutation(HTMLDocumentNode*); 00699 00700 void HTMLDocument_LockContainer(HTMLDocumentObj*,BOOL); 00701 void show_context_menu(HTMLDocumentObj*,DWORD,POINT*,IDispatch*); 00702 void notif_focus(HTMLDocumentObj*); 00703 00704 void show_tooltip(HTMLDocumentObj*,DWORD,DWORD,LPCWSTR); 00705 void hide_tooltip(HTMLDocumentObj*); 00706 HRESULT get_client_disp_property(IOleClientSite*,DISPID,VARIANT*); 00707 00708 HRESULT ProtocolFactory_Create(REFCLSID,REFIID,void**); 00709 00710 BOOL load_gecko(BOOL); 00711 void close_gecko(void); 00712 void register_nsservice(nsIComponentRegistrar*,nsIServiceManager*); 00713 void init_nsio(nsIComponentManager*,nsIComponentRegistrar*); 00714 void release_nsio(void); 00715 BOOL install_wine_gecko(BOOL); 00716 00717 HRESULT nsuri_to_url(LPCWSTR,BOOL,BSTR*); 00718 HRESULT create_doc_uri(HTMLWindow*,WCHAR*,nsWineURI**); 00719 HRESULT load_nsuri(HTMLWindow*,nsWineURI*,nsChannelBSC*,DWORD); 00720 00721 HRESULT hlink_frame_navigate(HTMLDocument*,LPCWSTR,nsIInputStream*,DWORD,BOOL*); 00722 HRESULT navigate_url(HTMLWindow*,const WCHAR*,const WCHAR*); 00723 HRESULT set_frame_doc(HTMLFrameBase*,nsIDOMDocument*); 00724 HRESULT set_moniker(HTMLDocument*,IMoniker*,IBindCtx*,nsChannelBSC*,BOOL); 00725 00726 void call_property_onchanged(ConnectionPoint*,DISPID); 00727 HRESULT call_set_active_object(IOleInPlaceUIWindow*,IOleInPlaceActiveObject*); 00728 00729 void *nsalloc(size_t) __WINE_ALLOC_SIZE(1); 00730 void nsfree(void*); 00731 00732 void nsACString_InitDepend(nsACString*,const char*); 00733 void nsACString_SetData(nsACString*,const char*); 00734 PRUint32 nsACString_GetData(const nsACString*,const char**); 00735 void nsACString_Finish(nsACString*); 00736 00737 BOOL nsAString_Init(nsAString*,const PRUnichar*); 00738 void nsAString_InitDepend(nsAString*,const PRUnichar*); 00739 void nsAString_SetData(nsAString*,const PRUnichar*); 00740 PRUint32 nsAString_GetData(const nsAString*,const PRUnichar**); 00741 void nsAString_Finish(nsAString*); 00742 00743 nsICommandParams *create_nscommand_params(void); 00744 HRESULT nsnode_to_nsstring(nsIDOMNode*,nsAString*); 00745 void get_editor_controller(NSContainer*); 00746 nsresult get_nsinterface(nsISupports*,REFIID,void**); 00747 00748 void init_nsevents(HTMLDocumentNode*); 00749 void release_nsevents(HTMLDocumentNode*); 00750 void add_nsevent_listener(HTMLDocumentNode*,nsIDOMNode*,LPCWSTR); 00751 00752 void set_window_bscallback(HTMLWindow*,nsChannelBSC*); 00753 void set_current_mon(HTMLWindow*,IMoniker*); 00754 HRESULT start_binding(HTMLWindow*,HTMLDocumentNode*,BSCallback*,IBindCtx*); 00755 HRESULT async_start_doc_binding(HTMLWindow*,nsChannelBSC*); 00756 void abort_document_bindings(HTMLDocumentNode*); 00757 00758 HRESULT bind_mon_to_buffer(HTMLDocumentNode*,IMoniker*,void**,DWORD*); 00759 00760 HRESULT create_channelbsc(IMoniker*,WCHAR*,BYTE*,DWORD,nsChannelBSC**); 00761 HRESULT channelbsc_load_stream(nsChannelBSC*,IStream*); 00762 void channelbsc_set_channel(nsChannelBSC*,nsChannel*,nsIStreamListener*,nsISupports*); 00763 IMoniker *get_channelbsc_mon(nsChannelBSC*); 00764 00765 void set_ready_state(HTMLWindow*,READYSTATE); 00766 00767 HRESULT HTMLSelectionObject_Create(HTMLDocumentNode*,nsISelection*,IHTMLSelectionObject**); 00768 HRESULT HTMLTxtRange_Create(HTMLDocumentNode*,nsIDOMRange*,IHTMLTxtRange**); 00769 IHTMLStyle *HTMLStyle_Create(nsIDOMCSSStyleDeclaration*); 00770 IHTMLStyleSheet *HTMLStyleSheet_Create(nsIDOMStyleSheet*); 00771 IHTMLStyleSheetsCollection *HTMLStyleSheetsCollection_Create(nsIDOMStyleSheetList*); 00772 00773 void detach_selection(HTMLDocumentNode*); 00774 void detach_ranges(HTMLDocumentNode*); 00775 HRESULT get_node_text(HTMLDOMNode*,BSTR*); 00776 00777 HRESULT create_nselem(HTMLDocumentNode*,const WCHAR*,nsIDOMHTMLElement**); 00778 00779 HTMLDOMNode *HTMLDOMTextNode_Create(HTMLDocumentNode*,nsIDOMNode*); 00780 00781 HTMLElement *HTMLElement_Create(HTMLDocumentNode*,nsIDOMNode*,BOOL); 00782 HTMLElement *HTMLCommentElement_Create(HTMLDocumentNode*,nsIDOMNode*); 00783 HTMLElement *HTMLAnchorElement_Create(HTMLDocumentNode*,nsIDOMHTMLElement*); 00784 HTMLElement *HTMLBodyElement_Create(HTMLDocumentNode*,nsIDOMHTMLElement*); 00785 HTMLElement *HTMLFormElement_Create(HTMLDocumentNode*,nsIDOMHTMLElement*); 00786 HTMLElement *HTMLFrameElement_Create(HTMLDocumentNode*,nsIDOMHTMLElement*); 00787 HTMLElement *HTMLIFrame_Create(HTMLDocumentNode*,nsIDOMHTMLElement*); 00788 HTMLElement *HTMLImgElement_Create(HTMLDocumentNode*,nsIDOMHTMLElement*); 00789 HTMLElement *HTMLInputElement_Create(HTMLDocumentNode*,nsIDOMHTMLElement*); 00790 HTMLElement *HTMLOptionElement_Create(HTMLDocumentNode*,nsIDOMHTMLElement*); 00791 HTMLElement *HTMLScriptElement_Create(HTMLDocumentNode*,nsIDOMHTMLElement*); 00792 HTMLElement *HTMLSelectElement_Create(HTMLDocumentNode*,nsIDOMHTMLElement*); 00793 HTMLElement *HTMLTable_Create(HTMLDocumentNode*,nsIDOMHTMLElement*); 00794 HTMLElement *HTMLTableRow_Create(HTMLDocumentNode*,nsIDOMHTMLElement*); 00795 HTMLElement *HTMLTextAreaElement_Create(HTMLDocumentNode*,nsIDOMHTMLElement*); 00796 HTMLElement *HTMLGenericElement_Create(HTMLDocumentNode*,nsIDOMHTMLElement*); 00797 00798 void HTMLDOMNode_Init(HTMLDocumentNode*,HTMLDOMNode*,nsIDOMNode*); 00799 void HTMLElement_Init(HTMLElement*,HTMLDocumentNode*,nsIDOMHTMLElement*,dispex_static_data_t*); 00800 void HTMLElement2_Init(HTMLElement*); 00801 void HTMLElement3_Init(HTMLElement*); 00802 void HTMLTextContainer_Init(HTMLTextContainer*,HTMLDocumentNode*,nsIDOMHTMLElement*,dispex_static_data_t*); 00803 void HTMLFrameBase_Init(HTMLFrameBase*,HTMLDocumentNode*,nsIDOMHTMLElement*,dispex_static_data_t*); 00804 00805 HRESULT HTMLDOMNode_QI(HTMLDOMNode*,REFIID,void**); 00806 void HTMLDOMNode_destructor(HTMLDOMNode*); 00807 00808 HRESULT HTMLElement_QI(HTMLDOMNode*,REFIID,void**); 00809 void HTMLElement_destructor(HTMLDOMNode*); 00810 00811 HRESULT HTMLFrameBase_QI(HTMLFrameBase*,REFIID,void**); 00812 void HTMLFrameBase_destructor(HTMLFrameBase*); 00813 00814 HTMLDOMNode *get_node(HTMLDocumentNode*,nsIDOMNode*,BOOL); 00815 void release_nodes(HTMLDocumentNode*); 00816 00817 void release_script_hosts(HTMLWindow*); 00818 void connect_scripts(HTMLWindow*); 00819 void doc_insert_script(HTMLWindow*,nsIDOMHTMLScriptElement*); 00820 IDispatch *script_parse_event(HTMLWindow*,LPCWSTR); 00821 void set_script_mode(HTMLWindow*,SCRIPTMODE); 00822 BOOL find_global_prop(HTMLWindow*,BSTR,DWORD,ScriptHost**,DISPID*); 00823 IDispatch *get_script_disp(ScriptHost*); 00824 HRESULT search_window_props(HTMLWindow*,BSTR,DWORD,DISPID*); 00825 00826 IHTMLElementCollection *create_all_collection(HTMLDOMNode*,BOOL); 00827 IHTMLElementCollection *create_collection_from_nodelist(HTMLDocumentNode*,IUnknown*,nsIDOMNodeList*); 00828 IHTMLElementCollection *create_collection_from_htmlcol(HTMLDocumentNode*,IUnknown*,nsIDOMHTMLCollection*); 00829 00830 /* commands */ 00831 typedef struct { 00832 DWORD id; 00833 HRESULT (*query)(HTMLDocument*,OLECMD*); 00834 HRESULT (*exec)(HTMLDocument*,DWORD,VARIANT*,VARIANT*); 00835 } cmdtable_t; 00836 00837 extern const cmdtable_t editmode_cmds[]; 00838 00839 void do_ns_command(HTMLDocument*,const char*,nsICommandParams*); 00840 00841 /* timer */ 00842 #define UPDATE_UI 0x0001 00843 #define UPDATE_TITLE 0x0002 00844 00845 void update_doc(HTMLDocument*,DWORD); 00846 void update_title(HTMLDocumentObj*); 00847 00848 /* editor */ 00849 void init_editor(HTMLDocument*); 00850 void handle_edit_event(HTMLDocument*,nsIDOMEvent*); 00851 HRESULT editor_exec_copy(HTMLDocument*,DWORD,VARIANT*,VARIANT*); 00852 HRESULT editor_exec_cut(HTMLDocument*,DWORD,VARIANT*,VARIANT*); 00853 HRESULT editor_exec_paste(HTMLDocument*,DWORD,VARIANT*,VARIANT*); 00854 void handle_edit_load(HTMLDocument*); 00855 HRESULT editor_is_dirty(HTMLDocument*); 00856 void set_dirty(HTMLDocument*,VARIANT_BOOL); 00857 00858 extern DWORD mshtml_tls; 00859 00860 typedef struct task_t task_t; 00861 typedef void (*task_proc_t)(task_t*); 00862 00863 struct task_t { 00864 LONG target_magic; 00865 task_proc_t proc; 00866 struct task_t *next; 00867 }; 00868 00869 typedef struct { 00870 task_t header; 00871 HTMLDocumentObj *doc; 00872 } docobj_task_t; 00873 00874 typedef struct { 00875 HWND thread_hwnd; 00876 task_t *task_queue_head; 00877 task_t *task_queue_tail; 00878 struct list timer_list; 00879 } thread_data_t; 00880 00881 thread_data_t *get_thread_data(BOOL); 00882 HWND get_thread_hwnd(void); 00883 00884 LONG get_task_target_magic(void); 00885 void push_task(task_t*,task_proc_t,LONG); 00886 void remove_target_tasks(LONG); 00887 00888 DWORD set_task_timer(HTMLDocument*,DWORD,BOOL,IDispatch*); 00889 HRESULT clear_task_timer(HTMLDocument*,BOOL,DWORD); 00890 00891 void release_typelib(void); 00892 HRESULT call_disp_func(IDispatch*,DISPPARAMS*); 00893 00894 const char *debugstr_variant(const VARIANT*); 00895 00896 DEFINE_GUID(CLSID_AboutProtocol, 0x3050F406, 0x98B5, 0x11CF, 0xBB,0x82, 0x00,0xAA,0x00,0xBD,0xCE,0x0B); 00897 DEFINE_GUID(CLSID_JSProtocol, 0x3050F3B2, 0x98B5, 0x11CF, 0xBB,0x82, 0x00,0xAA,0x00,0xBD,0xCE,0x0B); 00898 DEFINE_GUID(CLSID_MailtoProtocol, 0x3050F3DA, 0x98B5, 0x11CF, 0xBB,0x82, 0x00,0xAA,0x00,0xBD,0xCE,0x0B); 00899 DEFINE_GUID(CLSID_ResProtocol, 0x3050F3BC, 0x98B5, 0x11CF, 0xBB,0x82, 0x00,0xAA,0x00,0xBD,0xCE,0x0B); 00900 DEFINE_GUID(CLSID_SysimageProtocol, 0x76E67A63, 0x06E9, 0x11D2, 0xA8,0x40, 0x00,0x60,0x08,0x05,0x93,0x82); 00901 00902 DEFINE_GUID(CLSID_CMarkup,0x3050f4fb,0x98b5,0x11cf,0xbb,0x82,0x00,0xaa,0x00,0xbd,0xce,0x0b); 00903 00904 /* memory allocation functions */ 00905 00906 static inline void * __WINE_ALLOC_SIZE(1) heap_alloc(size_t len) 00907 { 00908 return HeapAlloc(GetProcessHeap(), 0, len); 00909 } 00910 00911 static inline void * __WINE_ALLOC_SIZE(1) heap_alloc_zero(size_t len) 00912 { 00913 return HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, len); 00914 } 00915 00916 static inline void * __WINE_ALLOC_SIZE(2) heap_realloc(void *mem, size_t len) 00917 { 00918 return HeapReAlloc(GetProcessHeap(), 0, mem, len); 00919 } 00920 00921 static inline void * __WINE_ALLOC_SIZE(2) heap_realloc_zero(void *mem, size_t len) 00922 { 00923 return HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, mem, len); 00924 } 00925 00926 static inline BOOL heap_free(void *mem) 00927 { 00928 return HeapFree(GetProcessHeap(), 0, mem); 00929 } 00930 00931 static inline LPWSTR heap_strdupW(LPCWSTR str) 00932 { 00933 LPWSTR ret = NULL; 00934 00935 if(str) { 00936 DWORD size; 00937 00938 size = (strlenW(str)+1)*sizeof(WCHAR); 00939 ret = heap_alloc(size); 00940 memcpy(ret, str, size); 00941 } 00942 00943 return ret; 00944 } 00945 00946 static inline char *heap_strdupA(const char *str) 00947 { 00948 char *ret = NULL; 00949 00950 if(str) { 00951 DWORD size; 00952 00953 size = strlen(str)+1; 00954 ret = heap_alloc(size); 00955 memcpy(ret, str, size); 00956 } 00957 00958 return ret; 00959 } 00960 00961 static inline WCHAR *heap_strdupAtoW(const char *str) 00962 { 00963 LPWSTR ret = NULL; 00964 00965 if(str) { 00966 DWORD len; 00967 00968 len = MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0); 00969 ret = heap_alloc(len*sizeof(WCHAR)); 00970 MultiByteToWideChar(CP_ACP, 0, str, -1, ret, len); 00971 } 00972 00973 return ret; 00974 } 00975 00976 static inline char *heap_strdupWtoA(LPCWSTR str) 00977 { 00978 char *ret = NULL; 00979 00980 if(str) { 00981 DWORD size = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL); 00982 ret = heap_alloc(size); 00983 WideCharToMultiByte(CP_ACP, 0, str, -1, ret, size, NULL, NULL); 00984 } 00985 00986 return ret; 00987 } 00988 00989 static inline void windowref_addref(windowref_t *ref) 00990 { 00991 InterlockedIncrement(&ref->ref); 00992 } 00993 00994 static inline void windowref_release(windowref_t *ref) 00995 { 00996 if(!InterlockedDecrement(&ref->ref)) 00997 heap_free(ref); 00998 } 00999 01000 HDC get_display_dc(void); 01001 HINSTANCE get_shdoclc(void); 01002 01003 extern HINSTANCE hInst; Generated on Sat May 26 2012 04:23:37 for ReactOS by
1.7.6.1
|