/* -----------------------------------------------------------------------------
 * MailMerge.c (c) Michael kraehe@bakunin.north.de
 */

#include <stdio.h>
#include <string.h>
#include <memory.h>

/* -------------------------------------------------------------------------- */

FILE *confp;
char *confn;
int   expand;

/* -------------------------------------------------------------------------- */

void usage()
{	fprintf(stderr,"Usage : mailmerge -expand mailfile <list >outp\n");
	exit(0);
	}

/* -------------------------------------------------------------------------- */

void mailmerge()
{	char rec[512];
	char *field;
	char line[128];
	char *l;
	char *p,*q;

	while (fgets(rec,511,stdin)) {
		field = rec;

		if (field[strlen(field)-1]=='\n')
			field[strlen(field)-1]=0;
		if (field[strlen(field)-1]=='\r')
			field[strlen(field)-1]=0;

		confp = fopen(confn,"r");
		if (!confp) exit(0);

		memset(line,0,128);
		while (fgets(line,127,confp)) {
			if (line[strlen(line)-1]=='\n')
				line[strlen(line)-1]=0;
			if (line[strlen(line)-1]=='\r')
				line[strlen(line)-1]=0;

			l = line;

			while ((p=strchr(l,'$'))) {
				*p=' ';

				if (field) {
					if ((q=strchr(field,'\t'))) *q=0;

					if (expand) {
						*p=0;
						printf("%s",l);
						*p=' ';
						l=p+1;
						printf("%s",field);
						}
					else
					while ((*p <= ' ') && *field) {
						*p=*field;
						p++;
						field++;
						}
						
					if (q) field=q+1;
					else   field=0;
					}
				}
			printf("%s\n",l);
			memset(line,0,128);
			}
		fclose(confp);
		}
	}

/* -------------------------------------------------------------------------- */

int main(argc,argv)
int argc;
char **argv;
{	expand = 0;

	if ((argc > 2) && !memcmp(argv[1],"-e",2)) {
		expand = 1;
		argc--;
		argv++;
		}

	if (argc != 2) usage();
	confn=argv[1];
	mailmerge();
	return(0);
	}
