2 * IR toolkit for tcl/tk
4 * See the file LICENSE for details.
5 * Sebastian Hammer, Adam Dickmeiss
8 * Revision 1.2 1995-09-20 11:37:01 adam
9 * Configure searches for tk4.1 and tk7.5.
12 * Revision 1.1 1995/08/29 15:38:34 adam
13 * Added grs.c. new version.
24 void ir_tcl_read_grs (Z_GenericRecord *r, IrTcl_GRS_Record **grs_record)
27 struct GRS_Record_entry *e;
32 *grs_record = ir_tcl_malloc (sizeof(**grs_record));
33 if (!((*grs_record)->noTags = r->num_elements))
35 (*grs_record)->entries = NULL;
38 e = (*grs_record)->entries = ir_tcl_malloc (r->num_elements *
40 for (i = 0; i < r->num_elements; i++, e++)
46 e->tagType = *t->tagType;
49 e->tagWhich = t->tagValue->which;
50 if (t->tagValue->which == Z_StringOrNumeric_numeric)
51 e->tagVal.num = *t->tagValue->u.numeric;
53 ir_tcl_strdup (NULL, &e->tagVal.str, t->tagValue->u.string);
54 e->dataWhich = t->content->which;
56 switch (t->content->which)
58 case Z_ElementData_octets:
59 e->tagData.octets.len = t->content->u.octets->len;
60 e->tagData.octets.buf = ir_tcl_malloc (t->content->u.octets->len);
61 memcpy (e->tagData.octets.buf, t->content->u.octets->buf,
62 t->content->u.octets->len);
64 case Z_ElementData_numeric:
65 e->tagData.num = *t->content->u.numeric;
67 case Z_ElementData_date:
68 ir_tcl_strdup (NULL, &e->tagData.str, t->content->u.string);
70 case Z_ElementData_ext:
72 case Z_ElementData_string:
73 ir_tcl_strdup (NULL, &e->tagData.str, t->content->u.string);
75 case Z_ElementData_trueOrFalse:
76 e->tagData.bool = *t->content->u.trueOrFalse;
78 case Z_ElementData_oid:
80 case Z_ElementData_intUnit:
82 case Z_ElementData_elementNotThere:
83 case Z_ElementData_elementEmpty:
84 case Z_ElementData_noDataRequested:
86 case Z_ElementData_diagnostic:
88 case Z_ElementData_subtree:
89 ir_tcl_read_grs (t->content->u.subtree, &e->tagData.sub);
95 static int ir_tcl_get_grs_r (Tcl_Interp *interp, IrTcl_GRS_Record *grs_record,
96 int argc, char **argv, int argno)
98 static char tmpbuf[32];
100 struct GRS_Record_entry *e = grs_record->entries;
104 for (i = 0; i<grs_record->noTags; i++, e++)
107 Tcl_AppendResult (interp, "{ ", NULL);
108 sprintf (tmpbuf, "%d", e->tagType);
109 Tcl_AppendElement (interp, tmpbuf);
111 if (e->tagWhich == Z_StringOrNumeric_numeric)
113 Tcl_AppendResult (interp, " numeric ", NULL);
114 sprintf (tmpbuf, "%d", e->tagVal.num);
115 Tcl_AppendElement (interp, tmpbuf);
119 Tcl_AppendResult (interp, " string ", NULL);
120 Tcl_AppendElement (interp, e->tagVal.str);
122 switch (e->dataWhich)
124 case Z_ElementData_octets:
125 Tcl_AppendResult (interp, " octets {} ", NULL);
127 case Z_ElementData_numeric:
128 Tcl_AppendResult (interp, " numeric {} ", NULL);
130 case Z_ElementData_date:
131 Tcl_AppendResult (interp, " date {} ", NULL);
133 case Z_ElementData_ext:
134 Tcl_AppendResult (interp, " ext {} ", NULL);
136 case Z_ElementData_string:
137 Tcl_AppendResult (interp, " string ", NULL);
138 Tcl_AppendElement (interp, e->tagData.str );
140 case Z_ElementData_trueOrFalse:
141 Tcl_AppendResult (interp, " bool ",
142 e->tagData.bool ? "1" : "0", " ", NULL);
144 case Z_ElementData_oid:
145 Tcl_AppendResult (interp, " oid {} ", NULL);
147 case Z_ElementData_intUnit:
148 Tcl_AppendResult (interp, " intUnit {} ", NULL);
150 case Z_ElementData_elementNotThere:
151 Tcl_AppendResult (interp, " notThere {} ", NULL);
153 case Z_ElementData_elementEmpty:
154 Tcl_AppendResult (interp, " empty {} ", NULL);
156 case Z_ElementData_noDataRequested:
157 Tcl_AppendResult (interp, " notRequested {} ", NULL);
159 case Z_ElementData_diagnostic:
160 Tcl_AppendResult (interp, " diagnostic {} ", NULL);
162 case Z_ElementData_subtree:
163 Tcl_AppendResult (interp, " subtree { ", NULL);
164 ir_tcl_get_grs_r (interp, e->tagData.sub, argc, argv, argno+1);
165 Tcl_AppendResult (interp, " } ", NULL);
168 Tcl_AppendResult (interp, " } ", NULL);
174 int ir_tcl_get_grs (Tcl_Interp *interp, IrTcl_GRS_Record *grs_record,
175 int argc, char **argv)
177 return ir_tcl_get_grs_r (interp, grs_record, argc, argv, 4);