]> git.saurik.com Git - wxWidgets.git/blob - utils/nplugin/src/npwin.cpp
A fix for attribrute sorting, but it's still broken if there are
[wxWidgets.git] / utils / nplugin / src / npwin.cpp
1 /* npwin.cpp */
2 #include "windows.h"
3
4 #include "npapi.h"
5 #include "npupp.h"
6
7 #ifdef __WIN32__
8 #define NP_EXPORT
9 #else
10 #define NP_EXPORT _export
11 #endif
12
13 static NPNetscapeFuncs* g_pNavigatorFuncs = NULL;
14
15
16 /* PLUGIN DLL entry points */
17 /* These are the Windows specific DLL entry points, not the "normal" plugin
18 entry points. The "normal" ones are in NPSHELL.CPP
19 */
20
21 /* fills in the func table used by Navigator to call entry points in
22 plugin DLL. Note that these entry points ensure that DS is loaded
23 by using the NP_LOADDS macro, when compiling for Win16
24 */
25 NPError WINAPI NP_EXPORT NP_GetEntryPoints(NPPluginFuncs* pFuncs)
26 {
27 /* trap a NULL ptr */
28 if(pFuncs == NULL)
29 return NPERR_INVALID_FUNCTABLE_ERROR;
30
31 /* if the plugin's function table is smaller than the plugin expects,
32 then they are incompatible, and should return an error */
33 if(pFuncs->size < sizeof NPPluginFuncs)
34 return NPERR_INVALID_FUNCTABLE_ERROR;
35
36 pFuncs->version = (NP_VERSION_MAJOR << 8) | NP_VERSION_MINOR;
37 pFuncs->newp = NPP_New;
38 pFuncs->destroy = NPP_Destroy;
39 pFuncs->setwindow = NPP_SetWindow;
40 pFuncs->newstream = NPP_NewStream;
41 pFuncs->destroystream = NPP_DestroyStream;
42 pFuncs->asfile = NPP_StreamAsFile;
43 pFuncs->writeready = NPP_WriteReady;
44 pFuncs->write = NPP_Write;
45 pFuncs->print = NPP_Print;
46 pFuncs->event = NULL; /* reserved */
47
48 return NPERR_NO_ERROR;
49 }
50
51 /* called immediately after the plugin DLL is loaded
52 */
53 NPError WINAPI NP_EXPORT NP_Initialize(NPNetscapeFuncs* pFuncs)
54 {
55 /* trap a NULL ptr */
56 if(pFuncs == NULL)
57 return NPERR_INVALID_FUNCTABLE_ERROR;
58
59 g_pNavigatorFuncs = pFuncs; /* save it for future reference */
60
61 /* if the plugin's major ver level is lower than the Navigator's,
62 then they are incompatible, and should return an error */
63 if(HIBYTE(pFuncs->version) > NP_VERSION_MAJOR)
64 return NPERR_INCOMPATIBLE_VERSION_ERROR;
65
66 /* if the Navigator's function table is smaller than the plugin expects,
67 then they are incompatible, and should return an error */
68 if(pFuncs->size < sizeof NPNetscapeFuncs)
69 return NPERR_INVALID_FUNCTABLE_ERROR;
70
71 return NPP_Initialize();
72 }
73
74 /* called immediately before the plugin DLL is unloaded
75 */
76 NPError WINAPI NP_EXPORT NP_Shutdown()
77 {
78 NPP_Shutdown();
79
80 g_pNavigatorFuncs = NULL;
81
82 return NPERR_NO_ERROR;
83 }
84
85
86 /* NAVIGATOR Entry points */
87
88 /* These entry points expect to be called from within the plugin. The
89 noteworthy assumption is that DS has already been set to point to the
90 plugin's DLL data segment. Don't call these functions from outside
91 the plugin without ensuring DS is set to the DLLs data segment first,
92 typically using the NP_LOADDS macro
93 */
94
95 /* returns the major/minor version numbers of the Plugin API for the plugin
96 and the Navigator
97 */
98 void NPN_Version(int* plugin_major, int* plugin_minor, int* netscape_major, int* netscape_minor)
99 {
100 *plugin_major = NP_VERSION_MAJOR;
101 *plugin_minor = NP_VERSION_MINOR;
102 *netscape_major = HIBYTE(g_pNavigatorFuncs->version);
103 *netscape_minor = LOBYTE(g_pNavigatorFuncs->version);
104 }
105
106 /* causes the specified URL to be fetched and streamed in
107 */
108 NPError NPN_GetURL(NPP instance, const char *url, const char *window)
109 {
110 return g_pNavigatorFuncs->geturl(instance, url, window);
111 }
112
113 NPError NPN_PostURL(NPP instance, const char* url, const char* window, uint32 len, const char* buf, NPBool file)
114 {
115 return g_pNavigatorFuncs->posturl(instance, url, window, len, buf, file);
116 }
117
118 /* Requests that a number of bytes be provided on a stream. Typically
119 this would be used if a stream was in "pull" mode. An optional
120 position can be provided for streams which are seekable.
121 */
122 NPError NPN_RequestRead(NPStream* stream, NPByteRange* rangeList)
123 {
124 return g_pNavigatorFuncs->requestread(stream, rangeList);
125 }
126
127 /* Creates a new stream of data from the plug-in to be interpreted
128 by Netscape in the current window.
129 */
130 NPError NPN_NewStream(NPP instance, NPMIMEType type, NPStream *stream)
131 {
132 return g_pNavigatorFuncs->newstream(instance, type, stream);
133 }
134
135 /* Provides len bytes of data.
136 */
137 int32 NPN_Write(NPP instance, NPStream *stream,
138 int32 len, void *buffer)
139 {
140 return g_pNavigatorFuncs->write(instance, stream, len, buffer);
141 }
142
143 /* Closes a stream object.
144 reason indicates why the stream was closed.
145 */
146 NPError NPN_DestroyStream(NPP instance, NPStream* stream, NPError reason)
147 {
148 return g_pNavigatorFuncs->destroystream(instance, stream, reason);
149 }
150
151 /* Provides a text status message in the Netscape client user interface
152 */
153 void NPN_Status(NPP instance, const char *message)
154 {
155 g_pNavigatorFuncs->status(instance, message);
156 }
157
158 /* returns the user agent string of Navigator, which contains version info
159 */
160 const char* NPN_UserAgent(NPP instance)
161 {
162 return g_pNavigatorFuncs->uagent(instance);
163 }
164
165 /* allocates memory from the Navigator's memory space. Necessary so that
166 saved instance data may be freed by Navigator when exiting.
167 */
168 void* NPN_MemAlloc(uint32 size)
169 {
170 return g_pNavigatorFuncs->memalloc(size);
171 }
172
173 /* reciprocal of MemAlloc() above
174 */
175 void NPN_MemFree(void* ptr)
176 {
177 g_pNavigatorFuncs->memfree(ptr);
178 }
179
180 /* private function to Netscape. do not use!
181 */
182 void NPN_ReloadPlugins(NPBool reloadPages)
183 {
184 g_pNavigatorFuncs->reloadplugins(reloadPages);
185 }
186