xref: /minix3/lib/libterminfo/ti.c (revision 84d9c625bfea59e274550651111ae9edfdc40fbd)
1*84d9c625SLionel Sambuc /* $NetBSD: ti.c,v 1.3 2013/06/07 13:16:18 roy Exp $ */
251e66a47SVivek Prakash 
351e66a47SVivek Prakash /*
451e66a47SVivek Prakash  * Copyright (c) 2009 The NetBSD Foundation, Inc.
551e66a47SVivek Prakash  *
651e66a47SVivek Prakash  * This id is derived from software contributed to The NetBSD Foundation
751e66a47SVivek Prakash  * by Roy Marples.
851e66a47SVivek Prakash  *
951e66a47SVivek Prakash  * Redistribution and use in source and binary forms, with or without
1051e66a47SVivek Prakash  * modification, are permitted provided that the following conditions
1151e66a47SVivek Prakash  * are met:
1251e66a47SVivek Prakash  * 1. Redistributions of source id must retain the above copyright
1351e66a47SVivek Prakash  *    notice, this list of conditions and the following disclaimer.
1451e66a47SVivek Prakash  * 2. Redistributions in binary form must reproduce the above copyright
1551e66a47SVivek Prakash  *    notice, this list of conditions and the following disclaimer in the
1651e66a47SVivek Prakash  *    documentation and/or other materials provided with the distribution.
1751e66a47SVivek Prakash  *
1851e66a47SVivek Prakash  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
1951e66a47SVivek Prakash  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
2051e66a47SVivek Prakash  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
2151e66a47SVivek Prakash  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
2251e66a47SVivek Prakash  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
2351e66a47SVivek Prakash  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2451e66a47SVivek Prakash  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2551e66a47SVivek Prakash  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2651e66a47SVivek Prakash  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
2751e66a47SVivek Prakash  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2851e66a47SVivek Prakash  */
2951e66a47SVivek Prakash 
3051e66a47SVivek Prakash #include <sys/cdefs.h>
31*84d9c625SLionel Sambuc __RCSID("$NetBSD: ti.c,v 1.3 2013/06/07 13:16:18 roy Exp $");
3251e66a47SVivek Prakash 
3351e66a47SVivek Prakash #include <assert.h>
3451e66a47SVivek Prakash #include <string.h>
3551e66a47SVivek Prakash #include <term_private.h>
3651e66a47SVivek Prakash #include <term.h>
3751e66a47SVivek Prakash 
3851e66a47SVivek Prakash int
ti_getflag(const TERMINAL * term,const char * id)3951e66a47SVivek Prakash ti_getflag(const TERMINAL *term, const char *id)
4051e66a47SVivek Prakash {
4151e66a47SVivek Prakash 	ssize_t ind;
4251e66a47SVivek Prakash 	size_t i;
4351e66a47SVivek Prakash 	TERMUSERDEF *ud;
4451e66a47SVivek Prakash 
4551e66a47SVivek Prakash 	_DIAGASSERT(term != NULL);
4651e66a47SVivek Prakash 	_DIAGASSERT(id != NULL);
4751e66a47SVivek Prakash 
4851e66a47SVivek Prakash 	ind = _ti_flagindex(id);
4951e66a47SVivek Prakash 	if (ind != -1)
5051e66a47SVivek Prakash 		return term->flags[ind];
5151e66a47SVivek Prakash 	for (i = 0; i < term->_nuserdefs; i++) {
5251e66a47SVivek Prakash 		ud = &term->_userdefs[i];
5351e66a47SVivek Prakash 		if (ud->type == 'f' && strcmp(ud->id, id) == 0)
5451e66a47SVivek Prakash 			return ud->flag;
5551e66a47SVivek Prakash 	}
5651e66a47SVivek Prakash 	return ABSENT_BOOLEAN;
5751e66a47SVivek Prakash }
5851e66a47SVivek Prakash 
5951e66a47SVivek Prakash int
tigetflag(const char * id)6051e66a47SVivek Prakash tigetflag(const char *id)
6151e66a47SVivek Prakash {
6251e66a47SVivek Prakash 
6351e66a47SVivek Prakash 	_DIAGASSERT(id != NULL);
6451e66a47SVivek Prakash 	if (cur_term != NULL)
6551e66a47SVivek Prakash 		return ti_getflag(cur_term, id);
6651e66a47SVivek Prakash 	return ABSENT_BOOLEAN;
6751e66a47SVivek Prakash }
6851e66a47SVivek Prakash 
6951e66a47SVivek Prakash int
ti_getnum(const TERMINAL * term,const char * id)7051e66a47SVivek Prakash ti_getnum(const TERMINAL *term, const char *id)
7151e66a47SVivek Prakash {
7251e66a47SVivek Prakash 	ssize_t ind;
7351e66a47SVivek Prakash 	size_t i;
7451e66a47SVivek Prakash 	TERMUSERDEF *ud;
7551e66a47SVivek Prakash 
7651e66a47SVivek Prakash 	_DIAGASSERT(term != NULL);
7751e66a47SVivek Prakash 	_DIAGASSERT(id != NULL);
7851e66a47SVivek Prakash 
7951e66a47SVivek Prakash 	ind = _ti_numindex(id);
8051e66a47SVivek Prakash 	if (ind != -1) {
8151e66a47SVivek Prakash 		if (!VALID_NUMERIC(term->nums[ind]))
8251e66a47SVivek Prakash 			return ABSENT_NUMERIC;
8351e66a47SVivek Prakash 		return term->nums[ind];
8451e66a47SVivek Prakash 	}
8551e66a47SVivek Prakash 	for (i = 0; i < term->_nuserdefs; i++) {
8651e66a47SVivek Prakash 		ud = &term->_userdefs[i];
8751e66a47SVivek Prakash 		if (ud->type == 'n' && strcmp(ud->id, id) == 0) {
8851e66a47SVivek Prakash 			if (!VALID_NUMERIC(ud->num))
8951e66a47SVivek Prakash 			    return ABSENT_NUMERIC;
9051e66a47SVivek Prakash 			return ud->num;
9151e66a47SVivek Prakash 		}
9251e66a47SVivek Prakash 	}
9351e66a47SVivek Prakash 	return CANCELLED_NUMERIC;
9451e66a47SVivek Prakash }
9551e66a47SVivek Prakash 
9651e66a47SVivek Prakash int
tigetnum(const char * id)9751e66a47SVivek Prakash tigetnum(const char *id)
9851e66a47SVivek Prakash {
9951e66a47SVivek Prakash 
10051e66a47SVivek Prakash 	_DIAGASSERT(id != NULL);
10151e66a47SVivek Prakash 	if (cur_term != NULL)
10251e66a47SVivek Prakash 		return ti_getnum(cur_term, id);
10351e66a47SVivek Prakash 	return CANCELLED_NUMERIC;
10451e66a47SVivek Prakash }
10551e66a47SVivek Prakash 
10651e66a47SVivek Prakash const char *
ti_getstr(const TERMINAL * term,const char * id)10751e66a47SVivek Prakash ti_getstr(const TERMINAL *term, const char *id)
10851e66a47SVivek Prakash {
10951e66a47SVivek Prakash 	ssize_t ind;
11051e66a47SVivek Prakash 	size_t i;
11151e66a47SVivek Prakash 	TERMUSERDEF *ud;
11251e66a47SVivek Prakash 
11351e66a47SVivek Prakash 	_DIAGASSERT(term != NULL);
11451e66a47SVivek Prakash 	_DIAGASSERT(id != NULL);
11551e66a47SVivek Prakash 
11651e66a47SVivek Prakash 	ind = _ti_strindex(id);
11751e66a47SVivek Prakash 	if (ind != -1)
11851e66a47SVivek Prakash 		return term->strs[ind];
11951e66a47SVivek Prakash 	for (i = 0; i < term->_nuserdefs; i++) {
12051e66a47SVivek Prakash 		ud = &term->_userdefs[i];
12151e66a47SVivek Prakash 		if (ud->type == 's' && strcmp(ud->id, id) == 0)
12251e66a47SVivek Prakash 			return ud->str;
12351e66a47SVivek Prakash 	}
12451e66a47SVivek Prakash 	return (const char *)CANCELLED_STRING;
12551e66a47SVivek Prakash }
12651e66a47SVivek Prakash 
12751e66a47SVivek Prakash char *
tigetstr(const char * id)12851e66a47SVivek Prakash tigetstr(const char *id)
12951e66a47SVivek Prakash {
13051e66a47SVivek Prakash 
13151e66a47SVivek Prakash 	_DIAGASSERT(id != NULL);
13251e66a47SVivek Prakash 	if (cur_term != NULL)
13351e66a47SVivek Prakash 		return __UNCONST(ti_getstr(cur_term, id));
13451e66a47SVivek Prakash 	return (char *)CANCELLED_STRING;
13551e66a47SVivek Prakash }
136