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
|
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
|
terminal, so change your logo screen so that it has no ansi
|
||||||
grafics, just plain ascii with ansi color codes.
|
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:
|
mbselib:
|
||||||
Fixed a too low memory allocation in clencode.
|
Fixed a too low memory allocation in clencode.
|
||||||
@ -42,6 +45,11 @@ v0.91.5 18-Feb-2007
|
|||||||
mbfido:
|
mbfido:
|
||||||
The make web stat produces UTF-8 webpages.
|
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:
|
mbnntp:
|
||||||
Reading news outputs UTF-8 coded articles.
|
Reading news outputs UTF-8 coded articles.
|
||||||
TODO: test posting and fix if needed.
|
TODO: test posting and fix if needed.
|
||||||
@ -49,6 +57,10 @@ v0.91.5 18-Feb-2007
|
|||||||
mbtask:
|
mbtask:
|
||||||
Fixed a too low memory allocation in clencode.
|
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:
|
lang:
|
||||||
Language prompts 44, 75 and 76 are obsolete.
|
Language prompts 44, 75 and 76 are obsolete.
|
||||||
|
|
||||||
|
@ -71,31 +71,29 @@ struct _charalias charalias[] = {
|
|||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Array of charset identifiers. Order is important for reverse
|
* Array of charset identifiers.
|
||||||
* search from rfc -> ftn, best ftn kludge should be on top.
|
|
||||||
*/
|
*/
|
||||||
struct _charmap charmap[] = {
|
struct _charmap charmap[] = {
|
||||||
{FTNC_NONE, (char *)"Undef", (char *)"iso-8859-1", (char *)"Undef", (char *)"ISO-8859-1", (char *)"C", (char *)"Undefined"},
|
{FTNC_NONE, (char *)"Undef", (char *)"Undef", (char *)"Undef", (char *)"Undef", (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_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_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_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_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_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_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_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_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_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"}
|
{FTNC_ERROR, NULL, NULL, NULL, NULL, NULL, (char *)"ERROR"}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Returns index of charset or -1 if not found.
|
* Returns index of charset or -1 if not found.
|
||||||
*/
|
*/
|
||||||
@ -188,6 +186,7 @@ char *getftnchrs(int val)
|
|||||||
static char kludge[20];
|
static char kludge[20];
|
||||||
|
|
||||||
if ((val >= FTNC_NONE) && (val <= FTNC_MAXCHARS)) {
|
if ((val >= FTNC_NONE) && (val <= FTNC_MAXCHARS)) {
|
||||||
|
Syslog('-', "getftnchrs(%d) %s", val, charmap[val].ftnkludge);
|
||||||
snprintf(kludge, 20, "%s", charmap[val].ftnkludge);
|
snprintf(kludge, 20, "%s", charmap[val].ftnkludge);
|
||||||
return kludge;
|
return kludge;
|
||||||
}
|
}
|
||||||
@ -202,6 +201,7 @@ char *getrfcchrs(int val)
|
|||||||
static char rfcname[20];
|
static char rfcname[20];
|
||||||
|
|
||||||
if ((val >= FTNC_NONE) && (val <= FTNC_MAXCHARS)) {
|
if ((val >= FTNC_NONE) && (val <= FTNC_MAXCHARS)) {
|
||||||
|
Syslog('-', "getrfcchrs(%d) %s", val, charmap[val].rfcname);
|
||||||
snprintf(rfcname, 20, "%s", charmap[val].rfcname);
|
snprintf(rfcname, 20, "%s", charmap[val].rfcname);
|
||||||
return rfcname;
|
return rfcname;
|
||||||
}
|
}
|
||||||
@ -216,6 +216,7 @@ char *get_ic_ftn(int val)
|
|||||||
static char ic_ftnname[20];
|
static char ic_ftnname[20];
|
||||||
|
|
||||||
if ((val >= FTNC_NONE) && (val <= FTNC_MAXCHARS)) {
|
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);
|
snprintf(ic_ftnname, 20, "%s", charmap[val].ic_ftn);
|
||||||
return ic_ftnname;
|
return ic_ftnname;
|
||||||
}
|
}
|
||||||
@ -230,6 +231,7 @@ char *get_ic_rfc(int val)
|
|||||||
static char ic_rfcname[20];
|
static char ic_rfcname[20];
|
||||||
|
|
||||||
if ((val >= FTNC_NONE) && (val <= FTNC_MAXCHARS)) {
|
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);
|
snprintf(ic_rfcname, 20, "%s", charmap[val].ic_rfc);
|
||||||
return ic_rfcname;
|
return ic_rfcname;
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
* Purpose ...............: Announce new files and FileFind
|
* Purpose ...............: Announce new files and FileFind
|
||||||
*
|
*
|
||||||
*****************************************************************************
|
*****************************************************************************
|
||||||
* Copyright (C) 1997-2005
|
* Copyright (C) 1997-2007
|
||||||
*
|
*
|
||||||
* Michiel Broek FIDO: 2:280/2802
|
* Michiel Broek FIDO: 2:280/2802
|
||||||
* Beekmansbos 10
|
* Beekmansbos 10
|
||||||
@ -174,13 +174,15 @@ int StartMsg(void)
|
|||||||
|
|
||||||
CountPosted(newfiles.Area);
|
CountPosted(newfiles.Area);
|
||||||
|
|
||||||
snprintf(Msg.From, 101, "%s", newfiles.From);
|
chartran_init((char *)"CP437", get_ic_ftn(newfiles.charset), 'f');
|
||||||
snprintf(Msg.To, 101, "%s", newfiles.Too);
|
|
||||||
|
snprintf(Msg.From, 101, "%s", chartran(newfiles.From));
|
||||||
|
snprintf(Msg.To, 101, "%s", chartran(newfiles.Too));
|
||||||
if (MsgCount == 1) {
|
if (MsgCount == 1) {
|
||||||
snprintf(Msg.Subject, 101, "%s", newfiles.Subject);
|
snprintf(Msg.Subject, 101, "%s", chartran(newfiles.Subject));
|
||||||
TotalSize = TotalFiles = 0;
|
TotalSize = TotalFiles = 0;
|
||||||
} else
|
} 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));
|
snprintf(Msg.FromAddress, 101, "%s", aka2str(newfiles.UseAka));
|
||||||
Msg.Written = time(NULL);
|
Msg.Written = time(NULL);
|
||||||
Msg.Arrived = time(NULL);
|
Msg.Arrived = time(NULL);
|
||||||
@ -191,7 +193,7 @@ int StartMsg(void)
|
|||||||
* Start message text including kludges
|
* Start message text including kludges
|
||||||
*/
|
*/
|
||||||
Msg_Id(newfiles.UseAka);
|
Msg_Id(newfiles.UseAka);
|
||||||
Msg_Pid();
|
Msg_Pid(newfiles.charset);
|
||||||
return Msg_Top(newfiles.Template, newfiles.Language, newfiles.UseAka);
|
return Msg_Top(newfiles.Template, newfiles.Language, newfiles.UseAka);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -227,6 +229,8 @@ void FinishMsg(int Final, int filepos)
|
|||||||
Msg_UnLock();
|
Msg_UnLock();
|
||||||
Syslog('+', "Posted message %ld, %d bytes", Msg.Id, Msg.Size);
|
Syslog('+', "Posted message %ld, %d bytes", Msg.Id, Msg.Size);
|
||||||
|
|
||||||
|
chartran_close();
|
||||||
|
|
||||||
snprintf(temp, PATH_MAX, "%s/tmp/echomail.jam", getenv("MBSE_ROOT"));
|
snprintf(temp, PATH_MAX, "%s/tmp/echomail.jam", getenv("MBSE_ROOT"));
|
||||||
if ((fp = fopen(temp, "a")) != NULL) {
|
if ((fp = fopen(temp, "a")) != NULL) {
|
||||||
fprintf(fp, "%s %u\n", newfiles.Area, Msg.Id);
|
fprintf(fp, "%s %u\n", newfiles.Area, Msg.Id);
|
||||||
@ -268,12 +272,12 @@ int Report(gr_list *ta, int filepos)
|
|||||||
break;
|
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) {
|
if ((fi = OpenMacro(newfiles.Template, newfiles.Language, FALSE)) != NULL) {
|
||||||
/*
|
/*
|
||||||
* Area block header
|
* 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);
|
fseek(fi, filepos, SEEK_SET);
|
||||||
Msg_Macro(fi);
|
Msg_Macro(fi);
|
||||||
filepos1 = ftell(fi);
|
filepos1 = ftell(fi);
|
||||||
@ -296,7 +300,7 @@ int Report(gr_list *ta, int filepos)
|
|||||||
ftime = T_File.Fdate;
|
ftime = T_File.Fdate;
|
||||||
MacroVars("sl", "ss", T_File.Name, T_File.LName);
|
MacroVars("sl", "ss", T_File.Name, T_File.LName);
|
||||||
MacroVars("bk", "dd", T_File.Size, T_File.SizeKb);
|
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);
|
Msg_Macro(fi);
|
||||||
filepos2 = ftell(fi);
|
filepos2 = ftell(fi);
|
||||||
|
|
||||||
@ -306,7 +310,7 @@ int Report(gr_list *ta, int filepos)
|
|||||||
for (i = 1; i < 24; i++) {
|
for (i = 1; i < 24; i++) {
|
||||||
fseek(fi, filepos2, SEEK_SET);
|
fseek(fi, filepos2, SEEK_SET);
|
||||||
if (strlen(T_File.LDesc[i])) {
|
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);
|
Msg_Macro(fi);
|
||||||
} else {
|
} else {
|
||||||
line = calloc(MAXSTR, sizeof(char));
|
line = calloc(MAXSTR, sizeof(char));
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
* Purpose ...............: Announce new files and FileFind
|
* Purpose ...............: Announce new files and FileFind
|
||||||
*
|
*
|
||||||
*****************************************************************************
|
*****************************************************************************
|
||||||
* Copyright (C) 1997-2005
|
* Copyright (C) 1997-2007
|
||||||
*
|
*
|
||||||
* Michiel Broek FIDO: 2:280/2802
|
* Michiel Broek FIDO: 2:280/2802
|
||||||
* Beekmansbos 10
|
* Beekmansbos 10
|
||||||
@ -193,7 +193,7 @@ int StartReply(ff_list *ffl)
|
|||||||
MsgText_Add2(temp);
|
MsgText_Add2(temp);
|
||||||
Msg.ReplyCRC = upd_crc32(temp, crc, strlen(temp));
|
Msg.ReplyCRC = upd_crc32(temp, crc, strlen(temp));
|
||||||
free(temp);
|
free(temp);
|
||||||
Msg_Pid();
|
Msg_Pid(FTNC_NONE);
|
||||||
return Msg_Top(scanmgr.template, scanmgr.Language, scanmgr.Aka);
|
return Msg_Top(scanmgr.template, scanmgr.Language, scanmgr.Aka);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
* Purpose ...............: Announce new files and FileFind
|
* Purpose ...............: Announce new files and FileFind
|
||||||
*
|
*
|
||||||
*****************************************************************************
|
*****************************************************************************
|
||||||
* Copyright (C) 1997-2005
|
* Copyright (C) 1997-2007
|
||||||
*
|
*
|
||||||
* Michiel Broek FIDO: 2:280/2802
|
* Michiel Broek FIDO: 2:280/2802
|
||||||
* Beekmansbos 10
|
* 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;
|
char *temp;
|
||||||
time_t tt;
|
time_t tt;
|
||||||
@ -89,7 +92,9 @@ void Msg_Pid(void)
|
|||||||
temp = calloc(81, sizeof(char));
|
temp = calloc(81, sizeof(char));
|
||||||
snprintf(temp, 81, "\001PID: MBSE-FIDO %s (%s-%s)", VERSION, OsName(), OsCPU());
|
snprintf(temp, 81, "\001PID: MBSE-FIDO %s (%s-%s)", VERSION, OsName(), OsCPU());
|
||||||
MsgText_Add2(temp);
|
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));
|
snprintf(temp, 81, "\001CHRS: %s", getftnchrs(msgs.Charset));
|
||||||
} else {
|
} else {
|
||||||
snprintf(temp, 81, "\001CHRS: %s", getftnchrs(FTNC_LATIN_1));
|
snprintf(temp, 81, "\001CHRS: %s", getftnchrs(FTNC_LATIN_1));
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
|
|
||||||
void Msg_Id(fidoaddr);
|
void Msg_Id(fidoaddr);
|
||||||
void Msg_Pid(void);
|
void Msg_Pid(int);
|
||||||
void Msg_Macro(FILE *);
|
void Msg_Macro(FILE *);
|
||||||
int Msg_Top(char *, int, fidoaddr);
|
int Msg_Top(char *, int, fidoaddr);
|
||||||
void Msg_Bot(fidoaddr, char *, char *);
|
void Msg_Bot(fidoaddr, char *, char *);
|
||||||
|
167
mbsetup/m_new.c
167
mbsetup/m_new.c
@ -4,7 +4,7 @@
|
|||||||
* Purpose ...............: Newfiles Setup
|
* Purpose ...............: Newfiles Setup
|
||||||
*
|
*
|
||||||
*****************************************************************************
|
*****************************************************************************
|
||||||
* Copyright (C) 1997-2005
|
* Copyright (C) 1997-2007
|
||||||
*
|
*
|
||||||
* Michiel Broek FIDO: 2:280/2802
|
* Michiel Broek FIDO: 2:280/2802
|
||||||
* Beekmansbos 10
|
* Beekmansbos 10
|
||||||
@ -74,7 +74,7 @@ int CountNewfiles(void)
|
|||||||
snprintf(newfiles.Template, 15, "newfiles");
|
snprintf(newfiles.Template, 15, "newfiles");
|
||||||
newfiles.Language = 'E';
|
newfiles.Language = 'E';
|
||||||
newfiles.Active = TRUE;
|
newfiles.Active = TRUE;
|
||||||
newfiles.HiAscii = TRUE;
|
newfiles.charset = FTNC_CP437;
|
||||||
fwrite(&newfiles, sizeof(newfiles), 1, fil);
|
fwrite(&newfiles, sizeof(newfiles), 1, fil);
|
||||||
snprintf(group, 13, "LOCAL");
|
snprintf(group, 13, "LOCAL");
|
||||||
fwrite(&group, 13, 1, fil);
|
fwrite(&group, 13, 1, fil);
|
||||||
@ -105,78 +105,85 @@ int CountNewfiles(void)
|
|||||||
*/
|
*/
|
||||||
int OpenNewfiles(void)
|
int OpenNewfiles(void)
|
||||||
{
|
{
|
||||||
FILE *fin, *fout;
|
FILE *fin, *fout;
|
||||||
char fnin[PATH_MAX], fnout[PATH_MAX];
|
char *fnin, *fnout, group[13];
|
||||||
int oldsize;
|
int oldsize, i, old_groups, oldgroup;
|
||||||
int i, old_groups;
|
|
||||||
int oldgroup;
|
|
||||||
char group[13];
|
|
||||||
|
|
||||||
snprintf(fnin, PATH_MAX, "%s/etc/newfiles.data", getenv("MBSE_ROOT"));
|
fnin = calloc(PATH_MAX, sizeof(char));
|
||||||
snprintf(fnout, PATH_MAX, "%s/etc/newfiles.temp", getenv("MBSE_ROOT"));
|
fnout = calloc(PATH_MAX, sizeof(char));
|
||||||
if ((fin = fopen(fnin, "r")) != NULL) {
|
snprintf(fnin, PATH_MAX, "%s/etc/newfiles.data", getenv("MBSE_ROOT"));
|
||||||
if ((fout = fopen(fnout, "w")) != NULL) {
|
snprintf(fnout, PATH_MAX, "%s/etc/newfiles.temp", getenv("MBSE_ROOT"));
|
||||||
fread(&newfileshdr, sizeof(newfileshdr), 1, fin);
|
|
||||||
/*
|
if ((fin = fopen(fnin, "r")) != NULL) {
|
||||||
* In case we are automatic upgrading the data format
|
if ((fout = fopen(fnout, "w")) != NULL) {
|
||||||
* we save the old format. If it is changed, the
|
fread(&newfileshdr, sizeof(newfileshdr), 1, fin);
|
||||||
* database must always be updated.
|
/*
|
||||||
*/
|
* In case we are automatic upgrading the data format
|
||||||
oldsize = newfileshdr.recsize;
|
* we save the old format. If it is changed, the
|
||||||
oldgroup = newfileshdr.grpsize;
|
* database must always be updated.
|
||||||
old_groups = oldgroup / 13;
|
*/
|
||||||
if ((oldsize != sizeof(newfiles)) || (CFG.new_groups != old_groups))
|
oldsize = newfileshdr.recsize;
|
||||||
NewUpdated = 1;
|
oldgroup = newfileshdr.grpsize;
|
||||||
else
|
old_groups = oldgroup / 13;
|
||||||
NewUpdated = 0;
|
if ((oldsize != sizeof(newfiles)) || (CFG.new_groups != old_groups))
|
||||||
if (oldsize != sizeof(newfiles))
|
NewUpdated = 1;
|
||||||
Syslog('+', "Updated %s, format changed", fnin);
|
else
|
||||||
else if (CFG.new_groups != old_groups)
|
NewUpdated = 0;
|
||||||
Syslog('+', "Updated %s, nr of groups now %d", fnin, CFG.new_groups);
|
if (oldsize != sizeof(newfiles))
|
||||||
|
Syslog('+', "Updated %s, format changed", fnin);
|
||||||
|
else if (CFG.new_groups != old_groups)
|
||||||
|
Syslog('+', "Updated %s, nr of groups now %d", fnin, CFG.new_groups);
|
||||||
|
|
||||||
|
newfileshdr.hdrsize = sizeof(newfileshdr);
|
||||||
|
newfileshdr.recsize = sizeof(newfiles);
|
||||||
|
newfileshdr.grpsize = CFG.new_groups * 13;
|
||||||
|
fwrite(&newfileshdr, sizeof(newfileshdr), 1, fout);
|
||||||
|
|
||||||
newfileshdr.hdrsize = sizeof(newfileshdr);
|
/*
|
||||||
newfileshdr.recsize = sizeof(newfiles);
|
* The datarecord is filled with zero's before each
|
||||||
newfileshdr.grpsize = CFG.new_groups * 13;
|
* read, so if the format changed, the new fields
|
||||||
fwrite(&newfileshdr, sizeof(newfileshdr), 1, fout);
|
* will be empty.
|
||||||
|
*/
|
||||||
/*
|
memset(&newfiles, 0, sizeof(newfiles));
|
||||||
* The datarecord is filled with zero's before each
|
while (fread(&newfiles, oldsize, 1, fin) == 1) {
|
||||||
* read, so if the format changed, the new fields
|
if (!strlen(newfiles.Template)) {
|
||||||
* will be empty.
|
snprintf(newfiles.Template, 15, "newfiles");
|
||||||
*/
|
NewUpdated = 1;
|
||||||
memset(&newfiles, 0, sizeof(newfiles));
|
}
|
||||||
while (fread(&newfiles, oldsize, 1, fin) == 1) {
|
if (newfiles.charset == FTNC_NONE) {
|
||||||
if (!strlen(newfiles.Template)) {
|
newfiles.charset = FTNC_CP437;
|
||||||
snprintf(newfiles.Template, 15, "newfiles");
|
NewUpdated = 1;
|
||||||
NewUpdated = 1;
|
}
|
||||||
}
|
fwrite(&newfiles, sizeof(newfiles), 1, fout);
|
||||||
fwrite(&newfiles, sizeof(newfiles), 1, fout);
|
memset(&newfiles, 0, sizeof(newfiles));
|
||||||
memset(&newfiles, 0, sizeof(newfiles));
|
/*
|
||||||
/*
|
* Copy the existing groups
|
||||||
* Copy the existing groups
|
*/
|
||||||
*/
|
for (i = 1; i <= old_groups; i++) {
|
||||||
for (i = 1; i <= old_groups; i++) {
|
fread(&group, 13, 1, fin);
|
||||||
fread(&group, 13, 1, fin);
|
if (i <= CFG.new_groups)
|
||||||
if (i <= CFG.new_groups)
|
fwrite(&group, 13, 1, fout);
|
||||||
fwrite(&group, 13, 1, fout);
|
}
|
||||||
}
|
if (old_groups < CFG.new_groups) {
|
||||||
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++)
|
||||||
memset(&group, 0, 13);
|
fwrite(&group, 13, 1, fout);
|
||||||
for (i = (old_groups + 1); i <= CFG.new_groups; i++)
|
}
|
||||||
fwrite(&group, 13, 1, fout);
|
}
|
||||||
}
|
fclose(fin);
|
||||||
}
|
fclose(fout);
|
||||||
fclose(fin);
|
free(fnin);
|
||||||
fclose(fout);
|
free(fnout);
|
||||||
return 0;
|
return 0;
|
||||||
} else
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
return -1;
|
}
|
||||||
|
|
||||||
|
free(fnin);
|
||||||
|
free(fnout);
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -249,6 +256,7 @@ int AppendNewfiles(void)
|
|||||||
snprintf(newfiles.From, 36, "%s", CFG.sysop_name);
|
snprintf(newfiles.From, 36, "%s", CFG.sysop_name);
|
||||||
newfiles.Language = 'E';
|
newfiles.Language = 'E';
|
||||||
snprintf(newfiles.Template, 15, "newfiles");
|
snprintf(newfiles.Template, 15, "newfiles");
|
||||||
|
newfiles.charset = FTNC_CP437;
|
||||||
strncpy(newfiles.Origin, CFG.origin, 50);
|
strncpy(newfiles.Origin, CFG.origin, 50);
|
||||||
fwrite(&newfiles, sizeof(newfiles), 1, fil);
|
fwrite(&newfiles, sizeof(newfiles), 1, fil);
|
||||||
memset(&group, 0, 13);
|
memset(&group, 0, 13);
|
||||||
@ -280,8 +288,8 @@ void NewScreen(void)
|
|||||||
mbse_mvprintw(15, 2, "9. Aka to use");
|
mbse_mvprintw(15, 2, "9. Aka to use");
|
||||||
mbse_mvprintw(16, 2, "10. Active");
|
mbse_mvprintw(16, 2, "10. Active");
|
||||||
mbse_mvprintw(17, 2, "11. Deleted");
|
mbse_mvprintw(17, 2, "11. Deleted");
|
||||||
mbse_mvprintw(16,42, "12. High ASCII");
|
mbse_mvprintw(16,42, "12. New groups");
|
||||||
mbse_mvprintw(17,42, "13. 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_str( 15,18,35, aka2str(newfiles.UseAka));
|
||||||
show_bool(16,18, newfiles.Active);
|
show_bool(16,18, newfiles.Active);
|
||||||
show_bool(17,18, newfiles.Deleted);
|
show_bool(17,18, newfiles.Deleted);
|
||||||
show_bool(16,58, newfiles.HiAscii);
|
|
||||||
i = 0;
|
i = 0;
|
||||||
for (tmp = fgr; tmp; tmp = tmp->next)
|
for (tmp = fgr; tmp; tmp = tmp->next)
|
||||||
if (tmp->tagged)
|
if (tmp->tagged)
|
||||||
i++;
|
i++;
|
||||||
show_int( 17,58, i);
|
show_int( 16,58, i);
|
||||||
|
show_charset(17,58, newfiles.charset);
|
||||||
|
|
||||||
switch(select_menu(13)) {
|
switch(select_menu(13)) {
|
||||||
case 0:
|
case 0:
|
||||||
@ -420,10 +428,11 @@ int EditNewRec(int Area)
|
|||||||
break;
|
break;
|
||||||
case 10:E_BOOL(16,18, newfiles.Active, "If this report is ^active^")
|
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 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 12:if (E_Group(&fgr, (char *)"12.13 NEWFILE GROUPS"))
|
||||||
case 13:if (E_Group(&fgr, (char *)"12.13 NEWFILE GROUPS"))
|
|
||||||
GrpChanged = TRUE;
|
GrpChanged = TRUE;
|
||||||
break;
|
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 *)"Language", temp);
|
||||||
add_webtable(wp, (char *)"Aka to use", aka2str(newfiles.UseAka));
|
add_webtable(wp, (char *)"Aka to use", aka2str(newfiles.UseAka));
|
||||||
add_webtable(wp, (char *)"Active", getboolean(newfiles.Active));
|
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, " Area comment %s\n", newfiles.Comment);
|
||||||
fprintf(fp, " Message area %s\n", newfiles.Area);
|
fprintf(fp, " Message area %s\n", newfiles.Area);
|
||||||
fprintf(fp, " Origin line %s\n", newfiles.Origin);
|
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, " Language %c\n", newfiles.Language);
|
||||||
fprintf(fp, " Aka to use %s\n", aka2str(newfiles.UseAka));
|
fprintf(fp, " Aka to use %s\n", aka2str(newfiles.UseAka));
|
||||||
fprintf(fp, " Active %s\n", getboolean(newfiles.Active));
|
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 ");
|
fprintf(fp, "\n File groups:\n ");
|
||||||
groups = newfileshdr.grpsize / sizeof(group);
|
groups = newfileshdr.grpsize / sizeof(group);
|
||||||
for (i = 0; i < groups; i++) {
|
for (i = 0; i < groups; i++) {
|
||||||
|
Reference in New Issue
Block a user