BSD 4_4_Lite1 release
[unix-history] / usr / src / usr.bin / ctags / tree.c
index 9d45b39..61decd2 100644 (file)
@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 1987, 1993
+ * Copyright (c) 1987, 1993, 1994
  *     The Regents of the University of California.  All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  *     The Regents of the University of California.  All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  */
 
 #ifndef lint
  */
 
 #ifndef lint
-static char sccsid[] = "@(#)tree.c     8.1 (Berkeley) 6/6/93";
+static char sccsid[] = "@(#)tree.c     8.3 (Berkeley) 4/2/94";
 #endif /* not lint */
 
 #endif /* not lint */
 
-#include <errno.h>
+#include <err.h>
+#include <limits.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+
 #include "ctags.h"
 
 #include "ctags.h"
 
+static void    add_node __P((NODE *, NODE *));
+static void    free_tree __P((NODE *));
+
 /*
  * pfnote --
  *     enter a new node in the tree
  */
 /*
  * pfnote --
  *     enter a new node in the tree
  */
-pfnote(name,ln)
+void
+pfnote(name, ln)
        char    *name;
        int     ln;
 {
        char    *name;
        int     ln;
 {
-       extern NODE     *head;          /* head of the sorted binary tree */
-       extern char     *curfile;       /* current input file name */
-       register NODE   *np;
-       register char   *fp;
+       NODE    *np;
+       char    *fp;
        char    nbuf[MAXTOKEN];
 
        /*NOSTRICT*/
        if (!(np = (NODE *)malloc(sizeof(NODE)))) {
        char    nbuf[MAXTOKEN];
 
        /*NOSTRICT*/
        if (!(np = (NODE *)malloc(sizeof(NODE)))) {
-               fputs("ctags: too many entries to sort\n",stderr);
+               warnx("too many entries to sort");
                put_entries(head);
                free_tree(head);
                /*NOSTRICT*/
                put_entries(head);
                free_tree(head);
                /*NOSTRICT*/
-               if (!(head = np = (NODE *)malloc(sizeof(NODE)))) {
-                       fputs("ctags: out of space.\n",stderr);
-                       exit(1);
-               }
+               if (!(head = np = (NODE *)malloc(sizeof(NODE))))
+                       err(1, "out of space");
        }
        }
-       if (!xflag && !strcmp(name,"main")) {
-               if (!(fp = rindex(curfile,'/')))
+       if (!xflag && !strcmp(name, "main")) {
+               if (!(fp = strrchr(curfile, '/')))
                        fp = curfile;
                else
                        ++fp;
                        fp = curfile;
                else
                        ++fp;
-               (void)sprintf(nbuf,"M%s",fp);
-               fp = rindex(nbuf,'.');
+               (void)sprintf(nbuf, "M%s", fp);
+               fp = strrchr(nbuf, '.');
                if (fp && !fp[2])
                        *fp = EOS;
                name = nbuf;
        }
                if (fp && !fp[2])
                        *fp = EOS;
                name = nbuf;
        }
-       if (!(np->entry = strdup(name))) {
-               (void)fprintf(stderr, "ctags: %s\n", strerror(errno));
-               exit(1);
-       }
+       if (!(np->entry = strdup(name)))
+               err(1, NULL);
        np->file = curfile;
        np->lno = ln;
        np->left = np->right = 0;
        np->file = curfile;
        np->lno = ln;
        np->left = np->right = 0;
-       if (!(np->pat = strdup(lbuf))) {
-               (void)fprintf(stderr, "ctags: %s\n", strerror(errno));
-               exit(1);
-       }
+       if (!(np->pat = strdup(lbuf)))
+               err(1, NULL);
        if (!head)
                head = np;
        else
        if (!head)
                head = np;
        else
-               add_node(np,head);
+               add_node(np, head);
 }
 
 }
 
-add_node(node,cur_node)
-       register NODE   *node,
-                       *cur_node;
+static void
+add_node(node, cur_node)
+       NODE    *node,
+               *cur_node;
 {
 {
-       extern int      wflag;                  /* -w: suppress warnings */
-       register int    dif;
+       int     dif;
 
 
-       dif = strcmp(node->entry,cur_node->entry);
+       dif = strcmp(node->entry, cur_node->entry);
        if (!dif) {
                if (node->file == cur_node->file) {
                        if (!wflag)
        if (!dif) {
                if (node->file == cur_node->file) {
                        if (!wflag)
-                               fprintf(stderr,"Duplicate entry in file %s, line %d: %s\nSecond entry ignored\n",node->file,lineno,node->entry);
+                               fprintf(stderr, "Duplicate entry in file %s, line %d: %s\nSecond entry ignored\n", node->file, lineno, node->entry);
                        return;
                }
                if (!cur_node->been_warned)
                        if (!wflag)
                        return;
                }
                if (!cur_node->been_warned)
                        if (!wflag)
-                               fprintf(stderr,"Duplicate entry in files %s and %s: %s (Warning only)\n",node->file,cur_node->file,node->entry);
+                               fprintf(stderr, "Duplicate entry in files %s and %s: %s (Warning only)\n", node->file, cur_node->file, node->entry);
                cur_node->been_warned = YES;
        }
        else if (dif < 0)
                if (cur_node->left)
                cur_node->been_warned = YES;
        }
        else if (dif < 0)
                if (cur_node->left)
-                       add_node(node,cur_node->left);
+                       add_node(node, cur_node->left);
                else
                        cur_node->left = node;
        else if (cur_node->right)
                else
                        cur_node->left = node;
        else if (cur_node->right)
-               add_node(node,cur_node->right);
+               add_node(node, cur_node->right);
        else
                cur_node->right = node;
 }
 
        else
                cur_node->right = node;
 }
 
+static void
 free_tree(node)
 free_tree(node)
-       register NODE   *node;
+       NODE    *node;
 {
        while (node) {
                if (node->right)
 {
        while (node) {
                if (node->right)