+ LIST_LINK_TAIL(outstanding,qun);
+}
+
+static void print_withspace(const char *str) {
+ if (printf("%s ", str) == EOF) outerr();
+}
+
+static void print_ttl(struct query_node *qun, adns_answer *answer) {
+ unsigned long ttl;
+ time_t now;
+
+ switch (qun->pqfr.ttl) {
+ case tm_none:
+ return;
+ case tm_rel:
+ if (time(&now) == (time_t)-1) sysfail("get current time",errno);
+ ttl= answer->expires < now ? 0 : answer->expires - now;
+ break;
+ case tm_abs:
+ ttl= answer->expires;
+ break;
+ default:
+ abort();
+ }
+ if (printf("%lu ",ttl) == EOF) outerr();
+}
+
+static void print_owner_ttl(struct query_node *qun, adns_answer *answer) {
+ if (qun->pqfr.show_owner) print_withspace(answer->owner);
+ print_ttl(qun,answer);
+}
+
+static void print_status(adns_status st, struct query_node *qun, adns_answer *answer) {
+ int stnmin, stnmax, stn;
+ const char *statusabbrev, *statusstring;
+
+ stnmin= 0;
+ stnmax= sizeof(statustypemaxes)/sizeof(statustypemaxes[0]);
+ while (stnmin < stnmax) {
+ stn= (stnmin+stnmax)>>1;
+ if (st > statustypemaxes[stn].smax) stnmin= stn+1; else stnmax= stn;
+ }
+ stn= stnmin;
+ assert(statustypemaxes[stn].smax >= st);
+
+ if (rcode < stn) rcode= stn;
+
+ statusabbrev= adns_errabbrev(st);
+ statusstring= adns_strerror(st);
+ assert(!strchr(statusstring,'"'));
+
+ if (printf("%s %d %s ", statustypemaxes[stn].abbrev, st, statusabbrev)
+ == EOF) outerr();
+ print_owner_ttl(qun,answer);
+ if (qun->pqfr.show_cname)
+ print_withspace(answer->cname ? answer->cname : "$");
+ if (printf("\"%s\"\n", statusstring) == EOF) outerr();