1/*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License, Version 1.0 only
6 * (the "License").  You may not use this file except in compliance
7 * with the License.
8 *
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 * or http://www.opensolaris.org/os/licensing.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
13 *
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
19 *
20 * CDDL HEADER END
21 */
22/* BEGIN PROLOGUE */
23
24/*
25 * Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
26 * Use is subject to license terms.
27 */
28
29#pragma ident	"%Z%%M%	%I%	%E% SMI"
30
31/*
32 * kmdb_terminfo_skel.c is the skeleton used to generate
33 * kmdb_terminfo.c, which contains the kmdb-specific version
34 * of terminfo.
35 */
36
37#include <strings.h>
38#include <unistd.h>
39#include <curses.h>
40
41#include <mdb/mdb_io.h>
42#include <mdb/mdb_debug.h>
43#include <mdb/mdb.h>
44
45typedef enum {
46	TIO_ATTR_REQSTR,
47	TIO_ATTR_STR,
48	TIO_ATTR_BOOL,
49	TIO_ATTR_INT
50} termio_attr_type_t;
51
52typedef struct {
53	const char *ta_name;
54	termio_attr_type_t ta_type;
55	const void *ta_data;
56} termio_attr_t;
57
58typedef struct {
59	const char *td_name;
60	const termio_attr_t *td_data;
61} termio_desc_t;
62
63/* END PROLOGUE */
64
65/*
66 * tigen will insert the following definitions here:
67 *
68 *	<term>_attrs  (one per terminal type passed to tigen)
69 *	termio_db
70 */
71
72/* BEGIN EPILOGUE */
73
74static const termio_desc_t *tdp;
75
76/*ARGSUSED*/
77int
78setupterm(char *name, int fd, int *err)
79{
80	for (tdp = termio_db; tdp->td_name != NULL; tdp++) {
81		if (strcmp(tdp->td_name, name) == 0)
82			return (OK);
83	}
84
85	*err = 0;
86	return (ERR);
87}
88
89int
90restartterm(char *name, int fd, int *err)
91{
92	const termio_desc_t *otdp = tdp;
93	int status;
94
95	if ((status = setupterm(name, fd, err)) != OK)
96		tdp = otdp; /* restore old terminal settings */
97
98	return (status);
99}
100
101const char *
102tigetstr(const char *name)
103{
104	const termio_attr_t *tap;
105
106	for (tap = tdp->td_data; tap->ta_name != NULL; tap++) {
107		if (strcmp(tap->ta_name, name) == 0) {
108			if (tap->ta_type == TIO_ATTR_REQSTR ||
109			    tap->ta_type == TIO_ATTR_STR)
110				return (tap->ta_data);
111			else
112				return ((char *)-1);
113		}
114	}
115
116	return (NULL);
117}
118
119int
120tigetflag(const char *name)
121{
122	const termio_attr_t *tap;
123
124	for (tap = tdp->td_data; tap->ta_name != NULL; tap++) {
125		if (strcmp(tap->ta_name, name) == 0) {
126			if (tap->ta_type == TIO_ATTR_BOOL)
127				return ((uintptr_t)tap->ta_data);
128			else
129				return (-1);
130		}
131	}
132
133	return (0);
134}
135
136int
137tigetnum(const char *name)
138{
139	const termio_attr_t *tap;
140
141	for (tap = tdp->td_data; tap->ta_name != NULL; tap++) {
142		if (strcmp(tap->ta_name, name) == 0) {
143			if (tap->ta_type == TIO_ATTR_INT)
144				return ((uintptr_t)tap->ta_data);
145			else
146				return (-2);
147		}
148	}
149
150	return (-1);
151}
152
153/* END EPILOGUE */
154