-
-/*
- * termsbr.c -- termcap support
+/* terminal.c -- termcap support
*
* This code is Copyright (c) 2002, by the authors of nmh. See the
* COPYRIGHT file in the root directory of the nmh distribution for
#include <h/mh.h>
#include <h/utils.h>
-#include <termios.h>
#include <sys/ioctl.h>
#include <curses.h>
#include <term.h>
+#include <termios.h>
#ifdef WINSIZE_IN_PTEM
# include <sys/stream.h>
# include <sys/ptem.h>
#endif
+#include "terminal.h"
+
static int initLI = 0;
static int initCO = 0;
static int LI = 40; /* number of lines */
-static int CO = 80; /* number of colums */
+static int CO = 80; /* number of columns */
static char *ti_clear = NULL; /* terminfo string to clear screen */
static char *ti_standend = NULL; /* terminfo string to end standout mode */
static char *ti_standbegin = NULL; /* terminfo string to begin standout mode */
static size_t termcbufsz = 0; /* Size of termcbuf */
static void initialize_terminfo(void);
-static int termbytes(int);
+static int termbytes(TPUTS_PUTC_ARG);
/*
* Initialize the terminfo library.
if (rc != 0 || errret != 1) {
termstatus = -1;
return;
- } else {
- termstatus = 1;
}
+ termstatus = 1;
if (!initCO && (CO = tigetnum ("cols")) <= 0)
CO = 80;
static int
-outc (int c)
+outc (TPUTS_PUTC_ARG c)
{
return putchar(c);
}
if (ti_clear)
tputs (ti_clear, LI, outc);
else {
- printf ("\f");
+ putchar('\f');
}
fflush (stdout);
}
/*
- * Return the specified capability as a string that has already been
- * processed with tputs().
+ * Get a string from the terminfo database for the current terminal.
+ *
+ * Retrieve the specified terminfo capability and return a string that
+ * can be output to the terminal. The string returned has already been
+ * processed by tputs(), so it is safe to output directly. The return
+ * value of this function is valid until the next call.
+ *
+ * Arguments:
+ *
+ * capability - The name of the terminfo capability (see terminfo(5)).
+ *
+ * Returns a tputs-processed string, or NULL if terminal initialization failed
+ * or the capability wasn't found.
*/
char *
tputs(parm, 1, termbytes);
- termcbufp = '\0';
+ *termcbufp = '\0';
return termcbuf;
}
+/*
+ * Get a parameterized string from the terminfo database for the current
+ * terminal.
+ *
+ * We don't yet have a standardized tparm() that will take a stdarg
+ * argument. Right now we don't want many parameters, so we only
+ * take two. Everything gets passed to tparm() as-is. If we need
+ * a capability with more arguments, we'll just add more later.
+ *
+ * Arguments:
+ *
+ * capability - The name of the terminfo capability (see terminfo(5)).
+ * arg1..argN - Arguments 1-N.
+ *
+ * Returns a tparm and tputs-processed string, or NULL if there was a problem
+ * initialising the terminal or retrieving the capability.
+ */
+char *
+get_term_stringparm(char *capability, long arg1, long arg2)
+{
+ char *parm;
+
+ initialize_terminfo();
+
+ if (termstatus == -1)
+ return NULL;
+
+ termcbufp = termcbuf;
+
+ parm = tigetstr(capability);
+
+ if (parm == (char *) -1 || parm == NULL) {
+ return NULL;
+ }
+
+ parm = tparm(parm, arg1, arg2, 0, 0, 0, 0, 0, 0, 0);
+
+ tputs(parm, 1, termbytes);
+
+ *termcbufp = '\0';
+
+ return termcbuf;
+}
+
+/*
+ * Get a number from the terminfo database for the current terminal.
+ *
+ * Retrieve the specified terminfo capability and return the numeric
+ * value of that capability from the terminfo database.
+ *
+ * Arguments:
+ *
+ * capability - The name of the terminfo capability (see terminfo(5)).
+ *
+ * Returns the output of tigetnum() for that capability, or -1 if it was
+ * unable to initialize the terminfo database.
+ */
+int
+get_term_numcap(char *capability)
+{
+ initialize_terminfo();
+
+ if (termstatus == -1)
+ return -1;
+
+ return tigetnum(capability);
+}
+
/*
* Store a sequence of characters in our local buffer
*/
static int
-termbytes(int c)
+termbytes(TPUTS_PUTC_ARG c)
{
size_t offset;