/***********************************************************************\
 *                                                                       *
 *   RELATE2.C     Copyright (C) 1993 Sequiter Software Inc.             *
 *                                                                       *
 \***********************************************************************/
/* See User's Manual, page 139 */

#include "d4all.h"

#ifdef __TURBOC__
extern unsigned _stklen = 10000;
#endif

CODE4   code_base;
DATA4   *student = NULL;

void open_data_files() ;

void open_data_files()
{
  student = d4open(&code_base,"STUDENT");

  e4exit_test(&code_base);
}

void print_record(DATA4 *data_file)
{
  int j;

  for(j=1;j<=d4num_fields(data_file);j++)
    printf("%s "
           ,f4memo_str(d4field_j(data_file,j)));

  printf("\n");
}

void query(DATA4 *data_file
           ,char *expr
           ,char *order)
{
  RELATE4 *relation = NULL;
  int     rc;

  relation = relate4init(data_file);
  if(relation == NULL) exit(1);


  relate4query_set(relation,expr);
  relate4sort_set(relation,order);


  for(rc = relate4top(relation);rc != r4eof
      ;rc = relate4skip(relation,1L))
    print_record(data_file);

  printf("\n");

  relate4unlock(relation);
  relate4free(relation,0);

}

void main()
{
  int     rc,num_fields,j;

  d4init(&code_base);
  open_data_files();

  query(student
        ,"AGE > 30"
        ,"");

  query(student
        ,"UPPER(L_NAME) = 'MILLER'"
        ,"L_NAME + F_NAME");

  d4close_all(&code_base);
  d4init_undo(&code_base);
  mem4reset() ;
  exit(0) ;
}