/*  File: struct5.c
    
    This program uses structures that include fields 
    which are pointers to these structures.
*/
#include <stdio.h>
#include "genlib.h"
#include "simpio.h"
#include "strings.h"

typedef struct dummy_tag { 
        string	name ;
        string	major ;
	double	gpa ;
	struct dummy_tag *teammate1 ;
	struct dummy_tag *teammate2 ;
	} student_record ;

/* Function prototypes */
void print_record(student_record) ;

main() {
   student_record student1, student2, student3 ;
   student_record *ptr ;
   int i, size ;

   /* make up some students */
   student1.name = "Wayne Gretzky" ;
   student1.major = "Business Management" ;
   student1.gpa = 2.0 ;
   student1.teammate1 = student1.teammate2 = NULL ;

   student2.name = "Jari Kurri" ;
   student2.major = "Business Management" ;
   student2.gpa = 2.3 ;
   student2.teammate1 = student2.teammate2 = NULL ;

   student3.name = "Essa Tikkanen" ;
   student3.major = "Business Management" ;
   student3.gpa = 1.5 ;
   student3.teammate1 = student3.teammate2 = NULL ;

   /* Make Gretzky, Kurri and Tikkanen teammates */
   student1.teammate1 = &student2 ;
   student1.teammate2 = &student3 ;

   student2.teammate1 = &student1 ;
   student2.teammate2 = &student3 ;

   student3.teammate1 = &student1 ;
   student3.teammate2 = &student2 ;

   /* Print out Gretzky's stats */
   printf("The Great One himself:\n") ;
   print_record(student1) ;

   /* Print out the stats for Gretzky's 1st teammate */
   ptr = student1.teammate1 ;
   printf("\n%s's first temmate:\n", student1.name) ;
   print_record(*ptr) ; 

   /* Print out the stats for Gretzky's 2nd teammate */
   ptr = student1.teammate2 ;
   printf("\n%s's second temmate:\n", student1.name) ;
   print_record(*ptr) ; 
}

/* Print out a single record neatly
*/
void print_record(student_record rec) {
  printf("%20s, %10s, GPA: %1.4f\n",
     rec.name, rec.major, rec.gpa) ;
}
