System update to UTF-8

This commit is contained in:
Michiel Broek
2007-02-25 20:28:00 +00:00
parent 2a0fa86557
commit c5e7083deb
52 changed files with 754 additions and 710 deletions

View File

@@ -34,6 +34,7 @@
int use_tran1 = FALSE; /* Translate stage 1 active */
int use_tran2 = FALSE; /* Translate stage 2 active */
int loglevel = '-'; /* Debug loglevel */
iconv_t cd1; /* Conversion descriptor 1 */
iconv_t cd2; /* Conversion descriptor 2 */
@@ -82,7 +83,7 @@ struct _charmap charmap[] = {
{FTNC_CP850, (char *)"CP850 2", (char *)"iso-8859-1", (char *)"CP850", (char *)"ISO-8859-1", (char *)"en_US", (char *)"IBM codepage 850 (Latin-1)"},
{FTNC_LATIN_2,(char *)"LATIN-2 2",(char *)"iso-8859-2", (char *)"LATIN2", (char *)"ISO-8859-2", (char *)"cs_CZ", (char *)"ISO 8859-2 (Eastern European)"},
{FTNC_CP852, (char *)"CP852 2", (char *)"iso-8859-2", (char *)"CP852", (char *)"ISO-8859-2", (char *)"cs_CZ", (char *)"IBM codepage 852 (Czech, Latin-1)"},
{FTNC_CP895, (char *)"CP895 2", (char *)"iso-8859-2", (char *)"CP895", (char *)"ISO-8859-2", (char *)"cs_CZ", (char *)"IBM codepage 895 (Czech, Kamenicky)"},
{FTNC_CP895, (char *)"CP895 2", (char *)"iso-8859-2", (char *)"CP850", (char *)"ISO-8859-2", (char *)"cs_CZ", (char *)"IBM codepage 895 (Czech, Kamenicky)"},
{FTNC_LATIN_5,(char *)"LATIN-5 2",(char *)"iso-8859-5", (char *)"LATIN5", (char *)"ISO-8859-5", (char *)"turks", (char *)"ISO 8859-5 (Turkish)"},
{FTNC_CP866, (char *)"CP866 2", (char *)"iso-8859-5", (char *)"CP866", (char *)"ISO-8859-5", (char *)"ru_RU", (char *)"IBM codepage 866 (Russian)"},
{FTNC_LATIN_9,(char *)"LATIN-9 2",(char *)"iso-8859-15",(char *)"LATIN-9", (char *)"ISO-8859-15",(char *)"en_US", (char *)"ISO 8859-1 (Western European EURO)"},
@@ -104,7 +105,7 @@ int find_ftn_charset(char *ftnkludge)
int j;
char *ftn, *cmp;
Syslog('n', "find_ftn_charset(%s)", ftnkludge);
Syslog(loglevel, "find_ftn_charset(%s)", ftnkludge);
ftn = calloc(80, sizeof(char));
cmp = calloc(80, sizeof(char));
@@ -123,7 +124,7 @@ int find_ftn_charset(char *ftnkludge)
}
if (charalias[i].alias != NULL) {
Syslog('n', "found alias %s", charalias[i].ftnkludge);
Syslog(loglevel, "found alias %s", charalias[i].ftnkludge);
snprintf(ftn, 80, "%s", charalias[i].ftnkludge);
}
@@ -151,7 +152,7 @@ int find_ftn_charset(char *ftnkludge)
return FTNC_ERROR;
}
Syslog('n', "find_ftn_charset(%s) result %d", ftnkludge, i);
Syslog(loglevel, "find_ftn_charset(%s) result %d", ftnkludge, i);
return i;
}
@@ -197,6 +198,46 @@ char *getrfcchrs(int val)
char *get_ic_ftn(int val)
{
int i;
static char ic_ftnname[20];
for (i = 0; (charmap[i].ftncidx != FTNC_ERROR); i++) {
if (val == charmap[i].ftncidx) {
snprintf(ic_ftnname, 20, "%s", charmap[i].ic_ftn);
return ic_ftnname;
}
}
/*
* Not found, return a default
*/
return (char *)"LATIN1";
}
char *get_ic_rfc(int val)
{
int i;
static char ic_rfcname[20];
for (i = 0; (charmap[i].ftncidx != FTNC_ERROR); i++) {
if (val == charmap[i].ftncidx) {
snprintf(ic_rfcname, 20, "%s", charmap[i].ic_rfc);
return ic_rfcname;
}
}
/*
* Not found, return a default
*/
return (char *)"iso-8859-1";
}
/*
* Experimental table that should translate from the user selected
* charset to a locale. This is not the right way to do, the best
@@ -249,17 +290,19 @@ char *getchrsdesc(int val)
* charactersets are given, the translation is off.
* On success return 0, on error return -1 and write errorlog.
*/
int chartran_init(char *fromset, char *toset)
int chartran_init(char *fromset, char *toset, int logl)
{
loglevel = logl;
if (use_tran1 || use_tran2) {
WriteError("chartran_init() called while still open");
chartran_close();
}
Syslog('-', "chartran_init(%s, %s)", fromset, toset);
Syslog(loglevel, "chartran_init(%s, %s)", fromset, toset);
if (strcmp(fromset, toset) == 0) {
Syslog('-', "nothing to translate");
Syslog(loglevel, "nothing to translate");
return 0;
}
@@ -273,10 +316,13 @@ int chartran_init(char *fromset, char *toset)
}
if (strcmp(toset, (char *)"UTF-8")) {
cd2 = iconv_open(toset, (char *)"UTF-8");
if (cd2 != (iconv_t)-1) {
WriteError("$chartran_init(%s, %s): iconv_open(%s, UTF-8s) error", fromset, toset, toset);
chartran_close();
cd2 = iconv_open(toset, "UTF-8");
if (cd2 == (iconv_t)-1) {
WriteError("$chartran_init(%s, %s): iconv_open(%s, UTF-8) error", fromset, toset, toset);
if (use_tran1) {
iconv_close(cd1);
use_tran1 = FALSE;
}
return -1;
}
use_tran2 = TRUE;
@@ -292,7 +338,7 @@ int chartran_init(char *fromset, char *toset)
*/
void chartran_close(void)
{
Syslog('-', "chartran_close()");
Syslog(loglevel, "chartran_close()");
if (use_tran1) {
iconv_close(cd1);
use_tran1 = FALSE;
@@ -318,6 +364,7 @@ char *chartran(char *input)
char *in, *out;
memset(&outbuf, 0, sizeof(outbuf));
memset(&temp, 0, sizeof(temp));
/*
* Transparant
@@ -340,6 +387,10 @@ char *chartran(char *input)
WriteError("$iconv(%s) cd1", printable(input, 0));
strncpy(outbuf, input, sizeof(outbuf) -1);
}
if (strcmp(input, outbuf)) {
Syslog(loglevel, "i %s", printable(input, 0));
Syslog(loglevel, "u %s", printable(outbuf, 0));
}
return outbuf;
}
@@ -356,6 +407,10 @@ char *chartran(char *input)
WriteError("$iconv(%s) cd2", printable(input, 0));
strncpy(outbuf, input, sizeof(outbuf) -1);
}
if (strcmp(input, outbuf)) {
Syslog(loglevel, "u %s", printable(input, 0));
Syslog(loglevel, "o %s", printable(outbuf, 0));
}
return outbuf;
}
@@ -372,6 +427,10 @@ char *chartran(char *input)
strncpy(outbuf, input, sizeof(outbuf) -1);
return outbuf;
}
if (strcmp(input, temp)) {
Syslog(loglevel, "i %s", printable(input, 0));
}
inSize = strlen(temp);
outSize = sizeof(outbuf);
in = temp;
@@ -381,6 +440,12 @@ char *chartran(char *input)
WriteError("$iconv(%s) cd2", printable(temp, 0));
strncpy(outbuf, input, sizeof(outbuf) -1);
}
if (strcmp(input, temp) || strcmp(temp, outbuf)) {
Syslog(loglevel, "u %s", printable(temp, 0));
}
if (strcmp(temp, outbuf)) {
Syslog(loglevel, "o %s", printable(outbuf, 0));
}
return outbuf;
}

View File

@@ -255,6 +255,7 @@ void html_massage(char *inbuf, char *outbuf, size_t size)
case '&': snprintf(outptr, size, "&"); break;
case '<': snprintf(outptr, size, "&lt;"); break;
case '>': snprintf(outptr, size, "&gt;"); break;
/* Not needed for UTF-8 output.
case 160: snprintf(outptr, size, "&nbsp;"); break;
case 161: snprintf(outptr, size, "&iexcl;"); break;
case 162: snprintf(outptr, size, "&cent;"); break;
@@ -351,6 +352,7 @@ void html_massage(char *inbuf, char *outbuf, size_t size)
case 253: snprintf(outptr, size, "&yacute;"); break;
case 254: snprintf(outptr, size, "&thorn;"); break;
case 255: snprintf(outptr, size, "&yuml;"); break;
*/
default: *outptr++ = *inptr; *outptr = '\0'; break;
}
while (*outptr)
@@ -410,6 +412,18 @@ FILE *OpenMacro(const char *filename, int Language, int htmlmode)
if (fi == NULL)
WriteError("OpenMacro(%s, %c): not found", filename, Language);
else {
/*
* Check macro file for update correct charset.
*/
while (fgets(linebuf, sizeof(linebuf) -1, fi)) {
if (strcasestr(linebuf, (char *)"text/html")) {
if (! strcasestr(linebuf, (char *)"UTF-8")) {
WriteError("Macro file %s doesn't define 'Content-Type' content='text/html; charset=UTF-8'", temp);
}
}
}
rewind(fi);
snprintf(temp, PATH_MAX -1, "%s-%s", OsName(), OsCPU());
if (CFG.aka[0].point)
snprintf(aka, 80, "%d:%d/%d.%d@%s", CFG.aka[0].zone, CFG.aka[0].net, CFG.aka[0].node, CFG.aka[0].point, CFG.aka[0].domain);

View File

@@ -1039,7 +1039,7 @@ struct sysconfig {
securityrec newuser_access; /* New Users Access level */
int OLR_MaxMsgs; /* OLR Max nr Msgs download */
unsigned iCapUserName : 1; /* Capitalize Username */
unsigned iAnsi : 1; /* Ask Ansi */
unsigned xiAnsi : 1;
unsigned iSex : 1; /* Ask Sex */
unsigned iDataPhone : 1; /* Ask Data Phone */
unsigned iVoicePhone : 1; /* Ask Voice Phone */
@@ -2604,7 +2604,9 @@ char *getftnchrs(int); /* Return FTN characterset name */
char *getrfcchrs(int); /* Return RFC characterset name */
char *getlocale(int); /* Return locale name */
char *getchrsdesc(int); /* Return characterset description */
int chartran_init(char *, char *); /* Initialize chartran */
char *get_ic_ftn(int); /* Return iconv name FTN side */
char *get_ic_rfc(int); /* Return iconv name RFC side */
int chartran_init(char *, char *, int); /* Initialize chartran */
void chartran_close(void); /* Deinit chartran */
char *chartran(char *); /* Translate string */

View File

@@ -4,7 +4,7 @@
* Purpose ...............: MBSE BBS Users Database structure
*
*****************************************************************************
* Copyright (C) 1997-2005
* Copyright (C) 1997-2007
*
* Michiel Broek FIDO: 2:280/2802
* Beekmansbos 10
@@ -96,7 +96,7 @@ struct userrec {
unsigned Hidden : 1; /* Hide User from Lists */
unsigned HotKeys : 1; /* Hot-Keys ON/OFF */
unsigned GraphMode : 1; /* ANSI Mode ON/OFF */
unsigned xGraphMode : 1;
unsigned Deleted : 1; /* Deleted Status */
unsigned NeverDelete : 1; /* Never Delete User */
unsigned xChat : 1;