+ Tcl_AppendResult (interp, "No Diagnostic record at #", argv[2], NULL);
+ return TCL_ERROR;
+ }
+ sprintf (buf, "%d ", rl->u.diag.code);
+ Tcl_AppendResult (interp, buf, NULL);
+ if (rl->u.diag.add_info)
+ Tcl_AppendElement (interp, rl->u.diag.add_info);
+ else
+ Tcl_AppendElement (interp, "");
+ return TCL_OK;
+}
+
+/*
+ * do_recordMarc: Get ISO2709 Record lines/fields
+ */
+static int do_recordMarc (void *o, Tcl_Interp *interp, int argc, char **argv)
+{
+ IRSetObj *obj = o;
+ int offset;
+ IRRecordList *rl;
+
+ if (argc < 4)
+ {
+ sprintf (interp->result, "wrong # args");
+ return TCL_ERROR;
+ }
+ if (Tcl_GetInt (interp, argv[2], &offset)==TCL_ERROR)
+ return TCL_ERROR;
+ for (rl = obj->record_list; rl; rl = rl->next)
+ if (rl->no == offset)
+ break;
+ if (!rl)
+ {
+ Tcl_AppendResult (interp, "No record at #", argv[2], NULL);
+ return TCL_ERROR;
+ }
+ if (rl->which != Z_NamePlusRecord_databaseRecord)
+ {
+ Tcl_AppendResult (interp, "No MARC record at #", argv[2], NULL);
+ return TCL_ERROR;
+ }
+ if (!strcmp (argv[3], "field"))
+ return get_marc_fields (interp, rl->u.marc.rec, argc, argv);
+ else if (!strcmp (argv[3], "line"))
+ return get_marc_lines (interp, rl->u.marc.rec, argc, argv);
+ else
+ {
+ Tcl_AppendResult (interp, "field/line expected", NULL);