+void ir_tcl_grs_del (IrTcl_GRS_Record **grs_record)
+{
+ struct GRS_Record_entry *e;
+ int i;
+
+ while (!*grs_record)
+ return;
+ e = (*grs_record)->entries;
+ for (i = 0; i < (*grs_record)->noTags; i++, e++)
+ {
+ switch (e->tagType)
+ {
+ case Z_StringOrNumeric_numeric:
+ break;
+ default:
+ free (e->tagVal.str);
+ }
+ switch (e->dataWhich)
+ {
+ case Z_ElementData_octets:
+ free (e->tagData.octets.buf);
+ break;
+ case Z_ElementData_numeric:
+ break;
+ case Z_ElementData_date:
+ free (e->tagData.str);
+ break;
+ case Z_ElementData_ext:
+ break;
+ case Z_ElementData_string:
+ free (e->tagData.str);
+ break;
+ case Z_ElementData_trueOrFalse:
+ case Z_ElementData_oid:
+ case Z_ElementData_intUnit:
+ case Z_ElementData_elementNotThere:
+ case Z_ElementData_elementEmpty:
+ case Z_ElementData_noDataRequested:
+ case Z_ElementData_diagnostic:
+ break;
+ case Z_ElementData_subtree:
+ ir_tcl_grs_del (&e->tagData.sub);
+ break;
+ }
+ }
+ free ((*grs_record)->entries);
+ free (*grs_record);
+ *grs_record = NULL;
+}
+
+void ir_tcl_grs_mk (Z_GenericRecord *r, IrTcl_GRS_Record **grs_record)