/*TITLE mailing list file initialization program*/

/****keyword-flag*** "%v %f %n" */
/* "6 21-Mar-98,6:18:40 MAILIX.CPP" */

#include <stdio.h>
#include <stdlib.h>
#include "mailx.h"
#include "date.h"

#define FIELD_COUNT 9
#define LINE_LENGTH 200
#define TEXT 0
#define DATE 1
#define CENTS 2


void process(FILE *customer_data_file, FILE *text_file);

int main(int argc, char *argv[])
{
	FILE *customer_data_file;
	char customer_data_file_name[100];
	FILE *text_file;
	char text_file_name[100];

	if (argc < 3)
		{
		printf("Usage: maili text_file customer_file\n");
		exit(1);
		}

	strcpy(text_file_name,argv[1]);

	strcpy(customer_data_file_name,argv[2]);
	strcat(customer_data_file_name,".dat");

	text_file = fopen(text_file_name,"r");
	setvbuf(text_file, NULL, _IOFBF, 32000);
	customer_data_file = fopen(customer_data_file_name,"wb");
	setvbuf(customer_data_file, NULL, _IOFBF, 32000);

	process(customer_data_file,text_file);

	fclose(customer_data_file);

    return 0;
}


void process(FILE *customer_data_file, FILE *text_file)
{
	int i;
	int j;
	char line_in[LINE_LENGTH];
	char *status;
	char *here;
	char *data_here;
	int field_type[FIELD_COUNT] = {TEXT, TEXT, TEXT, TEXT, TEXT, TEXT, TEXT, 
	DATE, CENTS};
	int ascii_field_length[FIELD_COUNT] = {LAST_NAME_LENGTH,FIRST_NAME_LENGTH,
	ADDRESS1_LENGTH,ADDRESS2_LENGTH,CITY_LENGTH,STATE_LENGTH,ZIP_LENGTH,
	ASCII_DATE_LENGTH,ASCII_CENTS_LENGTH};
	int quoted_field[FIELD_COUNT] = {1,1,1,1,1,1,1,1,0};
	char field[FIELD_COUNT][MAX_ASCII_FIELD_LENGTH+1];
	DataRecord data_out;
	long temp_cents;
	int temp_int;

	for (i = 0; ; i ++)
		{
		status = fgets(line_in, LINE_LENGTH, text_file);
		if (status == NULL)
			break;
		here = line_in;

		for (j = 0; j < FIELD_COUNT; j ++)
			{
			if (quoted_field[j])
				here ++; /* leading quote */
			memset(field[j],0,MAX_ASCII_FIELD_LENGTH+1);
			memcpy(field[j],here,ascii_field_length[j]);
			here += ascii_field_length[j];
			if (quoted_field[j])
				here ++; /* trailing quote */
			here ++; /* comma */
			}

		memset(&data_out,0,sizeof(DataRecord));
		data_here = (char *)&data_out;

		for (j = 0; j < FIELD_COUNT; j ++)
			{
			if (field_type[j] == TEXT)
				{
				memcpy(data_here,field[j],ascii_field_length[j]+1);
				data_here += ascii_field_length[j]+1;
				}
			else if (field_type[j] == DATE)
				{
				temp_int = date_string_to_days(field[j]);
				memcpy(data_here,&temp_int,sizeof(int));
				data_here += sizeof(int);
				}
			else if (field_type[j] == CENTS)
				{
				temp_cents = atol(field[j]);
				temp_int = (unsigned)(temp_cents / 100);
				memcpy(data_here,&temp_int,sizeof(int));
				data_here += sizeof(int);
				}
			}

		fwrite(&data_out, 1, sizeof(DataRecord), customer_data_file);
	}
}

