summaryrefslogtreecommitdiff
path: root/usr.bin/unifdef/unifdef.c
diff options
context:
space:
mode:
authorTheo de Raadt <deraadt@cvs.openbsd.org>1998-11-16 21:58:30 +0000
committerTheo de Raadt <deraadt@cvs.openbsd.org>1998-11-16 21:58:30 +0000
commit1449670f97f9b7eae9261c7a3200c259e78a0135 (patch)
tree4dbfa26b356602e90378f904c0952af501227bb1 /usr.bin/unifdef/unifdef.c
parentd5283902fbf43a518a7037d5bb3bd4adc0e8fd90 (diff)
clean; adding // comment support
Diffstat (limited to 'usr.bin/unifdef/unifdef.c')
-rw-r--r--usr.bin/unifdef/unifdef.c975
1 files changed, 501 insertions, 474 deletions
diff --git a/usr.bin/unifdef/unifdef.c b/usr.bin/unifdef/unifdef.c
index f117311ffc0..e4f1acbee26 100644
--- a/usr.bin/unifdef/unifdef.c
+++ b/usr.bin/unifdef/unifdef.c
@@ -1,5 +1,5 @@
-/* $OpenBSD: unifdef.c,v 1.2 1996/06/26 05:42:10 deraadt Exp $ */
-/* $NetBSD: unifdef.c,v 1.4 1994/12/20 01:44:07 jtc Exp $ */
+/* $OpenBSD: unifdef.c,v 1.3 1998/11/16 21:58:29 deraadt Exp $ */
+/* $NetBSD: unifdef.c,v 1.6 1998/10/08 01:31:59 wsanchez Exp $ */
/*
* Copyright (c) 1985, 1993
@@ -41,14 +41,14 @@
static char copyright[] =
"@(#) Copyright (c) 1985, 1993\n\
The Regents of the University of California. All rights reserved.\n";
-#endif /* not lint */
+#endif /* not lint */
#ifndef lint
#if 0
static char sccsid[] = "@(#)unifdef.c 8.1 (Berkeley) 6/6/93";
#endif
-static char rcsid[] = "$OpenBSD: unifdef.c,v 1.2 1996/06/26 05:42:10 deraadt Exp $";
-#endif /* not lint */
+static char rcsid[] = "$OpenBSD: unifdef.c,v 1.3 1998/11/16 21:58:29 deraadt Exp $";
+#endif /* not lint */
/*
* unifdef - remove ifdef'ed lines
@@ -67,589 +67,616 @@ static char rcsid[] = "$OpenBSD: unifdef.c,v 1.2 1996/06/26 05:42:10 deraadt Exp
#include <ctype.h>
#define BSS
-FILE *input;
+FILE *input;
#ifndef YES
#define YES 1
#define NO 0
-#endif/*YES */
+#endif /* YES */
+#define C_COMMENT 1
+#define CXX_COMMENT 2
typedef int Bool;
-char *progname BSS;
-char *filename BSS;
-char text BSS; /* -t option in effect: this is a text file */
-char lnblank BSS; /* -l option in effect: blank deleted lines */
-char complement BSS; /* -c option in effect: complement the operation */
+char *progname BSS;
+char *filename BSS;
+char text BSS; /* -t option in effect: this is a text file */
+char lnblank BSS; /* -l option in effect: blank deleted lines */
+char complement BSS; /* -c option in effect: complement the
+ * operation */
#define MAXSYMS 100
-char *symname[MAXSYMS] BSS; /* symbol name */
-char true[MAXSYMS] BSS; /* -Dsym */
-char ignore[MAXSYMS] BSS; /* -iDsym or -iUsym */
-char insym[MAXSYMS] BSS; /* state: false, inactive, true */
-#define SYM_INACTIVE 0 /* symbol is currently inactive */
-#define SYM_FALSE 1 /* symbol is currently false */
-#define SYM_TRUE 2 /* symbol is currently true */
+char *symname[MAXSYMS] BSS; /* symbol name */
+char true[MAXSYMS] BSS; /* -Dsym */
+char ignore[MAXSYMS] BSS; /* -iDsym or -iUsym */
+char insym[MAXSYMS] BSS; /* state: false, inactive, true */
+#define SYM_INACTIVE 0 /* symbol is currently inactive */
+#define SYM_FALSE 1 /* symbol is currently false */
+#define SYM_TRUE 2 /* symbol is currently true */
char nsyms BSS;
-char incomment BSS; /* inside C comment */
+char incomment BSS; /* inside C comment */
#define QUOTE_NONE 0
#define QUOTE_SINGLE 1
#define QUOTE_DOUBLE 2
-char inquote BSS; /* inside single or double quotes */
+char inquote BSS; /* inside single or double quotes */
int exitstat BSS;
-int error __P((int, int, int));
-int findsym __P((char *));
-void flushline __P((Bool));
-int getlin __P((char *, int, FILE *, int));
-void pfile __P((void));
-void prname __P((void));
+int error __P((int, int, int));
+int findsym __P((char *));
+void flushline __P((Bool));
+int getlin __P((char *, int, FILE *, int));
+void pfile __P((void));
+void prname __P((void));
char *skipcomment __P((char *));
char *skipquote __P((char *, int));
int
-main (argc, argv)
-int argc;
-char **argv;
+main(argc, argv)
+ int argc;
+ char **argv;
{
- char **curarg;
- register char *cp;
- register char *cp1;
- char ignorethis;
-
- progname = argv[0][0] ? argv[0] : "unifdef";
-
- for (curarg = &argv[1]; --argc > 0; curarg++) {
- if (*(cp1 = cp = *curarg) != '-')
- break;
- if (*++cp1 == 'i') {
- ignorethis = YES;
- cp1++;
- } else
- ignorethis = NO;
- if ( ( *cp1 == 'D'
- || *cp1 == 'U'
- )
- && cp1[1] != '\0'
- ) {
- register int symind;
-
- if ((symind = findsym (&cp1[1])) < 0) {
- if (nsyms >= MAXSYMS) {
- prname ();
- fprintf (stderr, "too many symbols.\n");
- exit (2);
- }
- symind = nsyms++;
- symname[symind] = &cp1[1];
- insym[symind] = SYM_INACTIVE;
- }
- ignore[symind] = ignorethis;
- true[symind] = *cp1 == 'D' ? YES : NO;
- } else if (ignorethis)
- goto unrec;
- else if (strcmp (&cp[1], "t") == 0)
- text = YES;
- else if (strcmp (&cp[1], "l") == 0)
- lnblank = YES;
- else if (strcmp (&cp[1], "c") == 0)
- complement = YES;
- else {
- unrec:
- prname ();
- fprintf (stderr, "unrecognized option: %s\n", cp);
- goto usage;
+ char **curarg;
+ char *cp;
+ char *cp1;
+ char ignorethis;
+
+ progname = argv[0][0] ? argv[0] : "unifdef";
+
+ for (curarg = &argv[1]; --argc > 0; curarg++) {
+ if (*(cp1 = cp = *curarg) != '-')
+ break;
+ if (*++cp1 == 'i') {
+ ignorethis = YES;
+ cp1++;
+ } else
+ ignorethis = NO;
+ if ((*cp1 == 'D'
+ || *cp1 == 'U'
+ )
+ && cp1[1] != '\0'
+ ) {
+ int symind;
+
+ if ((symind = findsym(&cp1[1])) < 0) {
+ if (nsyms >= MAXSYMS) {
+ prname();
+ fprintf(stderr, "too many symbols.\n");
+ exit(2);
+ }
+ symind = nsyms++;
+ symname[symind] = &cp1[1];
+ insym[symind] = SYM_INACTIVE;
+ }
+ ignore[symind] = ignorethis;
+ true[symind] = *cp1 == 'D' ? YES : NO;
+ } else
+ if (ignorethis)
+ goto unrec;
+ else
+ if (strcmp(&cp[1], "t") == 0)
+ text = YES;
+ else
+ if (strcmp(&cp[1], "l") == 0)
+ lnblank = YES;
+ else
+ if (strcmp(&cp[1], "c") == 0)
+ complement = YES;
+ else {
+ unrec:
+ prname();
+ fprintf(stderr, "unrecognized option: %s\n", cp);
+ goto usage;
+ }
}
- }
- if (nsyms == 0) {
- usage:
- fprintf (stderr, "\
+ if (nsyms == 0) {
+usage:
+ fprintf(stderr, "\
Usage: %s [-l] [-t] [-c] [[-Dsym] [-Usym] [-iDsym] [-iUsym]]... [file]\n\
At least one arg from [-D -U -iD -iU] is required\n", progname);
- exit (2);
- }
-
- if (argc > 1) {
- prname ();
- fprintf (stderr, "can only do one file.\n");
- } else if (argc == 1) {
- filename = *curarg;
- if ((input = fopen (filename, "r")) != NULL) {
- pfile();
- (void) fclose (input);
- } else {
- prname ();
- fprintf (stderr, "can't open ");
- perror(*curarg);
+ exit(2);
}
- } else {
- filename = "[stdin]";
- input = stdin;
- pfile();
- }
-
- (void) fflush (stdout);
- exit (exitstat);
-}
+ if (argc > 1) {
+ prname();
+ fprintf(stderr, "can only do one file.\n");
+ } else
+ if (argc == 1) {
+ filename = *curarg;
+ if ((input = fopen(filename, "r")) != NULL) {
+ pfile();
+ (void) fclose(input);
+ } else {
+ prname();
+ fprintf(stderr, "can't open ");
+ perror(*curarg);
+ }
+ } else {
+ filename = "[stdin]";
+ input = stdin;
+ pfile();
+ }
+ (void) fflush(stdout);
+ exit(exitstat);
+}
/* types of input lines: */
typedef int Linetype;
-#define LT_PLAIN 0 /* ordinary line */
-#define LT_TRUE 1 /* a true #ifdef of a symbol known to us */
-#define LT_FALSE 2 /* a false #ifdef of a symbol known to us */
-#define LT_OTHER 3 /* an #ifdef of a symbol not known to us */
-#define LT_IF 4 /* an #ifdef of a symbol not known to us */
-#define LT_ELSE 5 /* #else */
-#define LT_ENDIF 6 /* #endif */
-#define LT_LEOF 7 /* end of file */
+#define LT_PLAIN 0 /* ordinary line */
+#define LT_TRUE 1 /* a true #ifdef of a symbol known to us */
+#define LT_FALSE 2 /* a false #ifdef of a symbol known to us */
+#define LT_OTHER 3 /* an #ifdef of a symbol not known to us */
+#define LT_IF 4 /* an #ifdef of a symbol not known to us */
+#define LT_ELSE 5 /* #else */
+#define LT_ENDIF 6 /* #endif */
+#define LT_LEOF 7 /* end of file */
Linetype checkline __P((int *));
typedef int Reject_level;
-Reject_level reject BSS; /* 0 or 1: pass thru; 1 or 2: ignore comments */
+Reject_level reject BSS; /* 0 or 1: pass thru; 1 or 2: ignore comments */
#define REJ_NO 0
#define REJ_IGNORE 1
#define REJ_YES 2
int doif __P((int, int, Reject_level, int));
-int linenum BSS; /* current line number */
-int stqcline BSS; /* start of current coment or quote */
-char *errs[] = {
+int linenum BSS; /* current line number */
+int stqcline BSS; /* start of current coment or quote */
+char *errs[] = {
#define NO_ERR 0
- "",
+ "",
#define END_ERR 1
- "",
+ "",
#define ELSE_ERR 2
- "Inappropriate else",
+ "Inappropriate else",
#define ENDIF_ERR 3
- "Inappropriate endif",
+ "Inappropriate endif",
#define IEOF_ERR 4
- "Premature EOF in ifdef",
+ "Premature EOF in ifdef",
#define CEOF_ERR 5
- "Premature EOF in comment",
+ "Premature EOF in comment",
#define Q1EOF_ERR 6
- "Premature EOF in quoted character",
+ "Premature EOF in quoted character",
#define Q2EOF_ERR 7
- "Premature EOF in quoted string"
+ "Premature EOF in quoted string"
};
-
/* States for inif arg to doif */
#define IN_NONE 0
#define IN_IF 1
#define IN_ELSE 2
void
-pfile ()
+pfile()
{
- reject = REJ_NO;
- (void) doif (-1, IN_NONE, reject, 0);
- return;
+ reject = REJ_NO;
+ (void) doif(-1, IN_NONE, reject, 0);
+ return;
}
int
-doif (thissym, inif, prevreject, depth)
-register int thissym; /* index of the symbol who was last ifdef'ed */
-int inif; /* YES or NO we are inside an ifdef */
-Reject_level prevreject;/* previous value of reject */
-int depth; /* depth of ifdef's */
+doif(thissym, inif, prevreject, depth)
+ int thissym; /* index of the symbol who was last ifdef'ed */
+ int inif; /* YES or NO we are inside an ifdef */
+ Reject_level prevreject;/* previous value of reject */
+ int depth; /* depth of ifdef's */
{
- register Linetype lineval;
- register Reject_level thisreject;
- int doret; /* tmp return value of doif */
- int cursym; /* index of the symbol returned by checkline */
- int stline; /* line number when called this time */
-
- stline = linenum;
- for (;;) {
- switch (lineval = checkline (&cursym)) {
- case LT_PLAIN:
- flushline (YES);
- break;
-
- case LT_TRUE:
- case LT_FALSE:
- thisreject = reject;
- if (lineval == LT_TRUE)
- insym[cursym] = SYM_TRUE;
- else {
- if (reject != REJ_YES)
- reject = ignore[cursym] ? REJ_IGNORE : REJ_YES;
- insym[cursym] = SYM_FALSE;
- }
- if (ignore[cursym])
- flushline (YES);
- else {
- exitstat = 1;
- flushline (NO);
- }
- if ((doret = doif (cursym, IN_IF, thisreject, depth + 1)) != NO_ERR)
- return error (doret, stline, depth);
- break;
-
- case LT_IF:
- case LT_OTHER:
- flushline (YES);
- if ((doret = doif (-1, IN_IF, reject, depth + 1)) != NO_ERR)
- return error (doret, stline, depth);
- break;
-
- case LT_ELSE:
- if (inif != IN_IF)
- return error (ELSE_ERR, linenum, depth);
- inif = IN_ELSE;
- if (thissym >= 0) {
- if (insym[thissym] == SYM_TRUE) {
- reject = ignore[thissym] ? REJ_IGNORE : REJ_YES;
- insym[thissym] = SYM_FALSE;
- } else { /* (insym[thissym] == SYM_FALSE) */
- reject = prevreject;
- insym[thissym] = SYM_TRUE;
- }
- if (!ignore[thissym]) {
- flushline (NO);
- break;
- }
- }
- flushline (YES);
- break;
-
- case LT_ENDIF:
- if (inif == IN_NONE)
- return error (ENDIF_ERR, linenum, depth);
- if (thissym >= 0) {
- insym[thissym] = SYM_INACTIVE;
- reject = prevreject;
- if (!ignore[thissym]) {
- flushline (NO);
- return NO_ERR;
+ Linetype lineval;
+ Reject_level thisreject;
+ int doret; /* tmp return value of doif */
+ int cursym; /* index of the symbol returned by checkline */
+ int stline; /* line number when called this time */
+
+ stline = linenum;
+ for (;;) {
+ switch (lineval = checkline(&cursym)) {
+ case LT_PLAIN:
+ flushline(YES);
+ break;
+
+ case LT_TRUE:
+ case LT_FALSE:
+ thisreject = reject;
+ if (lineval == LT_TRUE)
+ insym[cursym] = SYM_TRUE;
+ else {
+ if (reject != REJ_YES)
+ reject = ignore[cursym] ? REJ_IGNORE : REJ_YES;
+ insym[cursym] = SYM_FALSE;
+ }
+ if (ignore[cursym])
+ flushline(YES);
+ else {
+ exitstat = 1;
+ flushline(NO);
+ }
+ if ((doret = doif(cursym, IN_IF, thisreject, depth + 1)) != NO_ERR)
+ return error(doret, stline, depth);
+ break;
+
+ case LT_IF:
+ case LT_OTHER:
+ flushline(YES);
+ if ((doret = doif(-1, IN_IF, reject, depth + 1)) != NO_ERR)
+ return error(doret, stline, depth);
+ break;
+
+ case LT_ELSE:
+ if (inif != IN_IF)
+ return error(ELSE_ERR, linenum, depth);
+ inif = IN_ELSE;
+ if (thissym >= 0) {
+ if (insym[thissym] == SYM_TRUE) {
+ reject = ignore[thissym] ? REJ_IGNORE : REJ_YES;
+ insym[thissym] = SYM_FALSE;
+ } else { /* (insym[thissym] ==
+ * SYM_FALSE) */
+ reject = prevreject;
+ insym[thissym] = SYM_TRUE;
+ }
+ if (!ignore[thissym]) {
+ flushline(NO);
+ break;
+ }
+ }
+ flushline(YES);
+ break;
+
+ case LT_ENDIF:
+ if (inif == IN_NONE)
+ return error(ENDIF_ERR, linenum, depth);
+ if (thissym >= 0) {
+ insym[thissym] = SYM_INACTIVE;
+ reject = prevreject;
+ if (!ignore[thissym]) {
+ flushline(NO);
+ return NO_ERR;
+ }
+ }
+ flushline(YES);
+ return NO_ERR;
+
+ case LT_LEOF:{
+ int err;
+ err = incomment
+ ? CEOF_ERR
+ : inquote == QUOTE_SINGLE
+ ? Q1EOF_ERR
+ : inquote == QUOTE_DOUBLE
+ ? Q2EOF_ERR
+ : NO_ERR;
+ if (inif != IN_NONE) {
+ if (err != NO_ERR)
+ (void) error(err, stqcline, depth);
+ return error(IEOF_ERR, stline, depth);
+ } else
+ if (err != NO_ERR)
+ return error(err, stqcline, depth);
+ else
+ return NO_ERR;
+ }
}
- }
- flushline (YES);
- return NO_ERR;
-
- case LT_LEOF: {
- int err;
- err = incomment
- ? CEOF_ERR
- : inquote == QUOTE_SINGLE
- ? Q1EOF_ERR
- : inquote == QUOTE_DOUBLE
- ? Q2EOF_ERR
- : NO_ERR;
- if (inif != IN_NONE) {
- if (err != NO_ERR)
- (void) error (err, stqcline, depth);
- return error (IEOF_ERR, stline, depth);
- } else if (err != NO_ERR)
- return error (err, stqcline, depth);
- else
- return NO_ERR;
- }
}
- }
}
-
#define endsym(c) (!isalpha (c) && !isdigit (c) && c != '_')
#define MAXLINE 256
-char tline[MAXLINE] BSS;
+char tline[MAXLINE] BSS;
Linetype
-checkline (cursym)
-int *cursym; /* if LT_TRUE or LT_FALSE returned, set this to sym index */
+checkline(cursym)
+ int *cursym; /* if LT_TRUE or LT_FALSE returned, set this
+ * to sym index */
{
- register char *cp;
- register char *symp;
- char *scp;
- Linetype retval;
-# define KWSIZE 8
- char keyword[KWSIZE];
-
- linenum++;
- if (getlin (tline, sizeof tline, input, NO) == EOF)
- return LT_LEOF;
-
- retval = LT_PLAIN;
- if ( *(cp = tline) != '#'
- || incomment
- || inquote == QUOTE_SINGLE
- || inquote == QUOTE_DOUBLE
- )
- goto eol;
-
- cp = skipcomment (++cp);
- symp = keyword;
- while (!endsym (*cp)) {
- *symp = *cp++;
- if (++symp >= &keyword[KWSIZE])
- goto eol;
- }
- *symp = '\0';
-
- if (strcmp (keyword, "ifdef") == 0) {
- retval = YES;
- goto ifdef;
- } else if (strcmp (keyword, "ifndef") == 0) {
- retval = NO;
- ifdef:
- scp = cp = skipcomment (++cp);
- if (incomment) {
- retval = LT_PLAIN;
- goto eol;
- }
- {
- int symind;
-
- if ((symind = findsym (scp)) >= 0)
- retval = (retval ^ true[*cursym = symind])
- ? LT_FALSE : LT_TRUE;
- else
- retval = LT_OTHER;
- }
- } else if (strcmp (keyword, "if") == 0)
- retval = LT_IF;
- else if (strcmp (keyword, "else") == 0)
- retval = LT_ELSE;
- else if (strcmp (keyword, "endif") == 0)
- retval = LT_ENDIF;
-
- eol:
- if (!text && reject != REJ_IGNORE)
- for (; *cp; ) {
- if (incomment)
- cp = skipcomment (cp);
- else if (inquote == QUOTE_SINGLE)
- cp = skipquote (cp, QUOTE_SINGLE);
- else if (inquote == QUOTE_DOUBLE)
- cp = skipquote (cp, QUOTE_DOUBLE);
- else if (*cp == '/' && cp[1] == '*')
- cp = skipcomment (cp);
- else if (*cp == '\'')
- cp = skipquote (cp, QUOTE_SINGLE);
- else if (*cp == '"')
- cp = skipquote (cp, QUOTE_DOUBLE);
- else
- cp++;
+ char *cp;
+ char *symp;
+ char *scp;
+ Linetype retval;
+#define KWSIZE 8
+ char keyword[KWSIZE];
+
+ linenum++;
+ if (getlin(tline, sizeof tline, input, NO) == EOF)
+ return LT_LEOF;
+
+ retval = LT_PLAIN;
+ if (*(cp = tline) != '#'
+ || incomment
+ || inquote == QUOTE_SINGLE
+ || inquote == QUOTE_DOUBLE
+ )
+ goto eol;
+
+ cp = skipcomment(++cp);
+ symp = keyword;
+ while (!endsym(*cp)) {
+ *symp = *cp++;
+ if (++symp >= &keyword[KWSIZE])
+ goto eol;
}
- return retval;
-}
+ *symp = '\0';
+ if (strcmp(keyword, "ifdef") == 0) {
+ retval = YES;
+ goto ifdef;
+ } else
+ if (strcmp(keyword, "ifndef") == 0) {
+ retval = NO;
+ ifdef:
+ scp = cp = skipcomment(++cp);
+ if (incomment) {
+ retval = LT_PLAIN;
+ goto eol;
+ } {
+ int symind;
+
+ if ((symind = findsym(scp)) >= 0)
+ retval = (retval ^ true[*cursym = symind])
+ ? LT_FALSE : LT_TRUE;
+ else
+ retval = LT_OTHER;
+ }
+ } else
+ if (strcmp(keyword, "if") == 0)
+ retval = LT_IF;
+ else
+ if (strcmp(keyword, "else") == 0)
+ retval = LT_ELSE;
+ else
+ if (strcmp(keyword, "endif") == 0)
+ retval = LT_ENDIF;
+
+eol:
+ if (!text && reject != REJ_IGNORE)
+ for (; *cp;) {
+ if (incomment)
+ cp = skipcomment(cp);
+ else
+ if (inquote == QUOTE_SINGLE)
+ cp = skipquote(cp, QUOTE_SINGLE);
+ else
+ if (inquote == QUOTE_DOUBLE)
+ cp = skipquote(cp, QUOTE_DOUBLE);
+ else
+ if (*cp == '/' && (cp[1] == '*' || cp[1] == '/'))
+ cp = skipcomment(cp);
+ else
+ if (*cp == '\'')
+ cp = skipquote(cp, QUOTE_SINGLE);
+ else
+ if (*cp == '"')
+ cp = skipquote(cp, QUOTE_DOUBLE);
+ else
+ cp++;
+ }
+ return retval;
+}
/*
* Skip over comments and stop at the next charaacter
* position that is not whitespace.
*/
-char *
-skipcomment (cp)
-register char *cp;
+char *
+skipcomment(cp)
+ char *cp;
{
- if (incomment)
- goto inside;
- for (;; cp++) {
- while (*cp == ' ' || *cp == '\t')
- cp++;
- if (text)
- return cp;
- if ( cp[0] != '/'
- || cp[1] != '*'
- )
- return cp;
- cp += 2;
- if (!incomment) {
- incomment = YES;
- stqcline = linenum;
- }
- inside:
- for (;;) {
- for (; *cp != '*'; cp++)
- if (*cp == '\0')
- return cp;
- if (*++cp == '/') {
- incomment = NO;
- break;
- }
+ if (incomment)
+ goto inside;
+ for (;; cp++) {
+ while (*cp == ' ' || *cp == '\t')
+ cp++;
+ if (text)
+ return cp;
+ if (cp[0] != '/')
+ return cp;
+
+ if (cp[1] == '*') {
+ if (!incomment) {
+ incomment = C_COMMENT;
+ stqcline = linenum;
+ }
+ } else if (cp[1] == '/') {
+ if (!incomment) {
+ incomment = CXX_COMMENT;
+ stqcline = linenum;
+ }
+ } else
+ return cp;
+
+ cp += 2;
+inside:
+ if (incomment == C_COMMENT) {
+ for (;;) {
+ for (; *cp != '*'; cp++)
+ if (*cp == '\0')
+ return cp;
+ if (*++cp == '/') {
+ incomment = NO;
+ break;
+ }
+ }
+ }
+ else if (incomment == CXX_COMMENT) {
+ for (; *cp != '\n'; cp++)
+ if (*cp == '\0')
+ return cp;
+ incomment = NO;
+ }
}
- }
}
-
/*
* Skip over a quoted string or character and stop at the next charaacter
* position that is not whitespace.
*/
-char *
-skipquote (cp, type)
-register char *cp;
-register int type;
+char *
+skipquote(cp, type)
+ char *cp;
+ int type;
{
- register char qchar;
-
- qchar = type == QUOTE_SINGLE ? '\'' : '"';
-
- if (inquote == type)
- goto inside;
- for (;; cp++) {
- if (*cp != qchar)
- return cp;
- cp++;
- inquote = type;
- stqcline = linenum;
- inside:
- for (; ; cp++) {
- if (*cp == qchar)
- break;
- if ( *cp == '\0'
- || *cp == '\\' && *++cp == '\0'
- )
- return cp;
+ char qchar;
+
+ qchar = type == QUOTE_SINGLE ? '\'' : '"';
+
+ if (inquote == type)
+ goto inside;
+ for (;; cp++) {
+ if (*cp != qchar)
+ return cp;
+ cp++;
+ inquote = type;
+ stqcline = linenum;
+inside:
+ for (;; cp++) {
+ if (*cp == qchar)
+ break;
+ if (*cp == '\0' || (*cp == '\\' && *++cp == '\0'))
+ return cp;
+ }
+ inquote = QUOTE_NONE;
}
- inquote = QUOTE_NONE;
- }
}
-
/*
* findsym - look for the symbol in the symbol table.
* if found, return symbol table index,
* else return -1.
*/
int
-findsym (str)
-char *str;
+findsym(str)
+ char *str;
{
- register char *cp;
- register char *symp;
- register int symind;
- register char chr;
-
- for (symind = 0; symind < nsyms; ++symind) {
- if (insym[symind] == SYM_INACTIVE) {
- for ( symp = symname[symind], cp = str
- ; *symp && *cp == *symp
- ; cp++, symp++
- )
- continue;
- chr = *cp;
- if (*symp == '\0' && endsym (chr))
- return symind;
+ char *cp;
+ char *symp;
+ int symind;
+ char chr;
+
+ for (symind = 0; symind < nsyms; ++symind) {
+ if (insym[symind] == SYM_INACTIVE) {
+ for (symp = symname[symind], cp = str
+ ; *symp && *cp == *symp
+ ; cp++, symp++
+ )
+ continue;
+ chr = *cp;
+ if (*symp == '\0' && endsym(chr))
+ return symind;
+ }
}
- }
- return -1;
+ return -1;
}
-
/*
* getlin - expands tabs if asked for
* and (if compiled in) treats form-feed as an end-of-line
*/
int
-getlin (line, maxline, inp, expandtabs)
-register char *line;
-int maxline;
-FILE *inp;
-int expandtabs;
+getlin(line, maxline, inp, expandtabs)
+ char *line;
+ int maxline;
+ FILE *inp;
+ int expandtabs;
{
- int tmp;
- register int num;
- register int chr;
+ int tmp;
+ int num;
+ int chr;
#ifdef FFSPECIAL
- static char havechar = NO; /* have leftover char from last time */
- static char svchar BSS;
-#endif/*FFSPECIAL */
+ static char havechar = NO; /* have leftover char from last time */
+ static char svchar BSS;
+#endif /* FFSPECIAL */
- num = 0;
+ num = 0;
#ifdef FFSPECIAL
- if (havechar) {
- havechar = NO;
- chr = svchar;
- goto ent;
- }
-#endif/*FFSPECIAL */
- while (num + 8 < maxline) { /* leave room for tab */
- chr = getc (inp);
- if (isprint (chr)) {
+ if (havechar) {
+ havechar = NO;
+ chr = svchar;
+ goto ent;
+ }
+#endif /* FFSPECIAL */
+ while (num + 8 < maxline) { /* leave room for tab */
+ chr = getc(inp);
+ if (isprint(chr)) {
#ifdef FFSPECIAL
- ent:
-#endif/*FFSPECIAL */
- *line++ = chr;
- num++;
- } else
- switch (chr) {
- case EOF:
- return EOF;
-
- case '\t':
- if (expandtabs) {
- num += tmp = 8 - (num & 7);
- do
- *line++ = ' ';
- while (--tmp);
- break;
- }
- default:
- *line++ = chr;
- num++;
- break;
-
- case '\n':
- *line = '\n';
- num++;
- goto end;
+ ent:
+#endif /* FFSPECIAL */
+ *line++ = chr;
+ num++;
+ } else
+ switch (chr) {
+ case EOF:
+ return EOF;
+
+ case '\t':
+ if (expandtabs) {
+ num += tmp = 8 - (num & 7);
+ do
+ *line++ = ' ';
+ while (--tmp);
+ break;
+ }
+ default:
+ *line++ = chr;
+ num++;
+ break;
+
+ case '\n':
+ *line = '\n';
+ num++;
+ goto end;
#ifdef FFSPECIAL
- case '\f':
- if (++num == 1)
- *line = '\f';
- else {
- *line = '\n';
- havechar = YES;
- svchar = chr;
- }
- goto end;
-#endif/*FFSPECIAL */
- }
- }
- end:
- *++line = '\0';
- return num;
+ case '\f':
+ if (++num == 1)
+ *line = '\f';
+ else {
+ *line = '\n';
+ havechar = YES;
+ svchar = chr;
+ }
+ goto end;
+#endif /* FFSPECIAL */
+ }
+ }
+end:
+ *++line = '\0';
+ return num;
}
void
-flushline (keep)
-Bool keep;
+flushline(keep)
+ Bool keep;
{
- if ((keep && reject != REJ_YES) ^ complement) {
- register char *line = tline;
- register FILE *out = stdout;
- register char chr;
-
- while (chr = *line++)
- putc (chr, out);
- } else if (lnblank)
- putc ('\n', stdout);
- return;
+ if ((keep && reject != REJ_YES) ^ complement) {
+ char *line = tline;
+ FILE *out = stdout;
+ char chr;
+
+ while ((chr = *line++))
+ putc(chr, out);
+ } else
+ if (lnblank)
+ putc('\n', stdout);
+ return;
}
void
-prname ()
+prname()
{
- fprintf (stderr, "%s: ", progname);
- return;
+ fprintf(stderr, "%s: ", progname);
+ return;
}
int
-error (err, line, depth)
-int err; /* type of error & index into error string array */
-int line; /* line number */
-int depth; /* how many ifdefs we are inside */
+error(err, line, depth)
+ int err; /* type of error & index into error string
+ * array */
+ int line; /* line number */
+ int depth; /* how many ifdefs we are inside */
{
- if (err == END_ERR)
- return err;
+ if (err == END_ERR)
+ return err;
- prname ();
+ prname();
#ifndef TESTING
- fprintf (stderr, "Error in %s line %d: %s.\n", filename, line, errs[err]);
-#else/* TESTING */
- fprintf (stderr, "Error in %s line %d: %s. ", filename, line, errs[err]);
- fprintf (stderr, "ifdef depth: %d\n", depth);
-#endif/*TESTING */
-
- exitstat = 2;
- return depth > 1 ? IEOF_ERR : END_ERR;
+ fprintf(stderr, "Error in %s line %d: %s.\n", filename, line, errs[err]);
+#else /* TESTING */
+ fprintf(stderr, "Error in %s line %d: %s. ", filename, line, errs[err]);
+ fprintf(stderr, "ifdef depth: %d\n", depth);
+#endif /* TESTING */
+
+ exitstat = 2;
+ return depth > 1 ? IEOF_ERR : END_ERR;
}