www.pudn.com > kafsrt20.zip > SORTEST.C


/******************************************************************** 
 * SORTEST.C 
 ********************************************************************/ 
#include  
#include  
 
/********************************************** 
 * Define Values For Sort Operations 
 **********************************************/ 
#define OK    0 
#define TRUE  1 
#define FALSE 0 
#define FETCHEND   -1 
 
FILE *fst, *ftd; 
 
long fetch(); 
extern int sorterror;    /* Error Code for Sort */ 
 
void main(); 
void asorterr(); 
 
void main() 
{ 
   char line[165]; 
   char sorttag[31]; 
   char *lptr, *sptr; 
   int itemcount, sortcount; 
   long pos; 
 
   clrscr(); 
   itemcount=0; 
   printf("                 Sort Test Program\n\n"); 
   printf("     LISTS ARE DISPLAYED WITH DELAYED SCROLLING\n\n"); 
   printf("This Sort Test builds a TEST file from the 'SORTEST.C' source file\n"); 
   printf("if the test file (STEST.DAT) does not exist in the current directory.\n"); 
   printf("BE SURE the 'SORTEST.C' file or the 'STEST.DAT' file exists in\n"); 
   printf("the current directory. For test purposes Spaces are being replaced\n"); 
   printf("with a  character to better visualize the sort process.\n"); 
   printf("\n\nPRESS ANY KEY TO BEGIN THE TEST -or-  to quit ..."); 
   if(getch() == 27) exit(0); 
   clrscr(); 
 
   if((fst = fopen("STEST.DAT", "rb"))==NULL) 
      { 
   printf("Building Sort Test File ...\n\n"); 
 
   if((fst = fopen("STEST.DAT", "wb"))==NULL) 
      { 
      printf("$$ Error Creating SORT TEST File $$"); 
      exit(0); 
      } 
   if((ftd = fopen("SORTEST.C", "rt"))==NULL) 
      { 
      printf("$$ Error Opening SORTTEST.C File $$"); 
      exit(0); 
      } 
   while(fgets(line, 160, ftd)!=NULL) 
      { 
      strcpy(sorttag,""); 
      sptr=sorttag; 
      lptr=line; 
      while(*lptr == ' ') lptr++;  /* skip Leading Spaces */ 
      while(*lptr) 
        { 
        if(*lptr == '\n') break; 
        *sptr++ = *lptr++; 
        } 
      fwrite(sorttag,20,1,fst); /* Truncate the Line to 1st 20 chars only */ 
      itemcount++; 
      } 
   fclose(ftd); 
   printf("\n%d Items Were Written\n",itemcount); 
    } 
 
   fclose(fst); 
   printf("\n### Press  to view UNSORTED LIST ###\n"); 
   while(getch()!=13); 
 
   if((fst = fopen("STEST.DAT", "rb"))==NULL) 
      { 
      printf("$$ Error Opening SORT TEST File $$"); 
      exit(0); 
      } 
   while(fread(line,20,1,fst)==1) 
      { 
      line[20]=0; 
      printf("%s\n",line); 
      delay(70); 
      } 
 
 
   fclose(fst); 
   printf("\n>>>> Press  to SORT LIST <<<<\n"); 
   while(getch()!=13); 
   clrscr(); 
 
 
   if((fst = fopen("STEST.DAT", "rb"))==NULL) 
      { 
      printf("$$ Error Opening SORT TEST File $$"); 
      exit(0); 
      } 
 
   printf("\nSORT IN PROGRESS ...\n"); 
   if(initsort(20)!=OK)  asorterr();  /* Init the sort */ 
 
   sortcount = 0; 
   pos = 0; 
   while(fread(line,20,1,fst)==1) 
      { 
      line[20]=0; 
      if(sort(line,pos) != OK) asorterr(); 
      pos = ftell(fst); /* Get file position */ 
      sortcount++; 
      } 
   printf("SORT COMPLETED - %d Records Passed To Sort\n",sortcount); 
 
   printf("MERGE IN PROGRESS ...\n"); 
   if(merge()!=OK) asorterr(); 
   printf("MERGE COMPLETED --\n"); 
   printf("FETCH IN PROGRESS ...\n"); 
 
   printf("\n>>>> NOW -- Press  to view SORTED LIST <<<<\n"); 
   while(getch()!=13); 
   clrscr(); 
 
   while(TRUE) 
      { 
      pos = fetch(); 
      if(pos == FETCHEND) break;  /* End of sorted Records */ 
      if(pos < 0) asorterr(); 
      if(fseek(fst,pos,0)) 
       { 
       printf("\n$$ ERROR SEEKING TO RECORD at %ld $$\n",pos); 
       exit(0); 
       } 
      if(fread(line, 20, 1, fst))  /* Read a record */ 
       { 
       line[20]=0; 
       printf("%s\n",line); 
       delay(100); 
       } 
      } 
 fclose(fst); 
 printf("***** SORT TEST CONCLUDED *****\n"); 
} 
 
/************************** 
 * ASORTERR - A sorting Error Occured 
 *****************************/ 
void asorterr() 
{ 
   printf("\n$$$ A SORT ERROR - ERROR CODE = %d $$$\n", sorterror); 
   exit(0); 
}