Filefind now uses macro templates

This commit is contained in:
Michiel Broek 2002-04-01 19:06:09 +00:00
parent f24dbddcdb
commit 7b8fd9aa53
5 changed files with 465 additions and 502 deletions

View File

@ -4702,7 +4702,8 @@ v0.33.20 10-Feb-2002
mbaff:
The High-ascii table to translate to lowercase has now the
right values to translate the ansi graphics.
Now uses the template newfiles to create the reports.
Now uses the template newfiles and filefind to create the
reports.
mbtask:
Removed some debug logging.

Binary file not shown.

View File

@ -242,21 +242,15 @@ void FinishMsg(int Final, long filepos)
temp = calloc(PATH_MAX, sizeof(char));
if (Final) {
if ((fi = OpenMacro(newfiles.Template, newfiles.Language)) != NULL) {
if (Final && ((fi = OpenMacro(newfiles.Template, newfiles.Language)) != NULL)) {
/*
* Message footer
*/
MacroVars("CD", "dd", TotalFiles, TotalSize);
fseek(fi, filepos, SEEK_SET);
Msg_Macro(fi);
fclose(fi);
MacroClear();
} else {
MsgText_Add2((char *)"");
sprintf(temp, "This is a total of %d files, %lu Kbytes", TotalFiles, TotalSize);
MsgText_Add2(temp);
MsgText_Add2((char *)"");
sprintf(temp, "With regards, %s", CFG.sysop_name);
MsgText_Add2(temp);
}
}
if (strlen(newfiles.Origin))
@ -280,6 +274,9 @@ void FinishMsg(int Final, long filepos)
/*
* Report one group block of new files.
*/
long Report(gr_list *, long);
long Report(gr_list *ta, long filepos)
{
@ -302,14 +299,16 @@ long Report(gr_list *ta, long filepos)
}
if ((fi = OpenMacro(newfiles.Template, newfiles.Language)) != NULL) {
/*
* Area block header
*/
MacroVars("GJZ", "ssd", T_File.Echo, T_File.Comment, 0);
fseek(fi, filepos, SEEK_SET);
Msg_Macro(fi);
filepos1 = ftell(fi);
} else {
sprintf(temp, "Area %s - %s", T_File.Echo, T_File.Comment);
MsgText_Add2(temp);
MsgText_Add2((char *)"------------------------------------------------------------------------");
free(temp);
return 0;
}
fseek(fp, 0, SEEK_SET);
@ -319,12 +318,17 @@ long Report(gr_list *ta, long filepos)
if (CFG.slow_util && do_quiet)
usleep(1);
if (fi != NULL) {
/*
* Report one newfile, first line.
*/
fseek(fi, filepos1, SEEK_SET);
MacroVars("slbkdt", "ssddss", T_File.Name, T_File.LName, T_File.Size, T_File.SizeKb, " ",
To_Low(T_File.LDesc[0],newfiles.HiAscii));
Msg_Macro(fi);
filepos2 = ftell(fi);
/*
* Extra description lines follow
*/
for (i = 1; i < 24; i++) {
MacroVars("t", "s", To_Low(T_File.LDesc[i],newfiles.HiAscii));
fseek(fi, filepos2, SEEK_SET);
@ -337,56 +341,28 @@ long Report(gr_list *ta, long filepos)
}
filepos3 = ftell(fi);
}
} else {
sprintf(temp, "%-12s %5lu Kb. %s", T_File.Name, T_File.SizeKb, To_Low(T_File.LDesc[0],newfiles.HiAscii));
MsgText_Add2(temp);
if (T_File.TotLdesc > 0)
for (i = 1; i < T_File.TotLdesc; i++) {
sprintf(temp, " %s", To_Low(T_File.LDesc[i],newfiles.HiAscii));
MsgText_Add2(temp);
}
}
Total++;
Size += T_File.SizeKb;
}
}
/*
* Split message the hard way.
* Area block footer
*/
if (Msg.Size > (CFG.new_force * 1024)) {
MacroVars("Z", "d", 1);
MsgText_Add2((char *)"");
MsgText_Add2((char *)"to be continued...");
MsgCount++;
FinishMsg(FALSE, finalpos);
StartMsg();
}
if ((Msg.Size > (CFG.new_split * 1024)) && (fi != NULL)) {
MacroVars("Z", "d", 1);
}
}
}
if (fi != NULL) {
MacroVars("AB", "dd", Total, Size);
if (Msg.Size > (CFG.new_split * 1024))
MacroVars("ABZ", "ddd", Total, Size, 1);
else
MacroVars("ABZ", "ddd", Total, Size, 0);
fseek(fi, filepos3, SEEK_SET);
Msg_Macro(fi);
finalpos = ftell(fi);
} else {
MsgText_Add2((char *)"------------------------------------------------------------------------");
sprintf(temp, "%d files, %lu Kb", Total, Size);
MsgText_Add2(temp);
MsgText_Add2((char *)"");
MsgText_Add2((char *)"");
}
fclose(fp);
free(temp);
/*
* Split messages the gently way.
* Split messages if too big.
*/
if (Msg.Size > (CFG.new_split * 1024)) {
MsgText_Add2((char *)"");
MsgText_Add2((char *)"to be continued...");
MsgCount++;
FinishMsg(FALSE, finalpos);
StartMsg();

View File

@ -38,6 +38,7 @@
#include "../lib/dbcfg.h"
#include "../lib/msg.h"
#include "../lib/msgtext.h"
#include "../lib/diesel.h"
#include "fflist.h"
#include "filefind.h"
#include "msgutil.h"
@ -50,7 +51,7 @@
* For netmail replies there is a different limit.
*/
#define MAX_DESC_LINES 5
#define MAX_FILES_SAMEBOARD 15
#define MAX_FILES_SAMEBOARD 25
#define MAX_FILES_OTHERBOARD 50
#define MAX_FILES_NETMAIL 100
@ -119,9 +120,7 @@ void ScanArea(ff_list **ffl)
usleep(1);
if (Msg_ReadHeader(Number) == TRUE) {
if (((!strcasecmp(Msg.To, "allfix")) ||
(!strcasecmp(Msg.To, "filefind"))) &&
(!Msg.Received)) {
if (((!strcasecmp(Msg.To, "allfix")) || (!strcasecmp(Msg.To, "filefind"))) && (!Msg.Received)) {
Syslog('m', "Msg: %s (%lu) [%s]", Msg.From, Number, Msg.Subject);
Msg.Received = TRUE;
Msg.Read = time(NULL);
@ -150,27 +149,27 @@ void ScanArea(ff_list **ffl)
int StartReply(ff_list *);
int StartReply(ff_list *ffl)
long StartReply(ff_list *);
long StartReply(ff_list *ffl)
{
char *temp;
unsigned long crc = -1;
if (strlen(scanmgr.ReplBoard)) {
if (!Msg_Open(scanmgr.ReplBoard))
return FALSE;
return -1;
else
CountPosted(scanmgr.ReplBoard);
} else {
if (!Msg_Open(scanmgr.ScanBoard))
return FALSE;
return -1;
else
CountPosted(scanmgr.ScanBoard);
}
if (!Msg_Lock(30L)) {
Msg_Close();
return FALSE;
return -1;
}
Msg_New();
@ -186,8 +185,7 @@ int StartReply(ff_list *ffl)
if (scanmgr.NetReply){
Msg.Netmail = TRUE;
sprintf(Msg.ToAddress, "%d:%d/%d.%d", ffl->zone, ffl->net, ffl->node, ffl->point);
}
else
} else
Msg.Echomail = TRUE;
/*
@ -197,30 +195,27 @@ int StartReply(ff_list *ffl)
sprintf(temp, "\001REPLY: %s", ffl->msgid);
MsgText_Add2(temp);
Msg.ReplyCRC = upd_crc32(temp, crc, strlen(temp));
free(temp);
Msg_Pid();
Msg_Top(scanmgr.template, scanmgr.Language, scanmgr.Aka);
return TRUE;
return Msg_Top(scanmgr.template, scanmgr.Language, scanmgr.Aka);
}
void FinishReply(int, int);
void FinishReply(int Reported, int Total)
void FinishReply(int, int, long);
void FinishReply(int Reported, int Total, long filepos)
{
char *temp;
FILE *fp;
FILE *fp, *fi;
temp = calloc(PATH_MAX, sizeof(char));
MsgText_Add2((char *)"");
if (Reported < Total) {
sprintf(temp, "Listed %d out of %d files matching your search request", Reported, Total);
MsgText_Add2(temp);
MsgText_Add2((char *)"For more information, visit our BBS");
} else {
sprintf(temp, "Found %d files matching your search request", Reported);
MsgText_Add2(temp);
if ((fi = OpenMacro(scanmgr.template, scanmgr.Language)) != NULL) {
MacroVars("CD", "dd", Reported, Total);
fseek(fi, filepos, SEEK_SET);
Msg_Macro(fi);
fclose(fi);
MacroClear();
}
if (strlen(scanmgr.Origin))
@ -231,7 +226,7 @@ void FinishReply(int Reported, int Total)
Msg_UnLock();
Syslog('+', "Posted message %ld", Msg.Id);
sprintf(temp, "%s/tmp/echomail.jam", getenv("MBSE_ROOT"));
sprintf(temp, "%s/tmp/%smail.jam", getenv("MBSE_ROOT"), scanmgr.NetReply?"net":"echo");
if ((fp = fopen(temp, "a")) != NULL) {
if (strlen(scanmgr.ReplBoard))
fprintf(fp, "%s %lu\n", scanmgr.ReplBoard, Msg.Id);
@ -252,12 +247,13 @@ void FinishReply(int Reported, int Total)
void ScanFiles(ff_list *);
void ScanFiles(ff_list *tmp)
{
char *temp, *kwd, *BigDesc;
FILE *pAreas, *pFile;
unsigned long areanr = 0, found = 0;
char *temp, *kwd, *BigDesc, *line;
FILE *pAreas, *pFile, *fi;
unsigned long areanr = 0, found = 0, SubSize = 0;
int i, j, k, keywrd, Found;
rf_list *rfl = NULL, *rft;
int Rep = 0, Sub = 0, Stop = FALSE;
long filepos, filepos1 = 0, filepos2 = 0, filepos3 = 0, filepos4 = 0;
/*
* Check for local generated requests.
@ -288,6 +284,7 @@ void ScanFiles(ff_list *tmp)
while (fread(&area, areahdr.recsize, 1, pAreas) == 1) {
areanr++;
Nopper();
if (CFG.slow_util && do_quiet)
usleep(1);
@ -308,8 +305,7 @@ void ScanFiles(ff_list *tmp)
Found = FALSE;
while (strlen(temp) && (!Found)) {
/*
* Split the search request in
* separate words.
* Split the search request in separate words.
*/
k = strlen(temp);
for (i = 0; i < k; i++)
@ -327,8 +323,7 @@ void ScanFiles(ff_list *tmp)
}
/*
* Check if it's a filename search
* or a keyword search.
* Check if it's a filename search or a keyword search.
*/
keywrd = FALSE;
if ((kwd[0] == '/') || (kwd[0] == '\\')) {
@ -349,7 +344,7 @@ void ScanFiles(ff_list *tmp)
Syslog('m', "Found %s in %s in description", kwd, file.Name);
}
}
}
} /* while (strlen(temp) && (!Found)) */
if (Found) {
found++;
Syslog('m', "Found %s area %d", file.Name, areanr);
@ -378,29 +373,37 @@ void ScanFiles(ff_list *tmp)
fflush(stdout);
}
if (StartReply(tmp)) {
if (((filepos = StartReply(tmp)) != -1) && ((fi = OpenMacro(scanmgr.template, scanmgr.Language)) != NULL)) {
areanr = 0;
sprintf(temp, "%s/etc/fareas.data", getenv("MBSE_ROOT"));
if ((pAreas = fopen(temp, "r")) != NULL) {
fread(&areahdr, sizeof(areahdr), 1, pAreas);
for (rft = rfl; rft; rft = rft->next) {
/*
* Area footer
*/
if ((areanr != rft->area) && (Sub)) {
MsgText_Add2((char *)"------------------------------------------------------------------------");
sprintf(temp, "Found %d file(s)", Sub);
MsgText_Add2(temp);
MsgText_Add2((char *)"");
MsgText_Add2((char *)"");
fseek(fi, filepos3, SEEK_SET);
MacroVars("AB", "dd", Sub, SubSize / 1024);
Msg_Macro(fi);
filepos4 = ftell(fi);
Sub = 0;
SubSize = 0;
}
/*
* New area header
*/
if (areanr != rft->area) {
fseek(pAreas, ((rft->area - 1) * areahdr.recsize) + areahdr.hdrsize, SEEK_SET);
fread(&area, areahdr.recsize, 1, pAreas);
sprintf(temp, "Area %lu - %s", rft->area, area.Name);
MsgText_Add2(temp);
MsgText_Add2((char *)"------------------------------------------------------------------------");
MacroVars("GJ", "ds", rft->area, area.Name);
fseek(fi, filepos, SEEK_SET);
Msg_Macro(fi);
filepos1 = ftell(fi);
areanr = rft->area;
}
@ -410,18 +413,28 @@ void ScanFiles(ff_list *tmp)
if (!strcmp(rft->filename, file.Name))
break;
fclose(pFile);
sprintf(temp, "%-12s %5lu Kb. %s", tu(file.Name), (long)(file.Size / 1024),
MacroVars("slbkdt", "ssddss", file.Name, file.LName, file.Size, file.Size / 1024, " ",
To_Low(file.Desc[0],scanmgr.HiAscii));
MsgText_Add2(temp);
fseek(fi, filepos1, SEEK_SET);
Msg_Macro(fi);
filepos2 = ftell(fi);
SubSize += file.Size;
/*
* We add no more then 5 description lines
* to prevent unnecesary long messages.
*/
for (i = 1; i < MAX_DESC_LINES; i++)
for (i = 1; i < MAX_DESC_LINES; i++) {
MacroVars("t", "s", To_Low(file.Desc[i],scanmgr.HiAscii));
fseek(fi, filepos2, SEEK_SET);
if (strlen(file.Desc[i])) {
sprintf(temp, " %s", To_Low(file.Desc[i],scanmgr.HiAscii));
MsgText_Add2(temp);
Msg_Macro(fi);
} else {
line = calloc(255, sizeof(char));
while ((fgets(line, 254, fi) != NULL) && ((line[0]!='@') || (line[1]!='|'))) {}
free(line);
}
filepos3 = ftell(fi);
}
}
Rep++;
@ -444,16 +457,15 @@ void ScanFiles(ff_list *tmp)
}
if (Sub) {
MsgText_Add2((char *)"------------------------------------------------------------------------");
sprintf(temp, "Found %d file(s)", Sub);
MsgText_Add2(temp);
MsgText_Add2((char *)"");
MsgText_Add2((char *)"");
fseek(fi, filepos3, SEEK_SET);
MacroVars("AB", "dd", Sub, SubSize / 1024);
Msg_Macro(fi);
filepos4 = ftell(fi);
}
fclose(pAreas);
}
FinishReply(Rep, found);
FinishReply(Rep, found, filepos4);
Replies++;
}
@ -499,7 +511,7 @@ int Filefind()
while (fread(&scanmgr, scanmgrhdr.recsize, 1, fp) == 1) {
if (scanmgr.Active) {
ScanArea(&ffl);
Nopper();
for (tmp = ffl; tmp; tmp = tmp->next) {
ScanFiles(tmp);
}
@ -507,7 +519,6 @@ int Filefind()
}
}
fclose(fp);
free(temp);
if (Requests) {

View File

@ -148,11 +148,13 @@ long Msg_Top(char *template, int language, fidoaddr aka)
FILE *fp, *fi;
long fileptr, fileptr1 = 0L;
MacroVars("YSNLTUMH", "ssssssss", aka2str(aka), CFG.sysop_name, CFG.bbs_name, CFG.location,
CFG.comment, CFG.sysop, CFG.sysdomain, CFG.www_url);
temp = calloc(PATH_MAX, sizeof(char));
if ((fi = OpenMacro(template, language))) {
/*
* First override default aka with current aka, then display header.
*/
MacroVars("Y", "s", aka2str(aka));
Msg_Macro(fi);
fileptr = ftell(fi);
@ -165,47 +167,17 @@ long Msg_Top(char *template, int language, fidoaddr aka)
MacroVars("pqrf", "dsss", ttyinfo.type, ttyinfo.phone, ttyinfo.speed, ttyinfo.flags);
fseek(fi, fileptr, SEEK_SET);
Msg_Macro(fi);
}
}
fclose(fp);
}
/*
* TTY info footer
*/
Msg_Macro(fi);
fileptr1 = ftell(fi);
}
}
fclose(fp);
}
fclose(fi);
} else {
sprintf(temp, "System name %s", CFG.bbs_name);
MsgText_Add2(temp);
sprintf(temp, "Sysop %s", CFG.sysop_name);
MsgText_Add2(temp);
sprintf(temp, "Location %s", CFG.location);
MsgText_Add2(temp);
sprintf(temp, "Remark %s", CFG.comment);
MsgText_Add2(temp);
MsgText_Add2((char *)"");
sprintf(temp, "%s/etc/ttyinfo.data", getenv("MBSE_ROOT"));
if ((fp = fopen(temp, "r")) != NULL) {
MsgText_Add2((char *)"Line Phone number Maximum speed Fidonet Flags");
MsgText_Add2((char *)"---- -------------------- -------------------- -------------------------");
fread(&ttyinfohdr, sizeof(ttyinfohdr), 1, fp);
while (fread(&ttyinfo, ttyinfohdr.recsize, 1, fp) == 1) {
if (((ttyinfo.type == POTS) || (ttyinfo.type == ISDN)) &&
ttyinfo.available && strlen(ttyinfo.phone)) {
switch (ttyinfo.type) {
case POTS: sprintf(temp, "POTS %-20s %-20s %s", ttyinfo.phone, ttyinfo.speed, ttyinfo.flags);
break;
case ISDN: sprintf(temp, "ISDN %-20s %-20s %s", ttyinfo.phone, ttyinfo.speed, ttyinfo.flags);
break;
}
MsgText_Add2(temp);
}
}
fclose(fp);
}
MsgText_Add2((char *)"");
MsgText_Add2((char *)"");
}
free(temp);
@ -221,6 +193,9 @@ void Msg_Bot(fidoaddr UseAka, char *Org, char *template)
temp = calloc(81, sizeof(char));
aka = calloc(40, sizeof(char));
/*
* Add tearline, this is hardcoded.
*/
MsgText_Add2((char *)"");
MsgText_Add2(TearLine());