summaryrefslogtreecommitdiff
path: root/bindings/csharp/NativeMethods.cs
blob: 6a3c91103a1fb268122d8cdb5f6e980e6cef3af8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
// Copyright 2014  CrossWire Bible Society (http://www.crosswire.org)
//  	CrossWire Bible Society
//  	P. O. Box 2528
//  	Tempe, AZ  85280-2528
//  
//  This program is free software; you can redistribute it and/or modify it
//  under the terms of the GNU General Public License as published by the
//  Free Software Foundation version 2.
//  
//  This program is distributed in the hope that it will be useful, but
//  WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
//  General Public License for more details.
using System;
using System.Runtime.InteropServices;
using System.Collections.Generic;

namespace Sword
{
	public enum SearchType 
	{
		REGEX = 1,
		PHRASE = -1,
		MULTIWORD = -2,
		ENTRYATTR = -3,
		LUCENE = -4
	};
	
	[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
	public struct ModInfo 
	{
		public string Name;
		public string Description;
		public string Category;
		public string Language;
	};
	
	[StructLayout(LayoutKind.Sequential)]
	public struct SearchHit
	{
		IntPtr _modName;
		IntPtr _key;
		long Score;
		
		public bool IsNull()
		{
			return _key == IntPtr.Zero;
		}
		public string Key 
		{ 
			get 
			{
				if(_key == IntPtr.Zero)
				{
					return null;	
				}
				return Marshal.PtrToStringAnsi(_key); 
			} 
		}
		
		public string ModName 
		{ 
			get 
			{ 
				if(_modName == IntPtr.Zero)
				{
					return null;	
				}
				return Marshal.PtrToStringAnsi(_modName); 
			} 
		}
	};
	
	public static class NativeMethods
	{
		
		
		public const string DLLNAME = "libsword.so";
		
		[DllImport(DLLNAME)]
		public static extern IntPtr org_crosswire_sword_SWMgr_new();
		
		[DllImport(DLLNAME)]
		public static extern IntPtr org_crosswire_sword_SWMgr_newWithPath(string path);
		
		[DllImport(DLLNAME)]
		public static extern IntPtr org_crosswire_sword_SWMgr_getModuleByName(IntPtr hSWMgr, string moduleName);
		
		[DllImport(DLLNAME)]
		public static extern void org_crosswire_sword_SWModule_setKeyText(IntPtr hSWModule, string key);
		
		[DllImport(DLLNAME)]
		public static extern IntPtr org_crosswire_sword_SWModule_renderText(IntPtr hSWModule);
		
		[DllImport(DLLNAME)]
		public static extern IntPtr org_crosswire_sword_SWModule_getRawEntry(IntPtr hSWModule);

		[DllImport(DLLNAME)]
		public static extern IntPtr org_crosswire_sword_SWModule_getKeyText(IntPtr hSWModule);
		
		[DllImport(DLLNAME)]
		public static extern void org_crosswire_sword_SWMgr_delete(IntPtr hSWMgr);
		
		[DllImport(DLLNAME)]
		public static extern IntPtr org_crosswire_sword_SWMgr_getModInfoList(IntPtr hSWMgr);
		
		[DllImport(DLLNAME)]
		public static extern IntPtr org_crosswire_sword_SWModule_stripText(IntPtr hSWModule);
		
		[DllImport(DLLNAME)]
		public static extern void org_crosswire_sword_SWModule_setRawEntry(IntPtr hSWModule, string entryBuffer);
		
		[DllImport(DLLNAME)]
		public static extern void org_crosswire_sword_SWModule_terminateSearch(IntPtr hSWModule);
		
		[DllImport(DLLNAME)]
		public static extern char org_crosswire_sword_SWModule_popError(IntPtr hSWModule);
		
		[DllImport(DLLNAME)]
		public static extern long org_crosswire_sword_SWModule_getEntrySize(IntPtr hSWModule);
		
		[DllImport(DLLNAME)]
		public static extern IntPtr org_crosswire_sword_SWModule_getEntryAttribute(IntPtr hSWModule, string level1, string level2, string level3, char filteredBool);
		
		[DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)]
		public static extern IntPtr org_crosswire_sword_SWModule_parseKeyList(IntPtr hSWModule, string keyText);
		
		[DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)]
		public static extern IntPtr org_crosswire_sword_SWModule_search(IntPtr hSWModule, string searchString, int searchType, long flags, string scope, IntPtr progressReporter);
		
