/*TITLE mailing list file initialization program*/ /****keyword-flag*** "%v %f %n" */ /* "6 21-Mar-98,6:18:40 MAILIX.CPP" */ #include #include #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); } }