BSD 4_4 release
[unix-history] / usr / src / old / dbx / makedefs.c
index 59a6da9..2aaab29 100644 (file)
@@ -1,8 +1,45 @@
-/* Copyright (c) 1982 Regents of the University of California */
+/*
+ * Copyright (c) 1983 The Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *     This product includes software developed by the University of
+ *     California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
 
 
-static char sccsid[] = "@(#)makedefs.c 1.2 12/15/82";
+#ifndef lint
+char copyright[] =
+"@(#) Copyright (c) 1983 The Regents of the University of California.\n\
+ All rights reserved.\n";
+#endif /* not lint */
 
 
-static char rcsid[] = "$Header: makedefs.c,v 1.3 84/03/27 10:21:50 linton Exp $";
+#ifndef lint
+static char sccsid[] = "@(#)makedefs.c 5.6 (Berkeley) 6/1/90";
+#endif /* not lint */
 
 /*
  * Create a definitions file (e.g. .h) from an implementation file (e.g. .c).
 
 /*
  * Create a definitions file (e.g. .h) from an implementation file (e.g. .c).
@@ -23,9 +60,12 @@ static char rcsid[] = "$Header: makedefs.c,v 1.3 84/03/27 10:21:50 linton Exp $"
 
 #include "defs.h"
 #include <signal.h>
 
 #include "defs.h"
 #include <signal.h>
+#include "pathnames.h"
 
 #define procedure void
 
 
 #define procedure void
 
+#define streqn(s1, s2, n) (strncmp(s1, s2, n) == 0)
+
 Boolean force;
 Boolean copytext;
 
 Boolean force;
 Boolean copytext;
 
@@ -63,7 +103,7 @@ String argv[];
        if (force) {
            tmpname = argv[index + 1];
        } else {
        if (force) {
            tmpname = argv[index + 1];
        } else {
-           tmpname = mktemp("/tmp/makedefsXXXXXX");
+           tmpname = mktemp(_PATH_TMP);
        }
        tmp = freopen(tmpname, "w", stdout);
        if (tmp == nil) {
        }
        tmp = freopen(tmpname, "w", stdout);
        if (tmp == nil) {
@@ -100,27 +140,52 @@ String s;
     i = rindex(buf, '/');
     if (i == nil) {
        i = buf;
     i = rindex(buf, '/');
     if (i == nil) {
        i = buf;
+    } else {
+       ++i;
+    }
+    for (j = i; *j; j++) {
+       if (*j == '.') {
+           *j = '_';
+       }
     }
     }
-    for (j = i; *j != '.'; j++);
-    *j++ = '_';
-    *j++ = 'h';
-    *j = '\0';
-    return buf;
+    if (j > i && *--j == 'c') {
+       *j = 'h';
+    }
+    return i;
 }
 
 copy()
 {
     register char *p;
 }
 
 copy()
 {
     register char *p;
+    integer nesting;
     char line[1024];
 
     while (gets(line) != NULL) {
     char line[1024];
 
     while (gets(line) != NULL) {
-       if (strncmp(line, "#ifndef public", 14) == 0) {
+       if (streqn(line, "#ifndef public", 14)) {
            copytext = true;
            copytext = true;
-       } else if (strncmp(line, "#endif", 6) == 0) {
-           copytext = false;
-       } else if (strncmp(line, "public", 6) == 0) {
+           nesting = 1;
+       } else if (streqn(line, "public", 6)) {
            copydef(line);
        } else if (copytext) {
            copydef(line);
        } else if (copytext) {
+           if (streqn(line, "#ifdef", 6) or streqn(line, "#ifndef", 7)) {
+               ++nesting;
+               printf("%s\n", line);
+           } else if (streqn(line, "#endif", 6)) {
+               --nesting;
+               if (nesting <= 0) {
+                   copytext = false;
+               } else {
+                   printf("%s\n", line);
+               }
+           } else {
+               printf("%s\n", line);
+           }
+       } else if (
+           streqn(line, "#ifdef", 6) or
+           streqn(line, "#ifndef", 7) or
+           streqn(line, "#else", 5) or
+           streqn(line, "#endif", 6)
+       ) {
            printf("%s\n", line);
        }
     }
            printf("%s\n", line);
        }
     }