int copacin_convertf( fields *copacin, fields *out, int reftype, param *p, variants *all, int nall ) { int process, level, i, n, nfields, ok, status = BIBL_OK; newstr *tag, *data; char *newtag; nfields = fields_num( copacin ); for ( i=0; i<nfields; ++i ) { tag = fields_tag( copacin, i, FIELDS_STRP ); n = translate_oldtag( tag->data, reftype, all, nall, &process, &level, &newtag ); if ( n==-1 ) { copacin_report_notag( p, tag->data ); continue; } if ( process == ALWAYS ) continue; /*add these later*/ data = fields_value( copacin, i, FIELDS_STRP ); switch ( process ) { case SIMPLE: status = copacin_simple( out, newtag, data->data, level ); break; case TITLE: ok = title_process( out, newtag, data->data, level, p->nosplittitle ); if ( ok ) status = BIBL_OK; else status = BIBL_ERR_MEMERR; break; case PERSON: status = copacin_addname( out, newtag, data, level, &(p->asis), &(p->corps) ); break; case SERIALNO: ok = addsn( out, data->data, level ); if ( ok ) status = BIBL_OK; else status = BIBL_ERR_MEMERR; break; default: fprintf(stderr,"%s: internal error -- " "illegal process value %d\n", p->progname, process ); status = BIBL_OK; break; } if ( status!=BIBL_OK ) return status; } return status; }
void copacin_convertf( fields *copacin, fields *info, int reftype, param *p, variants *all, int nall ) { newstr *t, *d; int process, level, i, n; char *newtag; for ( i=0; i<copacin->nfields; ++i ) { t = &( copacin->tag[i] ); d = &( copacin->data[i] ); n = process_findoldtag( t->data, reftype, all, nall ); if ( n==-1 ) { copacin_report_notag( p, t->data ); continue; } process = ((all[reftype]).tags[n]).processingtype; if ( process == ALWAYS ) continue; /*add these later*/ level = ((all[reftype]).tags[n]).level; newtag = ((all[reftype]).tags[n]).newstr; if ( process==SIMPLE ) fields_add( info, newtag, d->data, level ); else if ( process==TITLE ) title_process( info, newtag, d->data, level ); else if ( process==PERSON ) copacin_addname( info, newtag, d, level, &(p->asis), &(p->corps) ); else if ( process==DATE ) copacin_adddate(info,all[reftype]. tags[i].oldstr,newtag,d->data,level); else if ( process==PAGES ) copacin_addpage( info, d->data, level ); else if ( process==SERIALNO ) addsn( info, d->data, level ); /* else { fprintf(stderr,"%s: internal error -- " "illegal process %d\n", r->progname, process ); }*/ } }