aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordanglassey <danglassey>2002-09-11 13:02:15 +0000
committerdanglassey <danglassey>2002-09-11 13:02:15 +0000
commit6423eeeb7e0d68e62d4e9b818173b2ded9b8a54b (patch)
treefe19e03b865318b0a6e65b22065a7cc64364fdb6
parentd6e78505f4bbc8dc4c5b5127655c374a16663d3b (diff)
downloadsword-sf-cvs-6423eeeb7e0d68e62d4e9b818173b2ded9b8a54b.tar.gz
sync with crosswire 20020911-1300
-rw-r--r--apps/windoze/CBuilder5/BibleCS/AboutBoxfrm.cpp2
-rw-r--r--apps/windoze/CBuilder5/BibleCS/AboutBoxfrm.dfm6
-rw-r--r--apps/windoze/CBuilder5/BibleCS/RxRichEditX.cpp39
-rw-r--r--apps/windoze/CBuilder5/BibleCS/mainfrm.cpp13
-rw-r--r--apps/windoze/CBuilder5/BibleCS/searchfrm.cpp5
-rw-r--r--apps/windoze/CBuilder5/BibleCS/sword.bpr20
-rw-r--r--apps/windoze/CBuilder5/BibleCS/sword.resbin1976 -> 1976 bytes
-rw-r--r--apps/windoze/CBuilder5/BibleCS/swordlib.bpr14
-rw-r--r--include/listkey.h3
-rw-r--r--include/treekeyidx.h3
-rw-r--r--src/keys/listkey.cpp25
-rw-r--r--src/keys/swkey.cpp1
-rw-r--r--src/keys/treekeyidx.cpp9
-rw-r--r--src/modules/common/rawstr.cpp2
14 files changed, 98 insertions, 44 deletions
diff --git a/apps/windoze/CBuilder5/BibleCS/AboutBoxfrm.cpp b/apps/windoze/CBuilder5/BibleCS/AboutBoxfrm.cpp
index b76b9b1..b5d6be1 100644
--- a/apps/windoze/CBuilder5/BibleCS/AboutBoxfrm.cpp
+++ b/apps/windoze/CBuilder5/BibleCS/AboutBoxfrm.cpp
@@ -59,7 +59,7 @@ void __fastcall TAboutBox::FormShow(TObject *Sender) {
newtext += "sword-patches@crosswire.org (please include unified diffs if possible (diff -u)) \\par\\par ";
newtext += "To be on our mailing list: \\par ";
newtext += "sword-list-info@crosswire.org \\par\\par ";
- newtext += "This software is provided free for the study of God and His Word. You DO NOT NEED TO license or pay for this software. Please: copy it freely and distribute it to athiests in Russia :), post it on your favorite FTP site, write your own modules and features for it, include it on your lastest freeware CDROM, incorporate all the cool utility classes into a product of your own, write a tract module for the program and sneak it onto all of your co-workers' computers and blame it on a virus, make fun of your pastor for spending $400 dollars on a similar package, give it to your pastor who can't figure out how to use his $400 dollar package :) \\par\\par ";
+ newtext += "This software is provided free for the study of God and His Word. You DO NOT NEED TO license or pay for this software. Please: copy it freely and distribute it to atheists in Russia :), post it on your favorite FTP site, write your own modules and features for it, include it on your lastest freeware CDROM, incorporate all the cool utility classes into a product of your own, write a tract module for the program and sneak it onto all of your co-workers' computers and blame it on a virus, make fun of your pastor for spending $400 dollars on a similar package, give it to your pastor who can't figure out how to use his $400 dollar package :) \\par\\par ";
newtext += "OK, if you still feel the need, you can help our organization out at: \\par\\par ";
newtext += "CrossWire Software & Bible Society \\par ";
newtext += "P. O. Box 2528 \\par ";
diff --git a/apps/windoze/CBuilder5/BibleCS/AboutBoxfrm.dfm b/apps/windoze/CBuilder5/BibleCS/AboutBoxfrm.dfm
index c5c7e41..186f784 100644
--- a/apps/windoze/CBuilder5/BibleCS/AboutBoxfrm.dfm
+++ b/apps/windoze/CBuilder5/BibleCS/AboutBoxfrm.dfm
@@ -1,6 +1,6 @@
object AboutBox: TAboutBox
- Left = 253
- Top = 97
+ Left = 290
+ Top = 103
BorderStyle = bsDialog
Caption = 'About The SWORD Project'
ClientHeight = 448
@@ -102,7 +102,7 @@ object AboutBox: TAboutBox
Width = 213
Height = 21
AutoSize = False
- Caption = 'v1.5.4rc2'
+ Caption = 'v1.5.4rc4'
IsControl = True
end
object Copyright: TLabel
diff --git a/apps/windoze/CBuilder5/BibleCS/RxRichEditX.cpp b/apps/windoze/CBuilder5/BibleCS/RxRichEditX.cpp
index c23638f..1fa4976 100644
--- a/apps/windoze/CBuilder5/BibleCS/RxRichEditX.cpp
+++ b/apps/windoze/CBuilder5/BibleCS/RxRichEditX.cpp
@@ -452,7 +452,7 @@ void TRxRichEditX::fillWithVerses(SWModule *module, ListKey *verses, bool headin
SWKey *lastKey = 0;
bool first = true;
- while (verses->Count() && !module->Error() && newtext.Length() < 10000 ) {
+ while (verses->Count() && !module->Error() && newtext.Length() < 40000 ) {
SWKey *testKey = verses->GetElement();
VerseKey *element = SWDYNAMIC_CAST(VerseKey, testKey);
if (heading) {
@@ -475,17 +475,22 @@ void TRxRichEditX::fillWithVerses(SWModule *module, ListKey *verses, bool headin
strcpy(buf, module->KeyText());
toupperstr_utf8(buf);
int i;
+ char *start1 = buf;
+ char *start2 = buf2;
for (i = 0; i < strlen(buf); i++) {
- if ((buf[i] == buf2[i]) || (buf[i] != '0'))
+ if (*start1 == '0')
+ start1++;
+ if (*start2 == '0')
+ start2++;
+ if ((*start1 != '0') && (*start2 != '0')) if ((buf[i] == buf2[i]) || (buf[i] != '0'))
break;
}
- char *buf3 = buf+i;
- for (i = 0; i < strlen(buf2) && (i < strlen(buf3)); i++) {
- if ((buf3[i] != buf2[i]) &&
- (SW_toupper(buf3[i]) != SW_toupper(buf2[i])))
+ for (i = 0; i < strlen(start1) && (i < strlen(start2)); i++) {
+ if ((start1[i] != start2[i]) &&
+ (SW_toupper(start1[i]) != SW_toupper(start2[i])))
break;
}
- if (!i || i < (strlen(buf2)/2)) {
+ if (!i || i < (strlen(start1)/2)) {
delete [] buf2;
verses->Remove();
continue;
@@ -888,6 +893,26 @@ WideString __fastcall TRxRichEditX::WordAtCursor(void) {
break;
}
}
+ int start = 1;
+ int end = Result.Length();
+ if (end) {
+ if (strchr(",", Result[end]))
+ end--;
+ if (strchr(",", Result[start]))
+ start++;
+ // see if we're a verse number
+ if (isdigit(Result[start]) && (end > 3)) {
+ if (isalpha(Result[start+3])) {
+ start++;
+ if (isdigit(Result[start]))
+ start++;
+ if (isdigit(Result[start]))
+ start++;
+ }
+ }
+ Result = Result.SubString(start, end-(start-1));
+ }
+
return Result;
}
diff --git a/apps/windoze/CBuilder5/BibleCS/mainfrm.cpp b/apps/windoze/CBuilder5/BibleCS/mainfrm.cpp
index 511d501..5df1c50 100644
--- a/apps/windoze/CBuilder5/BibleCS/mainfrm.cpp
+++ b/apps/windoze/CBuilder5/BibleCS/mainfrm.cpp
@@ -547,13 +547,13 @@ void __fastcall TForm1::DictionaryLookup1Click(TObject *Sender)
SWDispRTF *rtf = (SWDispRTF *)Screen->ActiveControl;
int wordstart;
int saveSelStart = rtf->SelStart;
- String lookupKey;
+ WideString lookupKey;
ConfigEntMap::iterator eit;
char preChar = 0;
if (!rtf->SelLength) {
preChar = (rtf->WordAtCursor().Length()) ? rtf->WordAtCursor()[1] : 0;
- lookupKey = TrimJunk(rtf->WordAtCursor());
+ lookupKey = rtf->WordAtCursor();
}
else {
preChar = rtf->Text[(rtf->SelStart)?rtf->SelStart:0];
@@ -562,12 +562,13 @@ void __fastcall TForm1::DictionaryLookup1Click(TObject *Sender)
// check if all digits (strongs)
int i;
- for (i = 0; i < strlen(lookupKey.c_str()); i++) {
- if (!isdigit(lookupKey.c_str()[i]))
+ for (i = 0; i < lookupKey.Length(); i++) {
+ if (!isdigit(lookupKey[i+1]) && !strchr("<>()", lookupKey[i+1]))
break;
}
- if ((i == strlen(lookupKey.c_str())) && (i)) {
+ if ((i == lookupKey.Length()) && (i)) {
+ lookupKey = TrimJunk(lookupKey);
String curLex = LexDictPageControl->ActivePage->Caption;
String feature = (DefaultVSKey->Testament() == 1)?"Hebrew":"Greek";
feature += (preChar == '(')?"Parse":"Def";
@@ -584,7 +585,7 @@ void __fastcall TForm1::DictionaryLookup1Click(TObject *Sender)
}
}
- DictKeyEdit->Text = UTF8ToWideString(lookupKey);
+ DictKeyEdit->Text = lookupKey;
}
diff --git a/apps/windoze/CBuilder5/BibleCS/searchfrm.cpp b/apps/windoze/CBuilder5/BibleCS/searchfrm.cpp
index 4d98ade..c9f70a2 100644
--- a/apps/windoze/CBuilder5/BibleCS/searchfrm.cpp
+++ b/apps/windoze/CBuilder5/BibleCS/searchfrm.cpp
@@ -180,6 +180,8 @@ void __fastcall TsearchForm::TSearchThread::FillListBox(void)
TListItem *pItem;
SWKey *savekey = (SWKey *)*(parent->target);
+ if (!savekey->Persist())
+ savekey = 0;
for (results = TOP; !results.Error(); results++) {
parent->target->setKey(results);
pItem = parent->resultsLV->Items->Add();
@@ -188,7 +190,8 @@ void __fastcall TsearchForm::TSearchThread::FillListBox(void)
// pItem->SubItems->Add((*parent->target).second->StripText());
// pItem = resultsLV->Items->Add(
}
- parent->target->setKey(*savekey);
+ if (savekey)
+ parent->target->setKey(*savekey);
// ListBox1->Items->Pack(); // so Count is set correctly (per helpfile)
parent->Caption = ((AnsiString)parent->resultsLV->Items->Count + (AnsiString)" " + (AnsiString)((parent->resultsLV->Items->Count == 1) ? _tr("match") : _tr("matches"))) + (AnsiString)" from [ " + (AnsiString)parent->target->Description() + (AnsiString)" (" + (AnsiString)parent->target->Name() + (AnsiString)") ]";
parent->searchBtn->Caption = _tr("Search");
diff --git a/apps/windoze/CBuilder5/BibleCS/sword.bpr b/apps/windoze/CBuilder5/BibleCS/sword.bpr
index 733c891..1de665e 100644
--- a/apps/windoze/CBuilder5/BibleCS/sword.bpr
+++ b/apps/windoze/CBuilder5/BibleCS/sword.bpr
@@ -43,7 +43,7 @@
<DEBUGLIBPATH value="$(BCB)\lib\debug"/>
<RELEASELIBPATH value="$(BCB)\lib\release"/>
<LINKER value="ilink32"/>
- <USERDEFINES value="_ICU_;_ICUSWORD_;_DEBUG"/>
+ <USERDEFINES value="_ICU_;_ICUSWORD_"/>
<SYSDEFINES value="NO_STRICT"/>
<MAINSOURCE value="sword.cpp"/>
<INCLUDEPATH value="TntUnicodeControls;..\..;..\..\..\..\..\icu-sword\source\common;..\..\..\..\..\icu-sword\source\i18n;..\..\..\..\include;$(BCB)\include;$(BCB)\include\vcl;rxlib"/>
@@ -55,11 +55,11 @@
<IDLCFLAGS value="-I..\.. -I..\..\..\..\..\icu-sword\source\common
-I..\..\..\..\..\icu-sword\source\i18n -I..\..\..\..\include
-I$(BCB)\include -I$(BCB)\include\vcl -Irxlib -src_suffix cpp -D_ICU_"/>
- <CFLAG1 value="-Od -Vx -Ve -RT- -X- -r- -a8 -4 -b- -k -y -v -vi- -c -tW -tWM"/>
- <PFLAGS value="-N2obj -N0obj -$Y+ -$W -$O- -v -M -JPHNE"/>
+ <CFLAG1 value="-O2 -Vx -Ve -RT- -X- -a8 -4 -b- -k- -vi -c -tW -tWM"/>
+ <PFLAGS value="-N2obj -N0obj -$Y- -$L- -$D- -v -M -JPHNE"/>
<RFLAGS value=""/>
- <AFLAGS value="/mx /w2 /zi"/>
- <LFLAGS value="-Iobj -D&quot;&quot; -aa -Tpe -GD -s -Gn -v"/>
+ <AFLAGS value="/mx /w2 /zn"/>
+ <LFLAGS value="-Iobj -D&quot;&quot; -aa -Tpe -GD -s -Gn"/>
</OPTIONS>
<LINKER>
<ALLOBJ value="c0w32.obj $(OBJFILES)"/>
@@ -73,7 +73,7 @@ AutoIncBuild=1
MajorVer=1
MinorVer=5
Release=3
-Build=116
+Build=118
Debug=0
PreRelease=0
Special=0
@@ -85,13 +85,13 @@ CodePage=1252
[Version Info Keys]
CompanyName=CrossWire Software &amp; Bible Society
FileDescription=Windows 32bit User Interface to The SWORD Project
-FileVersion=1.5.3.116
+FileVersion=1.5.3.118
InternalName=biblecs
LegalCopyright=(c) 2002 CrossWire Bible Society under the terms of the GNU General Public License
LegalTrademarks=
OriginalFilename=
ProductName=The SWORD Project
-ProductVersion=1.5.4rc2
+ProductVersion=1.5.4rc4
Comments=Seek Him and you will find Him
[HistoryLists\hlIncludePath]
@@ -125,8 +125,8 @@ Item0=$(BCB)\source\vcl
[HistoryLists\hlConditionals]
Count=5
-Item0=_ICU_;_ICUSWORD_;_DEBUG
-Item1=_ICU_;_ICUSWORD_
+Item0=_ICU_;_ICUSWORD_
+Item1=_ICU_;_ICUSWORD_;_DEBUG
Item2=_ICU_
Item3=_ICU_;_DEBUG
Item4=_DEBUG
diff --git a/apps/windoze/CBuilder5/BibleCS/sword.res b/apps/windoze/CBuilder5/BibleCS/sword.res
index 2908244..9366299 100644
--- a/apps/windoze/CBuilder5/BibleCS/sword.res
+++ b/apps/windoze/CBuilder5/BibleCS/sword.res
Binary files differ
diff --git a/apps/windoze/CBuilder5/BibleCS/swordlib.bpr b/apps/windoze/CBuilder5/BibleCS/swordlib.bpr
index b97621d..52ae339 100644
--- a/apps/windoze/CBuilder5/BibleCS/swordlib.bpr
+++ b/apps/windoze/CBuilder5/BibleCS/swordlib.bpr
@@ -78,7 +78,7 @@
<DEBUGLIBPATH value=""/>
<RELEASELIBPATH value=""/>
<LINKER value="TLib"/>
- <USERDEFINES value="_ICU_;_ICUSWORD_;_DEBUG"/>
+ <USERDEFINES value="_ICU_;_ICUSWORD_"/>
<SYSDEFINES value="NO_STRICT;_NO_VCL"/>
<MAINSOURCE value="swordlib.cpp"/>
<INCLUDEPATH value="..\..;..\..\..\..\src\modules\genbook\rawgenbook;..\..\..\..\src\modules\genbook;..\..\..\..\src\modules\lexdict\zld;..\..\..\..\..\icu-sword\source\common;..\..\..\..\..\icu-sword\source\i18n;..\..\..\..\src\utilfuns\zlib;..\..\..\..\src\modules\lexdict\rawld4;..\..\..\..\src\modules\comments\zcom;..\..\..\..\src\modules\texts\ztext;..\..\..\..\src\frontend;..\..\..;..\..\..\..\utilfuns;..\..\..\framework;..\..\..\..\src\modules\comments\rawfiles;..\..\..\..\src\modules\comments\hrefcom;..\..\..\..\include;..\..\..\..\frontend;..\..\..\..\src\utilfuns;..\..\..\..\src\modules;..\..\..\..\src\modules\texts;..\..\..\..\src\modules\texts\rawtext;..\..\..\..\src\modules\texts\rawgbf;..\..\..\..\src\modules\lexdict;..\..\..\..\src\modules\lexdict\rawld;..\..\..\..\src\modules\filters;..\..\..\..\src\modules\common;..\..\..\..\src\modules\comments;..\..\..\..\src\modules\comments\rawcom;..\..\..\..\src\mgr;..\..\..\..\src\keys;$(BCB)\include;$(BCB)\include\vcl"/>
@@ -107,11 +107,11 @@
-I..\..\..\..\src\modules\comments\rawcom -I..\..\..\..\src\mgr
-I..\..\..\..\src\keys -I$(BCB)\include -I$(BCB)\include\vcl -src_suffix
cpp -D_ICU_ -D_DEBUG"/>
- <CFLAG1 value="-Od -H=c:\PROGRA~1\borland\CBUILD~2\lib\vcl50.csm -Hc -Vx -Ve -RT- -X- -r-
- -a8 -4 -b- -k -y -v -vi- -c -g0 -tWM"/>
- <PFLAGS value="-N2..\..\..\..\obj -N0..\..\..\..\obj -$Y+ -$W -$O- -v -M -JPHNE"/>
+ <CFLAG1 value="-O2 -H=c:\PROGRA~1\borland\CBUILD~2\lib\vcl50.csm -Hc -Vx -Ve -RT- -X- -a8
+ -4 -b- -k- -vi -c -g0 -tWM"/>
+ <PFLAGS value="-N2..\..\..\..\obj -N0..\..\..\..\obj -$Y- -$L- -$D- -v -M -JPHNE"/>
<RFLAGS value=""/>
- <AFLAGS value="/mx /w2 /zi"/>
+ <AFLAGS value="/mx /w2 /zn"/>
<LFLAGS value="/P512"/>
</OPTIONS>
<LINKER>
@@ -159,8 +159,8 @@ Item5=..\..\..\..\src\modules\lexdict\zld;..\..;..\..\..\..\src\utilfuns\zlib;..
[HistoryLists\hlConditionals]
Count=5
-Item0=_ICU_;_ICUSWORD_;_DEBUG
-Item1=_ICU_;_ICUSWORD_
+Item0=_ICU_;_ICUSWORD_
+Item1=_ICU_;_ICUSWORD_;_DEBUG
Item2=_ICU_
Item3=_ICU_;_DEBUG
Item4=_DEBUG
diff --git a/include/listkey.h b/include/listkey.h
index b64820f..6ea2b95 100644
--- a/include/listkey.h
+++ b/include/listkey.h
@@ -4,7 +4,7 @@
* (e.g. verse, word,
* place, etc.)
*
- * $Id: listkey.h,v 1.14 2002/08/27 22:52:36 scribe Exp $
+ * $Id: listkey.h,v 1.15 2002/09/11 07:04:20 scribe Exp $
*
* Copyright 1998 CrossWire Bible Society (http://www.crosswire.org)
* CrossWire Bible Society
@@ -111,6 +111,7 @@ public:
* The first parameter is the new index.
*/
virtual long Index (long index) { SetToElement (index); return Index (); }
+ virtual const char *getText() const;
SWKEY_OPERATORS
ListKey & operator =(const ListKey &key) { copyFrom(key); return *this; }
diff --git a/include/treekeyidx.h b/include/treekeyidx.h
index bd28736..170d87c 100644
--- a/include/treekeyidx.h
+++ b/include/treekeyidx.h
@@ -1,7 +1,7 @@
/******************************************************************************
* versekey.h - code for class 'versekey'- a standard Biblical verse key
*
- * $Id: treekeyidx.h,v 1.3 2002/07/28 01:48:38 scribe Exp $
+ * $Id: treekeyidx.h,v 1.4 2002/09/11 07:04:20 scribe Exp $
*
* Copyright 1998 CrossWire Bible Society (http://www.crosswire.org)
* CrossWire Bible Society
@@ -66,6 +66,7 @@ public:
TreeKeyIdx (const char *idxPath, int fileMode = -1);
~TreeKeyIdx ();
+ virtual SWKey *clone() const;
virtual const char *getLocalName();
virtual const char *setLocalName(const char *);
diff --git a/src/keys/listkey.cpp b/src/keys/listkey.cpp
index 3d5a897..08a1015 100644
--- a/src/keys/listkey.cpp
+++ b/src/keys/listkey.cpp
@@ -145,8 +145,9 @@ void ListKey::increment(int step) {
Error(); // clear error
for(; step && !Error(); step--) {
if (arraypos < arraycnt) {
- (*(array[arraypos]))++;
- if (array[arraypos]->Error()) {
+ if (array[arraypos]->isBoundSet())
+ (*(array[arraypos]))++;
+ if ((array[arraypos]->Error()) || (!array[arraypos]->isBoundSet())) {
SetToElement(arraypos+1);
}
else *this = (const char *)(*array[arraypos]);
@@ -168,8 +169,9 @@ void ListKey::decrement(int step) {
Error(); // clear error
for(; step && !Error(); step--) {
if (arraypos > -1) {
- (*(array[arraypos]))--;
- if (array[arraypos]->Error()) {
+ if (array[arraypos]->isBoundSet())
+ (*(array[arraypos]))--;
+ if ((array[arraypos]->Error()) || (!array[arraypos]->isBoundSet())) {
SetToElement(arraypos-1, BOTTOM);
}
else *this = (const char *)(*array[arraypos]);
@@ -259,7 +261,7 @@ void ListKey::Remove() {
/******************************************************************************
- * VerseKey::getRangeText - returns parsable range text for this key
+ * ListKey::getRangeText - returns parsable range text for this key
*/
const char *ListKey::getRangeText() const {
@@ -271,6 +273,19 @@ const char *ListKey::getRangeText() const {
strcat(buf, "; ");
}
stdstr(&rangeText, buf);
+ delete [] buf;
return rangeText;
}
+
+/******************************************************************************
+ * ListKey::getText - returns text key if (const char *) cast is requested
+ */
+
+const char *ListKey::getText() const {
+ SWKey *key = GetElement();
+ return (key) ? key->getText() : keytext;
+}
+
+
+
diff --git a/src/keys/swkey.cpp b/src/keys/swkey.cpp
index f2491c4..1551284 100644
--- a/src/keys/swkey.cpp
+++ b/src/keys/swkey.cpp
@@ -42,6 +42,7 @@ SWKey::SWKey(SWKey const &k)
void SWKey::init() {
myclass = &classdef;
+ boundSet = false;
}
SWKey *SWKey::clone() const
diff --git a/src/keys/treekeyidx.cpp b/src/keys/treekeyidx.cpp
index acd9b5a..f5d21b5 100644
--- a/src/keys/treekeyidx.cpp
+++ b/src/keys/treekeyidx.cpp
@@ -1,7 +1,7 @@
/******************************************************************************
* versekey.h - code for class 'versekey'- a standard Biblical verse key
*
- * $Id: treekeyidx.cpp,v 1.7 2002/04/15 21:26:44 scribe Exp $
+ * $Id: treekeyidx.cpp,v 1.8 2002/09/11 07:04:20 scribe Exp $
*
* Copyright 1998 CrossWire Bible Society (http://www.crosswire.org)
* CrossWire Bible Society
@@ -588,3 +588,10 @@ TreeKeyIdx::TreeNode::~TreeNode() {
if (userData)
delete [] userData;
}
+
+
+SWKey *TreeKeyIdx::clone() const
+{
+ return new TreeKeyIdx(*this);
+}
+
diff --git a/src/modules/common/rawstr.cpp b/src/modules/common/rawstr.cpp
index c7363d9..7b23041 100644
--- a/src/modules/common/rawstr.cpp
+++ b/src/modules/common/rawstr.cpp
@@ -168,7 +168,7 @@ signed char RawStr::findoffset(const char *ikey, long *start, unsigned short *si
if (*ikey) {
headoff = 0;
- key = new char [ strlen(ikey) + 1 ];
+ key = new char [ strlen(ikey) + 10 ]; // just in case toupper needs a few extra
strcpy(key, ikey);
toupperstr_utf8(key);