|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T q
Length: 2860 (0xb2c) Types: TextFile Names: »qb2pe.c«
└─⟦2d1937cfd⟧ Bits:30007241 EUUGD22: P.P 5.0 └─⟦35176feda⟧ »EurOpenD22/isode/isode-6.tar.Z« └─⟦de7628f85⟧ └─⟦this⟧ »isode-6.0/psap/qb2pe.c«
/* qb2pe.c - create a variable-depth Inline CONStructor PElement */ #ifndef lint static char *rcsid = "$Header: /f/osi/psap/RCS/qb2pe.c,v 7.1 90/01/11 23:47:00 mrose Exp $"; #endif /* * $Header: /f/osi/psap/RCS/qb2pe.c,v 7.1 90/01/11 23:47:00 mrose Exp $ * * * $Log: qb2pe.c,v $ * Revision 7.1 90/01/11 23:47:00 mrose * lint * * Revision 7.0 89/11/23 22:13:28 mrose * Release 6.0 * */ /* * NOTICE * * Acquisition, use, and distribution of this module and related * materials are subject to the restrictions of a license agreement. * Consult the Preface in the User's Manual for the full terms of * this agreement. * */ /* LINTLIBRARY */ #include <stdio.h> #include "psap.h" #include "tailor.h" /* \f */ PE qb2pe_aux (); /* \f */ PE qb2pe (qb, len, depth, result) register struct qbuf *qb; int len, depth; int *result; { char *sp; register struct qbuf *qp; PE pe; *result = PS_ERR_NONE; if (depth <= 0) return NULLPE; if ((qp = qb -> qb_forw) != qb && qp -> qb_forw == qb) sp = qp -> qb_data; else { qp = NULL; if ((sp = qb2str (qb)) == NULL) { *result = PS_ERR_NMEM; return NULLPE; } } if (pe = qb2pe_aux (sp, len, depth, result)) { if (qp) { pe -> pe_realbase = (char *) qp; remque (qp); } else { pe -> pe_realbase = sp; QBFREE (qb); } pe -> pe_inline = 0; } else if (qp == NULL) free (sp); #ifdef DEBUG if (pe && (psap_log -> ll_events & LLOG_PDUS)) pe2text (psap_log, pe, 1, len); #endif return pe; } /* \f */ static PE qb2pe_aux (s, len, depth, result) register char *s; register int len; int depth; int *result; { int i; register PElementData data; register PE pe, p, q; PE *r, *rp; depth--; if ((pe = str2pe (s, len, &i, result)) == NULLPE) return NULLPE; if (pe -> pe_form == PE_FORM_ICONS) { pe -> pe_form = PE_FORM_CONS; pe -> pe_prim = NULLPED, pe -> pe_inline = 0; pe -> pe_len -= pe -> pe_ilen; p = NULLPE, r = &pe -> pe_cons; for (s += pe -> pe_ilen, len -= pe -> pe_ilen; len > 0; s += i, len -= i) { if ((p = str2pe (s, len, &i, result)) == NULLPE) goto out; if (p -> pe_form == PE_FORM_ICONS) { if (depth > 0) { if ((q = qb2pe_aux ((char *) p -> pe_prim, i, depth, result)) == NULLPE) goto out; pe_free (p); p = q; } else { if ((data = PEDalloc (i)) == NULL) { *result = PS_ERR_NMEM; goto out; } PEDcpy (p -> pe_prim, data, i); p -> pe_prim = data, p -> pe_inline = 0; } } *r = p, rp = r, r = &p -> pe_next; } if (p && p -> pe_class == PE_CLASS_UNIV && p -> pe_id == PE_UNIV_EOC) { pe_free (p); *rp = NULLPE; } } return pe; out: ; pe_free (pe); return NULLPE; }