diff options
Diffstat (limited to 'tinytcap.c')
-rw-r--r-- | tinytcap.c | 154 |
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 |