ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

mshtml_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 doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.