|
|
1.1 root 1: \File{ryinitiator\-c.c},{11:10},{Oct 21 1988}
2: \L{\LB{\C{}\/* ryinitiator.c \- generic interactive initiator *\/\CE{}}}
3: \L{\LB{}}
4: \L{\LB{\K{\#include} \<stdio.h\>}}
5: \L{\LB{\K{\#include} \<varargs.h\>}}
6: \L{\LB{\K{\#include} \S{}\"ryinitiator.h\"\SE{}}}
7: \L{\LB{}}
8: \L{\LB{\C{}\/* DATA *\/\CE{}}}
9: \L{\LB{}}
10: \L{\LB{\K{static} \K{char} *myname = \S{}\"ryinitiator\"\SE{};}}
11: \L{\LB{}}
12: \L{\LB{}}
13: \L{\LB{\K{extern} \K{char} *isodeversion;}}
14: \L{\LB{}}
15: \L{\LB{\C{}\/* INITIATOR *\/\CE{}}}
16: \L{\LB{}}
17: \L{\LB{\Proc{ryinitiator}ryinitiator (argc, argv, myservice, mycontext, mypci, ops, dispatches, quit)}}
18: \L{\LB{\K{int}}\Tab{8}{argc;}}
19: \L{\LB{\K{char} **argv,}}
20: \L{\LB{ *myservice,}}
21: \L{\LB{ *mycontext,}}
22: \L{\LB{ *mypci;}}
23: \L{\LB{\K{struct} RyOperation ops[];}}
24: \L{\LB{\K{struct} dispatch *dispatches;}}
25: \L{\LB{IFP}\Tab{8}{quit;}}
26: \L{\LB{\{}}
27: \L{\LB{ \K{int}}\Tab{8}{ iloop,}}
28: \L{\LB{}\Tab{8}{ sd;}}
29: \L{\LB{ \K{char} buffer[BUFSIZ],}}
30: \L{\LB{}\Tab{8}{ *vec[NVEC + 1];}}
31: \L{\LB{ \K{register} \K{struct} dispatch *ds;}}
32: \L{\LB{ \K{struct} SSAPref sfs;}}
33: \L{\LB{ \K{register} \K{struct} SSAPref *sf;}}
34: \L{\LB{ \K{register} \K{struct} PSAPaddr *pa;}}
35: \L{\LB{ \K{struct} AcSAPconnect accs;}}
36: \L{\LB{ \K{register} \K{struct} AcSAPconnect *acc = \&accs;}}
37: \L{\LB{ \K{struct} AcSAPindication acis;}}
38: \L{\LB{ \K{register} \K{struct} AcSAPindication *aci = \&acis;}}
39: \L{\LB{ \K{register} \K{struct} AcSAPabort *aca = \&aci \-\> aci\_abort;}}
40: \L{\LB{ AEI}\Tab{8}{ aei;}}
41: \L{\LB{ OID}\Tab{8}{ ctx,}}
42: \L{\LB{}\Tab{8}{ pci;}}
43: \L{\LB{ \K{struct} PSAPctxlist pcs;}}
44: \L{\LB{ \K{register} \K{struct} PSAPctxlist *pc = \&pcs;}}
45: \L{\LB{ \K{struct} RoSAPindication rois;}}
46: \L{\LB{ \K{register} \K{struct} RoSAPindication *roi = \&rois;}}
47: \L{\LB{ \K{register} \K{struct} RoSAPpreject *rop = \&roi \-\> roi\_preject;}}
48: \L{\LB{}}
49: \L{\LB{ \K{if} (myname = rindex (argv[0], \S{}\'\/\'\SE{}))}}
50: \L{\LB{}\Tab{8}{myname++;}}
51: \L{\LB{ \K{if} (myname == NULL \|\| *myname == NULL)}}
52: \L{\LB{}\Tab{8}{myname = argv[0];}}
53: \L{\LB{}}
54: \L{\LB{ \K{if} (argc \< 2)}}
55: \L{\LB{}\Tab{8}{adios (NULLCP, \S{}\"usage: \%s host [operation [ arguments ... ]]\"\SE{}, myname);}}
56: \L{\LB{}}
57: \L{\LB{ \K{if} ((aei = str2aei (argv[1], myservice)) == NULLAEI)}}
58: \L{\LB{}\Tab{8}{adios (NULLCP, \S{}\"\%s\-\%s: unknown application\-entity\"\SE{},}}
59: \L{\LB{}\Tab{16}{argv[1], myservice);}}
60: \L{\LB{ \K{if} ((pa = aei2addr (aei)) == NULLPA)}}
61: \L{\LB{}\Tab{8}{adios (NULLCP, \S{}\"address translation failed\"\SE{});}}
62: \L{\LB{}}
63: \L{\LB{ \K{if} ((ctx = ode2oid (mycontext)) == NULLOID)}}
64: \L{\LB{}\Tab{8}{adios (NULLCP, \S{}\"\%s: unknown object descriptor\"\SE{}, mycontext);}}
65: \L{\LB{ \K{if} ((ctx = oid\_cpy (ctx)) == NULLOID)}}
66: \L{\LB{}\Tab{8}{adios (NULLCP, \S{}\"out of memory\"\SE{});}}
67: \L{\LB{ \K{if} ((pci = ode2oid (mypci)) == NULLOID)}}
68: \L{\LB{}\Tab{8}{adios (NULLCP, \S{}\"\%s: unknown object descriptor\"\SE{}, mypci);}}
69: \L{\LB{ \K{if} ((pci = oid\_cpy (pci)) == NULLOID)}}
70: \L{\LB{}\Tab{8}{adios (NULLCP, \S{}\"out of memory\"\SE{});}}
71: \L{\LB{ pc \-\> pc\_nctx = 1;}}
72: \L{\LB{ pc \-\> pc\_ctx[0].pc\_id = 1;}}
73: \L{\LB{ pc \-\> pc\_ctx[0].pc\_asn = pci;}}
74: \L{\LB{ pc \-\> pc\_ctx[0].pc\_atn = NULLOID;}}
75: \L{\LB{}}
76: \L{\LB{ \K{if} ((sf = addr2ref (PLocalHostName ())) == NULL) \{}}
77: \L{\LB{}\Tab{8}{sf = \&sfs;}}
78: \L{\LB{}\Tab{8}{(\K{void}) bzero ((\K{char} *) sf, \K{sizeof} *sf);}}
79: \L{\LB{ \}}}
80: \L{\LB{}}
81: \L{\LB{ \K{if} (argc \< 3) \{}}
82: \L{\LB{}\Tab{8}{printf (\S{}\"\%s\"\SE{}, myname);}}
83: \L{\LB{}\Tab{8}{\K{if} (sf \-\> sr\_ulen \> 2)}}
84: \L{\LB{}\Tab{8}{ printf (\S{}\" running on host \%s\"\SE{}, sf \-\> sr\_udata + 2);}}
85: \L{\LB{}\Tab{8}{\K{if} (sf \-\> sr\_clen \> 2)}}
86: \L{\LB{}\Tab{8}{ printf (\S{}\" at \%s\"\SE{}, sf \-\> sr\_cdata + 2);}}
87: \L{\LB{}\Tab{8}{printf (\S{}\" [\%s, \"\SE{}, oid2ode (ctx));}}
88: \L{\LB{}\Tab{8}{printf (\S{}\"\%s]\!n\"\SE{}, oid2ode (pci));}}
89: \L{\LB{}\Tab{8}{printf (\S{}\"using \%s\!n\"\SE{}, isodeversion);}}
90: \L{\LB{}}
91: \L{\LB{}\Tab{8}{printf (\S{}\"\%s... \"\SE{}, argv[1]);}}
92: \L{\LB{}\Tab{8}{(\K{void}) fflush (stdout);}}
93: \L{\LB{ }}
94: \L{\LB{}\Tab{8}{iloop = 1;}}
95: \L{\LB{ \}}}
96: \L{\LB{ \K{else} \{}}
97: \L{\LB{}\Tab{8}{\K{for} (ds = dispatches; ds \-\> ds\_name; ds++)}}
98: \L{\LB{}\Tab{8}{ \K{if} (strcmp (ds \-\> ds\_name, argv[2]) == 0)}}
99: \L{\LB{}\Tab{16}{\K{break};}}
100: \L{\LB{}\Tab{8}{\K{if} (ds \-\> ds\_name == NULL)}}
101: \L{\LB{}\Tab{8}{ adios (NULLCP, \S{}\"unknown operation \!\"\%s\!\"\"\SE{}, argv[2]);}}
102: \L{\LB{}}
103: \L{\LB{}\Tab{8}{iloop = 0;}}
104: \L{\LB{ \}}}
105: \L{\LB{}}
106: \L{\LB{ \K{if} (AcAssocRequest (ctx, NULLAEI, aei, NULLPA, pa, pc, NULLOID,}}
107: \L{\LB{}\Tab{16}{0, ROS\_MYREQUIRE, SERIAL\_NONE, 0, sf, NULLPEP, 0, NULLQOS,}}
108: \L{\LB{}\Tab{16}{acc, aci)}}
109: \L{\LB{}\Tab{8}{ == NOTOK)}}
110: \L{\LB{}\Tab{8}{acs\_adios (aca, \S{}\"A\-ASSOCIATE.REQUEST\"\SE{});}}
111: \L{\LB{}}
112: \L{\LB{ \K{if} (acc \-\> acc\_result != ACS\_ACCEPT) \{}}
113: \L{\LB{}\Tab{8}{\K{if} (iloop)}}
114: \L{\LB{}\Tab{8}{ printf (\S{}\"failed\!n\"\SE{});}}
115: \L{\LB{}}
116: \L{\LB{}\Tab{8}{adios (NULLCP, \S{}\"association rejected: [\%s]\"\SE{},}}
117: \L{\LB{}\Tab{16}{AcErrString (acc \-\> acc\_result));}}
118: \L{\LB{ \}}}
119: \L{\LB{ \K{if} (iloop) \{}}
120: \L{\LB{}\Tab{8}{printf (\S{}\"connected\!n\"\SE{});}}
121: \L{\LB{}\Tab{8}{(\K{void}) fflush (stdout);}}
122: \L{\LB{ \}}}
123: \L{\LB{}}
124: \L{\LB{ sd = acc \-\> acc\_sd;}}
125: \L{\LB{ ACCFREE (acc);}}
126: \L{\LB{}}
127: \L{\LB{ \K{if} (RoSetService (sd, RoPService, roi) == NOTOK)}}
128: \L{\LB{}\Tab{8}{ros\_adios (rop, \S{}\"set RO\/PS fails\"\SE{});}}
129: \L{\LB{}}
130: \L{\LB{ \K{if} (iloop) \{}}
131: \L{\LB{}\Tab{8}{\K{for} (;;) \{}}
132: \L{\LB{}\Tab{8}{ \K{if} (getline (buffer) == NOTOK)}}
133: \L{\LB{}\Tab{16}{\K{break};}}
134: \L{\LB{}}
135: \L{\LB{}\Tab{8}{ \K{if} (str2vec (buffer, vec) \< 1)}}
136: \L{\LB{}\Tab{16}{\K{continue};}}
137: \L{\LB{}}
138: \L{\LB{}\Tab{8}{ \K{for} (ds = dispatches; ds \-\> ds\_name; ds++)}}
139: \L{\LB{}\Tab{16}{\K{if} (strcmp (ds \-\> ds\_name, vec[0]) == 0)}}
140: \L{\LB{}\Tab{16}{ \K{break};}}
141: \L{\LB{}\Tab{8}{ \K{if} (ds \-\> ds\_name == NULL) \{}}
142: \L{\LB{}\Tab{16}{advise (NULLCP, \S{}\"unknown operation \!\"\%s\!\"\"\SE{}, vec[0]);}}
143: \L{\LB{}\Tab{16}{\K{continue};}}
144: \L{\LB{}\Tab{8}{ \}}}
145: \L{\LB{}}
146: \L{\LB{}\Tab{8}{ invoke (sd, ops, ds, vec + 1);}}
147: \L{\LB{}\Tab{8}{\}}}
148: \L{\LB{ \}}}
149: \L{\LB{ \K{else}}}
150: \L{\LB{}\Tab{8}{invoke (sd, ops, ds, argv + 3);}}
151: \L{\LB{}}
152: \L{\LB{ (*quit) (sd, (\K{struct} dispatch *) NULL, (\K{char} **) NULL, (caddr\_t *) NULL);}}
153: \L{\LB{\}}}
154: \L{\LB{}}
155: \L{\LB{\C{}\/* *\/\CE{}}}
156: \L{\LB{}}
157: \L{\LB{\K{static}}\Tab{8}{invoke (sd, ops, ds, args)}}
158: \L{\LB{\K{int}}\Tab{8}{sd;}}
159: \L{\LB{\K{struct} RyOperation ops[];}}
160: \L{\LB{\K{register} \K{struct} dispatch *ds;}}
161: \L{\LB{\K{char} **args;}}
162: \L{\LB{\{}}
163: \L{\LB{ \K{int}}\Tab{8}{ result;}}
164: \L{\LB{ caddr\_t in;}}
165: \L{\LB{ \K{struct} RoSAPindication rois;}}
166: \L{\LB{ \K{register} \K{struct} RoSAPindication *roi = \&rois;}}
167: \L{\LB{ \K{register} \K{struct} RoSAPpreject *rop = \&roi \-\> roi\_preject;}}
168: \L{\LB{}}
169: \L{\LB{ in = NULL;}}
170: \L{\LB{ \K{if} (ds \-\> ds\_argument \&\& (*ds \-\> ds\_argument) (sd, ds, args, \&in) == NOTOK)}}
171: \L{\LB{}\Tab{8}{\K{return};}}
172: \L{\LB{}}
173: \L{\LB{ \K{switch} (result = RyStub (sd, ops, ds \-\> ds\_operation, RyGenID (sd), NULLIP,}}
174: \L{\LB{}\Tab{16}{ in, ds \-\> ds\_result, ds \-\> ds\_error, ROS\_SYNC, roi)) \{}}
175: \L{\LB{}\Tab{8}{\K{case} NOTOK:}\Tab{32}{\C{}\/* failure *\/\CE{}}}
176: \L{\LB{}\Tab{8}{ \K{if} (ROS\_FATAL (rop \-\> rop\_reason))}}
177: \L{\LB{}\Tab{16}{ros\_adios (rop, \S{}\"STUB\"\SE{});}}
178: \L{\LB{}\Tab{8}{ ros\_advise (rop, \S{}\"STUB\"\SE{});}}
179: \L{\LB{}\Tab{8}{ \K{break};}}
180: \L{\LB{}}
181: \L{\LB{}\Tab{8}{\K{case} OK:}\Tab{32}{\C{}\/* got a result\/error response *\/\CE{}}}
182: \L{\LB{}\Tab{8}{ \K{break};}}
183: \L{\LB{}}
184: \L{\LB{}\Tab{8}{\K{case} DONE:}\Tab{32}{\C{}\/* got RO\-END? *\/\CE{}}}
185: \L{\LB{}\Tab{8}{ adios (NULLCP, \S{}\"got RO\-END.INDICATION\"\SE{});}}
186: \L{\LB{}\Tab{8}{ \C{}\/* NOTREACHED *\/\CE{}}}
187: \L{\LB{}}
188: \L{\LB{}\Tab{8}{\K{default}:}}
189: \L{\LB{}\Tab{8}{ adios (NULLCP, \S{}\"unknown return from RyStub=\%d\"\SE{}, result);}}
190: \L{\LB{}\Tab{8}{ \C{}\/* NOTREACHED *\/\CE{}}}
191: \L{\LB{ \}}}
192: \L{\LB{}}
193: \L{\LB{ \K{if} (ds \-\> ds\_free \&\& in)}}
194: \L{\LB{}\Tab{8}{(\K{void}) (*ds \-\> ds\_free) (in);}}
195: \L{\LB{\}}}
196: \L{\LB{}}
197: \L{\LB{\C{}\/* *\/\CE{}}}
198: \L{\LB{}}
199: \L{\LB{\K{static} \K{int} getline (buffer)}}
200: \L{\LB{\K{char} *buffer;}}
201: \L{\LB{\{}}
202: \L{\LB{ \K{register} \K{int} i;}}
203: \L{\LB{ \K{register} \K{char} *cp,}}
204: \L{\LB{ *ep;}}
205: \L{\LB{ \K{static} \K{int} sticky = 0;}}
206: \L{\LB{}}
207: \L{\LB{ \K{if} (sticky) \{}}
208: \L{\LB{}\Tab{8}{sticky = 0;}}
209: \L{\LB{}\Tab{8}{\K{return} NOTOK;}}
210: \L{\LB{ \}}}
211: \L{\LB{}}
212: \L{\LB{ printf (\S{}\"\%s\> \"\SE{}, myname);}}
213: \L{\LB{ (\K{void}) fflush (stdout);}}
214: \L{\LB{}}
215: \L{\LB{ \K{for} (ep = (cp = buffer) + BUFSIZ \- 1; (i = getchar ()) != \S{}\'\!n\'\SE{};) \{}}
216: \L{\LB{}\Tab{8}{\K{if} (i == EOF) \{}}
217: \L{\LB{}\Tab{8}{ printf (\S{}\"\!n\"\SE{});}}
218: \L{\LB{}\Tab{8}{ clearerr (stdin);}}
219: \L{\LB{}\Tab{8}{ \K{if} (cp != buffer) \{}}
220: \L{\LB{}\Tab{16}{sticky++;}}
221: \L{\LB{}\Tab{16}{\K{break};}}
222: \L{\LB{}\Tab{8}{ \}}}
223: \L{\LB{}}
224: \L{\LB{}\Tab{8}{ \K{return} NOTOK;}}
225: \L{\LB{}\Tab{8}{\}}}
226: \L{\LB{}}
227: \L{\LB{}\Tab{8}{\K{if} (cp \< ep)}}
228: \L{\LB{}\Tab{8}{ *cp++ = i;}}
229: \L{\LB{ \}}}
230: \L{\LB{ *cp = NULL;}}
231: \L{\LB{}}
232: \L{\LB{ \K{return} OK;}}
233: \L{\LB{\}}}
234: \L{\LB{}}
235: \L{\LB{\C{}\/* *\/\CE{}}}
236: \L{\LB{}}
237: \L{\LB{\K{void}}\Tab{8}{ros\_adios (rop, event)}}
238: \L{\LB{\K{register} \K{struct} RoSAPpreject *rop;}}
239: \L{\LB{\K{char} *event;}}
240: \L{\LB{\{}}
241: \L{\LB{ ros\_advise (rop, event);}}
242: \L{\LB{}}
243: \L{\LB{ \_exit (1);}}
244: \L{\LB{\}}}
245: \L{\LB{}}
246: \L{\LB{}}
247: \L{\LB{\K{void}}\Tab{8}{ros\_advise (rop, event)}}
248: \L{\LB{\K{register} \K{struct} RoSAPpreject *rop;}}
249: \L{\LB{\K{char} *event;}}
250: \L{\LB{\{}}
251: \L{\LB{ \K{char} buffer[BUFSIZ];}}
252: \L{\LB{}}
253: \L{\LB{ \K{if} (rop \-\> rop\_cc \> 0)}}
254: \L{\LB{}\Tab{8}{(\K{void}) sprintf (buffer, \S{}\"[\%s] \%*.*s\"\SE{}, RoErrString (rop \-\> rop\_reason),}}
255: \L{\LB{}\Tab{16}{rop \-\> rop\_cc, rop \-\> rop\_cc, rop \-\> rop\_data);}}
256: \L{\LB{ \K{else}}}
257: \L{\LB{}\Tab{8}{(\K{void}) sprintf (buffer, \S{}\"[\%s]\"\SE{}, RoErrString (rop \-\> rop\_reason));}}
258: \L{\LB{}}
259: \L{\LB{ advise (NULLCP, \S{}\"\%s: \%s\"\SE{}, event, buffer);}}
260: \L{\LB{\}}}
261: \L{\LB{}}
262: \L{\LB{\C{}\/* *\/\CE{}}}
263: \L{\LB{}}
264: \L{\LB{\K{void}}\Tab{8}{acs\_adios (aca, event)}}
265: \L{\LB{\K{register} \K{struct} AcSAPabort *aca;}}
266: \L{\LB{\K{char} *event;}}
267: \L{\LB{\{}}
268: \L{\LB{ acs\_advise (aca, event);}}
269: \L{\LB{}}
270: \L{\LB{ \_exit (1);}}
271: \L{\LB{\}}}
272: \L{\LB{}}
273: \L{\LB{}}
274: \L{\LB{\K{void}}\Tab{8}{acs\_advise (aca, event)}}
275: \L{\LB{\K{register} \K{struct} AcSAPabort *aca;}}
276: \L{\LB{\K{char} *event;}}
277: \L{\LB{\{}}
278: \L{\LB{ \K{char} buffer[BUFSIZ];}}
279: \L{\LB{}}
280: \L{\LB{ \K{if} (aca \-\> aca\_cc \> 0)}}
281: \L{\LB{}\Tab{8}{(\K{void}) sprintf (buffer, \S{}\"[\%s] \%*.*s\"\SE{},}}
282: \L{\LB{}\Tab{16}{AcErrString (aca \-\> aca\_reason),}}
283: \L{\LB{}\Tab{16}{aca \-\> aca\_cc, aca \-\> aca\_cc, aca \-\> aca\_data);}}
284: \L{\LB{ \K{else}}}
285: \L{\LB{}\Tab{8}{(\K{void}) sprintf (buffer, \S{}\"[\%s]\"\SE{}, AcErrString (aca \-\> aca\_reason));}}
286: \L{\LB{}}
287: \L{\LB{}\Tab{8}{advise (NULLCP, \S{}\"\%s: \%s (source \%d)\"\SE{}, event, buffer,}}
288: \L{\LB{}\Tab{16}{aca \-\> aca\_source);}}
289: \L{\LB{\}}}
290: \L{\LB{}}
291: \L{\LB{\C{}\/* *\/\CE{}}}
292: \L{\LB{}}
293: \L{\LB{\K{\#ifndef}}\Tab{8}{lint}}
294: \L{\LB{\K{void}}\Tab{8}{\_advise ();}}
295: \L{\LB{}}
296: \L{\LB{}}
297: \L{\LB{\K{void}}\Tab{8}{adios (va\_alist)}}
298: \L{\LB{va\_dcl}}
299: \L{\LB{\{}}
300: \L{\LB{ va\_list ap;}}
301: \L{\LB{}}
302: \L{\LB{ va\_start (ap);}}
303: \L{\LB{}}
304: \L{\LB{ \_advise (ap);}}
305: \L{\LB{}}
306: \L{\LB{ va\_end (ap);}}
307: \L{\LB{}}
308: \L{\LB{ \_exit (1);}}
309: \L{\LB{\}}}
310: \L{\LB{\K{\#else}}}
311: \L{\LB{\C{}\/* VARARGS *\/\CE{}}}
312: \L{\LB{}}
313: \L{\LB{\K{void}}\Tab{8}{adios (what, fmt)}}
314: \L{\LB{\K{char} *what,}}
315: \L{\LB{ *fmt;}}
316: \L{\LB{\{}}
317: \L{\LB{ adios (what, fmt);}}
318: \L{\LB{\}}}
319: \L{\LB{\K{\#endif}}}
320: \L{\LB{}}
321: \L{\LB{}}
322: \L{\LB{\K{\#ifndef}}\Tab{8}{lint}}
323: \L{\LB{\K{void}}\Tab{8}{advise (va\_alist)}}
324: \L{\LB{va\_dcl}}
325: \L{\LB{\{}}
326: \L{\LB{ va\_list ap;}}
327: \L{\LB{}}
328: \L{\LB{ va\_start (ap);}}
329: \L{\LB{}}
330: \L{\LB{ \_advise (ap);}}
331: \L{\LB{}}
332: \L{\LB{ va\_end (ap);}}
333: \L{\LB{\}}}
334: \L{\LB{}}
335: \L{\LB{}}
336: \L{\LB{\K{static} \K{void} \_advise (ap)}}
337: \L{\LB{va\_list}\Tab{8}{ap;}}
338: \L{\LB{\{}}
339: \L{\LB{ \K{char} buffer[BUFSIZ];}}
340: \L{\LB{}}
341: \L{\LB{ asprintf (buffer, ap);}}
342: \L{\LB{}}
343: \L{\LB{ (\K{void}) fflush (stdout);}}
344: \L{\LB{}}
345: \L{\LB{ fprintf (stderr, \S{}\"\%s: \"\SE{}, myname);}}
346: \L{\LB{ (\K{void}) fputs (buffer, stderr);}}
347: \L{\LB{ (\K{void}) fputc (\S{}\'\!n\'\SE{}, stderr);}}
348: \L{\LB{}}
349: \L{\LB{ (\K{void}) fflush (stderr);}}
350: \L{\LB{\}}}
351: \L{\LB{\K{\#else}}}
352: \L{\LB{\C{}\/* VARARGS *\/\CE{}}}
353: \L{\LB{}}
354: \L{\LB{\K{void}}\Tab{8}{advise (what, fmt)}}
355: \L{\LB{\K{char} *what,}}
356: \L{\LB{ *fmt;}}
357: \L{\LB{\{}}
358: \L{\LB{ advise (what, fmt);}}
359: \L{\LB{\}}}
360: \L{\LB{\K{\#endif}}}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.