+/*
+ * do_loadFile: Load result set from file
+ */
+
+static int do_loadFile (void *o, Tcl_Interp *interp,
+ int argc, char **argv)
+{
+ IRSetObj *setobj = o;
+ FILE *inf;
+ int no = 1;
+ const char *buf;
+
+ if (argc < 3)
+ {
+ interp->result = "wrong # args";
+ return TCL_ERROR;
+ }
+ inf = fopen (argv[2], "r");
+ if (!inf)
+ {
+ Tcl_AppendResult (interp, "Cannot open ", argv[2], NULL);
+ return TCL_ERROR;
+ }
+ while ((buf = iso2709_read (inf)))
+ {
+ IRRecordList *rl;
+ Iso2709Rec rec;
+
+ rec = iso2709_cvt (buf);
+ if (!rec)
+ break;
+ for (rl = setobj->record_list; rl; rl = rl->next)
+ {
+ if (no == rl->no)
+ {
+ if (rl->which == Z_NamePlusRecord_databaseRecord)
+ iso2709_rm (rl->u.marc.rec);
+ break;
+ }
+ }
+ if (!rl)
+ {
+ rl = malloc (sizeof(*rl));
+ assert (rl);
+ rl->next = setobj->record_list;
+ rl->no = no;
+ setobj->record_list = rl;
+ }
+ rl->which = Z_NamePlusRecord_databaseRecord;
+ rl->u.marc.rec = rec;
+ no++;
+ }
+ setobj->numberOfRecordsReturned = no-1;
+ fclose (inf);
+ return TCL_OK;
+}
+
+