#! /bin/sh # This is a shell archive, meaning: # 1. Remove everything above the #! /bin/sh line. # 2. Save the resulting text in a file. # 3. Execute the file with /bin/sh (not csh) to create the files: # README # Makefile # cpl.c # This archive created: Mon Feb 24 19:20:22 1997 # By: Daniel E. Singer (des@cs.duke.edu) # Duke University CS Dept. export PATH; PATH=/bin:$PATH echo shar: extracting "'README'" '(746 characters)' if test -f 'README' then echo shar: will not over-write existing file "'README'" else sed 's/^ X//' << \SHAR_EOF > 'README' X X'cpl': characters per line. X X'cpl' counts and reports the characters per line in files or standard Xinput. X XUsage: cpl [-Hhlmnpst] [files] X X -H always print filenames X -h do not print filenames X -l suppress counting leading blanks X -m print the maximum line length X -n count newline characters in length X -p print the line of text as well as the cpl X -s print the smallest line length X -t suppress counting trailing blanks X XIt has been used most recently with SunOS 4.1.3 and Solaris 2.5. X XFiles included with this distribution: X X.. README - this file X.. Makefile - the compile makefile X.. cpl.c - the source X X-Daniel Singer, des@cs.duke.edu, 2/97 X SHAR_EOF if test 746 -ne "`wc -c < 'README'`" then echo shar: error transmitting "'README'" '(should have been 746 characters)' fi fi # end of overwriting check echo shar: extracting "'Makefile'" '(596 characters)' if test -f 'Makefile' then echo shar: will not over-write existing file "'Makefile'" else sed 's/^ X//' << \SHAR_EOF > 'Makefile' X## X## makefile for 'cpl' X## D.Singer X## X## NOTE: This code is tested on SunOS 4.1.3 and SunOS 5.x X## X XPROG = cpl XDESTDIR = /usr/local/bin X XSHARE_FILE_NAME = ${PROG}.share XSHARE_FILE_NAME_ZIPPED = ${SHARE_FILE_NAME}.gz XSHARE_FILES = README Makefile ${PROG}.c X X${PROG}: ${PROG}.c X cc -O -o ${PROG} ${PROG}.c X Xinstall: ${PROG} X /usr/bin/cp ${PROG} ${DESTDIR} X Xshare: ${SHARE_FILE_NAME_ZIPPED} X X${SHARE_FILE_NAME_ZIPPED}: ${SHARE_FILES} X /usr/bin/rm -f ${SHARE_FILE_NAME} ${SHARE_FILE_NAME_ZIPPED} X /usr/local/bin/shar -a ${SHARE_FILES} > ${SHARE_FILE_NAME} X /usr/local/bin/gzip ${SHARE_FILE_NAME} SHAR_EOF if test 596 -ne "`wc -c < 'Makefile'`" then echo shar: error transmitting "'Makefile'" '(should have been 596 characters)' fi fi # end of overwriting check echo shar: extracting "'cpl.c'" '(4651 characters)' if test -f 'cpl.c' then echo shar: will not over-write existing file "'cpl.c'" else sed 's/^ X//' << \SHAR_EOF > 'cpl.c' X/* X * cpl.c: characters per line X * written by Daniel Singer X * LSU Eye Research Center X * X * counts the characters in each line of a text file, and prints the number X * on a separate line. X * X * des 5/6/85 X * Added '-p' flag to print the line of text as well as the cpl. X * des 5/13/85 X * Added '-l' flag to suppress counting leading blanks; X * Added '-t' flag to suppress counting trailing blanks; X * Added '-n' flag to suppress counting newline ('\n'). X * des 10/6/93 X * Added '-m' flag to print the maximum line length; X * Added '-s' flag to print the smallest line length; X * Added file name printing; X * Fixed possible line overflow (-p); X * des 12/12/96 X * Fixed Solaris problem with 'filebuf' declaration in cpl(); X */ X X X#include X#include X X#define LBUFSIZ 1024 X X Xint X Hflag = 0, X hflag = 0, X pflag = 0, X lflag = 0, X mflag = 0, X nflag = 0, X sflag = 0, X tflag = 0; Xchar X linebuf[LBUFSIZ+1], X maxbuf[LBUFSIZ+1], X minbuf[LBUFSIZ+1], X nulstr[] = ""; Xint X ac; Xchar X **av; X X Xmain(argc, argv) Xregister int X argc; Xregister char X **argv; X{ X register FILE X *fp; X register char X *filename = nulstr; X int X do_filenames = 0; X X do_args(argc,argv); X argc=ac, argv=av; X X if ((argc >= 2 || Hflag) && !hflag) X do_filenames = 1; X X for (fp=stdin; argc > 0 || fp == stdin; --argc, ++argv) { X if (argc > 0) { X if ((fp=fopen(*argv, "r")) == NULL) { X perror(*argv); X continue; X } X filename = do_filenames ? *argv : nulstr; X } X X cpl(fp,filename); X X fclose(fp); X fp = NULL; X } X exit(0); X X} X Xcpl(fp,filename) Xregister FILE X *fp; Xchar X *filename; X{ X register int X c, /* input character */ X charcnt = 0, /* character count for current line */ X sol = 1, /* start of line */ X tcnt = 0, /* count of trailing space */ X max = 0, /* length of longest line */ X min = MAXINT, /* length of shortest line */ X linecnt = 0; /* line count */ X register char X *p = linebuf; /* place holder in linebuf */ X char X filebuf[32]; /* holder for filename + space */ X X /* if printing filename, make sure we don't overflow */ X if (*filename != '\0') { X char *f = filename; X int len = strlen(f); X X if (len > 30) X f += len - 30; X sprintf(filebuf,"%s ",f); X } X else X *filebuf = '\0'; X X for( ; ; ) { X X c = getc(fp); X X if (c == EOF) X break; X X ++charcnt; X X if (lflag) { X if (sol) X if (c == ' ' || c == '\t') X --charcnt; X else X sol = 0; X } X if (tflag && !(lflag && sol)) { X if (c == ' ' || c == '\t') X ++tcnt; X else { X if (c == '\n' /* || c == EOF */ ) X charcnt -= tcnt; X tcnt = 0; X } X } X if (pflag) { X if (p - linebuf < LBUFSIZ) X *p++ = c; X } X X if ( c == '\n' /* || c == EOF */ ) { X ++linecnt; X if (!nflag) X --charcnt; X if (pflag) { X if (p - linebuf == LBUFSIZ) X *(p-1) = '\n'; X *p = '\0'; X p = linebuf; X } X if (mflag || sflag) { X if (mflag && charcnt > max) { X max = charcnt; X if (pflag) X strcpy(maxbuf,linebuf); X } X if (sflag && charcnt < min) { X min = charcnt; X if (pflag) X strcpy(minbuf,linebuf); X } X } X else { X if (pflag) X printf("%s%*d: %s",filebuf,6,charcnt,linebuf); X else X printf("%s%*d\n",filebuf,6,charcnt); X#if 0 X if (c == EOF) X break; X#endif 1/0 X } X charcnt = 0; X sol = 1; X } X } X X if (linecnt == 0) X return; X X if (mflag) { X if (pflag) X printf("%sMAX %*d: %s",filebuf,6,max,maxbuf); X else X printf("%sMAX %*d\n",filebuf,6,max); X } X if (sflag) { X if (pflag) X printf("%sMIN %*d: %s",filebuf,6,min,minbuf); X else X printf("%sMIN %*d\n",filebuf,6,min); X } X} X Xdo_args(argc,argv) Xregister int argc; Xregister char **argv; X{ X int X usage = 0; X X while (++argv, --argc) { X register char X *p = *argv; X X if (*p != '-') X break; X X switch (*(p+1)) { X default: X while (*++p) X switch (*p) { X case 'H': X Hflag = 1; X hflag = 0; X break; X case 'h': X hflag = 1; X Hflag = 0; X break; X case 'l': X lflag = 1; X break; X case 'm': X mflag = 1; X break; X case 'n': X nflag = 1; X break; X case 'p': X pflag = 1; X break; X case 's': X sflag = 1; X break; X case 't': X tflag = 1; X break; X default: X usage = 1; X } X break; X case 0: X ++usage; X break; X } X if (usage) { X fprintf(stderr, "\ XUsage: cpl [-Hhlmnpst] [files]\n\ X\n\ X -H always print filenames\n\ X -h do not print filenames\n\ X -l suppress counting leading blanks\n\ X -m print the maximum line length\n\ X -n count newline characters in length\n\ X -p print the line of text as well as the cpl\n\ X -s print the smallest line length\n\ X -t suppress counting trailing blanks\n\ X\n"); X exit(1); X } X } X ac=argc, av=argv; X} SHAR_EOF if test 4651 -ne "`wc -c < 'cpl.c'`" then echo shar: error transmitting "'cpl.c'" '(should have been 4651 characters)' fi fi # end of overwriting check # End of shell archive exit 0