1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217
|
/***************************************************************************
* COPYRIGHT NOTICE *
****************************************************************************
* ncurses is copyright (C) 1992-1995 *
* Zeyd M. Ben-Halim *
* zmbenhal@netcom.com *
* Eric S. Raymond *
* esr@snark.thyrsus.com *
* *
* Permission is hereby granted to reproduce and distribute ncurses *
* by any means and for any fee, whether alone or as part of a *
* larger distribution, in source or in binary form, PROVIDED *
* this notice is included with any such distribution, and is not *
* removed from any of its header files. Mention of ncurses in any *
* applications linked with it is highly appreciated. *
* *
* ncurses comes AS IS with no warranty, implied or expressed. *
* *
***************************************************************************/
#include "curses.priv.h"
#include <stdlib.h>
#include <string.h>
#include "termcap.h"
#define __INTERNAL_CAPS_VISIBLE
#include "term.h"
/*
some of the code in here was contributed by:
Magnus Bengtsson, d6mbeng@dtek.chalmers.se
*/
char PC;
char *UP;
char *BC;
short ospeed;
/***************************************************************************
*
* tgetent(bufp, term)
*
* In termcap, this function reads in the entry for terminal `term' into the
* buffer pointed to by bufp. It must be called before any of the functions
* below are called.
* In this terminfo emulation, tgetent() simply calls setupterm() (which
* does a bit more than tgetent() in termcap does), and returns its return
* value (1 if successful, 0 if no terminal with the given name could be
* found, or -1 if no terminal descriptions have been installed on the
* system). The bufp argument is ignored.
*
***************************************************************************/
int tgetent(char *bp, const char *name)
{
int errcode;
T(("calling tgetent"));
setupterm((char *)name, STDOUT_FILENO, &errcode);
if (errcode != 1)
return(errcode);
if (cursor_left)
if (!(backspaces_with_bs = !strcmp(cursor_left, "\b")))
backspace_if_not_bs = cursor_left;
/* we're required to export these */
if (pad_char != NULL)
PC = pad_char[0];
if (cursor_up != NULL)
UP = cursor_up;
if (backspace_if_not_bs != NULL)
BC = backspace_if_not_bs;
#if defined(TERMIOS)
/*
* Back-convert to the funny speed encoding used by the old BSD
* curses library. Method suggested by Andrey Chernov
* <ache@astral.msk.su>
*/
if ((ospeed = cfgetospeed(&cur_term->Nttyb)) < 0)
ospeed = 1; /* assume lowest non-hangup speed */
else
{
const short *sp;
static const short speeds[] = {
#ifdef B115200
B115200,
#endif
#ifdef B57600
B57600,
#endif
#ifdef B38400
B38400,
#else
#ifdef EXTB
EXTB,
#endif
#endif /* B38400 */
#ifdef B19200
B19200,
#else
#ifdef EXTA
EXTA,
#endif
#endif /* B19200 */
B9600,
B4800,
B2400,
B1800,
B1200,
B600,
B300,
B200,
B150,
B134,
B110,
B75,
B50,
B0,
};
#define MAXSPEED sizeof(speeds)/sizeof(speeds[0])
for (sp = speeds; sp < speeds + MAXSPEED; sp++) {
if (sp[0] <= ospeed) {
break;
}
}
ospeed = MAXSPEED - (sp - speeds);
}
#else
ospeed = cur_term->Nttyb.sg_ospeed;
#endif
#include "capdefaults.c"
return errcode;
}
/***************************************************************************
*
* tgetflag(str)
*
* Look up boolean termcap capability str and return its value (TRUE=1 if
* present, FALSE=0 if not).
*
***************************************************************************/
int tgetflag(const char *id)
{
int i;
T(("tgetflag: %s", id));
for (i = 0; i < BOOLCOUNT; i++)
if (!strcmp(id, boolcodes[i]))
return cur_term->type.Booleans[i];
return ERR;
}
/***************************************************************************
*
* tgetnum(str)
*
* Look up numeric termcap capability str and return its value, or -1 if
* not given.
*
***************************************************************************/
int tgetnum(const char *id)
{
int i;
T(("tgetnum: %s", id));
for (i = 0; i < NUMCOUNT; i++)
if (!strcmp(id, numcodes[i]))
return cur_term->type.Numbers[i];
return ERR;
}
/***************************************************************************
*
* tgetstr(str, area)
*
* Look up string termcap capability str and return a pointer to its value,
* or NULL if not given.
*
***************************************************************************/
char *tgetstr(const char *id, char **area)
{
int i;
T(("tgetstr: %s", id));
for (i = 0; i < STRCOUNT; i++) {
T(("trying %s", strcodes[i]));
if (!strcmp(id, strcodes[i])) {
T(("found match : %s", cur_term->type.Strings[i]));
return cur_term->type.Strings[i];
}
}
return NULL;
}
/*
* char *
* tgoto(string, x, y)
*
* Retained solely for upward compatibility. Note the intentional
* reversing of the last two arguments.
*
*/
char *tgoto(const char *string, int x, int y)
{
return(tparm((char *)string, y, x));
}
|