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: mbaff:
The High-ascii table to translate to lowercase has now the The High-ascii table to translate to lowercase has now the
right values to translate the ansi graphics. 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: mbtask:
Removed some debug logging. 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)); temp = calloc(PATH_MAX, sizeof(char));
if (Final) { if (Final && ((fi = OpenMacro(newfiles.Template, newfiles.Language)) != NULL)) {
if ((fi = OpenMacro(newfiles.Template, newfiles.Language)) != NULL) { /*
* Message footer
*/
MacroVars("CD", "dd", TotalFiles, TotalSize); MacroVars("CD", "dd", TotalFiles, TotalSize);
fseek(fi, filepos, SEEK_SET); fseek(fi, filepos, SEEK_SET);
Msg_Macro(fi); Msg_Macro(fi);
fclose(fi); fclose(fi);
MacroClear(); 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)) 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 *, long);
long Report(gr_list *ta, long filepos) 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) { if ((fi = OpenMacro(newfiles.Template, newfiles.Language)) != NULL) {
/*
* Area block header
*/
MacroVars("GJZ", "ssd", T_File.Echo, T_File.Comment, 0); MacroVars("GJZ", "ssd", T_File.Echo, 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);
} else { } else {
sprintf(temp, "Area %s - %s", T_File.Echo, T_File.Comment); free(temp);
MsgText_Add2(temp); return 0;
MsgText_Add2((char *)"------------------------------------------------------------------------");
} }
fseek(fp, 0, SEEK_SET); fseek(fp, 0, SEEK_SET);
@ -319,12 +318,17 @@ long Report(gr_list *ta, long filepos)
if (CFG.slow_util && do_quiet) if (CFG.slow_util && do_quiet)
usleep(1); usleep(1);
if (fi != NULL) { /*
* Report one newfile, first line.
*/
fseek(fi, filepos1, SEEK_SET); fseek(fi, filepos1, SEEK_SET);
MacroVars("slbkdt", "ssddss", T_File.Name, T_File.LName, T_File.Size, T_File.SizeKb, " ", MacroVars("slbkdt", "ssddss", T_File.Name, T_File.LName, T_File.Size, T_File.SizeKb, " ",
To_Low(T_File.LDesc[0],newfiles.HiAscii)); To_Low(T_File.LDesc[0],newfiles.HiAscii));
Msg_Macro(fi); Msg_Macro(fi);
filepos2 = ftell(fi); filepos2 = ftell(fi);
/*
* Extra description lines follow
*/
for (i = 1; i < 24; i++) { for (i = 1; i < 24; i++) {
MacroVars("t", "s", To_Low(T_File.LDesc[i],newfiles.HiAscii)); MacroVars("t", "s", To_Low(T_File.LDesc[i],newfiles.HiAscii));
fseek(fi, filepos2, SEEK_SET); fseek(fi, filepos2, SEEK_SET);
@ -337,56 +341,28 @@ long Report(gr_list *ta, long filepos)
} }
filepos3 = ftell(fi); 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++; Total++;
Size += T_File.SizeKb; Size += T_File.SizeKb;
}
}
/* /*
* Split message the hard way. * Area block footer
*/ */
if (Msg.Size > (CFG.new_force * 1024)) { if (Msg.Size > (CFG.new_split * 1024))
MacroVars("Z", "d", 1); MacroVars("ABZ", "ddd", Total, Size, 1);
MsgText_Add2((char *)""); else
MsgText_Add2((char *)"to be continued..."); MacroVars("ABZ", "ddd", Total, Size, 0);
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);
fseek(fi, filepos3, SEEK_SET); fseek(fi, filepos3, SEEK_SET);
Msg_Macro(fi); Msg_Macro(fi);
finalpos = ftell(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); fclose(fp);
free(temp); free(temp);
/* /*
* Split messages the gently way. * Split messages if too big.
*/ */
if (Msg.Size > (CFG.new_split * 1024)) { if (Msg.Size > (CFG.new_split * 1024)) {
MsgText_Add2((char *)"");
MsgText_Add2((char *)"to be continued...");
MsgCount++; MsgCount++;
FinishMsg(FALSE, finalpos); FinishMsg(FALSE, finalpos);
StartMsg(); StartMsg();

View File

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

View File

@ -148,11 +148,13 @@ long Msg_Top(char *template, int language, fidoaddr aka)
FILE *fp, *fi; FILE *fp, *fi;
long fileptr, fileptr1 = 0L; 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)); temp = calloc(PATH_MAX, sizeof(char));
if ((fi = OpenMacro(template, language))) { if ((fi = OpenMacro(template, language))) {
/*
* First override default aka with current aka, then display header.
*/
MacroVars("Y", "s", aka2str(aka));
Msg_Macro(fi); Msg_Macro(fi);
fileptr = ftell(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); MacroVars("pqrf", "dsss", ttyinfo.type, ttyinfo.phone, ttyinfo.speed, ttyinfo.flags);
fseek(fi, fileptr, SEEK_SET); fseek(fi, fileptr, SEEK_SET);
Msg_Macro(fi); Msg_Macro(fi);
}
}
fclose(fp);
}
/*
* TTY info footer
*/
Msg_Macro(fi);
fileptr1 = ftell(fi); fileptr1 = ftell(fi);
}
}
fclose(fp);
}
fclose(fi); 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); free(temp);
@ -221,6 +193,9 @@ void Msg_Bot(fidoaddr UseAka, char *Org, char *template)
temp = calloc(81, sizeof(char)); temp = calloc(81, sizeof(char));
aka = calloc(40, sizeof(char)); aka = calloc(40, sizeof(char));
/*
* Add tearline, this is hardcoded.
*/
MsgText_Add2((char *)""); MsgText_Add2((char *)"");
MsgText_Add2(TearLine()); MsgText_Add2(TearLine());