/****************************************************************** SUBROUTINE LOOPREAD LOOPREAD READS IN THE STARTING AND ENDING PROFILE NUMBERS FOR A SPECIFIC YEAR AND MONTH (OR JUST FOR A YEAR). THE VALUES ARE CONTAINED IN A .L FILE IN A TWO INTEGER STRUCTURE ********************************************************************/ /******************************************************************* DEFINE LOOP AS A WRITE2 (TWO INTEGER) STRUCTURE TO READ IN THE STARTING AND ENDING LOOP VALUES. ********************************************************************/ struct write2 loop; loopread_( int *jstart, /* STARTING PROFILE NUMBER FOR YEAR (AND MONTH) */ int *jend, /* ENDING PROFILE NUMBER FOR YEAR (AND MONTH) */ int *fn, /* FILE IDENTIFICATION NUMBER FOR FILE WITH LOOP INFORMATION */ int *iyear, /* REQUESTED YEAR */ int *month, /* REQUESTED MONTH (13 IS ALL MONTHS) */ int *leof /* SET TO ONE IF END OF FILE HAS BEEN REACHED */ ) { /********************************************************** PARAMETERS: YEAR - INPUT YEAR MINUS 1800, USED TO FIND PROPER POSITION IN FILE PSIZE - PROPER POSITION IN FILE. THIS IS FOURTEEN TIMES THE CALCULATED YEAR ( ONE FOR EACH MONTH, ONE FOR NO MONTH (0), AND ONE FOR ALL MONTHS (13)) PLUS DESIRED MONTH ************************************************************/ int year = *iyear - 1800; int psize; /************************************************* ALL YEARS PRIOR TO 1801 ARE PLACED TOGETHER ***************************************************/ if ( year < 0 ) year = 0; /************************************************** CALCULATE PROPER POSITION OF DESIRED INFORMATION ***************************************************/ psize = year * 14 + *month; /*************************************************** MOVE TO PROPER POSITION IN FILE (FSEEK) READ STRUCTURE CONTAINING BEGINNING AND ENDING PROFILE VALUES FOR DESIRED YEAR (AND MONTH) ****************************************************/ fseek( fp[*fn], psize * sizeof( struct write2 ), SEEK_SET ); fread( &loop, sizeof( struct write2 ), 1, fp[*fn] ); /*************************************************** IF DESIRED DATE IS PAST END OF FILE, SET *LEOF TO ONE AND EXIT SUBROUTINE. *****************************************************/ if ( feof( fp[*fn] ) ) { *leof = 1; return; } /***************************************************** SET STARTING VALUE AND ENDING VALUE TO BE SENT TO MAIN PROGRAM. ******************************************************/ *jstart = loop.num; *jend = loop.rec; }