i finally found wc.c in the textutils-1.22 package. I've attached a copy
of my function 

int LineCount( FILE *fp ); 

which uses the relevant code from wc.c.

Novak.

/* util.c : A collection of utility functions to make life easier.      */
#include <stdio.h>
#include <string.h>

#include "util.h"

/* Size of atomic reads. */
#define BUFFER_SIZE (16 * 1024)

/************************************************************************/
/*                          LineCount()                                         */
/*                                                                                     
                                                         */
/*              Count the number of lines of text in a file with file ptr fp    */
/************************************************************************/

int LineCount(FILE *fp)
{
        fpos_t                                  nFilePosition;
        char                                    buf[BUFFER_SIZE + 1];
        register int                    bytes_read = 0;
        register unsigned long  lines = 0;

/* -------------------------------------------------------------------- */
/*              Ensure the file pointer is valid before using it.                      
         */
/* -------------------------------------------------------------------- */
        if( fp == (FILE *)NULL )
                return( -1 );

/* -------------------------------------------------------------------- */
/*              Store the current file position.                                       
                         */
/* -------------------------------------------------------------------- */
        if( (fgetpos( fp, &nFilePosition )) != 0)
                return( -1 );

/* -------------------------------------------------------------------- */
/*              Reset the file position indicator to the beginning of the              
 */
/*              file and clear end-of-file and error indicators.                       
         */
/* -------------------------------------------------------------------- */
        rewind(fp);

/* -------------------------------------------------------------------- */
/*              Calculate the number of lines in the file.                             
                 */
/* -------------------------------------------------------------------- */
        while ((bytes_read = fread(buf, sizeof(char), BUFFER_SIZE, fp)) > 0)
        {
                register char *p = buf;

                while ( (p = memchr(p, '\n', (buf + bytes_read) - p)) )
                {
                        ++p;
                        ++lines;
                }
        }

/* -------------------------------------------------------------------- */
/*              Check for error on reading from file.                                  
                 */
/* -------------------------------------------------------------------- */
        if (bytes_read < 0)
                return( -1 );

/* -------------------------------------------------------------------- */
/*              Restore the original file position.                                    
                         */
/* -------------------------------------------------------------------- */
        if( (fsetpos( fp, &nFilePosition )) != 0)
                return( -1 );

        return( lines );
}

Reply via email to