VirtualBox

source: vbox/trunk/src/VBox/Main/cbinding/capiidl.xsl

Last change on this file was 106065, checked in by vboxsync, 3 months ago

Manual copyright year updates.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 105.1 KB
Line 
1<?xml version="1.0"?>
2<!-- $Id: capiidl.xsl 106065 2024-09-16 21:42:41Z vboxsync $ -->
3
4<!--
5 * A template to generate a C header file for all relevant XPCOM interfaces
6 * provided or needed for calling the VirtualBox API. The header file also
7 * works on Windows, by using the C bindings header created by the MS COM IDL
8 * compiler (which simultaneously supports C and C++, unlike XPCOM).
9-->
10<!--
11 Copyright (C) 2008-2024 Oracle and/or its affiliates.
12
13 This file is part of VirtualBox base platform packages, as
14 available from https://www.virtualbox.org.
15
16 This program is free software; you can redistribute it and/or
17 modify it under the terms of the GNU General Public License
18 as published by the Free Software Foundation, in version 3 of the
19 License.
20
21 This program is distributed in the hope that it will be useful, but
22 WITHOUT ANY WARRANTY; without even the implied warranty of
23 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
24 General Public License for more details.
25
26 You should have received a copy of the GNU General Public License
27 along with this program; if not, see <https://www.gnu.org/licenses>.
28
29 SPDX-License-Identifier: GPL-3.0-only
30-->
31
32<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
33<xsl:output method="text"/>
34
35<xsl:strip-space elements="*"/>
36
37<!-- Global parameters. -->
38<xsl:param name="g_uVBoxCopyrightYear">2024</xsl:param>
39
40<xsl:include href="../idl/typemap-shared.inc.xsl"/>
41
42<!--
43// Keys for more efficiently looking up of types.
44/////////////////////////////////////////////////////////////////////////////
45-->
46
47<xsl:key name="G_keyInterfacesByName" match="//interface[@name]" use="@name"/>
48
49
50<!--
51// templates
52/////////////////////////////////////////////////////////////////////////////
53-->
54
55
56<!--
57 * not explicitly matched elements and attributes
58-->
59<xsl:template match="*"/>
60
61
62<!--
63 * header
64-->
65<xsl:template match="/idl">
66 <xsl:text>/*
67 * DO NOT EDIT! This is a generated file.
68 *
69 * Header file which provides C declarations for VirtualBox Main API
70 * (COM interfaces), generated from XIDL (XML interface definition).
71 * On Windows (which uses COM instead of XPCOM) the native C support
72 * is used, and most of this file is not used.
73 *
74 * Source : src/VBox/Main/idl/VirtualBox.xidl
75 * Generator : src/VBox/Main/cbinding/capiidl.xsl
76 *
77 * This file contains portions from the following Mozilla XPCOM files:
78 * xpcom/include/xpcom/nsID.h
79 * xpcom/include/nsIException.h
80 * xpcom/include/nsprpub/prtypes.h
81 * xpcom/include/xpcom/nsISupportsBase.h
82 *
83 * These files were originally triple-licensed (MPL/GPL2/LGPL2.1). Oracle
84 * elects to distribute this derived work under the LGPL2.1 only.
85 */
86
87/*
88 * Copyright (C) 2008-</xsl:text><xsl:value-of select="$g_uVBoxCopyrightYear"/><xsl:text> Oracle and/or its affiliates.
89 *
90 * This file is part of a free software library; you can redistribute
91 * it and/or modify it under the terms of the GNU Lesser General
92 * Public License version 2.1 as published by the Free Software
93 * Foundation and shipped in the "COPYING.LIB" file with this library.
94 * The library is distributed in the hope that it will be useful,
95 * but WITHOUT ANY WARRANTY of any kind.
96 *
97 * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if
98 * any license choice other than GPL or LGPL is available it will
99 * apply instead, Oracle elects to use only the Lesser General Public
100 * License version 2.1 (LGPLv2) at this time for any software where
101 * a choice of LGPL license versions is made available with the
102 * language indicating that LGPLv2 or any later version may be used,
103 * or where a choice of which version of the LGPL is applied is
104 * otherwise unspecified.
105 *
106 * SPDX-License-Identifier: LGPL-2.1-only
107 */
108
109#ifndef ___VirtualBox_CAPI_h
110#define ___VirtualBox_CAPI_h
111
112#ifdef _WIN32
113# ifdef _MSC_VER
114# pragma warning(push)
115# pragma warning(disable:4668 4255) /* -Wall and windows.h */
116# if _MSC_VER >= 1800 /*RT_MSC_VER_VC120*/
117# pragma warning(disable:4005) /* sdk/v7.1/include/sal_supp.h(57) : warning C4005: '__useHeader' : macro redefinition */
118# endif
119# ifdef __cplusplus
120# if _MSC_VER >= 1900 /*RT_MSC_VER_VC140*/
121# pragma warning(disable:5039) /* winbase.h(13179): warning C5039: 'TpSetCallbackCleanupGroup': pointer or reference to potentially throwing function passed to 'extern "C"' function under -EHc. Undefined behavior may occur if this function throws an exception. */
122# endif
123# endif
124# endif
125# undef COBJMACROS
126# define COBJMACROS
127# include "Windows.h"
128# pragma warning(pop)
129#endif /* _WIN32 */
130
131#ifdef WIN32
132# ifdef IN_VBOXCAPI
133# define VBOXCAPI_DECL(type) extern __declspec(dllexport) type
134# else /* !IN_VBOXCAPI */
135# define VBOXCAPI_DECL(type) __declspec(dllimport) type
136# endif /* !IN_VBOXCAPI */
137#endif /* WIN32 */
138
139#ifdef __cplusplus
140/* The C++ treatment in this file is not meant for SDK users, it only exists
141 * so that this file can be used to produce the VBoxCAPI shared library which
142 * has to use C++ as it does all the conversion magic. */
143# ifdef IN_VBOXCAPI
144# include "VBox/com/VirtualBox.h"
145# ifndef WIN32
146# include "nsIEventQueue.h"
147# endif /* !WIN32 */
148# else /* !IN_VBOXCAPI */
149# error Do not include this header file from C++ code
150# endif /* !IN_VBOXCAPI */
151#endif /* __cplusplus */
152
153#ifdef __GNUC__
154# define VBOX_EXTERN_CONST(type, name) extern const type name __attribute__((nocommon))
155#else /* !__GNUC__ */
156# define VBOX_EXTERN_CONST(type, name) extern const type name
157#endif /* !__GNUC__ */
158
159/* Treat WIN32 completely separately, as on Windows VirtualBox uses COM, not
160 * XPCOM like on all other platforms. While the code below would also compile
161 * on Windows, we need to switch to the native C support provided by the header
162 * files produced by the COM IDL compiler. */
163#ifdef WIN32
164# include "ObjBase.h"
165# include "oaidl.h"
166# include "VirtualBox.h"
167
168#ifndef __cplusplus
169/* Skip this in the C++ case as there's already a definition for CBSTR. */
170typedef const BSTR CBSTR;
171#endif /* !__cplusplus */
172
173#define VBOX_WINAPI WINAPI
174
175#define ComSafeArrayAsInParam(f) (f)
176#define ComSafeArrayAsOutParam(f) (&amp;(f))
177#define ComSafeArrayAsOutTypeParam(f,t) (&amp;(f))
178#define ComSafeArrayAsOutIfaceParam(f,t) (&amp;(f))
179
180#else /* !WIN32 */
181
182#include &lt;stddef.h&gt;
183#include "wchar.h"
184
185#ifdef IN_VBOXCAPI
186# define VBOXCAPI_DECL(type) PR_EXPORT(type)
187#else /* !IN_VBOXCAPI */
188# define VBOXCAPI_DECL(type) PR_IMPORT(type)
189#endif /* !IN_VBOXCAPI */
190
191#ifndef __cplusplus
192
193#if defined(WIN32)
194
195#define PR_EXPORT(__type) extern __declspec(dllexport) __type
196#define PR_EXPORT_DATA(__type) extern __declspec(dllexport) __type
197#define PR_IMPORT(__type) __declspec(dllimport) __type
198#define PR_IMPORT_DATA(__type) __declspec(dllimport) __type
199
200#define PR_EXTERN(__type) extern __declspec(dllexport) __type
201#define PR_IMPLEMENT(__type) __declspec(dllexport) __type
202#define PR_EXTERN_DATA(__type) extern __declspec(dllexport) __type
203#define PR_IMPLEMENT_DATA(__type) __declspec(dllexport) __type
204
205#define PR_CALLBACK
206#define PR_CALLBACK_DECL
207#define PR_STATIC_CALLBACK(__x) static __x
208
209#elif defined(XP_BEOS)
210
211#define PR_EXPORT(__type) extern __declspec(dllexport) __type
212#define PR_EXPORT_DATA(__type) extern __declspec(dllexport) __type
213#define PR_IMPORT(__type) extern __declspec(dllexport) __type
214#define PR_IMPORT_DATA(__type) extern __declspec(dllexport) __type
215
216#define PR_EXTERN(__type) extern __declspec(dllexport) __type
217#define PR_IMPLEMENT(__type) __declspec(dllexport) __type
218#define PR_EXTERN_DATA(__type) extern __declspec(dllexport) __type
219#define PR_IMPLEMENT_DATA(__type) __declspec(dllexport) __type
220
221#define PR_CALLBACK
222#define PR_CALLBACK_DECL
223#define PR_STATIC_CALLBACK(__x) static __x
224
225#elif defined(WIN16)
226
227#define PR_CALLBACK_DECL __cdecl
228
229#if defined(_WINDLL)
230#define PR_EXPORT(__type) extern __type _cdecl _export _loadds
231#define PR_IMPORT(__type) extern __type _cdecl _export _loadds
232#define PR_EXPORT_DATA(__type) extern __type _export
233#define PR_IMPORT_DATA(__type) extern __type _export
234
235#define PR_EXTERN(__type) extern __type _cdecl _export _loadds
236#define PR_IMPLEMENT(__type) __type _cdecl _export _loadds
237#define PR_EXTERN_DATA(__type) extern __type _export
238#define PR_IMPLEMENT_DATA(__type) __type _export
239
240#define PR_CALLBACK __cdecl __loadds
241#define PR_STATIC_CALLBACK(__x) static __x PR_CALLBACK
242
243#else /* this must be .EXE */
244#define PR_EXPORT(__type) extern __type _cdecl _export
245#define PR_IMPORT(__type) extern __type _cdecl _export
246#define PR_EXPORT_DATA(__type) extern __type _export
247#define PR_IMPORT_DATA(__type) extern __type _export
248
249#define PR_EXTERN(__type) extern __type _cdecl _export
250#define PR_IMPLEMENT(__type) __type _cdecl _export
251#define PR_EXTERN_DATA(__type) extern __type _export
252#define PR_IMPLEMENT_DATA(__type) __type _export
253
254#define PR_CALLBACK __cdecl __loadds
255#define PR_STATIC_CALLBACK(__x) __x PR_CALLBACK
256#endif /* _WINDLL */
257
258#elif defined(XP_MAC)
259
260#define PR_EXPORT(__type) extern __declspec(export) __type
261#define PR_EXPORT_DATA(__type) extern __declspec(export) __type
262#define PR_IMPORT(__type) extern __declspec(export) __type
263#define PR_IMPORT_DATA(__type) extern __declspec(export) __type
264
265#define PR_EXTERN(__type) extern __declspec(export) __type
266#define PR_IMPLEMENT(__type) __declspec(export) __type
267#define PR_EXTERN_DATA(__type) extern __declspec(export) __type
268#define PR_IMPLEMENT_DATA(__type) __declspec(export) __type
269
270#define PR_CALLBACK
271#define PR_CALLBACK_DECL
272#define PR_STATIC_CALLBACK(__x) static __x
273
274#elif defined(XP_OS2) &amp;&amp; defined(__declspec)
275
276#define PR_EXPORT(__type) extern __declspec(dllexport) __type
277#define PR_EXPORT_DATA(__type) extern __declspec(dllexport) __type
278#define PR_IMPORT(__type) __declspec(dllimport) __type
279#define PR_IMPORT_DATA(__type) __declspec(dllimport) __type
280
281#define PR_EXTERN(__type) extern __declspec(dllexport) __type
282#define PR_IMPLEMENT(__type) __declspec(dllexport) __type
283#define PR_EXTERN_DATA(__type) extern __declspec(dllexport) __type
284#define PR_IMPLEMENT_DATA(__type) __declspec(dllexport) __type
285
286#define PR_CALLBACK
287#define PR_CALLBACK_DECL
288#define PR_STATIC_CALLBACK(__x) static __x
289
290#elif defined(XP_OS2_VACPP)
291
292#define PR_EXPORT(__type) extern __type
293#define PR_EXPORT_DATA(__type) extern __type
294#define PR_IMPORT(__type) extern __type
295#define PR_IMPORT_DATA(__type) extern __type
296
297#define PR_EXTERN(__type) extern __type
298#define PR_IMPLEMENT(__type) __type
299#define PR_EXTERN_DATA(__type) extern __type
300#define PR_IMPLEMENT_DATA(__type) __type
301#define PR_CALLBACK _Optlink
302#define PR_CALLBACK_DECL
303#define PR_STATIC_CALLBACK(__x) static __x PR_CALLBACK
304
305#else /* Unix */
306
307# ifdef VBOX_HAVE_VISIBILITY_HIDDEN
308# define PR_EXPORT(__type) __attribute__((visibility("default"))) extern __type
309# define PR_EXPORT_DATA(__type) __attribute__((visibility("default"))) extern __type
310# define PR_IMPORT(__type) extern __type
311# define PR_IMPORT_DATA(__type) extern __type
312# define PR_EXTERN(__type) __attribute__((visibility("default"))) extern __type
313# define PR_IMPLEMENT(__type) __attribute__((visibility("default"))) __type
314# define PR_EXTERN_DATA(__type) __attribute__((visibility("default"))) extern __type
315# define PR_IMPLEMENT_DATA(__type) __attribute__((visibility("default"))) __type
316# define PR_CALLBACK
317# define PR_CALLBACK_DECL
318# define PR_STATIC_CALLBACK(__x) static __x
319# else
320# define PR_EXPORT(__type) extern __type
321# define PR_EXPORT_DATA(__type) extern __type
322# define PR_IMPORT(__type) extern __type
323# define PR_IMPORT_DATA(__type) extern __type
324# define PR_EXTERN(__type) extern __type
325# define PR_IMPLEMENT(__type) __type
326# define PR_EXTERN_DATA(__type) extern __type
327# define PR_IMPLEMENT_DATA(__type) __type
328# define PR_CALLBACK
329# define PR_CALLBACK_DECL
330# define PR_STATIC_CALLBACK(__x) static __x
331# endif
332#endif
333
334#if defined(_NSPR_BUILD_)
335#define NSPR_API(__type) PR_EXPORT(__type)
336#define NSPR_DATA_API(__type) PR_EXPORT_DATA(__type)
337#else
338#define NSPR_API(__type) PR_IMPORT(__type)
339#define NSPR_DATA_API(__type) PR_IMPORT_DATA(__type)
340#endif
341
342typedef unsigned char PRUint8;
343#if (defined(HPUX) &amp;&amp; defined(__cplusplus) \
344 &amp;&amp; !defined(__GNUC__) &amp;&amp; __cplusplus &lt; 199707L) \
345 || (defined(SCO) &amp;&amp; defined(__cplusplus) \
346 &amp;&amp; !defined(__GNUC__) &amp;&amp; __cplusplus == 1L)
347typedef char PRInt8;
348#else
349typedef signed char PRInt8;
350#endif
351
352#define PR_INT8_MAX 127
353#define PR_INT8_MIN (-128)
354#define PR_UINT8_MAX 255U
355
356typedef unsigned short PRUint16;
357typedef short PRInt16;
358
359#define PR_INT16_MAX 32767
360#define PR_INT16_MIN (-32768)
361#define PR_UINT16_MAX 65535U
362
363typedef unsigned int PRUint32;
364typedef int PRInt32;
365#define PR_INT32(x) x
366#define PR_UINT32(x) x ## U
367
368#define PR_INT32_MAX PR_INT32(2147483647)
369#define PR_INT32_MIN (-PR_INT32_MAX - 1)
370#define PR_UINT32_MAX PR_UINT32(4294967295)
371
372typedef long PRInt64;
373typedef unsigned long PRUint64;
374typedef int PRIntn;
375typedef unsigned int PRUintn;
376
377typedef double PRFloat64;
378typedef size_t PRSize;
379
380typedef ptrdiff_t PRPtrdiff;
381
382typedef unsigned long PRUptrdiff;
383
384typedef PRIntn PRBool;
385
386#define PR_TRUE 1
387#define PR_FALSE 0
388
389typedef PRUint8 PRPackedBool;
390
391/*
392** Status code used by some routines that have a single point of failure or
393** special status return.
394*/
395typedef enum { PR_FAILURE = -1, PR_SUCCESS = 0 } PRStatus;
396
397#ifndef __PRUNICHAR__
398#define __PRUNICHAR__
399#if defined(WIN32) || defined(XP_MAC)
400typedef wchar_t PRUnichar;
401#else
402typedef PRUint16 PRUnichar;
403#endif
404typedef PRUnichar *BSTR;
405typedef const PRUnichar *CBSTR;
406#endif
407
408typedef long PRWord;
409typedef unsigned long PRUword;
410
411#define nsnull 0
412typedef PRUint32 nsresult;
413
414#if defined(__GNUC__) &amp;&amp; (__GNUC__ > 2)
415#define NS_LIKELY(x) (__builtin_expect((x), 1))
416#define NS_UNLIKELY(x) (__builtin_expect((x), 0))
417#else
418#define NS_LIKELY(x) (x)
419#define NS_UNLIKELY(x) (x)
420#endif
421
422#define NS_FAILED(_nsresult) (NS_UNLIKELY((_nsresult) &amp; 0x80000000))
423#define NS_SUCCEEDED(_nsresult) (NS_LIKELY(!((_nsresult) &amp; 0x80000000)))
424
425#ifdef VBOX_WITH_XPCOM_NAMESPACE_CLEANUP
426# define PR_IntervalNow VBoxNsprPR_IntervalNow
427# define PR_TicksPerSecond VBoxNsprPR_TicksPerSecond
428# define PR_SecondsToInterval VBoxNsprPR_SecondsToInterval
429# define PR_MillisecondsToInterval VBoxNsprPR_MillisecondsToInterval
430# define PR_MicrosecondsToInterval VBoxNsprPR_MicrosecondsToInterval
431# define PR_IntervalToSeconds VBoxNsprPR_IntervalToSeconds
432# define PR_IntervalToMilliseconds VBoxNsprPR_IntervalToMilliseconds
433# define PR_IntervalToMicroseconds VBoxNsprPR_IntervalToMicroseconds
434# define PR_EnterMonitor VBoxNsprPR_EnterMonitor
435# define PR_ExitMonitor VBoxNsprPR_ExitMonitor
436# define PR_Notify VBoxNsprPR_Notify
437# define PR_NotifyAll VBoxNsprPR_NotifyAll
438# define PR_Wait VBoxNsprPR_Wait
439# define PR_NewMonitor VBoxNsprPR_NewMonitor
440# define PR_DestroyMonitor VBoxNsprPR_DestroyMonitor
441#endif /* VBOX_WITH_XPCOM_NAMESPACE_CLEANUP */
442
443typedef PRUint32 PRIntervalTime;
444
445#define PR_INTERVAL_MIN 1000UL
446#define PR_INTERVAL_MAX 100000UL
447#define PR_INTERVAL_NO_WAIT 0UL
448#define PR_INTERVAL_NO_TIMEOUT 0xffffffffUL
449
450NSPR_API(PRIntervalTime) PR_IntervalNow(void);
451NSPR_API(PRUint32) PR_TicksPerSecond(void);
452NSPR_API(PRIntervalTime) PR_SecondsToInterval(PRUint32 seconds);
453NSPR_API(PRIntervalTime) PR_MillisecondsToInterval(PRUint32 milli);
454NSPR_API(PRIntervalTime) PR_MicrosecondsToInterval(PRUint32 micro);
455NSPR_API(PRUint32) PR_IntervalToSeconds(PRIntervalTime ticks);
456NSPR_API(PRUint32) PR_IntervalToMilliseconds(PRIntervalTime ticks);
457NSPR_API(PRUint32) PR_IntervalToMicroseconds(PRIntervalTime ticks);
458
459typedef struct PRMonitor PRMonitor;
460
461NSPR_API(PRMonitor*) PR_NewMonitor(void);
462NSPR_API(void) PR_DestroyMonitor(PRMonitor *mon);
463NSPR_API(void) PR_EnterMonitor(PRMonitor *mon);
464NSPR_API(PRStatus) PR_ExitMonitor(PRMonitor *mon);
465NSPR_API(PRStatus) PR_Wait(PRMonitor *mon, PRIntervalTime ticks);
466NSPR_API(PRStatus) PR_Notify(PRMonitor *mon);
467NSPR_API(PRStatus) PR_NotifyAll(PRMonitor *mon);
468
469#ifdef VBOX_WITH_XPCOM_NAMESPACE_CLEANUP
470# define PR_CreateThread VBoxNsprPR_CreateThread
471# define PR_JoinThread VBoxNsprPR_JoinThread
472# define PR_Sleep VBoxNsprPR_Sleep
473# define PR_GetCurrentThread VBoxNsprPR_GetCurrentThread
474# define PR_GetThreadState VBoxNsprPR_GetThreadState
475# define PR_SetThreadPrivate VBoxNsprPR_SetThreadPrivate
476# define PR_GetThreadPrivate VBoxNsprPR_GetThreadPrivate
477# define PR_NewThreadPrivateIndex VBoxNsprPR_NewThreadPrivateIndex
478# define PR_GetThreadPriority VBoxNsprPR_GetThreadPriority
479# define PR_SetThreadPriority VBoxNsprPR_SetThreadPriority
480# define PR_Interrupt VBoxNsprPR_Interrupt
481# define PR_ClearInterrupt VBoxNsprPR_ClearInterrupt
482# define PR_BlockInterrupt VBoxNsprPR_BlockInterrupt
483# define PR_UnblockInterrupt VBoxNsprPR_UnblockInterrupt
484# define PR_GetThreadScope VBoxNsprPR_GetThreadScope
485# define PR_GetThreadType VBoxNsprPR_GetThreadType
486#endif /* VBOX_WITH_XPCOM_NAMESPACE_CLEANUP */
487
488typedef struct PRThread PRThread;
489typedef struct PRThreadStack PRThreadStack;
490
491typedef enum PRThreadType {
492 PR_USER_THREAD,
493 PR_SYSTEM_THREAD
494} PRThreadType;
495
496typedef enum PRThreadScope {
497 PR_LOCAL_THREAD,
498 PR_GLOBAL_THREAD,
499 PR_GLOBAL_BOUND_THREAD
500} PRThreadScope;
501
502typedef enum PRThreadState {
503 PR_JOINABLE_THREAD,
504 PR_UNJOINABLE_THREAD
505} PRThreadState;
506
507typedef enum PRThreadPriority
508{
509 PR_PRIORITY_FIRST = 0, /* just a placeholder */
510 PR_PRIORITY_LOW = 0, /* the lowest possible priority */
511 PR_PRIORITY_NORMAL = 1, /* most common expected priority */
512 PR_PRIORITY_HIGH = 2, /* slightly more aggressive scheduling */
513 PR_PRIORITY_URGENT = 3, /* it does little good to have more than one */
514 PR_PRIORITY_LAST = 3 /* this is just a placeholder */
515} PRThreadPriority;
516
517NSPR_API(PRThread*) PR_CreateThread(PRThreadType type,
518 void (PR_CALLBACK *start)(void *arg),
519 void *arg,
520 PRThreadPriority priority,
521 PRThreadScope scope,
522 PRThreadState state,
523 PRUint32 stackSize);
524NSPR_API(PRStatus) PR_JoinThread(PRThread *thread);
525NSPR_API(PRThread*) PR_GetCurrentThread(void);
526#ifndef NO_NSPR_10_SUPPORT
527#define PR_CurrentThread() PR_GetCurrentThread() /* for nspr1.0 compat. */
528#endif /* NO_NSPR_10_SUPPORT */
529NSPR_API(PRThreadPriority) PR_GetThreadPriority(const PRThread *thread);
530NSPR_API(void) PR_SetThreadPriority(PRThread *thread, PRThreadPriority priority);
531
532typedef void (PR_CALLBACK *PRThreadPrivateDTOR)(void *priv);
533
534NSPR_API(PRStatus) PR_NewThreadPrivateIndex(
535 PRUintn *newIndex, PRThreadPrivateDTOR destructor);
536NSPR_API(PRStatus) PR_SetThreadPrivate(PRUintn tpdIndex, void *priv);
537NSPR_API(void*) PR_GetThreadPrivate(PRUintn tpdIndex);
538NSPR_API(PRStatus) PR_Interrupt(PRThread *thread);
539NSPR_API(void) PR_ClearInterrupt(void);
540NSPR_API(void) PR_BlockInterrupt(void);
541NSPR_API(void) PR_UnblockInterrupt(void);
542NSPR_API(PRStatus) PR_Sleep(PRIntervalTime ticks);
543NSPR_API(PRThreadScope) PR_GetThreadScope(const PRThread *thread);
544NSPR_API(PRThreadType) PR_GetThreadType(const PRThread *thread);
545NSPR_API(PRThreadState) PR_GetThreadState(const PRThread *thread);
546
547#ifdef VBOX_WITH_XPCOM_NAMESPACE_CLEANUP
548# define PR_DestroyLock VBoxNsprPR_DestroyLock
549# define PR_Lock VBoxNsprPR_Lock
550# define PR_NewLock VBoxNsprPR_NewLock
551# define PR_Unlock VBoxNsprPR_Unlock
552#endif /* VBOX_WITH_XPCOM_NAMESPACE_CLEANUP */
553
554typedef struct PRLock PRLock;
555
556NSPR_API(PRLock*) PR_NewLock(void);
557NSPR_API(void) PR_DestroyLock(PRLock *lock);
558NSPR_API(void) PR_Lock(PRLock *lock);
559NSPR_API(PRStatus) PR_Unlock(PRLock *lock);
560
561#ifdef VBOX_WITH_XPCOM_NAMESPACE_CLEANUP
562# define PR_NewCondVar VBoxNsprPR_NewCondVar
563# define PR_DestroyCondVar VBoxNsprPR_DestroyCondVar
564# define PR_WaitCondVar VBoxNsprPR_WaitCondVar
565# define PR_NotifyCondVar VBoxNsprPR_NotifyCondVar
566# define PR_NotifyAllCondVar VBoxNsprPR_NotifyAllCondVar
567#endif /* VBOX_WITH_XPCOM_NAMESPACE_CLEANUP */
568
569typedef struct PRCondVar PRCondVar;
570
571NSPR_API(PRCondVar*) PR_NewCondVar(PRLock *lock);
572NSPR_API(void) PR_DestroyCondVar(PRCondVar *cvar);
573NSPR_API(PRStatus) PR_WaitCondVar(PRCondVar *cvar, PRIntervalTime timeout);
574NSPR_API(PRStatus) PR_NotifyCondVar(PRCondVar *cvar);
575NSPR_API(PRStatus) PR_NotifyAllCondVar(PRCondVar *cvar);
576
577typedef struct PRCListStr PRCList;
578
579struct PRCListStr {
580 PRCList *next;
581 PRCList *prev;
582};
583
584#ifdef VBOX_WITH_XPCOM_NAMESPACE_CLEANUP
585# define PL_DestroyEvent VBoxNsplPL_DestroyEvent
586# define PL_HandleEvent VBoxNsplPL_HandleEvent
587# define PL_InitEvent VBoxNsplPL_InitEvent
588# define PL_CreateEventQueue VBoxNsplPL_CreateEventQueue
589# define PL_CreateMonitoredEventQueue VBoxNsplPL_CreateMonitoredEventQueue
590# define PL_CreateNativeEventQueue VBoxNsplPL_CreateNativeEventQueue
591# define PL_DequeueEvent VBoxNsplPL_DequeueEvent
592# define PL_DestroyEventQueue VBoxNsplPL_DestroyEventQueue
593# define PL_EventAvailable VBoxNsplPL_EventAvailable
594# define PL_EventLoop VBoxNsplPL_EventLoop
595# define PL_GetEvent VBoxNsplPL_GetEvent
596# define PL_GetEventOwner VBoxNsplPL_GetEventOwner
597# define PL_GetEventQueueMonitor VBoxNsplPL_GetEventQueueMonitor
598# define PL_GetEventQueueSelectFD VBoxNsplPL_GetEventQueueSelectFD
599# define PL_MapEvents VBoxNsplPL_MapEvents
600# define PL_PostEvent VBoxNsplPL_PostEvent
601# define PL_PostSynchronousEvent VBoxNsplPL_PostSynchronousEvent
602# define PL_ProcessEventsBeforeID VBoxNsplPL_ProcessEventsBeforeID
603# define PL_ProcessPendingEvents VBoxNsplPL_ProcessPendingEvents
604# define PL_RegisterEventIDFunc VBoxNsplPL_RegisterEventIDFunc
605# define PL_RevokeEvents VBoxNsplPL_RevokeEvents
606# define PL_UnregisterEventIDFunc VBoxNsplPL_UnregisterEventIDFunc
607# define PL_WaitForEvent VBoxNsplPL_WaitForEvent
608# define PL_IsQueueNative VBoxNsplPL_IsQueueNative
609# define PL_IsQueueOnCurrentThread VBoxNsplPL_IsQueueOnCurrentThread
610# define PL_FavorPerformanceHint VBoxNsplPL_FavorPerformanceHint
611#endif /* VBOX_WITH_XPCOM_NAMESPACE_CLEANUP */
612
613typedef struct PLEvent PLEvent;
614typedef struct PLEventQueue PLEventQueue;
615
616PR_EXTERN(PLEventQueue*)
617PL_CreateEventQueue(const char* name, PRThread* handlerThread);
618PR_EXTERN(PLEventQueue *)
619 PL_CreateNativeEventQueue(
620 const char *name,
621 PRThread *handlerThread
622 );
623PR_EXTERN(PLEventQueue *)
624 PL_CreateMonitoredEventQueue(
625 const char *name,
626 PRThread *handlerThread
627 );
628PR_EXTERN(void)
629PL_DestroyEventQueue(PLEventQueue* self);
630PR_EXTERN(PRMonitor*)
631PL_GetEventQueueMonitor(PLEventQueue* self);
632
633#define PL_ENTER_EVENT_QUEUE_MONITOR(queue) \
634 PR_EnterMonitor(PL_GetEventQueueMonitor(queue))
635
636#define PL_EXIT_EVENT_QUEUE_MONITOR(queue) \
637 PR_ExitMonitor(PL_GetEventQueueMonitor(queue))
638
639PR_EXTERN(PRStatus) PL_PostEvent(PLEventQueue* self, PLEvent* event);
640PR_EXTERN(void*) PL_PostSynchronousEvent(PLEventQueue* self, PLEvent* event);
641PR_EXTERN(PLEvent*) PL_GetEvent(PLEventQueue* self);
642PR_EXTERN(PRBool) PL_EventAvailable(PLEventQueue* self);
643
644typedef void (PR_CALLBACK *PLEventFunProc)(PLEvent* event, void* data, PLEventQueue* queue);
645
646PR_EXTERN(void) PL_MapEvents(PLEventQueue* self, PLEventFunProc fun, void* data);
647PR_EXTERN(void) PL_RevokeEvents(PLEventQueue* self, void* owner);
648PR_EXTERN(void) PL_ProcessPendingEvents(PLEventQueue* self);
649PR_EXTERN(PLEvent*) PL_WaitForEvent(PLEventQueue* self);
650PR_EXTERN(void) PL_EventLoop(PLEventQueue* self);
651PR_EXTERN(PRInt32) PL_GetEventQueueSelectFD(PLEventQueue* self);
652PR_EXTERN(PRBool) PL_IsQueueOnCurrentThread( PLEventQueue *queue );
653PR_EXTERN(PRBool) PL_IsQueueNative(PLEventQueue *queue);
654
655typedef void* (PR_CALLBACK *PLHandleEventProc)(PLEvent* self);
656typedef void (PR_CALLBACK *PLDestroyEventProc)(PLEvent* self);
657PR_EXTERN(void)
658PL_InitEvent(PLEvent* self, void* owner,
659 PLHandleEventProc handler,
660 PLDestroyEventProc destructor);
661PR_EXTERN(void*) PL_GetEventOwner(PLEvent* self);
662PR_EXTERN(void) PL_HandleEvent(PLEvent* self);
663PR_EXTERN(void) PL_DestroyEvent(PLEvent* self);
664PR_EXTERN(void) PL_DequeueEvent(PLEvent* self, PLEventQueue* queue);
665PR_EXTERN(void) PL_FavorPerformanceHint(PRBool favorPerformanceOverEventStarvation, PRUint32 starvationDelay);
666
667struct PLEvent {
668 PRCList link;
669 PLHandleEventProc handler;
670 PLDestroyEventProc destructor;
671 void* owner;
672 void* synchronousResult;
673 PRLock* lock;
674 PRCondVar* condVar;
675 PRBool handled;
676#ifdef PL_POST_TIMINGS
677 PRIntervalTime postTime;
678#endif
679#ifdef XP_UNIX
680 unsigned long id;
681#endif /* XP_UNIX */
682 /* other fields follow... */
683};
684
685#if defined(XP_WIN) || defined(XP_OS2)
686
687PR_EXTERN(HWND)
688 PL_GetNativeEventReceiverWindow(
689 PLEventQueue *eqp
690 );
691#endif /* XP_WIN || XP_OS2 */
692
693#ifdef XP_UNIX
694
695PR_EXTERN(PRInt32)
696PL_ProcessEventsBeforeID(PLEventQueue *aSelf, unsigned long aID);
697
698typedef unsigned long (PR_CALLBACK *PLGetEventIDFunc)(void *aClosure);
699
700PR_EXTERN(void)
701PL_RegisterEventIDFunc(PLEventQueue *aSelf, PLGetEventIDFunc aFunc,
702 void *aClosure);
703PR_EXTERN(void) PL_UnregisterEventIDFunc(PLEventQueue *aSelf);
704
705#endif /* XP_UNIX */
706
707/* Standard "it worked" return value */
708#define NS_OK 0
709
710#define NS_ERROR_BASE ((nsresult) 0xC1F30000)
711
712/* Returned when an instance is not initialized */
713#define NS_ERROR_NOT_INITIALIZED (NS_ERROR_BASE + 1)
714
715/* Returned when an instance is already initialized */
716#define NS_ERROR_ALREADY_INITIALIZED (NS_ERROR_BASE + 2)
717
718/* Returned by a not implemented function */
719#define NS_ERROR_NOT_IMPLEMENTED ((nsresult) 0x80004001L)
720
721/* Returned when a given interface is not supported. */
722#define NS_NOINTERFACE ((nsresult) 0x80004002L)
723#define NS_ERROR_NO_INTERFACE NS_NOINTERFACE
724
725#define NS_ERROR_INVALID_POINTER ((nsresult) 0x80004003L)
726#define NS_ERROR_NULL_POINTER NS_ERROR_INVALID_POINTER
727
728/* Returned when a function aborts */
729#define NS_ERROR_ABORT ((nsresult) 0x80004004L)
730
731/* Returned when a function fails */
732#define NS_ERROR_FAILURE ((nsresult) 0x80004005L)
733
734/* Returned when an unexpected error occurs */
735#define NS_ERROR_UNEXPECTED ((nsresult) 0x8000ffffL)
736
737/* Returned when a memory allocation fails */
738#define NS_ERROR_OUT_OF_MEMORY ((nsresult) 0x8007000eL)
739
740/* Returned when an illegal value is passed */
741#define NS_ERROR_ILLEGAL_VALUE ((nsresult) 0x80070057L)
742#define NS_ERROR_INVALID_ARG NS_ERROR_ILLEGAL_VALUE
743
744/* Returned when a class doesn't allow aggregation */
745#define NS_ERROR_NO_AGGREGATION ((nsresult) 0x80040110L)
746
747/* Returned when an operation can't complete due to an unavailable resource */
748#define NS_ERROR_NOT_AVAILABLE ((nsresult) 0x80040111L)
749
750/* Returned when a class is not registered */
751#define NS_ERROR_FACTORY_NOT_REGISTERED ((nsresult) 0x80040154L)
752
753/* Returned when a class cannot be registered, but may be tried again later */
754#define NS_ERROR_FACTORY_REGISTER_AGAIN ((nsresult) 0x80040155L)
755
756/* Returned when a dynamically loaded factory couldn't be found */
757#define NS_ERROR_FACTORY_NOT_LOADED ((nsresult) 0x800401f8L)
758
759/* Returned when a factory doesn't support signatures */
760#define NS_ERROR_FACTORY_NO_SIGNATURE_SUPPORT \
761 (NS_ERROR_BASE + 0x101)
762
763/* Returned when a factory already is registered */
764#define NS_ERROR_FACTORY_EXISTS (NS_ERROR_BASE + 0x100)
765
766/**
767 * An "interface id" which can be used to uniquely identify a given
768 * interface.
769 * A "unique identifier". This is modeled after OSF DCE UUIDs.
770 */
771
772struct nsID {
773 PRUint32 m0;
774 PRUint16 m1;
775 PRUint16 m2;
776 PRUint8 m3[8];
777};
778
779typedef struct nsID nsID;
780typedef nsID nsIID;
781typedef nsID nsCID;
782
783#endif /* __cplusplus */
784
785#define VBOX_WINAPI
786
787/* Various COM types defined by their XPCOM equivalent */
788typedef PRInt64 LONG64;
789typedef PRInt32 LONG;
790typedef PRInt32 DWORD;
791typedef PRInt16 SHORT;
792typedef PRUint64 ULONG64;
793typedef PRUint32 ULONG;
794typedef PRUint16 USHORT;
795
796typedef PRBool BOOL;
797
798#ifndef FALSE
799#define FALSE 0
800#define TRUE 1
801#endif
802
803#define HRESULT nsresult
804#define SUCCEEDED NS_SUCCEEDED
805#define FAILED NS_FAILED
806
807/* OLE error codes */
808#define S_OK ((nsresult)NS_OK)
809#define E_UNEXPECTED NS_ERROR_UNEXPECTED
810#define E_NOTIMPL NS_ERROR_NOT_IMPLEMENTED
811#define E_OUTOFMEMORY NS_ERROR_OUT_OF_MEMORY
812#define E_INVALIDARG NS_ERROR_INVALID_ARG
813#define E_NOINTERFACE NS_ERROR_NO_INTERFACE
814#define E_POINTER NS_ERROR_NULL_POINTER
815#define E_ABORT NS_ERROR_ABORT
816#define E_FAIL NS_ERROR_FAILURE
817/* Note: a better analog for E_ACCESSDENIED would probably be
818 * NS_ERROR_NOT_AVAILABLE, but we want binary compatibility for now. */
819#define E_ACCESSDENIED ((nsresult)0x80070005L)
820
821/* Basic vartype for COM compatibility. */
822typedef enum VARTYPE
823{
824 VT_I2 = 2,
825 VT_I4 = 3,
826 VT_BSTR = 8,
827 VT_DISPATCH = 9,
828 VT_BOOL = 11,
829 VT_UNKNOWN = 13,
830 VT_I1 = 16,
831 VT_UI1 = 17,
832 VT_UI2 = 18,
833 VT_UI4 = 19,
834 VT_I8 = 20,
835 VT_UI8 = 21,
836 VT_HRESULT = 25
837} VARTYPE;
838
839/* Basic safearray type for COM compatibility. */
840typedef struct SAFEARRAY
841{
842 void *pv;
843 ULONG c;
844} SAFEARRAY;
845
846#define ComSafeArrayAsInParam(f) ((f) ? (f)->c : 0), ((f) ? (f)->pv : NULL)
847#define ComSafeArrayAsOutParam(f) (&amp;((f)->c)), (&amp;((f)->pv))
848#define ComSafeArrayAsOutTypeParam(f,t) (&amp;((f)->c)), (t**)(&amp;((f)->pv))
849#define ComSafeArrayAsOutIfaceParam(f,t) (&amp;((f)->c)), (t**)(&amp;((f)->pv))
850
851/* Glossing over differences between COM and XPCOM */
852#define IErrorInfo nsIException
853#define IUnknown nsISupports
854#define IDispatch nsISupports
855
856/* Make things as COM compatible as possible */
857#define interface struct
858#ifdef CONST_VTABLE
859# define CONST_VTBL const
860#else /* !CONST_VTABLE */
861# define CONST_VTBL
862#endif /* !CONST_VTABLE */
863
864#ifndef __cplusplus
865
866/** @todo this first batch of forward declarations (and the corresponding ones
867 * generated for each interface) are 100% redundant, remove eventually. */
868interface nsISupports; /* forward declaration */
869interface nsIException; /* forward declaration */
870interface nsIStackFrame; /* forward declaration */
871interface nsIEventTarget;/* forward declaration */
872interface nsIEventQueue; /* forward declaration */
873
874typedef interface nsISupports nsISupports; /* forward declaration */
875typedef interface nsIException nsIException; /* forward declaration */
876typedef interface nsIStackFrame nsIStackFrame; /* forward declaration */
877typedef interface nsIEventTarget nsIEventTarget;/* forward declaration */
878typedef interface nsIEventQueue nsIEventQueue; /* forward declaration */
879
880/* starting interface: nsISupports */
881#define NS_ISUPPORTS_IID_STR "00000000-0000-0000-c000-000000000046"
882
883#define NS_ISUPPORTS_IID \
884 { 0x00000000, 0x0000, 0x0000, \
885 {0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46} }
886
887/**
888 * Reference count values
889 *
890 * This is the return type for AddRef() and Release() in nsISupports.
891 * IUnknown of COM returns an unsigned long from equivalent functions.
892 * The following ifdef exists to maintain binary compatibility with
893 * IUnknown.
894 */
895#if defined(XP_WIN) &amp;&amp; PR_BYTES_PER_LONG == 4
896typedef unsigned long nsrefcnt;
897#else
898typedef PRUint32 nsrefcnt;
899#endif
900
901/**
902 * Basic component object model interface. Objects which implement
903 * this interface support runtime interface discovery (QueryInterface)
904 * and a reference counted memory model (AddRef/Release). This is
905 * modelled after the win32 IUnknown API.
906 */
907#ifndef VBOX_WITH_GLUE
908struct nsISupports_vtbl
909{
910 nsresult (*QueryInterface)(nsISupports *pThis, const nsID *iid, void **resultp);
911 nsrefcnt (*AddRef)(nsISupports *pThis);
912 nsrefcnt (*Release)(nsISupports *pThis);
913};
914#else /* !VBOX_WITH_GLUE */
915struct nsISupportsVtbl
916{
917 nsresult (*QueryInterface)(nsISupports *pThis, const nsID *iid, void **resultp);
918 nsrefcnt (*AddRef)(nsISupports *pThis);
919 nsrefcnt (*Release)(nsISupports *pThis);
920};
921#define nsISupports_QueryInterface(p, iid, resultp) ((p)->lpVtbl->QueryInterface(p, iid, resultp))
922#define nsISupports_AddRef(p) ((p)->lpVtbl->AddRef(p))
923#define nsISupports_Release(p) ((p)->lpVtbl->Release(p))
924#define IUnknown_QueryInterface(p, iid, resultp) ((p)->lpVtbl->QueryInterface(p, iid, resultp))
925#define IUnknown_AddRef(p) ((p)->lpVtbl->AddRef(p))
926#define IUnknown_Release(p) ((p)->lpVtbl->Release(p))
927#define IDispatch_QueryInterface(p, iid, resultp) ((p)->lpVtbl->QueryInterface(p, iid, resultp))
928#define IDispatch_AddRef(p) ((p)->lpVtbl->AddRef(p))
929#define IDispatch_Release(p) ((p)->lpVtbl->Release(p))
930#endif /* !VBOX_WITH_GLUE */
931
932interface nsISupports
933{
934#ifndef VBOX_WITH_GLUE
935 struct nsISupports_vtbl *vtbl;
936#else /* !VBOX_WITH_GLUE */
937 CONST_VTBL struct nsISupportsVtbl *lpVtbl;
938#endif /* !VBOX_WITH_GLUE */
939};
940
941/* starting interface: nsIException */
942#define NS_IEXCEPTION_IID_STR "f3a8d3b4-c424-4edc-8bf6-8974c983ba78"
943
944#define NS_IEXCEPTION_IID \
945 {0xf3a8d3b4, 0xc424, 0x4edc, \
946 { 0x8b, 0xf6, 0x89, 0x74, 0xc9, 0x83, 0xba, 0x78 }}
947
948#ifndef VBOX_WITH_GLUE
949struct nsIException_vtbl
950{
951 /* Methods from the interface nsISupports */
952 struct nsISupports_vtbl nsisupports;
953
954 nsresult (*GetMessage)(nsIException *pThis, PRUnichar * *aMessage);
955 nsresult (*GetResult)(nsIException *pThis, nsresult *aResult);
956 nsresult (*GetName)(nsIException *pThis, PRUnichar * *aName);
957 nsresult (*GetFilename)(nsIException *pThis, PRUnichar * *aFilename);
958 nsresult (*GetLineNumber)(nsIException *pThis, PRUint32 *aLineNumber);
959 nsresult (*GetColumnNumber)(nsIException *pThis, PRUint32 *aColumnNumber);
960 nsresult (*GetLocation)(nsIException *pThis, nsIStackFrame * *aLocation);
961 nsresult (*GetInner)(nsIException *pThis, nsIException * *aInner);
962 nsresult (*GetData)(nsIException *pThis, nsISupports * *aData);
963 nsresult (*ToString)(nsIException *pThis, PRUnichar **_retval);
964};
965#else /* !VBOX_WITH_GLUE */
966struct nsIExceptionVtbl
967{
968 nsresult (*QueryInterface)(nsIException *pThis, const nsID *iid, void **resultp);
969 nsrefcnt (*AddRef)(nsIException *pThis);
970 nsrefcnt (*Release)(nsIException *pThis);
971
972 nsresult (*GetMessage)(nsIException *pThis, PRUnichar * *aMessage);
973 nsresult (*GetResult)(nsIException *pThis, nsresult *aResult);
974 nsresult (*GetName)(nsIException *pThis, PRUnichar * *aName);
975 nsresult (*GetFilename)(nsIException *pThis, PRUnichar * *aFilename);
976 nsresult (*GetLineNumber)(nsIException *pThis, PRUint32 *aLineNumber);
977 nsresult (*GetColumnNumber)(nsIException *pThis, PRUint32 *aColumnNumber);
978 nsresult (*GetLocation)(nsIException *pThis, nsIStackFrame * *aLocation);
979 nsresult (*GetInner)(nsIException *pThis, nsIException * *aInner);
980 nsresult (*GetData)(nsIException *pThis, nsISupports * *aData);
981 nsresult (*ToString)(nsIException *pThis, PRUnichar **_retval);
982};
983#define nsIException_QueryInterface(p, iid, resultp) ((p)->lpVtbl->QueryInterface(p, iid, resultp))
984#define nsIException_AddRef(p) ((p)->lpVtbl->AddRef(p))
985#define nsIException_Release(p) ((p)->lpVtbl->Release(p))
986#define nsIException_get_Message(p, aMessage) ((p)->lpVtbl->GetMessage(p, aMessage))
987#define nsIException_GetMessage(p, aMessage) ((p)->lpVtbl->GetMessage(p, aMessage))
988#define nsIException_get_Result(p, aResult) ((p)->lpVtbl->GetResult(p, aResult))
989#define nsIException_GetResult(p, aResult) ((p)->lpVtbl->GetResult(p, aResult))
990#define nsIException_get_Name(p, aName) ((p)->lpVtbl->GetName(p, aName))
991#define nsIException_GetName(p, aName) ((p)->lpVtbl->GetName(p, aName))
992#define nsIException_get_Filename(p, aFilename) ((p)->lpVtbl->GetFilename(p, aFilename))
993#define nsIException_GetFilename(p, aFilename) ((p)->lpVtbl->GetFilename(p, aFilename))
994#define nsIException_get_LineNumber(p, aLineNumber) ((p)->lpVtbl->GetLineNumber(p, aLineNumber))
995#define nsIException_GetLineNumber(p, aLineNumber) ((p)->lpVtbl->GetLineNumber(p, aLineNumber))
996#define nsIException_get_ColumnNumber(p, aColumnNumber) ((p)->lpVtbl->GetColumnNumber(p, aColumnNumber))
997#define nsIException_GetColumnNumber(p, aColumnNumber) ((p)->lpVtbl->GetColumnNumber(p, aColumnNumber))
998#define nsIException_get_Inner(p, aInner) ((p)->lpVtbl->GetInner(p, aInner))
999#define nsIException_GetInner(p, aInner) ((p)->lpVtbl->GetInner(p, aInner))
1000#define nsIException_get_Data(p, aData) ((p)->lpVtbl->GetData(p, aData))
1001#define nsIException_GetData(p, aData) ((p)->lpVtbl->GetData(p, aData))
1002#define nsIException_ToString(p, retval) ((p)->lpVtbl->ToString(p, retval))
1003#define IErrorInfo_QueryInterface(p, iid, resultp) ((p)->lpVtbl->QueryInterface(p, iid, resultp))
1004#define IErrorInfo_AddRef(p) ((p)->lpVtbl->AddRef(p))
1005#define IErrorInfo_Release(p) ((p)->lpVtbl->Release(p))
1006#define IErrorInfo_get_Message(p, aMessage) ((p)->lpVtbl->GetMessage(p, aMessage))
1007#define IErrorInfo_GetMessage(p, aMessage) ((p)->lpVtbl->GetMessage(p, aMessage))
1008#define IErrorInfo_get_Result(p, aResult) ((p)->lpVtbl->GetResult(p, aResult))
1009#define IErrorInfo_GetResult(p, aResult) ((p)->lpVtbl->GetResult(p, aResult))
1010#define IErrorInfo_get_Name(p, aName) ((p)->lpVtbl->GetName(p, aName))
1011#define IErrorInfo_GetName(p, aName) ((p)->lpVtbl->GetName(p, aName))
1012#define IErrorInfo_get_Filename(p, aFilename) ((p)->lpVtbl->GetFilename(p, aFilename))
1013#define IErrorInfo_GetFilename(p, aFilename) ((p)->lpVtbl->GetFilename(p, aFilename))
1014#define IErrorInfo_get_LineNumber(p, aLineNumber) ((p)->lpVtbl->GetLineNumber(p, aLineNumber))
1015#define IErrorInfo_GetLineNumber(p, aLineNumber) ((p)->lpVtbl->GetLineNumber(p, aLineNumber))
1016#define IErrorInfo_get_ColumnNumber(p, aColumnNumber) ((p)->lpVtbl->GetColumnNumber(p, aColumnNumber))
1017#define IErrorInfo_GetColumnNumber(p, aColumnNumber) ((p)->lpVtbl->GetColumnNumber(p, aColumnNumber))
1018#define IErrorInfo_get_Inner(p, aInner) ((p)->lpVtbl->GetInner(p, aInner))
1019#define IErrorInfo_GetInner(p, aInner) ((p)->lpVtbl->GetInner(p, aInner))
1020#define IErrorInfo_get_Data(p, aData) ((p)->lpVtbl->GetData(p, aData))
1021#define IErrorInfo_GetData(p, aData) ((p)->lpVtbl->GetData(p, aData))
1022#define IErrorInfo_ToString(p, retval) ((p)->lpVtbl->ToString(p, retval))
1023#endif /* !VBOX_WITH_GLUE */
1024
1025interface nsIException
1026{
1027#ifndef VBOX_WITH_GLUE
1028 struct nsIException_vtbl *vtbl;
1029#else /* !VBOX_WITH_GLUE */
1030 CONST_VTBL struct nsIExceptionVtbl *lpVtbl;
1031#endif /* !VBOX_WITH_GLUE */
1032};
1033
1034/* starting interface: nsIStackFrame */
1035#define NS_ISTACKFRAME_IID_STR "91d82105-7c62-4f8b-9779-154277c0ee90"
1036
1037#define NS_ISTACKFRAME_IID \
1038 {0x91d82105, 0x7c62, 0x4f8b, \
1039 { 0x97, 0x79, 0x15, 0x42, 0x77, 0xc0, 0xee, 0x90 }}
1040
1041#ifndef VBOX_WITH_GLUE
1042struct nsIStackFrame_vtbl
1043{
1044 /* Methods from the interface nsISupports */
1045 struct nsISupports_vtbl nsisupports;
1046
1047 nsresult (*GetLanguage)(nsIStackFrame *pThis, PRUint32 *aLanguage);
1048 nsresult (*GetLanguageName)(nsIStackFrame *pThis, PRUnichar * *aLanguageName);
1049 nsresult (*GetFilename)(nsIStackFrame *pThis, PRUnichar * *aFilename);
1050 nsresult (*GetName)(nsIStackFrame *pThis, PRUnichar * *aName);
1051 nsresult (*GetLineNumber)(nsIStackFrame *pThis, PRInt32 *aLineNumber);
1052 nsresult (*GetSourceLine)(nsIStackFrame *pThis, PRUnichar * *aSourceLine);
1053 nsresult (*GetCaller)(nsIStackFrame *pThis, nsIStackFrame * *aCaller);
1054 nsresult (*ToString)(nsIStackFrame *pThis, PRUnichar **_retval);
1055};
1056#else /* !VBOX_WITH_GLUE */
1057struct nsIStackFrameVtbl
1058{
1059 nsresult (*QueryInterface)(nsIStackFrame *pThis, const nsID *iid, void **resultp);
1060 nsrefcnt (*AddRef)(nsIStackFrame *pThis);
1061 nsrefcnt (*Release)(nsIStackFrame *pThis);
1062
1063 nsresult (*GetLanguage)(nsIStackFrame *pThis, PRUint32 *aLanguage);
1064 nsresult (*GetLanguageName)(nsIStackFrame *pThis, PRUnichar * *aLanguageName);
1065 nsresult (*GetFilename)(nsIStackFrame *pThis, PRUnichar * *aFilename);
1066 nsresult (*GetName)(nsIStackFrame *pThis, PRUnichar * *aName);
1067 nsresult (*GetLineNumber)(nsIStackFrame *pThis, PRInt32 *aLineNumber);
1068 nsresult (*GetSourceLine)(nsIStackFrame *pThis, PRUnichar * *aSourceLine);
1069 nsresult (*GetCaller)(nsIStackFrame *pThis, nsIStackFrame * *aCaller);
1070 nsresult (*ToString)(nsIStackFrame *pThis, PRUnichar **_retval);
1071};
1072#define nsIStackFrame_QueryInterface(p, iid, resultp) ((p)->lpVtbl->QueryInterface(p, iid, resultp))
1073#define nsIStackFrame_AddRef(p) ((p)->lpVtbl->AddRef(p))
1074#define nsIStackFrame_Release(p) ((p)->lpVtbl->Release(p))
1075#define nsIStackFrame_get_Language(p, aLanguage) ((p)->lpVtbl->GetLanguge(p, aLanguage))
1076#define nsIStackFrame_GetLanguage(p, aLanguage) ((p)->lpVtbl->GetLanguge(p, aLanguage))
1077#define nsIStackFrame_get_LanguageName(p, aLanguageName) ((p)->lpVtbl->GetLanguageName(p, aLanguageName))
1078#define nsIStackFrame_GetLanguageName(p, aLanguageName) ((p)->lpVtbl->GetLanguageName(p, aLanguageName))
1079#define nsIStackFrame_get_Filename(p, aFilename) ((p)->lpVtbl->GetFilename(p, aFilename))
1080#define nsIStackFrame_GetFilename(p, aFilename) ((p)->lpVtbl->GetFilename(p, aFilename))
1081#define nsIStackFrame_get_Name(p, aName) ((p)->lpVtbl->GetName(p, aName))
1082#define nsIStackFrame_GetName(p, aName) ((p)->lpVtbl->GetName(p, aName))
1083#define nsIStackFrame_get_LineNumber(p, aLineNumber) ((p)->lpVtbl->GetLineNumber(p, aLineNumber))
1084#define nsIStackFrame_GetLineNumber(p, aLineNumber) ((p)->lpVtbl->GetLineNumber(p, aLineNumber))
1085#define nsIStackFrame_get_SourceLine(p, aSourceLine) ((p)->lpVtbl->GetSourceLine(p, aSourceLine))
1086#define nsIStackFrame_GetSourceLine(p, aSourceLine) ((p)->lpVtbl->GetSourceLine(p, aSourceLine))
1087#define nsIStackFrame_get_Caller(p, aCaller) ((p)->lpVtbl->GetCaller(p, aCaller))
1088#define nsIStackFrame_GetCaller(p, aCaller) ((p)->lpVtbl->GetCaller(p, aCaller))
1089#define nsIStackFrame_ToString(p, retval) ((p)->lpVtbl->ToString(p, retval))
1090#endif /* !VBOX_WITH_GLUE */
1091
1092interface nsIStackFrame
1093{
1094#ifndef VBOX_WITH_GLUE
1095 struct nsIStackFrame_vtbl *vtbl;
1096#else /* !VBOX_WITH_GLUE */
1097 CONST_VTBL struct nsIStackFrameVtbl *lpVtbl;
1098#endif /* !VBOX_WITH_GLUE */
1099};
1100
1101/* starting interface: nsIEventTarget */
1102#define NS_IEVENTTARGET_IID_STR "ea99ad5b-cc67-4efb-97c9-2ef620a59f2a"
1103
1104#define NS_IEVENTTARGET_IID \
1105 {0xea99ad5b, 0xcc67, 0x4efb, \
1106 { 0x97, 0xc9, 0x2e, 0xf6, 0x20, 0xa5, 0x9f, 0x2a }}
1107
1108#ifndef VBOX_WITH_GLUE
1109struct nsIEventTarget_vtbl
1110{
1111 struct nsISupports_vtbl nsisupports;
1112
1113 nsresult (*PostEvent)(nsIEventTarget *pThis, PLEvent * aEvent);
1114 nsresult (*IsOnCurrentThread)(nsIEventTarget *pThis, PRBool *_retval);
1115};
1116#else /* !VBOX_WITH_GLUE */
1117struct nsIEventTargetVtbl
1118{
1119 nsresult (*QueryInterface)(nsIEventTarget *pThis, const nsID *iid, void **resultp);
1120 nsrefcnt (*AddRef)(nsIEventTarget *pThis);
1121 nsrefcnt (*Release)(nsIEventTarget *pThis);
1122
1123 nsresult (*PostEvent)(nsIEventTarget *pThis, PLEvent * aEvent);
1124 nsresult (*IsOnCurrentThread)(nsIEventTarget *pThis, PRBool *_retval);
1125};
1126#define nsIEventTarget_QueryInterface(p, iid, resultp) ((p)->lpVtbl->QueryInterface(p, iid, resultp))
1127#define nsIEventTarget_AddRef(p) ((p)->lpVtbl->AddRef(p))
1128#define nsIEventTarget_Release(p) ((p)->lpVtbl->Release(p))
1129#define nsIEventTarget_PostEvent(p, aEvent) ((p)->lpVtbl->PostEvent(p, aEvent))
1130#define nsIEventTarget_IsOnCurrentThread(p, retval) ((p)->lpVtbl->IsOnCurrentThread(p, retval))
1131#endif /* !VBOX_WITH_GLUE */
1132
1133interface nsIEventTarget
1134{
1135#ifndef VBOX_WITH_GLUE
1136 struct nsIEventTarget_vtbl *vtbl;
1137#else /* !VBOX_WITH_GLUE */
1138 CONST_VTBL struct nsIEventTargetVtbl *lpVtbl;
1139#endif /* !VBOX_WITH_GLUE */
1140};
1141
1142/* starting interface: nsIEventQueue */
1143#define NS_IEVENTQUEUE_IID_STR "176afb41-00a4-11d3-9f2a-00400553eef0"
1144
1145#define NS_IEVENTQUEUE_IID \
1146 {0x176afb41, 0x00a4, 0x11d3, \
1147 { 0x9f, 0x2a, 0x00, 0x40, 0x05, 0x53, 0xee, 0xf0 }}
1148
1149#ifndef VBOX_WITH_GLUE
1150struct nsIEventQueue_vtbl
1151{
1152 struct nsIEventTarget_vtbl nsieventtarget;
1153
1154 nsresult (*InitEvent)(nsIEventQueue *pThis, PLEvent * aEvent, void * owner, PLHandleEventProc handler, PLDestroyEventProc destructor);
1155 nsresult (*PostSynchronousEvent)(nsIEventQueue *pThis, PLEvent * aEvent, void * *aResult);
1156 nsresult (*PendingEvents)(nsIEventQueue *pThis, PRBool *_retval);
1157 nsresult (*ProcessPendingEvents)(nsIEventQueue *pThis);
1158 nsresult (*EventLoop)(nsIEventQueue *pThis);
1159 nsresult (*EventAvailable)(nsIEventQueue *pThis, PRBool *aResult);
1160 nsresult (*GetEvent)(nsIEventQueue *pThis, PLEvent * *_retval);
1161 nsresult (*HandleEvent)(nsIEventQueue *pThis, PLEvent * aEvent);
1162 nsresult (*WaitForEvent)(nsIEventQueue *pThis, PLEvent * *_retval);
1163 PRInt32 (*GetEventQueueSelectFD)(nsIEventQueue *pThis);
1164 nsresult (*Init)(nsIEventQueue *pThis, PRBool aNative);
1165 nsresult (*InitFromPRThread)(nsIEventQueue *pThis, PRThread * thread, PRBool aNative);
1166 nsresult (*InitFromPLQueue)(nsIEventQueue *pThis, PLEventQueue * aQueue);
1167 nsresult (*EnterMonitor)(nsIEventQueue *pThis);
1168 nsresult (*ExitMonitor)(nsIEventQueue *pThis);
1169 nsresult (*RevokeEvents)(nsIEventQueue *pThis, void * owner);
1170 nsresult (*GetPLEventQueue)(nsIEventQueue *pThis, PLEventQueue * *_retval);
1171 nsresult (*IsQueueNative)(nsIEventQueue *pThis, PRBool *_retval);
1172 nsresult (*StopAcceptingEvents)(nsIEventQueue *pThis);
1173};
1174#else /* !VBOX_WITH_GLUE */
1175struct nsIEventQueueVtbl
1176{
1177 nsresult (*QueryInterface)(nsIEventQueue *pThis, const nsID *iid, void **resultp);
1178 nsrefcnt (*AddRef)(nsIEventQueue *pThis);
1179 nsrefcnt (*Release)(nsIEventQueue *pThis);
1180
1181 nsresult (*PostEvent)(nsIEventQueue *pThis, PLEvent * aEvent);
1182 nsresult (*IsOnCurrentThread)(nsIEventQueue *pThis, PRBool *_retval);
1183
1184 nsresult (*InitEvent)(nsIEventQueue *pThis, PLEvent * aEvent, void * owner, PLHandleEventProc handler, PLDestroyEventProc destructor);
1185 nsresult (*PostSynchronousEvent)(nsIEventQueue *pThis, PLEvent * aEvent, void * *aResult);
1186 nsresult (*PendingEvents)(nsIEventQueue *pThis, PRBool *_retval);
1187 nsresult (*ProcessPendingEvents)(nsIEventQueue *pThis);
1188 nsresult (*EventLoop)(nsIEventQueue *pThis);
1189 nsresult (*EventAvailable)(nsIEventQueue *pThis, PRBool *aResult);
1190 nsresult (*GetEvent)(nsIEventQueue *pThis, PLEvent * *_retval);
1191 nsresult (*HandleEvent)(nsIEventQueue *pThis, PLEvent * aEvent);
1192 nsresult (*WaitForEvent)(nsIEventQueue *pThis, PLEvent * *_retval);
1193 PRInt32 (*GetEventQueueSelectFD)(nsIEventQueue *pThis);
1194 nsresult (*Init)(nsIEventQueue *pThis, PRBool aNative);
1195 nsresult (*InitFromPRThread)(nsIEventQueue *pThis, PRThread * thread, PRBool aNative);
1196 nsresult (*InitFromPLQueue)(nsIEventQueue *pThis, PLEventQueue * aQueue);
1197 nsresult (*EnterMonitor)(nsIEventQueue *pThis);
1198 nsresult (*ExitMonitor)(nsIEventQueue *pThis);
1199 nsresult (*RevokeEvents)(nsIEventQueue *pThis, void * owner);
1200 nsresult (*GetPLEventQueue)(nsIEventQueue *pThis, PLEventQueue * *_retval);
1201 nsresult (*IsQueueNative)(nsIEventQueue *pThis, PRBool *_retval);
1202 nsresult (*StopAcceptingEvents)(nsIEventQueue *pThis);
1203};
1204#define nsIEventQueue_QueryInterface(p, iid, resultp) ((p)->lpVtbl->QueryInterface(p, iid, resultp))
1205#define nsIEventQueue_AddRef(p) ((p)->lpVtbl->AddRef(p))
1206#define nsIEventQueue_Release(p) ((p)->lpVtbl->Release(p))
1207#define nsIEventQueue_PostEvent(p, aEvent) ((p)->lpVtbl->PostEvent(p, aEvent))
1208#define nsIEventQueue_IsOnCurrentThread(p, retval) ((p)->lpVtbl->IsOnCurrentThread(p, retval))
1209#define nsIEventQueue_InitEvent(p, aEvent, owner, handler, destructor) ((p)->lpVtbl->InitEvent(p, aEvent, owner, handler, destructor))
1210#define nsIEventQueue_PostSynchronousEvent(p, aEvent, aResult) ((p)->lpVtbl->PostSynchronousEvent(p, aEvent, aResult))
1211#define nsIEventQueue_ProcessPendingEvents(p) ((p)->lpVtbl->ProcessPendingEvents(p))
1212#define nsIEventQueue_EventLoop(p) ((p)->lpVtbl->EventLoop(p))
1213#define nsIEventQueue_EventAvailable(p, aResult) ((p)->lpVtbl->EventAvailable(p, aResult))
1214#define nsIEventQueue_get_Event(p, aEvent) ((p)->lpVtbl->GetEvent(p, aEvent))
1215#define nsIEventQueue_GetEvent(p, aEvent) ((p)->lpVtbl->GetEvent(p, aEvent))
1216#define nsIEventQueue_HandleEvent(p, aEvent) ((p)->lpVtbl->HandleEvent(p, aEvent))
1217#define nsIEventQueue_WaitForEvent(p, aEvent) ((p)->lpVtbl->WaitForEvent(p, aEvent))
1218#define nsIEventQueue_GetEventQueueSelectFD(p) ((p)->lpVtbl->GetEventQueueSelectFD(p))
1219#define nsIEventQueue_Init(p, aNative) ((p)->lpVtbl->Init(p, aNative))
1220#define nsIEventQueue_InitFromPLQueue(p, aQueue) ((p)->lpVtbl->InitFromPLQueue(p, aQueue))
1221#define nsIEventQueue_EnterMonitor(p) ((p)->lpVtbl->EnterMonitor(p))
1222#define nsIEventQueue_ExitMonitor(p) ((p)->lpVtbl->ExitMonitor(p))
1223#define nsIEventQueue_RevokeEvents(p, owner) ((p)->lpVtbl->RevokeEvents(p, owner))
1224#define nsIEventQueue_GetPLEventQueue(p, retval) ((p)->lpVtbl->GetPLEventQueue(p, retval))
1225#define nsIEventQueue_IsQueueNative(p, retval) ((p)->lpVtbl->IsQueueNative(p, retval))
1226#define nsIEventQueue_StopAcceptingEvents(p) ((p)->lpVtbl->StopAcceptingEvents(p))
1227#endif /* !VBOX_WITH_GLUE */
1228
1229interface nsIEventQueue
1230{
1231#ifndef VBOX_WITH_GLUE
1232 struct nsIEventQueue_vtbl *vtbl;
1233#else /* !VBOX_WITH_GLUE */
1234 CONST_VTBL struct nsIEventQueueVtbl *lpVtbl;
1235#endif /* !VBOX_WITH_GLUE */
1236};
1237</xsl:text>
1238 <xsl:call-template name="xsltprocNewlineOutputHack"/>
1239 <xsl:apply-templates/>
1240 <xsl:text>
1241
1242#endif /* __cplusplus */
1243
1244#endif /* !WIN32 */
1245
1246#ifdef __cplusplus
1247extern "C"
1248{
1249#endif /* __cplusplus */
1250
1251
1252/**
1253 * Function table for dynamic linking.
1254 * Use VBoxGetCAPIFunctions() to obtain the pointer to it.
1255 */
1256typedef struct VBOXCAPI
1257{
1258 /** The size of the structure. */
1259 unsigned cb;
1260 /** The structure version. */
1261 unsigned uVersion;
1262
1263 /** Gets the VirtualBox version, major * 1000000 + minor * 1000 + patch. */
1264 unsigned int (*pfnGetVersion)(void);
1265
1266 /** Gets the VirtualBox API version, major * 1000 + minor, e.g. 4003. */
1267 unsigned int (*pfnGetAPIVersion)(void);
1268
1269 /**
1270 * New and preferred way to initialize the C bindings for an API client.
1271 *
1272 * This way is much more flexible, as it can easily handle multiple
1273 * sessions (important with more complicated API clients, including
1274 * multithreaded ones), and even VBoxSVC crashes can be detected and
1275 * processed appropriately by listening for events from the associated
1276 * event source in VirtualBoxClient. It is completely up to the client
1277 * to decide what to do (terminate or continue after getting new
1278 * object references to server-side objects). Must be called in the
1279 * primary thread of the client, later API use can be done in any
1280 * thread.
1281 *
1282 * Note that the returned reference is owned by the caller, and thus it's
1283 * the caller's responsibility to handle the reference count appropriately.
1284 *
1285 * @param pszVirtualBoxClientIID pass IVIRTUALBOXCLIENT_IID_STR
1286 * @param ppVirtualBoxClient output parameter for VirtualBoxClient
1287 * reference, handled as usual with COM/XPCOM.
1288 * @returns COM/XPCOM error code
1289 */
1290 HRESULT (*pfnClientInitialize)(const char *pszVirtualBoxClientIID,
1291 IVirtualBoxClient **ppVirtualBoxClient);
1292 /**
1293 * Initialize the use of the C bindings in a non-primary thread.
1294 *
1295 * Must be called on any newly created thread which wants to use the
1296 * VirtualBox API.
1297 *
1298 * @returns COM/XPCOM error code
1299 */
1300 HRESULT (*pfnClientThreadInitialize)(void);
1301 /**
1302 * Uninitialize the use of the C bindings in a non-primary thread.
1303 *
1304 * Should be called before terminating the thread which initialized the
1305 * C bindings using pfnClientThreadInitialize.
1306 *
1307 * @returns COM/XPCOM error code
1308 */
1309 HRESULT (*pfnClientThreadUninitialize)(void);
1310 /**
1311 * Uninitialize the C bindings for an API client.
1312 *
1313 * Should be called when the API client is about to terminate and does
1314 * not want to use the C bindings any more. It will invalidate all
1315 * object references. It is possible, however, to change one's mind,
1316 * and call pfnClientInitialize again to continue using the API, as long
1317 * as none of the object references from before the re-initialization
1318 * are used. Must be called from the primary thread of the client.
1319 */
1320 void (*pfnClientUninitialize)(void);
1321
1322 /**
1323 * Deprecated way to initialize the C bindings and getting important
1324 * object references. Kept for backwards compatibility.
1325 *
1326 * If any returned reference is NULL then the initialization failed.
1327 * Note that the returned references are owned by the C bindings. The
1328 * number of calls to Release in the client code must match the number
1329 * of calls to AddRef, and additionally at no point in time there can
1330 * be more Release calls than AddRef calls.
1331 *
1332 * @param pszVirtualBoxIID pass IVIRTUALBOX_IID_STR
1333 * @param ppVirtualBox output parameter for VirtualBox reference,
1334 * owned by C bindings
1335 * @param pszSessionIID pass ISESSION_IID_STR
1336 * @param ppSession output parameter for Session reference,
1337 * owned by C bindings
1338 */
1339 void (*pfnComInitialize)(const char *pszVirtualBoxIID,
1340 IVirtualBox **ppVirtualBox,
1341 const char *pszSessionIID,
1342 ISession **ppSession);
1343 /**
1344 * Deprecated way to uninitialize the C bindings for an API client.
1345 * Kept for backwards compatibility and must be used if the C bindings
1346 * were initialized using pfnComInitialize. */
1347 void (*pfnComUninitialize)(void);
1348
1349 /**
1350 * Free string managed by COM/XPCOM.
1351 *
1352 * @param pwsz pointer to string to be freed
1353 */
1354 void (*pfnComUnallocString)(BSTR pwsz);
1355#ifndef WIN32
1356 /** Legacy function, was always for freeing strings only. */
1357#define pfnComUnallocMem(pv) pfnComUnallocString((BSTR)(pv))
1358#endif /* !WIN32 */
1359
1360 /**
1361 * Convert string from UTF-16 encoding to UTF-8 encoding.
1362 *
1363 * @param pwszString input string
1364 * @param ppszString output string
1365 * @returns IPRT status code
1366 */
1367 int (*pfnUtf16ToUtf8)(CBSTR pwszString, char **ppszString);
1368 /**
1369 * Convert string from UTF-8 encoding to UTF-16 encoding.
1370 *
1371 * @param pszString input string
1372 * @param ppwszString output string
1373 * @returns IPRT status code
1374 */
1375 int (*pfnUtf8ToUtf16)(const char *pszString, BSTR *ppwszString);
1376 /**
1377 * Free memory returned by pfnUtf16ToUtf8. Do not use for anything else.
1378 *
1379 * @param pszString string to be freed.
1380 */
1381 void (*pfnUtf8Free)(char *pszString);
1382 /**
1383 * Free memory returned by pfnUtf8ToUtf16. Do not use for anything else.
1384 *
1385 * @param pwszString string to be freed.
1386 */
1387 void (*pfnUtf16Free)(BSTR pwszString);
1388
1389 /**
1390 * Create a safearray (used for passing arrays to COM/XPCOM)
1391 *
1392 * Must be freed by pfnSafeArrayDestroy.
1393 *
1394 * @param vt variant type, defines the size of the elements
1395 * @param lLbound lower bound of the index, should be 0
1396 * @param cElements number of elements
1397 * @returns pointer to safearray
1398 */
1399 SAFEARRAY *(*pfnSafeArrayCreateVector)(VARTYPE vt, LONG lLbound, ULONG cElements);
1400 /**
1401 * Pre-allocate a safearray to be used by an out safearray parameter
1402 *
1403 * Must be freed by pfnSafeArrayDestroy.
1404 *
1405 * @returns pointer to safearray (system dependent, may be NULL if
1406 * there is no need to pre-allocate a safearray)
1407 */
1408 SAFEARRAY *(*pfnSafeArrayOutParamAlloc)(void);
1409 /**
1410 * Copy a C array into a safearray (for passing as an input parameter)
1411 *
1412 * @param psa pointer to already created safearray.
1413 * @param pv pointer to memory block to copy into safearray.
1414 * @param cb number of bytes to copy.
1415 * @returns COM/XPCOM error code
1416 */
1417 HRESULT (*pfnSafeArrayCopyInParamHelper)(SAFEARRAY *psa, const void *pv, ULONG cb);
1418 /**
1419 * Copy a safearray into a C array (for getting an output parameter)
1420 *
1421 * @param ppv output pointer to newly created array, which has to
1422 * be freed with pfnArrayOutFree.
1423 * @param pcb number of bytes in the output buffer.
1424 * @param vt variant type, defines the size of the elements
1425 * @param psa pointer to safearray for getting the data
1426 * @returns COM/XPCOM error code
1427 */
1428 HRESULT (*pfnSafeArrayCopyOutParamHelper)(void **ppv, ULONG *pcb, VARTYPE vt, SAFEARRAY *psa);
1429 /**
1430 * Copy a safearray into a C array (special variant for interface pointers)
1431 *
1432 * @param ppaObj output pointer to newly created array, which has
1433 * to be freed with pfnArrayOutFree. Note that it's the caller's
1434 * responsibility to call Release() on each non-NULL interface
1435 * pointer before freeing.
1436 * @param pcObj number of pointers in the output buffer.
1437 * @param psa pointer to safearray for getting the data
1438 * @returns COM/XPCOM error code
1439 */
1440 HRESULT (*pfnSafeArrayCopyOutIfaceParamHelper)(IUnknown ***ppaObj, ULONG *pcObj, SAFEARRAY *psa);
1441 /**
1442 * Free a safearray
1443 *
1444 * @param psa pointer to safearray
1445 * @returns COM/XPCOM error code
1446 */
1447 HRESULT (*pfnSafeArrayDestroy)(SAFEARRAY *psa);
1448 /**
1449 * Free an out array created by pfnSafeArrayCopyOutParamHelper or
1450 * pdnSafeArrayCopyOutIfaceParamHelper.
1451 *
1452 * @param psa pointer to memory block
1453 * @returns COM/XPCOM error code
1454 */
1455 HRESULT (*pfnArrayOutFree)(void *pv);
1456
1457#ifndef WIN32
1458 /**
1459 * Get XPCOM event queue. Deprecated!
1460 *
1461 * @param ppEventQueue output parameter for nsIEventQueue reference,
1462 * owned by C bindings.
1463 */
1464 void (*pfnGetEventQueue)(nsIEventQueue **ppEventQueue);
1465#endif /* !WIN32 */
1466
1467 /**
1468 * Get current COM/XPCOM exception.
1469 *
1470 * @param ppException output parameter for exception info reference,
1471 * may be @c NULL if no exception object has been created by
1472 * a previous COM/XPCOM call.
1473 * @returns COM/XPCOM error code
1474 */
1475 HRESULT (*pfnGetException)(IErrorInfo **ppException);
1476 /**
1477 * Clears current COM/XPCOM exception.
1478 *
1479 * @returns COM/XPCOM error code
1480 */
1481 HRESULT (*pfnClearException)(void);
1482
1483 /**
1484 * Process the event queue for a given amount of time.
1485 *
1486 * Must be called on the primary thread. Typical timeouts are from 200 to
1487 * 5000 msecs, to allow for checking a volatile variable if the event queue
1488 * processing should be terminated (,
1489 * or 0 if only the pending events should be processed, without waiting.
1490 *
1491 * @param iTimeoutMS how long to process the event queue, -1 means
1492 * infinitely long
1493 * @returns status code
1494 * @retval 0 if at least one event has been processed
1495 * @retval 1 if any signal interrupted the native system call (or returned
1496 * otherwise)
1497 * @retval 2 if the event queue was explicitly interrupted
1498 * @retval 3 if the timeout expired
1499 * @retval 4 if the function was called from the wrong thread
1500 * @retval 5 for all other (unexpected) errors
1501 */
1502 int (*pfnProcessEventQueue)(LONG64 iTimeoutMS);
1503 /**
1504 * Interrupt event queue processing.
1505 *
1506 * Can be called on any thread. Note that this function is not async-signal
1507 * safe, so never use it in such a context, instead use a volatile global
1508 * variable and a sensible timeout.
1509 * @returns 0 if successful, 1 otherwise.
1510 */
1511 int (*pfnInterruptEventQueueProcessing)(void);
1512
1513 /**
1514 * Clear memory used by a UTF-8 string. Must be zero terminated.
1515 * Can be used for any UTF-8 or ASCII/ANSI string.
1516 *
1517 * @param pszString input/output string
1518 */
1519 void (*pfnUtf8Clear)(char *pszString);
1520 /**
1521 * Clear memory used by a UTF-16 string. Must be zero terminated.
1522 * Can be used for any UTF-16 or UCS-2 string.
1523 *
1524 * @param pwszString input/output string
1525 */
1526 void (*pfnUtf16Clear)(BSTR pwszString);
1527
1528 /** Tail version, same as uVersion.
1529 *
1530 * This should only be accessed if for some reason an API client needs
1531 * exactly the version it requested, or if cb is used to calculate the
1532 * address of this field. It may move as the structure before this is
1533 * allowed to grow as long as all the data from earlier minor versions
1534 * remains at the same place.
1535 */
1536 unsigned uEndVersion;
1537} VBOXCAPI;
1538/** Pointer to a const VBOXCAPI function table. */
1539typedef VBOXCAPI const *PCVBOXCAPI;
1540#ifndef WIN32
1541/** Backwards compatibility: Pointer to a const VBOXCAPI function table.
1542 * Use PCVBOXCAPI instead. */
1543typedef VBOXCAPI const *PCVBOXXPCOM;
1544#endif /* !WIN32 */
1545
1546#ifndef WIN32
1547/** Backwards compatibility: make sure old code using VBOXXPCOMC still compiles.
1548 * Use VBOXCAPI instead. */
1549#define VBOXXPCOMC VBOXCAPI
1550#endif /* !WIN32 */
1551
1552/** Extract the C API style major version.
1553 * Useful for comparing the interface version in VBOXCAPI::uVersion. */
1554#define VBOX_CAPI_MAJOR(x) (((x) &amp; 0xffff0000U) &gt;&gt; 16)
1555
1556/** Extract the C API style major version.
1557 * Useful for comparing the interface version in VBOXCAPI::uVersion. */
1558#define VBOX_CAPI_MINOR(x) ((x) &amp; 0x0000ffffU)
1559
1560/** The current interface version.
1561 * For use with VBoxGetCAPIFunctions and to be found in VBOXCAPI::uVersion. */
1562#define VBOX_CAPI_VERSION 0x00040001U
1563
1564#ifndef WIN32
1565/** Backwards compatibility: The current interface version.
1566 * Use VBOX_CAPI_VERSION instead. */
1567#define VBOX_XPCOMC_VERSION VBOX_CAPI_VERSION
1568#endif /* !WIN32 */
1569
1570/** VBoxGetCAPIFunctions. */
1571VBOXCAPI_DECL(PCVBOXCAPI) VBoxGetCAPIFunctions(unsigned uVersion);
1572#ifndef WIN32
1573/** Backwards compatibility: VBoxGetXPCOMCFunctions.
1574 * Use VBoxGetCAPIFunctions instead. */
1575VBOXCAPI_DECL(PCVBOXCAPI) VBoxGetXPCOMCFunctions(unsigned uVersion);
1576#endif /* !WIN32 */
1577
1578/** Typedef for VBoxGetCAPIFunctions. */
1579typedef PCVBOXCAPI (*PFNVBOXGETCAPIFUNCTIONS)(unsigned uVersion);
1580#ifndef WIN32
1581/** Backwards compatibility: Typedef for VBoxGetXPCOMCFunctions.
1582 * Use PFNVBOXGETCAPIFUNCTIONS instead. */
1583typedef PCVBOXCAPI (*PFNVBOXGETXPCOMCFUNCTIONS)(unsigned uVersion);
1584#endif /* !WIN32 */
1585
1586/** The symbol name of VBoxGetCAPIFunctions. */
1587#ifdef __OS2__
1588# define VBOX_GET_CAPI_FUNCTIONS_SYMBOL_NAME "_VBoxGetCAPIFunctions"
1589#else /* !__OS2__ */
1590# define VBOX_GET_CAPI_FUNCTIONS_SYMBOL_NAME "VBoxGetCAPIFunctions"
1591#endif /* !__OS2__ */
1592#ifndef WIN32
1593/** Backwards compatibility: The symbol name of VBoxGetXPCOMCFunctions.
1594 * Use VBOX_GET_CAPI_FUNCTIONS_SYMBOL_NAME instead. */
1595# ifdef __OS2__
1596# define VBOX_GET_XPCOMC_FUNCTIONS_SYMBOL_NAME "_VBoxGetXPCOMCFunctions"
1597# else /* !__OS2__ */
1598# define VBOX_GET_XPCOMC_FUNCTIONS_SYMBOL_NAME "VBoxGetXPCOMCFunctions"
1599# endif /* !__OS2__ */
1600#endif /* !WIN32 */
1601
1602
1603#ifdef __cplusplus
1604}
1605#endif /* __cplusplus */
1606
1607#endif /* !___VirtualBox_CAPI_h */
1608</xsl:text>
1609</xsl:template>
1610
1611<!--
1612 * ignore all |if|s except those for XPIDL target
1613-->
1614<xsl:template match="if">
1615 <xsl:if test="@target='xpidl'">
1616 <xsl:apply-templates/>
1617 </xsl:if>
1618</xsl:template>
1619<xsl:template match="if" mode="forward">
1620 <xsl:if test="@target='xpidl'">
1621 <xsl:apply-templates mode="forward"/>
1622 </xsl:if>
1623</xsl:template>
1624<xsl:template match="if" mode="forwarder">
1625 <xsl:if test="@target='midl'">
1626 <xsl:apply-templates mode="forwarder"/>
1627 </xsl:if>
1628</xsl:template>
1629
1630
1631<!--
1632 * libraries
1633-->
1634<xsl:template match="idl/library">
1635 <!-- result codes -->
1636 <xsl:call-template name="xsltprocNewlineOutputHack"/>
1637 <xsl:for-each select="application/result">
1638 <xsl:apply-templates select="."/>
1639 </xsl:for-each>
1640 <xsl:call-template name="xsltprocNewlineOutputHack"/>
1641 <xsl:call-template name="xsltprocNewlineOutputHack"/>
1642 <!-- forward declarations -->
1643 <xsl:apply-templates select="application/interface | application/if/interface" mode="forward"/>
1644 <xsl:call-template name="xsltprocNewlineOutputHack"/>
1645 <!-- typedef'ing the struct declarations -->
1646 <xsl:apply-templates select="application/interface | application/if/interface" mode="typedef"/>
1647 <xsl:call-template name="xsltprocNewlineOutputHack"/>
1648 <!-- all enums go first -->
1649 <xsl:apply-templates select="application/enum | application/if/enum"/>
1650 <!-- everything else but result codes and enums
1651 <xsl:apply-templates select="*[not(self::result or self::enum) and
1652 not(self::if[result] or self::if[enum])]"/> -->
1653 <!-- the modules (i.e. everything else) -->
1654 <xsl:apply-templates select="application/interface | application/if[interface]
1655 | application/module | application/if[module]"/>
1656 <!-- -->
1657</xsl:template>
1658
1659
1660<!--
1661 * result codes
1662-->
1663<xsl:template match="result">
1664 <xsl:value-of select="concat('#define ',@name,' ((HRESULT)',@value, ')')"/>
1665 <xsl:text>&#x0A;</xsl:text>
1666</xsl:template>
1667
1668
1669<!--
1670 * forward declarations
1671-->
1672<xsl:template match="interface" mode="forward">
1673 <xsl:if test="not(@internal='yes')">
1674 <xsl:text>interface </xsl:text>
1675 <xsl:value-of select="@name"/>
1676 <xsl:text>;&#x0A;</xsl:text>
1677 </xsl:if>
1678</xsl:template>
1679
1680
1681<!--
1682 * typedef'ing the struct declarations
1683-->
1684<xsl:template match="interface" mode="typedef">
1685 <xsl:if test="not(@internal='yes')">
1686 <xsl:text>typedef interface </xsl:text>
1687 <xsl:value-of select="@name"/>
1688 <xsl:text> </xsl:text>
1689 <xsl:value-of select="@name"/>
1690 <xsl:text>;&#x0A;</xsl:text>
1691 </xsl:if>
1692</xsl:template>
1693
1694
1695<!--
1696 * COBJMACRO style convenience macros for calling methods
1697-->
1698<xsl:template match="interface" mode="cobjmacro">
1699 <xsl:param name="iface"/>
1700
1701 <xsl:variable name="extends" select="@extends"/>
1702 <xsl:choose>
1703 <xsl:when test="$extends='$unknown'">
1704 <xsl:text>#define </xsl:text>
1705 <xsl:value-of select="$iface"/>
1706 <xsl:text>_QueryInterface(p, iid, resultp) ((p)->lpVtbl->QueryInterface(p, iid, resultp))&#x0A;</xsl:text>
1707 <xsl:text>#define </xsl:text>
1708 <xsl:value-of select="$iface"/>
1709 <xsl:text>_AddRef(p) ((p)->lpVtbl->AddRef(p))&#x0A;</xsl:text>
1710 <xsl:text>#define </xsl:text>
1711 <xsl:value-of select="$iface"/>
1712 <xsl:text>_Release(p) ((p)->lpVtbl->Release(p))&#x0A;</xsl:text>
1713 </xsl:when>
1714 <xsl:when test="$extends='$errorinfo'">
1715 <xsl:text>#define </xsl:text>
1716 <xsl:value-of select="$iface"/>
1717 <xsl:text>_QueryInterface(p, iid, resultp) ((p)->lpVtbl->QueryInterface(p, iid, resultp))&#x0A;</xsl:text>
1718 <xsl:text>#define </xsl:text>
1719 <xsl:value-of select="$iface"/>
1720 <xsl:text>_AddRef(p) ((p)->lpVtbl->AddRef(p))&#x0A;</xsl:text>
1721 <xsl:text>#define </xsl:text>
1722 <xsl:value-of select="$iface"/>
1723 <xsl:text>_Release(p) ((p)->lpVtbl->Release(p))&#x0A;</xsl:text>
1724 <xsl:text>#define </xsl:text>
1725 <xsl:value-of select="$iface"/>
1726 <xsl:text>_get_Message(p, aMessage) ((p)->lpVtbl->GetMessage(p, aMessage))&#x0A;</xsl:text>
1727 <xsl:text>#define </xsl:text>
1728 <xsl:value-of select="$iface"/>
1729 <xsl:text>_GetMessage(p, aMessage) ((p)->lpVtbl->GetMessage(p, aMessage))&#x0A;</xsl:text>
1730 <xsl:text>#define </xsl:text>
1731 <xsl:value-of select="$iface"/>
1732 <xsl:text>_get_Result(p, aResult) ((p)->lpVtbl->GetResult(p, aResult))&#x0A;</xsl:text>
1733 <xsl:text>#define </xsl:text>
1734 <xsl:value-of select="$iface"/>
1735 <xsl:text>_GetResult(p, aResult) ((p)->lpVtbl->GetResult(p, aResult))&#x0A;</xsl:text>
1736 <xsl:text>#define </xsl:text>
1737 <xsl:value-of select="$iface"/>
1738 <xsl:text>_get_Name(p, aName) ((p)->lpVtbl->GetName(p, aName))&#x0A;</xsl:text>
1739 <xsl:text>#define </xsl:text>
1740 <xsl:value-of select="$iface"/>
1741 <xsl:text>_GetName(p, aName) ((p)->lpVtbl->GetName(p, aName))&#x0A;</xsl:text>
1742 <xsl:text>#define </xsl:text>
1743 <xsl:value-of select="$iface"/>
1744 <xsl:text>_get_Filename(p, aFilename) ((p)->lpVtbl->GetFilename(p, aFilename))&#x0A;</xsl:text>
1745 <xsl:text>#define </xsl:text>
1746 <xsl:value-of select="$iface"/>
1747 <xsl:text>_GetFilename(p, aFilename) ((p)->lpVtbl->GetFilename(p, aFilename))&#x0A;</xsl:text>
1748 <xsl:text>#define </xsl:text>
1749 <xsl:value-of select="$iface"/>
1750 <xsl:text>_get_LineNumber(p, aLineNumber) ((p)->lpVtbl->GetLineNumber(p, aLineNumber))&#x0A;</xsl:text>
1751 <xsl:text>#define </xsl:text>
1752 <xsl:value-of select="$iface"/>
1753 <xsl:text>_GetLineNumber(p, aLineNumber) ((p)->lpVtbl->GetLineNumber(p, aLineNumber))&#x0A;</xsl:text>
1754 <xsl:text>#define </xsl:text>
1755 <xsl:value-of select="$iface"/>
1756 <xsl:text>_get_ColumnNumber(p, aColumnNumber) ((p)->lpVtbl->GetColumnNumber(p, aColumnNumber))&#x0A;</xsl:text>
1757 <xsl:text>#define </xsl:text>
1758 <xsl:value-of select="$iface"/>
1759 <xsl:text>_GetColumnNumber(p, aColumnNumber) ((p)->lpVtbl->GetColumnNumber(p, aColumnNumber))&#x0A;</xsl:text>
1760 <xsl:text>#define </xsl:text>
1761 <xsl:value-of select="$iface"/>
1762 <xsl:text>_get_Location(p, aLocation) ((p)->lpVtbl->GetLocation(p, aLocation))&#x0A;</xsl:text>
1763 <xsl:text>#define </xsl:text>
1764 <xsl:value-of select="$iface"/>
1765 <xsl:text>_GetLocation(p, aLocation) ((p)->lpVtbl->GetLocation(p, aLocation))&#x0A;</xsl:text>
1766 <xsl:text>#define </xsl:text>
1767 <xsl:value-of select="$iface"/>
1768 <xsl:text>_get_Inner(p, aInner) ((p)->lpVtbl->GetInner(p, aInner))&#x0A;</xsl:text>
1769 <xsl:text>#define </xsl:text>
1770 <xsl:value-of select="$iface"/>
1771 <xsl:text>_GetInner(p, aInner) ((p)->lpVtbl->GetInner(p, aInner))&#x0A;</xsl:text>
1772 <xsl:text>#define </xsl:text>
1773 <xsl:value-of select="$iface"/>
1774 <xsl:text>_get_Data(p, aData) ((p)->lpVtbl->GetData(p, aData))&#x0A;</xsl:text>
1775 <xsl:text>#define </xsl:text>
1776 <xsl:value-of select="$iface"/>
1777 <xsl:text>_GetData(p, aData) ((p)->lpVtbl->GetData(p, aData))&#x0A;</xsl:text>
1778 <xsl:text>#define </xsl:text>
1779 <xsl:value-of select="$iface"/>
1780 <xsl:text>_ToString(p, retval) ((p)->lpVtbl->ToString(p, retval))&#x0A;</xsl:text>
1781 </xsl:when>
1782 <xsl:otherwise>
1783 <xsl:apply-templates select="key('G_keyInterfacesByName', $extends)" mode="cobjmacro">
1784 <xsl:with-param name="iface" select="$iface"/>
1785 </xsl:apply-templates>
1786 </xsl:otherwise>
1787 </xsl:choose>
1788 <!-- attributes (properties) -->
1789 <xsl:apply-templates select="attribute | if/attribute" mode="cobjmacro">
1790 <xsl:with-param name="iface" select="$iface"/>
1791 </xsl:apply-templates>
1792 <!-- methods -->
1793 <xsl:apply-templates select="method | if/method" mode="cobjmacro">
1794 <xsl:with-param name="iface" select="$iface"/>
1795 </xsl:apply-templates>
1796</xsl:template>
1797
1798
1799<!--
1800 * emit flat vtable, compatible with COM
1801-->
1802<xsl:template match="interface" mode="vtab_flat">
1803 <xsl:param name="iface"/>
1804
1805 <xsl:variable name="name" select="@name"/>
1806 <xsl:variable name="extends" select="@extends"/>
1807 <xsl:choose>
1808 <xsl:when test="$extends='$unknown'">
1809 <xsl:text> nsresult (*QueryInterface)(</xsl:text>
1810 <xsl:value-of select="$iface"/>
1811 <xsl:text> *pThis, const nsID *iid, void **resultp);&#x0A;</xsl:text>
1812 <xsl:text> nsrefcnt (*AddRef)(</xsl:text>
1813 <xsl:value-of select="$iface"/>
1814 <xsl:text> *pThis);&#x0A;</xsl:text>
1815 <xsl:text> nsrefcnt (*Release)(</xsl:text>
1816 <xsl:value-of select="$iface"/>
1817 <xsl:text> *pThis);&#x0A;</xsl:text>
1818 </xsl:when>
1819 <xsl:when test="$extends='$errorinfo'">
1820 <xsl:text> nsresult (*QueryInterface)(</xsl:text>
1821 <xsl:value-of select="$iface"/>
1822 <xsl:text> *pThis, const nsID *iid, void **resultp);&#x0A;</xsl:text>
1823 <xsl:text> nsrefcnt (*AddRef)(</xsl:text>
1824 <xsl:value-of select="$iface"/>
1825 <xsl:text> *pThis);&#x0A;</xsl:text>
1826 <xsl:text> nsrefcnt (*Release)(</xsl:text>
1827 <xsl:value-of select="$iface"/>
1828 <xsl:text> *pThis);&#x0A;</xsl:text>
1829 <xsl:text> nsresult (*GetMessage)(</xsl:text>
1830 <xsl:value-of select="$iface"/>
1831 <xsl:text> *pThis, PRUnichar * *aMessage);&#x0A;</xsl:text>
1832 <xsl:text> nsresult (*GetResult)(</xsl:text>
1833 <xsl:value-of select="$iface"/>
1834 <xsl:text> *pThis, nsresult *aResult);&#x0A;</xsl:text>
1835 <xsl:text> nsresult (*GetName)(</xsl:text>
1836 <xsl:value-of select="$iface"/>
1837 <xsl:text>*pThis, PRUnichar * *aName);&#x0A;</xsl:text>
1838 <xsl:text> nsresult (*GetFilename)(</xsl:text>
1839 <xsl:value-of select="$iface"/>
1840 <xsl:text> *pThis, PRUnichar * *aFilename);&#x0A;</xsl:text>
1841 <xsl:text> nsresult (*GetLineNumber)(</xsl:text>
1842 <xsl:value-of select="$iface"/>
1843 <xsl:text> *pThis, PRUint32 *aLineNumber);&#x0A;</xsl:text>
1844 <xsl:text> nsresult (*GetColumnNumber)(</xsl:text>
1845 <xsl:value-of select="$iface"/>
1846 <xsl:text> *pThis, PRUint32 *aColumnNumber);&#x0A;</xsl:text>
1847 <xsl:text> nsresult (*GetLocation)(</xsl:text>
1848 <xsl:value-of select="$iface"/>
1849 <xsl:text> *pThis, nsIStackFrame * *aLocation);&#x0A;</xsl:text>
1850 <xsl:text> nsresult (*GetInner)(</xsl:text>
1851 <xsl:value-of select="$iface"/>
1852 <xsl:text> *pThis, nsIException * *aInner);&#x0A;</xsl:text>
1853 <xsl:text> nsresult (*GetData)(</xsl:text>
1854 <xsl:value-of select="$iface"/>
1855 <xsl:text> *pThis, nsISupports * *aData);&#x0A;</xsl:text>
1856 <xsl:text> nsresult (*ToString)(</xsl:text>
1857 <xsl:value-of select="$iface"/>
1858 <xsl:text> *pThis, PRUnichar **_retval);&#x0A;</xsl:text>
1859 </xsl:when>
1860 <xsl:otherwise>
1861 <xsl:apply-templates select="key('G_keyInterfacesByName', $extends)" mode="vtab_flat">
1862 <xsl:with-param name="iface" select="$iface"/>
1863 </xsl:apply-templates>
1864 </xsl:otherwise>
1865 </xsl:choose>
1866 <!-- attributes (properties) -->
1867 <xsl:apply-templates select="attribute | if/attribute">
1868 <xsl:with-param name="iface" select="$iface"/>
1869 </xsl:apply-templates>
1870 <xsl:variable name="reservedAttributes" select="@reservedAttributes"/>
1871 <xsl:if test="$reservedAttributes > 0">
1872 <!-- tricky way to do a "for" loop without recursion -->
1873 <xsl:for-each select="(//*)[position() &lt;= $reservedAttributes]">
1874 <xsl:text> nsresult (*GetInternalAndReservedAttribute</xsl:text>
1875 <xsl:value-of select="concat(position(), $name)"/>
1876 <xsl:text>)(</xsl:text>
1877 <xsl:value-of select="$iface"/>
1878 <xsl:text> *pThis, PRUint32 *reserved);&#x0A;&#x0A;</xsl:text>
1879 </xsl:for-each>
1880 </xsl:if>
1881 <!-- methods -->
1882 <xsl:apply-templates select="method | if/method">
1883 <xsl:with-param name="iface" select="$iface"/>
1884 </xsl:apply-templates>
1885 <xsl:variable name="reservedMethods" select="@reservedMethods"/>
1886 <xsl:if test="$reservedMethods > 0">
1887 <!-- tricky way to do a "for" loop without recursion -->
1888 <xsl:for-each select="(//*)[position() &lt;= $reservedMethods]">
1889 <xsl:text> nsresult (*InternalAndReservedMethod</xsl:text>
1890 <xsl:value-of select="concat(position(), $name)"/>
1891 <xsl:text>)(</xsl:text>
1892 <xsl:value-of select="$iface"/>
1893 <xsl:text> *pThis);&#x0A;&#x0A;</xsl:text>
1894 </xsl:for-each>
1895 </xsl:if>
1896</xsl:template>
1897
1898
1899<!--
1900 * interfaces
1901-->
1902<xsl:template match="interface">
1903 <xsl:if test="not(@internal='yes')">
1904 <xsl:variable name="name" select="@name"/>
1905 <xsl:text>/* Start of struct </xsl:text>
1906 <xsl:value-of select="$name"/>
1907 <xsl:text> declaration */&#x0A;</xsl:text>
1908 <xsl:text>#define </xsl:text>
1909 <xsl:call-template name="string-to-upper">
1910 <xsl:with-param name="str" select="$name"/>
1911 </xsl:call-template>
1912 <xsl:value-of select="concat('_IID_STR &quot;',@uuid,'&quot;')"/>
1913 <xsl:text>&#x0A;</xsl:text>
1914 <xsl:text>#define </xsl:text>
1915 <xsl:call-template name="string-to-upper">
1916 <xsl:with-param name="str" select="$name"/>
1917 </xsl:call-template>
1918 <xsl:text>_IID { \&#x0A;</xsl:text>
1919 <xsl:text> 0x</xsl:text><xsl:value-of select="substring(@uuid,1,8)"/>
1920 <xsl:text>, 0x</xsl:text><xsl:value-of select="substring(@uuid,10,4)"/>
1921 <xsl:text>, 0x</xsl:text><xsl:value-of select="substring(@uuid,15,4)"/>
1922 <xsl:text>, \&#x0A; </xsl:text>
1923 <xsl:text>{ 0x</xsl:text><xsl:value-of select="substring(@uuid,20,2)"/>
1924 <xsl:text>, 0x</xsl:text><xsl:value-of select="substring(@uuid,22,2)"/>
1925 <xsl:text>, 0x</xsl:text><xsl:value-of select="substring(@uuid,25,2)"/>
1926 <xsl:text>, 0x</xsl:text><xsl:value-of select="substring(@uuid,27,2)"/>
1927 <xsl:text>, 0x</xsl:text><xsl:value-of select="substring(@uuid,29,2)"/>
1928 <xsl:text>, 0x</xsl:text><xsl:value-of select="substring(@uuid,31,2)"/>
1929 <xsl:text>, 0x</xsl:text><xsl:value-of select="substring(@uuid,33,2)"/>
1930 <xsl:text>, 0x</xsl:text><xsl:value-of select="substring(@uuid,35,2)"/>
1931 <xsl:text> } \&#x0A;}&#x0A;</xsl:text>
1932 <xsl:text>/* COM compatibility */&#x0A;</xsl:text>
1933 <xsl:text>VBOX_EXTERN_CONST(nsIID, IID_</xsl:text>
1934 <xsl:value-of select="$name"/>
1935 <xsl:text>);&#x0A;</xsl:text>
1936 <xsl:text>#ifndef VBOX_WITH_GLUE&#x0A;</xsl:text>
1937 <xsl:text>struct </xsl:text>
1938 <xsl:value-of select="$name"/>
1939 <xsl:text>_vtbl&#x0A;{&#x0A;</xsl:text>
1940 <xsl:text> </xsl:text>
1941 <xsl:choose>
1942 <xsl:when test="@extends='$unknown'">struct nsISupports_vtbl nsisupports;</xsl:when>
1943 <xsl:when test="@extends='$errorinfo'">struct nsIException_vtbl nsiexception;</xsl:when>
1944 <xsl:otherwise>
1945 <xsl:text>struct </xsl:text>
1946 <xsl:value-of select="@extends"/>
1947 <xsl:text>_vtbl </xsl:text>
1948 <xsl:call-template name="string-to-lower">
1949 <xsl:with-param name="str" select="@extends"/>
1950 </xsl:call-template>
1951 <xsl:text>;</xsl:text>
1952 </xsl:otherwise>
1953 </xsl:choose>
1954 <xsl:text>&#x0A;&#x0A;</xsl:text>
1955 <!-- attributes (properties) -->
1956 <xsl:apply-templates select="attribute | if/attribute"/>
1957 <xsl:variable name="reservedAttributes" select="@reservedAttributes"/>
1958 <xsl:if test="$reservedAttributes > 0">
1959 <!-- tricky way to do a "for" loop without recursion -->
1960 <xsl:for-each select="(//*)[position() &lt;= $reservedAttributes]">
1961 <xsl:text> nsresult (*GetInternalAndReservedAttribute</xsl:text>
1962 <xsl:value-of select="concat(position(), $name)"/>
1963 <xsl:text>)(</xsl:text>
1964 <xsl:value-of select="$name"/>
1965 <xsl:text> *pThis, PRUint32 *reserved);&#x0A;&#x0A;</xsl:text>
1966 </xsl:for-each>
1967 </xsl:if>
1968 <!-- methods -->
1969 <xsl:apply-templates select="method | if/method"/>
1970 <xsl:variable name="reservedMethods" select="@reservedMethods"/>
1971 <xsl:if test="$reservedMethods > 0">
1972 <!-- tricky way to do a "for" loop without recursion -->
1973 <xsl:for-each select="(//*)[position() &lt;= $reservedMethods]">
1974 <xsl:text> nsresult (*InternalAndReservedMethod</xsl:text>
1975 <xsl:value-of select="concat(position(), $name)"/>
1976 <xsl:text>)(</xsl:text>
1977 <xsl:value-of select="$name"/>
1978 <xsl:text> *pThis);&#x0A;&#x0A;</xsl:text>
1979 </xsl:for-each>
1980 </xsl:if>
1981 <!-- -->
1982 <xsl:text>};&#x0A;</xsl:text>
1983 <xsl:text>#else /* VBOX_WITH_GLUE */&#x0A;</xsl:text>
1984 <xsl:text>struct </xsl:text>
1985 <xsl:value-of select="$name"/>
1986 <xsl:text>Vtbl&#x0A;{&#x0A;</xsl:text>
1987 <xsl:apply-templates select="." mode="vtab_flat">
1988 <xsl:with-param name="iface" select="$name"/>
1989 </xsl:apply-templates>
1990 <xsl:text>};&#x0A;</xsl:text>
1991 <xsl:apply-templates select="." mode="cobjmacro">
1992 <xsl:with-param name="iface" select="$name"/>
1993 </xsl:apply-templates>
1994 <!-- -->
1995 <xsl:text>#endif /* VBOX_WITH_GLUE */&#x0A;</xsl:text>
1996 <xsl:text>&#x0A;</xsl:text>
1997 <xsl:text>interface </xsl:text>
1998 <xsl:value-of select="$name"/>
1999 <xsl:text>&#x0A;{&#x0A;</xsl:text>
2000 <xsl:text>#ifndef VBOX_WITH_GLUE&#x0A;</xsl:text>
2001 <xsl:text> struct </xsl:text>
2002 <xsl:value-of select="$name"/>
2003 <xsl:text>_vtbl *vtbl;&#x0A;</xsl:text>
2004 <xsl:text>#else /* VBOX_WITH_GLUE */&#x0A;</xsl:text>
2005 <xsl:text> CONST_VTBL struct </xsl:text>
2006 <xsl:value-of select="$name"/>
2007 <xsl:text>Vtbl *lpVtbl;&#x0A;</xsl:text>
2008 <xsl:text>#endif /* VBOX_WITH_GLUE */&#x0A;</xsl:text>
2009 <xsl:text>};&#x0A;</xsl:text>
2010 <xsl:text>/* End of struct </xsl:text>
2011 <xsl:value-of select="$name"/>
2012 <xsl:text> declaration */&#x0A;&#x0A;</xsl:text>
2013 <xsl:call-template name="xsltprocNewlineOutputHack"/>
2014 </xsl:if>
2015</xsl:template>
2016
2017
2018<!--
2019 * attributes
2020-->
2021<xsl:template match="attribute">
2022 <xsl:param name="iface" select="ancestor::interface/@name"/>
2023
2024 <xsl:choose>
2025 <!-- safearray pseudo attribute -->
2026 <xsl:when test="@safearray='yes'">
2027 <!-- getter -->
2028 <xsl:text> nsresult (*Get</xsl:text>
2029 <xsl:call-template name="capitalize">
2030 <xsl:with-param name="str" select="@name"/>
2031 </xsl:call-template>
2032 <xsl:text>)(</xsl:text>
2033 <xsl:value-of select="$iface" />
2034 <xsl:text> *pThis, </xsl:text>
2035 <!-- array size -->
2036 <xsl:text>PRUint32 *</xsl:text>
2037 <xsl:value-of select="@name"/>
2038 <xsl:text>Size, </xsl:text>
2039 <!-- array pointer -->
2040 <xsl:apply-templates select="@type" mode="forwarder"/>
2041 <xsl:text> **</xsl:text>
2042 <xsl:value-of select="@name"/>
2043 <xsl:text>);&#x0A;</xsl:text>
2044 <!-- setter -->
2045 <xsl:if test="not(@readonly='yes')">
2046 <xsl:text> nsresult (*Set</xsl:text>
2047 <xsl:call-template name="capitalize">
2048 <xsl:with-param name="str" select="@name"/>
2049 </xsl:call-template>
2050 <xsl:text>)(</xsl:text>
2051 <xsl:value-of select="$iface" />
2052 <xsl:text> *pThis, </xsl:text>
2053 <!-- array size -->
2054 <xsl:text>PRUint32 </xsl:text>
2055 <xsl:value-of select="@name"/>
2056 <xsl:text>Size, </xsl:text>
2057 <!-- array pointer -->
2058 <xsl:apply-templates select="@type" mode="forwarder"/>
2059 <xsl:text> *</xsl:text>
2060 <xsl:value-of select="@name"/>
2061 <xsl:text>);&#x0A;</xsl:text>
2062 </xsl:if>
2063 </xsl:when>
2064 <!-- normal attribute -->
2065 <xsl:otherwise>
2066 <xsl:text> </xsl:text>
2067 <xsl:if test="@readonly='yes'">
2068 <xsl:text>nsresult (*Get</xsl:text>
2069 <xsl:call-template name="capitalize">
2070 <xsl:with-param name="str" select="@name"/>
2071 </xsl:call-template>
2072 <xsl:text>)(</xsl:text>
2073 <xsl:value-of select="$iface" />
2074 <xsl:text> *pThis, </xsl:text>
2075 <xsl:apply-templates select="@type" mode="forwarder"/>
2076 <xsl:text> *</xsl:text>
2077 <xsl:value-of select="@name"/>
2078 <xsl:text>);&#x0A;</xsl:text>
2079 </xsl:if>
2080 <xsl:choose>
2081 <xsl:when test="@readonly='yes'">
2082 </xsl:when>
2083 <xsl:otherwise>
2084 <xsl:text>nsresult (*Get</xsl:text>
2085 <xsl:call-template name="capitalize">
2086 <xsl:with-param name="str" select="@name"/>
2087 </xsl:call-template>
2088 <xsl:text>)(</xsl:text>
2089 <xsl:value-of select="$iface" />
2090 <xsl:text> *pThis, </xsl:text>
2091 <xsl:apply-templates select="@type" mode="forwarder"/>
2092 <xsl:text> *</xsl:text>
2093 <xsl:value-of select="@name"/>
2094 <xsl:text>);&#x0A; </xsl:text>
2095 <xsl:text>nsresult (*Set</xsl:text>
2096 <xsl:call-template name="capitalize">
2097 <xsl:with-param name="str" select="@name"/>
2098 </xsl:call-template>
2099 <xsl:text>)(</xsl:text>
2100 <xsl:value-of select="$iface" />
2101 <xsl:text> *pThis, </xsl:text>
2102 <xsl:apply-templates select="@type" mode="forwarder"/>
2103 <xsl:text> </xsl:text>
2104 <xsl:value-of select="@name"/>
2105 <xsl:text>);&#x0A;</xsl:text>
2106 </xsl:otherwise>
2107 </xsl:choose>
2108 </xsl:otherwise>
2109 </xsl:choose>
2110 <xsl:text>&#x0A;</xsl:text>
2111</xsl:template>
2112
2113<xsl:template match="attribute" mode="cobjmacro">
2114 <xsl:param name="iface"/>
2115
2116 <!-- getter (COM compatible) -->
2117 <xsl:text>#define </xsl:text>
2118 <xsl:value-of select="concat($iface, '_get_')"/>
2119 <xsl:call-template name="capitalize">
2120 <xsl:with-param name="str" select="@name"/>
2121 </xsl:call-template>
2122 <xsl:text>(p, a</xsl:text>
2123 <xsl:call-template name="capitalize">
2124 <xsl:with-param name="str" select="@name"/>
2125 </xsl:call-template>
2126 <xsl:text>) ((p)->lpVtbl->Get</xsl:text>
2127 <xsl:call-template name="capitalize">
2128 <xsl:with-param name="str" select="@name"/>
2129 </xsl:call-template>
2130 <xsl:text>(p, a</xsl:text>
2131 <xsl:call-template name="capitalize">
2132 <xsl:with-param name="str" select="@name"/>
2133 </xsl:call-template>
2134 <xsl:text>))&#x0A;</xsl:text>
2135
2136 <!-- getter (XPCOM compatible) -->
2137 <xsl:text>#define </xsl:text>
2138 <xsl:value-of select="concat($iface, '_Get')"/>
2139 <xsl:call-template name="capitalize">
2140 <xsl:with-param name="str" select="@name"/>
2141 </xsl:call-template>
2142 <xsl:text>(p, a</xsl:text>
2143 <xsl:call-template name="capitalize">
2144 <xsl:with-param name="str" select="@name"/>
2145 </xsl:call-template>
2146 <xsl:text>) ((p)->lpVtbl->Get</xsl:text>
2147 <xsl:call-template name="capitalize">
2148 <xsl:with-param name="str" select="@name"/>
2149 </xsl:call-template>
2150 <xsl:text>(p, a</xsl:text>
2151 <xsl:call-template name="capitalize">
2152 <xsl:with-param name="str" select="@name"/>
2153 </xsl:call-template>
2154 <xsl:text>))&#x0A;</xsl:text>
2155
2156 <xsl:if test="not(@readonly='yes')">
2157 <!-- setter (COM compatible) -->
2158 <xsl:text>#define </xsl:text>
2159 <xsl:value-of select="concat($iface, '_put_')"/>
2160 <xsl:call-template name="capitalize">
2161 <xsl:with-param name="str" select="@name"/>
2162 </xsl:call-template>
2163 <xsl:text>(p, a</xsl:text>
2164 <xsl:call-template name="capitalize">
2165 <xsl:with-param name="str" select="@name"/>
2166 </xsl:call-template>
2167 <xsl:text>) ((p)->lpVtbl->Set</xsl:text>
2168 <xsl:call-template name="capitalize">
2169 <xsl:with-param name="str" select="@name"/>
2170 </xsl:call-template>
2171 <xsl:text>(p, a</xsl:text>
2172 <xsl:call-template name="capitalize">
2173 <xsl:with-param name="str" select="@name"/>
2174 </xsl:call-template>
2175 <xsl:text>))&#x0A;</xsl:text>
2176
2177 <!-- setter (XPCOM compatible) -->
2178 <xsl:text>#define </xsl:text>
2179 <xsl:value-of select="concat($iface, '_Set')"/>
2180 <xsl:call-template name="capitalize">
2181 <xsl:with-param name="str" select="@name"/>
2182 </xsl:call-template>
2183 <xsl:text>(p, a</xsl:text>
2184 <xsl:call-template name="capitalize">
2185 <xsl:with-param name="str" select="@name"/>
2186 </xsl:call-template>
2187 <xsl:text>) ((p)->lpVtbl->Set</xsl:text>
2188 <xsl:call-template name="capitalize">
2189 <xsl:with-param name="str" select="@name"/>
2190 </xsl:call-template>
2191 <xsl:text>(p, a</xsl:text>
2192 <xsl:call-template name="capitalize">
2193 <xsl:with-param name="str" select="@name"/>
2194 </xsl:call-template>
2195 <xsl:text>))&#x0A;</xsl:text>
2196
2197 </xsl:if>
2198</xsl:template>
2199
2200<!--
2201 * methods
2202-->
2203<xsl:template match="method">
2204 <xsl:param name="iface" select="ancestor::interface/@name"/>
2205
2206 <xsl:if test="param/@mod='ptr'">
2207 <!-- methods using native types must be non-scriptable
2208 <xsl:text> [noscript]&#x0A;</xsl:text>-->
2209 </xsl:if>
2210 <xsl:text> nsresult (*</xsl:text>
2211 <xsl:call-template name="capitalize">
2212 <xsl:with-param name="str" select="@name"/>
2213 </xsl:call-template>
2214 <xsl:if test="param">
2215 <xsl:text>)(&#x0A;</xsl:text>
2216 <xsl:text> </xsl:text>
2217 <xsl:value-of select="$iface" />
2218 <xsl:text> *pThis,&#x0A;</xsl:text>
2219 <xsl:for-each select="param [position() != last()]">
2220 <xsl:text> </xsl:text>
2221 <xsl:apply-templates select="."/>
2222 <xsl:text>,&#x0A;</xsl:text>
2223 </xsl:for-each>
2224 <xsl:text> </xsl:text>
2225 <xsl:apply-templates select="param [last()]"/>
2226 <xsl:text>&#x0A; );&#x0A;</xsl:text>
2227 </xsl:if>
2228 <xsl:if test="not(param)">
2229 <xsl:text>)(</xsl:text>
2230 <xsl:value-of select="$iface" />
2231 <xsl:text> *pThis );&#x0A;</xsl:text>
2232 </xsl:if>
2233 <xsl:text>&#x0A;</xsl:text>
2234</xsl:template>
2235
2236<xsl:template match="method" mode="cobjmacro">
2237 <xsl:param name="iface"/>
2238
2239 <xsl:text>#define </xsl:text>
2240 <xsl:value-of select="concat($iface, '_')"/>
2241 <xsl:call-template name="capitalize">
2242 <xsl:with-param name="str" select="@name"/>
2243 </xsl:call-template>
2244 <xsl:text>(p</xsl:text>
2245 <xsl:for-each select="param">
2246 <xsl:text>, a</xsl:text>
2247 <xsl:call-template name="capitalize">
2248 <xsl:with-param name="str" select="@name"/>
2249 </xsl:call-template>
2250 </xsl:for-each>
2251 <xsl:text>) ((p)->lpVtbl-></xsl:text>
2252 <xsl:call-template name="capitalize">
2253 <xsl:with-param name="str" select="@name"/>
2254 </xsl:call-template>
2255 <xsl:text>(p</xsl:text>
2256 <xsl:for-each select="param">
2257 <xsl:text>, a</xsl:text>
2258 <xsl:call-template name="capitalize">
2259 <xsl:with-param name="str" select="@name"/>
2260 </xsl:call-template>
2261 </xsl:for-each>
2262 <xsl:text>))&#x0A;</xsl:text>
2263</xsl:template>
2264
2265
2266<!--
2267 * modules
2268-->
2269<xsl:template match="module">
2270 <xsl:apply-templates select="class"/>
2271</xsl:template>
2272
2273
2274<!--
2275 * co-classes
2276-->
2277<xsl:template match="module/class">
2278 <!-- class and contract id -->
2279 <xsl:text>&#x0A;</xsl:text>
2280 <xsl:text>#define NS_</xsl:text>
2281 <xsl:call-template name="string-to-upper">
2282 <xsl:with-param name="str" select="@name"/>
2283 </xsl:call-template>
2284 <xsl:text>_CID { \&#x0A;</xsl:text>
2285 <xsl:text> 0x</xsl:text><xsl:value-of select="substring(@uuid,1,8)"/>
2286 <xsl:text>, 0x</xsl:text><xsl:value-of select="substring(@uuid,10,4)"/>
2287 <xsl:text>, 0x</xsl:text><xsl:value-of select="substring(@uuid,15,4)"/>
2288 <xsl:text>, \&#x0A; </xsl:text>
2289 <xsl:text>{ 0x</xsl:text><xsl:value-of select="substring(@uuid,20,2)"/>
2290 <xsl:text>, 0x</xsl:text><xsl:value-of select="substring(@uuid,22,2)"/>
2291 <xsl:text>, 0x</xsl:text><xsl:value-of select="substring(@uuid,25,2)"/>
2292 <xsl:text>, 0x</xsl:text><xsl:value-of select="substring(@uuid,27,2)"/>
2293 <xsl:text>, 0x</xsl:text><xsl:value-of select="substring(@uuid,29,2)"/>
2294 <xsl:text>, 0x</xsl:text><xsl:value-of select="substring(@uuid,31,2)"/>
2295 <xsl:text>, 0x</xsl:text><xsl:value-of select="substring(@uuid,33,2)"/>
2296 <xsl:text>, 0x</xsl:text><xsl:value-of select="substring(@uuid,35,2)"/>
2297 <xsl:text> } \&#x0A;}&#x0A;</xsl:text>
2298 <xsl:text>#define NS_</xsl:text>
2299 <xsl:call-template name="string-to-upper">
2300 <xsl:with-param name="str" select="@name"/>
2301 </xsl:call-template>
2302 <!-- Contract ID -->
2303 <xsl:text>_CONTRACTID &quot;@</xsl:text>
2304 <xsl:value-of select="@namespace"/>
2305 <xsl:text>/</xsl:text>
2306 <xsl:value-of select="@name"/>
2307 <xsl:text>;1&quot;&#x0A;</xsl:text>
2308 <!-- CLSID_xxx declarations for XPCOM, for compatibility with Win32 -->
2309 <xsl:text>/* COM compatibility */&#x0A;</xsl:text>
2310 <xsl:text>VBOX_EXTERN_CONST(nsCID, CLSID_</xsl:text>
2311 <xsl:value-of select="@name"/>
2312 <xsl:text>);&#x0A;</xsl:text>
2313 <xsl:text>&#x0A;&#x0A;</xsl:text>
2314</xsl:template>
2315
2316
2317<!--
2318 * enums
2319-->
2320<xsl:template match="enum">
2321 <xsl:text>/* Start of enum </xsl:text>
2322 <xsl:value-of select="@name"/>
2323 <xsl:text> declaration */&#x0A;</xsl:text>
2324 <xsl:text>#define </xsl:text>
2325 <xsl:call-template name="string-to-upper">
2326 <xsl:with-param name="str" select="@name"/>
2327 </xsl:call-template>
2328 <xsl:value-of select="concat('_IID_STR &quot;',@uuid,'&quot;')"/>
2329 <xsl:text>&#x0A;</xsl:text>
2330 <xsl:text>#define </xsl:text>
2331 <xsl:call-template name="string-to-upper">
2332 <xsl:with-param name="str" select="@name"/>
2333 </xsl:call-template>
2334 <xsl:text>_IID { \&#x0A;</xsl:text>
2335 <xsl:text> 0x</xsl:text><xsl:value-of select="substring(@uuid,1,8)"/>
2336 <xsl:text>, 0x</xsl:text><xsl:value-of select="substring(@uuid,10,4)"/>
2337 <xsl:text>, 0x</xsl:text><xsl:value-of select="substring(@uuid,15,4)"/>
2338 <xsl:text>, \&#x0A; </xsl:text>
2339 <xsl:text>{ 0x</xsl:text><xsl:value-of select="substring(@uuid,20,2)"/>
2340 <xsl:text>, 0x</xsl:text><xsl:value-of select="substring(@uuid,22,2)"/>
2341 <xsl:text>, 0x</xsl:text><xsl:value-of select="substring(@uuid,25,2)"/>
2342 <xsl:text>, 0x</xsl:text><xsl:value-of select="substring(@uuid,27,2)"/>
2343 <xsl:text>, 0x</xsl:text><xsl:value-of select="substring(@uuid,29,2)"/>
2344 <xsl:text>, 0x</xsl:text><xsl:value-of select="substring(@uuid,31,2)"/>
2345 <xsl:text>, 0x</xsl:text><xsl:value-of select="substring(@uuid,33,2)"/>
2346 <xsl:text>, 0x</xsl:text><xsl:value-of select="substring(@uuid,35,2)"/>
2347 <xsl:text> } \&#x0A;}&#x0A;</xsl:text>
2348 <xsl:text>typedef enum </xsl:text>
2349 <xsl:value-of select="@name"/>
2350 <xsl:text>&#x0A;{&#x0A;</xsl:text>
2351 <xsl:variable name="this" select="."/>
2352 <xsl:for-each select="const">
2353 <xsl:text> </xsl:text>
2354 <xsl:value-of select="$this/@name"/>
2355 <xsl:text>_</xsl:text>
2356 <xsl:value-of select="@name"/> = <xsl:value-of select="@value"/>
2357 <xsl:if test="position() != last()">
2358 <xsl:text>,</xsl:text>
2359 </xsl:if>
2360 <xsl:text>&#x0A;</xsl:text>
2361 </xsl:for-each>
2362 <xsl:text>} </xsl:text>
2363 <xsl:value-of select="@name"/>
2364 <xsl:text>;&#x0A;</xsl:text>
2365 <xsl:text>/* End of enum </xsl:text>
2366 <xsl:value-of select="@name"/>
2367 <xsl:text> declaration */
2368#define </xsl:text>
2369 <xsl:value-of select="concat(@name, '_T PRUint32&#x0A;&#x0A;&#x0A;')"/>
2370</xsl:template>
2371
2372
2373<!--
2374 * method parameters
2375-->
2376<xsl:template match="method/param">
2377 <xsl:choose>
2378 <!-- safearray parameters -->
2379 <xsl:when test="@safearray='yes'">
2380 <!-- array size -->
2381 <xsl:choose>
2382 <xsl:when test="@dir='in'">
2383 <xsl:text>PRUint32 </xsl:text>
2384 <xsl:value-of select="@name"/>
2385 <xsl:text>Size,&#x0A;</xsl:text>
2386 </xsl:when>
2387 <xsl:when test="@dir='out'">
2388 <xsl:text>PRUint32 *</xsl:text>
2389 <xsl:value-of select="@name"/>
2390 <xsl:text>Size,&#x0A;</xsl:text>
2391 </xsl:when>
2392 <xsl:when test="@dir='return'">
2393 <xsl:text>PRUint32 *</xsl:text>
2394 <xsl:value-of select="@name"/>
2395 <xsl:text>Size,&#x0A;</xsl:text>
2396 </xsl:when>
2397 <xsl:otherwise>
2398 <xsl:text>PRUint32 </xsl:text>
2399 <xsl:value-of select="@name"/>
2400 <xsl:text>Size,&#x0A;</xsl:text>
2401 </xsl:otherwise>
2402 </xsl:choose>
2403 <!-- array pointer -->
2404 <xsl:text> </xsl:text>
2405 <xsl:choose>
2406 <xsl:when test="@dir='in'">
2407 <xsl:apply-templates select="@type" mode="forwarder"/>
2408 <xsl:text>*</xsl:text>
2409 </xsl:when>
2410 <xsl:when test="@dir='out'">
2411 <xsl:apply-templates select="@type" mode="forwarder"/>
2412 <xsl:text>**</xsl:text>
2413 </xsl:when>
2414 <xsl:when test="@dir='return'">
2415 <xsl:apply-templates select="@type" mode="forwarder"/>
2416 <xsl:text>**</xsl:text>
2417 </xsl:when>
2418 <xsl:otherwise>
2419 <xsl:apply-templates select="@type" mode="forwarder"/>
2420 <xsl:text>*</xsl:text>
2421 </xsl:otherwise>
2422 </xsl:choose>
2423 <xsl:text> </xsl:text>
2424 <xsl:value-of select="@name"/>
2425 </xsl:when>
2426 <!-- normal and array parameters -->
2427 <xsl:otherwise>
2428 <xsl:choose>
2429 <xsl:when test="@dir='in'">
2430 <xsl:apply-templates select="@type" mode="forwarder"/>
2431 <xsl:text></xsl:text>
2432 </xsl:when>
2433 <xsl:when test="@dir='out'">
2434 <xsl:apply-templates select="@type" mode="forwarder"/>
2435 <xsl:text> *</xsl:text>
2436 </xsl:when>
2437 <xsl:when test="@dir='return'">
2438 <xsl:apply-templates select="@type" mode="forwarder"/>
2439 <xsl:text> *</xsl:text>
2440 </xsl:when>
2441 <xsl:otherwise>
2442 <xsl:apply-templates select="@type" mode="forwarder"/>
2443 <xsl:text></xsl:text>
2444 </xsl:otherwise>
2445 </xsl:choose>
2446 <xsl:text> </xsl:text>
2447 <xsl:value-of select="@name"/>
2448 </xsl:otherwise>
2449 </xsl:choose>
2450</xsl:template>
2451
2452<xsl:template match="method/param" mode="forwarder">
2453 <xsl:if test="@safearray='yes'">
2454 <xsl:text>PRUint32</xsl:text>
2455 <xsl:if test="@dir='out' or @dir='return'">
2456 <xsl:text> *</xsl:text>
2457 </xsl:if>
2458 <xsl:text> a</xsl:text>
2459 <xsl:call-template name="capitalize">
2460 <xsl:with-param name="str" select="@name"/>
2461 </xsl:call-template>
2462 <xsl:text>Size, </xsl:text>
2463 </xsl:if>
2464 <xsl:apply-templates select="@type" mode="forwarder"/>
2465 <xsl:if test="@dir='out' or @dir='return'">
2466 <xsl:text> *</xsl:text>
2467 </xsl:if>
2468 <xsl:if test="@safearray='yes'">
2469 <xsl:text> *</xsl:text>
2470 </xsl:if>
2471 <xsl:text> a</xsl:text>
2472 <xsl:call-template name="capitalize">
2473 <xsl:with-param name="str" select="@name"/>
2474 </xsl:call-template>
2475</xsl:template>
2476
2477
2478<!--
2479 * attribute/parameter type conversion
2480-->
2481<xsl:template match="attribute/@type | param/@type">
2482 <xsl:variable name="self_target" select="current()/ancestor::if/@target"/>
2483
2484 <xsl:choose>
2485 <!-- modifiers -->
2486 <xsl:when test="name(current())='type' and ../@mod">
2487 <xsl:choose>
2488 <xsl:when test="../@mod='ptr'">
2489 <xsl:choose>
2490 <!-- standard types -->
2491 <!--xsl:when test=".='result'">??</xsl:when-->
2492 <xsl:when test=".='boolean'">booleanPtr</xsl:when>
2493 <xsl:when test=".='octet'">octetPtr</xsl:when>
2494 <xsl:when test=".='short'">shortPtr</xsl:when>
2495 <xsl:when test=".='unsigned short'">ushortPtr</xsl:when>
2496 <xsl:when test=".='long'">longPtr</xsl:when>
2497 <xsl:when test=".='long long'">llongPtr</xsl:when>
2498 <xsl:when test=".='unsigned long'">ulongPtr</xsl:when>
2499 <xsl:when test=".='unsigned long long'">ullongPtr</xsl:when>
2500 <xsl:otherwise>
2501 <xsl:message terminate="yes">
2502 <xsl:value-of select="concat(../../../@name,'::',../../@name,'::',../@name,': ')"/>
2503 <xsl:text>attribute 'mod=</xsl:text>
2504 <xsl:value-of select="concat('&quot;',../@mod,'&quot;')"/>
2505 <xsl:text>' cannot be used with type </xsl:text>
2506 <xsl:value-of select="concat('&quot;',current(),'&quot;!')"/>
2507 </xsl:message>
2508 </xsl:otherwise>
2509 </xsl:choose>
2510 </xsl:when>
2511 <xsl:when test="../@mod='string'">
2512 <xsl:choose>
2513 <!-- standard types -->
2514 <!--xsl:when test=".='result'">??</xsl:when-->
2515 <xsl:when test=".='uuid'">wstring</xsl:when>
2516 <xsl:otherwise>
2517 <xsl:message terminate="yes">
2518 <xsl:value-of select="concat(../../../@name,'::',../../@name,'::',../@name,': ')"/>
2519 <xsl:text>attribute 'mod=</xsl:text>
2520 <xsl:value-of select="concat('&quot;',../@mod,'&quot;')"/>
2521 <xsl:text>' cannot be used with type </xsl:text>
2522 <xsl:value-of select="concat('&quot;',current(),'&quot;!')"/>
2523 </xsl:message>
2524 </xsl:otherwise>
2525 </xsl:choose>
2526 </xsl:when>
2527 <xsl:otherwise>
2528 <xsl:message terminate="yes">
2529 <xsl:value-of select="concat(../../../@name,'::',../../@name,'::',../@name,': ')"/>
2530 <xsl:value-of select="concat('value &quot;',../@mod,'&quot; ')"/>
2531 <xsl:text>of attribute 'mod' is invalid!</xsl:text>
2532 </xsl:message>
2533 </xsl:otherwise>
2534 </xsl:choose>
2535 </xsl:when>
2536 <!-- no modifiers -->
2537 <xsl:otherwise>
2538 <xsl:choose>
2539 <!-- standard types -->
2540 <xsl:when test=".='result'">nsresult</xsl:when>
2541 <xsl:when test=".='boolean'">boolean</xsl:when>
2542 <xsl:when test=".='octet'">octet</xsl:when>
2543 <xsl:when test=".='short'">short</xsl:when>
2544 <xsl:when test=".='unsigned short'">unsigned short</xsl:when>
2545 <xsl:when test=".='long'">long</xsl:when>
2546 <xsl:when test=".='long long'">long long</xsl:when>
2547 <xsl:when test=".='unsigned long'">unsigned long</xsl:when>
2548 <xsl:when test=".='unsigned long long'">unsigned long long</xsl:when>
2549 <xsl:when test=".='char'">char</xsl:when>
2550 <xsl:when test=".='wchar'">wchar</xsl:when>
2551 <xsl:when test=".='string'">string</xsl:when>
2552 <xsl:when test=".='wstring'">wstring</xsl:when>
2553 <!-- UUID type -->
2554 <xsl:when test=".='uuid'">
2555 <xsl:choose>
2556 <xsl:when test="name(..)='attribute'">
2557 <xsl:choose>
2558 <xsl:when test="../@readonly='yes'">
2559 <xsl:text>nsIDPtr</xsl:text>
2560 </xsl:when>
2561 <xsl:otherwise>
2562 <xsl:message terminate="yes">
2563 <xsl:value-of select="../@name"/>
2564 <xsl:text>: Non-readonly uuid attributes are not supported!</xsl:text>
2565 </xsl:message>
2566 </xsl:otherwise>
2567 </xsl:choose>
2568 </xsl:when>
2569 <xsl:when test="name(..)='param'">
2570 <xsl:choose>
2571 <xsl:when test="../@dir='in' and not(../@safearray='yes')">
2572 <xsl:text>nsIDRef</xsl:text>
2573 </xsl:when>
2574 <xsl:otherwise>
2575 <xsl:text>nsIDPtr</xsl:text>
2576 </xsl:otherwise>
2577 </xsl:choose>
2578 </xsl:when>
2579 </xsl:choose>
2580 </xsl:when>
2581 <!-- system interface types -->
2582 <xsl:when test=".='$unknown'">nsISupports</xsl:when>
2583 <xsl:otherwise>
2584 <xsl:choose>
2585 <!-- enum types -->
2586 <xsl:when test="
2587 (ancestor::library/application/enum[@name=current()]) or
2588 (ancestor::library/application/if[@target=$self_target]/enum[@name=current()])
2589 ">
2590 <xsl:text>PRUint32</xsl:text>
2591 </xsl:when>
2592 <!-- custom interface types -->
2593 <xsl:when test="
2594 (ancestor::library/application/interface[@name=current()]) or
2595 (ancestor::library/application/if[@target=$self_target]/interface[@name=current()])
2596 ">
2597 <xsl:value-of select="."/>
2598 </xsl:when>
2599 <!-- other types -->
2600 <xsl:otherwise>
2601 <xsl:message terminate="yes">
2602 <xsl:text>Unknown parameter type: </xsl:text>
2603 <xsl:value-of select="."/>
2604 </xsl:message>
2605 </xsl:otherwise>
2606 </xsl:choose>
2607 </xsl:otherwise>
2608 </xsl:choose>
2609 </xsl:otherwise>
2610 </xsl:choose>
2611</xsl:template>
2612
2613<xsl:template match="attribute/@type | param/@type" mode="forwarder">
2614
2615 <xsl:variable name="self_target" select="current()/ancestor::if/@target"/>
2616
2617 <xsl:choose>
2618 <!-- modifiers -->
2619 <xsl:when test="name(current())='type' and ../@mod">
2620 <xsl:choose>
2621 <xsl:when test="../@mod='ptr'">
2622 <xsl:choose>
2623 <!-- standard types -->
2624 <!--xsl:when test=".='result'">??</xsl:when-->
2625 <xsl:when test=".='boolean'">PRBool *</xsl:when>
2626 <xsl:when test=".='octet'">PRUint8 *</xsl:when>
2627 <xsl:when test=".='short'">PRInt16 *</xsl:when>
2628 <xsl:when test=".='unsigned short'">PRUint16 *</xsl:when>
2629 <xsl:when test=".='long'">PRInt32 *</xsl:when>
2630 <xsl:when test=".='long long'">PRInt64 *</xsl:when>
2631 <xsl:when test=".='unsigned long'">PRUint32 *</xsl:when>
2632 <xsl:when test=".='unsigned long long'">PRUint64 *</xsl:when>
2633 <xsl:otherwise>
2634 <xsl:message terminate="yes">
2635 <xsl:value-of select="concat(../../../@name,'::',../../@name,'::',../@name,': ')"/>
2636 <xsl:text>attribute 'mod=</xsl:text>
2637 <xsl:value-of select="concat('&quot;',../@mod,'&quot;')"/>
2638 <xsl:text>' cannot be used with type </xsl:text>
2639 <xsl:value-of select="concat('&quot;',current(),'&quot;!')"/>
2640 </xsl:message>
2641 </xsl:otherwise>
2642 </xsl:choose>
2643 </xsl:when>
2644 <xsl:when test="../@mod='string'">
2645 <xsl:choose>
2646 <!-- standard types -->
2647 <!--xsl:when test=".='result'">??</xsl:when-->
2648 <xsl:when test=".='uuid'">PRUnichar *</xsl:when>
2649 <xsl:otherwise>
2650 <xsl:message terminate="yes">
2651 <xsl:value-of select="concat(../../../@name,'::',../../@name,'::',../@name,': ')"/>
2652 <xsl:text>attribute 'mod=</xsl:text>
2653 <xsl:value-of select="concat('&quot;',../@mod,'&quot;')"/>
2654 <xsl:text>' cannot be used with type </xsl:text>
2655 <xsl:value-of select="concat('&quot;',current(),'&quot;!')"/>
2656 </xsl:message>
2657 </xsl:otherwise>
2658 </xsl:choose>
2659 </xsl:when>
2660 </xsl:choose>
2661 </xsl:when>
2662 <!-- no modifiers -->
2663 <xsl:otherwise>
2664 <xsl:choose>
2665 <!-- standard types -->
2666 <xsl:when test=".='result'">nsresult</xsl:when>
2667 <xsl:when test=".='boolean'">PRBool</xsl:when>
2668 <xsl:when test=".='octet'">PRUint8</xsl:when>
2669 <xsl:when test=".='short'">PRInt16</xsl:when>
2670 <xsl:when test=".='unsigned short'">PRUint16</xsl:when>
2671 <xsl:when test=".='long'">PRInt32</xsl:when>
2672 <xsl:when test=".='long long'">PRInt64</xsl:when>
2673 <xsl:when test=".='unsigned long'">PRUint32</xsl:when>
2674 <xsl:when test=".='unsigned long long'">PRUint64</xsl:when>
2675 <xsl:when test=".='char'">char</xsl:when>
2676 <xsl:when test=".='wchar'">PRUnichar</xsl:when>
2677 <!-- string types -->
2678 <xsl:when test=".='string'">char *</xsl:when>
2679 <xsl:when test=".='wstring'">PRUnichar *</xsl:when>
2680 <!-- UUID type -->
2681 <xsl:when test=".='uuid'">
2682 <xsl:choose>
2683 <xsl:when test="name(..)='attribute'">
2684 <xsl:choose>
2685 <xsl:when test="../@readonly='yes'">
2686 <xsl:text>nsID *</xsl:text>
2687 </xsl:when>
2688 </xsl:choose>
2689 </xsl:when>
2690 <xsl:when test="name(..)='param'">
2691 <xsl:choose>
2692 <xsl:when test="../@dir='in' and not(../@safearray='yes')">
2693 <xsl:text>const nsID *</xsl:text>
2694 </xsl:when>
2695 <xsl:otherwise>
2696 <xsl:text>nsID *</xsl:text>
2697 </xsl:otherwise>
2698 </xsl:choose>
2699 </xsl:when>
2700 </xsl:choose>
2701 </xsl:when>
2702 <!-- system interface types -->
2703 <xsl:when test=".='$unknown'">nsISupports *</xsl:when>
2704 <xsl:otherwise>
2705 <xsl:choose>
2706 <!-- enum types -->
2707 <xsl:when test="
2708 (ancestor::library/application/enum[@name=current()]) or
2709 (ancestor::library/application/if[@target=$self_target]/enum[@name=current()])
2710 ">
2711 <xsl:text>PRUint32</xsl:text>
2712 </xsl:when>
2713 <!-- custom interface types -->
2714 <xsl:when test="
2715 (ancestor::library/application/interface[@name=current()]) or
2716 (ancestor::library/application/if[@target=$self_target]/interface[@name=current()])
2717 ">
2718 <xsl:value-of select="."/>
2719 <xsl:text> *</xsl:text>
2720 </xsl:when>
2721 <!-- other types -->
2722 </xsl:choose>
2723 </xsl:otherwise>
2724 </xsl:choose>
2725 </xsl:otherwise>
2726 </xsl:choose>
2727</xsl:template>
2728
2729
2730<xsl:template match="application[@uuid='ec0e78e8-fa43-43e8-ac0a-02c784c4a4fa']//module/class" />
2731
2732<xsl:template match="application[@uuid='ec0e78e8-fa43-43e8-ac0a-02c784c4a4fa']/if//interface
2733| application[@uuid='ec0e78e8-fa43-43e8-ac0a-02c784c4a4fa']//interface" />
2734
2735<xsl:template match="application[@uuid='ec0e78e8-fa43-43e8-ac0a-02c784c4a4fa']//interface" mode="forward" />
2736
2737
2738</xsl:stylesheet>
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette