Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
8735fd3ba31eb9394e5284b743eee8ee3dea76b1
[simgrid.git] / cruft / doc / tmpl / gras-unused.sgml
1 <!-- ##### SECTION ./tmpl/DataDesc.sgml:Long_Description ##### -->
2 <para>In order to allow GRAS to send data over the network (or simply to
3 dupplicate it in SG), you have to describe the structure of data attached
4 with each message. This mecanism is stolen from NWS message passing
5 interface.</para>
6
7 <para>For each message, you have to declare a structure representing the
8 data to send as payload with the message.</para>
9
10 <refsect2>
11   <title>Sending (or receiving) simple structures</title>
12   <para>Let's imagin you want to declare a <command>STORE_STATE</command>
13   message, which will send some data to the memory server for inclusion in
14   the database. Here is the structure we want to send:</para>
15
16 <literallayout>
17  struct state {
18   char id[STATE_NAME_SIZE];
19   int rec_size;
20   int rec_count;
21   double seq_no;
22   double time_out;
23  };
24 </literallayout>
25
26   <para>And here is the structure description GRAS needs to be able to send
27   this over the network:</para>
28
29 <literallayout>
30  const static DataDescriptor stateDescriptor[] =
31   {SIMPLE_MEMBER(CHAR_TYPE, STATE_NAME_SIZE, offsetof(struct state, id)),
32    SIMPLE_MEMBER(INT_TYPE, 1, offsetof(struct state, rec_size)),
33    SIMPLE_MEMBER(INT_TYPE, 1, offsetof(struct state, rec_count)),
34    SIMPLE_MEMBER(DOUBLE_TYPE, 1, offsetof(struct state, seq_no)),
35    SIMPLE_MEMBER(DOUBLE_TYPE, 1, offsetof(struct state, time_out))};
36 </literallayout>
37
38   <para>Contrary to what one could think when you first see it, it's pretty
39   easy. A structure descriptor is a list of descriptions, describing each
40   field of the structure. For example, for the first field, you say that
41   the base type is <command>CHAR_TYPE</command>, that there is
42   <command>STATE_NAME_SIZE</command> element of this type and that it's
43   position in the structure is computed by <command>offsetof(struct state,
44   id)</command>. This leads to two remarks:</para> 
45
46   <itemizedlist>
47     <listitem>
48       <para>it's impossible to send dynamic sized strings that way. It's a
49       known limitation, but I think we can live with it.</para>
50     </listitem>
51     <listitem>
52       <para>Yes, the <command>offsetof(struct state, id)</command>
53       construction is C ANSI and is portable.</para>
54     </listitem>
55   </itemizedlist>
56 </refsect2>
57
58 <refsect2>
59   <title>Sending (or receiving) complex structure</title>
60   <para>How to send non-flat structures, do you ask? It's not harder. Let's
61   imagin you want to send the following structure:</para>
62
63 <literallayout>
64  typedef struct {
65    unsigned long address;
66    unsigned long port;
67  } CliqueMember;
68
69  typedef struct {
70    char name[MAX_CLIQUE_NAME_SIZE];
71    double whenGenerated;
72    double instance;
73    char skill[MAX_SKILL_SIZE];
74    char options[MAX_OPTIONS_SIZE];
75    double period;
76    double timeOut;
77    CliqueMember members[MAX_MEMBERS];
78    unsigned int count;
79    unsigned int leader;
80  } Clique;
81 </literallayout>
82
83   <para>As you can see, this structure contains an array of another user
84   defined structure. To be able to send <command>struct Clique</command>,
85   you have to describe each structures that way:</para>
86
87 <literallayout>
88  static const DataDescriptor cliqueMemberDescriptor[] =
89    {SIMPLE_MEMBER(UNSIGNED_LONG_TYPE, 1, offsetof(CliqueMember, address)),
90     SIMPLE_MEMBER(UNSIGNED_LONG_TYPE, 1, offsetof(CliqueMember, port))};
91
92  static const DataDescriptor cliqueDescriptor[] =
93    {SIMPLE_MEMBER(CHAR_TYPE, MAX_CLIQUE_NAME_SIZE, offsetof(Clique, name)),
94     SIMPLE_MEMBER(DOUBLE_TYPE, 1, offsetof(Clique, whenGenerated)),
95     SIMPLE_MEMBER(DOUBLE_TYPE, 1, offsetof(Clique, instance)),
96     SIMPLE_MEMBER(CHAR_TYPE, MAX_SKILL_SIZE, offsetof(Clique, skill)),
97     SIMPLE_MEMBER(CHAR_TYPE, MAX_OPTIONS_SIZE, offsetof(Clique, options)),
98     SIMPLE_MEMBER(DOUBLE_TYPE, 1, offsetof(Clique, period)),
99     SIMPLE_MEMBER(DOUBLE_TYPE, 1, offsetof(Clique, timeOut)),
100     {STRUCT_TYPE, MAX_MEMBERS, offsetof(Clique, members),
101      (DataDescriptor *)&amp;cliqueMemberDescriptor, cliqueMemberDescriptorLength,
102      PAD_BYTES(CliqueMember, port, unsigned long, 1)},
103     SIMPLE_MEMBER(UNSIGNED_INT_TYPE, 1, offsetof(Clique, count)),
104     SIMPLE_MEMBER(UNSIGNED_INT_TYPE, 1, offsetof(Clique, leader))};
105 </literallayout>
106
107   <para>So, even if less natural, it is possible to send structures 
108   containing structures with these tools.</para>
109
110   <para>You can see that it's not only impossible to send dynamic-sized
111   strings, it impossible to send dynamic-sized arrays. Here,
112   <command>MAX_MEMBERS</command> is the maximum of members a clique can
113   contain. In NWS, this value is defined to 100.  <warning><para>I'm not
114   sure, but I think that all the 100 values are sent each time, even if
115   there is only 3 non-null members. Yes, that's
116   bad.</para></warning></para>
117
118   <warning><para>The DataDescriptor_t MUST be const. Malloc'ing them and
119   then casting them on argument passing IS NOT OK. This is because we get
120   the number of elements in the array with the sizeof(dd)/sizeof(dd[0]).
121   </para></warning>
122 </refsect2>
123
124
125 <!-- ##### SECTION ./tmpl/DataDesc.sgml:See_Also ##### -->
126 <para>
127
128 </para>
129
130
131 <!-- ##### SECTION ./tmpl/DataDesc.sgml:Short_Description ##### -->
132 Describing the data
133
134
135 <!-- ##### SECTION ./tmpl/DataDesc.sgml:Title ##### -->
136 DataDescriptor API
137
138
139 <!-- ##### SECTION ./tmpl/ErrLog.sgml:Long_Description ##### -->
140 <para>
141
142 </para>
143
144
145 <!-- ##### SECTION ./tmpl/ErrLog.sgml:See_Also ##### -->
146 <para>
147
148 </para>
149
150
151 <!-- ##### SECTION ./tmpl/ErrLog.sgml:Short_Description ##### -->
152
153
154
155 <!-- ##### SECTION ./tmpl/ErrLog.sgml:Title ##### -->
156 ErrLog
157
158
159 <!-- ##### SECTION ./tmpl/Socks.sgml:Long_Description ##### -->
160 <para>
161
162 </para>
163
164
165 <!-- ##### SECTION ./tmpl/Socks.sgml:See_Also ##### -->
166 <para>
167
168 </para>
169
170
171 <!-- ##### SECTION ./tmpl/Socks.sgml:Short_Description ##### -->
172 Handling sockets
173
174
175 <!-- ##### SECTION ./tmpl/Socks.sgml:Title ##### -->
176 Sockets API
177
178
179 <!-- ##### SECTION ./tmpl/comm_callbacks.sgml:Long_Description ##### -->
180 <para>
181
182 </para>
183
184
185 <!-- ##### SECTION ./tmpl/comm_callbacks.sgml:See_Also ##### -->
186 <para>
187
188 </para>
189
190
191 <!-- ##### SECTION ./tmpl/comm_callbacks.sgml:Short_Description ##### -->
192
193
194
195 <!-- ##### SECTION ./tmpl/comm_callbacks.sgml:Title ##### -->
196 comm_callbacks
197
198
199 <!-- ##### SECTION ./tmpl/comm_cb.sgml:Long_Description ##### -->
200 <para>
201
202 </para>
203
204
205 <!-- ##### SECTION ./tmpl/comm_cb.sgml:See_Also ##### -->
206 <para>
207
208 </para>
209
210
211 <!-- ##### SECTION ./tmpl/comm_cb.sgml:Short_Description ##### -->
212
213
214
215 <!-- ##### SECTION ./tmpl/comm_cb.sgml:Title ##### -->
216 comm_cb
217
218
219 <!-- ##### SECTION ./tmpl/comm_datadesc_expert.sgml:Long_Description ##### -->
220 <para>
221
222 </para>
223
224
225 <!-- ##### SECTION ./tmpl/comm_datadesc_expert.sgml:See_Also ##### -->
226 <para>
227
228 </para>
229
230
231 <!-- ##### SECTION ./tmpl/comm_datadesc_expert.sgml:Short_Description ##### -->
232 Advanced ways to describe data (for experts)
233
234
235 <!-- ##### SECTION ./tmpl/comm_datadesc_expert.sgml:Title ##### -->
236 Advanced Data description
237
238
239 <!-- ##### SECTION ./tmpl/comm_dd_cbps.sgml:Long_Description ##### -->
240 <para>
241
242 </para>
243
244
245 <!-- ##### SECTION ./tmpl/comm_dd_cbps.sgml:See_Also ##### -->
246 <para>
247
248 </para>
249
250
251 <!-- ##### SECTION ./tmpl/comm_dd_cbps.sgml:Short_Description ##### -->
252
253
254
255 <!-- ##### SECTION ./tmpl/comm_dd_cbps.sgml:Title ##### -->
256 Data description callbacks persistant state
257
258
259 <!-- ##### SECTION ./tmpl/config.sgml:Long_Description ##### -->
260 <para>
261
262 </para>
263
264
265 <!-- ##### SECTION ./tmpl/config.sgml:See_Also ##### -->
266 <para>
267
268 </para>
269
270
271 <!-- ##### SECTION ./tmpl/config.sgml:Short_Description ##### -->
272
273
274
275 <!-- ##### SECTION ./tmpl/config.sgml:Title ##### -->
276 config
277
278
279 <!-- ##### SECTION ./tmpl/dd_cbps.sgml:Long_Description ##### -->
280 <para>
281
282 </para>
283
284
285 <!-- ##### SECTION ./tmpl/dd_cbps.sgml:See_Also ##### -->
286 <para>
287
288 </para>
289
290
291 <!-- ##### SECTION ./tmpl/dd_cbps.sgml:Short_Description ##### -->
292
293
294
295 <!-- ##### SECTION ./tmpl/dd_cbps.sgml:Title ##### -->
296 Data description callbacks persistant state
297
298
299 <!-- ##### SECTION ./tmpl/dd_internal.sgml:Long_Description ##### -->
300 <para>
301
302 </para>
303
304
305 <!-- ##### SECTION ./tmpl/dd_internal.sgml:See_Also ##### -->
306 <para>
307
308 </para>
309
310
311 <!-- ##### SECTION ./tmpl/dd_internal.sgml:Short_Description ##### -->
312
313
314
315 <!-- ##### SECTION ./tmpl/dd_internal.sgml:Title ##### -->
316 Implementation of data description
317
318
319 <!-- ##### SECTION ./tmpl/dico.sgml:Long_Description ##### -->
320 <para>
321
322 </para>
323
324
325 <!-- ##### SECTION ./tmpl/dico.sgml:See_Also ##### -->
326 <para>
327
328 </para>
329
330
331 <!-- ##### SECTION ./tmpl/dico.sgml:Short_Description ##### -->
332
333
334
335 <!-- ##### SECTION ./tmpl/dico.sgml:Title ##### -->
336 dico
337
338
339 <!-- ##### SECTION ./tmpl/dynar.sgml:Long_Description ##### -->
340 <para>
341 This module provide the quite usual dynamic array facility.
342 </para>
343
344
345 <!-- ##### SECTION ./tmpl/dynar.sgml:See_Also ##### -->
346 <para>
347
348 </para>
349
350
351 <!-- ##### SECTION ./tmpl/dynar.sgml:Short_Description ##### -->
352 Dynamic array
353
354
355 <!-- ##### SECTION ./tmpl/dynar.sgml:Title ##### -->
356 dynar
357
358
359 <!-- ##### SECTION ./tmpl/gras-overview.sgml:Long_Description ##### -->
360     <para>This document introduce the GRAS library (<emphasis>Grid Reality
361     And Simulation</emphasis>, or according to my english dictionary,
362     <emphasis>Generally Recognized As Safe</emphasis> ;).</para>
363     
364     <refsect2>
365       <title>Overview</title>
366       <para>The purpose of the GRAS is to allow the developpement of
367       distributed programs which will work with as few as possible
368       modification both on the SimGrid simulator (SG), and in the Real Life
369       (RL).</para>
370
371       <para>Here are the problems when you want to do so:
372         <itemizedlist>
373           <listitem>
374             <para>Communication in SG is done by passing tasks, while in
375             RL, you have to deal with sockets (or any wrapper to it).</para>
376           </listitem>
377           <listitem><para>In RL, each process should provide a main()
378             function, and it's obviously not the case in SG.</para>
379           </listitem>
380         </itemizedlist>
381       </para>
382     </refsect2>
383     <refsect2>
384       <title>Application class target</title>
385       <para>If you want to run your code both in RL and in SG, you won't be
386       able to use the full set of features offered by any of those two
387       worlds. GRAS tries to provide a suffisent set of features to develop
388       your application, and implement them in both worlds.</para>
389
390       <para>GRAS uses the paradigm of <emphasis>event-driven 
391       programming</emphasis>, which is an extension to the message-passing
392       one. Any process of a typical event-driven application declares
393       callback to incoming events, which can be messages from other
394       processes, timers or others.</para>
395
396       <para>All messages have an header, specifying its type, and attached
397       data, represented as one or several C structures. In order to send
398       the data over the network in RL, a type-description mecanism is
399       provided, and the RL version of GRAS implements CDR
400       functionnalities. That is to say that the data are sent in the native
401       format of the sender host, and converted on the destination host only
402       if needed.</para>
403
404       <para>In order to not reimplement the wheel, GRAS use existing code,
405       and adapt them to make them work together. The SG version naturally
406       use the SimGrid toolkit, while the RL version is based over the
407       communication library used in NWS (note that this library was somehow
408       modified, since the previous version use XDR, ie both the sender and
409       the receiver convert the data from/to a so called network
410       format). That's why some basic knowledge about how NWS work is
411       supposed in this document. But don't worry, you only have to know the
412       basics about NWS, the internals needed to understand the document
413       will be presented when needed.</para>
414     </refsect2>
415
416
417 <!-- ##### SECTION ./tmpl/gras-overview.sgml:See_Also ##### -->
418 <para>
419
420 </para>
421
422
423 <!-- ##### SECTION ./tmpl/gras-overview.sgml:Short_Description ##### -->
424 Overview of the GRAS library
425
426
427 <!-- ##### SECTION ./tmpl/gras-overview.sgml:Title ##### -->
428 Overview
429
430
431 <!-- ##### SECTION ./tmpl/gras.sgml:Long_Description ##### -->
432 <para>
433
434 </para>
435
436
437 <!-- ##### SECTION ./tmpl/gras.sgml:See_Also ##### -->
438 <para>
439
440 </para>
441
442
443 <!-- ##### SECTION ./tmpl/gras.sgml:Short_Description ##### -->
444
445
446
447 <!-- ##### SECTION ./tmpl/gras.sgml:Title ##### -->
448 gras
449
450
451 <!-- ##### SECTION ./tmpl/gras_private.sgml:Long_Description ##### -->
452 <para>
453
454 </para>
455
456
457 <!-- ##### SECTION ./tmpl/gras_private.sgml:See_Also ##### -->
458 <para>
459
460 </para>
461
462
463 <!-- ##### SECTION ./tmpl/gras_private.sgml:Short_Description ##### -->
464
465
466
467 <!-- ##### SECTION ./tmpl/gras_private.sgml:Title ##### -->
468 gras_private
469
470
471 <!-- ##### SECTION ./tmpl/gras_rl.sgml:Long_Description ##### -->
472 <para>
473
474 </para>
475
476
477 <!-- ##### SECTION ./tmpl/gras_rl.sgml:See_Also ##### -->
478 <para>
479
480 </para>
481
482
483 <!-- ##### SECTION ./tmpl/gras_rl.sgml:Short_Description ##### -->
484 Implementation of GRAS suited for real life.
485
486
487 <!-- ##### SECTION ./tmpl/gras_rl.sgml:Title ##### -->
488 RL
489
490
491 <!-- ##### SECTION ./tmpl/gras_sg.sgml:Long_Description ##### -->
492 <para>
493   SimGrid was designed to ease the comparison of algorithms and
494   heuristics. That way, a lot of complicated notion from the system layer
495   were volontary left off. For example, migrating a process from an host to
496   another is as easy as: MSG_process_change_host(process, new_host).
497 </para>
498
499 <para>
500   No need to tell that performing this operation on real platform is really
501   harder. This simplification is a very good thing when you want to rapidly
502   prototype code, but makes things somehow more complicated in GRAS since
503   we want to have a realistic API, since it have to be implemented in
504   reality also.
505 </para>
506
507 <para>
508   The best example of complexity in GRAS_SG induced by simplicity in
509   SimGrid is the sockets handling. There is no "socket" in SG, but only
510   m_channel_t. In contrary to sockets from RL, no special treatment is
511   needed for a process before writing or reading on/from a channel. So, a
512   given channel can be pooled by more than one process. Likewise, you can
513   send data to a channel that nobody is actually listening to.
514 </para>
515
516 <para>
517   The SG implementation of GRAS repport as an error the fact that nobody is
518   listening to the socket when trying to open a socket, or send stuff using
519   a previously openned socket. That way, the SG version can be used to
520   debug all syncronization issues. For that, we store mainly the PID of
521   both the sender and the receiver in the socket structure, and then
522   resolve PID->process at the lastest moment. This search is a bit
523   expensive, but as long as there is no real garbage collection in SG, with
524   the information "dead process" within the structure, it's the only
525   solution to make sure that we won't dereference pointers to an old freed
526   structure when the process on the other side of the structure did finish
527   since the creation of the socket.
528 </para>
529
530 <para>
531   As said in the overview, the processes can declare to hear on several
532   sockets, but all incoming messages are handled by the same loop. So, we
533   can use only one channel per process, and use a table on each host to
534   determine to which process a message should be delivered depending on the
535   socket number provided by the sender.
536 </para>
537
538
539 <!-- ##### SECTION ./tmpl/gras_sg.sgml:See_Also ##### -->
540 <para>
541 RL, the implementation suited for real life.
542 </para>
543
544 <!--
545 Local variables:
546 sgml-parent-document:\.\./gras-docs\.sgml
547 sgml-omittag:t
548 sgml-shorttag:t
549 sgml-namecase-general:t
550 sgml-general-insert-case:lower
551 sgml-minimize-attributes:nil
552 sgml-always-quote-attributes:t
553 sgml-indent-step:2
554 sgml-indent-data:nil
555 sgml-exposed-tags:nil
556 sgml-local-catalogs:nil
557 sgml-local-ecat-files:nil
558 End:
559 -->
560
561
562 <!-- ##### SECTION ./tmpl/gras_sg.sgml:Short_Description ##### -->
563 Implementation of GRAS on top of the simulator.
564
565
566 <!-- ##### SECTION ./tmpl/gras_sg.sgml:Title ##### -->
567 SG
568
569
570 <!-- ##### SECTION ./tmpl/nws_comm.sgml:Long_Description ##### -->
571 <para>
572
573 </para>
574
575
576 <!-- ##### SECTION ./tmpl/nws_comm.sgml:See_Also ##### -->
577 <para>
578
579 </para>
580
581
582 <!-- ##### SECTION ./tmpl/nws_comm.sgml:Short_Description ##### -->
583
584
585
586 <!-- ##### SECTION ./tmpl/nws_comm.sgml:Title ##### -->
587 nws_comm
588
589
590 <!-- ##### SECTION ./tmpl/trp_socks.sgml:Long_Description ##### -->
591 <para>
592
593 </para>
594
595
596 <!-- ##### SECTION ./tmpl/trp_socks.sgml:See_Also ##### -->
597 <para>
598
599 </para>
600
601
602 <!-- ##### SECTION ./tmpl/trp_socks.sgml:Short_Description ##### -->
603
604
605
606 <!-- ##### SECTION ./tmpl/trp_socks.sgml:Title ##### -->
607 Sockets
608
609
610 <!-- ##### MACRO BEGIN_DECL ##### -->
611 <para>
612
613 </para>
614
615
616 <!-- ##### MACRO CCRITICAL0 ##### -->
617 <para>
618
619 </para>
620
621 @c: 
622 @f: 
623
624 <!-- ##### MACRO CCRITICAL1 ##### -->
625 <para>
626
627 </para>
628
629 @c: 
630 @f: 
631 @a1: 
632
633 <!-- ##### MACRO CCRITICAL2 ##### -->
634 <para>
635
636 </para>
637
638 @c: 
639 @f: 
640 @a1: 
641 @a2: 
642
643 <!-- ##### MACRO CCRITICAL3 ##### -->
644 <para>
645
646 </para>
647
648 @c: 
649 @f: 
650 @a1: 
651 @a2: 
652 @a3: 
653
654 <!-- ##### MACRO CCRITICAL4 ##### -->
655 <para>
656
657 </para>
658
659 @c: 
660 @f: 
661 @a1: 
662 @a2: 
663 @a3: 
664 @a4: 
665
666 <!-- ##### MACRO CCRITICAL5 ##### -->
667 <para>
668
669 </para>
670
671 @c: 
672 @f: 
673 @a1: 
674 @a2: 
675 @a3: 
676 @a4: 
677 @a5: 
678
679 <!-- ##### MACRO CDEBUG0 ##### -->
680 <para>
681
682 </para>
683
684 @c: 
685 @f: 
686
687 <!-- ##### MACRO CDEBUG1 ##### -->
688 <para>
689
690 </para>
691
692 @c: 
693 @f: 
694 @a1: 
695
696 <!-- ##### MACRO CDEBUG2 ##### -->
697 <para>
698
699 </para>
700
701 @c: 
702 @f: 
703 @a1: 
704 @a2: 
705
706 <!-- ##### MACRO CDEBUG3 ##### -->
707 <para>
708
709 </para>
710
711 @c: 
712 @f: 
713 @a1: 
714 @a2: 
715 @a3: 
716
717 <!-- ##### MACRO CDEBUG4 ##### -->
718 <para>
719
720 </para>
721
722 @c: 
723 @f: 
724 @a1: 
725 @a2: 
726 @a3: 
727 @a4: 
728
729 <!-- ##### MACRO CDEBUG5 ##### -->
730 <para>
731
732 </para>
733
734 @c: 
735 @f: 
736 @a1: 
737 @a2: 
738 @a3: 
739 @a4: 
740 @a5: 
741
742 <!-- ##### MACRO CERROR0 ##### -->
743 <para>
744
745 </para>
746
747 @c: 
748 @f: 
749
750 <!-- ##### MACRO CERROR1 ##### -->
751 <para>
752
753 </para>
754
755 @c: 
756 @f: 
757 @a1: 
758
759 <!-- ##### MACRO CERROR2 ##### -->
760 <para>
761
762 </para>
763
764 @c: 
765 @f: 
766 @a1: 
767 @a2: 
768
769 <!-- ##### MACRO CERROR3 ##### -->
770 <para>
771
772 </para>
773
774 @c: 
775 @f: 
776 @a1: 
777 @a2: 
778 @a3: 
779
780 <!-- ##### MACRO CERROR4 ##### -->
781 <para>
782
783 </para>
784
785 @c: 
786 @f: 
787 @a1: 
788 @a2: 
789 @a3: 
790 @a4: 
791
792 <!-- ##### MACRO CERROR5 ##### -->
793 <para>
794
795 </para>
796
797 @c: 
798 @f: 
799 @a1: 
800 @a2: 
801 @a3: 
802 @a4: 
803 @a5: 
804
805 <!-- ##### MACRO CINFO0 ##### -->
806 <para>
807
808 </para>
809
810 @c: 
811 @f: 
812
813 <!-- ##### MACRO CINFO1 ##### -->
814 <para>
815
816 </para>
817
818 @c: 
819 @f: 
820 @a1: 
821
822 <!-- ##### MACRO CINFO2 ##### -->
823 <para>
824
825 </para>
826
827 @c: 
828 @f: 
829 @a1: 
830 @a2: 
831
832 <!-- ##### MACRO CINFO3 ##### -->
833 <para>
834
835 </para>
836
837 @c: 
838 @f: 
839 @a1: 
840 @a2: 
841 @a3: 
842
843 <!-- ##### MACRO CINFO4 ##### -->
844 <para>
845
846 </para>
847
848 @c: 
849 @f: 
850 @a1: 
851 @a2: 
852 @a3: 
853 @a4: 
854
855 <!-- ##### MACRO CINFO5 ##### -->
856 <para>
857
858 </para>
859
860 @c: 
861 @f: 
862 @a1: 
863 @a2: 
864 @a3: 
865 @a4: 
866 @a5: 
867
868 <!-- ##### MACRO CLOG0 ##### -->
869 <para>
870
871 </para>
872
873 @c: 
874 @p: 
875 @f: 
876
877 <!-- ##### MACRO CLOG1 ##### -->
878 <para>
879
880 </para>
881
882 @c: 
883 @p: 
884 @f: 
885 @a1: 
886
887 <!-- ##### MACRO CLOG2 ##### -->
888 <para>
889
890 </para>
891
892 @c: 
893 @p: 
894 @f: 
895 @a1: 
896 @a2: 
897
898 <!-- ##### MACRO CLOG3 ##### -->
899 <para>
900
901 </para>
902
903 @c: 
904 @p: 
905 @f: 
906 @a1: 
907 @a2: 
908 @a3: 
909
910 <!-- ##### MACRO CLOG4 ##### -->
911 <para>
912
913 </para>
914
915 @c: 
916 @p: 
917 @f: 
918 @a1: 
919 @a2: 
920 @a3: 
921 @a4: 
922
923 <!-- ##### MACRO CLOG5 ##### -->
924 <para>
925
926 </para>
927
928 @c: 
929 @p: 
930 @f: 
931 @a1: 
932 @a2: 
933 @a3: 
934 @a4: 
935 @a5: 
936
937 <!-- ##### MACRO CLOG6 ##### -->
938 <para>
939
940 </para>
941
942 @c: 
943 @p: 
944 @f: 
945 @a1: 
946 @a2: 
947 @a3: 
948 @a4: 
949 @a5: 
950 @a6: 
951
952 <!-- ##### MACRO CRITICAL0 ##### -->
953 <para>
954
955 </para>
956
957 @f: 
958
959 <!-- ##### MACRO CRITICAL1 ##### -->
960 <para>
961
962 </para>
963
964 @f: 
965 @a1: 
966
967 <!-- ##### MACRO CRITICAL2 ##### -->
968 <para>
969
970 </para>
971
972 @f: 
973 @a1: 
974 @a2: 
975
976 <!-- ##### MACRO CRITICAL3 ##### -->
977 <para>
978
979 </para>
980
981 @f: 
982 @a1: 
983 @a2: 
984 @a3: 
985
986 <!-- ##### MACRO CRITICAL4 ##### -->
987 <para>
988
989 </para>
990
991 @f: 
992 @a1: 
993 @a2: 
994 @a3: 
995 @a4: 
996
997 <!-- ##### MACRO CRITICAL5 ##### -->
998 <para>
999
1000 </para>
1001
1002 @f: 
1003 @a1: 
1004 @a2: 
1005 @a3: 
1006 @a4: 
1007 @a5: 
1008
1009 <!-- ##### MACRO CWARNING6 ##### -->
1010 <para>
1011
1012 </para>
1013
1014 @c: 
1015 @f: 
1016 @a1: 
1017 @a2: 
1018 @a3: 
1019 @a4: 
1020 @a5: 
1021 @a6: 
1022
1023 <!-- ##### FUNCTION CallAddr ##### -->
1024 <para>
1025
1026 </para>
1027
1028 @addr: 
1029 @Param2: 
1030 @sock: 
1031 @timeOut: 
1032 @Returns: 
1033
1034 <!-- ##### FUNCTION CloseSocket ##### -->
1035 <para>
1036
1037 </para>
1038
1039 @sock: 
1040 @waitForPeer: 
1041 @Returns: 
1042
1043 <!-- ##### FUNCTION ConvertData ##### -->
1044 <para>
1045
1046 </para>
1047
1048 @destination: 
1049 @source: 
1050 @description: 
1051 @length: 
1052 @sourceFormat: 
1053
1054 <!-- ##### FUNCTION CreateLocalChild ##### -->
1055 <para>
1056
1057 </para>
1058
1059 @pid: 
1060 @parentToChild: 
1061 @childToParent: 
1062 @Returns: 
1063
1064 <!-- ##### FUNCTION DROP_SOCKET ##### -->
1065 <para>
1066
1067 </para>
1068
1069 @sock: 
1070 @Returns: 
1071
1072 <!-- ##### FUNCTION DataSize ##### -->
1073 <para>
1074
1075 </para>
1076
1077 @description: 
1078 @length: 
1079 @format: 
1080 @Returns: 
1081
1082 <!-- ##### ENUM DataTypes ##### -->
1083 <para>
1084
1085 </para>
1086
1087 @CHAR_TYPE: 
1088 @DOUBLE_TYPE: 
1089 @FLOAT_TYPE: 
1090 @INT_TYPE: 
1091 @LONG_TYPE: 
1092 @SHORT_TYPE: 
1093 @UNSIGNED_INT_TYPE: 
1094 @UNSIGNED_LONG_TYPE: 
1095 @UNSIGNED_SHORT_TYPE: 
1096 @STRUCT_TYPE: 
1097 @LAST_TYPE: 
1098
1099 <!-- ##### FUNCTION DifferentFormat ##### -->
1100 <para>
1101
1102 </para>
1103
1104 @whatType: 
1105 @Returns: 
1106
1107 <!-- ##### FUNCTION DifferentOrder ##### -->
1108 <para>
1109
1110 </para>
1111
1112 @Returns: 
1113
1114 <!-- ##### FUNCTION DifferentSize ##### -->
1115 <para>
1116
1117 </para>
1118
1119 @whatType: 
1120 @Returns: 
1121
1122 <!-- ##### MACRO END_DECL ##### -->
1123 <para>
1124
1125 </para>
1126
1127
1128 <!-- ##### MACRO EODD ##### -->
1129 <para>
1130
1131 </para>
1132
1133
1134 <!-- ##### FUNCTION EstablishAnEar ##### -->
1135 <para>
1136
1137 </para>
1138
1139 @Param1: 
1140 @Param2: 
1141 @ear: 
1142 @earPort: 
1143 @Returns: 
1144
1145 <!-- ##### ENUM FormatTypes ##### -->
1146 <para>
1147
1148 </para>
1149
1150 @HOST_FORMAT: 
1151 @NETWORK_FORMAT: 
1152
1153 <!-- ##### MACRO GRAS_LOG_DEFAULT_CATEGORY ##### -->
1154 <para>
1155
1156 </para>
1157
1158 @cname: 
1159
1160 <!-- ##### MACRO GRAS_LOG_EXTERNAL_CATEGORY ##### -->
1161 <para>
1162
1163 </para>
1164
1165 @cname: 
1166
1167 <!-- ##### MACRO GRAS_LOG_ISENABLED ##### -->
1168 <para>
1169
1170 </para>
1171
1172 @catName: 
1173 @priority: 
1174
1175 <!-- ##### MACRO GRAS_LOG_MAYDAY ##### -->
1176 <para>
1177
1178 </para>
1179
1180
1181 <!-- ##### MACRO GRAS_LOG_NEW_CATEGORY ##### -->
1182 <para>
1183
1184 </para>
1185
1186 @catName: 
1187 @desc: 
1188
1189 <!-- ##### MACRO GRAS_LOG_NEW_DEFAULT_CATEGORY ##### -->
1190 <para>
1191
1192 </para>
1193
1194 @cname: 
1195 @desc: 
1196
1197 <!-- ##### MACRO GRAS_LOG_NEW_DEFAULT_SUBCATEGORY ##### -->
1198 <para>
1199
1200 </para>
1201
1202 @cname: 
1203 @parent: 
1204 @desc: 
1205
1206 <!-- ##### MACRO GRAS_LOG_NEW_SUBCATEGORY ##### -->
1207 <para>
1208
1209 </para>
1210
1211 @catName: 
1212 @parent: 
1213 @desc: 
1214
1215 <!-- ##### MACRO GRAS_LOG_ROOT_CAT ##### -->
1216 <para>
1217
1218 </para>
1219
1220
1221 <!-- ##### MACRO GRAS_LOG_STATIC_THRESHOLD ##### -->
1222 <para>
1223
1224 </para>
1225
1226
1227 <!-- ##### MACRO HAVE_DLFCN_H ##### -->
1228 <para>
1229
1230 </para>
1231
1232
1233 <!-- ##### MACRO HAVE_INTTYPES_H ##### -->
1234 <para>
1235
1236 </para>
1237
1238
1239 <!-- ##### MACRO HAVE_LIBPTHREAD ##### -->
1240 <para>
1241
1242 </para>
1243
1244
1245 <!-- ##### MACRO HAVE_MEMORY_H ##### -->
1246 <para>
1247
1248 </para>
1249
1250
1251 <!-- ##### MACRO HAVE_STDINT_H ##### -->
1252 <para>
1253
1254 </para>
1255
1256
1257 <!-- ##### MACRO HAVE_STDLIB_H ##### -->
1258 <para>
1259
1260 </para>
1261
1262
1263 <!-- ##### MACRO HAVE_STRINGS_H ##### -->
1264 <para>
1265
1266 </para>
1267
1268
1269 <!-- ##### MACRO HAVE_STRING_H ##### -->
1270 <para>
1271
1272 </para>
1273
1274
1275 <!-- ##### MACRO HAVE_SYS_STAT_H ##### -->
1276 <para>
1277
1278 </para>
1279
1280
1281 <!-- ##### MACRO HAVE_SYS_TYPES_H ##### -->
1282 <para>
1283
1284 </para>
1285
1286
1287 <!-- ##### MACRO HAVE_UNISTD_H ##### -->
1288 <para>
1289
1290 </para>
1291
1292
1293 <!-- ##### FUNCTION HomogenousConvertData ##### -->
1294 <para>
1295
1296 </para>
1297
1298 @destination: 
1299 @source: 
1300 @whatType: 
1301 @repetitions: 
1302 @sourceFormat: 
1303
1304 <!-- ##### FUNCTION HomogenousDataSize ##### -->
1305 <para>
1306
1307 </para>
1308
1309 @whatType: 
1310 @repetitions: 
1311 @format: 
1312 @Returns: 
1313
1314 <!-- ##### TYPEDEF IPAddress ##### -->
1315 <para>
1316
1317 </para>
1318
1319
1320 <!-- ##### FUNCTION IPAddressImage ##### -->
1321 <para>
1322
1323 </para>
1324
1325 @addr: 
1326 @Returns: 
1327
1328 <!-- ##### FUNCTION IPAddressImage_r ##### -->
1329 <para>
1330
1331 </para>
1332
1333 @addr: 
1334 @Returns: 
1335
1336 <!-- ##### FUNCTION IPAddressMachine ##### -->
1337 <para>
1338
1339 </para>
1340
1341 @addr: 
1342 @Returns: 
1343
1344 <!-- ##### FUNCTION IPAddressMachine_r ##### -->
1345 <para>
1346
1347 </para>
1348
1349 @addr: 
1350 @Returns: 
1351
1352 <!-- ##### MACRO IPAddressValue ##### -->
1353 <para>
1354
1355 </para>
1356
1357 @machineOrAddress: 
1358 @address: 
1359
1360 <!-- ##### FUNCTION IPAddressValues ##### -->
1361 <para>
1362
1363 </para>
1364
1365 @machineOrAddress: 
1366 @addressList: 
1367 @atMost: 
1368 @Returns: 
1369
1370 <!-- ##### FUNCTION IncomingRequest ##### -->
1371 <para>
1372
1373 </para>
1374
1375 @timeOut: 
1376 @sd: 
1377 @ldap: 
1378 @Returns: 
1379
1380 <!-- ##### FUNCTION IsOkay ##### -->
1381 <para>
1382
1383 </para>
1384
1385 @sd: 
1386 @Returns: 
1387
1388 <!-- ##### FUNCTION IsPipe ##### -->
1389 <para>
1390
1391 </para>
1392
1393 @sd: 
1394 @Returns: 
1395
1396 <!-- ##### MACRO IsValidIP ##### -->
1397 <para>
1398
1399 </para>
1400
1401 @machineOrAddress: 
1402
1403 <!-- ##### MACRO LOG6 ##### -->
1404 <para>
1405
1406 </para>
1407
1408 @p: 
1409 @f: 
1410 @a1: 
1411 @a2: 
1412 @a3: 
1413 @a4: 
1414 @a5: 
1415 @a6: 
1416
1417 <!-- ##### FUNCTION MyMachineName ##### -->
1418 <para>
1419
1420 </para>
1421
1422 @Returns: 
1423
1424 <!-- ##### MACRO NO_SOCKET ##### -->
1425 <para>
1426
1427 </para>
1428
1429
1430 <!-- ##### FUNCTION NotifyOnDisconnection ##### -->
1431 <para>
1432
1433 </para>
1434
1435 @notifyFn: 
1436
1437 <!-- ##### FUNCTION OpenClientSocket ##### -->
1438 <para>
1439
1440 </para>
1441
1442 @addr: 
1443 @Param2: 
1444 @sock: 
1445 @Returns: 
1446
1447 <!-- ##### FUNCTION OpenServerSocket ##### -->
1448 <para>
1449
1450 </para>
1451
1452 @Param1: 
1453 @Param2: 
1454 @ear: 
1455 @earPort: 
1456 @Returns: 
1457
1458 <!-- ##### MACRO PACKAGE ##### -->
1459 <para>
1460
1461 </para>
1462
1463
1464 <!-- ##### MACRO PACKAGE_BUGREPORT ##### -->
1465 <para>
1466
1467 </para>
1468
1469
1470 <!-- ##### MACRO PACKAGE_NAME ##### -->
1471 <para>
1472
1473 </para>
1474
1475
1476 <!-- ##### MACRO PACKAGE_STRING ##### -->
1477 <para>
1478
1479 </para>
1480
1481
1482 <!-- ##### MACRO PACKAGE_TARNAME ##### -->
1483 <para>
1484
1485 </para>
1486
1487
1488 <!-- ##### MACRO PACKAGE_VERSION ##### -->
1489 <para>
1490
1491 </para>
1492
1493
1494 <!-- ##### MACRO PAD_BYTES ##### -->
1495 <para>
1496
1497 </para>
1498
1499 @structType: 
1500 @lastMember: 
1501 @memberType: 
1502 @repetitions: 
1503
1504 <!-- ##### FUNCTION PassSocket ##### -->
1505 <para>
1506
1507 </para>
1508
1509 @sock: 
1510 @child: 
1511 @Returns: 
1512
1513 <!-- ##### FUNCTION Peer ##### -->
1514 <para>
1515
1516 </para>
1517
1518 @sd: 
1519 @Returns: 
1520
1521 <!-- ##### FUNCTION PeerName ##### -->
1522 <para>
1523
1524 </para>
1525
1526 @sd: 
1527 @Returns: 
1528
1529 <!-- ##### FUNCTION PeerName_r ##### -->
1530 <para>
1531
1532 </para>
1533
1534 @sd: 
1535 @Returns: 
1536
1537 <!-- ##### FUNCTION ReverseData ##### -->
1538 <para>
1539
1540 </para>
1541
1542 @destination: 
1543 @source: 
1544 @whatType: 
1545 @repetitions: 
1546 @format: 
1547
1548 <!-- ##### MACRO SIMPLE_DATA ##### -->
1549 <para>
1550
1551 </para>
1552
1553 @type: 
1554 @repetitions: 
1555
1556 <!-- ##### MACRO SIMPLE_MEMBER ##### -->
1557 <para>
1558
1559 </para>
1560
1561 @type: 
1562 @repetitions: 
1563 @offset: 
1564
1565 <!-- ##### MACRO SIMPLE_TYPE_COUNT ##### -->
1566 <para>
1567
1568 </para>
1569
1570
1571 <!-- ##### MACRO STDC_HEADERS ##### -->
1572 <para>
1573
1574 </para>
1575
1576
1577 <!-- ##### TYPEDEF Socket ##### -->
1578 <para>
1579
1580 </para>
1581
1582
1583 <!-- ##### FUNCTION SocketFailure ##### -->
1584 <para>
1585
1586 </para>
1587
1588 @sig: 
1589
1590 <!-- ##### USER_FUNCTION SocketFunction ##### -->
1591 <para>
1592
1593 </para>
1594
1595 @Param1: 
1596
1597 <!-- ##### FUNCTION SocketInUse ##### -->
1598 <para>
1599
1600 </para>
1601
1602 @sd: 
1603 @Returns: 
1604
1605 <!-- ##### FUNCTION SocketIsAvailable ##### -->
1606 <para>
1607
1608 </para>
1609
1610 @sd: 
1611 @Returns: 
1612
1613 <!-- ##### MACRO VERSION ##### -->
1614 <para>
1615
1616 </para>
1617
1618
1619 <!-- ##### MACRO WARNING6 ##### -->
1620 <para>
1621
1622 </para>
1623
1624 @f: 
1625 @a1: 
1626 @a2: 
1627 @a3: 
1628 @a4: 
1629 @a5: 
1630 @a6: 
1631
1632 <!-- ##### USER_FUNCTION grasCallbackFunction ##### -->
1633 <para>
1634
1635 </para>
1636
1637 @sd: 
1638 @msgType: 
1639 @vdata: 
1640
1641 <!-- ##### FUNCTION grasCloseSocket ##### -->
1642 <para>
1643
1644 </para>
1645
1646 @sock: 
1647 @Returns: 
1648
1649 <!-- ##### FUNCTION grasDataDescCmp ##### -->
1650 <para>
1651
1652 </para>
1653
1654 @dd1: 
1655 @c1: 
1656 @dd2: 
1657 @c2: 
1658 @Returns: 
1659 @description: 
1660
1661 <!-- ##### FUNCTION grasDataDescCount ##### -->
1662 <para>
1663
1664 </para>
1665
1666 @description: 
1667 @Returns: 
1668
1669 <!-- ##### FUNCTION grasDataRecv ##### -->
1670 <para>
1671
1672 </para>
1673
1674 @sd: 
1675 @data: 
1676 @description: 
1677 @description_length: 
1678 @repetition: 
1679 @Returns: 
1680
1681 <!-- ##### FUNCTION grasDataSend ##### -->
1682 <para>
1683
1684 </para>
1685
1686 @sd: 
1687 @data: 
1688 @description: 
1689 @description_length: 
1690 @repetition: 
1691 @Returns: 
1692
1693 <!-- ##### FUNCTION grasDataSize ##### -->
1694 <para>
1695
1696 </para>
1697
1698 @description: 
1699 @ft: 
1700 @Returns: 
1701
1702 <!-- ##### ENUM grasError_t ##### -->
1703 <para>
1704
1705 </para>
1706
1707 @no_error: 
1708 @malloc_error: 
1709 @mismatch_error: 
1710 @sanity_error: 
1711 @system_error: 
1712 @network_error: 
1713 @timeout_error: 
1714 @thread_error: 
1715 @unknown_error: 
1716
1717 <!-- ##### FUNCTION grasLock ##### -->
1718 <para>
1719
1720 </para>
1721
1722 @Returns: 
1723
1724 <!-- ##### TYPEDEF grasMessageType_t ##### -->
1725 <para>
1726
1727 </para>
1728
1729
1730 <!-- ##### FUNCTION grasMsgDiscard ##### -->
1731 <para>
1732
1733 </para>
1734
1735 @sd: 
1736 @size: 
1737
1738 <!-- ##### FUNCTION grasMsgEntryGet ##### -->
1739 <para>
1740
1741 </para>
1742
1743 @id: 
1744 @Returns: 
1745
1746 <!-- ##### TYPEDEF grasMsgEntry_t ##### -->
1747 <para>
1748
1749 </para>
1750
1751
1752 <!-- ##### FUNCTION grasMsgFree ##### -->
1753 <para>
1754
1755 </para>
1756
1757 @msg: 
1758
1759 <!-- ##### FUNCTION grasMsgHandle ##### -->
1760 <para>
1761
1762 </para>
1763
1764 @timeOut: 
1765
1766 <!-- ##### FUNCTION grasMsgHeaderNew ##### -->
1767 <para>
1768
1769 </para>
1770
1771 @msgId: 
1772 @dataSize: 
1773 @seqCount: 
1774 @Returns: 
1775
1776 <!-- ##### FUNCTION grasMsgNew ##### -->
1777 <para>
1778
1779 </para>
1780
1781 @msgId: 
1782 @free_data_on_free: 
1783 @seqCount: 
1784 @Varargs: 
1785 @Returns: 
1786
1787 <!-- ##### FUNCTION grasMsgRecv ##### -->
1788 <para>
1789
1790 </para>
1791
1792 @msg: 
1793 @timeout: 
1794 @Returns: 
1795 @sd: 
1796
1797 <!-- ##### FUNCTION grasMsgRegister ##### -->
1798 <para>
1799
1800 </para>
1801
1802 @message: 
1803 @name: 
1804 @sequence_count: 
1805 @Varargs: 
1806 @Returns: 
1807
1808 <!-- ##### FUNCTION grasMsgSend ##### -->
1809 <para>
1810
1811 </para>
1812
1813 @sd: 
1814 @message: 
1815 @sequence_count: 
1816 @Varargs: 
1817 @Returns: 
1818
1819 <!-- ##### FUNCTION grasMsgWait ##### -->
1820 <para>
1821
1822 </para>
1823
1824 @sd: 
1825 @timeout: 
1826 @message: 
1827 @sequence_count: 
1828 @Varargs: 
1829 @Returns: 
1830
1831 <!-- ##### FUNCTION grasMyMachineName ##### -->
1832 <para>
1833
1834 </para>
1835
1836 @Returns: 
1837
1838 <!-- ##### FUNCTION grasOpenClientSocket ##### -->
1839 <para>
1840
1841 </para>
1842
1843 @host: 
1844 @Param2: 
1845 @sock: 
1846 @Returns: 
1847
1848 <!-- ##### FUNCTION grasOpenServerSocket ##### -->
1849 <para>
1850
1851 </para>
1852
1853 @Param1: 
1854 @Param2: 
1855 @sock: 
1856 @Returns: 
1857
1858 <!-- ##### MACRO grasPROTOCOL ##### -->
1859 <para>
1860
1861 </para>
1862
1863
1864 <!-- ##### FUNCTION grasPeerGetAddress ##### -->
1865 <para>
1866
1867 </para>
1868
1869 @sd: 
1870 @Returns: 
1871
1872 <!-- ##### FUNCTION grasPeerGetName ##### -->
1873 <para>
1874
1875 </para>
1876
1877 @sd: 
1878 @Returns: 
1879
1880 <!-- ##### FUNCTION grasRecvData ##### -->
1881 <para>
1882
1883 </para>
1884
1885 @sd: 
1886 @data: 
1887 @description: 
1888 @Returns: 
1889
1890 <!-- ##### FUNCTION grasRegisterCallback ##### -->
1891 <para>
1892
1893 </para>
1894
1895 @message: 
1896 @TTL: 
1897 @cb: 
1898
1899 <!-- ##### FUNCTION grasSendData ##### -->
1900 <para>
1901
1902 </para>
1903
1904 @sd: 
1905 @data: 
1906 @description: 
1907 @Returns: 
1908
1909 <!-- ##### FUNCTION grasUnlock ##### -->
1910 <para>
1911
1912 </para>
1913
1914 @Returns: 
1915
1916 <!-- ##### FUNCTION grasUserdataGet ##### -->
1917 <para>
1918
1919 </para>
1920
1921
1922 <!-- ##### MACRO grasUserdataNew ##### -->
1923 <para>
1924
1925 </para>
1926
1927 @type: 
1928
1929 <!-- ##### FUNCTION grasUserdataSet ##### -->
1930 <para>
1931
1932 </para>
1933
1934 @ud: 
1935
1936 <!-- ##### FUNCTION gras_cfg_check ##### -->
1937 <para>
1938
1939 </para>
1940
1941 @cfg: 
1942 @Returns: 
1943
1944 <!-- ##### FUNCTION gras_cfg_cpy ##### -->
1945 <para>
1946
1947 </para>
1948
1949 @tocopy: 
1950 @whereto: 
1951 @Returns: 
1952
1953 <!-- ##### FUNCTION gras_cfg_dump ##### -->
1954 <para>
1955
1956 </para>
1957
1958 @name: 
1959 @indent: 
1960 @cfg: 
1961
1962 <!-- ##### FUNCTION gras_cfg_empty ##### -->
1963 <para>
1964
1965 </para>
1966
1967 @cfg: 
1968 @name: 
1969 @Returns: 
1970
1971 <!-- ##### FUNCTION gras_cfg_free ##### -->
1972 <para>
1973
1974 </para>
1975
1976 @cfg: 
1977
1978 <!-- ##### FUNCTION gras_cfg_get_double ##### -->
1979 <para>
1980
1981 </para>
1982
1983 @cfg: 
1984 @name: 
1985 @val: 
1986 @Returns: 
1987
1988 <!-- ##### FUNCTION gras_cfg_get_dynar ##### -->
1989 <para>
1990
1991 </para>
1992
1993 @cfg: 
1994 @name: 
1995 @dynar: 
1996 @Returns: 
1997
1998 <!-- ##### FUNCTION gras_cfg_get_host ##### -->
1999 <para>
2000
2001 </para>
2002
2003 @cfg: 
2004 @name: 
2005 @host: 
2006 @port: 
2007 @Returns: 
2008
2009 <!-- ##### FUNCTION gras_cfg_get_int ##### -->
2010 <para>
2011
2012 </para>
2013
2014 @cfg: 
2015 @name: 
2016 @val: 
2017 @Returns: 
2018
2019 <!-- ##### FUNCTION gras_cfg_get_string ##### -->
2020 <para>
2021
2022 </para>
2023
2024 @cfg: 
2025 @name: 
2026 @val: 
2027 @Returns: 
2028
2029 <!-- ##### FUNCTION gras_cfg_new ##### -->
2030 <para>
2031
2032 </para>
2033
2034 @Returns: 
2035 @whereto: 
2036
2037 <!-- ##### FUNCTION gras_cfg_register ##### -->
2038 <para>
2039
2040 </para>
2041
2042 @cfg: 
2043 @name: 
2044 @type: 
2045 @min: 
2046 @max: 
2047 @Returns: 
2048
2049 <!-- ##### FUNCTION gras_cfg_register_str ##### -->
2050 <para>
2051
2052 </para>
2053
2054 @cfg: 
2055 @entry: 
2056 @Returns: 
2057
2058 <!-- ##### FUNCTION gras_cfg_rm_double ##### -->
2059 <para>
2060
2061 </para>
2062
2063 @cfg: 
2064 @name: 
2065 @val: 
2066 @Returns: 
2067
2068 <!-- ##### FUNCTION gras_cfg_rm_host ##### -->
2069 <para>
2070
2071 </para>
2072
2073 @cfg: 
2074 @name: 
2075 @host: 
2076 @port: 
2077 @Returns: 
2078
2079 <!-- ##### FUNCTION gras_cfg_rm_int ##### -->
2080 <para>
2081
2082 </para>
2083
2084 @cfg: 
2085 @name: 
2086 @val: 
2087 @Returns: 
2088
2089 <!-- ##### FUNCTION gras_cfg_rm_string ##### -->
2090 <para>
2091
2092 </para>
2093
2094 @cfg: 
2095 @name: 
2096 @val: 
2097 @Returns: 
2098
2099 <!-- ##### FUNCTION gras_cfg_set ##### -->
2100 <para>
2101
2102 </para>
2103
2104 @cfg: 
2105 @Varargs: 
2106 @Returns: 
2107
2108 <!-- ##### FUNCTION gras_cfg_set_double ##### -->
2109 <para>
2110
2111 </para>
2112
2113 @cfg: 
2114 @name: 
2115 @val: 
2116 @Returns: 
2117
2118 <!-- ##### FUNCTION gras_cfg_set_host ##### -->
2119 <para>
2120
2121 </para>
2122
2123 @cfg: 
2124 @name: 
2125 @host: 
2126 @port: 
2127 @Returns: 
2128
2129 <!-- ##### FUNCTION gras_cfg_set_int ##### -->
2130 <para>
2131
2132 </para>
2133
2134 @cfg: 
2135 @name: 
2136 @val: 
2137 @Returns: 
2138
2139 <!-- ##### FUNCTION gras_cfg_set_parse ##### -->
2140 <para>
2141
2142 </para>
2143
2144 @cfg: 
2145 @options: 
2146 @Returns: 
2147
2148 <!-- ##### FUNCTION gras_cfg_set_string ##### -->
2149 <para>
2150
2151 </para>
2152
2153 @cfg: 
2154 @name: 
2155 @val: 
2156 @Returns: 
2157
2158 <!-- ##### FUNCTION gras_cfg_set_vargs ##### -->
2159 <para>
2160
2161 </para>
2162
2163 @cfg: 
2164 @pa: 
2165 @Returns: 
2166
2167 <!-- ##### FUNCTION gras_datadesc_cb_set_post ##### -->
2168 <para>
2169
2170 </para>
2171
2172 @type: 
2173 @post: 
2174
2175 <!-- ##### FUNCTION gras_datadesc_cb_set_pre ##### -->
2176 <para>
2177
2178 </para>
2179
2180 @type: 
2181 @pre: 
2182
2183 <!-- ##### FUNCTION gras_datadesc_cmp ##### -->
2184 <para>
2185
2186 </para>
2187
2188 @d1: 
2189 @d2: 
2190 @Returns: 
2191 @dd1: 
2192 @c1: 
2193 @dd2: 
2194 @c2: 
2195
2196 <!-- ##### FUNCTION gras_datadesc_copy_data ##### -->
2197 <para>
2198
2199 </para>
2200
2201 @dd: 
2202 @c: 
2203 @data: 
2204
2205 <!-- ##### MACRO gras_datadesc_declare_array ##### -->
2206 <para>
2207
2208 </para>
2209
2210 @name: 
2211 @elm_type: 
2212 @size: 
2213 @code: 
2214
2215 <!-- ##### FUNCTION gras_datadesc_declare_array_cb ##### -->
2216 <para>
2217
2218 </para>
2219
2220 @name: 
2221 @element_type: 
2222 @fixed_size: 
2223 @dynamic_size: 
2224 @post: 
2225 @code: 
2226 @Returns: 
2227
2228 <!-- ##### FUNCTION gras_datadesc_declare_array_dyn ##### -->
2229 <para>
2230
2231 </para>
2232
2233 @name: 
2234 @element_type: 
2235 @dynamic_size: 
2236 @dst: 
2237 @Returns: 
2238 @elm_type: 
2239 @code: 
2240
2241 <!-- ##### FUNCTION gras_datadesc_declare_array_fixed ##### -->
2242 <para>
2243
2244 </para>
2245
2246 @name: 
2247 @element_type: 
2248 @fixed_size: 
2249 @dst: 
2250 @Returns: 
2251
2252 <!-- ##### FUNCTION gras_datadesc_declare_ref ##### -->
2253 <para>
2254
2255 </para>
2256
2257 @name: 
2258 @referenced_type: 
2259 @dst: 
2260 @Returns: 
2261 @ref_type: 
2262 @code: 
2263
2264 <!-- ##### FUNCTION gras_datadesc_declare_ref_cb ##### -->
2265 <para>
2266
2267 </para>
2268
2269 @name: 
2270 @referenced_type: 
2271 @discriminant: 
2272 @post: 
2273 @code: 
2274 @Returns: 
2275
2276 <!-- ##### MACRO gras_datadesc_declare_ref_disc ##### -->
2277 <para>
2278
2279 </para>
2280
2281 @name: 
2282 @discriminant: 
2283 @code: 
2284
2285 <!-- ##### FUNCTION gras_datadesc_declare_ref_generic ##### -->
2286 <para>
2287
2288 </para>
2289
2290 @name: 
2291 @discriminant: 
2292 @dst: 
2293 @Returns: 
2294
2295 <!-- ##### FUNCTION gras_datadesc_declare_struct ##### -->
2296 <para>
2297
2298 </para>
2299
2300 @name: 
2301 @dst: 
2302 @Returns: 
2303 @code: 
2304
2305 <!-- ##### MACRO gras_datadesc_declare_struct_add_code ##### -->
2306 <para>
2307
2308 </para>
2309
2310 @struct_code: 
2311 @field_name: 
2312 @field_type_code: 
2313
2314 <!-- ##### FUNCTION gras_datadesc_declare_struct_add_code_cb ##### -->
2315 <para>
2316
2317 </para>
2318
2319 @struct_code: 
2320 @field_name: 
2321 @field_code: 
2322 @pre_cb: 
2323 @post_cb: 
2324 @Returns: 
2325
2326 <!-- ##### MACRO gras_datadesc_declare_struct_add_name ##### -->
2327 <para>
2328
2329 </para>
2330
2331 @struct_code: 
2332 @field_name: 
2333 @field_type_name: 
2334
2335 <!-- ##### FUNCTION gras_datadesc_declare_struct_add_name_cb ##### -->
2336 <para>
2337
2338 </para>
2339
2340 @struct_code: 
2341 @field_name: 
2342 @field_type_name: 
2343 @pre_cb: 
2344 @post_cb: 
2345 @Returns: 
2346
2347 <!-- ##### FUNCTION gras_datadesc_declare_struct_append ##### -->
2348 <para>
2349
2350 </para>
2351
2352 @struct_type: 
2353 @name: 
2354 @field_type: 
2355 @Returns: 
2356
2357 <!-- ##### FUNCTION gras_datadesc_declare_struct_append_name ##### -->
2358 <para>
2359
2360 </para>
2361
2362 @struct_type: 
2363 @name: 
2364 @field_type_name: 
2365 @Returns: 
2366
2367 <!-- ##### FUNCTION gras_datadesc_declare_struct_cb ##### -->
2368 <para>
2369
2370 </para>
2371
2372 @name: 
2373 @pre_cb: 
2374 @post_cb: 
2375 @code: 
2376 @Returns: 
2377
2378 <!-- ##### FUNCTION gras_datadesc_declare_struct_close ##### -->
2379 <para>
2380
2381 </para>
2382
2383 @struct_type: 
2384
2385 <!-- ##### FUNCTION gras_datadesc_declare_union ##### -->
2386 <para>
2387
2388 </para>
2389
2390 @name: 
2391 @selector: 
2392 @dst: 
2393 @Returns: 
2394 @code: 
2395
2396 <!-- ##### MACRO gras_datadesc_declare_union_add_code ##### -->
2397 <para>
2398
2399 </para>
2400
2401 @union_code: 
2402 @field_name: 
2403 @field_type_code: 
2404
2405 <!-- ##### FUNCTION gras_datadesc_declare_union_add_code_cb ##### -->
2406 <para>
2407
2408 </para>
2409
2410 @union_code: 
2411 @field_name: 
2412 @field_code: 
2413 @pre_cb: 
2414 @post_cb: 
2415 @Returns: 
2416
2417 <!-- ##### MACRO gras_datadesc_declare_union_add_name ##### -->
2418 <para>
2419
2420 </para>
2421
2422 @union_code: 
2423 @field_name: 
2424 @field_type_name: 
2425
2426 <!-- ##### FUNCTION gras_datadesc_declare_union_add_name_cb ##### -->
2427 <para>
2428
2429 </para>
2430
2431 @union_code: 
2432 @field_name: 
2433 @field_type_name: 
2434 @pre_cb: 
2435 @post_cb: 
2436 @Returns: 
2437
2438 <!-- ##### FUNCTION gras_datadesc_declare_union_append ##### -->
2439 <para>
2440
2441 </para>
2442
2443 @union_type: 
2444 @name: 
2445 @field_type: 
2446 @Returns: 
2447
2448 <!-- ##### FUNCTION gras_datadesc_declare_union_append_name ##### -->
2449 <para>
2450
2451 </para>
2452
2453 @union_type: 
2454 @name: 
2455 @field_type_name: 
2456 @Returns: 
2457
2458 <!-- ##### FUNCTION gras_datadesc_declare_union_cb ##### -->
2459 <para>
2460
2461 </para>
2462
2463 @name: 
2464 @field_count: 
2465 @post: 
2466 @code: 
2467 @Returns: 
2468
2469 <!-- ##### FUNCTION gras_datadesc_declare_union_close ##### -->
2470 <para>
2471
2472 </para>
2473
2474 @union_type: 
2475
2476 <!-- ##### FUNCTION gras_datadesc_from_nws ##### -->
2477 <para>
2478
2479 </para>
2480
2481 @name: 
2482 @desc: 
2483 @howmany: 
2484 @code: 
2485 @Returns: 
2486 @dst: 
2487
2488 <!-- ##### FUNCTION gras_datadesc_import_nws ##### -->
2489 <para>
2490
2491 </para>
2492
2493 @name: 
2494 @desc: 
2495 @howmany: 
2496 @dst: 
2497 @Returns: 
2498
2499 <!-- ##### FUNCTION gras_datadesc_parse ##### -->
2500 <para>
2501
2502 </para>
2503
2504 @name: 
2505 @Cdefinition: 
2506 @dst: 
2507 @Returns: 
2508 @code: 
2509 @def: 
2510
2511 <!-- ##### FUNCTION gras_dd_cbps_block_begin ##### -->
2512 <para>
2513
2514 </para>
2515
2516 @ps: 
2517
2518 <!-- ##### FUNCTION gras_dd_cbps_block_end ##### -->
2519 <para>
2520
2521 </para>
2522
2523 @ps: 
2524
2525 <!-- ##### FUNCTION gras_dd_cbps_get ##### -->
2526 <para>
2527
2528 </para>
2529
2530 @ps: 
2531 @name: 
2532 @ddt: 
2533
2534 <!-- ##### FUNCTION gras_dd_cbps_pop ##### -->
2535 <para>
2536
2537 </para>
2538
2539 @ps: 
2540 @name: 
2541 @ddt: 
2542
2543 <!-- ##### FUNCTION gras_dd_cbps_push ##### -->
2544 <para>
2545
2546 </para>
2547
2548 @ps: 
2549 @name: 
2550 @data: 
2551 @ddt: 
2552
2553 <!-- ##### FUNCTION gras_dd_cbps_set ##### -->
2554 <para>
2555
2556 </para>
2557
2558 @ps: 
2559 @name: 
2560 @data: 
2561 @ddt: 
2562
2563 <!-- ##### FUNCTION gras_ddt_free ##### -->
2564 <para>
2565
2566 </para>
2567
2568 @type: 
2569
2570 <!-- ##### FUNCTION gras_ddt_get_by_code ##### -->
2571 <para>
2572
2573 </para>
2574
2575 @code: 
2576 @type: 
2577 @Returns: 
2578
2579 <!-- ##### FUNCTION gras_ddt_get_by_name ##### -->
2580 <para>
2581
2582 </para>
2583
2584 @name: 
2585 @type: 
2586 @Returns: 
2587
2588 <!-- ##### FUNCTION gras_ddt_new_array ##### -->
2589 <para>
2590
2591 </para>
2592
2593 @name: 
2594 @element_type: 
2595 @fixed_size: 
2596 @dynamic_size: 
2597 @post: 
2598 @dst: 
2599 @Returns: 
2600
2601 <!-- ##### FUNCTION gras_ddt_new_from_nws ##### -->
2602 <para>
2603
2604 </para>
2605
2606 @name: 
2607 @desc: 
2608 @howmany: 
2609 @dst: 
2610 @Returns: 
2611
2612 <!-- ##### FUNCTION gras_ddt_new_ignored ##### -->
2613 <para>
2614
2615 </para>
2616
2617 @name: 
2618 @default_value: 
2619 @free_func: 
2620 @size: 
2621 @alignment: 
2622 @post: 
2623 @dst: 
2624 @Returns: 
2625
2626 <!-- ##### FUNCTION gras_ddt_new_parse ##### -->
2627 <para>
2628
2629 </para>
2630
2631 @name: 
2632 @C_definition: 
2633 @dst: 
2634 @Returns: 
2635
2636 <!-- ##### FUNCTION gras_ddt_new_ref ##### -->
2637 <para>
2638
2639 </para>
2640
2641 @name: 
2642 @referenced_type: 
2643 @discriminant: 
2644 @post: 
2645 @dst: 
2646 @Returns: 
2647
2648 <!-- ##### FUNCTION gras_ddt_new_scalar ##### -->
2649 <para>
2650
2651 </para>
2652
2653 @name: 
2654 @type: 
2655 @Returns: 
2656
2657 <!-- ##### FUNCTION gras_ddt_new_struct ##### -->
2658 <para>
2659
2660 </para>
2661
2662 @name: 
2663 @pre: 
2664 @post: 
2665 @dst: 
2666 @Returns: 
2667
2668 <!-- ##### FUNCTION gras_ddt_new_struct_append ##### -->
2669 <para>
2670
2671 </para>
2672
2673 @struct_type: 
2674 @name: 
2675 @field_type: 
2676 @pre: 
2677 @post: 
2678 @Returns: 
2679
2680 <!-- ##### FUNCTION gras_ddt_new_union ##### -->
2681 <para>
2682
2683 </para>
2684
2685 @name: 
2686 @field_count: 
2687 @post: 
2688 @dst: 
2689 @Returns: 
2690
2691 <!-- ##### FUNCTION gras_ddt_new_union_append ##### -->
2692 <para>
2693
2694 </para>
2695
2696 @union_type: 
2697 @name: 
2698 @field_type: 
2699 @pre: 
2700 @post: 
2701 @Returns: 
2702
2703 <!-- ##### FUNCTION gras_ddt_register ##### -->
2704 <para>
2705
2706 </para>
2707
2708 @type: 
2709 @Returns: 
2710
2711 <!-- ##### FUNCTION gras_dict_cursor_free ##### -->
2712 <para>
2713
2714 </para>
2715
2716 @cursor: 
2717 @Returns: 
2718
2719 <!-- ##### FUNCTION gras_dict_cursor_get_data ##### -->
2720 <para>
2721
2722 </para>
2723
2724 @cursor: 
2725 @data: 
2726 @Returns: 
2727
2728 <!-- ##### FUNCTION gras_dict_cursor_get_key ##### -->
2729 <para>
2730
2731 </para>
2732
2733 @cursor: 
2734 @key: 
2735 @Returns: 
2736
2737 <!-- ##### FUNCTION gras_dict_cursor_new ##### -->
2738 <para>
2739
2740 </para>
2741
2742 @head: 
2743 @Returns: 
2744 @cursor: 
2745
2746 <!-- ##### FUNCTION gras_dict_cursor_next ##### -->
2747 <para>
2748
2749 </para>
2750
2751 @cursor: 
2752 @Returns: 
2753
2754 <!-- ##### FUNCTION gras_dict_cursor_rewind ##### -->
2755 <para>
2756
2757 </para>
2758
2759 @cursor: 
2760 @Returns: 
2761
2762 <!-- ##### FUNCTION gras_dict_dump ##### -->
2763 <para>
2764
2765 </para>
2766
2767 @head: 
2768 @output: 
2769 @Returns: 
2770
2771 <!-- ##### MACRO gras_dict_foreach ##### -->
2772 <para>
2773
2774 </para>
2775
2776 @dict: 
2777 @cursor: 
2778 @key: 
2779 @data: 
2780
2781 <!-- ##### FUNCTION gras_dict_free ##### -->
2782 <para>
2783
2784 </para>
2785
2786 @dict: 
2787 @Returns: 
2788
2789 <!-- ##### FUNCTION gras_dict_get ##### -->
2790 <para>
2791
2792 </para>
2793
2794 @head: 
2795 @key: 
2796 @data: 
2797 @Returns: 
2798
2799 <!-- ##### FUNCTION gras_dict_get_ext ##### -->
2800 <para>
2801
2802 </para>
2803
2804 @head: 
2805 @key: 
2806 @key_len: 
2807 @data: 
2808 @Returns: 
2809
2810 <!-- ##### FUNCTION gras_dict_insert ##### -->
2811 <para>
2812
2813 </para>
2814
2815 @head: 
2816 @key: 
2817 @data: 
2818 @free_ctn: 
2819 @Returns: 
2820
2821 <!-- ##### FUNCTION gras_dict_insert_ext ##### -->
2822 <para>
2823
2824 </para>
2825
2826 @head: 
2827 @key: 
2828 @key_len: 
2829 @data: 
2830 @free_ctn: 
2831 @Returns: 
2832
2833 <!-- ##### FUNCTION gras_dict_new ##### -->
2834 <para>
2835
2836 </para>
2837
2838 @Returns: 
2839 @dict: 
2840
2841 <!-- ##### FUNCTION gras_dict_print ##### -->
2842 <para>
2843
2844 </para>
2845
2846 @data: 
2847
2848 <!-- ##### FUNCTION gras_dict_prints ##### -->
2849 <para>
2850
2851 </para>
2852
2853 @data: 
2854
2855 <!-- ##### FUNCTION gras_dict_remove ##### -->
2856 <para>
2857
2858 </para>
2859
2860 @head: 
2861 @key: 
2862 @Returns: 
2863
2864 <!-- ##### FUNCTION gras_dict_remove_ext ##### -->
2865 <para>
2866
2867 </para>
2868
2869 @head: 
2870 @key: 
2871 @key_len: 
2872 @Returns: 
2873
2874 <!-- ##### FUNCTION gras_dict_retrieve ##### -->
2875 <para>
2876
2877 </para>
2878
2879 @head: 
2880 @key: 
2881 @data: 
2882 @Returns: 
2883
2884 <!-- ##### FUNCTION gras_dict_retrieve_ext ##### -->
2885 <para>
2886
2887 </para>
2888
2889 @head: 
2890 @key: 
2891 @key_len: 
2892 @data: 
2893 @Returns: 
2894
2895 <!-- ##### FUNCTION gras_dict_set ##### -->
2896 <para>
2897
2898 </para>
2899
2900 @head: 
2901 @key: 
2902 @data: 
2903 @free_ctn: 
2904 @Returns: 
2905
2906 <!-- ##### FUNCTION gras_dict_set_ext ##### -->
2907 <para>
2908
2909 </para>
2910
2911 @head: 
2912 @key: 
2913 @key_len: 
2914 @data: 
2915 @free_ctn: 
2916 @Returns: 
2917
2918 <!-- ##### FUNCTION gras_dynar_cursor_first ##### -->
2919 <para>
2920
2921 </para>
2922
2923 @dynar: 
2924 @cursor: 
2925
2926 <!-- ##### FUNCTION gras_dynar_cursor_get ##### -->
2927 <para>
2928
2929 </para>
2930
2931 @dynar: 
2932 @cursor: 
2933 @whereto: 
2934 @Returns: 
2935
2936 <!-- ##### FUNCTION gras_dynar_cursor_rm ##### -->
2937 <para>
2938
2939 </para>
2940
2941 @dynar: 
2942 @cursor: 
2943
2944 <!-- ##### FUNCTION gras_dynar_cursor_step ##### -->
2945 <para>
2946
2947 </para>
2948
2949 @dynar: 
2950 @cursor: 
2951
2952 <!-- ##### FUNCTION gras_dynar_first ##### -->
2953 <para>
2954
2955 </para>
2956
2957 @dynar: 
2958 @cursor: 
2959 @Returns: 
2960
2961 <!-- ##### MACRO gras_dynar_foreach ##### -->
2962 <para>
2963
2964 </para>
2965
2966 @_dynar: 
2967 @_cursor: 
2968 @_data: 
2969 @_whereto: 
2970
2971 <!-- ##### FUNCTION gras_dynar_free ##### -->
2972 <para>
2973
2974 </para>
2975
2976 @dynar: 
2977 @Returns: 
2978
2979 <!-- ##### FUNCTION gras_dynar_free_container ##### -->
2980 <para>
2981
2982 </para>
2983
2984 @dynar: 
2985 @Returns: 
2986
2987 <!-- ##### FUNCTION gras_dynar_get ##### -->
2988 <para>
2989
2990 </para>
2991
2992 @dynar: 
2993 @idx: 
2994 @dst: 
2995 @whereto: 
2996 @Returns: 
2997
2998 <!-- ##### FUNCTION gras_dynar_insert_at ##### -->
2999 <para>
3000
3001 </para>
3002
3003 @dynar: 
3004 @idx: 
3005 @src: 
3006 @Returns: 
3007 @object: 
3008
3009 <!-- ##### FUNCTION gras_dynar_length ##### -->
3010 <para>
3011
3012 </para>
3013
3014 @dynar: 
3015 @Returns: 
3016
3017 <!-- ##### FUNCTION gras_dynar_map ##### -->
3018 <para>
3019
3020 </para>
3021
3022 @dynar: 
3023 @operator: 
3024 @Returns: 
3025
3026 <!-- ##### FUNCTION gras_dynar_new ##### -->
3027 <para>
3028
3029 </para>
3030
3031 @Param1: 
3032 @free_func: 
3033 @Returns: 
3034 @whereto: 
3035 @elm_size: 
3036
3037 <!-- ##### FUNCTION gras_dynar_next ##### -->
3038 <para>
3039
3040 </para>
3041
3042 @dynar: 
3043 @cursor: 
3044 @whereto: 
3045 @Returns: 
3046
3047 <!-- ##### FUNCTION gras_dynar_pop ##### -->
3048 <para>
3049
3050 </para>
3051
3052 @dynar: 
3053 @dst: 
3054 @whereto: 
3055
3056 <!-- ##### FUNCTION gras_dynar_push ##### -->
3057 <para>
3058
3059 </para>
3060
3061 @dynar: 
3062 @src: 
3063 @Returns: 
3064 @object: 
3065
3066 <!-- ##### FUNCTION gras_dynar_remove_at ##### -->
3067 <para>
3068
3069 </para>
3070
3071 @dynar: 
3072 @idx: 
3073 @object: 
3074 @Returns: 
3075
3076 <!-- ##### FUNCTION gras_dynar_remplace ##### -->
3077 <para>
3078
3079 </para>
3080
3081 @dynar: 
3082 @idx: 
3083 @object: 
3084 @Returns: 
3085
3086 <!-- ##### FUNCTION gras_dynar_reset ##### -->
3087 <para>
3088
3089 </para>
3090
3091 @dynar: 
3092 @Returns: 
3093
3094 <!-- ##### FUNCTION gras_dynar_set ##### -->
3095 <para>
3096
3097 </para>
3098
3099 @dynar: 
3100 @idx: 
3101 @src: 
3102 @Returns: 
3103 @object: 
3104
3105 <!-- ##### FUNCTION gras_dynar_shift ##### -->
3106 <para>
3107
3108 </para>
3109
3110 @dynar: 
3111 @dst: 
3112 @whereto: 
3113 @Returns: 
3114
3115 <!-- ##### FUNCTION gras_dynar_unshift ##### -->
3116 <para>
3117
3118 </para>
3119
3120 @dynar: 
3121 @src: 
3122 @Returns: 
3123 @object: 
3124
3125 <!-- ##### ENUM gras_error_t ##### -->
3126 <para>
3127
3128 </para>
3129
3130 @no_error: no error
3131 @mismatch_error: Not found
3132 @system_error: a syscall did fail
3133 @network_error: error while sending/receiving data
3134 @timeout_error: not quick enough, dude
3135 @thread_error: error while [un]locking
3136 @unknown_error: no idea
3137
3138 <!-- ##### FUNCTION gras_lock ##### -->
3139 <para>
3140
3141 </para>
3142
3143 @Returns: 
3144
3145 <!-- ##### FUNCTION gras_log_appender_set ##### -->
3146 <para>
3147
3148 </para>
3149
3150 @cat: 
3151 @app: 
3152
3153 <!-- ##### FUNCTION gras_log_control_set ##### -->
3154 <para>
3155
3156 </para>
3157
3158 @cs: 
3159 @Returns: 
3160
3161 <!-- ##### VARIABLE gras_log_default_appender ##### -->
3162 <para>
3163
3164 </para>
3165
3166
3167 <!-- ##### FUNCTION gras_log_parent_set ##### -->
3168 <para>
3169
3170 </para>
3171
3172 @cat: 
3173 @parent: 
3174
3175 <!-- ##### ENUM gras_log_priority_t ##### -->
3176 <para>
3177
3178 </para>
3179
3180 @gras_log_priority_none: 
3181 @gras_log_priority_trace: 
3182 @gras_log_priority_debug: 
3183 @gras_log_priority_verbose: 
3184 @gras_log_priority_info: 
3185 @gras_log_priority_warning: 
3186 @gras_log_priority_error: 
3187 @gras_log_priority_critical: 
3188 @gras_log_priority_infinite: 
3189 @gras_log_priority_uninitialized: 
3190
3191 <!-- ##### FUNCTION gras_log_threshold_set ##### -->
3192 <para>
3193
3194 </para>
3195
3196 @cat: 
3197 @thresholdPriority: 
3198
3199 <!-- ##### FUNCTION gras_msg_discard ##### -->
3200 <para>
3201
3202 </para>
3203
3204 @sd: 
3205 @size: 
3206
3207 <!-- ##### FUNCTION gras_msg_free ##### -->
3208 <para>
3209
3210 </para>
3211
3212 @msg: 
3213
3214 <!-- ##### FUNCTION gras_msg_new ##### -->
3215 <para>
3216
3217 </para>
3218
3219 @msgId: 
3220 @free_data_on_free: 
3221 @seqCount: 
3222 @Varargs: 
3223 @Returns: 
3224
3225 <!-- ##### FUNCTION gras_msgtype_register ##### -->
3226 <para>
3227
3228 </para>
3229
3230 @msgId: 
3231 @name: 
3232 @sequence_count: 
3233 @Varargs: 
3234 @Returns: 
3235
3236 <!-- ##### FUNCTION gras_set_add ##### -->
3237 <para>
3238
3239 </para>
3240
3241 @set: 
3242 @elm: 
3243 @free_func: 
3244 @Returns: 
3245
3246 <!-- ##### MACRO gras_set_foreach ##### -->
3247 <para>
3248
3249 </para>
3250
3251 @set: 
3252 @cursor: 
3253 @elm: 
3254
3255 <!-- ##### FUNCTION gras_set_free ##### -->
3256 <para>
3257
3258 </para>
3259
3260 @set: 
3261
3262 <!-- ##### FUNCTION gras_set_get_by_id ##### -->
3263 <para>
3264
3265 </para>
3266
3267 @set: 
3268 @id: 
3269 @dst: 
3270 @Returns: 
3271
3272 <!-- ##### FUNCTION gras_set_get_by_name ##### -->
3273 <para>
3274
3275 </para>
3276
3277 @set: 
3278 @key: 
3279 @dst: 
3280 @Returns: 
3281
3282 <!-- ##### FUNCTION gras_set_get_by_name_ext ##### -->
3283 <para>
3284
3285 </para>
3286
3287 @set: 
3288 @name: 
3289 @name_len: 
3290 @dst: 
3291 @Returns: 
3292
3293 <!-- ##### FUNCTION gras_set_new ##### -->
3294 <para>
3295
3296 </para>
3297
3298 @Returns: 
3299 @dst: 
3300
3301 <!-- ##### FUNCTION gras_sleep ##### -->
3302 <para>
3303
3304 </para>
3305
3306 @Param1: 
3307 @Param2: 
3308
3309 <!-- ##### FUNCTION gras_sock_client_open ##### -->
3310 <para>
3311
3312 </para>
3313
3314 @host: 
3315 @Param2: 
3316 @sock: 
3317 @Returns: 
3318
3319 <!-- ##### FUNCTION gras_sock_close ##### -->
3320 <para>
3321
3322 </para>
3323
3324 @sock: 
3325 @Returns: 
3326
3327 <!-- ##### FUNCTION gras_sock_get_peer_addr ##### -->
3328 <para>
3329
3330 </para>
3331
3332 @sd: 
3333 @Returns: 
3334
3335 <!-- ##### FUNCTION gras_sock_get_peer_name ##### -->
3336 <para>
3337
3338 </para>
3339
3340 @sd: 
3341 @Returns: 
3342
3343 <!-- ##### FUNCTION gras_sock_server_open ##### -->
3344 <para>
3345
3346 </para>
3347
3348 @Param1: 
3349 @Param2: 
3350 @sock: 
3351 @Returns: 
3352
3353 <!-- ##### FUNCTION gras_time ##### -->
3354 <para>
3355
3356 </para>
3357
3358 @Returns: 
3359
3360 <!-- ##### FUNCTION gras_unlock ##### -->
3361 <para>
3362
3363 </para>
3364
3365 @Returns: 
3366