Annotation of 43BSD/contrib/rcs/src/ident.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  *                     RCS identification operation
                      3:  */
                      4:  static char rcsid[] =
                      5:  "$Header: /usr/wft/RCS/SRC/RCS/ident.c,v 3.4 83/02/18 17:37:49 wft Exp $Purdue CS";
                      6: /*****************************************************************************
                      7:  *****************************************************************************
                      8:  *
                      9:  * Copyright (C) 1982 by Walter F. Tichy
                     10:  *                       Purdue University
                     11:  *                       Computer Science Department
                     12:  *                       West Lafayette, IN 47907
                     13:  *
                     14:  * All rights reserved. No part of this software may be sold or distributed
                     15:  * in any form or by any means without the prior written permission of the
                     16:  * author.
                     17:  * Report problems and direct all inquiries to Tichy@purdue (ARPA net).
                     18:  */
                     19: 
                     20: /* $Log:       ident.c,v $
                     21:  * Revision 3.4  83/02/18  17:37:49  wft
                     22:  * removed printing of new line after last file.
                     23:  * 
                     24:  * Revision 3.3  82/12/04  12:48:55  wft
                     25:  * Added LOCKER.
                     26:  *
                     27:  * Revision 3.2  82/11/28  18:24:17  wft
                     28:  * removed Suffix; added ungetc to avoid skipping over trailing KDELIM.
                     29:  *
                     30:  * Revision 3.1  82/10/13  15:58:51  wft
                     31:  * fixed type of variables receiving from getc() (char-->int).
                     32: */
                     33: 
                     34: #include  "rcsbase.h"
                     35: #define fflsbuf _flsbuf
                     36: /* redefinition of _flsbuf in putc not needed */
                     37: static char rcsbaseid[] = RCSBASE;
                     38: 
                     39: main(argc, argv)
                     40: int  argc; char  *argv[];
                     41: /*  Ident searches the named files for all occurrences
                     42:  *  of the pattern $keyword:...$, where the keywords are
                     43:  *  Author, Date, Header, Log, Revision, Source, and State.
                     44:  */
                     45: 
                     46: {
                     47:    FILE *fp, *fopen();
                     48:    register int c;
                     49:    register int matchcount;
                     50: 
                     51:    if (argc<2) {
                     52:         fprintf(stderr,  "ident error: no input file\n");
                     53:         exit(1);
                     54:    }
                     55:    while ( --argc > 0 ) {
                     56:       if ( (fp = fopen(*++argv, "r") ) == NULL ) {
                     57:          fprintf(stderr,  "ident error: can't open %s\n", *argv);
                     58:          continue;
                     59:       } else {
                     60:          matchcount = 0;
                     61:          printf( "%s:\n", *argv);   /*  print file name  */
                     62:          while( (c=getc(fp)) != EOF) {
                     63:             if ( (char)c==KDELIM)
                     64:                matchcount += match(fp);
                     65:          }
                     66:          if (matchcount == 0)
                     67:             fprintf(stderr, "ident warning: no id keywords in %s\n", *argv);
                     68:          if (argc>1) putchar('\n');
                     69:       }
                     70:       fclose(fp);
                     71:    }
                     72: }
                     73: 
                     74: match(fp)   /* group substring between two KDELIM's; then do pattern match */
                     75: FILE *fp;
                     76: 
                     77: {
                     78:    char line[keyvallength];
                     79:    register int c;
                     80:    register char * tp;
                     81: 
                     82:    tp = line;
                     83:    while( (c = getc(fp)) != KDELIM ) {
                     84:       *tp++ = c;
                     85:       if ( c==EOF || c=='\n' || tp>= line+keyvallength-2)
                     86:          return(0);
                     87:       }
                     88:    *tp++=c;     /*append trailing KDELIM*/
                     89:    *tp='\0';
                     90:    if (isprefix(line, AUTHOR))
                     91:        ;
                     92:    else if ( isprefix(line,DATE) )
                     93:        ;
                     94:    else if ( isprefix(line, HEADER) )
                     95:        ;
                     96:    else if ( isprefix(line, LOCKER) )
                     97:        ;
                     98:    else if ( isprefix(line, LOG) )
                     99:        ;
                    100:    else if (isprefix(line, REVISION) )
                    101:        ;
                    102:    else if (isprefix(line, SOURCE) )
                    103:        ;
                    104:    else if ( isprefix(line, STATE) )
                    105:        ;
                    106:    else {
                    107:       /* no match; put trailing KDELIM back into input */
                    108:       ungetc(c,fp );
                    109:       return(0);
                    110:    }
                    111:    fprintf(stdout,"     $%s\n",line);
                    112:    return(1);
                    113: }
                    114: 
                    115: 
                    116: isprefix(s,t) /*  return true if t is prefix of s; false otherwise  */
                    117: char s[], t[];
                    118: {
                    119:    int  j, k;
                    120: 
                    121:    for (j=0, k=0; t[k] != '\0' && s[j] != '\0' && s[j] == t[k]; ++j,++k)
                    122:       ;
                    123:    if ( t[k] != '\0' )
                    124:       return(false);
                    125:    if (s[j] == VDELIM)
                    126:       return(true);
                    127:    return(false);
                    128: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.