|
Packit |
89ede9 |
/*
|
|
Packit |
89ede9 |
* isiout.c
|
|
Packit |
89ede9 |
*
|
|
Packit |
89ede9 |
* Copyright (c) Chris Putnam 2008-2018
|
|
Packit |
89ede9 |
*
|
|
Packit |
89ede9 |
* Source code released under the GPL version 2
|
|
Packit |
89ede9 |
*
|
|
Packit |
89ede9 |
*/
|
|
Packit |
89ede9 |
#include <stdio.h>
|
|
Packit |
89ede9 |
#include <stdlib.h>
|
|
Packit |
89ede9 |
#include <string.h>
|
|
Packit |
89ede9 |
#include <ctype.h>
|
|
Packit |
89ede9 |
#include "utf8.h"
|
|
Packit |
89ede9 |
#include "str.h"
|
|
Packit |
89ede9 |
#include "strsearch.h"
|
|
Packit |
89ede9 |
#include "fields.h"
|
|
Packit |
89ede9 |
#include "title.h"
|
|
Packit |
89ede9 |
#include "bibutils.h"
|
|
Packit |
89ede9 |
#include "bibformats.h"
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
static int isiout_write( fields *info, FILE *fp, param *p, unsigned long refnum );
|
|
Packit |
89ede9 |
static void isiout_writeheader( FILE *outptr, param *p );
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
void
|
|
Packit |
89ede9 |
isiout_initparams( param *p, const char *progname )
|
|
Packit |
89ede9 |
{
|
|
Packit |
89ede9 |
p->writeformat = BIBL_ISIOUT;
|
|
Packit |
89ede9 |
p->format_opts = 0;
|
|
Packit |
89ede9 |
p->charsetout = BIBL_CHARSET_DEFAULT;
|
|
Packit |
89ede9 |
p->charsetout_src = BIBL_SRC_DEFAULT;
|
|
Packit |
89ede9 |
p->latexout = 0;
|
|
Packit |
89ede9 |
p->utf8out = BIBL_CHARSET_UTF8_DEFAULT;
|
|
Packit |
89ede9 |
p->utf8bom = BIBL_CHARSET_BOM_DEFAULT;
|
|
Packit |
89ede9 |
p->xmlout = BIBL_XMLOUT_FALSE;
|
|
Packit |
89ede9 |
p->nosplittitle = 0;
|
|
Packit |
89ede9 |
p->verbose = 0;
|
|
Packit |
89ede9 |
p->addcount = 0;
|
|
Packit |
89ede9 |
p->singlerefperfile = 0;
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
if ( p->charsetout == BIBL_CHARSET_UNICODE ) {
|
|
Packit |
89ede9 |
p->utf8out = p->utf8bom = 1;
|
|
Packit |
89ede9 |
}
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
p->headerf = isiout_writeheader;
|
|
Packit |
89ede9 |
p->footerf = NULL;
|
|
Packit |
89ede9 |
p->writef = isiout_write;
|
|
Packit |
89ede9 |
}
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
enum {
|
|
Packit |
89ede9 |
TYPE_UNKNOWN = 0,
|
|
Packit |
89ede9 |
TYPE_ARTICLE = 1,
|
|
Packit |
89ede9 |
TYPE_INBOOK = 2,
|
|
Packit |
89ede9 |
TYPE_BOOK = 3,
|
|
Packit |
89ede9 |
};
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
static int
|
|
Packit |
89ede9 |
get_type( fields *in )
|
|
Packit |
89ede9 |
{
|
|
Packit |
89ede9 |
int type = TYPE_UNKNOWN, i, n, level;
|
|
Packit |
89ede9 |
char *tag, *value;
|
|
Packit |
89ede9 |
n = fields_num( in );
|
|
Packit |
89ede9 |
for ( i=0; i
|
|
Packit |
89ede9 |
tag = fields_tag( in, i, FIELDS_CHRP );
|
|
Packit |
89ede9 |
if ( strcasecmp( tag, "GENRE:MARC" ) &&
|
|
Packit |
89ede9 |
strcasecmp( tag, "GENRE:BIBUTILS" ) &&
|
|
Packit |
89ede9 |
strcasecmp( tag, "GENRE:UNKNOWN" ) ) continue;
|
|
Packit |
89ede9 |
value = fields_value( in, i, FIELDS_CHRP );
|
|
Packit |
89ede9 |
level = fields_level( in, i );
|
|
Packit |
89ede9 |
if ( !strcasecmp( value, "periodical" ) ||
|
|
Packit |
89ede9 |
!strcasecmp( value, "academic journal" ) ||
|
|
Packit |
89ede9 |
!strcasecmp( value, "journal article" ) ) {
|
|
Packit |
89ede9 |
type = TYPE_ARTICLE;
|
|
Packit |
89ede9 |
} else if ( !strcasecmp( value, "book" ) ) {
|
|
Packit |
89ede9 |
if ( level==0 ) type=TYPE_BOOK;
|
|
Packit |
89ede9 |
else type=TYPE_INBOOK;
|
|
Packit |
89ede9 |
} else if ( !strcasecmp( value, "book chapter" ) ) {
|
|
Packit |
89ede9 |
type = TYPE_INBOOK;
|
|
Packit |
89ede9 |
}
|
|
Packit |
89ede9 |
}
|
|
Packit |
89ede9 |
return type;
|
|
Packit |
89ede9 |
}
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
static void
|
|
Packit |
89ede9 |
append_type( int type, fields *out, int *status )
|
|
Packit |
89ede9 |
{
|
|
Packit |
89ede9 |
int fstatus;
|
|
Packit |
89ede9 |
char *s;
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
if ( type==TYPE_ARTICLE ) s = "Journal";
|
|
Packit |
89ede9 |
else if ( type==TYPE_INBOOK ) s = "Chapter";
|
|
Packit |
89ede9 |
else if ( type==TYPE_BOOK ) s = "Book";
|
|
Packit |
89ede9 |
else s = "Unknown";
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
fstatus = fields_add( out, "PT", s, LEVEL_MAIN );
|
|
Packit |
89ede9 |
if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
|
|
Packit |
89ede9 |
}
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
static void
|
|
Packit |
89ede9 |
append_titlecore( fields *in, char *isitag, int level, char *maintag, char *subtag, fields *out, int *status )
|
|
Packit |
89ede9 |
{
|
|
Packit |
89ede9 |
str *mainttl = fields_findv( in, level, FIELDS_STRP, maintag );
|
|
Packit |
89ede9 |
str *subttl = fields_findv( in, level, FIELDS_STRP, subtag );
|
|
Packit |
89ede9 |
str fullttl;
|
|
Packit |
89ede9 |
int fstatus;
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
str_init( &fullttl );
|
|
Packit |
89ede9 |
title_combine( &fullttl, mainttl, subttl );
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
if ( str_memerr( &fullttl ) ) {
|
|
Packit |
89ede9 |
*status = BIBL_ERR_MEMERR;
|
|
Packit |
89ede9 |
goto out;
|
|
Packit |
89ede9 |
}
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
if ( str_has_value( &fullttl ) ) {
|
|
Packit |
89ede9 |
fstatus = fields_add( out, isitag, str_cstr( &fullttl ), LEVEL_MAIN );
|
|
Packit |
89ede9 |
if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
|
|
Packit |
89ede9 |
}
|
|
Packit |
89ede9 |
out:
|
|
Packit |
89ede9 |
str_free( &fullttl );
|
|
Packit |
89ede9 |
}
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
static void
|
|
Packit |
89ede9 |
append_title( fields *in, char *isitag, int level, fields *out, int *status )
|
|
Packit |
89ede9 |
{
|
|
Packit |
89ede9 |
append_titlecore( in, isitag, level, "TITLE", "SUBTITLE", out, status );
|
|
Packit |
89ede9 |
}
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
static void
|
|
Packit |
89ede9 |
append_abbrtitle( fields *in, char *isitag, int level, fields *out, int *status )
|
|
Packit |
89ede9 |
{
|
|
Packit |
89ede9 |
append_titlecore( in, isitag, level, "SHORTTITLE", "SHORTSUBTITLE", out, status );
|
|
Packit |
89ede9 |
}
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
static void
|
|
Packit |
89ede9 |
append_keywords( fields *in, fields *out, int *status )
|
|
Packit |
89ede9 |
{
|
|
Packit |
89ede9 |
vplist_index i;
|
|
Packit |
89ede9 |
str keywords;
|
|
Packit |
89ede9 |
int fstatus;
|
|
Packit |
89ede9 |
vplist kw;
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
str_init( &keywords );
|
|
Packit |
89ede9 |
vplist_init( &kw );
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
fields_findv_each( in, LEVEL_ANY, FIELDS_STRP, &kw, "KEYWORD" );
|
|
Packit |
89ede9 |
if ( kw.n ) {
|
|
Packit |
89ede9 |
for ( i=0; i
|
|
Packit |
89ede9 |
if ( i>0 ) str_strcatc( &keywords, "; " );
|
|
Packit |
89ede9 |
str_strcat( &keywords, (str *) vplist_get( &kw, i ) );
|
|
Packit |
89ede9 |
}
|
|
Packit |
89ede9 |
if ( str_memerr( &keywords ) ) { *status = BIBL_ERR_MEMERR; goto out; }
|
|
Packit |
89ede9 |
fstatus = fields_add( out, "DE", str_cstr( &keywords ), LEVEL_MAIN );
|
|
Packit |
89ede9 |
if ( fstatus!=FIELDS_OK ) { *status = BIBL_ERR_MEMERR; goto out; }
|
|
Packit |
89ede9 |
}
|
|
Packit |
89ede9 |
out:
|
|
Packit |
89ede9 |
vplist_free( &kw );
|
|
Packit |
89ede9 |
str_free( &keywords );
|
|
Packit |
89ede9 |
}
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
static void
|
|
Packit |
89ede9 |
process_person( str *person, char *name )
|
|
Packit |
89ede9 |
{
|
|
Packit |
89ede9 |
str family, given, suffix;
|
|
Packit |
89ede9 |
char *p = name;
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
str_empty( person );
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
strs_init( &family, &given, &suffix, NULL );
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
while ( *p && *p!='|' )
|
|
Packit |
89ede9 |
str_addchar( &family, *p++ );
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
while ( *p=='|' && *(p+1)!='|' ) {
|
|
Packit |
89ede9 |
p++;
|
|
Packit |
89ede9 |
if ( *p!='|' ) str_addchar( &given, *p++ );
|
|
Packit |
89ede9 |
while ( *p && *p!='|' ) p++;
|
|
Packit |
89ede9 |
}
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
if ( *p=='|' && *(p+1)=='|' ) {
|
|
Packit |
89ede9 |
p += 2;
|
|
Packit |
89ede9 |
while ( *p && *p!='|' ) str_addchar( &suffix, *p++ );
|
|
Packit |
89ede9 |
}
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
if ( str_has_value( &family ) ) str_strcat( person, &family );
|
|
Packit |
89ede9 |
if ( str_has_value( &suffix ) ) {
|
|
Packit |
89ede9 |
if ( str_has_value( &family ) ) str_strcatc( person, " " );
|
|
Packit |
89ede9 |
str_strcat( person, &suffix );
|
|
Packit |
89ede9 |
}
|
|
Packit |
89ede9 |
if ( str_has_value( &given ) ) {
|
|
Packit |
89ede9 |
if ( str_has_value( person ) ) str_strcatc( person, ", " );
|
|
Packit |
89ede9 |
str_strcat( person, &given );
|
|
Packit |
89ede9 |
}
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
strs_free( &family, &given, &suffix, NULL );
|
|
Packit |
89ede9 |
}
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
static void
|
|
Packit |
89ede9 |
append_people( fields *f, char *tag, char *isitag, int level, fields *out, int *status )
|
|
Packit |
89ede9 |
{
|
|
Packit |
89ede9 |
vplist_index i;
|
|
Packit |
89ede9 |
vplist people;
|
|
Packit |
89ede9 |
str person;
|
|
Packit |
89ede9 |
int fstatus;
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
str_init( &person );
|
|
Packit |
89ede9 |
vplist_init( &people );
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
fields_findv_each( f, level, FIELDS_CHRP, &people, tag );
|
|
Packit |
89ede9 |
for ( i=0; i
|
|
Packit |
89ede9 |
process_person( &person, (char *)vplist_get( &people, i ) );
|
|
Packit |
89ede9 |
if ( str_memerr( &person ) ) { *status = BIBL_ERR_MEMERR; goto out; }
|
|
Packit |
89ede9 |
if ( i==0 ) fstatus = fields_add_can_dup( out, isitag, str_cstr( &person ), LEVEL_MAIN );
|
|
Packit |
89ede9 |
else fstatus = fields_add_can_dup( out, " ", str_cstr( &person ), LEVEL_MAIN );
|
|
Packit |
89ede9 |
if ( fstatus!=FIELDS_OK ) { *status = BIBL_ERR_MEMERR; goto out; }
|
|
Packit |
89ede9 |
}
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
out:
|
|
Packit |
89ede9 |
vplist_free( &people );
|
|
Packit |
89ede9 |
str_free( &person );
|
|
Packit |
89ede9 |
}
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
static void
|
|
Packit |
89ede9 |
append_easy( fields *in, char *tag, char *isitag, int level, fields *out, int *status )
|
|
Packit |
89ede9 |
{
|
|
Packit |
89ede9 |
char *value;
|
|
Packit |
89ede9 |
int fstatus;
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
value = fields_findv( in, level, FIELDS_CHRP, tag );
|
|
Packit |
89ede9 |
if ( value ) {
|
|
Packit |
89ede9 |
fstatus = fields_add( out, isitag, value, LEVEL_MAIN );
|
|
Packit |
89ede9 |
if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
|
|
Packit |
89ede9 |
}
|
|
Packit |
89ede9 |
}
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
static void
|
|
Packit |
89ede9 |
append_easyall( fields *in, char *tag, char *isitag, int level, fields *out, int *status )
|
|
Packit |
89ede9 |
{
|
|
Packit |
89ede9 |
vplist_index i;
|
|
Packit |
89ede9 |
int fstatus;
|
|
Packit |
89ede9 |
vplist a;
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
vplist_init( &a );
|
|
Packit |
89ede9 |
fields_findv_each( in, level, FIELDS_CHRP, &a, tag );
|
|
Packit |
89ede9 |
for ( i=0; i
|
|
Packit |
89ede9 |
fstatus = fields_add( out, isitag, (char *) vplist_get( &a, i ), LEVEL_MAIN );
|
|
Packit |
89ede9 |
if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
|
|
Packit |
89ede9 |
}
|
|
Packit |
89ede9 |
vplist_free( &a );
|
|
Packit |
89ede9 |
}
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
static void
|
|
Packit |
89ede9 |
append_date( fields *in, fields *out, int *status )
|
|
Packit |
89ede9 |
{
|
|
Packit |
89ede9 |
char *month, *year;
|
|
Packit |
89ede9 |
int fstatus;
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
month = fields_findv_firstof( in, LEVEL_ANY, FIELDS_CHRP, "PARTDATE:MONTH", "DATE:MONTH", NULL );
|
|
Packit |
89ede9 |
if ( month ) {
|
|
Packit |
89ede9 |
fstatus = fields_add( out, "PD", month, LEVEL_MAIN );
|
|
Packit |
89ede9 |
if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
|
|
Packit |
89ede9 |
}
|
|
Packit |
89ede9 |
year = fields_findv_firstof( in, LEVEL_ANY, FIELDS_CHRP, "PARTDATE:YEAR", "DATE:YEAR", NULL );
|
|
Packit |
89ede9 |
if ( year ) {
|
|
Packit |
89ede9 |
fstatus = fields_add( out, "PY", year, LEVEL_MAIN );
|
|
Packit |
89ede9 |
if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
|
|
Packit |
89ede9 |
}
|
|
Packit |
89ede9 |
}
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
static int
|
|
Packit |
89ede9 |
append_data( fields *in, fields *out )
|
|
Packit |
89ede9 |
{
|
|
Packit |
89ede9 |
int type, status = BIBL_OK;
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
type = get_type( in );
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
append_type ( type, out, &status );
|
|
Packit |
89ede9 |
append_people ( in, "AUTHOR", "AU", LEVEL_MAIN, out, &status );
|
|
Packit |
89ede9 |
append_easyall( in, "AUTHOR:CORP", "AU", LEVEL_MAIN, out, &status );
|
|
Packit |
89ede9 |
append_easyall( in, "AUTHOR:ASIS", "AU", LEVEL_MAIN, out, &status );
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
append_title ( in, "TI", LEVEL_MAIN, out, &status );
|
|
Packit |
89ede9 |
if ( type==TYPE_ARTICLE ) {
|
|
Packit |
89ede9 |
append_title( in, "SO", LEVEL_HOST, out, &status );
|
|
Packit |
89ede9 |
append_abbrtitle( in, "JI", LEVEL_HOST, out, &status );
|
|
Packit |
89ede9 |
append_title( in, "SE", LEVEL_SERIES, out, &status );
|
|
Packit |
89ede9 |
} else if ( type==TYPE_INBOOK ) {
|
|
Packit |
89ede9 |
append_title( in, "BT", LEVEL_HOST, out, &status );
|
|
Packit |
89ede9 |
append_title( in, "SE", LEVEL_SERIES, out, &status );
|
|
Packit |
89ede9 |
} else { /* type==BOOK */
|
|
Packit |
89ede9 |
append_title( in, "SE", LEVEL_HOST, out, &status );
|
|
Packit |
89ede9 |
}
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
append_date( in, out, &status );
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
append_easy( in, "PAGES:START", "BP", LEVEL_ANY, out, &status );
|
|
Packit |
89ede9 |
append_easy( in, "PAGES:STOP", "EP", LEVEL_ANY, out, &status );
|
|
Packit |
89ede9 |
append_easy( in, "ARTICLENUMBER", "AR", LEVEL_ANY, out, &status );
|
|
Packit |
89ede9 |
append_easy( in, "PAGES:TOTAL", "PG", LEVEL_ANY, out, &status );
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
append_easy( in, "VOLUME", "VL", LEVEL_ANY, out, &status );
|
|
Packit |
89ede9 |
append_easy( in, "ISSUE", "IS", LEVEL_ANY, out, &status );
|
|
Packit |
89ede9 |
append_easy( in, "NUMBER", "IS", LEVEL_ANY, out, &status );
|
|
Packit |
89ede9 |
append_easy( in, "DOI", "DI", LEVEL_ANY, out, &status );
|
|
Packit |
89ede9 |
append_easy( in, "ISIREFNUM", "UT", LEVEL_ANY, out, &status );
|
|
Packit |
89ede9 |
append_easy( in, "LANGUAGE", "LA", LEVEL_ANY, out, &status );
|
|
Packit |
89ede9 |
append_easy( in, "ISIDELIVERNUM", "GA", LEVEL_ANY, out, &status );
|
|
Packit |
89ede9 |
append_keywords( in, out, &status );
|
|
Packit |
89ede9 |
append_easy( in, "ABSTRACT", "AB", LEVEL_ANY, out, &status );
|
|
Packit |
89ede9 |
append_easy( in, "TIMESCITED", "TC", LEVEL_ANY, out, &status );
|
|
Packit |
89ede9 |
append_easy( in, "NUMBERREFS", "NR", LEVEL_ANY, out, &status );
|
|
Packit |
89ede9 |
append_easy( in, "CITEDREFS", "CR", LEVEL_ANY, out, &status );
|
|
Packit |
89ede9 |
append_easy( in, "ADDRESS", "PI", LEVEL_ANY, out, &status );
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
return status;
|
|
Packit |
89ede9 |
}
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
static void
|
|
Packit |
89ede9 |
output_verbose( fields *f, const char *type, unsigned long refnum )
|
|
Packit |
89ede9 |
{
|
|
Packit |
89ede9 |
char *tag, *value;
|
|
Packit |
89ede9 |
int i, n, level;
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
fprintf( stderr, "REF #%lu %s---\n", refnum+1, type );
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
n = fields_num( f );
|
|
Packit |
89ede9 |
for ( i=0; i
|
|
Packit |
89ede9 |
tag = fields_tag( f, i, FIELDS_CHRP_NOUSE );
|
|
Packit |
89ede9 |
value = fields_value( f, i, FIELDS_CHRP_NOUSE );
|
|
Packit |
89ede9 |
level = fields_level( f, i );
|
|
Packit |
89ede9 |
fprintf( stderr, "\t'%s'\t'%s'\t%d\n", tag, value, level );
|
|
Packit |
89ede9 |
}
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
fflush( stderr );
|
|
Packit |
89ede9 |
}
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
static void
|
|
Packit |
89ede9 |
output( FILE *fp, fields *out )
|
|
Packit |
89ede9 |
{
|
|
Packit |
89ede9 |
int i;
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
for ( i=0; i<out->n; ++i ) {
|
|
Packit |
89ede9 |
fprintf( fp, "%s %s\n",
|
|
Packit |
89ede9 |
( char * ) fields_tag ( out, i, FIELDS_CHRP ),
|
|
Packit |
89ede9 |
( char * ) fields_value( out, i, FIELDS_CHRP )
|
|
Packit |
89ede9 |
);
|
|
Packit |
89ede9 |
}
|
|
Packit |
89ede9 |
fprintf( fp, "ER\n\n" );
|
|
Packit |
89ede9 |
fflush( fp );
|
|
Packit |
89ede9 |
}
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
static int
|
|
Packit |
89ede9 |
isiout_write( fields *in, FILE *fp, param *p, unsigned long refnum )
|
|
Packit |
89ede9 |
{
|
|
Packit |
89ede9 |
int status;
|
|
Packit |
89ede9 |
fields out;
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
fields_init( &out );
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
if ( p->format_opts & BIBL_FORMAT_VERBOSE )
|
|
Packit |
89ede9 |
output_verbose( in, "IN", refnum );
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
status = append_data( in, &out );
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
if ( status==BIBL_OK ) output( fp, &out );
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
if ( p->format_opts & BIBL_FORMAT_VERBOSE )
|
|
Packit |
89ede9 |
output_verbose( &out, "OUT", refnum );
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
fields_free( &out );
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
return status;
|
|
Packit |
89ede9 |
}
|
|
Packit |
89ede9 |
|
|
Packit |
89ede9 |
static void
|
|
Packit |
89ede9 |
isiout_writeheader( FILE *outptr, param *p )
|
|
Packit |
89ede9 |
{
|
|
Packit |
89ede9 |
if ( p->utf8bom ) utf8_writebom( outptr );
|
|
Packit |
89ede9 |
}
|