summaryrefslogtreecommitdiffstats
path: root/lib/libmytinfo/terminfo.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libmytinfo/terminfo.c')
-rw-r--r--lib/libmytinfo/terminfo.c132
1 files changed, 132 insertions, 0 deletions
diff --git a/lib/libmytinfo/terminfo.c b/lib/libmytinfo/terminfo.c
new file mode 100644
index 0000000..0568588
--- /dev/null
+++ b/lib/libmytinfo/terminfo.c
@@ -0,0 +1,132 @@
+/*
+ * terminfo.c
+ *
+ * By Ross Ridge
+ * Public Domain
+ * 92/02/01 07:30:30
+ *
+ * terminfo compatible libary functions
+ *
+ */
+
+#include "defs.h"
+#include <term.h>
+
+#ifdef USE_SCCS_IDS
+static const char SCCSid[] = "@(#) mytinfo terminfo.c 3.2 92/02/01 public domain, By Ross Ridge";
+#endif
+
+extern char _mytinfo_version[];
+/* not static */
+char *_force_pick2 = _mytinfo_version;
+
+#ifdef USE_FAKE_STDIO
+
+#ifdef __GNUC__
+__inline__
+#endif
+static int
+printerr(msg)
+char *msg; {
+ return write(2, msg, strlen(msg));
+}
+
+#define RETERR(e, msg) { (err == NULL ? (printerr(msg), exit(1)) \
+ : (*err = e)); return ERR; }
+
+#else
+
+#define RETERR(e, msg) { (err == NULL ? (fprintf(stderr, "setupterm(\"%s\",%d,NULL): %s", term, fd, msg), exit(1)) \
+ : (*err = e)); return ERR; }
+
+#endif
+
+int
+setupterm(term, fd, err)
+char *term;
+int fd;
+int *err; {
+ struct term_path *path;
+ char *s;
+ int r = -1;
+ char buf[MAX_BUF];
+
+
+ if (term == NULL)
+ term = getenv("TERM");
+ if (term == NULL)
+ RETERR(0, "TERM not set\n")
+
+ path = _buildpath(
+#ifdef USE_TERMINFO
+ "$MYTERMINFO", 2,
+ "$TERMINFO", 2,
+#ifdef TERMINFODIR
+ TERMINFODIR, 0,
+#endif
+#ifdef TERMINFOSRC
+ TERMINFOSRC, 0,
+#endif
+#endif
+#ifdef USE_TERMCAP
+ "$TERMCAP", 1,
+#ifdef TERMCAPFILE
+ TERMCAPFILE, 0,
+#endif
+#endif
+ NULL, -1);
+
+ if (path == NULL)
+ RETERR(0, "malloc error\n");
+
+ r = _fillterm(term, path, buf);
+
+ _delpath(path);
+
+ switch(r) {
+ case -3:
+ RETERR(0, "malloc error\n");
+ case -2:
+ RETERR(-1, "bad format\n");
+ case -1:
+ RETERR(-1, "database not found\n");
+ case 0:
+ RETERR(0, "terminal not found\n");
+ case 1:
+ case 2:
+ case 3:
+ cur_term->fd = fd;
+ _term_buf.fd = fd;
+ if (_init_tty() == ERR)
+ RETERR(0, "problem initializing tty\n");
+ if ((s = getenv("LINES")) != NULL && atoi(s) > 0)
+ lines = atoi(s);
+ if ((s = getenv("COLUMNS")) != NULL && atoi(s) > 0)
+ columns = atoi(s);
+ if (err != NULL)
+ *err = 1;
+ return OK;
+ default:
+ RETERR(0, "oops...\n");
+ }
+}
+
+int
+set_curterm(p)
+TERMINAL *p; {
+ cur_term = p;
+ if (_init_tty() == ERR)
+ return ERR;
+ if (_check_tty() == ERR)
+ return ERR;
+ return OK;
+}
+
+int
+del_curterm(p)
+TERMINAL *p; {
+ _del_strs(p);
+ free((anyptr) p);
+
+ return OK;
+}
OpenPOWER on IntegriCloud