home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Usenet 1994 October
/
usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso
/
unix
/
volume20
/
metrics
/
part12
< prev
next >
Wrap
Text File
|
1989-09-18
|
10KB
|
451 lines
Subject: v20i019: Tools for generating software metrics, Part12/14
Newsgroups: comp.sources.unix
Sender: sources
Approved: rsalz@uunet.UU.NET
Submitted-by: Brian Renaud <huron.ann-arbor.mi.us!bdr>
Posting-number: Volume 20, Issue 19
Archive-name: metrics/part12
---- Cut Here and unpack ----
#!/bin/sh
# this is part 12 of a multipart archive
# do not concatenate these parts, unpack them in order with /bin/sh
# file src/testfiles/test3.c continued
#
CurArch=12
if test ! -r s2_seq_.tmp
then echo "Please unpack part 1 first!"
exit 1; fi
( read Scheck
if test "$Scheck" != $CurArch
then echo "Please unpack part $Scheck next!"
exit 1;
else exit 0; fi
) < s2_seq_.tmp || exit 1
echo "x - Continuing file src/testfiles/test3.c"
sed 's/^X//' << 'SHAR_EOF' >> src/testfiles/test3.c
X Bool found = False;
X
X /* find in data dictionary */
X for ( curr_dd = dd_base;
X curr_dd != FDNULL && !found;
X curr_dd = curr_dd->fd_next )
X if ( strcmp( curr_dd->fd_name, searchstr ) == 0 )
X {
X found = True;
X *p_ddrec = curr_dd;
X }
X return found;
X}
X
X
Xstruct fdesc *
Xfirstdd( dd_base )
X struct fdesc *dd_base;
X{
X extern struct fdesc *dd_current;
X
X dd_current = dd_base;
X return dd_current;
X}
X
Xstruct fdesc *
Xnextdd()
X{
X extern struct fdesc *dd_current;
X
X if ( dd_current != FDNULL)
X dd_current = dd_current->fd_next;
X
X return dd_current;
X}
X
X
Xstruct fdesc *
Xnewfd( p_next, name, num )
X struct fdesc **p_next;
X char *name;
X int num;
X{
X *p_next = (struct fdesc *) Malloc( sizeof( struct fdesc ) );
X
X (*p_next)->fd_name = Malloc( strlen( name ) );
X
X strcpy( (*p_next)->fd_name, name );
X (*p_next)->fd_fldno = num;
X (*p_next)->fd_next = FDNULL;
X
X return *p_next;
X}
X
X
Xchar *
Xbuildcmd( fl_base, fld_count )
X struct fdesc *fl_base;
X int fld_count;
X{
X char *cmdbuf;
X char numbuf[6];
X struct fdesc *curr_fl;
X int idx;
X
X cmdbuf = Malloc( 15 + ( 4 * fld_count ) );
X strcpy( cmdbuf, "awk '{print" );
X for ( idx = 1, curr_fl = fl_base;
X curr_fl != FDNULL;
X idx++, curr_fl = curr_fl->fd_next )
X {
X
X if ( idx == fld_count )
X sprintf(numbuf, " $%d;", curr_fl->fd_fldno );
X else
X sprintf(numbuf, " $%d,", curr_fl->fd_fldno );
X strcat( cmdbuf, numbuf );
X }
X strcat( cmdbuf, "}'" );
X
X return cmdbuf;
X}
X
Xvoid
Xdata_filter( fl_base, fld_count )
X struct fdesc *fl_base;
X int fld_count;
X{
X char *systemcmd;
X extern char *Cmdname;
X
X systemcmd = buildcmd( fl_base, fld_count );
X if ( system( systemcmd ) == 127 )
X fprintf( stderr, "%s: couldn't execute: %s\n",
X Cmdname, systemcmd);
X}
X
X
Xint
Xbuild_outlist( p_fl_base, dd_base, ddname, exclude )
X struct fdesc **p_fl_base;
X struct fdesc *dd_base;
X char *ddname;
X Bool exclude;
X{
X struct fdesc *curr_fl, *curr_dd, *new_base, *new_fl;
X int fld_count = 0;
X extern char *Cmdname;
X Bool found;
X
X if ( exclude )
X {
X /* need to rebuild arglist with unnamed dictionary fields */
X for ( curr_dd = firstdd( dd_base );
X curr_dd != FDNULL;
X curr_dd = nextdd() )
X {
X /* if current dd entry not in arglist, put in the
X * new output list
X */
X for ( curr_fl = *p_fl_base, found = False;
X curr_fl != FDNULL & !found;
X curr_fl = curr_fl->fd_next )
X if ( strcmp( curr_dd->fd_name, curr_fl->fd_name) == 0 )
X found = True;
X if ( !found )
X {
X if ( new_base == FDNULL )
X new_fl = newfd( &new_base,
X curr_dd->fd_name, curr_dd->fd_fldno);
X else
X new_fl = newfd( &(new_fl->fd_next),
X curr_dd->fd_name, curr_dd->fd_fldno);
X fld_count++;
X }
X }
X *p_fl_base = new_base;
X }
X else
X {
X /* for each specified field, find it's field number in the dict */
X for ( curr_fl = *p_fl_base;
X curr_fl != FDNULL;
X curr_fl = curr_fl->fd_next )
X {
X if ( !finddd( &curr_dd, dd_base, curr_fl->fd_name ) )
X {
X fprintf(stderr,
X "%s: field \"%s\" not found in %s\n",
X Cmdname, curr_fl->fd_name, ddname );
X exit(1);
X }
X else
X curr_fl->fd_fldno = curr_dd->fd_fldno;
X fld_count++;
X }
X }
X
X#ifdef DEBUG
X for ( curr_fl = *p_fl_base; curr_fl != FDNULL; curr_fl = curr_fl->fd_next )
X {
X fprintf(stderr,
X "arglist entry: %s\t%d\n",
X curr_fl->fd_name, curr_fl->fd_fldno);
X }
X#endif /* DEBUG */
X
X return fld_count;
X}
X
Xchar *
XMalloc( size )
X register int size;
X{
X register char *vast_tracts ;
X char *malloc();
X extern char * Cmdname;
X
X if ( ! ( vast_tracts = malloc( size ) ) )
X {
X fprintf(stderr, "%s: unable to allocate more space\n", Cmdname);
X exit(1);
X }
X return( vast_tracts );
X}
SHAR_EOF
echo "File src/testfiles/test3.c is complete"
chmod 0644 src/testfiles/test3.c || echo "restore of src/testfiles/test3.c fails"
echo "x - extracting src/utils/Makefile (Text)"
sed 's/^X//' << 'SHAR_EOF' > src/utils/Makefile
X# makefile for utilities used in halstead, mccabe
X
XBIN=../bin
X
XLDFLAGS=
X
XCFLAGS= -O
X
XPROGS= stripcom stripstr
X
Xall: $(PROGS)
X
Xstripcom: stripcom.o argfiles.o
X $(CC) $(LDFLAGS) stripcom.o argfiles.o -o stripcom
X
Xstripstr: stripstr.o
X $(CC) $(LDFLAGS) stripstr.o -o stripstr
X
Xstripcom.o argfiles.o: argfiles.h
X
Xstripcom.o: bdr.h
X
X
Xinstall: all
X mv stripcom $(BIN)/stripcom
X chmod 755 $(BIN)/stripcom
X
X mv stripstr $(BIN)/stripstr
X chmod 755 $(BIN)/stripstr
X
Xclean:
X -rm -f $(PROGS) core *.o
SHAR_EOF
chmod 0644 src/utils/Makefile || echo "restore of src/utils/Makefile fails"
echo "x - extracting src/utils/argfiles.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > src/utils/argfiles.c
X/* strip comments from c program */
X/* read from stdin, write to stdout */
X#include <stdio.h>
X#include "argfiles.h"
X
XFILE *nextfp();
Xint filetype();
X
XFILE *
Xnextfp( argc, argv, p_filetype)
X int argc;
X char *argv[];
X int *p_filetype;
X{
X /* looks through parameters trying to return next FILE * to next
X * specified file
X * passes back the filetype as a side effect
X */
X
X static Bool first = True;
X static int index = 1;
X static FILE *result = FNULL;
X int curr_index, temp_type;
X
X temp_type = SYSERR; /* default to ensure no accidental execution */
X
X if ( result != FNULL )
X {
X fclose( result );
X result = FNULL;
X }
X /* skip over any flags to this routine */
X while ( index < argc && *argv[index] == '-' )
X index++;
X
X if ( index < argc )
X {
X if ( (result = fopen( argv[index], "r")) == NULL )
X {
X fprintf(stderr, "%s: unable to open %s for read\n",
X argv[0], argv[index]);
X exit(1);
X }
X curr_index = index++;
X }
X if ( first )
X {
X /* if no files specified, read from stdin */
X if ( result == FNULL )
X result = stdin;
X first = False;
X }
X if ( result != FNULL )
X {
X if ( result == stdin )
X temp_type = STDINP;
X else
X temp_type = filetype( argv[curr_index] );
X }
X *p_filetype = temp_type;
X return ( result );
X}
X
Xint
Xfiletype( filename )
X char *filename;
X{
X int type;
X register int len;
X register char *suffix;
X
X if ( !filename )
X type = SYSERR;
X else
X {
X /* find where the suffix starts */
X len = strlen(filename);
X suffix = filename + len - 1; /* end of string */
X while ( *suffix != '.' && suffix != filename )
X suffix--;
X
X if ( suffix == filename )
X {
X if ( *filename == 'M' || *filename == 'm' )
X {
X if (strncmp(filename+1,"akefile",7)==0)
X type = MAKEFILE;
X else
X type = OTHER;
X }
X }
X else
X {
X /* if suffix is one char long, optimize by doing
X * switch on char, otherwise, have to do strcmp
X */
X if ( strlen(++suffix) == 1 )
X {
X switch ( *suffix )
X {
X case 'c': /* a C file */
X type = C;
X break;
X case 'h': /* a header file */
X type = HEADER;
X break;
X case 'y': /* a yacc file */
X type = YACC;
X break;
X case 'p': /* a pascal file */
X type = PASCAL;
X break;
X case 's': /* an assembly file */
X type = ASSEMBLY;
X break;
X case 'm': /* a Visual/Menu file */
X type = VMENU;
X break;
X default:
X type = OTHER;
X break;
X }
X }
X else
X {
X if ( strcmp(suffix, "sh") == 0 )
X type = SHELL;
X else if (strcmp(suffix, "cob") == 0)
X type = COBOL;
X else if (strcmp(suffix, "awk") == 0)
X type = AWK;
X else
X type = OTHER;
X }
X }
X }
X return type;
X}
SHAR_EOF
chmod 0644 src/utils/argfiles.c || echo "restore of src/utils/argfiles.c fails"
echo "x - extracting src/utils/argfiles.h (Text)"
sed 's/^X//' << 'SHAR_EOF' > src/utils/argfiles.h
X/* header file for programs using argfiles.o (nextfp) */
X#include "bdr.h"
X
X/* file types */
X#define SYSERR -1
X#define OTHER 0
X#define C 1
X#define PASCAL 2
X#define SHELL 3
X#define STDINP 4
X#define HEADER 5
X#define YACC 6
X#define ASSEMBLY 7
X#define AWK 8
X#define VMENU 9
X#define COBOL 10
X#define MAKEFILE 11
SHAR_EOF
chmod 0644 src/utils/argfiles.h || echo "restore of src/utils/argfiles.h fails"
echo "x - extracting src/utils/bdr.h (Text)"
sed 's/^X//' << 'SHAR_EOF' > src/utils/bdr.h
X#ifndef BDR_H
X#define BDR_H
X
Xtypedef char Bool;
X#define True 1
X#define False 0
X
Xtypedef char Status;
X#define Error 0
X#define Ok 1
X
Xtypedef char FileIO; /* also uses Error and Ok */
X#define End_File 2
X
X/* xxNULL retained for compatibility until some reasonable percentage of
X * code is changed, but xx_NIL is now preferred usage for 'null' pointer
X*/
X#define CNULL ( (char *) 0)
X#define C_NIL ( (char *) 0)
X
X#define FNULL ( (FILE *) 0)
X#define F_NIL ( (FILE *) 0)
X
X#define CNTRL(X) ('X' - 64)
X#define Odd(X) (X & 1)
X
X/* Global means used througout system,
SHAR_EOF
echo "End of part 12"
echo "File src/utils/bdr.h is continued in part 13"
echo "13" > s2_seq_.tmp
exit 0