1
0
Fork 0
mirror of git://git.code.sf.net/p/cdesktopenv/code synced 2025-02-15 04:32:24 +00:00

dthelp: use system locales.

This commit is contained in:
Liang Chang 2022-01-19 07:17:46 +08:00
parent f3965ed394
commit b239c00ae8
7 changed files with 39 additions and 588 deletions

View file

@ -72,7 +72,6 @@ $COPYRIGHT$:
#include "DtI/HelpTermP.h" /* from libDtHelp */
#include "Dt/CanvasP.h" /* from libDtHelp */
#include "StringFuncsI.h" /* from libDtHelp */
#include "Dt/LocaleXlate.h" /* from libDtHelp */
#include "DtI/bufioI.h" /* from libDtHelp; required for AccessI.h */
#include "DtI/FileUtilsI.h" /* from libDtHelp */
#include "DtI/Access.h" /* from libDtHelp */
@ -468,9 +467,7 @@ int IconvFile(
for (i=0; i<NUMSTRS; i++) loc[i] = NULL;
/* get the normalized current codeset */
_DtHelpCeXlateOpToStdLocale (
DtLCX_OPER_SETLOCALE, setlocale(LC_CTYPE,NULL),
&loc[CUR_LOCALE], NULL, &loc[CUR_CODESET]);
_DtHelpCeGetLcCtype(&loc[CUR_LOCALE], NULL, &loc[CUR_CODESET]);
/* get the normalized volume codeset */
loc[VOL_LOCALE] = _DtHelpCeGetVolumeLocale(helpVolumeHandle);
@ -495,14 +492,10 @@ int IconvFile(
}
/* get the source codeset */
_DtHelpCeXlateStdToOpLocale (
DtLCX_OPER_ICONV1, loc[VOL_LOCALE],
"iso8859_1", &loc[FROM_CODESET]);
loc[FROM_CODESET] = strdup(loc[VOL_LOCALE]);
/* get the target codeset */
_DtHelpCeXlateStdToOpLocale (
DtLCX_OPER_ICONV1, loc[CUR_LOCALE],
"iso8859_1", &loc[TO_CODESET]);
loc[TO_CODESET] = strdup(loc[CUR_LOCALE]);
/* construct the command line */
destFile = _DtHPrCreateTmpFile(TMPFILE_PREFIX,TMPFILE_SUFFIX);
@ -742,9 +735,7 @@ int IconvBuffer(
for (i=0; i<NUMSTRS; i++) loc[i] = NULL;
/* get the normalized current codeset */
_DtHelpCeXlateOpToStdLocale (
DtLCX_OPER_SETLOCALE, setlocale(LC_CTYPE,NULL),
&loc[CUR_LOCALE], NULL, &loc[CUR_CODESET]);
_DtHelpCeGetLcCtype(&loc[CUR_LOCALE], NULL, &loc[CUR_CODESET]);
/* get the normalized volume codeset */
loc[VOL_LOCALE] = _DtHelpCeGetVolumeLocale(helpVolumeHandle);
@ -769,14 +760,10 @@ int IconvBuffer(
}
/* get the source codeset */
_DtHelpCeXlateStdToOpLocale (
DtLCX_OPER_ICONV1, loc[VOL_LOCALE],
"iso8859_1", &loc[FROM_CODESET]);
loc[FROM_CODESET] = strdup(loc[VOL_LOCALE]);
/* get the target codeset */
_DtHelpCeXlateStdToOpLocale (
DtLCX_OPER_ICONV1, loc[CUR_LOCALE],
"iso8859_1", &loc[TO_CODESET]);
loc[TO_CODESET] = strdup(loc[CUR_LOCALE]);
if ( isFirst ) {
CD = iconv_open( loc[TO_CODESET], loc[FROM_CODESET] );

View file

@ -16,28 +16,17 @@ HELPUTILLIB = $(HELPTAG)/util/libutil.a
HELPIFFILE = $(HELPTAGSRC)/help.if
HELPTSSFILE = $(HELPTAGSRC)/htag.tss
XLATESRCS = XlationSvc.c LocaleXlate.c
XLATESRCDIR = ${top_srcdir}/lib/DtSvc/DtUtil2
$(XLATESRCS): XDONE
XDONE: $(XLATESRCDIR)/XlationSvc.c $(XLATESRCDIR)/LocaleXlate.c
$(RM) $(XLATESRCS)
$(CP) $(XLATESRCDIR)/XlationSvc.c XlationSvc.c
$(CP) $(XLATESRCDIR)/LocaleXlate.c LocaleXlate.c
XDONE:
cd ../parser; $(MAKE) CDONE
touch XDONE
BUILT_SOURCES = $(XLATESRCS)
CLEANFILES = $(BUILT_SOURCES) XDONE
BUILT_SOURCES = XDONE
CLEANFILES = $(BUILT_SOURCES)
AM_CPPFLAGS = -I$(HELPPARSERSRC) -I$(HELPUTILSRC) \
-I$(HELPELTDEFSRC) -I$(XLATESRCDIR) $(DT_INCDIR)
-I$(HELPELTDEFSRC) $(DT_INCDIR)
# needed by parser/
noinst_LIBRARIES = libhelptag.a
libhelptag_a_SOURCES = custom.c default.c help.c make.c option.c \
special.c out.c xref.c $(XLATESRCS) \
global.c ../parser/delim.h
libhelptag_a_SOURCES = custom.c default.c help.c make.c option.c \
special.c out.c xref.c global.c ../parser/delim.h

View file

@ -29,9 +29,6 @@
#include "userinc.h"
#include "globdec.h"
#include "LocaleXlate.h"
#include "XlationSvc.h"
void m_mberr1(char *text, const char *arg);
void assert_hometopic_exists(void)
@ -1444,220 +1441,11 @@ return "";
}
/* A function that takes a language/charset pair and:
* if they are standard, leave them unchanged but get local
* versions and setlocale(3) using those
* if they are local, setlocale(3) with them and replace them with
* standard versions.
*/
static void
SetStdLocale(char *pLang, char *pCharset)
{
static const char *cString = "C";
static const char *isoString = "ISO-8859-1";
_DtXlateDb myDb = NULL;
char myPlatform[_DtPLATFORM_MAX_LEN+1];
char myLocale[256]; /* arbitrarily large */
char *locale;
char *lang = NULL;
char *charset = NULL;
int execVer;
int compVer;
int isStd;
if (*pCharset)
{
snprintf(myLocale, sizeof(myLocale), "%s.%s", pLang, pCharset);
}
else
{
snprintf(myLocale, sizeof(myLocale), "%s", pLang);
}
if ((_DtLcxOpenAllDbs(&myDb) != 0) ||
(_DtXlateGetXlateEnv(myDb,myPlatform,&execVer,&compVer) != 0))
{
fprintf(stderr,
"Warning: could not open locale translation database.\n");
if (m_errfile != stderr)
fprintf(m_errfile,
"Warning: could not open locale translation database.\n");
strcpy(pLang, cString);
strcpy(pCharset, isoString);
if (myDb != 0)
_DtLcxCloseDb(&myDb);
return;
}
isStd = !_DtLcxXlateOpToStd(myDb,
"CDE",
0,
DtLCX_OPER_STD,
myLocale,
NULL,
NULL,
NULL,
NULL);
if (isStd)
{ /* already standard - get local versions and set locale */
if (_DtLcxXlateStdToOp(myDb,
myPlatform,
compVer,
DtLCX_OPER_SETLOCALE,
myLocale,
NULL,
NULL,
NULL,
&locale))
{
fprintf(stderr,
"Warning: could not translate CDE locale to local\n");
if (m_errfile != stderr)
fprintf(m_errfile,
"Warning: could not translate CDE locale to local\n");
strcpy(pLang, cString);
strcpy(pCharset, isoString);
_DtLcxCloseDb(&myDb);
return;
}
else
{
setlocale(LC_CTYPE, locale);
mb_free(&locale);
}
}
else
{ /* already local - set locale and get standard versions */
if (_DtLcxXlateOpToStd(myDb,
myPlatform,
compVer,
DtLCX_OPER_SETLOCALE,
myLocale,
NULL,
&lang,
&charset,
NULL))
{
fprintf(stderr,
"Warning: could not translate local locale to CDE\n");
if (m_errfile != stderr)
fprintf(m_errfile,
"Warning: could not translate local locale to CDE\n");
strcpy(pLang, cString);
strcpy(pCharset, isoString);
_DtLcxCloseDb(&myDb);
return;
}
setlocale(LC_CTYPE, myLocale);
if (*lang)
{
strcpy(pLang, lang);
}
else
strcpy(pLang, cString);
if (*charset)
{
strcpy(pCharset, charset);
}
else
strcpy(pCharset, isoString);
}
mb_free(&lang);
mb_free(&charset);
free(charset);
_DtLcxCloseDb(&myDb);
}
/* A function that takes the return value from a call to setlocale()
* and extracts the langterr.charset data from it in a vendor neutral
* fashion.
*/
static char *
GetStdLocale(void)
{
static char buffer[256];
static char *cString = "C";
_DtXlateDb myDb = NULL;
char myPlatform[_DtPLATFORM_MAX_LEN+1];
char *opLocale;
char *stdLocale;
int execVer;
int compVer;
if ((_DtLcxOpenAllDbs(&myDb) == 0) &&
(_DtXlateGetXlateEnv(myDb,myPlatform,&execVer,&compVer) != 0))
{
fprintf(stderr,
"Warning: could not open locale translation database.\n");
if (m_errfile != stderr)
fprintf(m_errfile,
"Warning: could not open locale translation database.\n");
return cString;
}
if (_DtLcxXlateOpToStd(myDb,
myPlatform,
compVer,
DtLCX_OPER_SETLOCALE,
setlocale(LC_ALL, NULL),
&stdLocale,
NULL,
NULL,
NULL))
{
fprintf(stderr,
"Warning: could not translate local locale to CDE\n");
if (m_errfile != stderr)
fprintf(m_errfile,
"Warning: could not translate local locale to CDE\n");
_DtLcxCloseDb(&myDb);
return cString;
}
if (_DtLcxXlateStdToOp(myDb,
myPlatform,
compVer,
DtLCX_OPER_SETLOCALE,
stdLocale,
NULL,
NULL,
NULL,
&opLocale))
{
fprintf(stderr,
"Warning: could not translate CDE locale to local\n");
if (m_errfile != stderr)
fprintf(m_errfile,
"Warning: could not translate CDE locale to local\n");
mb_free(&stdLocale);
_DtLcxCloseDb(&myDb);
return cString;
}
_DtLcxCloseDb(&myDb);
strcpy(buffer, opLocale);
mb_free(&stdLocale);
mb_free(&opLocale);
return buffer;
}
/*
* Look for a entities by the name of "LanguageElementDefaultLocale".
* and "LanguageElementDefaultCharset". If not found, get the user's
* locale. If LanguageElementDefaultCharset was set, use that in
* place of the charset of the local (if any). Call SetStdLocale()
* to insure the language and charset are in the normalized form.
* SetStdLocale() will also set the current locale to the local
* versions of the language and charset.
* place of the charset of the local (if any).
*/
void
SetDefaultLocale(void)
@ -1690,7 +1478,7 @@ m_free(elementName,"wide character string");
if (!locale)
{
tmpStr = GetStdLocale();
if ((tmpStr = setlocale(LC_CTYPE, NULL)) == NULL) tmpStr = "C.UTF-8";
locale = mb_malloc(strlen(tmpStr)+1);
strcpy(locale, tmpStr);
}
@ -1724,10 +1512,11 @@ if (!charset)
if (dotPtr)
*dotPtr = 0;
snprintf(stdLang, sizeof(stdLang), "%s", locale);
if (charset)
snprintf(stdCharset, sizeof(stdCharset), "%s", charset);
SetStdLocale(stdLang, stdCharset);
if (charset) snprintf(stdCharset, sizeof(stdCharset), "%s", charset);
else snprintf(stdCharset, sizeof(stdCharset), "UTF-8");
snprintf(stdLang, sizeof(stdLang), "%s.%s", locale, stdCharset);
setlocale(LC_CTYPE, stdLang);
if (*stdCharset)
helpcharset = MakeWideCharString(stdCharset);

View file

@ -16,28 +16,17 @@ HELPUTILLIB = $(HELPTAG)/util/libutil.a
HELPIFFILE = $(HELPTAGSRC)/help.if
HELPTSSFILE = $(HELPTAGSRC)/htag.tss
XLATESRCS = XlationSvc.c LocaleXlate.c
XLATESRCDIR = ${top_srcdir}/lib/DtSvc/DtUtil2
$(XLATESRCS): XDONE
XDONE: $(XLATESRCDIR)/XlationSvc.c $(XLATESRCDIR)/LocaleXlate.c
$(RM) $(XLATESRCS)
$(CP) $(XLATESRCDIR)/XlationSvc.c XlationSvc.c
$(CP) $(XLATESRCDIR)/LocaleXlate.c LocaleXlate.c
XDONE:
cd ../parser; $(MAKE) CDONE
touch XDONE
BUILT_SOURCES = $(XLATESRCS)
CLEANFILES = $(BUILT_SOURCES) XDONE
BUILT_SOURCES = XDONE
CLEANFILES = $(BUILT_SOURCES)
AM_CPPFLAGS = -I. -I$(HELPPARSERSRC) -I$(HELPUTILSRC) \
-I$(HELPELTDEFSRC) -I$(XLATESRCDIR) $(DT_INCDIR)
-I$(HELPELTDEFSRC) $(DT_INCDIR)
# needed by parser/
noinst_LIBRARIES = libhelptag.a
libhelptag_a_SOURCES = custom.c default.c help.c make.c option.c \
special.c out.c xref.c $(XLATESRCS) \
global.c ../parser/delim.h
libhelptag_a_SOURCES = custom.c default.c help.c make.c option.c \
special.c out.c xref.c global.c ../parser/delim.h

View file

@ -30,9 +30,6 @@
#include "globdec.h"
#include "proto.h"
#include "LocaleXlate.h"
#include "XlationSvc.h"
void m_mberr1(char *text, const char *arg);
void assert_hometopic_exists(void)
@ -1436,218 +1433,11 @@ return "";
}
/* A function that takes a language/charset pair and:
* if they are standard, leave them unchanged but get local
* versions and setlocale(3) using those
* if they are local, setlocale(3) with them and replace them with
* standard versions.
*/
static void
SetStdLocale(char *pLang, char *pCharset)
{
static const char *cString = "C";
static const char *isoString = "ISO-8859-1";
_DtXlateDb myDb = NULL;
char myPlatform[_DtPLATFORM_MAX_LEN+1];
char myLocale[256]; /* arbitrarily large */
char myLocaleTemp[sizeof(myLocale)]; /* non-arbitrarily the same */
char *locale;
char *lang;
char *charset;
int execVer;
int compVer;
int isStd;
snprintf(myLocale, sizeof(myLocale), "%s", pLang);
if (*pCharset)
{
snprintf(myLocaleTemp, sizeof(myLocaleTemp), "%s.%s", myLocale, pCharset);
strcpy(myLocale, myLocaleTemp);
}
if ((_DtLcxOpenAllDbs(&myDb) != 0) ||
(_DtXlateGetXlateEnv(myDb,myPlatform,&execVer,&compVer) != 0))
{
fprintf(stderr,
"Warning: could not open locale translation database.\n");
if (m_errfile != stderr)
fprintf(m_errfile,
"Warning: could not open locale translation database.\n");
strcpy(pLang, cString);
strcpy(pCharset, isoString);
if (myDb != 0)
_DtLcxCloseDb(&myDb);
return;
}
isStd = !_DtLcxXlateOpToStd(myDb,
"CDE",
0,
DtLCX_OPER_STD,
myLocale,
NULL,
NULL,
NULL,
NULL);
if (isStd)
{ /* already standard - get local versions and set locale */
if (_DtLcxXlateStdToOp(myDb,
myPlatform,
compVer,
DtLCX_OPER_SETLOCALE,
myLocale,
NULL,
NULL,
NULL,
&locale))
{
fprintf(stderr,
"Warning: could not translate CDE locale to local\n");
if (m_errfile != stderr)
fprintf(m_errfile,
"Warning: could not translate CDE locale to local\n");
strcpy(pLang, cString);
strcpy(pCharset, isoString);
_DtLcxCloseDb(&myDb);
return;
}
else
{
setlocale(LC_CTYPE, locale);
mb_free(&locale);
}
}
else
{ /* already local - set locale and get standard versions */
if (_DtLcxXlateOpToStd(myDb,
myPlatform,
compVer,
DtLCX_OPER_SETLOCALE,
myLocale,
NULL,
&lang,
&charset,
NULL))
{
fprintf(stderr,
"Warning: could not translate local locale to CDE\n");
if (m_errfile != stderr)
fprintf(m_errfile,
"Warning: could not translate local locale to CDE\n");
strcpy(pLang, cString);
strcpy(pCharset, isoString);
_DtLcxCloseDb(&myDb);
return;
}
setlocale(LC_CTYPE, myLocale);
if (*lang)
{
strcpy(pLang, lang);
mb_free(&lang);
}
else
strcpy(pLang, cString);
if ( *charset)
{
strcpy(pCharset, charset);
}
else
strcpy(pCharset, isoString);
}
mb_free(&charset);
_DtLcxCloseDb(&myDb);
free(charset);
free(lang);
}
/* A function that takes the return value from a call to setlocale()
* and extracts the langterr.charset data from it in a vendor neutral
* fashion.
*/
static char *
GetStdLocale(void)
{
static char buffer[256];
static char *cString = "C";
_DtXlateDb myDb = NULL;
char myPlatform[_DtPLATFORM_MAX_LEN+1];
char *opLocale;
char *stdLocale;
int execVer;
int compVer;
if ((_DtLcxOpenAllDbs(&myDb) == 0) &&
(_DtXlateGetXlateEnv(myDb,myPlatform,&execVer,&compVer) != 0))
{
fprintf(stderr,
"Warning: could not open locale translation database.\n");
if (m_errfile != stderr)
fprintf(m_errfile,
"Warning: could not open locale translation database.\n");
return cString;
}
if (_DtLcxXlateOpToStd(myDb,
myPlatform,
compVer,
DtLCX_OPER_SETLOCALE,
setlocale(LC_ALL, NULL),
&stdLocale,
NULL,
NULL,
NULL))
{
fprintf(stderr,
"Warning: could not translate local locale to CDE\n");
if (m_errfile != stderr)
fprintf(m_errfile,
"Warning: could not translate local locale to CDE\n");
_DtLcxCloseDb(&myDb);
return cString;
}
if (_DtLcxXlateStdToOp(myDb,
myPlatform,
compVer,
DtLCX_OPER_SETLOCALE,
stdLocale,
NULL,
NULL,
NULL,
&opLocale))
{
fprintf(stderr,
"Warning: could not translate CDE locale to local\n");
if (m_errfile != stderr)
fprintf(m_errfile,
"Warning: could not translate CDE locale to local\n");
mb_free(&stdLocale);
_DtLcxCloseDb(&myDb);
return cString;
}
_DtLcxCloseDb(&myDb);
strcpy(buffer, opLocale);
mb_free(&stdLocale);
mb_free(&opLocale);
return buffer;
}
/*
* Look for a entities by the name of "LanguageElementDefaultLocale".
* and "LanguageElementDefaultCharset". If not found, get the user's
* locale. If LanguageElementDefaultCharset was set, use that in
* place of the charset of the local (if any). Call SetStdLocale()
* to insure the language and charset are in the normalized form.
* SetStdLocale() will also set the current locale to the local
* versions of the language and charset.
* place of the charset of the local (if any).
*/
void
SetDefaultLocale(void)
@ -1680,7 +1470,7 @@ m_free(elementName,"wide character string");
if (!locale)
{
tmpStr = GetStdLocale();
if ((tmpStr = setlocale(LC_CTYPE, NULL)) == NULL) tmpStr = "C.UTF-8";
locale = mb_malloc(strlen(tmpStr)+1);
strcpy(locale, tmpStr);
}
@ -1714,10 +1504,11 @@ if (!charset)
if (dotPtr)
*dotPtr = '\0';
snprintf(stdLang, sizeof(stdLang), "%s", locale);
if (charset)
snprintf(stdCharset, sizeof(stdCharset), "%s", charset);
SetStdLocale(stdLang, stdCharset);
if (charset) snprintf(stdCharset, sizeof(stdCharset), "%s", charset);
else snprintf(stdCharset, sizeof(stdCharset), "UTF-8");
snprintf(stdLang, sizeof(stdLang), "%s.%s", locale, stdCharset);
setlocale(LC_CTYPE, stdLang);
if (*stdCharset)
helpcharset = MakeWideCharString(stdCharset);

View file

@ -15,28 +15,9 @@ SDLBUILDSRC = $(HTAG2)/build
SDLUTILLIB = $(HTAG2)/util/libutil.a
SDLIFFILE = $(HTAG2SRC)/help.if
XLATESRCS = XlationSvc.c LocaleXlate.c
XLATESRCDIR = ${top_srcdir}/lib/DtSvc/DtUtil2
$(XLATESRCS): XDONE
XDONE: $(XLATESRCDIR)/XlationSvc.c $(XLATESRCDIR)/LocaleXlate.c
$(RM) $(XLATESRCS)
$(CP) $(XLATESRCDIR)/XlationSvc.c XlationSvc.c
$(CP) $(XLATESRCDIR)/LocaleXlate.c LocaleXlate.c
cd ../parser; $(MAKE) CDONE
touch XDONE
BUILT_SOURCES = $(XLATESRCS)
CLEANFILES = $(BUILT_SOURCES) XDONE
AM_CPPFLAGS = -I$(SDLPARSERSRC) -I$(SDLUTILSRC) \
-I$(SDLELTDEFSRC) -I$(XLATESRCDIR) $(DT_INCDIR)
-I$(SDLELTDEFSRC) $(DT_INCDIR)
# needed by parser/
noinst_LIBRARIES = libhelptag.a
libhelptag_a_SOURCES = custom.c sdl.c option.c \
out.c $(XLATESRCS) \
global.c ../parser/delim.h
libhelptag_a_SOURCES = custom.c sdl.c option.c out.c global.c ../parser/delim.h

View file

@ -39,9 +39,6 @@
#include "userinc.h"
#include "globdec.h"
#include "LocaleXlate.h"
#include "XlationSvc.h"
static char *operantLocale;
static char openLoids[] = "<LOIDS COUNT=\"%d\">\n";
@ -6536,27 +6533,16 @@ while (name = CycleEnt(FALSE, &type, &content, &wheredef));
}
/* A function that takes a language/charset pair and:
* if they are standard, leave them unchanged but get local
* versions and setlocale(3) using those
* if they are local, setlocale(3) with them and replace them with
* standard versions.
/* A function that takes a language/charset pair and setlocale(3) using those.
*/
void
SetLocale(M_WCHAR *pLang, M_WCHAR *pCharset)
{
const char cString[] = "C";
_DtXlateDb myDb = NULL;
char myPlatform[_DtPLATFORM_MAX_LEN+1];
char myLocale[256]; /* arbitrarily large */
char *mb_lang;
char *mb_charset;
char *locale;
char *lang;
char *charset;
int execVer;
int compVer;
int isStd;
if (!pLang && !pCharset)
return;
@ -6576,76 +6562,15 @@ if (mb_charset && *mb_charset)
strcat(myLocale, mb_charset);
}
if ((_DtLcxOpenAllDbs(&myDb) != 0) ||
(_DtXlateGetXlateEnv(myDb,myPlatform,&execVer,&compVer) != 0))
{
fprintf(stderr,
"Warning: could not open locale translation database.\n");
if (m_errfile != stderr)
fprintf(m_errfile,
"Warning: could not open locale translation database.\n");
if (mb_lang != cString)
mb_free(&mb_lang);
if (mb_charset)
mb_free(&mb_charset);
if (myDb != 0)
_DtLcxCloseDb(&myDb);
return;
}
isStd = !_DtLcxXlateOpToStd(myDb,
"CDE",
0,
DtLCX_OPER_STD,
myLocale,
NULL,
NULL,
NULL,
NULL);
if (isStd)
{ /* already standard - get local versions and set locale */
if (_DtLcxXlateStdToOp(myDb,
myPlatform,
compVer,
DtLCX_OPER_SETLOCALE,
myLocale,
NULL,
NULL,
NULL,
&locale))
{
fprintf(stderr,
"Warning: could not translate CDE locale to local\n");
if (m_errfile != stderr)
fprintf(m_errfile,
"Warning: could not translate CDE locale to local\n");
_DtLcxCloseDb(&myDb);
if (mb_lang != cString)
mb_free(&mb_lang);
if (mb_charset)
mb_free(&mb_charset);
return;
}
else
{
setlocale(LC_CTYPE, locale);
operantLocale = mb_malloc(strlen(locale)+1);
strcpy(operantLocale, locale);
}
}
else
{ /* already local - just set locale */
setlocale(LC_CTYPE, myLocale);
operantLocale = mb_malloc(strlen(myLocale)+1);
strcpy(operantLocale, myLocale);
}
setlocale(LC_CTYPE, myLocale);
mb_free(&operantLocale);
operantLocale = mb_malloc(strlen(myLocale)+1);
strcpy(operantLocale, myLocale);
if (mb_lang != cString)
mb_free(&mb_lang);
if (mb_charset)
mb_free(&mb_charset);
_DtLcxCloseDb(&myDb);
}