Annotation of 43BSDReno/contrib/isode-beta/psap/qb2pe.c, revision 1.1

1.1     ! root        1: /* qb2pe.c - create a variable-depth Inline CONStructor PElement */
        !             2: 
        !             3: #ifndef        lint
        !             4: static char *rcsid = "$Header: /f/osi/psap/RCS/qb2pe.c,v 7.1 90/01/11 23:47:00 mrose Exp $";
        !             5: #endif
        !             6: 
        !             7: /* 
        !             8:  * $Header: /f/osi/psap/RCS/qb2pe.c,v 7.1 90/01/11 23:47:00 mrose Exp $
        !             9:  *
        !            10:  *
        !            11:  * $Log:       qb2pe.c,v $
        !            12:  * Revision 7.1  90/01/11  23:47:00  mrose
        !            13:  * lint
        !            14:  * 
        !            15:  * Revision 7.0  89/11/23  22:13:28  mrose
        !            16:  * Release 6.0
        !            17:  * 
        !            18:  */
        !            19: 
        !            20: /*
        !            21:  *                               NOTICE
        !            22:  *
        !            23:  *    Acquisition, use, and distribution of this module and related
        !            24:  *    materials are subject to the restrictions of a license agreement.
        !            25:  *    Consult the Preface in the User's Manual for the full terms of
        !            26:  *    this agreement.
        !            27:  *
        !            28:  */
        !            29: 
        !            30: 
        !            31: /* LINTLIBRARY */
        !            32: 
        !            33: #include <stdio.h>
        !            34: #include "psap.h"
        !            35: #include "tailor.h"
        !            36: 
        !            37: /*  */
        !            38: 
        !            39: PE     qb2pe_aux ();
        !            40: 
        !            41: /*  */
        !            42: 
        !            43: PE     qb2pe (qb, len, depth, result)
        !            44: register struct qbuf *qb;
        !            45: int    len,
        !            46:        depth;
        !            47: int    *result;
        !            48: {
        !            49:     char   *sp;
        !            50:     register struct qbuf *qp;
        !            51:     PE     pe;
        !            52: 
        !            53:     *result = PS_ERR_NONE;
        !            54:     if (depth <= 0)
        !            55:        return NULLPE;
        !            56: 
        !            57:     if ((qp = qb -> qb_forw) != qb && qp -> qb_forw == qb)
        !            58:        sp = qp -> qb_data;
        !            59:     else {
        !            60:        qp = NULL;
        !            61:        
        !            62:        if ((sp = qb2str (qb)) == NULL) {
        !            63:            *result = PS_ERR_NMEM;
        !            64:            return NULLPE;
        !            65:        }
        !            66:     }
        !            67: 
        !            68:     if (pe = qb2pe_aux (sp, len, depth, result)) {
        !            69:        if (qp) {
        !            70:            pe -> pe_realbase = (char *) qp;
        !            71: 
        !            72:            remque (qp);
        !            73:        }
        !            74:        else {
        !            75:            pe -> pe_realbase = sp;
        !            76: 
        !            77:            QBFREE (qb);
        !            78:        }
        !            79:        pe -> pe_inline = 0;
        !            80:     }
        !            81:     else
        !            82:        if (qp == NULL)
        !            83:            free (sp);
        !            84: 
        !            85: #ifdef DEBUG
        !            86:     if (pe && (psap_log -> ll_events & LLOG_PDUS))
        !            87:        pe2text (psap_log, pe, 1, len);
        !            88: #endif
        !            89: 
        !            90:     return pe;
        !            91: }
        !            92: 
        !            93: /*  */
        !            94: 
        !            95: static PE  qb2pe_aux (s, len, depth, result)
        !            96: register char  *s;
        !            97: register int   len;
        !            98: int    depth;
        !            99: int    *result;
        !           100: {
        !           101:     int            i;
        !           102:     register PElementData data;
        !           103:     register PE            pe,
        !           104:                    p,
        !           105:                    q;
        !           106:     PE     *r,
        !           107:            *rp;
        !           108: 
        !           109:     depth--;
        !           110: 
        !           111:     if ((pe = str2pe (s, len, &i, result)) == NULLPE)
        !           112:        return NULLPE;
        !           113: 
        !           114:     if (pe -> pe_form == PE_FORM_ICONS) {
        !           115:        pe -> pe_form = PE_FORM_CONS;
        !           116:        pe -> pe_prim = NULLPED, pe -> pe_inline = 0;
        !           117:        pe -> pe_len -= pe -> pe_ilen;
        !           118: 
        !           119:        p = NULLPE, r = &pe -> pe_cons;
        !           120:        for (s += pe -> pe_ilen, len -= pe -> pe_ilen;
        !           121:                 len > 0;
        !           122:                 s += i, len -= i) {
        !           123:            if ((p = str2pe (s, len, &i, result)) == NULLPE)
        !           124:                goto out;
        !           125: 
        !           126:            if (p -> pe_form == PE_FORM_ICONS) {
        !           127:                if (depth > 0) {
        !           128:                    if ((q = qb2pe_aux ((char *) p -> pe_prim, i, depth,
        !           129:                                        result)) == NULLPE)
        !           130:                        goto out;
        !           131:                    pe_free (p);
        !           132:                    p = q;
        !           133:                }
        !           134:                else {
        !           135:                    if ((data = PEDalloc (i)) == NULL) {
        !           136:                        *result = PS_ERR_NMEM;
        !           137:                        goto out;
        !           138:                    }
        !           139:                    PEDcpy (p -> pe_prim, data, i);
        !           140:                    p -> pe_prim = data, p -> pe_inline = 0;
        !           141:                }
        !           142:            }
        !           143: 
        !           144:            *r = p, rp = r, r = &p -> pe_next;
        !           145:        }
        !           146: 
        !           147:        if (p && p -> pe_class == PE_CLASS_UNIV && p -> pe_id == PE_UNIV_EOC) {
        !           148:            pe_free (p);
        !           149:            *rp = NULLPE;
        !           150:        }
        !           151:     }
        !           152:     
        !           153:     return pe;
        !           154: 
        !           155: out: ;
        !           156:     pe_free (pe);
        !           157:     return NULLPE;
        !           158: }

unix.superglobalmegacorp.com

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