[BACK]Return to tparm_type.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / tic

Annotation of src/usr.bin/tic/tparm_type.c, Revision 1.1

1.1     ! nicm        1: /****************************************************************************
        !             2:  * Copyright 2020,2023 Thomas E. Dickey                                     *
        !             3:  * Copyright 2014,2015 Free Software Foundation, Inc.                       *
        !             4:  *                                                                          *
        !             5:  * Permission is hereby granted, free of charge, to any person obtaining a  *
        !             6:  * copy of this software and associated documentation files (the            *
        !             7:  * "Software"), to deal in the Software without restriction, including      *
        !             8:  * without limitation the rights to use, copy, modify, merge, publish,      *
        !             9:  * distribute, distribute with modifications, sublicense, and/or sell       *
        !            10:  * copies of the Software, and to permit persons to whom the Software is    *
        !            11:  * furnished to do so, subject to the following conditions:                 *
        !            12:  *                                                                          *
        !            13:  * The above copyright notice and this permission notice shall be included  *
        !            14:  * in all copies or substantial portions of the Software.                   *
        !            15:  *                                                                          *
        !            16:  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
        !            17:  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
        !            18:  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
        !            19:  * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
        !            20:  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
        !            21:  * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
        !            22:  * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
        !            23:  *                                                                          *
        !            24:  * Except as contained in this notice, the name(s) of the above copyright   *
        !            25:  * holders shall not be used in advertising or otherwise to promote the     *
        !            26:  * sale, use or other dealings in this Software without prior written       *
        !            27:  * authorization.                                                           *
        !            28:  ****************************************************************************/
        !            29:
        !            30: /****************************************************************************
        !            31:  *  Author: Thomas E. Dickey                                                *
        !            32:  ****************************************************************************/
        !            33:
        !            34: #include <tparm_type.h>
        !            35:
        !            36: MODULE_ID("$Id: tparm_type.c,v 1.5 2023/04/08 15:57:01 tom Exp $")
        !            37:
        !            38: /*
        !            39:  * Lookup the type of call we should make to tparm().  This ignores the actual
        !            40:  * terminfo capability (bad, because it is not extensible), but makes this
        !            41:  * code portable to platforms where sizeof(int) != sizeof(char *).
        !            42:  */
        !            43: TParams
        !            44: tparm_type(const char *name)
        !            45: {
        !            46: #define TD(code, longname, ti, tc) \
        !            47:        {code, {longname} }, \
        !            48:        {code, {ti} }, \
        !            49:        {code, {tc} }
        !            50: #define XD(code, onlyname) TD(code, onlyname, onlyname, onlyname)
        !            51:     TParams result = Numbers;
        !            52:     /* *INDENT-OFF* */
        !            53:     static const struct {
        !            54:        TParams code;
        !            55:        const char name[12];
        !            56:     } table[] = {
        !            57:        TD(Num_Str,     "pkey_key",     "pfkey",        "pk"),
        !            58:        TD(Num_Str,     "pkey_local",   "pfloc",        "pl"),
        !            59:        TD(Num_Str,     "pkey_xmit",    "pfx",          "px"),
        !            60:        TD(Num_Str,     "plab_norm",    "pln",          "pn"),
        !            61:        TD(Num_Str_Str, "pkey_plab",    "pfxl",         "xl"),
        !            62: #if NCURSES_XNAMES
        !            63:        XD(Str,         "Cs"),
        !            64:        XD(Str_Str,     "Ms"),
        !            65: #endif
        !            66:     };
        !            67:     /* *INDENT-ON* */
        !            68:
        !            69:     unsigned n;
        !            70:     for (n = 0; n < SIZEOF(table); n++) {
        !            71:        if (!strcmp(name, table[n].name)) {
        !            72:            result = table[n].code;
        !            73:            break;
        !            74:        }
        !            75:     }
        !            76:     return result;
        !            77: }
        !            78:
        !            79: TParams
        !            80: guess_tparm_type(int nparam, char **p_is_s)
        !            81: {
        !            82:     TParams result = Other;
        !            83:     switch (nparam) {
        !            84:     case 0:
        !            85:     case 1:
        !            86:        if (!p_is_s[0])
        !            87:            result = Numbers;
        !            88:        if (p_is_s[0])
        !            89:            result = Str;
        !            90:        break;
        !            91:     case 2:
        !            92:        if (!p_is_s[0] && !p_is_s[1])
        !            93:            result = Numbers;
        !            94:        if (!p_is_s[0] && p_is_s[1])
        !            95:            result = Num_Str;
        !            96:        if (p_is_s[0] && p_is_s[1])
        !            97:            result = Str_Str;
        !            98:        break;
        !            99:     case 3:
        !           100:        if (!p_is_s[0] && !p_is_s[1] && !p_is_s[2])
        !           101:            result = Numbers;
        !           102:        if (!p_is_s[0] && p_is_s[1] && p_is_s[2])
        !           103:            result = Num_Str_Str;
        !           104:        break;
        !           105:     default:
        !           106:        break;
        !           107:     }
        !           108:     return result;
        !           109: }