version 1.8, 2000/11/10 15:33:12 |
version 1.9, 2001/02/05 01:57:12 |
|
|
/* |
/* |
* misc globals |
* misc globals |
*/ |
*/ |
FILE *err; /* error message file pointer */ |
FILE *ferr; /* error message file pointer */ |
int addone = 0; /* page length is odd with double space */ |
int addone = 0; /* page length is odd with double space */ |
int errcnt = 0; /* error count on file processing */ |
int errcnt = 0; /* error count on file processing */ |
int beheaded = 0; /* header / trailer link */ |
int beheaded = 0; /* header / trailer link */ |
|
|
pgwd = ((colwd + 1) * clcnt) - 1; |
pgwd = ((colwd + 1) * clcnt) - 1; |
} |
} |
if (colwd < 1) { |
if (colwd < 1) { |
(void)fprintf(err, |
(void)fprintf(ferr, |
"pr: page width too small for %d columns\n", clcnt); |
"pr: page width too small for %d columns\n", clcnt); |
return(1); |
return(1); |
} |
} |
|
|
return(inf); |
return(inf); |
if (gettimeofday(&tv, &tz) < 0) { |
if (gettimeofday(&tv, &tz) < 0) { |
++errcnt; |
++errcnt; |
(void)fprintf(err, "pr: cannot get time of day, %s\n", |
(void)fprintf(ferr, "pr: cannot get time of day, %s\n", |
strerror(errno)); |
strerror(errno)); |
eoptind = argc - 1; |
eoptind = argc - 1; |
return(NULL); |
return(NULL); |
|
|
return(inf); |
return(inf); |
if (gettimeofday(&tv, &tz) < 0) { |
if (gettimeofday(&tv, &tz) < 0) { |
++errcnt; |
++errcnt; |
(void)fprintf(err, |
(void)fprintf(ferr, |
"pr: cannot get time of day, %s\n", |
"pr: cannot get time of day, %s\n", |
strerror(errno)); |
strerror(errno)); |
return(NULL); |
return(NULL); |
|
|
++errcnt; |
++errcnt; |
if (nodiag) |
if (nodiag) |
continue; |
continue; |
(void)fprintf(err, "pr: Cannot open %s, %s\n", |
(void)fprintf(ferr, "pr: Cannot open %s, %s\n", |
argv[eoptind], strerror(errno)); |
argv[eoptind], strerror(errno)); |
continue; |
continue; |
} |
} |
|
|
if (dt) { |
if (dt) { |
if (gettimeofday(&tv, &tz) < 0) { |
if (gettimeofday(&tv, &tz) < 0) { |
++errcnt; |
++errcnt; |
(void)fprintf(err, |
(void)fprintf(ferr, |
"pr: cannot get time of day, %s\n", |
"pr: cannot get time of day, %s\n", |
strerror(errno)); |
strerror(errno)); |
return(NULL); |
return(NULL); |
|
|
if (fstat(fileno(inf), &statbuf) < 0) { |
if (fstat(fileno(inf), &statbuf) < 0) { |
++errcnt; |
++errcnt; |
(void)fclose(inf); |
(void)fclose(inf); |
(void)fprintf(err, |
(void)fprintf(ferr, |
"pr: Cannot stat %s, %s\n", |
"pr: Cannot stat %s, %s\n", |
argv[eoptind], strerror(errno)); |
argv[eoptind], strerror(errno)); |
return(NULL); |
return(NULL); |
|
|
++errcnt; |
++errcnt; |
if (inf != stdin) |
if (inf != stdin) |
(void)fclose(inf); |
(void)fclose(inf); |
(void)fputs("pr: time conversion failed\n", err); |
(void)fputs("pr: time conversion failed\n", ferr); |
return(NULL); |
return(NULL); |
} |
} |
return(inf); |
return(inf); |
|
|
char buf[BUFSIZ]; |
char buf[BUFSIZ]; |
|
|
(void)fflush(stdout); |
(void)fflush(stdout); |
(void)fflush(err); |
(void)fflush(ferr); |
if (err == stderr) |
if (ferr == stderr) |
return; |
return; |
rewind(err); |
rewind(ferr); |
while (fgets(buf, BUFSIZ, err) != NULL) |
while (fgets(buf, BUFSIZ, ferr) != NULL) |
(void)fputs(buf, stderr); |
(void)fputs(buf, stderr); |
} |
} |
|
|
void |
void |
mfail() |
mfail() |
{ |
{ |
(void)fputs("pr: memory allocation failed\n", err); |
(void)fputs("pr: memory allocation failed\n", ferr); |
} |
} |
|
|
void |
void |
pfail() |
pfail() |
{ |
{ |
(void)fprintf(err, "pr: write failure, %s\n", strerror(errno)); |
(void)fprintf(ferr, "pr: write failure, %s\n", strerror(errno)); |
} |
} |
|
|
void |
void |
usage() |
usage() |
{ |
{ |
(void)fputs( |
(void)fputs( |
"usage: pr [+page] [-col] [-adfFmrt] [-e[ch][gap]] [-h header]\n",err); |
"usage: pr [+page] [-col] [-adfFmrt] [-e[ch][gap]] [-h header]\n", ferr); |
(void)fputs( |
(void)fputs( |
" [-i[ch][gap]] [-l line] [-n[ch][width]] [-o offset]\n",err); |
" [-i[ch][gap]] [-l line] [-n[ch][width]] [-o offset]\n", ferr); |
(void)fputs( |
(void)fputs( |
" [-s[ch]] [-w width] [-] [file ...]\n", err); |
" [-s[ch]] [-w width] [-] [file ...]\n", ferr); |
} |
} |
|
|
/* |
/* |
|
|
/* |
/* |
* defer diagnostics until processing is done |
* defer diagnostics until processing is done |
*/ |
*/ |
if ((err = tmpfile()) == NULL) { |
if ((ferr = tmpfile()) == NULL) { |
(void)fputs("Cannot defer diagnostic messages\n",stderr); |
(void)fputs("Cannot defer diagnostic messages\n",stderr); |
return(1); |
return(1); |
} |
} |
} else |
} else |
err = stderr; |
ferr = stderr; |
while ((c = egetopt(argc, argv, "#adfFmrte?h:i?l:n?o:s?w:")) != -1) { |
while ((c = egetopt(argc, argv, "#adfFmrte?h:i?l:n?o:s?w:")) != -1) { |
switch (c) { |
switch (c) { |
case '+': |
case '+': |
if ((pgnm = atoi(eoptarg)) < 1) { |
if ((pgnm = atoi(eoptarg)) < 1) { |
(void)fputs("pr: +page number must be 1 or more\n", |
(void)fputs("pr: +page number must be 1 or more\n", |
err); |
ferr); |
return(1); |
return(1); |
} |
} |
++skipping; |
++skipping; |
break; |
break; |
case '-': |
case '-': |
if ((clcnt = atoi(eoptarg)) < 1) { |
if ((clcnt = atoi(eoptarg)) < 1) { |
(void)fputs("pr: -columns must be 1 or more\n",err); |
(void)fputs("pr: -columns must be 1 or more\n",ferr); |
return(1); |
return(1); |
} |
} |
if (clcnt > 1) |
if (clcnt > 1) |
|
|
if ((eoptarg != NULL) && isdigit(*eoptarg)) { |
if ((eoptarg != NULL) && isdigit(*eoptarg)) { |
if ((ingap = atoi(eoptarg)) < 0) { |
if ((ingap = atoi(eoptarg)) < 0) { |
(void)fputs( |
(void)fputs( |
"pr: -e gap must be 0 or more\n", err); |
"pr: -e gap must be 0 or more\n", ferr); |
return(1); |
return(1); |
} |
} |
if (ingap == 0) |
if (ingap == 0) |
ingap = INGAP; |
ingap = INGAP; |
} else if ((eoptarg != NULL) && (*eoptarg != '\0')) { |
} else if ((eoptarg != NULL) && (*eoptarg != '\0')) { |
(void)fprintf(err, |
(void)fprintf(ferr, |
"pr: invalid value for -e %s\n", eoptarg); |
"pr: invalid value for -e %s\n", eoptarg); |
return(1); |
return(1); |
} else |
} else |
|
|
if ((eoptarg != NULL) && isdigit(*eoptarg)) { |
if ((eoptarg != NULL) && isdigit(*eoptarg)) { |
if ((ogap = atoi(eoptarg)) < 0) { |
if ((ogap = atoi(eoptarg)) < 0) { |
(void)fputs( |
(void)fputs( |
"pr: -i gap must be 0 or more\n", err); |
"pr: -i gap must be 0 or more\n", ferr); |
return(1); |
return(1); |
} |
} |
if (ogap == 0) |
if (ogap == 0) |
ogap = OGAP; |
ogap = OGAP; |
} else if ((eoptarg != NULL) && (*eoptarg != '\0')) { |
} else if ((eoptarg != NULL) && (*eoptarg != '\0')) { |
(void)fprintf(err, |
(void)fprintf(ferr, |
"pr: invalid value for -i %s\n", eoptarg); |
"pr: invalid value for -i %s\n", eoptarg); |
return(1); |
return(1); |
} else |
} else |
|
|
case 'l': |
case 'l': |
if (!isdigit(*eoptarg) || ((lines=atoi(eoptarg)) < 1)) { |
if (!isdigit(*eoptarg) || ((lines=atoi(eoptarg)) < 1)) { |
(void)fputs( |
(void)fputs( |
"pr: Number of lines must be 1 or more\n",err); |
"pr: Number of lines must be 1 or more\n",ferr); |
return(1); |
return(1); |
} |
} |
break; |
break; |
|
|
if ((eoptarg != NULL) && isdigit(*eoptarg)) { |
if ((eoptarg != NULL) && isdigit(*eoptarg)) { |
if ((nmwd = atoi(eoptarg)) < 1) { |
if ((nmwd = atoi(eoptarg)) < 1) { |
(void)fputs( |
(void)fputs( |
"pr: -n width must be 1 or more\n",err); |
"pr: -n width must be 1 or more\n",ferr); |
return(1); |
return(1); |
} |
} |
} else if ((eoptarg != NULL) && (*eoptarg != '\0')) { |
} else if ((eoptarg != NULL) && (*eoptarg != '\0')) { |
(void)fprintf(err, |
(void)fprintf(ferr, |
"pr: invalid value for -n %s\n", eoptarg); |
"pr: invalid value for -n %s\n", eoptarg); |
return(1); |
return(1); |
} else |
} else |
|
|
case 'o': |
case 'o': |
if (!isdigit(*eoptarg) || ((offst = atoi(eoptarg))< 1)){ |
if (!isdigit(*eoptarg) || ((offst = atoi(eoptarg))< 1)){ |
(void)fputs("pr: -o offset must be 1 or more\n", |
(void)fputs("pr: -o offset must be 1 or more\n", |
err); |
ferr); |
return(1); |
return(1); |
} |
} |
break; |
break; |
|
|
else { |
else { |
schar = *eoptarg++; |
schar = *eoptarg++; |
if (*eoptarg != '\0') { |
if (*eoptarg != '\0') { |
(void)fprintf(err, |
(void)fprintf(ferr, |
"pr: invalid value for -s %s\n", eoptarg); |
"pr: invalid value for -s %s\n", eoptarg); |
return(1); |
return(1); |
} |
} |
|
|
++wflag; |
++wflag; |
if (!isdigit(*eoptarg) || ((pgwd = atoi(eoptarg)) < 1)){ |
if (!isdigit(*eoptarg) || ((pgwd = atoi(eoptarg)) < 1)){ |
(void)fputs( |
(void)fputs( |
"pr: -w width must be 1 or more \n",err); |
"pr: -w width must be 1 or more \n",ferr); |
return(1); |
return(1); |
} |
} |
break; |
break; |
|
|
if (across) { |
if (across) { |
if (clcnt == 1) { |
if (clcnt == 1) { |
(void)fputs("pr: -a flag requires multiple columns\n", |
(void)fputs("pr: -a flag requires multiple columns\n", |
err); |
ferr); |
return(1); |
return(1); |
} |
} |
if (merge) { |
if (merge) { |
(void)fputs("pr: -m cannot be used with -a\n", err); |
(void)fputs("pr: -m cannot be used with -a\n", ferr); |
return(1); |
return(1); |
} |
} |
} |
} |
|
|
if (cflag) { |
if (cflag) { |
if (merge) { |
if (merge) { |
(void)fputs( |
(void)fputs( |
"pr: -m cannot be used with multiple columns\n", err); |
"pr: -m cannot be used with multiple columns\n", ferr); |
return(1); |
return(1); |
} |
} |
if (nmwd) { |
if (nmwd) { |
|
|
pgwd = ((colwd + 1) * clcnt) - 1; |
pgwd = ((colwd + 1) * clcnt) - 1; |
} |
} |
if (colwd < 1) { |
if (colwd < 1) { |
(void)fprintf(err, |
(void)fprintf(ferr, |
"pr: page width is too small for %d columns\n",clcnt); |
"pr: page width is too small for %d columns\n",clcnt); |
return(1); |
return(1); |
} |
} |