/*************************************************************** SUBROUTINE THREEJSORT THREEJSORT SORTS A FILE NUMERICALLY. FIRST THE CONTENTS OF THE FILE ARE READ INTO AN ARRAY. THEN THEY ARE SORTED USING THE QSORT FACILITY. THEN THE CONTENTS ARE READ BACK OUT TO THE ORIGINAL FILE. THREEJSORT IS ONLY FOR FILES CONTAINING THTEE INTEGER STRUCTURES (PREP). ****************************************************************/ threejsort_( int *fn /* FILE IDENTIFICATION NUMBER */ ) { /**************************************************************** PARAMETERS: I - COUNTER NUMPROS - NUMBER OF VALUES TO BE SORTED *****************************************************************/ int i; int numpros = 0; /**************************************************************** READ IN ALL THE VALUES FROM FILE. *****************************************************************/ while ( !feof(fp[*fn]) ) { numpros++; fread( &prep3[numpros], sizeof( struct write3 ) , 1, fp[*fn]); } /*************************************************************** SUBTRACT ONE FROM THE VALUE COUNTER SINCE THE LAST ADDITION WAS FOR THE END OF FILE MARKER. ****************************************************************/ numpros--; /*************************************************************** REWIND THE FILE ****************************************************************/ fseek( fp[*fn], 0L, SEEK_SET ); /*************************************************************** SORT FILES USING QSORT: PREP3[1] - STARTING POINT FOR SORT NUMPROS - NUMBER OF VALUES TO SORT SIZEOF() - SIZE OF VALUES BEING SORTED UNCOMPAREM - SORTING SUBROUTINE ****************************************************************/ qsort( &prep3[1], numpros, sizeof( struct write3 ), comparem3); /*************************************************************** PLACE SORTED VALUES BACK IN FILE. ****************************************************************/ for ( i = 1; i <= numpros; i++ ) fwrite( &prep3[i], sizeof( struct write3 ), 1, fp[*fn] ); }