		[DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)]
		public static extern char org_crosswire_sword_SWModule_hasKeyChildren(IntPtr hSWModule);
		
		[DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)]
		public static extern IntPtr org_crosswire_sword_SWModule_getKeyChildren(IntPtr hSWModule);
		
		[DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)]
		public static extern IntPtr org_crosswire_sword_SWModule_getName(IntPtr hSWModule);
		
		[DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)]
		public static extern IntPtr org_crosswire_sword_SWModule_getDescription(IntPtr hSWModule);
		
		[DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)]
		public static extern IntPtr org_crosswire_sword_SWModule_getCategory(IntPtr hSWModule);
		
		[DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)]
		public static extern IntPtr org_crosswire_sword_SWModule_getKeyParent(IntPtr hSWModule);
		
		[DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)]
		public static extern void org_crosswire_sword_SWModule_previous(IntPtr hSWModule);
		
		[DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)]
		public static extern void org_crosswire_sword_SWModule_next(IntPtr hSWModule);
		
		[DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)]
		public static extern void org_crosswire_sword_SWModule_begin(IntPtr hSWModule);
		
		[DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)]
		public static extern IntPtr org_crosswire_sword_SWModule_getRenderHeader(IntPtr hSWModule);
		
		[DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)]
		public static extern IntPtr org_crosswire_sword_SWModule_getConfigEntry(IntPtr hSWModule, string key);
		
		[DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)]
		public static extern void org_crosswire_sword_SWModule_deleteSearchFramework(IntPtr hSWModule);
		
		[DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)]
		public static extern bool org_crosswire_sword_SWModule_hasSearchFramework(IntPtr hSWModule);
		
		[DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)]
		public static extern IntPtr org_crosswire_sword_SWMgr_version(IntPtr hSWMgr);
		
		[DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)]
		public static extern IntPtr org_crosswire_sword_SWMgr_getPrefixPath(IntPtr hSWMgr);
		
		[DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)]
		public static extern IntPtr org_crosswire_sword_SWMgr_getConfigPath(IntPtr hSWMgr);
		
		[DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)]
		public static extern void org_crosswire_sword_SWMgr_setGlobalOption(IntPtr hSWMgr, string option, string val);
		
		[DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)]
		public static extern IntPtr org_crosswire_sword_SWMgr_getGlobalOptionValues(IntPtr hSWMgr, string option);
		
		[DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)]
		public static extern void org_crosswire_sword_SWMgr_setCipherKey(IntPtr hSWMgr, string modName, byte[] key);
		
		[DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)]
		public static extern void org_crosswire_sword_SWMgr_setJavascript(IntPtr hSWMgr, bool valueBool);
		
		[DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)]
		public static extern IntPtr org_crosswire_sword_SWMgr_getAvailableLocales(IntPtr hSWMgr);
		
		[DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)]
		public static extern void org_crosswire_sword_SWMgr_setDefaultLocale(IntPtr hSWMgr, string name);
		
		[DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)]
		public static extern IntPtr org_crosswire_sword_SWMgr_translate(IntPtr hSWMgr, string text, string localeName);
		
		[DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)]
		public static extern void org_crosswire_sword_InstallMgr_reInit(IntPtr hInstallMgr);
		
		[DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)]
		public static extern IntPtr org_crosswire_sword_InstallMgr_new(string baseDir, IntPtr statusReporter);
		
		[DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)]
		public static extern void org_crosswire_sword_InstallMgr_setUserDisclaimerConfirmed(IntPtr hInstallMgr);
		
		[DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)]
		public static extern int org_crosswire_sword_InstallMgr_syncConfig(IntPtr hInstallMgr);
		
		[DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)]
		public static extern IntPtr org_crosswire_sword_InstallMgr_getRemoteSources(IntPtr hInstallMgr);
		
		[DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)]
		public static extern IntPtr org_crosswire_sword_InstallMgr_getRemoteModInfoList(IntPtr hInstallMgr, IntPtr hSWMgr_deltaCompareTo, string sourceName);
		
		[DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)]
		public static extern int org_crosswire_sword_InstallMgr_refreshRemoteSource(IntPtr hInstallMgr, string sourceName);
		
		[DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)]
		public static extern int org_crosswire_sword_InstallMgr_remoteInstallModule(IntPtr hInstallMgr_from, IntPtr hSWMgr_to, string sourceName, string modName);
		
		[DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)]
		public static extern void org_crosswire_sword_InstallMgr_delete(IntPtr hInstallMgr);

		public static IEnumerable<string> MarshalStringArray(IntPtr arrayPtr)
		{
			if(arrayPtr == IntPtr.Zero)
			{
				yield break;
			}
			
			while(arrayPtr != IntPtr.Zero)
			{
				IntPtr ptr = Marshal.ReadIntPtr(arrayPtr);
				if(ptr == IntPtr.Zero)
				{
					yield break;
				}
				string key = Marshal.PtrToStringAnsi(ptr);
			 	yield return key;
				arrayPtr = new IntPtr(arrayPtr.ToInt64() + IntPtr.Size);
			}
		}
		
		public static IEnumerable<ModInfo> MarshallModInfoArray(IntPtr pointer)
		{
			ModInfo modInfo = (ModInfo)Marshal.PtrToStructure(pointer, typeof(ModInfo));
			
			while (modInfo.Name != null) 
			{
				yield return modInfo;
				pointer = new IntPtr(pointer.ToInt64() + Marshal.SizeOf(typeof(ModInfo)));
				modInfo = (ModInfo)Marshal.PtrToStructure(pointer, typeof(ModInfo));
			}	
		}
	}
}