Annotation of coherent/a/usr/bob/uusrc/modemcap/mgetstr.c, revision 1.1

1.1     ! root        1: extern char    *__modemcap;
        !             2: 
        !             3: char   *mgetstr (id, area)
        !             4: register char  *id;
        !             5: register char  **area;
        !             6: {
        !             7:        register char   *cp = __modemcap;
        !             8:        register char   *str = *area;           /* start of current string       */
        !             9: 
        !            10:        if (__modemcap == (char *) 0)           /* has mgetent() been called? ... */
        !            11:                return ((char *) 0);                    /* ... no, can't find string */
        !            12: 
        !            13:        while (*cp != ':' && *cp != 0)          /* find first entry in cap       */
        !            14:                cp++;
        !            15: 
        !            16:        if (*cp == 0)                           /* empty entry???                */
        !            17:                return ((char *) 0);                    /* ... yes, bad modemcap entry   */
        !            18:        else
        !            19:                cp++;                           /* point to first character in next */
        !            20: 
        !            21:        while (*cp != 0) {                      /* until entry found or end of entry */
        !            22:                if (cp[0] == id[0] && cp[1] == id[1]) { /* found entry!!!        */
        !            23:                        if (cp[2] != '=')       /* is it a string value???       */
        !            24:                                return ((char *) 0);    /* no, something else            */
        !            25:                        else
        !            26:                            break;              /* yes, entry was found          */
        !            27:                } 
        !            28:                else {                  /* not entry, skip this entire entry */
        !            29:                        while (*cp != ':' && *cp != 0)
        !            30:                                cp++;           /* search for end of current entry */
        !            31: 
        !            32:                        if (*cp != 0)
        !            33:                                cp++;           /* skip terminating character    */
        !            34:                }
        !            35:        }
        !            36:        if (*cp == 0)                           /* end of modem cap entry        */
        !            37:                return ((char *) 0);
        !            38: 
        !            39:        cp += 3;                                /* point to actual string        */
        !            40:        while (*cp != ':' && *cp != 0) {        /* for every character in string ... */
        !            41:                if (*cp == '\\') {              /* translate escaped character   */
        !            42:                        cp++;
        !            43:                        switch (*cp) {
        !            44:                        case 'n':       /* newline               */
        !            45:                                **area = '\n';
        !            46:                                (*area)++;
        !            47:                                cp++;
        !            48:                                break;
        !            49:                        case 'r':       /* carriage return       */
        !            50:                                **area = '\r';
        !            51:                                (*area)++;
        !            52:                                cp++;
        !            53:                                break;
        !            54:                        case 'b':       /* backspace             */
        !            55:                                **area = '\b';
        !            56:                                (*area)++;
        !            57:                                cp++;
        !            58:                                break;
        !            59:                        case 'f':       /* form feed             */
        !            60:                                **area = '\f';
        !            61:                                (*area)++;
        !            62:                                cp++;
        !            63:                                break;
        !            64:                        case 't':       /* tab                   */
        !            65:                                **area = '\t';
        !            66:                                (*area)++;
        !            67:                                cp++;
        !            68:                                break;
        !            69:                        case 'E':       /* Escape character      */
        !            70:                                **area = 033;
        !            71:                                (*area)++;
        !            72:                                cp++;
        !            73:                                break;
        !            74:                        case '0':
        !            75:                        case '1':
        !            76:                        case '2':
        !            77:                        case '3':
        !            78:                        case '4':
        !            79:                        case '5':
        !            80:                        case '6':
        !            81:                        case '7':
        !            82:                                **area = ((cp[0] - '0') << 6) +
        !            83:                                    ((cp[1] - '0') << 3) +
        !            84:                                    (cp[2] - '0');
        !            85:                                (*area)++;
        !            86:                                cp += 3;
        !            87:                                break;
        !            88:                        default:
        !            89:                                **area = *cp++;
        !            90:                                (*area)++;
        !            91:                                break;
        !            92:                        }
        !            93:                } 
        !            94:                else if (*cp == '^') {  /* some control character        */
        !            95:                        cp++;
        !            96:                        if (*cp >= '@' && *cp <= '_') {
        !            97:                                **area = *cp - '@';
        !            98:                                (*area)++;
        !            99:                        }
        !           100:                        cp++;
        !           101:                } 
        !           102:                else {                  /* some normal character         */
        !           103:                        **area = *cp++;         /* put character in area         */
        !           104:                        (*area)++;
        !           105:                }
        !           106:        }
        !           107:        *((*area)++) = 0;                       /* null terminate area and string */
        !           108:        return (str);                           /* return pointer to start of string */
        !           109: }

unix.superglobalmegacorp.com

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