/***************************************************************** SUBROUTINE FILEPOS FILEPOS FINDS THE PRESENT FILE POINTER POSITION, IN USER DESIGNATED UNITS, FROM THE BEGINNING OF THE FILE. THE UNIT FOR A HEADER FILE IS THE SIZE OF STRUCTURE HEADERDATA + THE SIZE OF AN INTEGER MULTIPLIED BY THE NUMBER OF PARAMETERS A PROBE MEASURES PLUS ONE FOR THE SECOND HEADER AND ONE FOR THE DEPTH FOR PROBES WHICH MEASURE MORE THAN ONE PARAMETER. DATA FILES HAVE A UNIT OF SIZE OF INTEGER. MASK FILES VARY BY THE SIZE OF THE STRUCTURE WHICH THEY STORE. NOTE: THIS SUBROUTINE IS NOT PORTABLE TO MACHINES WHERE INTEGER AND REAL STORAGE SIZES ARE DIFFERENT. ON SUCH MACHINES, THIS SUBROUTINE CAN ONLY BE USED FOR INTEGER VARIABLES. ******************************************************************/ filepos_( int *fn, /* FILE IDENTIFICATION NUMBER */ int *head, /* TYPE OF FILE BEING INVESTIGATED: 0 - MASK FILE 1 - HEADER FILE 2 - NORMAL PARAMETER FILE 3 - SPECIAL PARAMETER FILE 4 - .C MASK */ int *mult, /* SIZE MULTIPLIER (SEE ABOVE) */ int *recnum /* THE RETURNED VALUE, THE PRESENT FILE POINTER POSITION */ ) { /**************************************************************** CALCULATE SIZE OF ONE UNIT (AS DESCRIBED ABOVE). *****************************************************************/ off_t size,x; if ( *head <= 1 ) size= *head * sizeof( struct headerdata ) + *mult * sizeof( int); else if ( *head == 2 ) size= sizeof( struct write2fs ); else if ( *head == 3 ) size= sizeof(struct write3fs ); else if ( *head == 4 ) size= sizeof(struct write2c); /**************************************************************** CALCULATE FILE POINTER POSITION IN BYTES BY USING FTELL UTILITY. DIVIDE BY SIZE TO GET IN PROPER UNITS. *****************************************************************/ x=ftello(fp[*fn])/size; *recnum = ftello( fp[*fn] )/size; }