|
|
1.1 root 1: /* pdm.c - preferred delivery method handling */
2:
3: #ifndef lint
4: static char *rcsid = "$Header: /f/osi/dsap/common/RCS/pdm.c,v 7.0 89/11/23 21:42:37 mrose Rel $";
5: #endif
6:
7: /*
8: * $Header: /f/osi/dsap/common/RCS/pdm.c,v 7.0 89/11/23 21:42:37 mrose Rel $
9: *
10: *
11: * $Log: pdm.c,v $
12: * Revision 7.0 89/11/23 21:42:37 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: SYNTAX:
29: pdm = <pdm_component> | <pdm_component> '$' <pdm>
30: pdm_component = 'any' | 'mhs' | 'physical' | 'telex' | 'teletex' |
31: 'g3fax' | 'g4fax' | 'ia5' | 'videotex' | 'telephone'
32:
33: EXAMPLE:
34: mhs $ physical $ telex $ telephone
35:
36:
37: */
38:
39: /* LINTLIBRARY */
40:
41: #include "quipu/util.h"
42: #include "quipu/attrvalue.h"
43: #include "cmd_srch.h"
44:
45: static CMD_TABLE pdm_table [] = {
46: "ANY", 0,
47: "MHS", 1,
48: "PHYSICAL", 2,
49: "TELEX", 3,
50: "TELETEX", 4,
51: "G3FAX", 5,
52: "G4FAX", 6,
53: "IA5", 7,
54: "VIDEOTEX", 8,
55: "TELEPHONE", 9,
56: "UNKNOWN", -1,
57: 0, -1
58: };
59:
60:
61: static pdmfree (pdm)
62: struct pref_deliv * pdm;
63: {
64: struct pref_deliv *next;
65:
66: for (; pdm != (struct pref_deliv *) NULL; pdm = next) {
67: next = pdm -> pd_next;
68: free ((char *) pdm);
69: }
70: }
71:
72: static pdmcmp (a,b)
73: struct pref_deliv * a, *b;
74: {
75: /* matching here is a bit dubious !!! */
76:
77: for (; (a != (struct pref_deliv *) NULL) && (b != (struct pref_deliv *) NULL) ;
78: a = a->pd_next, b=b->pd_next)
79: if ( a->deliv != b->deliv )
80: return (a->deliv > b->deliv ? 1 : -1);
81:
82: if ( a != b)
83: return ( a > b ? 1 : -1 );
84: else
85: return (0);
86:
87: }
88:
89: static struct pref_deliv * pdmcpy (a)
90: struct pref_deliv * a;
91: {
92: struct pref_deliv * b, *c, *result = (struct pref_deliv *) NULL;
93:
94: c = result; /* to keep lint happy */
95:
96: for (; a != (struct pref_deliv *) NULL; a = a->pd_next) {
97: b = (struct pref_deliv *) smalloc (sizeof (struct pref_deliv));
98: b -> deliv = a -> deliv;
99:
100: if (result == (struct pref_deliv *) NULL)
101: result = b;
102: else
103: c->pd_next = b;
104: c = b;
105: }
106:
107: b->pd_next = (struct pref_deliv *) NULL;
108: return (result);
109: }
110:
111: static struct pref_deliv* pdmparse (str)
112: char * str;
113: {
114: struct pref_deliv * result = (struct pref_deliv *) NULL;
115: struct pref_deliv * a, *b;
116: char * ptr;
117: char * mark = NULLCP;
118:
119: b = result; /* to keep lint happy */
120:
121: for (;;) {
122: mark = NULLCP;
123: a = (struct pref_deliv *) smalloc (sizeof (struct pref_deliv));
124:
125: if ( (ptr=index (str,'$')) != NULLCP) {
126: *ptr-- = 0;
127: if (isspace (*ptr)) {
128: *ptr = 0;
129: mark = ptr;
130: }
131: ptr++;
132: }
133:
134: if ((a -> deliv = cmd_srch (str,pdm_table)) == -1) {
135: parse_error ("Unknown method %s",str);
136: return ((struct pref_deliv *) NULL);
137: }
138:
139: if (result == (struct pref_deliv *) NULL)
140: result = a;
141: else
142: b->pd_next = a;
143: b = a;
144:
145: if (ptr != NULLCP) {
146: *ptr++ = '$';
147: if (mark != NULLCP)
148: *mark = ' ';
149: str = (SkipSpace(ptr));
150: ptr = str;
151: } else
152: break;
153: }
154: a -> pd_next = (struct pref_deliv *) NULL ;
155:
156: return (result);
157: }
158:
159: static pdmprint (ps,pdm,format)
160: PS ps;
161: struct pref_deliv * pdm;
162: int format;
163: {
164: char * prefix = NULLCP;
165:
166: for (; pdm != (struct pref_deliv *) NULL; pdm = pdm->pd_next) {
167: if (prefix != NULLCP)
168: ps_print (ps,prefix);
169:
170:
171: ps_print (ps,rcmd_srch (pdm->deliv,pdm_table));
172:
173: if (format == READOUT)
174: prefix = " or ";
175: else
176: prefix = " $ ";
177: }
178: }
179:
180:
181: static PE pdmenc (m)
182: struct pref_deliv * m;
183: {
184: PE ret_pe;
185:
186: (void) encode_SA_PreferredDeliveryMethod (&ret_pe,0,0,NULLCP,m);
187:
188: return (ret_pe);
189: }
190:
191: static struct pref_deliv * pdmdec (pe)
192: PE pe;
193: {
194: struct pref_deliv * m;
195:
196: if (decode_SA_PreferredDeliveryMethod (pe,1,NULLIP,NULLVP,&m) == NOTOK)
197: return ((struct pref_deliv *) NULL);
198: return (m);
199: }
200:
201: pref_deliv_syntax ()
202: {
203: (void) add_attribute_syntax ("DeliveryMethod",
204: (IFP) pdmenc, (IFP) pdmdec,
205: (IFP) pdmparse,pdmprint,
206: (IFP) pdmcpy, pdmcmp,
207: pdmfree, NULLCP,
208: NULLIFP, TRUE);
209:
210: }
211:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.