-# if ( !defined($req_form) || ( $req_form eq &Net::Z3950::OID::xml ) )
- if (0)
- { ## XML records
- $this->{REP_FORM} = &Net::Z3950::OID::xml;
- $this->{RECORD} = '<xml>FIXME: not implementd</xml>';
- }
- elsif ( $req_form eq &Net::Z3950::OID::unimarc ) { # FIXME convert to usmarc
- $this->{REP_FORM} = &Net::Z3950::OID::unimarc;
- $this->{RECORD} = COBISS->fetch_marc;
- }
- else { ## Unsupported record format
- $this->{ERR_CODE} = 239;
- $this->{ERR_STR} = $req_form;
+ $self->{BASENAME} = $rs->{database};
+
+ my $format =
+ $req_form eq Net::Z3950::OID::xml() ? 'xml' :
+ $req_form eq Net::Z3950::OID::unimarc() ? 'unimarc' :
+ $req_form eq Net::Z3950::OID::usmarc() ? 'marc' : # XXX usmarc -> marc
+ die "unknown format $req_form";
+
+ if ( ! $format ) {
+ warn "ERROR: $req_form format not supported";
+ $self->{ERR_CODE} = 239; ## Unsupported record format
+ $self->{ERR_STR} = $req_form;
+ return;
+ }
+
+ $self->{REP_FORM} = $req_form;
+
+ my $from = $rs->{from} || die "no from?";
+ # fetch records up to offset
+ while( $#{ $rs->{results} } < $offset ) {
+ my $marc = $from->next_marc;
+ last if ! $marc; # abort results
+ push @{ $rs->{results} }, $marc;
+ warn "# rs result ", $#{ $rs->{results} },"\n";
+ }
+
+ my $id = $rs->{results}->[$offset] || die "no id for record $offset in ",Dumper( $rs->{results} );
+
+ my $path = 'marc/' . $rs->{database} . "/$id.$format";
+ if ( ! -e $path ) {
+ warn "ERROR: $path not found";
+ ## Unsupported record format
+ $self->{ERR_CODE} = 239;
+ $self->{ERR_STR} = $req_form;