added -t option
authorJohn A. Kunze <jak@ucbvax.Berkeley.EDU>
Sun, 12 Feb 1984 05:35:09 +0000 (21:35 -0800)
committerJohn A. Kunze <jak@ucbvax.Berkeley.EDU>
Sun, 12 Feb 1984 05:35:09 +0000 (21:35 -0800)
SCCS-vsn: usr.bin/lam/lam.c 4.2

usr/src/usr.bin/lam/lam.c

index 252f887..fab853b 100644 (file)
@@ -1,7 +1,7 @@
 /* Copyright (c) 1983 Regents of the University of California */
 
 #ifndef lint
 /* Copyright (c) 1983 Regents of the University of California */
 
 #ifndef lint
-static char sccsid[] = "@(#)lam.c      4.1     (Berkeley)      %G%";
+static char sccsid[] = "@(#)lam.c      4.2     (Berkeley)      %G%";
 #endif not lint
 
 /*
 #endif not lint
 
 /*
@@ -18,14 +18,13 @@ struct      openfile {              /* open file structure */
        FILE    *fp;            /* file pointer */
        short   eof;            /* eof flag */
        short   pad;            /* pad flag for missing columns */
        FILE    *fp;            /* file pointer */
        short   eof;            /* eof flag */
        short   pad;            /* pad flag for missing columns */
+       char    eol;            /* end of line character */
        char    *sepstring;     /* string to print before each line */
        char    *format;        /* printf(3) style string spec. */
 }      input[MAXOFILES];
 
        char    *sepstring;     /* string to print before each line */
        char    *format;        /* printf(3) style string spec. */
 }      input[MAXOFILES];
 
-int    P;
-int    S;
-int    F;
 int    morefiles;              /* set by getargs(), changed by gatherline() */
 int    morefiles;              /* set by getargs(), changed by gatherline() */
+int    nofinalnl;              /* normally append \n to each output line */
 char   buf[BUFSIZ];
 char   line[BIGBUFSIZ];
 char   *linep;
 char   buf[BUFSIZ];
 char   line[BIGBUFSIZ];
 char   *linep;
@@ -49,7 +48,8 @@ char  **argv;
                        exit(0);
                fputs(line, stdout);
                fputs(ip->sepstring, stdout);
                        exit(0);
                fputs(line, stdout);
                fputs(ip->sepstring, stdout);
-               putchar('\n');
+               if (!nofinalnl)
+                       putchar('\n');
        }
 }
 
        }
 }
 
@@ -61,7 +61,9 @@ char  **av;
        register char   *c;
        static  char    fmtbuf[BUFSIZ];
        char    *fmtp = fmtbuf;
        register char   *c;
        static  char    fmtbuf[BUFSIZ];
        char    *fmtp = fmtbuf;
+       int     P, S, F, T;
 
 
+       P = S = F = T = 0;              /* capitalized options */
        while (p = *++av) {
                if (*p != '-' || !p[1]) {
                        morefiles++;
        while (p = *++av) {
                if (*p != '-' || !p[1]) {
                        morefiles++;
@@ -76,6 +78,8 @@ char  **av;
                                ip->sepstring = (S ? (ip-1)->sepstring : "");
                        if (!ip->format)
                                ip->format = (F ? (ip-1)->format : "%s");
                                ip->sepstring = (S ? (ip-1)->sepstring : "");
                        if (!ip->format)
                                ip->format = (F ? (ip-1)->format : "%s");
+                       if (!ip->eol)
+                               ip->eol = (T ? (ip-1)->eol : '\n');
                        ip++;
                        continue;
                }
                        ip++;
                        continue;
                }
@@ -87,6 +91,14 @@ char **av;
                                error("Need string after -%s", c);
                        S = (*c == 'S' ? 1 : 0);
                        break;
                                error("Need string after -%s", c);
                        S = (*c == 'S' ? 1 : 0);
                        break;
+               case 't':
+                       if (*++p || (p = *++av))
+                               ip->eol = *p;
+                       else
+                               error("Need character after -%s", c);
+                       T = (*c == 'T' ? 1 : 0);
+                       nofinalnl = 1;
+                       break;
                case 'p':
                        ip->pad = 1;
                        P = (*c == 'P' ? 1 : 0);
                case 'p':
                        ip->pad = 1;
                        P = (*c == 'P' ? 1 : 0);
@@ -131,7 +143,7 @@ struct      openfile        *ip;
                return(lp);
        }
        for (p = s; (c = fgetc(ip->fp)) != EOF && p < end; p++)
                return(lp);
        }
        for (p = s; (c = fgetc(ip->fp)) != EOF && p < end; p++)
-               if ((*p = c) == '\n')
+               if ((*p = c) == ip->eol)
                        break;
        *p = '\0';
        p = ip->sepstring;
                        break;
        *p = '\0';
        p = ip->sepstring;
@@ -157,11 +169,13 @@ char      *s;
        setbuf(stderr, buf);
        fprintf(stderr, "lam: ");
        fprintf(stderr, msg, s);
        setbuf(stderr, buf);
        fprintf(stderr, "lam: ");
        fprintf(stderr, msg, s);
-       fprintf(stderr, "\nUsage:  lam [ -[fp] min.max ] [ -s sepstring ] file ...\n");
+       fprintf(stderr, "\nUsage:  lam [ -[fp] min.max ] [ -s sepstring ] [ -t c ] file ...\n");
        if (strncmp("lam - ", msg, 6) == 0)
        if (strncmp("lam - ", msg, 6) == 0)
-               fprintf(stderr, "Options:\n\t%s\t%s\t%s",
+               fprintf(stderr, "Options:\n\t%s\t%s\t%s\t%s\t%s",
                        "-f min.max     field widths for file fragments\n",
                        "-p min.max     like -f, but pad missing fragments\n",
                        "-f min.max     field widths for file fragments\n",
                        "-p min.max     like -f, but pad missing fragments\n",
-                       "-s sepstring   fragment separator\n");
+                       "-s sepstring   fragment separator\n",
+                       "-t c           input line terminator is c, no \\n after output lines\n",
+                       "Capitalized options affect more than one file.\n");
        exit(1);
 }
        exit(1);
 }