Use err(3), add usage() and prototypes.
Move setmode() to setnewmode() because of a conflict with setmode(2 or 3).
This commit is contained in:
parent
bd01eda024
commit
d2e7017adf
@ -56,7 +56,7 @@ If the terminal is incapable of underlining, but is capable of
|
||||
a standout mode then that is used instead.
|
||||
If the terminal can overstrike,
|
||||
or handles underlining automatically,
|
||||
.Nm ul
|
||||
.Nm
|
||||
degenerates to
|
||||
.Xr cat 1 .
|
||||
If the terminal cannot underline, underlining is ignored.
|
||||
|
@ -32,16 +32,25 @@
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static char copyright[] =
|
||||
static const char copyright[] =
|
||||
"@(#) Copyright (c) 1980, 1993\n\
|
||||
The Regents of the University of California. All rights reserved.\n";
|
||||
#endif /* not lint */
|
||||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
static char sccsid[] = "@(#)ul.c 8.1 (Berkeley) 6/6/93";
|
||||
#endif
|
||||
static const char rcsid[] =
|
||||
"$Id$";
|
||||
#endif /* not lint */
|
||||
|
||||
#include <err.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <termcap.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#define IESC '\033'
|
||||
#define SO '\016'
|
||||
@ -75,20 +84,30 @@ int halfpos;
|
||||
int upln;
|
||||
int iflag;
|
||||
|
||||
int outchar();
|
||||
static void usage __P((void));
|
||||
void setnewmode __P((int));
|
||||
void initcap __P((void));
|
||||
void reverse __P((void));
|
||||
int outchar __P((int));
|
||||
void fwd __P((void));
|
||||
void initbuf __P((void));
|
||||
void iattr __P((void));
|
||||
void overstrike __P((void));
|
||||
void flushln __P((void));
|
||||
void filter __P((FILE *));
|
||||
void outc __P((int));
|
||||
|
||||
#define PRINT(s) if (s == NULL) /* void */; else tputs(s, 1, outchar)
|
||||
|
||||
void
|
||||
main(argc, argv)
|
||||
int argc;
|
||||
char **argv;
|
||||
{
|
||||
extern int optind;
|
||||
extern char *optarg;
|
||||
int c;
|
||||
char *termtype;
|
||||
FILE *f;
|
||||
char termcap[1024];
|
||||
char *getenv(), *strcpy();
|
||||
|
||||
termtype = getenv("TERM");
|
||||
if (termtype == NULL || (argv[0][0] == 'c' && !isatty(1)))
|
||||
@ -103,12 +122,8 @@ main(argc, argv)
|
||||
case 'i':
|
||||
iflag = 1;
|
||||
break;
|
||||
|
||||
default:
|
||||
fprintf(stderr,
|
||||
"usage: %s [ -i ] [ -tTerm ] file...\n",
|
||||
argv[0]);
|
||||
exit(1);
|
||||
usage();
|
||||
}
|
||||
|
||||
switch(tgetent(termcap, termtype)) {
|
||||
@ -117,7 +132,7 @@ main(argc, argv)
|
||||
break;
|
||||
|
||||
default:
|
||||
fprintf(stderr,"trouble reading termcap");
|
||||
warnx("trouble reading termcap");
|
||||
/* fall through to ... */
|
||||
|
||||
case 0:
|
||||
@ -134,15 +149,22 @@ main(argc, argv)
|
||||
filter(stdin);
|
||||
else for (; optind<argc; optind++) {
|
||||
f = fopen(argv[optind],"r");
|
||||
if (f == NULL) {
|
||||
perror(argv[optind]);
|
||||
exit(1);
|
||||
} else
|
||||
if (f == NULL)
|
||||
err(1, "%s", argv[optind]);
|
||||
else
|
||||
filter(f);
|
||||
}
|
||||
exit(0);
|
||||
}
|
||||
|
||||
static void
|
||||
usage()
|
||||
{
|
||||
fprintf(stderr, "usage: ul [-i] [-t terminal] file...\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
void
|
||||
filter(f)
|
||||
FILE *f;
|
||||
{
|
||||
@ -207,10 +229,7 @@ filter(f)
|
||||
continue;
|
||||
|
||||
default:
|
||||
fprintf(stderr,
|
||||
"Unknown escape sequence in input: %o, %o\n",
|
||||
IESC, c);
|
||||
exit(1);
|
||||
errx(1, "unknown escape sequence in input: %o, %o", IESC, c);
|
||||
}
|
||||
continue;
|
||||
|
||||
@ -256,6 +275,7 @@ filter(f)
|
||||
flushln();
|
||||
}
|
||||
|
||||
void
|
||||
flushln()
|
||||
{
|
||||
register lastmode;
|
||||
@ -266,7 +286,7 @@ flushln()
|
||||
for (i=0; i<maxcol; i++) {
|
||||
if (obuf[i].c_mode != lastmode) {
|
||||
hadmodes++;
|
||||
setmode(obuf[i].c_mode);
|
||||
setnewmode(obuf[i].c_mode);
|
||||
lastmode = obuf[i].c_mode;
|
||||
}
|
||||
if (obuf[i].c_char == '\0') {
|
||||
@ -278,7 +298,7 @@ flushln()
|
||||
outc(obuf[i].c_char);
|
||||
}
|
||||
if (lastmode != NORMAL) {
|
||||
setmode(0);
|
||||
setnewmode(0);
|
||||
}
|
||||
if (must_overstrike && hadmodes)
|
||||
overstrike();
|
||||
@ -295,6 +315,7 @@ flushln()
|
||||
* For terminals that can overstrike, overstrike underlines and bolds.
|
||||
* We don't do anything with halfline ups and downs, or Greek.
|
||||
*/
|
||||
void
|
||||
overstrike()
|
||||
{
|
||||
register int i;
|
||||
@ -332,6 +353,7 @@ overstrike()
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
iattr()
|
||||
{
|
||||
register int i;
|
||||
@ -355,6 +377,7 @@ iattr()
|
||||
putchar('\n');
|
||||
}
|
||||
|
||||
void
|
||||
initbuf()
|
||||
{
|
||||
|
||||
@ -364,6 +387,7 @@ initbuf()
|
||||
mode &= ALTSET;
|
||||
}
|
||||
|
||||
void
|
||||
fwd()
|
||||
{
|
||||
register oldcol, oldmax;
|
||||
@ -375,6 +399,7 @@ fwd()
|
||||
maxcol = oldmax;
|
||||
}
|
||||
|
||||
void
|
||||
reverse()
|
||||
{
|
||||
upln++;
|
||||
@ -384,11 +409,11 @@ reverse()
|
||||
upln++;
|
||||
}
|
||||
|
||||
void
|
||||
initcap()
|
||||
{
|
||||
static char tcapbuf[512];
|
||||
char *bp = tcapbuf;
|
||||
char *getenv(), *tgetstr();
|
||||
|
||||
/* This nonsense attempts to work with both old and new termcap */
|
||||
CURS_UP = tgetstr("up", &bp);
|
||||
@ -437,14 +462,16 @@ initcap()
|
||||
must_use_uc = (UNDER_CHAR && !ENTER_UNDERLINE);
|
||||
}
|
||||
|
||||
int
|
||||
outchar(c)
|
||||
int c;
|
||||
{
|
||||
putchar(c & 0177);
|
||||
return(putchar(c & 0177));
|
||||
}
|
||||
|
||||
static int curmode = 0;
|
||||
|
||||
void
|
||||
outc(c)
|
||||
int c;
|
||||
{
|
||||
@ -455,12 +482,13 @@ outc(c)
|
||||
}
|
||||
}
|
||||
|
||||
setmode(newmode)
|
||||
void
|
||||
setnewmode(newmode)
|
||||
int newmode;
|
||||
{
|
||||
if (!iflag) {
|
||||
if (curmode != NORMAL && newmode != NORMAL)
|
||||
setmode(NORMAL);
|
||||
setnewmode(NORMAL);
|
||||
switch (newmode) {
|
||||
case NORMAL:
|
||||
switch(curmode) {
|
||||
|
Loading…
Reference in New Issue
Block a user