/***********************************************************************\
 *                                                                       *
 *   NEWLIST.C     Copyright (C) 1994 Sequiter Software Inc.             *
 *                                                                       *
 \***********************************************************************/
/* See User's Manual, page 47 */


#include "d4all.h"

#ifdef __TURBOC__
extern unsigned _stklen = 10000;
#endif

CODE4    code_base;
DATA4    *data_file = 0;
FIELD4   *f_name,*l_name,*address,*age,*birth_date,*married ,*amount,*comment;


FIELD4INFO  field_info [] =
{
{"F_NAME",r4str,10,0},      
{"L_NAME",r4str,10,0},
{"ADDRESS",r4str,15,0},
{"AGE",r4num,2,0},          
{"BIRTH_DATE",r4date,8,0},
{"MARRIED",r4log,1,0},      
{"AMOUNT",r4num,7,2},
{"COMMENT",r4memo,10,0},    
{0,0,0,0},
};


void  OpenDataFile( )
{
  data_file = d4open(&code_base,"DATA1.DBF");
  if(data_file == NULL)
    data_file = d4create(&code_base,"DATA1.DBF",field_info,0);

  f_name = d4field(data_file,"F_NAME");
  l_name = d4field(data_file,"L_NAME");
  address = d4field(data_file,"ADDRESS");
  age = d4field(data_file,"AGE");
  birth_date = d4field(data_file,"BIRTH_DATE");
  married = d4field(data_file,"MARRIED");
  amount = d4field(data_file,"AMOUNT");
  comment = d4field(data_file,"COMMENT");

}

void PrintRecords( )
{

  int      rc,j,age_value;
  double   amount_value;
  char     name_str[25];
  char     address_str[20];
  char     date_str[9];
  char     married_str[2];
  char     *comment_str;

  for(rc = d4top(data_file);rc == r4success
      ;rc = d4skip(data_file, 1L))
  {
    u4ncpy(name_str,f4str(f_name)
           ,sizeof(name_str));
    u4ncpy(address_str,f4str(address)
           ,sizeof(address_str));
    age_value = f4int(age);
    amount_value = f4double(amount);
    
    u4ncpy(date_str,f4str(birth_date)
           ,sizeof(date_str));
    u4ncpy(married_str,f4str(married),
           sizeof(married_str));
    comment_str = f4memo_str(comment);

    printf("------------------------------\n");
    printf("Name     : %20s\n",name_str);
    printf("Address  : %15s\n",address_str);
    printf("Age : %3d   Married : %1s\n"
           ,age_value,married_str);
    printf("Comment: %s\n",comment_str);
    printf("Purchased this year : $%5.2lf \n"
           ,amount_value);

    printf("\n");
  }
}


void AddNewRecord(char *f_name_str
                  ,char*l_name_str
                  ,char *address_str
                  ,int age_value
                  ,int married_value
                  ,double amount_value
                  ,char *comment_str)
{

  d4append_start(data_file,0);

  f4assign(f_name,f_name_str);
  f4assign(l_name,l_name_str);
  f4assign(address,address_str);

  f4assign_int(age,age_value);

  if(married_value)
    f4assign(married,"T");
  else
    f4assign(married,"F");

  f4assign_double(amount,amount_value);
  f4memo_assign(comment,comment_str);

  d4append(data_file);
}



int main( )
{

  d4init(&code_base);
  code_base.open_error = 0;
  code_base.safety = 0;

  OpenDataFile();

  PrintRecords();

  AddNewRecord("Sarah"
               ,"Webber"
               ,"132-43 St."
               ,32
               ,1
               ,147.99
               ,"New Customer");

  AddNewRecord("John"
               ,"Albridge"
               ,"1232-76 Ave."
               ,12
               ,0
               ,98.99
               ,"");

  PrintRecords();

  d4close_all(&code_base);
  return 0;
}