/************************************************************ SUBROUTINE NEWCMASK NEWCMASK TAKES THE CONTENTS OF A TEMPORARY FILE, CREATED IN TEMPCMASK, AND TRANSFERS IT TO A NEWLY CREATED MASK. BOTH FILES CONTAIN C STRUCTURES, ONE INTEGER AND ONE FIFTEEN CHARACTER ARRAY. **************************************************************/ struct write2c cinfoc; newcmask_( int *numpro, /* NUMBER OF STRUCTURES TO BE TRANSFERED */ int *fn, /* FILE IDENTIFICATION NUMBER FOR NEW MASK */ int *fn2 /* FILE IDENTIFICATION NUMBER FOR TEMPORARY MASK */ ) { int i; /**************************************************************** ALLOCATE SPACE FOR SORTING STRUCTURES *****************************************************************/ /* if ( (prep = calloc( *numpro+1, 2 * sizeof( int ) )) == NULL ) printf(" SPACE ALLOCATION FAILED\n"); */ /**************************************************************** READ PROPER ARRAY POSITION INTO PREP FOR SORTING *****************************************************************/ for ( i = 1; i <= *numpro; i++ ) { fread( &cinfoc, sizeof( struct write2c ), 1, fp[*fn2]); prep[i].num = i; prep[i].rec = cinfoc.num; } /*********************************************************** SORT PREP BY THE SECOND NUMBER (REC). ************************************************************/ qsort( &prep[1], *numpro, sizeof( struct write2 ), compare); /*********************************************************** PUT SORTED VALUES INTO NEW MASK FILE. POSITION IN TEMPORARY FILE OF SORTED VALUES IS HELD IN PREP.NUM. ************************************************************/ for ( i = 1; i <= *numpro; i++ ) { fseek( fp[*fn2], (prep[i].num - 1) * sizeof( struct write2c ), SEEK_SET); fread( &cinfoc, sizeof( struct write2c ), 1, fp[*fn2]); fwrite( &cinfoc, sizeof( struct write2c ), 1, fp[*fn]); } /************************************************************ FREE UP SPACE USED FOR SORTING *************************************************************/ /* free( prep ); */ }