+/*
+ * Return the specified capability as a string that has already been
+ * processed with tputs().
+ */
+
+char *
+get_term_stringcap(char *capability)
+{
+ char *parm;
+
+ initialize_terminfo();
+
+ if (termstatus == -1)
+ return NULL;
+
+ termcbufp = termcbuf;
+
+ parm = tigetstr(capability);
+
+ if (parm == (char *) -1 || parm == NULL) {
+ return NULL;
+ }
+
+ tputs(parm, 1, termbytes);
+
+ *termcbufp = '\0';
+
+ return termcbuf;
+}
+
+/*
+ * Return a parameterized terminfo 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;
+}
+
+/*
+ * Return the value of the specified numeric capability
+ */
+
+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(TPUTS_PUTC_ARG c)
+{
+ size_t offset;
+
+ /*
+ * Bump up the buffer size if we've reached the end (leave room for
+ * a trailing NUL)
+ */
+
+ if ((offset = termcbufp - termcbuf) - 1 >= termcbufsz) {
+ termcbufsz += 64;
+ termcbuf = mh_xrealloc(termcbuf, termcbufsz);
+ termcbufp = termcbuf + offset;
+ }
+
+ *termcbufp++ = c;
+
+ return 0;
+}