[sword-svn] r3573 - in trunk: bindings bindings/cordova bindings/cordova/org.crosswire.sword.cordova.SWORD/src/ios bindings/objc bindings/objc/ObjCSword.xcodeproj include
scribe at crosswire.org
scribe at crosswire.org
Tue Feb 20 02:41:43 MST 2018
Author: scribe
Date: 2018-02-20 02:41:42 -0700 (Tue, 20 Feb 2018)
New Revision: 3573
Added:
trunk/bindings/objc/README
Modified:
trunk/bindings/cordova/README
trunk/bindings/cordova/org.crosswire.sword.cordova.SWORD/src/ios/SWORD.swift
trunk/bindings/flatapi.cpp
trunk/bindings/objc/ObjCSword.xcodeproj/project.pbxproj
trunk/include/flatapi.h
Log:
updated to better support ios cordova bindings
Modified: trunk/bindings/cordova/README
===================================================================
--- trunk/bindings/cordova/README 2018-02-20 04:33:53 UTC (rev 3572)
+++ trunk/bindings/cordova/README 2018-02-20 09:41:42 UTC (rev 3573)
@@ -1,5 +1,7 @@
This folder contains a cordova plugin which is based on the
../Android bindings which is based on the java-jni/ bindings.
+and
+../objc bindings which is based on the flatapi bindings.
Follow the README in the ../java-jni/ bindings folder.
Modified: trunk/bindings/cordova/org.crosswire.sword.cordova.SWORD/src/ios/SWORD.swift
===================================================================
--- trunk/bindings/cordova/org.crosswire.sword.cordova.SWORD/src/ios/SWORD.swift 2018-02-20 04:33:53 UTC (rev 3572)
+++ trunk/bindings/cordova/org.crosswire.sword.cordova.SWORD/src/ios/SWORD.swift 2018-02-20 09:41:42 UTC (rev 3573)
@@ -28,7 +28,10 @@
let libswordVersion = String(cString: org_crosswire_sword_SWMgr_version(mgr))
debugPrint("libswordVersion: " + libswordVersion)
- self.commandDelegate!.send(CDVPluginResult(status: CDVCommandStatus_OK, messageAs: "initSWORD; Version: " + libswordVersion), callbackId: command.callbackId)
+ let info = [
+ "version": libswordVersion
+ ] as [AnyHashable : Any]
+ self.commandDelegate!.send(CDVPluginResult(status: CDVCommandStatus_OK, messageAs: info), callbackId: command.callbackId)
}
@@ -140,22 +143,26 @@
let name = org_crosswire_sword_SWModule_getName(module)
let description = org_crosswire_sword_SWModule_getDescription(module)
let category = org_crosswire_sword_SWModule_getCategory(module)
+
+ var response = [
+ "name": name == nil ? "" : String(cString: name!),
+ "description": description == nil ? "" : String(cString: description!),
+ "category": category == nil ? "" : String(cString: category!)
+ ]
let language = org_crosswire_sword_SWModule_getConfigEntry(module, "Lang")
+ response["language"] = language == nil ? "" : String(cString: language!)
let direction = org_crosswire_sword_SWModule_getConfigEntry(module, "Direction")
+ response["direction"] = direction == nil ? "" : String(cString: direction!)
let font = org_crosswire_sword_SWModule_getConfigEntry(module, "Font")
+ response["font"] = font == nil ? "" : String(cString: font!)
let shortCopyright = org_crosswire_sword_SWModule_getConfigEntry(module, "ShortCopyright")
+ response["shortCopyright"] = shortCopyright == nil ? "" : String(cString: shortCopyright!)
+ let cipherKey = org_crosswire_sword_SWModule_getConfigEntry(module, "CipherKey")
+ response["cipherKey"] = cipherKey == nil ? "" : String(cString: cipherKey!)
let shortPromo = org_crosswire_sword_SWModule_getConfigEntry(module, "ShortPromo")
+ response["shortPromo"] = shortPromo == nil ? "" : String(cString: shortPromo!)
- let response = [
- "name": name == nil ? "" : String(cString: name!),
- "description": description == nil ? "" : String(cString: description!),
- "category": category == nil ? "" : String(cString: category!),
- "language": language == nil ? "" : String(cString: language!),
- "direction": direction == nil ? "" : String(cString: direction!),
- "font": font == nil ? "" : String(cString: font!),
- "shortCopyright": shortCopyright == nil ? "" : String(cString: shortCopyright!),
- "shortPromo": shortPromo == nil ? "" : String(cString: shortPromo!)
- ]
+
self.commandDelegate!.send(CDVPluginResult(status: CDVCommandStatus_OK, messageAs: response), callbackId: command.callbackId)
}
@@ -167,6 +174,7 @@
let baseDir = (FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first?.path)! + "/sword";
let confPath = baseDir + "/extraConfig.conf";
let retVal = getStringArray(buffer: org_crosswire_sword_SWConfig_augmentConfig(confPath, blob))
+ self.reinitMgr()
self.commandDelegate!.send(CDVPluginResult(status: CDVCommandStatus_OK, messageAs: retVal), callbackId: command.callbackId)
}
@@ -189,7 +197,8 @@
let key = command.arguments[1] as? String ?? ""
let baseDir = (FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first?.path)! + "/sword";
let confPath = baseDir + "/extraConfig.conf";
- let retVal = String(cString:org_crosswire_sword_SWConfig_getKeyValue(confPath, section, key))
+ let keyVal = org_crosswire_sword_SWConfig_getKeyValue(confPath, section, key)
+ let retVal = keyVal == nil ? nil : String(cString:keyVal!)
self.commandDelegate!.send(CDVPluginResult(status: CDVCommandStatus_OK, messageAs: retVal), callbackId: command.callbackId)
}
@@ -702,6 +711,7 @@
"category": String(cString: i.category),
"language": String(cString: i.language),
"delta": String(cString: i.delta),
+ "cipherKey": i.cipherKey == nil ? nil : String(cString: i.cipherKey),
"version": String(cString: i.version)
] as [AnyHashable : Any]
mods.append(modInfo)
@@ -786,7 +796,7 @@
var mods = [[AnyHashable : Any]]()
for i in modInfoList {
- let modInfo = [
+ var modInfo = [
"name": String(cString: i.name),
"description": String(cString: i.description),
"category": String(cString: i.category),
@@ -794,7 +804,12 @@
"delta": i.delta == nil ? "" : String(cString: i.delta),
"version": i.version == nil ? "" : String(cString: i.version)
] as [AnyHashable : Any]
+
+ if (i.cipherKey != nil) {
+ modInfo["cipherKey"] = String(cString: i.cipherKey)
+ }
mods.append(modInfo)
+
}
self.commandDelegate!.send(CDVPluginResult(status: CDVCommandStatus_OK, messageAs: mods), callbackId: command.callbackId)
}
Modified: trunk/bindings/flatapi.cpp
===================================================================
--- trunk/bindings/flatapi.cpp 2018-02-20 04:33:53 UTC (rev 3572)
+++ trunk/bindings/flatapi.cpp 2018-02-20 09:41:42 UTC (rev 3573)
@@ -36,6 +36,7 @@
#include <swlog.h>
#include <localemgr.h>
#include <utilstr.h>
+#include <rtfhtml.h>
#include "corba/orbitcpp/webmgr.hpp"
extern "C" {
@@ -81,6 +82,7 @@
delete [] (*modInfo)[i].language;
delete [] (*modInfo)[i].version;
delete [] (*modInfo)[i].delta;
+ delete [] (*modInfo)[i].cipherKey;
}
else break;
}
@@ -924,7 +926,14 @@
GETSWMODULE(hSWModule, 0);
- stdstr(&(hmod->configEntry), (module->getConfigEntry(key) ? assureValidUTF8(module->getConfigEntry(key)).c_str() : 0));
+ const char *exists = module->getConfigEntry(key);
+ SWBuf confValue = exists;
+ // special processing if we're requesting About-- kindof cheese
+ if (!strcmp("About", key) && exists) {
+ RTFHTML().processText(confValue);
+ }
+ SWBuf assuredBuf = assureValidUTF8(confValue.c_str());
+ stdstr(&(hmod->configEntry), (exists ? assuredBuf.c_str() : 0));
return hmod->configEntry;
}
@@ -1047,7 +1056,7 @@
int i = 0;
for (sword::ModMap::iterator it = mgr->Modules.begin(); it != mgr->Modules.end(); ++it) {
module = it->second;
- if ((!(module->getConfigEntry("CipherKey"))) || (*(module->getConfigEntry("CipherKey")))) {
+// if ((!(module->getConfigEntry("CipherKey"))) || (*(module->getConfigEntry("CipherKey")))) {
SWBuf type = module->getType();
SWBuf cat = module->getConfigEntry("Category");
SWBuf version = module->getConfigEntry("Version");
@@ -1058,8 +1067,13 @@
stdstr(&(milist[i].language), assureValidUTF8(module->getLanguage()));
stdstr(&(milist[i].version), assureValidUTF8(version.c_str()));
stdstr(&(milist[i].delta), "");
+ const char *cipherKey = module->getConfigEntry("CipherKey");
+ if (cipherKey) {
+ stdstr(&(milist[i].cipherKey), assureValidUTF8(cipherKey));
+ }
+ else milist[i].cipherKey = 0;
if (++i >= size) break;
- }
+// }
}
hmgr->modInfo = milist;
return milist;
@@ -1632,6 +1646,7 @@
SWBuf type = module->getType();
SWBuf cat = module->getConfigEntry("Category");
+ const char *cipherKey = module->getConfigEntry("CipherKey");
if (cat.length() > 0) type = cat;
stdstr(&(retVal[i].name), assureValidUTF8(module->getName()));
@@ -1639,8 +1654,9 @@
stdstr(&(retVal[i].category), assureValidUTF8(type.c_str()));
stdstr(&(retVal[i].language), assureValidUTF8(module->getLanguage()));
stdstr(&(retVal[i].version), assureValidUTF8(version.c_str()));
- stdstr(&(retVal[i++].delta), assureValidUTF8(statusString.c_str()));
- if (i >= size) break;
+ stdstr(&(retVal[i].delta), assureValidUTF8(statusString.c_str()));
+ stdstr(&(retVal[i].cipherKey), cipherKey ? (const char *)assureValidUTF8(cipherKey) : (const char *)0);
+ if (++i >= size) break;
}
hinstmgr->modInfo = retVal;
return retVal;
Modified: trunk/bindings/objc/ObjCSword.xcodeproj/project.pbxproj
===================================================================
--- trunk/bindings/objc/ObjCSword.xcodeproj/project.pbxproj 2018-02-20 04:33:53 UTC (rev 3572)
+++ trunk/bindings/objc/ObjCSword.xcodeproj/project.pbxproj 2018-02-20 09:41:42 UTC (rev 3573)
@@ -7,6 +7,17 @@
objects = {
/* Begin PBXAggregateTarget section */
+ 0A59E69F1FCF228B00CD0BD2 /* SWORDUniversal */ = {
+ isa = PBXAggregateTarget;
+ buildConfigurationList = 0A59E6A21FCF228C00CD0BD2 /* Build configuration list for PBXAggregateTarget "SWORDUniversal" */;
+ buildPhases = (
+ 0A59E6A51FCF254700CD0BD2 /* ShellScript */,
+ );
+ dependencies = (
+ );
+ name = SWORDUniversal;
+ productName = UniversalLib;
+ };
A9D271FA14D7193300DA8926 /* Utilities */ = {
isa = PBXAggregateTarget;
buildConfigurationList = A9D271FB14D7193300DA8926 /* Build configuration list for PBXAggregateTarget "Utilities" */;
@@ -94,8 +105,6 @@
0A1F16A41FBB755B00E0AEFA /* SWORD.m in Sources */ = {isa = PBXBuildFile; fileRef = 0A1F16A31FBB755B00E0AEFA /* SWORD.m */; };
0A1F16A51FBB755B00E0AEFA /* SWORD.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 0A1F16A21FBB755B00E0AEFA /* SWORD.h */; };
0A1F16A91FBB75AB00E0AEFA /* flatapi.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A1F16991FBB70E200E0AEFA /* flatapi.cpp */; };
- 0A1F16AA1FBB75D600E0AEFA /* swdisp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A954A80113EE98B30094E3FE /* swdisp.cpp */; };
- 0A1F16AB1FBB75D600E0AEFA /* swlog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A954A80213EE98B30094E3FE /* swlog.cpp */; };
0A1F16AC1FBB75D600E0AEFA /* listkey.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A954A80913EE98B30094E3FE /* listkey.cpp */; };
0A1F16AD1FBB75D600E0AEFA /* strkey.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A954A81013EE98B30094E3FE /* strkey.cpp */; };
0A1F16AE1FBB75D600E0AEFA /* swkey.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A954A81113EE98B30094E3FE /* swkey.cpp */; };
@@ -560,6 +569,8 @@
0A5888BC1FB44ABF00F7DAA3 /* zverse.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A129D919DF144D005BCBC1 /* zverse.h */; };
0A5888BD1FB44ABF00F7DAA3 /* zverse4.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A129DA19DF144D005BCBC1 /* zverse4.h */; };
0A5888BE1FB44ACC00F7DAA3 /* regex.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A1295119DF144D005BCBC1 /* regex.h */; };
+ 0A59E6A31FCF252800CD0BD2 /* swdisp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A954A80113EE98B30094E3FE /* swdisp.cpp */; };
+ 0A59E6A41FCF252800CD0BD2 /* swlog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A954A80213EE98B30094E3FE /* swlog.cpp */; };
0AA1DD361FB46FD00082E131 /* sword.m in Sources */ = {isa = PBXBuildFile; fileRef = 0AA1DD341FB46FD00082E131 /* sword.m */; };
0AA1DD371FB46FD00082E131 /* sword.h in Headers */ = {isa = PBXBuildFile; fileRef = 0AA1DD351FB46FD00082E131 /* sword.h */; };
8C92C31DC92DF0671FCEB5B3 /* SwordFilter.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8C92CC111DC521DE0C054C60 /* SwordFilter.mm */; };
@@ -5597,6 +5608,11 @@
DevelopmentTeam = J9J97ZC4K5;
ProvisioningStyle = Automatic;
};
+ 0A59E69F1FCF228B00CD0BD2 = {
+ CreatedOnToolsVersion = 9.1;
+ DevelopmentTeam = J9J97ZC4K5;
+ ProvisioningStyle = Automatic;
+ };
8DC2EF4F0486A6940098B216 = {
DevelopmentTeam = J9J97ZC4K5;
ProvisioningStyle = Automatic;
@@ -5714,6 +5730,7 @@
0A011D9D1FB4142500778C2B /* sword */,
0A011DA51FB4142500778C2B /* SWORDTests */,
0A1F169F1FBB755B00E0AEFA /* SWORD */,
+ 0A59E69F1FCF228B00CD0BD2 /* SWORDUniversal */,
);
};
/* End PBXProject section */
@@ -5760,6 +5777,22 @@
};
/* End PBXResourcesBuildPhase section */
+/* Begin PBXShellScriptBuildPhase section */
+ 0A59E6A51FCF254700CD0BD2 /* ShellScript */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "# define output folder environment variable\nUNIVERSAL_OUTPUTFOLDER=${BUILD_DIR}/${CONFIGURATION}-universal\n\n# Step 1. Build Device and Simulator versions\nxcodebuild -target ${PROJECT_NAME} ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos BUILD_DIR=\"${BUILD_DIR}\" BUILD_ROOT=\"${BUILD_ROOT}\"\nxcodebuild -target ${PROJECT_NAME} -configuration ${CONFIGURATION} -sdk iphonesimulator -arch x86_64 -arch i386 -arch armv7 -arch armv7s -arch arm64 BUILD_DIR=\"${BUILD_DIR}\" BUILD_ROOT=\"${BUILD_ROOT}\"\n\n# make sure the output directory exists\nmkdir -p \"${UNIVERSAL_OUTPUTFOLDER}\"\n\n# Step 2. Create universal binary file using lipo\nlipo -create -output \"${UNIVERSAL_OUTPUTFOLDER}/lib${PROJECT_NAME}.a\" \"${BUILD_DIR}/${CONFIGURATION}-iphoneos/lib${PROJECT_NAME}.a\" \"${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/lib${PROJECT_NAME}.a\"\n\necho \"Universal library can be found here:\"\necho ${UNIVERSAL_OUTPUTFOLDER}/lib${PROJECT_NAME}.a\n\n# Last touch. copy the header files. Just for convenience\ncp -R \"${BUILD_DIR}/${CONFIGURATION}-iphoneos/include\" \"${UNIVERSAL_OUTPUTFOLDER}/\"";
+ };
+/* End PBXShellScriptBuildPhase section */
+
/* Begin PBXSourcesBuildPhase section */
0A011D991FB4142500778C2B /* Sources */ = {
isa = PBXSourcesBuildPhase;
@@ -5969,6 +6002,7 @@
0A1F16B41FBB75D600E0AEFA /* versificationmgr.cpp in Sources */,
0A1F17231FBB768100E0AEFA /* thmlmorph.cpp in Sources */,
0A1F16D41FBB762D00E0AEFA /* ftplib.c in Sources */,
+ 0A59E6A41FCF252800CD0BD2 /* swlog.cpp in Sources */,
0A1F17301FBB768100E0AEFA /* utf8arshaping.cpp in Sources */,
0A1F171C1FBB768100E0AEFA /* teirtf.cpp in Sources */,
0A1F17271FBB768100E0AEFA /* thmlscripref.cpp in Sources */,
@@ -5999,7 +6033,6 @@
0A1F17441FBB76A700E0AEFA /* lzsscomprs.cpp in Sources */,
0A1F16F61FBB768100E0AEFA /* gbfheadings.cpp in Sources */,
0A1F17161FBB768100E0AEFA /* papyriplain.cpp in Sources */,
- 0A1F16AB1FBB75D600E0AEFA /* swlog.cpp in Sources */,
0A1F16DC1FBB762D00E0AEFA /* utilxml.cpp in Sources */,
0A1F16DD1FBB765A00E0AEFA /* rawgenbook.cpp in Sources */,
0A1F17001FBB768100E0AEFA /* gbfwebif.cpp in Sources */,
@@ -6067,6 +6100,7 @@
0A1F171D1FBB768100E0AEFA /* thmlfootnotes.cpp in Sources */,
0A1F17341FBB768100E0AEFA /* utf8hebrewpoints.cpp in Sources */,
0A1F174C1FBB76A700E0AEFA /* zipcomprs.cpp in Sources */,
+ 0A59E6A31FCF252800CD0BD2 /* swdisp.cpp in Sources */,
0A1F16EB1FBB768100E0AEFA /* gbflatex.cpp in Sources */,
0A1F170D1FBB768100E0AEFA /* osisplain.cpp in Sources */,
0A1F16F31FBB768100E0AEFA /* teixhtml.cpp in Sources */,
@@ -6114,7 +6148,6 @@
0A1F17011FBB768100E0AEFA /* gbfwordjs.cpp in Sources */,
0A1F172D1FBB768100E0AEFA /* unicodertf.cpp in Sources */,
0A1F17321FBB768100E0AEFA /* utf8cantillation.cpp in Sources */,
- 0A1F16AA1FBB75D600E0AEFA /* swdisp.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -6466,7 +6499,7 @@
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
MTL_ENABLE_DEBUG_INFO = YES;
- ONLY_ACTIVE_ARCH = NO;
+ ONLY_ACTIVE_ARCH = YES;
PRODUCT_BUNDLE_IDENTIFIER = org.crosswire.apple.SWORD;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
SDKROOT = iphoneos;
@@ -6644,11 +6677,13 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
IPHONEOS_DEPLOYMENT_TARGET = 11.1;
MTL_ENABLE_DEBUG_INFO = YES;
+ ONLY_ACTIVE_ARCH = NO;
OTHER_LDFLAGS = "-ObjC";
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = iphoneos;
SKIP_INSTALL = YES;
TARGETED_DEVICE_FAMILY = "1,2";
+ VALID_ARCHS = "x86_64 armv7 armv7s arm64";
};
name = Debug;
};
@@ -6677,15 +6712,35 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
IPHONEOS_DEPLOYMENT_TARGET = 11.1;
MTL_ENABLE_DEBUG_INFO = NO;
+ ONLY_ACTIVE_ARCH = NO;
OTHER_LDFLAGS = "-ObjC";
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = iphoneos;
SKIP_INSTALL = YES;
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
+ VALID_ARCHS = "x86_64 armv7 armv7s arm64";
};
name = Release;
};
+ 0A59E6A01FCF228C00CD0BD2 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_STYLE = Automatic;
+ DEVELOPMENT_TEAM = J9J97ZC4K5;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ };
+ name = Debug;
+ };
+ 0A59E6A11FCF228C00CD0BD2 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_STYLE = Automatic;
+ DEVELOPMENT_TEAM = J9J97ZC4K5;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ };
+ name = Release;
+ };
1DEB91AE08733DA50010E9CD /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -8466,6 +8521,15 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
+ 0A59E6A21FCF228C00CD0BD2 /* Build configuration list for PBXAggregateTarget "SWORDUniversal" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 0A59E6A01FCF228C00CD0BD2 /* Debug */,
+ 0A59E6A11FCF228C00CD0BD2 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
1DEB91AD08733DA50010E9CD /* Build configuration list for PBXNativeTarget "ObjCSword" */ = {
isa = XCConfigurationList;
buildConfigurations = (
Added: trunk/bindings/objc/README
===================================================================
--- trunk/bindings/objc/README (rev 0)
+++ trunk/bindings/objc/README 2018-02-20 09:41:42 UTC (rev 3573)
@@ -0,0 +1,3 @@
+For Universal libsword.a use XCode and compile SWORD/SWORD.xcodeproj
+then if you'd like to add ios support to the ../cordova bindings,
+the Makefile in here will copy the Universal lib and other deps.
Modified: trunk/include/flatapi.h
===================================================================
--- trunk/include/flatapi.h 2018-02-20 04:33:53 UTC (rev 3572)
+++ trunk/include/flatapi.h 2018-02-20 09:41:42 UTC (rev 3573)
@@ -39,6 +39,7 @@
char *language;
char *version;
char *delta;
+ char *cipherKey;
};
More information about the sword-cvs
mailing list