45
45
* RCS Modification History:
46
46
* $Log: medutil.c,v $
47
* Revision 6.24 2009/06/19 19:27:29 bazhin
48
* Added support for multiple consortium names.
47
50
* Revision 6.23 2007/12/04 23:29:22 bazhin
48
51
* MergePubIds() renamed to MergeNonPubmedPubIds(). Merging is
49
52
* limited to types DOI and OTHER only.
427
437
if(art->authors->choice != 1)
428
438
return(ten_authors_compare(art, art_tmp));
431
443
for(num = 0, v = art->authors->names; v != NULL; v = v->next)
433
445
aup = v->data.ptrvalue;
434
446
if(aup->name->choice == 2)
436
448
else if(aup->name->choice == 5)
437
oldcon = aup->name->data;
451
oldlen += (StringLen(p) + 2);
454
oldcon = ValNodeNew(NULL);
455
oldcon->data.ptrvalue = p;
459
for(vnp = oldcon; vnp != NULL; vnp = vnp->next)
461
if(StringICmp(p, vnp->data.ptrvalue) <= 0)
465
oldcon = ValNodeNew(NULL);
466
oldcon->data.ptrvalue = p;
471
tvnp = ValNodeNew(NULL);
472
tvnp->data.ptrvalue = vnp->data.ptrvalue;
473
vnp->data.ptrvalue = p;
474
tvnp->next = vnp->next;
479
if(vnp->next == NULL)
481
vnp->next = ValNodeNew(NULL);
482
vnp->next->data.ptrvalue = p;
490
oldbuf = MemNew(oldlen);
492
for(vnp = oldcon; vnp != NULL; vnp = vnp->next)
494
if(oldbuf[0] != '\0')
495
StringCat(oldbuf, "; ");
496
StringCat(oldbuf, vnp->data.ptrvalue);
441
503
for(numtmp = 0, v = art_tmp->authors->names; v != NULL; v = v->next)
443
505
aup = v->data.ptrvalue;
444
506
if(aup->name->choice == 2)
446
508
else if(aup->name->choice == 5)
447
newcon = aup->name->data;
511
newlen += (StringLen(p) + 2);
514
newcon = ValNodeNew(NULL);
515
newcon->data.ptrvalue = p;
519
for(vnp = newcon; vnp != NULL; vnp = vnp->next)
521
if(StringICmp(p, vnp->data.ptrvalue) <= 0)
525
newcon = ValNodeNew(NULL);
526
newcon->data.ptrvalue = p;
531
tvnp = ValNodeNew(NULL);
532
tvnp->data.ptrvalue = vnp->data.ptrvalue;
533
vnp->data.ptrvalue = p;
534
tvnp->next = vnp->next;
539
if(vnp->next == NULL)
541
vnp->next = ValNodeNew(NULL);
542
vnp->next->data.ptrvalue = p;
550
newbuf = MemNew(newlen);
552
for(vnp = newcon; vnp != NULL; vnp = vnp->next)
554
if(newbuf[0] != '\0')
555
StringCat(newbuf, "; ");
556
StringCat(newbuf, vnp->data.ptrvalue);
450
560
if(oldcon != NULL)
454
564
ErrPostEx(SEV_WARNING, ERR_REFERENCE_NoConsortAuthors,
455
565
"Publication as returned by MedArch lacks consortium authors of the original publication: \"%s\".",
458
aup->name = PersonIdNew();
459
aup->name->choice = 5;
460
aup->name->data = StringSave(oldcon);
461
v = ValNodeNew(NULL);
462
v->data.ptrvalue = aup;
463
v->next = art_tmp->authors->names;
464
art_tmp->authors->names = v;
567
for(vnp = oldcon;; vnp = vnp->next)
570
aup->name = PersonIdNew();
571
aup->name->choice = 5;
572
aup->name->data = StringSave(vnp->data.ptrvalue);
573
vnp->data.ptrvalue = aup;
574
if(vnp->next == NULL)
577
vnp->next = art_tmp->authors->names;
578
art_tmp->authors->names = oldcon;
467
else if(StringICmp(oldcon, newcon) != 0)
469
ErrPostEx(SEV_WARNING, ERR_REFERENCE_DiffConsortAuthors,
470
"Consortium author names differ. Original is \"%s\". MedArch's is \"%s\".",
582
if(StringICmp(oldbuf, newbuf) != 0)
583
ErrPostEx(SEV_WARNING, ERR_REFERENCE_DiffConsortAuthors,
584
"Consortium author names differ. Original is \"%s\". MedArch's is \"%s\".",
478
603
for(v = art_tmp->authors->names; v != NULL && numnew < 10; v = v->next)