-
/*
* termsbr.c -- termcap support
*
- * $Id$
- *
* This code is Copyright (c) 2002, by the authors of nmh. See the
* COPYRIGHT file in the root directory of the nmh distribution for
* complete copyright information.
#endif
#if BUFSIZ<2048
-# define TXTSIZ 2048
+# define TXTSIZ 2048
#else
# define TXTSIZ BUFSIZ
#endif
static int initLI = 0;
static int initCO = 0;
-static int HC = 0; /* are we on a hardcopy terminal? */
-static int LI = 40; /* number of lines */
-static int CO = 80; /* number of colums */
-static char *CL = NULL; /* termcap string to clear screen */
+static int HC = 0; /* are we on a hardcopy terminal? */
+static int LI = 40; /* number of lines */
+static int CO = 80; /* number of colums */
+static char *CL = NULL; /* termcap string to clear screen */
static char *SE = NULL; /* termcap string to end standout mode */
static char *SO = NULL; /* termcap string to begin standout mode */
static void
read_termcap(void)
{
- char *bp, *cp;
- char *term;
+ char *bp, *cp;
+ char *term;
#ifndef TGETENT_ACCEPTS_NULL
- char termbuf[TXTSIZ];
+ char termbuf[TXTSIZ];
#endif
#ifdef HAVE_TERMIOS_H
- struct termios tio;
+ struct termios tio;
#else
# ifdef HAVE_TERMIO_H
- struct termio tio;
+ struct termio tio;
# else
- struct sgttyb tio;
+ struct sgttyb tio;
# endif
#endif
- static int inited = 0;
+ static int inited = 0;
- if (inited++)
- return;
+ if (inited++)
+ return;
- if (!(term = getenv ("TERM")))
- return;
+ if (!(term = getenv ("TERM")))
+ return;
/*
* If possible, we let tgetent allocate its own termcap buffer
*/
#ifdef TGETENT_ACCEPTS_NULL
- if (tgetent (NULL, term) != TGETENT_SUCCESS)
- return;
+ if (tgetent (NULL, term) != TGETENT_SUCCESS)
+ return;
#else
- if (tgetent (termbuf, term) != TGETENT_SUCCESS)
- return;
+ if (tgetent (termbuf, term) != TGETENT_SUCCESS)
+ return;
#endif
#ifdef HAVE_TERMIOS_H
- speedcode = cfgetospeed(&tio);
+ speedcode = cfgetospeed(&tio);
#else
# ifdef HAVE_TERMIO_H
- speedcode = ioctl(fileno(stdout), TCGETA, &tio) != NOTOK ? tio.c_cflag & CBAUD : 0;
+ speedcode = ioctl(fileno(stdout), TCGETA, &tio) != NOTOK ? tio.c_cflag & CBAUD : 0;
# else
- speedcode = ioctl(fileno(stdout), TIOCGETP, (char *) &tio) != NOTOK ? tio.sg_ospeed : 0;
+ speedcode = ioctl(fileno(stdout), TIOCGETP, (char *) &tio) != NOTOK ? tio.sg_ospeed : 0;
# endif
#endif
- HC = tgetflag ("hc");
-
- if (!initCO && (CO = tgetnum ("co")) <= 0)
- CO = 80;
- if (!initLI && (LI = tgetnum ("li")) <= 0)
- LI = 24;
-
- cp = termcap;
- CL = tgetstr ("cl", &cp);
- if ((bp = tgetstr ("pc", &cp)))
- PC = *bp;
- if (tgetnum ("sg") <= 0) {
- SE = tgetstr ("se", &cp);
- SO = tgetstr ("so", &cp);
- }
+ HC = tgetflag ("hc");
+
+ if (!initCO && (CO = tgetnum ("co")) <= 0)
+ CO = 80;
+ if (!initLI && (LI = tgetnum ("li")) <= 0)
+ LI = 24;
+
+ cp = termcap;
+ CL = tgetstr ("cl", &cp);
+ if ((bp = tgetstr ("pc", &cp)))
+ PC = *bp;
+ if (tgetnum ("sg") <= 0) {
+ SE = tgetstr ("se", &cp);
+ SO = tgetstr ("so", &cp);
+ }
}
sc_width (void)
{
#ifdef TIOCGWINSZ
- struct winsize win;
- int width;
-
- if (ioctl (fileno (stderr), TIOCGWINSZ, &win) != NOTOK
- && (width = win.ws_col) > 0) {
- CO = width;
- initCO++;
- } else
+ struct winsize win;
+ int width;
+
+ if (ioctl (fileno (stderr), TIOCGWINSZ, &win) != NOTOK
+ && (width = win.ws_col) > 0) {
+ CO = width;
+ initCO++;
+ } else
#endif /* TIOCGWINSZ */
- read_termcap();
+ read_termcap();
- return CO;
+ return CO;
}
sc_length (void)
{
#ifdef TIOCGWINSZ
- struct winsize win;
+ struct winsize win;
- if (ioctl (fileno (stderr), TIOCGWINSZ, &win) != NOTOK
- && (LI = win.ws_row) > 0)
- initLI++;
- else
+ if (ioctl (fileno (stderr), TIOCGWINSZ, &win) != NOTOK
+ && (LI = win.ws_row) > 0)
+ initLI++;
+ else
#endif /* TIOCGWINSZ */
- read_termcap();
+ read_termcap();
- return LI;
+ return LI;
}
static int
outc (int c)
{
- return putchar(c);
+ return putchar(c);
}
void
clear_screen (void)
{
- read_termcap ();
+ read_termcap ();
- if (CL && speedcode)
- tputs (CL, LI, outc);
- else {
- printf ("\f");
- if (speedcode)
- printf ("\200");
- }
+ if (CL && speedcode)
+ tputs (CL, LI, outc);
+ else {
+ printf ("\f");
+ if (speedcode)
+ printf ("\200");
+ }
- fflush (stdout);
+ fflush (stdout);
}
int
SOprintf (char *fmt, ...)
{
- va_list ap;
+ va_list ap;
- read_termcap ();
- if (!(SO && SE))
- return NOTOK;
+ read_termcap ();
+ if (!(SO && SE))
+ return NOTOK;
- tputs (SO, 1, outc);
+ tputs (SO, 1, outc);
- va_start(ap, fmt);
- vprintf (fmt, ap);
- va_end(ap);
+ va_start(ap, fmt);
+ vprintf (fmt, ap);
+ va_end(ap);
- tputs (SE, 1, outc);
+ tputs (SE, 1, outc);
- return OK;
+ return OK;
}
/*
int
sc_hardcopy(void)
{
- read_termcap();
- return HC;
+ read_termcap();
+ return HC;
}
-