1 module org.eclipse.swt.internal.mozilla.prlink;
2 
3 import java.lang.all;
4 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
5 /* ***** BEGIN LICENSE BLOCK *****
6  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
7  *
8  * The contents of this file are subject to the Mozilla Public License Version
9  * 1.1 (the "License"); you may not use this file except in compliance with
10  * the License. You may obtain a copy of the License at
11  * http://www.mozilla.org/MPL/
12  *
13  * Software distributed under the License is distributed on an "AS IS" basis,
14  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
15  * for the specific language governing rights and limitations under the
16  * License.
17  *
18  * The Original Code is the Netscape Portable Runtime (NSPR).
19  *
20  * The Initial Developer of the Original Code is
21  * Netscape Communications Corporation.
22  * Portions created by the Initial Developer are Copyright (C) 1998-2000
23  * the Initial Developer. All Rights Reserved.
24  *
25  * Contributor(s):
26  *
27  * Alternatively, the contents of this file may be used under the terms of
28  * either the GNU General Public License Version 2 or later (the "GPL"), or
29  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
30  * in which case the provisions of the GPL or the LGPL are applicable instead
31  * of those above. If you wish to allow use of your version of this file only
32  * under the terms of either the GPL or the LGPL, and not to allow others to
33  * use your version of this file under the terms of the MPL, indicate your
34  * decision by deleting the provisions above and replace them with the notice
35  * and other provisions required by the GPL or the LGPL. If you do not delete
36  * the provisions above, a recipient may use your version of this file under
37  * the terms of any one of the MPL, the GPL or the LGPL.
38  *
39  * ***** END LICENSE BLOCK ***** */
40 
41 import org.eclipse.swt.internal.mozilla.Common;
42 
43 struct PRStaticLinkTable
44 {
45     char *name;
46     void  function()fp;
47 }
48 
49 extern (System):
50 
51 PRStatus  PR_SetLibraryPath(char *path);
52 
53 char *  PR_GetLibraryPath();
54 char *  PR_GetLibraryName(char *dir, char *lib);
55 void    PR_FreeLibraryName(char *mem);
56 
57 alias void PRLibrary;
58 
59 PRLibrary * PR_LoadLibrary(char *name);
60 
61 enum PRLibSpecType
62 {
63     PR_LibSpec_Pathname,
64     PR_LibSpec_MacNamedFragment,
65     PR_LibSpec_MacIndexedFragment,
66 }
67 
68 alias void FSSpec;
69 
70 struct _N3
71 {
72     FSSpec *fsspec;
73     char *name;
74 }
75 
76 struct _N4
77 {
78     FSSpec *fsspec;
79     PRUint32 index;
80 }
81 
82 union _N2
83 {
84     char *pathname;
85     struct _N3
86     {
87         FSSpec *fsspec;
88         char *name;
89     }
90     _N3 mac_named_fragment;
91     struct _N4
92     {
93         FSSpec *fsspec;
94         PRUint32 index;
95     }
96     _N4 mac_indexed_fragment;
97 }
98 
99 struct PRLibSpec
100 {
101     int type;
102     union _N2
103     {
104         char *pathname;
105         struct _N3
106         {
107             FSSpec *fsspec;
108             char *name;
109         }
110         _N3 mac_named_fragment;
111         struct _N4
112         {
113             FSSpec *fsspec;
114             PRUint32 index;
115         }
116         _N4 mac_indexed_fragment;
117     }
118     _N2 value;
119 }
120 
121 const PR_LD_LAZY = 0x1;
122 const PR_LD_NOW = 0x2;
123 const PR_LD_GLOBAL = 0x4;
124 const PR_LD_LOCAL = 0x8;
125 
126 PRLibrary * PR_LoadLibraryWithFlags(PRLibSpec libSpec, PRIntn flags);
127 PRStatus    PR_UnloadLibrary(PRLibrary *lib);
128 void *      PR_FindSymbol(PRLibrary *lib, char *name);
129 
130 alias void  function()PRFuncPtr;
131 
132 PRFuncPtr   PR_FindFunctionSymbol(PRLibrary *lib, char *name);
133 void *      PR_FindSymbolAndLibrary(char *name, PRLibrary **lib);
134 PRFuncPtr   PR_FindFunctionSymbolAndLibrary(char *name, PRLibrary **lib);
135 PRLibrary * PR_LoadStaticLibrary(char *name, PRStaticLinkTable *table);
136 char *      PR_GetLibraryFilePathname(char *name, PRFuncPtr addr);