+sub _list_ap {
+ my($xc, $set) = @_;
+
+ my $expr = 'e:indexInfo/e:index[@search = "true"]/e:map/e:attr[
+ @set = "'.$set.'" and @type = "1"]';
+ my @nodes = $xc->findnodes($expr);
+ return sort { $a <=> $b } map { $_->findvalue(".") } @nodes;
+}
+
+sub calc_boolean {
+ my($id, $xc) = @_;
+
+ ### Note that we are currently interrogating an IRSpy extension.
+ # The standard ZeeRex record should be extended with a
+ # "supports" type for this.
+ my @nodes = $xc->findnodes('i:status/i:boolean[@ok = "1"]');
+ my $res = join(", ", map { $_->findvalue('@operator') } @nodes);
+ $res = "[none]" if $res eq "";
+ return $res;
+}
+
+sub calc_nrs {
+ my($id, $xc) = @_;
+
+ my @nodes = $xc->findnodes('i:status/i:named_resultset[@ok = "1"]');
+ return @nodes ? "Yes" : "No";
+}
+
+sub calc_recsyn {
+ my($id, $xc, $sep) = @_;
+ $sep = ", " if !defined $sep;
+
+ my @nodes = $xc->findnodes('e:recordInfo/e:recordSyntax');
+ my $res = join($sep, map { $_->findvalue('@name') } @nodes);
+ $res = "[none]" if $res eq "";
+ return $res;
+}
+
+sub calc_explain {
+ my($id, $xc) = @_;
+
+ my @nodes = $xc->findnodes('i:status/i:explain[@ok = "1"]');
+ my $res = join(", ", map { $_->findvalue('@category') } @nodes);
+ $res = "[none]" if $res eq "";
+ return $res;
+}