Annotation of coherent/g/usr/lib/ncurses/lib_tget.c, revision 1.1

1.1     ! root        1: #include <stdio.h>
        !             2: #include <ctype.h>
        !             3: #include <string.h>
        !             4: 
        !             5: #define        bool    char
        !             6: #define        TRUE    1
        !             7: #define        FALSE   0
        !             8: 
        !             9: static char    buffer[1024];   /* 1024 = pulled from a hat */
        !            10: 
        !            11: /*
        !            12:  * scan:
        !            13:  *     scan for character in string, return position of character.
        !            14:  *     similar to index/strchr, except that if char not found, returns
        !            15:  *     pointer to null at end of string, instead of a null pointer.
        !            16:  */
        !            17: 
        !            18: static char *
        !            19: scan (s, c)
        !            20: register char  *s;
        !            21: register char  c;
        !            22: {
        !            23:     while ((*s) && (*s != c))
        !            24:        s++;
        !            25:     return (s);
        !            26: }
        !            27: 
        !            28: 
        !            29: /* findcap:
        !            30:  *     returns pointer to just after capname (trailing ':' for flags,
        !            31:  *     '#' for nums, '=' for strs, '@' for disabled stuff) or to null
        !            32:  *      after termcap if not found.
        !            33:  */
        !            34: 
        !            35: static char *
        !            36: findcap (capname)
        !            37: char   *capname;
        !            38: {
        !            39:     register char      *bptr = buffer;
        !            40:     register bool      found = FALSE;
        !            41:     char               cap[3];
        !            42: 
        !            43:     cap[2] = '\0';
        !            44:     while ((!found) && (*bptr)) {
        !            45:        bptr = scan (bptr, ':');
        !            46:        if (*bptr) {
        !            47:            cap[0] = *(bptr + 1);
        !            48:            cap[1] = *(bptr + 2);
        !            49:            if (strcmp (cap,capname) == 0) {
        !            50:                found = TRUE;
        !            51:                bptr += 3;      /* skip colon and capname */
        !            52:            }
        !            53:            else
        !            54:                bptr++;         /* skip colon */
        !            55:        }
        !            56:     }
        !            57:     return (bptr);
        !            58: }
        !            59: 
        !            60: 
        !            61: /*
        !            62:  * tgetname:
        !            63:  *     store name of termcap entry in name
        !            64:  */
        !            65: 
        !            66: tgetname (name)
        !            67: char   *name;
        !            68: {
        !            69:     char       *bptr;
        !            70: 
        !            71:     bptr = buffer;
        !            72: 
        !            73:     while ((*bptr) && (*bptr != ':'))
        !            74:        *(name++) = *(bptr++);
        !            75:     *(name) = '\0';
        !            76: }
        !            77: 
        !            78: 
        !            79: /*
        !            80:  * tgetflag:
        !            81:  *     return 1 if capname present, 0 otherwise, -1 if '@'ed.
        !            82:  */
        !            83: 
        !            84: int
        !            85: tgetflag (capname)
        !            86: char   *capname;
        !            87: {
        !            88:     char       *c;
        !            89: 
        !            90:     c = findcap (capname);
        !            91:     if (*c == '\0')
        !            92:        return (0);
        !            93:     else if (*c == '@')
        !            94:        return (-1);
        !            95:     else
        !            96:        return (1);
        !            97: }
        !            98: 
        !            99: 
        !           100: /*
        !           101:  * tgetnum:
        !           102:  *     return value of capname, -1 if not present, -2 if '@'ed.
        !           103:  */
        !           104: 
        !           105: int
        !           106: tgetnum (capname)
        !           107: char   *capname;
        !           108: {
        !           109:     char       *c;
        !           110:     int                val;
        !           111: 
        !           112:     c = findcap (capname);
        !           113:     if (*c == '@')
        !           114:        return (-2);
        !           115:     else if (*c != '\0') {
        !           116:        c++;    /* skip '#' */
        !           117:        val = 0;
        !           118:        while (isdigit (*c)) {
        !           119:            val = (val * 10) + (*c - '0');
        !           120:            c++;
        !           121:        }
        !           122:        return (val);
        !           123:     }
        !           124:     else
        !           125:        return (-1);
        !           126: }
        !           127: 
        !           128: 
        !           129: /*
        !           130:  * tgetstr:
        !           131:  *     store binary value of capname into value, store null if
        !           132:  *     not present, store "@" if '@'ed.
        !           133:  */
        !           134: 
        !           135: tgetstr (capname, value)
        !           136: char           *capname;
        !           137: register char  *value;
        !           138: {
        !           139:     register char      *c;
        !           140: 
        !           141:     c = findcap (capname);
        !           142:     if (*c == '@')
        !           143:        strcpy (value, "@");
        !           144:     else if (*c != '\0') {
        !           145:        c++;    /* skip '=' */
        !           146:        while ((*c) && (*c != ':')) {
        !           147:            if (*c == '^') {
        !           148:                c++;
        !           149:                if (islower (*c)) 
        !           150:                    *(value++) = toupper(*(c++)) - '@'; /* ascii dependent */
        !           151:                else
        !           152:                    *(value++) = *(c++) - '@';  /* ascii dependent */
        !           153:            }
        !           154:            else if (*c == '\\') {
        !           155:                c++;
        !           156:                switch (*c) {
        !           157:                    case 'E':
        !           158:                        *(value++) = '\033';
        !           159:                        c++;
        !           160:                        break;
        !           161:                    case 'n':
        !           162:                        *(value++) = '\n';
        !           163:                        c++;
        !           164:                        break;
        !           165:                    case 'r':
        !           166:                        *(value++) = '\r';
        !           167:                        c++;
        !           168:                        break;
        !           169:                    case 't':
        !           170:                        *(value++) = '\t';
        !           171:                        c++;
        !           172:                        break;
        !           173:                    case 'b':
        !           174:                        *(value++) = '\b';
        !           175:                        c++;
        !           176:                        break;
        !           177:                    case 'f':
        !           178:                        *(value++) = '\f';
        !           179:                        c++;
        !           180:                        break;
        !           181:                    default:
        !           182:                        if (isdigit (*c)) {     /* octal value */
        !           183:                            *value = '\0';
        !           184:                            while (isdigit (*c)) {
        !           185:                                *value = ((*value) * 8) + ((*c) - '0');
        !           186:                                c++;
        !           187:                            }
        !           188:                            value++;
        !           189:                        }
        !           190:                        else
        !           191:                            *(value++) = *(c++);
        !           192:                        break;
        !           193:                }
        !           194:            }
        !           195:            else
        !           196:                *(value++) = *(c++);
        !           197:        }
        !           198:        *value = '\0';
        !           199:     }
        !           200:     else
        !           201:        *value = '\0';
        !           202: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.