`clear(1)' command to clear status lines, too!
Gordon Moffett
gam at proper.UUCP
Mon Feb 13 06:27:58 AEST 1984
The following C program is a replacement for the 4.1 BSD clear(1)
command. It clears the screen, and if given the ``-l'' option will
also clear the status line. (The capability to do this is called
``ds'' in termcap(5)).
Comments appreciated! Man page will follow.
----------------------------------------------------------------------
/*
* clear -- clear terminal screen and maybe status line
* usage: clear [-l]
*/
#include <stdio.h>
#define CLRSCRN "cl" /* termcap id for `clear screen' */
#define CLRSTAT "ds" /* termcap id for `disable status line */
#define TBUFSIZ 1024 /* size of termcap buffer */
char *cmdname; /* should point to argv[0] */
extern int errno; /* UNIX error number */
int statln; /* !=0 means clear status line, if possible */
char *term; /* terminal name from environment var TERM */
char bp[TBUFSIZ]; /* buffer pointer for termcap entry */
char cleararea[32]; /* area for clear-strings */
struct { /* pointers to clear-strings */
char *screen;
char *statln;
} clrs;
main(argc, argv)
int argc;
char *argv[];
{
char *getenv();
cmdname = argv[0];
/* check option count */
if (argc > 2) {
usage();
}
/* check options */
if (argc == 2) {
if (strcmp(argv[1], "-l") == 0) {
statln++;
} else {
usage();
}
}
/* check terminal name (if any) */
term = getenv("TERM");
if (term == NULL) {
fprintf(stderr, "%s: unknown terminal\n", cmdname);
exit(1);
}
/* look up termcap info for this terminal */
termchk();
/* set up clear-strings */
setclrs();
/* clear screen */
clearscrn();
/* clear status line, if wanted */
if (statln) {
clearstln();
}
}
setclrs() /* set clear-strings from termcap entry */
{
char *clearbuf;
char *tgetstr();
clearbuf = cleararea;
clrs.screen = tgetstr(CLRSCRN, &clearbuf);
if (clrs.screen == NULL) {
clrs.screen = "";
}
clrs.statln = tgetstr(CLRSTAT, &clearbuf);
if (clrs.statln == NULL) {
clrs.statln = "";
}
}
clearscrn() /* clear screen */
{
printf(clrs.screen);
}
clearstln() /* turn off status line */
{
printf(clrs.statln);
}
termchk() /* get termcap entry -- die if not found */
{
int v; /* returned from tgetent() */
switch (v = tgetent(bp, term)) {
case 1: /* got termcap entry OK */
break;
case -1:
fprintf(stderr, "%s: can't open termcap file\n",
cmdname);
exit(errno);
break;
case 0:
fprintf(stderr, "%s: no termcap entry for %s\n",
cmdname, term);
exit(1);
break;
default:
fprintf(stderr, "%s: tgetent() returned unknown value: %d\n",
cmdname, v);
exit(1);
break;
}
}
usage() /* tell them how this is used */
{
fprintf(stderr, "usage: %s [-l]\n", cmdname);
exit(1);
}
--
Gordon A. Moffett
{ allegra, decvax!decwrl } !amd70!proper
hplabs!intelca!proper!gam
More information about the Comp.sources.unix
mailing list