summaryrefslogtreecommitdiff
path: root/tinytcap.c
diff options
context:
space:
mode:
Diffstat (limited to 'tinytcap.c')
-rw-r--r--tinytcap.c154
1 files changed, 154 insertions, 0 deletions
diff --git a/tinytcap.c b/tinytcap.c
new file mode 100644
index 0000000..6e8f46f
--- /dev/null
+++ b/tinytcap.c
@@ -0,0 +1,154 @@
+/* tinytcap.c */
+
+/* This file contains functions which simulate the termcap functions, but which
+ * can only describe the capabilities of the ANSI.SYS and NANSI.SYS drivers on
+ * an MS-DOS system or the VT-52 emulator of an Atari-ST. These functions
+ * do *NOT* access a "termcap" database file.
+ */
+
+#include "config.h"
+#if MSDOS || TOS || MINIX || COHERENT
+
+#define CAP(str) CAP2((str)[0], (str)[1])
+#define CAP2(a,b) (((a) << 8) + ((b) & 0xff))
+
+#if MSDOS
+# define VAL2(v,a) (a)
+# define VAL3(v,a,n) (nansi ? (n) : (a))
+static int nansi;
+#endif
+
+#if TOS
+# define VAL2(v,a) (v)
+# define VAL3(v,a,n) (v)
+#endif
+
+#if MINIX || COHERENT
+# define VAL2(v,a) (a)
+# define VAL3(v,a,n) (n)
+#endif
+
+
+/*ARGSUSED*/
+int tgetent(bp, name)
+ char *bp; /* buffer for storing the entry -- ignored */
+ char *name; /* name of the entry */
+{
+#if MSDOS
+ nansi = strcmp(name, "ansi");
+#endif
+ return 1;
+}
+
+int tgetnum(id)
+ char *id;
+{
+ switch (CAP(id))
+ {
+ case CAP2('l','i'): return 25;
+ case CAP2('c','o'): return 80;
+ case CAP2('s','g'): return 0;
+ case CAP2('u','g'): return 0;
+ default: return -1;
+ }
+}
+
+int tgetflag(id)
+ char *id;
+{
+ switch (CAP(id))
+ {
+#if !MINIX || COHERENT
+ case CAP2('a','m'): return 1;
+#endif
+ case CAP2('b','s'): return 1;
+ case CAP2('m','i'): return 1;
+ default: return 0;
+ }
+}
+
+/*ARGSUSED*/
+char *tgetstr(id, bp)
+ char *id;
+ char **bp; /* pointer to pointer to buffer - ignored */
+{
+ switch (CAP(id))
+ {
+ case CAP2('c','e'): return VAL2("\033K", "\033[K");
+ case CAP2('c','l'): return VAL2("\033E", "\033[2J");
+
+ case CAP2('a','l'): return VAL3("\033L", (char *)0, "\033[L");
+ case CAP2('d','l'): return VAL3("\033M", (char *)0, "\033[M");
+
+ case CAP2('c','m'): return VAL2("\033Y%i%+ %+ ", "\033[%i%d;%dH");
+ case CAP2('d','o'): return VAL2("\033B", "\033[B");
+ case CAP2('n','d'): return VAL2("\033C", "\033[C");
+ case CAP2('u','p'): return VAL2("\033A", "\033[A");
+ case CAP2('t','i'): return VAL2("\033e", "");
+ case CAP2('t','e'): return VAL2("", "");
+
+ case CAP2('s','o'): return VAL2("\033p", "\033[7m");
+ case CAP2('s','e'): return VAL2("\033q", "\033[m");
+ case CAP2('u','s'): return VAL2((char *)0, "\033[4m");
+ case CAP2('u','e'): return VAL2((char *)0, "\033[m");
+ case CAP2('m','d'): return VAL2((char *)0, "\033[1m");
+ case CAP2('m','e'): return VAL2((char *)0, "\033[m");
+
+#if MINIX || COHERENT
+ case CAP2('k','u'): return "\033[A";
+ case CAP2('k','d'): return "\033[B";
+ case CAP2('k','l'): return "\033[D";
+ case CAP2('k','r'): return "\033[C";
+ case CAP2('k','P'): return "\033[V";
+ case CAP2('k','N'): return "\033[U";
+ case CAP2('k','h'): return "\033[H";
+# if MINIX
+ case CAP2('k','H'): return "\033[Y";
+# else /* COHERENT */
+ case CAP2('k','H'): return "\033[24H";
+# endif
+#else /* MS-DOS or TOS */
+ case CAP2('k','u'): return "#H";
+ case CAP2('k','d'): return "#P";
+ case CAP2('k','l'): return "#K";
+ case CAP2('k','r'): return "#M";
+ case CAP2('k','h'): return "#G";
+ case CAP2('k','H'): return "#O";
+ case CAP2('k','P'): return "#I";
+ case CAP2('k','N'): return "#Q";
+#endif
+
+ default: return (char *)0;
+ }
+}
+
+/*ARGSUSED*/
+char *tgoto(cm, destcol, destrow)
+ char *cm; /* cursor movement string -- ignored */
+ int destcol;/* destination column, 0 - 79 */
+ int destrow;/* destination row, 0 - 24 */
+{
+ static char buf[30];
+
+#if MSDOS || MINIX || COHERENT
+ sprintf(buf, "\033[%d;%dH", destrow + 1, destcol + 1);
+#endif
+#if TOS
+ sprintf(buf, "\033Y%c%c", ' ' + destrow, ' ' + destcol);
+#endif
+ return buf;
+}
+
+/*ARGSUSED*/
+void tputs(cp, affcnt, outfn)
+ char *cp; /* the string to output */
+ int affcnt; /* number of affected lines -- ignored */
+ int (*outfn)(); /* the output function */
+{
+ while (*cp)
+ {
+ (*outfn)(*cp);
+ cp++;
+ }
+}
+#endif