1/* $NetBSD: ti.c,v 1.2 2010/02/04 09:46:26 roy Exp $ */ 2 3/* 4 * Copyright (c) 2009 The NetBSD Foundation, Inc. 5 * 6 * This id is derived from software contributed to The NetBSD Foundation 7 * by Roy Marples. 8 * 9 * Redistribution and use in source and binary forms, with or without 10 * modification, are permitted provided that the following conditions 11 * are met: 12 * 1. Redistributions of source id must retain the above copyright 13 * notice, this list of conditions and the following disclaimer. 14 * 2. Redistributions in binary form must reproduce the above copyright 15 * notice, this list of conditions and the following disclaimer in the 16 * documentation and/or other materials provided with the distribution. 17 * 18 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 19 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 20 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 21 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 22 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 23 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 27 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 */ 29 30#include <sys/cdefs.h> 31__RCSID("$NetBSD: ti.c,v 1.2 2010/02/04 09:46:26 roy Exp $"); 32 33#include <assert.h> 34#include <string.h> 35#include <term_private.h> 36#include <term.h> 37 38int 39ti_getflag(const TERMINAL *term, const char *id) 40{ 41 ssize_t ind; 42 size_t i; 43 TERMUSERDEF *ud; 44 45 _DIAGASSERT(term != NULL); 46 _DIAGASSERT(id != NULL); 47 48 ind = _ti_flagindex(id); 49 if (ind != -1) 50 return term->flags[ind]; 51 for (i = 0; i < term->_nuserdefs; i++) { 52 ud = &term->_userdefs[i]; 53 if (ud->type == 'f' && strcmp(ud->id, id) == 0) 54 return ud->flag; 55 } 56 return ABSENT_BOOLEAN; 57} 58 59int 60tigetflag(const char *id) 61{ 62 63 _DIAGASSERT(id != NULL); 64 if (cur_term != NULL) 65 return ti_getflag(cur_term, id); 66 return ABSENT_BOOLEAN; 67} 68 69int 70ti_getnum(const TERMINAL *term, const char *id) 71{ 72 ssize_t ind; 73 size_t i; 74 TERMUSERDEF *ud; 75 76 _DIAGASSERT(term != NULL); 77 _DIAGASSERT(id != NULL); 78 79 ind = _ti_numindex(id); 80 if (ind != -1) { 81 if (!VALID_NUMERIC(term->nums[ind])) 82 return ABSENT_NUMERIC; 83 return term->nums[ind]; 84 } 85 for (i = 0; i < term->_nuserdefs; i++) { 86 ud = &term->_userdefs[i]; 87 if (ud->type == 'n' && strcmp(ud->id, id) == 0) { 88 if (!VALID_NUMERIC(ud->num)) 89 return ABSENT_NUMERIC; 90 return ud->num; 91 } 92 } 93 return CANCELLED_NUMERIC; 94} 95 96int 97tigetnum(const char *id) 98{ 99 100 _DIAGASSERT(id != NULL); 101 if (cur_term != NULL) 102 return ti_getnum(cur_term, id); 103 return CANCELLED_NUMERIC; 104} 105 106const char * 107ti_getstr(const TERMINAL *term, const char *id) 108{ 109 ssize_t ind; 110 size_t i; 111 TERMUSERDEF *ud; 112 113 _DIAGASSERT(term != NULL); 114 _DIAGASSERT(id != NULL); 115 116 ind = _ti_strindex(id); 117 if (ind != -1) 118 return term->strs[ind]; 119 for (i = 0; i < term->_nuserdefs; i++) { 120 ud = &term->_userdefs[i]; 121 if (ud->type == 's' && strcmp(ud->id, id) == 0) 122 return ud->str; 123 } 124 return (const char *)CANCELLED_STRING; 125} 126 127char * 128tigetstr(const char *id) 129{ 130 131 _DIAGASSERT(id != NULL); 132 if (cur_term != NULL) 133 return __UNCONST(ti_getstr(cur_term, id)); 134 return (char *)CANCELLED_STRING; 135} 136