+/*
+ * RCS identification operation
+ */
+ static char rcsid[] =
+ "$Header: /usr/wft/RCS/SRC/RCS/ident.c,v 3.4 83/02/18 17:37:49 wft Exp $Purdue CS";
+/*****************************************************************************
+ *****************************************************************************
+ *
+ * Copyright (C) 1982 by Walter F. Tichy
+ * Purdue University
+ * Computer Science Department
+ * West Lafayette, IN 47907
+ *
+ * All rights reserved. No part of this software may be sold or distributed
+ * in any form or by any means without the prior written permission of the
+ * author.
+ * Report problems and direct all inquiries to Tichy@purdue (ARPA net).
+ */
+
+/* $Log: ident.c,v $
+ * Revision 3.4 83/02/18 17:37:49 wft
+ * removed printing of new line after last file.
+ *
+ * Revision 3.3 82/12/04 12:48:55 wft
+ * Added LOCKER.
+ *
+ * Revision 3.2 82/11/28 18:24:17 wft
+ * removed Suffix; added ungetc to avoid skipping over trailing KDELIM.
+ *
+ * Revision 3.1 82/10/13 15:58:51 wft
+ * fixed type of variables receiving from getc() (char-->int).
+*/
+
+#include "rcsbase.h"
+#define fflsbuf _flsbuf
+/* redefinition of _flsbuf in putc not needed */
+static char rcsbaseid[] = RCSBASE;
+
+main(argc, argv)
+int argc; char *argv[];
+/* Ident searches the named files for all occurrences
+ * of the pattern $keyword:...$, where the keywords are
+ * Author, Date, Header, Log, Revision, Source, and State.
+ */
+
+{
+ FILE *fp, *fopen();
+ register int c;
+ register int matchcount;
+
+ if (argc<2) {
+ fprintf(stderr, "ident error: no input file\n");
+ exit(1);
+ }
+ while ( --argc > 0 ) {
+ if ( (fp = fopen(*++argv, "r") ) == NULL ) {
+ fprintf(stderr, "ident error: can't open %s\n", *argv);
+ continue;
+ } else {
+ matchcount = 0;
+ printf( "%s:\n", *argv); /* print file name */
+ while( (c=getc(fp)) != EOF) {
+ if ( (char)c==KDELIM)
+ matchcount += match(fp);
+ }
+ if (matchcount == 0)
+ fprintf(stderr, "ident warning: no id keywords in %s\n", *argv);
+ if (argc>1) putchar('\n');
+ }
+ fclose(fp);
+ }
+}
+
+match(fp) /* group substring between two KDELIM's; then do pattern match */
+FILE *fp;
+
+{
+ char line[keyvallength];
+ register int c;
+ register char * tp;
+
+ tp = line;
+ while( (c = getc(fp)) != KDELIM ) {
+ *tp++ = c;
+ if ( c==EOF || c=='\n' || tp>= line+keyvallength-2)
+ return(0);
+ }
+ *tp++=c; /*append trailing KDELIM*/
+ *tp='\0';
+ if (isprefix(line, AUTHOR))
+ ;
+ else if ( isprefix(line,DATE) )
+ ;
+ else if ( isprefix(line, HEADER) )
+ ;
+ else if ( isprefix(line, LOCKER) )
+ ;
+ else if ( isprefix(line, LOG) )
+ ;
+ else if (isprefix(line, REVISION) )
+ ;
+ else if (isprefix(line, SOURCE) )
+ ;
+ else if ( isprefix(line, STATE) )
+ ;
+ else {
+ /* no match; put trailing KDELIM back into input */
+ ungetc(c,fp );
+ return(0);
+ }
+ fprintf(stdout," $%s\n",line);
+ return(1);
+}
+
+
+isprefix(s,t) /* return true if t is prefix of s; false otherwise */
+char s[], t[];
+{
+ int j, k;
+
+ for (j=0, k=0; t[k] != '\0' && s[j] != '\0' && s[j] == t[k]; ++j,++k)
+ ;
+ if ( t[k] != '\0' )
+ return(false);
+ if (s[j] == VDELIM)
+ return(true);
+ return(false);
+}