~ubuntu-branches/ubuntu/saucy/ncbi-tools6/saucy-proposed

« back to all changes in this revision

Viewing changes to network/medarch/client/medutil.c

  • Committer: Bazaar Package Importer
  • Author(s): Aaron M. Ucko
  • Date: 2009-08-11 22:03:47 UTC
  • mfrom: (1.4.1 upstream)
  • mto: This revision was merged to the branch mainline in revision 10.
  • Revision ID: james.westby@ubuntu.com-20090811220347-g4b6lzdvphvvbpiu
* New upstream release.
* debian/libncbi6.symbols: update accordingly.
* debian/control: clean up obsolete or redundant relationship declarations.

Show diffs side-by-side

added added

removed removed

Lines of Context:
28
28
*   
29
29
* Version Creation Date: 8/31/93
30
30
*
31
 
* $Revision: 6.23 $
 
31
* $Revision: 6.24 $
32
32
*
33
33
* File Description:  Medline Utilities for MedArch
34
34
*   Assumes user calls MedArchInit and Fini
44
44
*
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.
 
49
*
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.
396
399
Boolean ten_authors(CitArtPtr art, CitArtPtr art_tmp)
397
400
{
398
401
    NameStdPtr namestd;
 
402
    ValNodePtr oldcon;
 
403
    ValNodePtr newcon;
 
404
    ValNodePtr tvnp;
 
405
    ValNodePtr vnp;
399
406
    ValNodePtr v;
400
407
    AuthorPtr  aup;
 
408
    CharPtr    oldbuf;
 
409
    CharPtr    newbuf;
401
410
    CharPtr    mu[10];
402
 
    CharPtr    oldcon;
403
 
    CharPtr    newcon;
 
411
    CharPtr    p;
 
412
    Int4       oldlen;
 
413
    Int4       newlen;
404
414
    Int2       num;
405
415
    Int2       numnew;
406
416
    Int2       numtmp;
427
437
    if(art->authors->choice != 1)
428
438
        return(ten_authors_compare(art, art_tmp));
429
439
 
 
440
    oldbuf = NULL;
430
441
    oldcon = NULL;
 
442
    oldlen = 1;
431
443
    for(num = 0, v = art->authors->names; v != NULL; v = v->next)
432
444
    {
433
445
        aup = v->data.ptrvalue;
434
446
        if(aup->name->choice == 2)
435
447
            num++;
436
448
        else if(aup->name->choice == 5)
437
 
            oldcon = aup->name->data;
438
 
    }
439
 
 
 
449
        {
 
450
            p = aup->name->data;
 
451
            oldlen += (StringLen(p) + 2);
 
452
            if(oldcon == NULL)
 
453
            {
 
454
                oldcon = ValNodeNew(NULL);
 
455
                oldcon->data.ptrvalue = p;
 
456
                continue;
 
457
            }
 
458
 
 
459
            for(vnp = oldcon; vnp != NULL; vnp = vnp->next)
 
460
            {
 
461
                if(StringICmp(p, vnp->data.ptrvalue) <= 0)
 
462
                {
 
463
                    if(vnp == oldcon)
 
464
                    {
 
465
                        oldcon = ValNodeNew(NULL);
 
466
                        oldcon->data.ptrvalue = p;
 
467
                        oldcon->next = vnp;
 
468
                    }
 
469
                    else
 
470
                    {
 
471
                        tvnp = ValNodeNew(NULL);
 
472
                        tvnp->data.ptrvalue = vnp->data.ptrvalue;
 
473
                        vnp->data.ptrvalue = p;
 
474
                        tvnp->next = vnp->next;
 
475
                        vnp->next = tvnp;
 
476
                    }
 
477
                    break;
 
478
                }
 
479
                if(vnp->next == NULL)
 
480
                {
 
481
                    vnp->next = ValNodeNew(NULL);
 
482
                    vnp->next->data.ptrvalue = p;
 
483
                    break;
 
484
                }
 
485
            }
 
486
        }
 
487
    }
 
488
    if(oldcon != NULL)
 
489
    {
 
490
        oldbuf = MemNew(oldlen);
 
491
        oldbuf[0] = '\0';
 
492
        for(vnp = oldcon; vnp != NULL; vnp = vnp->next)
 
493
        {
 
494
            if(oldbuf[0] != '\0')
 
495
                StringCat(oldbuf, "; ");
 
496
            StringCat(oldbuf, vnp->data.ptrvalue);
 
497
        }
 
498
    }
 
