X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/ec68c7d9fca00e976df02842dc2c9d5a523567af..23816efd3e8e294e8f1c1ce811ac3a1cd15d334e:/sbr/terminal.c diff --git a/sbr/terminal.c b/sbr/terminal.c index 51dd1298..d3c3b9f7 100644 --- a/sbr/terminal.c +++ b/sbr/terminal.c @@ -5,8 +5,8 @@ * complete copyright information. */ -#include -#include +#include "h/mh.h" +#include "h/utils.h" #include @@ -19,6 +19,8 @@ # include #endif +#include "terminal.h" + static int initLI = 0; static int initCO = 0; @@ -45,12 +47,12 @@ initialize_terminfo(void) int errret, rc; if (termstatus) - return; + return; rc = setupterm(NULL, fileno(stdout), &errret); if (rc != 0 || errret != 1) { - termstatus = -1; + termstatus = -1; return; } termstatus = 1; @@ -148,8 +150,19 @@ SOprintf (char *fmt, ...) } /* - * 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 * @@ -160,14 +173,14 @@ get_term_stringcap(char *capability) initialize_terminfo(); if (termstatus == -1) - return NULL; + return NULL; termcbufp = termcbuf; parm = tigetstr(capability); if (parm == (char *) -1 || parm == NULL) { - return NULL; + return NULL; } tputs(parm, 1, termbytes); @@ -178,9 +191,22 @@ get_term_stringcap(char *capability) } /* - * Return a parameterized terminfo capability + * 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) { @@ -189,14 +215,14 @@ get_term_stringparm(char *capability, long arg1, long arg2) initialize_terminfo(); if (termstatus == -1) - return NULL; + return NULL; termcbufp = termcbuf; parm = tigetstr(capability); if (parm == (char *) -1 || parm == NULL) { - return NULL; + return NULL; } parm = tparm(parm, arg1, arg2, 0, 0, 0, 0, 0, 0, 0); @@ -209,16 +235,25 @@ get_term_stringparm(char *capability, long arg1, long arg2) } /* - * Return the value of the specified numeric capability + * 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 -1; return tigetnum(capability); } @@ -239,7 +274,7 @@ termbytes(TPUTS_PUTC_ARG c) if ((offset = termcbufp - termcbuf) - 1 >= termcbufsz) { termcbufsz += 64; - termcbuf = mh_xrealloc(termcbuf, termcbufsz); + termcbuf = mh_xrealloc(termcbuf, termcbufsz); termcbufp = termcbuf + offset; }