www.pudn.com > CRGAB.zip > CIRQTEST.C


/*---------------------------------------------- 
Test code for cirque.c 
You are free to use any or all for any purpose 
whatsoever. 
-------------------- 
Conrad Thornton 
-----------------------------------------------*/ 
#include  
#include  
#include  
 
extern int setupque(int); 
extern int quewrite(char *,int); 
extern int queread(char **,int *); 
extern int quekill(void); 
 
typedef struct { 
 char name[50]; 
 int  agelie; 
 }xrs; 
/*----------------------------------------------*/ 
main(argc,argv) 
int  argc; 
char *argv[]; 
{ 
       int  j,k,ecode,snum; 
       char buff[50],*gets(); 
 
       if(argc < 2) { 
	  printf("Usage: program-name Queue-Size\n"); 
	  exit(1); 
       } 
       snum = atoi(argv[1]); 
       if((ecode = setupque(snum)) != 0) { 
	   printf("Cannot malloc for Que\n"); 
	   exit(1); 
       } 
       printf("Queue Size = %d\n",snum); 
       while(1) { 
	  ecode = 0; 
	  printf("1=Ins-1-Record 2=Read-All-Data 3=Quit "); 
	  j = getch(); 
	  printf("\n"); 
	  if(j == '3') { 
	     if((ecode = quekill()) != 0) { 
		printf("\nTHE QUEUE IS NOT EMPTY. CANNOT KILL IT\n"); 
		printf("SELECT 2=Read-All-Data  then 3=Quit\n\n"); 
	     } 
	     else 
		break; 
	  } 
	  else if(j == '2') 
	     ecode = read_em(); 
	  else if(j == '1') { 
	     printf("\n1=char string  2=ints(6)  3=struct "); 
	     k = getch(); 
	     k -= 48; 
	     printf("\n"); 
	     switch(k) 
	     { 
	     case 1: printf("Enter String ..Limit 48 chars\n"); 
		     gets(buff); 
		     buff[48]=NULL; 
		     ecode = insert(buff,snum,1); 
		     break; 
	     case 2: printf("Enter seed number\n"); 
		     gets(buff); 
		     snum = atoi(buff); 
		     ecode = insert(buff,snum,2); 
		     break; 
	     case 3: printf("Enter int value for struct\n"); 
		     gets(buff); 
		     snum = atoi(buff); 
		     printf("Enter string for name field..Limit 48 chars\n"); 
		     gets(buff); 
		     buff[48]=NULL; 
		     ecode = insert(buff,snum,3); 
	     } 
	  } 
	  if(ecode != 0) 
	     printf("Error: Errcode = < %d >\n",ecode); 
       } 
} 
/*-------------------------------------------------------------*/ 
int insert(str,val,key) 
char *str; 
int  val,key; 
{ 
       int  x,z,ecode; 
       char *pc,*getptc(); 
       int  *pi,*px,*getpti(); 
       xrs  *pxrs; 
 
       ecode = 0; 
       switch(key) 
       { 
       case 1: if((pc = getptc(str)) == (char *)NULL) { 
		  printf("Could not malloc for string\n"); 
		  ecode = -4; 
	       } 
	       else if((x = quewrite(pc,1)) != 0) { 
		  printf("Quewrite failed on string load\n"); 
		  ecode = -5; 
	       } 
	       break; 
       case 2: if((pi = getpti(6)) == (int *)NULL) { 
		  printf("Could not malloc for 6 int's\n"); 
		  ecode = -6; 
	       } 
	       else { 
		  z  = val; 
		  px = pi; 
		  x = 0; 
		  while(x < 6) {   /* just assigns nums for test */ 
		     *px = z; 
		     ++px; 
		     ++x; 
		     ++z; 
		  } 
		  if((x = quewrite((char *)pi,2)) != 0) { 
		     printf("Quewrite failed on int load\n"); 
		     ecode = -7; 
		  } 
	       } 
	       break; 
       case 3: pxrs = (xrs *) malloc(sizeof(xrs)); 
	       if(! pxrs) { 
		  printf("Could not malloc for struct\n"); 
		  ecode = -8; 
	       } 
	       else { 
		  strcpy(pxrs->name,str); 
		  pxrs->agelie = val; 
		  if((x = quewrite((char *)pxrs,3)) != 0) {    /* xrs type 3 */ 
		     printf("Quewrite failed on struct load\n"); 
		     ecode = -9; 
		  } 
	       } 
       } 
       return(ecode); 
} 
/*-----------------------------------------------------------------*/ 
int read_em() /* This temp fun ALWAYS returns QUEEMPTY (-3) at end */ 
{ 
       int  x,z,ecode; 
       char *pc,*getptc(); 
       int  *pi,*px,*getpti(); 
       xrs  *pxrs; 
 
       do { 
	  ecode = queread(&pc,&x); 
	  if(ecode >= 0) {		      /* queue is not empty */ 
	     if(x == 1) {		    /* it's our char string */ 
		printf("String = %s\n",pc); 
		free(pc); 
	     } 
	     else if(x == 2) {			   /* its our int's */ 
		pi = px = (int *)pc; 
		x = 0; 
		while(x < 6) { 
		   printf("%d ",*px); 
		   ++x; 
		   ++px; 
		} 
		printf("\n"); 
		free(pi); 
	     } 
	     else if(x == 3) {		      /* it's our structure */ 
		pxrs = (xrs *) pc; 
		printf("Name = %s Age = %d\n",pxrs->name,pxrs->agelie); 
		free(pxrs); 
	     } 
	  } 
	  else { 
	     printf("Ecode returned val = %d\n",ecode); 
	     break; 
	  } 
       }while(1); 
       return(ecode); 
} 
/*------------------------------------------------------------------*/ 
char *getptc(str) 
char *str; 
{ 
	int  ln; 
	char *p; 
 
	ln = strlen(str); 
	if(ln == 0) 
	   return((char *)NULL); 
	if((p = (char *)malloc(ln+1)) != (char *)NULL) 
	   memcpy(p,str,ln+1); 
	return(p); 
} 
/*-----------------------------------------------------------------*/ 
int *getpti(many) 
int many; 
{ 
	int *pix; 
 
	pix = (int *)malloc(many*sizeof(int)); 
	return(pix); 
} 
/*-----------------------------------------------------------------*/