499
 
 
500
    newbuf = NULL;
440
501
    newcon = NULL;
 
502
    newlen = 1;
441
503
    for(numtmp = 0, v = art_tmp->authors->names; v != NULL; v = v->next)
442
504
    {
443
505
        aup = v->data.ptrvalue;
444
506
        if(aup->name->choice == 2)
445
507
            numtmp++;
446
508
        else if(aup->name->choice == 5)
447
 
            newcon = aup->name->data;
 
509
        {
 
510
            p = aup->name->data;
 
511
            newlen += (StringLen(p) + 2);
 
512
            if(newcon == NULL)
 
513
            {
 
514
                newcon = ValNodeNew(NULL);
 
515
                newcon->data.ptrvalue = p;
 
516
                continue;
 
517
            }
 
518
 
 
519
            for(vnp = newcon; vnp != NULL; vnp = vnp->next)
 
520
            {
 
521
                if(StringICmp(p, vnp->data.ptrvalue) <= 0)
 
522
                {
 
523
                    if(vnp == newcon)
 
524
                    {
 
525
                        newcon = ValNodeNew(NULL);
 
526
                        newcon->data.ptrvalue = p;
 
527
                        newcon->next = vnp;
 
528
                    }
 
529
                    else
 
530
                    {
 
531
                        tvnp = ValNodeNew(NULL);
 
532
                        tvnp->data.ptrvalue = vnp->data.ptrvalue;
 
533
                        vnp->data.ptrvalue = p;
 
534
                        tvnp->next = vnp->next;
 
535
                        vnp->next = tvnp;
 
536
                    }
 
537
                    break;
 
538
                }
 
539
                if(vnp->next == NULL)
 
540
                {
 
541
                    vnp->next = ValNodeNew(NULL);
 
542
                    vnp->next->data.ptrvalue = p;
 
543
                    break;
 
544
                }
 
545
            }
 
546
        }
 
547
    }
 
548
    if(newcon != NULL)
 
549
    {
 
550
        newbuf = MemNew(newlen);
 
551
        newbuf[0] = '\0';
 
552
        for(vnp = newcon; vnp != NULL; vnp = vnp->next)
 
553
        {
 
554
            if(newbuf[0] != '\0')
 
555
                StringCat(newbuf, "; ");
 
556
            StringCat(newbuf, vnp->data.ptrvalue);
 
557
        }
448
558
    }
449
559
 
450
560
    if(oldcon != NULL)
453
563
        {
454
564
            ErrPostEx(SEV_WARNING, ERR_REFERENCE_NoConsortAuthors,
455
565
                      "Publication as returned by MedArch lacks consortium authors of the original publication: \"%s\".",
456
 
                      oldcon);
457
 
            aup = AuthorNew();
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;
465
 
            newcon = oldcon;
 
566
                      oldbuf);
 
567
            for(vnp = oldcon;; vnp = vnp->next)
 
568
            {
 
569
                aup = AuthorNew();
 
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)
 
575
                    break;
 
576
            }
 
577
            vnp->next = art_tmp->authors->names;
 
578
            art_tmp->authors->names = oldcon;
466
579
        }
467
 
        else if(StringICmp(oldcon, newcon) != 0)
 
580
        else
468
581
        {
469
 
            ErrPostEx(SEV_WARNING, ERR_REFERENCE_DiffConsortAuthors,
470
 
                      "Consortium author names differ. Original is \"%s\". MedArch's is \"%s\".",
471
 
                      oldcon, newcon);
 
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\".",
 
585
                          oldbuf, newbuf);
 
586
            MemFree(newbuf);
 
587
            newbuf = NULL;
 
588
            ValNodeFree(oldcon);
 
589
            ValNodeFree(newcon);
 
590
            newcon = NULL;
472
591
        }
 
592
        MemFree(oldbuf);
473
593
        if(num == 0)
474
594
            return(TRUE);
475
595
    }
476
596
 
 
597
    if(newcon != NULL)
 
598
        ValNodeFree(newcon);
 
599
    if(newbuf != NULL)
 
600
        MemFree(newbuf);
 
601
 
477
602
    numnew = 0;
478
603
    for(v = art_tmp->authors->names; v != NULL && numnew < 10; v = v->next)
479
604
    {