which included commits to RCS files with non-trunk default branches. git-svn-id: svn://10.65.10.50/trunk@976 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			109 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			109 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
| /***********************************************************************\
 | |
|  *                                                                       *
 | |
|  *   RELATE3.C     Copyright (C) 1993 Sequiter Software Inc.             *
 | |
|  *                                                                       *
 | |
|  \***********************************************************************/
 | |
| /* See User's Manual, page 145 */
 | |
| 
 | |
| #include "d4all.h"
 | |
| 
 | |
| #ifdef __TURBOC__
 | |
| extern unsigned _stklen = 10000;
 | |
| #endif
 | |
| 
 | |
| CODE4   code_base;
 | |
| DATA4   *student,*enrollment,*classes;
 | |
| FIELD4  *student_id,*first_name,*last_name,*age,*class_code,*class_title;
 | |
| TAG4    *code_tag,*id_tag;
 | |
| RELATE4 *class_rel,*student_rel,*enroll_rel;
 | |
| 
 | |
| void print_students() ;
 | |
| void open_data_files() ;
 | |
| 
 | |
| void open_data_files()
 | |
| {
 | |
| 
 | |
|   d4init(&code_base);
 | |
| 
 | |
|   student = d4open(&code_base,"STUDENT");
 | |
|   enrollment = d4open(&code_base,"ENROLL");
 | |
|   classes = d4open(&code_base,"CLASSES");
 | |
| 
 | |
|   student_id = d4field(student,"ID");
 | |
|   first_name = d4field(student,"F_NAME");
 | |
|   last_name  = d4field(student,"L_NAME");
 | |
|   age = d4field(student,"AGE");
 | |
|   class_code = d4field(classes,"CODE");
 | |
|   class_title = d4field(classes,"TITLE");
 | |
| 
 | |
|   id_tag = d4tag(student,"ID_TAG");
 | |
|   code_tag = d4tag(enrollment,"C_CODE_TAG");
 | |
| 
 | |
|   e4exit_test(&code_base);
 | |
| 
 | |
| }
 | |
| 
 | |
| void print_students()
 | |
| {
 | |
|   printf("\n        %s ",f4str(first_name));
 | |
|   printf("%s ",f4str(last_name));
 | |
|   printf("%s ",f4str(student_id));
 | |
|   printf("%s ",f4str(age));
 | |
| }
 | |
| 
 | |
| void set_relation()
 | |
| {
 | |
|   class_rel = relate4init(classes);
 | |
| 
 | |
|   enroll_rel = relate4create_slave(class_rel,enrollment,"CODE",code_tag);
 | |
| 
 | |
|   student_rel = relate4create_slave(enroll_rel,student,"STU_ID_TAG",id_tag);
 | |
| }
 | |
| 
 | |
| void print_student_list(char *expr,long direction)
 | |
| {
 | |
|   int     rc,end_value;
 | |
| 
 | |
| 
 | |
|   relate4query_set(class_rel,expr);
 | |
|   relate4sort_set(class_rel,"STUDENT->L_NAME + STUDENT->F_NAME");
 | |
| 
 | |
|   relate4type(enroll_rel,relate4scan);
 | |
| 
 | |
|   if(direction > 0)
 | |
|   {
 | |
|     rc = relate4top(class_rel);
 | |
|     end_value = r4eof;
 | |
|   }
 | |
|   else
 | |
|   {
 | |
|     rc = relate4bottom(class_rel);
 | |
|     end_value = r4bof;
 | |
|   }
 | |
| 
 | |
|   printf("\n%s",f4str(class_code));
 | |
|   printf("  %s\n",f4str(class_title));
 | |
| 
 | |
|   for (;rc != end_value; rc = relate4skip(class_rel,direction))
 | |
|     print_students();
 | |
| }
 | |
| 
 | |
| void main()
 | |
| {
 | |
| 
 | |
|   open_data_files();
 | |
| 
 | |
|   set_relation();
 | |
| 
 | |
|   print_student_list("CODE = 'MATH114 '",1L);
 | |
| 
 | |
|   print_student_list("CODE = 'CMPT411 '",-1L);
 | |
| 
 | |
|   relate4unlock(class_rel);
 | |
|   relate4free(class_rel,0);
 | |
| 
 | |
|   d4close_all(&code_base);
 | |
|   d4init_undo(&code_base);
 | |
|   mem4reset() ;
 | |
| }
 |