|
|
1.1 root 1: /* teletex.c - Teletex attribute */
2:
3: #ifndef lint
4: static char *rcsid = "$Header: /f/osi/dsap/common/RCS/teletex.c,v 7.0 89/11/23 21:44:35 mrose Rel $";
5: #endif
6:
7: /*
8: * $Header: /f/osi/dsap/common/RCS/teletex.c,v 7.0 89/11/23 21:44:35 mrose Rel $
9: *
10: *
11: * $Log: teletex.c,v $
12: * Revision 7.0 89/11/23 21:44:35 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: /*
29: SYNTAX
30: teletex ::= <printablestring> '$' <printablestring> '$' <printablestring>...
31:
32: REPRESENTING
33: terminal $ graphic $ control $ page $ misc $ private
34: */
35:
36: /* LINTLIBRARY */
37:
38: #include "quipu/util.h"
39: #include "quipu/entry.h"
40:
41: #define nfree(x) if (x != NULLCP) free (x)
42:
43: static teletex_free (ptr)
44: struct teletex * ptr;
45: {
46: nfree (ptr->terminal);
47: nfree (ptr->graphic);
48: nfree (ptr->control);
49: nfree (ptr->page);
50: nfree (ptr->misc);
51: nfree (ptr->t_private);
52:
53: free ((char *) ptr);
54: }
55:
56: static char * xstrdup (a)
57: char * a;
58: {
59: if (( a == NULLCP) || (*a == NULL))
60: return (NULLCP);
61: else
62: return (strdup (a));
63: }
64:
65: static struct teletex * teletex_cpy (a)
66: struct teletex * a;
67: {
68: struct teletex * result;
69:
70: result = (struct teletex *) smalloc (sizeof (struct teletex));
71: result->terminal = strdup (a->terminal);
72: result->graphic = xstrdup (a->graphic);
73: result->control = xstrdup (a->control);
74: result->page = xstrdup (a->page);
75: result->misc = xstrdup (a->misc);
76: result->t_private = xstrdup (a->t_private);
77: return (result);
78: }
79:
80: static teletex_cmp (a,b)
81: struct teletex * a;
82: struct teletex * b;
83: {
84: int res;
85:
86: if (a == (struct teletex *) NULL)
87: if (b == (struct teletex *) NULL)
88: return (0);
89: else
90: return (-1);
91:
92: if ( (res = lexequ(a->terminal,b->terminal)) != 0)
93: return (res);
94: if ( (res = lexequ(a->graphic,b->graphic)) != 0)
95: return (res);
96: if ( (res = lexequ(a->control,b->control)) != 0)
97: return (res);
98: if ( (res = lexequ(a->page,b->page)) != 0)
99: return (res);
100: if ( (res = lexequ(a->misc,b->misc)) != 0)
101: return (res);
102: if ( (res = lexequ(a->t_private,b->t_private)) != 0)
103: return (res);
104: return (0);
105: }
106:
107:
108: static teletex_print (ps,teletex,format)
109: register PS ps;
110: struct teletex* teletex;
111: int format;
112: {
113: if (format == READOUT)
114: ps_print (ps,"terminal: ");
115: ps_print (ps,teletex->terminal);
116:
117: if (format != READOUT)
118: ps_print (ps," $ ");
119: if (teletex->graphic != NULLCP) {
120: if (format == READOUT)
121: ps_print (ps,", graphic: ");
122: ps_print (ps,teletex->graphic);
123: }
124:
125: if (format != READOUT)
126: ps_print (ps," $ ");
127: if (teletex->control != NULLCP) {
128: if (format == READOUT)
129: ps_print (ps,", control: ");
130: ps_print (ps,teletex->control);
131: }
132:
133: if (format != READOUT)
134: ps_print (ps," $ ");
135: if (teletex->page != NULLCP) {
136: if (format == READOUT)
137: ps_print (ps,", page: ");
138: ps_print (ps,teletex->page);
139: }
140:
141: if (format != READOUT)
142: ps_print (ps," $ ");
143: if (teletex->misc != NULLCP) {
144: if (format == READOUT)
145: ps_print (ps,", misc: ");
146: ps_print (ps,teletex->misc);
147: }
148:
149: if (format != READOUT)
150: ps_print (ps," $ ");
151: if (teletex->t_private != NULLCP) {
152: if (format == READOUT)
153: ps_print (ps,", private: ");
154: ps_print (ps,teletex->t_private);
155: }
156:
157: }
158:
159:
160: static struct teletex* str2teletex (str)
161: char * str;
162: {
163: struct teletex * result;
164: char * ptr;
165: char * mark = NULLCP;
166: char * prtparse ();
167:
168: if ( (ptr=index (str,'$')) == NULLCP) {
169: parse_error ("seperator missing in teletex '%s'",str);
170: return ((struct teletex *) NULL);
171: }
172:
173: result = (struct teletex *) smalloc (sizeof (struct teletex));
174: *ptr--= 0;
175: if (isspace (*ptr)) {
176: *ptr = 0;
177: mark = ptr;
178: }
179: ptr++;
180: if ((result->terminal = prtparse(str)) == NULLCP)
181: return ((struct teletex *) NULL);
182:
183: if (strlen (result->terminal) > UB_TELETEX_TERMINAL_ID) {
184: parse_error ("teletex string too long",NULLCP);
185: return ((struct teletex *) NULL);
186: }
187:
188: *ptr++ = '$';
189:
190: if (mark != NULLCP)
191: *mark = ' ';
192:
193: str = SkipSpace(ptr);
194: if ( (ptr=index (str,'$')) == NULLCP) {
195: parse_error ("2nd seperator missing in teletex '%s'",str);
196: return ((struct teletex *) NULL);
197: }
198: *ptr--= 0;
199: if (isspace (*ptr)) {
200: *ptr = 0;
201: mark = ptr;
202: } else
203: mark = NULLCP;
204: ptr++;
205: result->graphic = xstrdup(str);
206: *ptr++ = '$';
207: if (mark != NULLCP)
208: *mark = ' ';
209:
210:
211: str = SkipSpace(ptr);
212: if ( (ptr=index (str,'$')) == NULLCP) {
213: parse_error ("3rd seperator missing in teletex '%s'",str);
214: return ((struct teletex *) NULL);
215: }
216: *ptr--= 0;
217: if (isspace (*ptr)) {
218: *ptr = 0;
219: mark = ptr;
220: } else
221: mark = NULLCP;
222: ptr++;
223: result->control = xstrdup(str);
224: *ptr++ = '$';
225: if (mark != NULLCP)
226: *mark = ' ';
227:
228:
229: str = SkipSpace(ptr);
230: if ( (ptr=index (str,'$')) == NULLCP) {
231: parse_error ("4th seperator missing in teletex '%s'",str);
232: return ((struct teletex *) NULL);
233: }
234: *ptr--= 0;
235: if (isspace (*ptr)) {
236: *ptr = 0;
237: mark = ptr;
238: } else
239: mark = NULLCP;
240: ptr++;
241: result->page = xstrdup(str);
242: *ptr++ = '$';
243: if (mark != NULLCP)
244: *mark = ' ';
245:
246:
247: str = SkipSpace(ptr);
248: if ( (ptr=index (str,'$')) == NULLCP) {
249: parse_error ("5th seperator missing in teletex '%s'",str);
250: return ((struct teletex *) NULL);
251: }
252: *ptr--= 0;
253: if (isspace (*ptr)) {
254: *ptr = 0;
255: mark = ptr;
256: } else
257: mark = NULLCP;
258: ptr++;
259: result->misc = xstrdup(str);
260: *ptr++ = '$';
261: if (mark != NULLCP)
262: *mark = ' ';
263:
264: result->t_private = xstrdup(SkipSpace(ptr));
265:
266: return (result);
267: }
268:
269: static PE teletex_enc (m)
270: struct teletex * m;
271: {
272: PE ret_pe;
273:
274: (void) encode_SA_TeletexTerminalIdentifier (&ret_pe,0,0,NULLCP,m);
275:
276: return (ret_pe);
277: }
278:
279: static struct teletex * teletex_dec (pe)
280: PE pe;
281: {
282: struct teletex * m;
283:
284: m = (struct teletex *) smalloc (sizeof (struct teletex));
285: bzero ((char *)m,sizeof(struct teletex));
286:
287: if (decode_SA_TeletexTerminalIdentifier (pe,1,NULLIP,NULLVP,m) == NOTOK) {
288: free ((char *)m);
289: return ((struct teletex *) NULL);
290: }
291:
292: return (m);
293: }
294:
295: teletex_syntax ()
296: {
297: (void) add_attribute_syntax ("TeletexTerminalIdentifier",
298: (IFP) teletex_enc, (IFP) teletex_dec,
299: (IFP) str2teletex, teletex_print,
300: (IFP) teletex_cpy, teletex_cmp,
301: teletex_free, NULLCP,
302: NULLIFP, TRUE);
303: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.