Newfiles reports with selectable CHRS kludge
This commit is contained in:
parent
aa5b915b11
commit
7e87a7a984
12
ChangeLog
12
ChangeLog
@ -21,6 +21,9 @@ v0.91.5 18-Feb-2007
|
||||
be displayed before we know if a user ahs a utf-8 or ansi
|
||||
terminal, so change your logo screen so that it has no ansi
|
||||
grafics, just plain ascii with ansi color codes.
|
||||
Start and leave mbsetup, this will upgrade the newfiles
|
||||
reports to set a defaults CHRS kludge CP437 2 which is good
|
||||
for reports with ANSI blockgraphics.
|
||||
|
||||
mbselib:
|
||||
Fixed a too low memory allocation in clencode.
|
||||
@ -42,6 +45,11 @@ v0.91.5 18-Feb-2007
|
||||
mbfido:
|
||||
The make web stat produces UTF-8 webpages.
|
||||
|
||||
mbaff:
|
||||
For each newfile report there is now a CHRS kludge setting.
|
||||
Reports will be converted to the selected charset. Origin
|
||||
characterset is CP437 for now.
|
||||
|
||||
mbnntp:
|
||||
Reading news outputs UTF-8 coded articles.
|
||||
TODO: test posting and fix if needed.
|
||||
@ -49,6 +57,10 @@ v0.91.5 18-Feb-2007
|
||||
mbtask:
|
||||
Fixed a too low memory allocation in clencode.
|
||||
|
||||
mbsetup:
|
||||
In newfiles reports the Hi-ASCII setting is gone and a CHRS
|
||||
kludge selection is added. Defaults to CP437 2.
|
||||
|
||||
lang:
|
||||
Language prompts 44, 75 and 76 are obsolete.
|
||||
|
||||
|
@ -71,31 +71,29 @@ struct _charalias charalias[] = {
|
||||
|
||||
|
||||
/*
|
||||
* Array of charset identifiers. Order is important for reverse
|
||||
* search from rfc -> ftn, best ftn kludge should be on top.
|
||||
* Array of charset identifiers.
|
||||
*/
|
||||
struct _charmap charmap[] = {
|
||||
{FTNC_NONE, (char *)"Undef", (char *)"iso-8859-1", (char *)"Undef", (char *)"ISO-8859-1", (char *)"C", (char *)"Undefined"},
|
||||
{FTNC_LATIN_1,(char *)"LATIN-1 2",(char *)"iso-8859-1", (char *)"LATIN1", (char *)"ISO-8859-1", (char *)"en_US", (char *)"ISO 8859-1 (Western European)"},
|
||||
{FTNC_NONE, (char *)"Undef", (char *)"Undef", (char *)"Undef", (char *)"Undef", (char *)"C", (char *)"Undefined"},
|
||||
{FTNC_CP437, (char *)"CP437 2", (char *)"us-ascii", (char *)"CP437", (char *)"ISO-8859-1", (char *)"en_US", (char *)"IBM codepage 437 (Western European) (ANSI terminal)"},
|
||||
{FTNC_CP865, (char *)"CP865 2", (char *)"iso-8859-1", (char *)"CP865", (char *)"ISO-8859-1", (char *)"sv_SE", (char *)"IBM codepage 865 (Nordic)"},
|
||||
{FTNC_MAC, (char *)"MAC", (char *)"Macintosh", (char *)"MACINTOSH",(char *)"ISO-8859-1", (char *)"en_US", (char *)"MacIntosh character set"},
|
||||
{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_CP865, (char *)"CP865 2", (char *)"iso-8859-1", (char *)"CP865", (char *)"ISO-8859-1", (char *)"sv_SE", (char *)"IBM codepage 865 (Nordic)"},
|
||||
{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_1,(char *)"LATIN-1 2",(char *)"iso-8859-1", (char *)"LATIN1", (char *)"ISO-8859-1", (char *)"en_US", (char *)"ISO 8859-1 (Western European)"},
|
||||
{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_LATIN_5,(char *)"LATIN-5 2",(char *)"iso-8859-5", (char *)"LATIN5", (char *)"ISO-8859-5", (char *)"turks", (char *)"ISO 8859-5 (Turkish)"},
|
||||
{FTNC_MAC, (char *)"MAC", (char *)"Macintosh", (char *)"MACINTOSH",(char *)"ISO-8859-1", (char *)"en_US", (char *)"MacIntosh character set"},
|
||||
{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 *)"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)"},
|
||||
{FTNC_KOI8_R, (char *)"KOI8-R 2", (char *)"koi8-r", (char *)"KOI8-R", (char *)"KOI8-R", (char *)"ru_RUi.koi8r",(char *)"Unix codepage KOI8-R (Russian)"},
|
||||
{FTNC_CP936, (char *)"CP936 2", (char *)"hz-gb-2312", (char *)"GB2312", (char *)"GB2312", (char *)"zh_CN.gbk", (char *)"IBM codepage 936 (Chinese, GBK)"},
|
||||
{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)"},
|
||||
{FTNC_UTF8, (char *)"UTF-8 4", (char *)"utf-8", (char *)"UTF-8", (char *)"UTF-8", (char *)"en_US.UTF-8", (char *)"Unicode UTF-8 (ISO/IEC 10646)"},
|
||||
{FTNC_ERROR, NULL, NULL, NULL, NULL, NULL, (char *)"ERROR"}
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Returns index of charset or -1 if not found.
|
||||
*/
|
||||
@ -188,6 +186,7 @@ char *getftnchrs(int val)
|
||||
static char kludge[20];
|
||||
|
||||
if ((val >= FTNC_NONE) && (val <= FTNC_MAXCHARS)) {
|
||||
Syslog('-', "getftnchrs(%d) %s", val, charmap[val].ftnkludge);
|
||||
snprintf(kludge, 20, "%s", charmap[val].ftnkludge);
|
||||
return kludge;
|
||||
}
|
||||
@ -202,6 +201,7 @@ char *getrfcchrs(int val)
|
||||
static char rfcname[20];
|
||||
|
||||
if ((val >= FTNC_NONE) && (val <= FTNC_MAXCHARS)) {
|
||||
Syslog('-', "getrfcchrs(%d) %s", val, charmap[val].rfcname);
|
||||
snprintf(rfcname, 20, "%s", charmap[val].rfcname);
|
||||
return rfcname;
|
||||
}
|
||||
@ -216,6 +216,7 @@ char *get_ic_ftn(int val)
|
||||
static char ic_ftnname[20];
|
||||
|
||||
if ((val >= FTNC_NONE) && (val <= FTNC_MAXCHARS)) {
|
||||
Syslog('-', "get_ic_ftn(%d) %s", val, charmap[val].ic_ftn);
|
||||
snprintf(ic_ftnname, 20, "%s", charmap[val].ic_ftn);
|
||||
return ic_ftnname;
|
||||
}
|
||||
@ -230,6 +231,7 @@ char *get_ic_rfc(int val)
|
||||
static char ic_rfcname[20];
|
||||
|
||||
if ((val >= FTNC_NONE) && (val <= FTNC_MAXCHARS)) {
|
||||
Syslog('-', "get_ic_rfc(%d) %s", val, charmap[val].ic_rfc);
|
||||
snprintf(ic_rfcname, 20, "%s", charmap[val].ic_rfc);
|
||||
return ic_rfcname;
|
||||
}
|
||||
|
@ -4,7 +4,7 @@
|
||||
* Purpose ...............: Announce new files and FileFind
|
||||
*
|
||||
*****************************************************************************
|
||||
* Copyright (C) 1997-2005
|
||||
* Copyright (C) 1997-2007
|
||||
*
|
||||
* Michiel Broek FIDO: 2:280/2802
|
||||
* Beekmansbos 10
|
||||
@ -174,13 +174,15 @@ int StartMsg(void)
|
||||
|
||||
CountPosted(newfiles.Area);
|
||||
|
||||
snprintf(Msg.From, 101, "%s", newfiles.From);
|
||||
snprintf(Msg.To, 101, "%s", newfiles.Too);
|
||||
chartran_init((char *)"CP437", get_ic_ftn(newfiles.charset), 'f');
|
||||
|
||||
snprintf(Msg.From, 101, "%s", chartran(newfiles.From));
|
||||
snprintf(Msg.To, 101, "%s", chartran(newfiles.Too));
|
||||
if (MsgCount == 1) {
|
||||
snprintf(Msg.Subject, 101, "%s", newfiles.Subject);
|
||||
snprintf(Msg.Subject, 101, "%s", chartran(newfiles.Subject));
|
||||
TotalSize = TotalFiles = 0;
|
||||
} else
|
||||
snprintf(Msg.Subject, 101, "%s #%d", newfiles.Subject, MsgCount);
|
||||
snprintf(Msg.Subject, 101, "%s #%d", chartran(newfiles.Subject), MsgCount);
|
||||
snprintf(Msg.FromAddress, 101, "%s", aka2str(newfiles.UseAka));
|
||||
Msg.Written = time(NULL);
|
||||
Msg.Arrived = time(NULL);
|
||||
@ -191,7 +193,7 @@ int StartMsg(void)
|
||||
* Start message text including kludges
|
||||
*/
|
||||
Msg_Id(newfiles.UseAka);
|
||||
Msg_Pid();
|
||||
Msg_Pid(newfiles.charset);
|
||||
return Msg_Top(newfiles.Template, newfiles.Language, newfiles.UseAka);
|
||||
}
|
||||
|
||||
@ -227,6 +229,8 @@ void FinishMsg(int Final, int filepos)
|
||||
Msg_UnLock();
|
||||
Syslog('+', "Posted message %ld, %d bytes", Msg.Id, Msg.Size);
|
||||
|
||||
chartran_close();
|
||||
|
||||
snprintf(temp, PATH_MAX, "%s/tmp/echomail.jam", getenv("MBSE_ROOT"));
|
||||
if ((fp = fopen(temp, "a")) != NULL) {
|
||||
fprintf(fp, "%s %u\n", newfiles.Area, Msg.Id);
|
||||
@ -268,12 +272,12 @@ int Report(gr_list *ta, int filepos)
|
||||
break;
|
||||
}
|
||||
|
||||
Syslog('m', "Announce %s %s %s", T_File.Echo, T_File.Name, T_File.LName);
|
||||
Syslog('m', "Announce %s %s %s", T_File.Echo, T_File.Name, chartran(T_File.LName));
|
||||
if ((fi = OpenMacro(newfiles.Template, newfiles.Language, FALSE)) != NULL) {
|
||||
/*
|
||||
* Area block header
|
||||
*/
|
||||
MacroVars("GJZ", "ssd", T_File.Echo, T_File.Comment, 0);
|
||||
MacroVars("GJZ", "ssd", T_File.Echo, chartran(T_File.Comment), 0);
|
||||
fseek(fi, filepos, SEEK_SET);
|
||||
Msg_Macro(fi);
|
||||
filepos1 = ftell(fi);
|
||||
@ -296,7 +300,7 @@ int Report(gr_list *ta, int filepos)
|
||||
ftime = T_File.Fdate;
|
||||
MacroVars("sl", "ss", T_File.Name, T_File.LName);
|
||||
MacroVars("bk", "dd", T_File.Size, T_File.SizeKb);
|
||||
MacroVars("dt", "ss", rfcdate(ftime), To_Low(T_File.LDesc[0],newfiles.HiAscii));
|
||||
MacroVars("dt", "ss", rfcdate(ftime), chartran(T_File.LDesc[0]));
|
||||
Msg_Macro(fi);
|
||||
filepos2 = ftell(fi);
|
||||
|
||||
@ -306,7 +310,7 @@ int Report(gr_list *ta, int filepos)
|
||||
for (i = 1; i < 24; i++) {
|
||||
fseek(fi, filepos2, SEEK_SET);
|
||||
if (strlen(T_File.LDesc[i])) {
|
||||
MacroVars("t", "s", To_Low(T_File.LDesc[i],newfiles.HiAscii));
|
||||
MacroVars("t", "s", chartran(T_File.LDesc[i]));
|
||||
Msg_Macro(fi);
|
||||
} else {
|
||||
line = calloc(MAXSTR, sizeof(char));
|
||||
|
@ -4,7 +4,7 @@
|
||||
* Purpose ...............: Announce new files and FileFind
|
||||
*
|
||||
*****************************************************************************
|
||||
* Copyright (C) 1997-2005
|
||||
* Copyright (C) 1997-2007
|
||||
*
|
||||
* Michiel Broek FIDO: 2:280/2802
|
||||
* Beekmansbos 10
|
||||
@ -193,7 +193,7 @@ int StartReply(ff_list *ffl)
|
||||
MsgText_Add2(temp);
|
||||
Msg.ReplyCRC = upd_crc32(temp, crc, strlen(temp));
|
||||
free(temp);
|
||||
Msg_Pid();
|
||||
Msg_Pid(FTNC_NONE);
|
||||
return Msg_Top(scanmgr.template, scanmgr.Language, scanmgr.Aka);
|
||||
}
|
||||
|
||||
|
@ -4,7 +4,7 @@
|
||||
* Purpose ...............: Announce new files and FileFind
|
||||
*
|
||||
*****************************************************************************
|
||||
* Copyright (C) 1997-2005
|
||||
* Copyright (C) 1997-2007
|
||||
*
|
||||
* Michiel Broek FIDO: 2:280/2802
|
||||
* Beekmansbos 10
|
||||
@ -81,7 +81,10 @@ void Msg_Id(fidoaddr aka)
|
||||
|
||||
|
||||
|
||||
void Msg_Pid(void)
|
||||
/*
|
||||
* Passed charset overrides defaults
|
||||
*/
|
||||
void Msg_Pid(int charset)
|
||||
{
|
||||
char *temp;
|
||||
time_t tt;
|
||||
@ -89,7 +92,9 @@ void Msg_Pid(void)
|
||||
temp = calloc(81, sizeof(char));
|
||||
snprintf(temp, 81, "\001PID: MBSE-FIDO %s (%s-%s)", VERSION, OsName(), OsCPU());
|
||||
MsgText_Add2(temp);
|
||||
if (msgs.Charset != FTNC_NONE) {
|
||||
if (charset != FTNC_NONE) {
|
||||
snprintf(temp, 81, "\001CHRS: %s", getftnchrs(charset));
|
||||
} else if (msgs.Charset != FTNC_NONE) {
|
||||
snprintf(temp, 81, "\001CHRS: %s", getftnchrs(msgs.Charset));
|
||||
} else {
|
||||
snprintf(temp, 81, "\001CHRS: %s", getftnchrs(FTNC_LATIN_1));
|
||||
|
@ -5,7 +5,7 @@
|
||||
|
||||
|
||||
void Msg_Id(fidoaddr);
|
||||
void Msg_Pid(void);
|
||||
void Msg_Pid(int);
|
||||
void Msg_Macro(FILE *);
|
||||
int Msg_Top(char *, int, fidoaddr);
|
||||
void Msg_Bot(fidoaddr, char *, char *);
|
||||
|
@ -4,7 +4,7 @@
|
||||
* Purpose ...............: Newfiles Setup
|
||||
*
|
||||
*****************************************************************************
|
||||
* Copyright (C) 1997-2005
|
||||
* Copyright (C) 1997-2007
|
||||
*
|
||||
* Michiel Broek FIDO: 2:280/2802
|
||||
* Beekmansbos 10
|
||||
@ -74,7 +74,7 @@ int CountNewfiles(void)
|
||||
snprintf(newfiles.Template, 15, "newfiles");
|
||||
newfiles.Language = 'E';
|
||||
newfiles.Active = TRUE;
|
||||
newfiles.HiAscii = TRUE;
|
||||
newfiles.charset = FTNC_CP437;
|
||||
fwrite(&newfiles, sizeof(newfiles), 1, fil);
|
||||
snprintf(group, 13, "LOCAL");
|
||||
fwrite(&group, 13, 1, fil);
|
||||
@ -106,14 +106,14 @@ int CountNewfiles(void)
|
||||
int OpenNewfiles(void)
|
||||
{
|
||||
FILE *fin, *fout;
|
||||
char fnin[PATH_MAX], fnout[PATH_MAX];
|
||||
int oldsize;
|
||||
int i, old_groups;
|
||||
int oldgroup;
|
||||
char group[13];
|
||||
char *fnin, *fnout, group[13];
|
||||
int oldsize, i, old_groups, oldgroup;
|
||||
|
||||
fnin = calloc(PATH_MAX, sizeof(char));
|
||||
fnout = calloc(PATH_MAX, sizeof(char));
|
||||
snprintf(fnin, PATH_MAX, "%s/etc/newfiles.data", getenv("MBSE_ROOT"));
|
||||
snprintf(fnout, PATH_MAX, "%s/etc/newfiles.temp", getenv("MBSE_ROOT"));
|
||||
|
||||
if ((fin = fopen(fnin, "r")) != NULL) {
|
||||
if ((fout = fopen(fnout, "w")) != NULL) {
|
||||
fread(&newfileshdr, sizeof(newfileshdr), 1, fin);
|
||||
@ -150,6 +150,10 @@ int OpenNewfiles(void)
|
||||
snprintf(newfiles.Template, 15, "newfiles");
|
||||
NewUpdated = 1;
|
||||
}
|
||||
if (newfiles.charset == FTNC_NONE) {
|
||||
newfiles.charset = FTNC_CP437;
|
||||
NewUpdated = 1;
|
||||
}
|
||||
fwrite(&newfiles, sizeof(newfiles), 1, fout);
|
||||
memset(&newfiles, 0, sizeof(newfiles));
|
||||
/*
|
||||
@ -162,8 +166,7 @@ int OpenNewfiles(void)
|
||||
}
|
||||
if (old_groups < CFG.new_groups) {
|
||||
/*
|
||||
* The size increased, fill with
|
||||
* blank records.
|
||||
* The size increased, fill with blank records.
|
||||
*/
|
||||
memset(&group, 0, 13);
|
||||
for (i = (old_groups + 1); i <= CFG.new_groups; i++)
|
||||
@ -172,10 +175,14 @@ int OpenNewfiles(void)
|
||||
}
|
||||
fclose(fin);
|
||||
fclose(fout);
|
||||
free(fnin);
|
||||
free(fnout);
|
||||
return 0;
|
||||
} else
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
free(fnin);
|
||||
free(fnout);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -249,6 +256,7 @@ int AppendNewfiles(void)
|
||||
snprintf(newfiles.From, 36, "%s", CFG.sysop_name);
|
||||
newfiles.Language = 'E';
|
||||
snprintf(newfiles.Template, 15, "newfiles");
|
||||
newfiles.charset = FTNC_CP437;
|
||||
strncpy(newfiles.Origin, CFG.origin, 50);
|
||||
fwrite(&newfiles, sizeof(newfiles), 1, fil);
|
||||
memset(&group, 0, 13);
|
||||
@ -280,8 +288,8 @@ void NewScreen(void)
|
||||
mbse_mvprintw(15, 2, "9. Aka to use");
|
||||
mbse_mvprintw(16, 2, "10. Active");
|
||||
mbse_mvprintw(17, 2, "11. Deleted");
|
||||
mbse_mvprintw(16,42, "12. High ASCII");
|
||||
mbse_mvprintw(17,42, "13. New groups");
|
||||
mbse_mvprintw(16,42, "12. New groups");
|
||||
mbse_mvprintw(17,42, "13. CHRS kludge");
|
||||
}
|
||||
|
||||
|
||||
@ -360,12 +368,12 @@ int EditNewRec(int Area)
|
||||
show_str( 15,18,35, aka2str(newfiles.UseAka));
|
||||
show_bool(16,18, newfiles.Active);
|
||||
show_bool(17,18, newfiles.Deleted);
|
||||
show_bool(16,58, newfiles.HiAscii);
|
||||
i = 0;
|
||||
for (tmp = fgr; tmp; tmp = tmp->next)
|
||||
if (tmp->tagged)
|
||||
i++;
|
||||
show_int( 17,58, i);
|
||||
show_int( 16,58, i);
|
||||
show_charset(17,58, newfiles.charset);
|
||||
|
||||
switch(select_menu(13)) {
|
||||
case 0:
|
||||
@ -420,10 +428,11 @@ int EditNewRec(int Area)
|
||||
break;
|
||||
case 10:E_BOOL(16,18, newfiles.Active, "If this report is ^active^")
|
||||
case 11:E_BOOL(17,18, newfiles.Deleted, "Is this record ^deleted^")
|
||||
case 12:E_BOOL(16,58, newfiles.HiAscii, "Allow ^High ASCII^ in this report")
|
||||
case 13:if (E_Group(&fgr, (char *)"12.13 NEWFILE GROUPS"))
|
||||
case 12:if (E_Group(&fgr, (char *)"12.13 NEWFILE GROUPS"))
|
||||
GrpChanged = TRUE;
|
||||
break;
|
||||
case 13:newfiles.charset = edit_charset(17,58, newfiles.charset);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -585,7 +594,7 @@ int new_doc(FILE *fp, FILE *toc, int page)
|
||||
add_webtable(wp, (char *)"Language", temp);
|
||||
add_webtable(wp, (char *)"Aka to use", aka2str(newfiles.UseAka));
|
||||
add_webtable(wp, (char *)"Active", getboolean(newfiles.Active));
|
||||
add_webtable(wp, (char *)"Allow High ASCII", getboolean(newfiles.HiAscii));
|
||||
add_webtable(wp, (char *)"CHRS kludge", getftnchrs(newfiles.charset));
|
||||
fprintf(fp, " Area comment %s\n", newfiles.Comment);
|
||||
fprintf(fp, " Message area %s\n", newfiles.Area);
|
||||
fprintf(fp, " Origin line %s\n", newfiles.Origin);
|
||||
@ -595,7 +604,7 @@ int new_doc(FILE *fp, FILE *toc, int page)
|
||||
fprintf(fp, " Language %c\n", newfiles.Language);
|
||||
fprintf(fp, " Aka to use %s\n", aka2str(newfiles.UseAka));
|
||||
fprintf(fp, " Active %s\n", getboolean(newfiles.Active));
|
||||
fprintf(fp, " Allow High ASCII %s\n", getboolean(newfiles.HiAscii));
|
||||
fprintf(fp, " CHRS kludge %s\n", getftnchrs(newfiles.charset));
|
||||
fprintf(fp, "\n File groups:\n ");
|
||||
groups = newfileshdr.grpsize / sizeof(group);
|
||||
for (i = 0; i < groups; i++) {
|
||||
|
Reference in New Issue
Block a user