4.4BSD snapshot (revision 8.1); add 1993 to copyright
[unix-history] / usr / src / old / awk / lib.c
index c781688..6bcc628 100644 (file)
@@ -1,12 +1,28 @@
+/*-
+ * Copyright (c) 1991 The Regents of the University of California.
+ * All rights reserved.
+ *
+ * %sccs.include.proprietary.c%
+ */
+
 #ifndef lint
 #ifndef lint
-static char sccsid[] = "@(#)lib.c      4.3 %G%";
-#endif
+static char sccsid[] = "@(#)lib.c      4.11 (Berkeley) %G%";
+#endif /* not lint */
 
 
+#ifdef __STDC__
+#include <stdarg.h>
+#else
+#include <varargs.h>
+#endif
 #include "stdio.h"
 #include "awk.def"
 #include "awk.h"
 #include "ctype.h"
 
 #include "stdio.h"
 #include "awk.def"
 #include "awk.h"
 #include "ctype.h"
 
+int    error __P((int, const char *, ...));
+
+extern FILE    *yyin;  /* lex input file */
+extern char    *lexprog;       /* points to program argument if it exists */
 FILE   *infile = NULL;
 char   *file;
 #define        RECSIZE (5 * 512)
 FILE   *infile = NULL;
 char   *file;
 #define        RECSIZE (5 * 512)
@@ -22,13 +38,15 @@ int mustfld;        /* 1 = NF seen, so always break*/
 #define        FINIT   {EMPTY, EMPTY, 0.0, FLD|STR}
 cell fldtab[MAXFLD] = {        /*room for fields */
        { "$record", record, 0.0, STR|FLD},
 #define        FINIT   {EMPTY, EMPTY, 0.0, FLD|STR}
 cell fldtab[MAXFLD] = {        /*room for fields */
        { "$record", record, 0.0, STR|FLD},
-       FINIT, FINIT, FINIT, FINIT, FINIT, FINIT, FINIT,
-       FINIT, FINIT, FINIT, FINIT, FINIT, FINIT, FINIT,
-       FINIT, FINIT, FINIT, FINIT, FINIT, FINIT, FINIT,
-       FINIT, FINIT, FINIT, FINIT, FINIT, FINIT, FINIT,
-       FINIT, FINIT, FINIT, FINIT, FINIT, FINIT, FINIT,
-       FINIT, FINIT, FINIT, FINIT, FINIT, FINIT, FINIT,
-       FINIT, FINIT, FINIT, FINIT, FINIT, FINIT, FINIT
+       FINIT, FINIT, FINIT, FINIT, FINIT, FINIT, FINIT, FINIT, FINIT,
+       FINIT, FINIT, FINIT, FINIT, FINIT, FINIT, FINIT, FINIT, FINIT,
+       FINIT, FINIT, FINIT, FINIT, FINIT, FINIT, FINIT, FINIT, FINIT,
+       FINIT, FINIT, FINIT, FINIT, FINIT, FINIT, FINIT, FINIT, FINIT,
+       FINIT, FINIT, FINIT, FINIT, FINIT, FINIT, FINIT, FINIT, FINIT,
+       FINIT, FINIT, FINIT, FINIT, FINIT, FINIT, FINIT, FINIT, FINIT,
+       FINIT, FINIT, FINIT, FINIT, FINIT, FINIT, FINIT, FINIT, FINIT,
+       FINIT, FINIT, FINIT, FINIT, FINIT, FINIT, FINIT, FINIT, FINIT,
+       FINIT, FINIT, FINIT, FINIT, FINIT, FINIT, FINIT, FINIT, FINIT,
 };
 int    maxfld  = 0;    /* last used field */
 
 };
 int    maxfld  = 0;    /* last used field */
 
@@ -55,8 +73,12 @@ getrec()
                        }
                        *FILENAME = file = *svargv;
                        dprintf("opening file %s\n", file, NULL, NULL);
                        }
                        *FILENAME = file = *svargv;
                        dprintf("opening file %s\n", file, NULL, NULL);
-                       if (*file == '-')
-                               infile = stdin;
+                       if (*file == '-') {
+                               if (yyin == stdin && ! lexprog)
+                                       error(FATAL, "standard input already used for reading commands");
+                               else
+                                       infile = stdin;
+                       }
                        else if ((infile = fopen(file, "r")) == NULL)
                                error(FATAL, "can't open %s", file);
                }
                        else if ((infile = fopen(file, "r")) == NULL)
                                error(FATAL, "can't open %s", file);
                }
@@ -160,7 +182,7 @@ fldbld()
        maxfld = i;
        donefld = 1;
        for(i=1; i<=maxfld; i++)
        maxfld = i;
        donefld = 1;
        for(i=1; i<=maxfld; i++)
-               if(isnumber(fldtab[i].sval)) {
+               if(isanumber(fldtab[i].sval)) {
                        fldtab[i].fval = atof(fldtab[i].sval);
                        fldtab[i].tval |= NUM;
                }
                        fldtab[i].fval = atof(fldtab[i].sval);
                        fldtab[i].tval |= NUM;
                }
@@ -207,13 +229,30 @@ yyerror(s) char *s; {
        errorflag = 2;
 }
 
        errorflag = 2;
 }
 
-error(f, s, a1, a2, a3, a4, a5, a6, a7) {
-       fprintf(stderr, "awk: ");
-       fprintf(stderr, s, a1, a2, a3, a4, a5, a6, a7);
-       fprintf(stderr, "\n");
-       if (*NR > 0)
-               fprintf(stderr, " record number %g\n", *NR);
-       if (f)
+int
+#ifdef __STDC__
+error(int isfatal, const char *fmt, ...)
+#else
+error(isfatal, fmt, va_alist)
+       int isfatal;
+       char *fmt;
+       va_dcl
+#endif
+{
+       va_list ap;
+
+#ifdef __STDC__
+       va_start(ap, fmt);
+#else
+       va_start(ap);
+#endif
+       (void)fprintf(stderr, "awk: ");
+       (void)vfprintf(stderr, fmt, ap);
+       va_end(ap);
+       (void)fprintf(stderr, "\n");
+       if (NR && *NR > 0)
+               (void)fprintf(stderr, " record number %g\n", *NR);
+       if (isfatal)
                exit(2);
 }
 
                exit(2);
 }
 
@@ -223,7 +262,7 @@ PUTS(s) char *s; {
 
 #define        MAXEXPON        38      /* maximum exponenet for fp number */
 
 
 #define        MAXEXPON        38      /* maximum exponenet for fp number */
 
-isnumber(s)
+isanumber(s)
 register char *s;
 {
        register d1, d2;
 register char *s;
 {
        register d1, d2;
@@ -284,5 +323,5 @@ register char *s;
                return(0);
 }
 /*
                return(0);
 }
 /*
-isnumber(s) char *s; {return(0);}
+isanumber(s) char *s; {return(0);}
 */
 */