--- ray/src/common/header.c 1991/04/19 10:33:25 1.3 +++ ray/src/common/header.c 1992/11/12 16:20:09 2.3 @@ -1,4 +1,4 @@ -/* Copyright (c) 1988 Regents of the University of California */ +/* Copyright (c) 1992 Regents of the University of California */ #ifndef lint static char SCCSid[] = "$SunId$ LBL"; @@ -9,7 +9,7 @@ static char SCCSid[] = "$SunId$ LBL"; * * 8/19/88 * - * printargs(ac,av,fp) print an argument list to fp, followed by '\n' + * printargs(ac,av,fp) print an argument list to fp, followed by '\n' * isformat(s) returns true if s is of the form "FORMAT=*" * formatval(r,s) copy the format value in s to r * fputformat(s,fp) write "FORMAT=%s" to fp @@ -22,8 +22,14 @@ static char SCCSid[] = "$SunId$ LBL"; #include #include -#define MAXLINE 512 +#define MAXLINE 512 +#ifndef BSD +#define index strchr +#endif + +extern char *index(); + char FMTSTR[] = "FORMAT="; int FMTSTRL = 7; @@ -31,10 +37,21 @@ int FMTSTRL = 7; printargs(ac, av, fp) /* print arguments to a file */ int ac; char **av; -FILE *fp; +register FILE *fp; { + int quote; + while (ac-- > 0) { - fputs(*av++, fp); + if (index(*av, ' ') != NULL) { /* quote it */ + if (index(*av, '\'') != NULL) + quote = '"'; + else + quote = '\''; + putc(quote, fp); + fputs(*av++, fp); + putc(quote, fp); + } else + fputs(*av++, fp); putc(' ', fp); } putc('\n', fp); @@ -80,10 +97,14 @@ char *p; for ( ; ; ) { buf[MAXLINE-2] = '\n'; - if (fgets(buf, sizeof(buf), fp) == NULL) + if (fgets(buf, MAXLINE, fp) == NULL) return(-1); if (buf[0] == '\n') return(0); +#ifdef MSDOS + if (buf[0] == '\r' && buf[1] == '\n') + return(0); +#endif if (buf[MAXLINE-2] != '\n') { ungetc(buf[MAXLINE-2], fp); /* prevent false end */ buf[MAXLINE-2] = '\0'; @@ -134,7 +155,7 @@ char *pat, *str; case '*': /* match any string */ while (p[1] == '*') p++; do - if ( (p[1] == '?' || p[1] == *s) + if ( (p[1]=='?' || p[1]==*s) && copymatch(p+1,s) ) { strcpy(pat, str); return(1); @@ -164,7 +185,7 @@ char *pat, *str; * Checkheader(fin,fmt,fout) returns a value of 1 if the input format * matches the specification in fmt, 0 if no input format was found, * and -1 if the input format does not match or there is an - * error reading the header. If fmt is NULL, then -1 is returned + * error reading the header. If fmt is empty, then -1 is returned * if any input format is found (or there is an error), and 0 otherwise. * If fmt contains any '*' or '?' characters, then checkheader * does wildcard expansion and copies a matching result into fmt. @@ -183,8 +204,6 @@ FILE *fout; cdat.fp = fout; cdat.fs[0] = '\0'; if (getheader(fin, mycheck, &cdat) < 0) - return(-1); - if (fmt == NULL && cdat.fs[0] != '\0') return(-1); if (cdat.fs[0] != '\0') return(copymatch(fmt, cdat.fs) ? 1 : -1);