|
|
1.1 root 1: /* prim2qb.c - presentation element to qbuf */
2:
3: #ifndef lint
4: static char *rcsid = "$Header: /f/osi/psap/RCS/prim2qb.c,v 7.0 89/11/23 22:13:13 mrose Rel $";
5: #endif
6:
7: /*
8: * $Header: /f/osi/psap/RCS/prim2qb.c,v 7.0 89/11/23 22:13:13 mrose Rel $
9: *
10: *
11: * $Log: prim2qb.c,v $
12: * Revision 7.0 89/11/23 22:13:13 mrose
13: * Release 6.0
14: *
15: */
16:
17: /*
18: * NOTICE
19: *
20: * Acquisition, use, and distribution of this module and related
21: * materials are subject to the restrictions of a license agreement.
22: * Consult the Preface in the User's Manual for the full terms of
23: * this agreement.
24: *
25: */
26:
27:
28: /* LINTLIBRARY */
29:
30: #include <stdio.h>
31: #include "psap.h"
32:
33: /* */
34:
35: struct qbuf *prim2qb (pe)
36: register PE pe;
37: {
38: register struct qbuf *qb,
39: *qp;
40: register PE p;
41: register PElementClass class;
42: register PElementID id;
43:
44: if ((qb = (struct qbuf *) malloc (sizeof *qb)) == NULL)
45: return pe_seterr (pe, PE_ERR_NMEM, (struct qbuf *) NULL);
46: qb -> qb_forw = qb -> qb_back = qb;
47: qb -> qb_data = NULL, qb -> qb_len = 0;
48:
49: switch (pe -> pe_form) {
50: case PE_FORM_PRIM:
51: if ((qp = str2qb ((char *) pe -> pe_prim, (int) pe -> pe_len, 0))
52: == NULL) {
53: pe -> pe_errno = PE_ERR_NMEM;
54: goto out;
55: }
56: qb -> qb_len = qp -> qb_len;
57: insque (qp, qb);
58: break;
59:
60: case PE_FORM_CONS:
61: if ((p = pe -> pe_cons) == NULLPE)
62: break;
63: class = p -> pe_class, id = p -> pe_id;
64: for (p = pe -> pe_cons; p; p = p -> pe_next) {
65: register struct qbuf *qpp,
66: *qbp;
67:
68: if ((p -> pe_class != class || p -> pe_id != id)
69: && (p -> pe_class != PE_CLASS_UNIV
70: || p -> pe_id != PE_PRIM_OCTS)) {
71: pe -> pe_errno = PE_ERR_TYPE;
72: goto out;
73: }
74: if ((qp = prim2qb (p)) == NULL) {
75: pe -> pe_errno = p -> pe_errno;
76: goto out;
77: }
78:
79: for (qpp = qp -> qb_forw; qpp != qp; qpp = qbp) {
80: qbp = qpp -> qb_forw;
81:
82: remque (qpp);
83: insque (qpp, qb -> qb_back);
84:
85: qb -> qb_len += qpp -> qb_len;
86: }
87: free ((char *) qp);
88: }
89: break;
90: }
91:
92: return qb;
93:
94: out: ;
95: qb_free (qb);
96:
97: return NULL;
98: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.