|
|
1.1 root 1: /* telex.c - Telex attribute */
2:
3: #ifndef lint
4: static char *rcsid = "$Header: /f/osi/dsap/common/RCS/telex.c,v 7.0 89/11/23 21:44:37 mrose Rel $";
5: #endif
6:
7: /*
8: * $Header: /f/osi/dsap/common/RCS/telex.c,v 7.0 89/11/23 21:44:37 mrose Rel $
9: *
10: *
11: * $Log: telex.c,v $
12: * Revision 7.0 89/11/23 21:44: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: /*
29: SYNTAX
30: telex ::= <printablestring> '$' <printablestring> '$' <printablestring>
31:
32: REPRESENTING
33: number $ country $ answerback
34: */
35:
36: /* LINTLIBRARY */
37:
38: #include "quipu/util.h"
39: #include "quipu/entry.h"
40:
41: static telex_free (ptr)
42: struct telex * ptr;
43: {
44: free (ptr->telexnumber);
45: free (ptr->countrycode);
46: free (ptr->answerback);
47:
48: free ((char *) ptr);
49: }
50:
51:
52: static struct telex * telex_cpy (a)
53: struct telex * a;
54: {
55: struct telex * result;
56:
57: result = (struct telex *) smalloc (sizeof (struct telex));
58: result->telexnumber = strdup (a->telexnumber);
59: result->countrycode = strdup (a->countrycode);
60: result->answerback = strdup (a->answerback);
61: return (result);
62: }
63:
64: static telex_cmp (a,b)
65: struct telex * a;
66: struct telex * b;
67: {
68: int res;
69:
70: if (a == (struct telex *) NULL)
71: if (b == (struct telex *) NULL)
72: return (0);
73: else
74: return (-1);
75:
76: if ( (res = lexequ(a->telexnumber,b->telexnumber)) != 0)
77: return (res);
78: if ( (res = lexequ(a->countrycode,b->countrycode)) != 0)
79: return (res);
80: if ( (res = lexequ(a->answerback,b->answerback)) != 0)
81: return (res);
82: return (0);
83: }
84:
85:
86: static telex_print (ps,telex,format)
87: register PS ps;
88: struct telex* telex;
89: int format;
90: {
91: if (format == READOUT)
92: ps_printf (ps,"number: %s, country: %s, answerback: %s",telex->telexnumber, telex->countrycode, telex->answerback);
93: else
94: ps_printf (ps,"%s $ %s $ %s",telex->telexnumber, telex->countrycode, telex->answerback);
95: }
96:
97:
98: static struct telex* str2telex (str)
99: char * str;
100: {
101: struct telex * result;
102: char * ptr;
103: char * mark = NULLCP;
104: char * prtparse ();
105:
106: if ( (ptr=index (str,'$')) == NULLCP) {
107: parse_error ("seperator missing in telex '%s'",str);
108: return ((struct telex *) NULL);
109: }
110:
111: result = (struct telex *) smalloc (sizeof (struct telex));
112: *ptr--= 0;
113: if (isspace (*ptr)) {
114: *ptr = 0;
115: mark = ptr;
116: }
117: ptr++;
118: if ((result->telexnumber = prtparse(str)) == NULLCP)
119: return ((struct telex *) NULL);
120: if (strlen (result->telexnumber) > UB_TELEX_NUMBER) {
121: parse_error ("telexnumber too big",NULLCP);
122: return ((struct telex *) NULL);
123: }
124:
125: *ptr++ = '$';
126:
127: if (mark != NULLCP)
128: *mark = ' ';
129:
130: str = SkipSpace(ptr);
131:
132: if ( (ptr=index (str,'$')) == NULLCP) {
133: parse_error ("2nd seperator missing in telex '%s'",str);
134: return ((struct telex *) NULL);
135: }
136:
137: *ptr--= 0;
138: if (isspace (*ptr)) {
139: *ptr = 0;
140: mark = ptr;
141: } else
142: mark = NULLCP;
143:
144: ptr++;
145:
146: if ((result->countrycode = prtparse(str)) == NULLCP)
147: return ((struct telex *) NULL);
148: if (strlen (result->countrycode) > UB_COUNTRY_CODE) {
149: parse_error ("countrycode too big",NULLCP);
150: return ((struct telex *) NULL);
151: }
152:
153: *ptr++ = '$';
154:
155: if (mark != NULLCP)
156: *mark = ' ';
157:
158: if ((result->answerback = prtparse(SkipSpace(ptr))) == NULLCP)
159: return ((struct telex *) NULL);
160: if (strlen (result->answerback) > UB_ANSWERBACK) {
161: parse_error ("answerback too big",NULLCP);
162: return ((struct telex *) NULL);
163: }
164:
165: return (result);
166: }
167:
168: static PE telex_enc (m)
169: struct telex * m;
170: {
171: PE ret_pe;
172:
173: (void) encode_SA_TelexNumber (&ret_pe,0,0,NULLCP,m);
174:
175: return (ret_pe);
176: }
177:
178: static struct telex * telex_dec (pe)
179: PE pe;
180: {
181: struct telex * m;
182:
183: m = (struct telex *) smalloc (sizeof (struct telex));
184:
185: if (decode_SA_TelexNumber (pe,1,NULLIP,NULLVP,m) == NOTOK) {
186: free ((char *)m);
187: return ((struct telex *) NULL);
188: }
189: return (m);
190: }
191:
192: telex_syntax ()
193: {
194: (void) add_attribute_syntax ("TelexNumber",
195: (IFP) telex_enc, (IFP) telex_dec,
196: (IFP) str2telex, telex_print,
197: (IFP) telex_cpy, telex_cmp,
198: telex_free, NULLCP,
199: NULLIFP, TRUE);
200: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.