
/*
 *  AMIUUFILTER.C
 *
 *  Filter out ##E and ##B and place into uucp:TODO.E and uucp:TODO.B
 *  Also append header line to status files uucp:STAT.E and uucp:STAT.B
 *
 *  actually filters ##<c> into TODO.<c> and STAT.<c>
 */

#include <stdio.h>
#include <time.h>
#include <ctype.h>
#include <string.h>
#include "config.h"
#include "lib_protos.h"


FILE *TodoFI[26];
FILE *StatFI[26];
char Buf[1024];
char Tmp[256];
char FromLine[1024];
char TimeBuf[256];

void DumpSTAT(FILE *, FILE *, char *);
void DumpTODO(FILE *, FILE *, char *);

main(ac, av)
char *av[];
{
    time_t t = time(NULL);

    strftime(TimeBuf, sizeof(TimeBuf)-1, "%d %b %Y", localtime(&t));

    if (ac == 2) {
	FILE *fi;

	sprintf(Buf, "%s/%s", MakeConfigPath(UUSPOOL, "BATCH"), av[1]);
	if (fi = fopen(Buf, "r")) {
	    while (fgets(Buf, sizeof(Buf), fi)) {
		if (Buf[0] && Buf[0] != '\n') {
		    FILE *fj;
		    strcpy(Tmp, MakeConfigPath(UUNEWS, strtok(Buf, "\n")));
		    if (fj = fopen(Tmp, "r")) {
			printf("Scanning: %s\n", Tmp);
			Scan(fj);
			fclose(fj);
		    } else {
			printf("AmiUUFilter: Unable to open %s\n", Tmp);
		    }
		}
	    }
	    fclose(fi);
	    sprintf(Buf, "%s/%s", MakeConfigPath(UUSPOOL, "BATCH"), av[1]);
	    remove(Buf);
	}
    } else {
	Scan(stdin);
    }
}

Scan(fi)
FILE *fi;
{
    while (fgets(Buf, sizeof(Buf), fi)) {
	if (strnicmp(Buf, "From:", 5) == 0)
	    strcpy(FromLine, Buf);

	while (Buf[0] == '#' && Buf[1] == '#' && isalpha(Buf[2])) {
	    int i = tolower(Buf[2]) - 'a';
	    if (i >= 0 && i < 26) {
		FILE *fo1;
		FILE *fo2;

		if ((fo1 = TodoFI[i]) == NULL) {
		    sprintf(Tmp, "uucp:TODO.%c", 'A' + i);
		    fo1 = TodoFI[i] = fopen(Tmp, "a");
		}
		if ((fo2 = StatFI[i]) == NULL) {
		    sprintf(Tmp, "uucp:STAT.%c", 'A' + i);
		    fo2 = StatFI[i] = fopen(Tmp, "a");
		}
		if (fo2)
		    DumpSTAT(fi, fo2, Buf);
		if (fo1)
		    DumpTODO(fi, fo1, Buf);     /*  destroys Buf    */
	    }
	}
    }
}

void
DumpSTAT(fi, fo, buf)
FILE *fi;
FILE *fo;
char *buf;
{
    fprintf(fo, "%s           %s", TimeBuf, buf);
}

void
DumpTODO(fi, fo, buf)
FILE *fi;
FILE *fo;
char *buf;
{
    fputs(buf, fo);
    fprintf(fo, "%%T %s\n", TimeBuf);
    fprintf(fo, "%%F %s", FromLine);
    fprintf(fo, "%%S NEW\n");
    while (fgets(Buf, sizeof(Buf), fi)) {
	if (Buf[0] == '#' && buf[1] == '#') {
	    fputs("##\n\n", fo);
	    return;
	}
	if (strncmp(Buf, "From ", 5) == 0) {
	    fputs("##\n\n", fo);
	    return;
	}
	fprintf(fo, "    %s", Buf);
    }
    Buf[0] = 0;
}

