+ bless $thing, $class;
+ return $thing;
+}
+
+# send it out in the format asked for, if available
+sub send
+{
+ my $thing = shift;
+ my $dxchan = shift;
+ my $class;
+ if (@_) {
+ $class = shift;
+ } elsif ($dxchan->isa('DXChannel')) {
+ $class = ref $dxchan;
+ }
+
+ # do output filtering
+ if ($thing->can('out_filter')) {
+ return unless $thing->out_filter;
+ }
+
+ # generate the line which may (or not) be cached
+ my @out;
+ if (my $ref = $thing->{class}) {
+ push @out, ref $ref ? @$ref : $ref;
+ } else {
+ no strict 'refs';
+ my $sub = "gen_$class";
+ push @out, $thing->$sub($dxchan) if $thing->can($sub);
+ }
+ $dxchan->send(@out) if @out;