~ubuntu-branches/ubuntu/edgy/ncbi-tools6/edgy

« back to all changes in this revision

Viewing changes to api/asn2gnb5.c

  • Committer: Bazaar Package Importer
  • Author(s): Barry deFreese
  • Date: 2006-07-19 23:28:07 UTC
  • mfrom: (1.1.5 upstream)
  • Revision ID: james.westby@ubuntu.com-20060719232807-et3cdmcjgmnyleyx
Tags: 6.1.20060507-3ubuntu1
Re-merge with Debian

Show diffs side-by-side

added added

removed removed

Lines of Context:
30
30
*
31
31
* Version Creation Date:   10/21/98
32
32
*
33
 
* $Revision: 1.48 $
 
33
* $Revision: 1.64 $
34
34
*
35
35
* File Description:  New GenBank flatfile generator - work in progress
36
36
*
74
74
NLM_EXTERN Char link_seq [MAX_WWWBUF];
75
75
#define DEF_LINK_SEQ  "http://www.ncbi.nlm.nih.gov/entrez/viewer.fcgi?"
76
76
 
 
77
NLM_EXTERN Char link_projid [MAX_WWWBUF];
 
78
#define DEF_LINK_PROJID  "http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=genomeprj&cmd=Retrieve&dopt=Overview&list_uids="
 
79
 
77
80
NLM_EXTERN Char link_wgs [MAX_WWWBUF];
78
81
#define DEF_LINK_WGS  "http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?"
79
82
 
204
207
#define DEF_LINK_GABI "https://gabi.rzpd.de/cgi-bin-protected/GreenCards.pl.cgi?Mode=ShowBioObject&BioObjectName="
205
208
 
206
209
static Char link_fantom [MAX_WWWBUF];
207
 
#define DEF_LINK_FANTOM "http://fantom.gsc.riken.go.jp/db/view/main.cgi?masterid="
 
210
#define DEF_LINK_FANTOM "http://fantom.gsc.riken.jp/db/annotate/main.cgi?masterid="
208
211
 
209
212
static Char link_interpro [MAX_WWWBUF];
210
213
#define DEF_LINK_INTERPRO "http://www.ebi.ac.uk/interpro/ISearch?mode=ipr&query="
213
216
#define DEF_LINK_GENEDB "http://www.genedb.org/genedb/Dispatcher?formType=navBar&submit=Search+for&organism=All%3Apombe%3Acerevisiae%3Adicty%3Aasp%3Atryp%3Aleish%3Amalaria%3Astyphi%3Aglossina&desc=yes&ohmr=%2F&name="
214
217
 
215
218
static Char link_geneid [MAX_WWWBUF];
216
 
#define DEF_LINK_GENEID "http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=gene&cmd=retrieve&dopt=graphics&list_uids="
 
219
#define DEF_LINK_GENEID "http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=gene&cmd=Retrieve&dopt=full_report&list_uids="
217
220
 
218
221
static Char link_zfin [MAX_WWWBUF];
219
222
#define DEF_LINK_ZFIN "http://zfin.org/cgi-bin/webdriver?MIval=aa-markerview.apg&OID="
278
281
static Char link_uspto [MAX_WWWBUF];
279
282
#define DEF_LINK_USPTO "http://patft.uspto.gov/netacgi/nph-Parser?patentnumber="
280
283
 
 
284
static Char link_vector [MAX_WWWBUF];
 
285
#define DEF_LINK_VECTOR "http://www.vectorbase.org/Genome/BRCGene/?"
 
286
 
 
287
static Char link_mirbase [MAX_WWWBUF];
 
288
#define DEF_LINK_MIRBASE "http://microrna.sanger.ac.uk/cgi-bin/sequences/mirna_entry.pl?acc="
 
289
 
281
290
 
282
291
/* www utility functions */
283
292
 
296
305
  GetAppParam ("NCBI", "WWWENTREZ", "LINK_FEAT", DEF_LINK_FEAT, link_feat, MAX_WWWBUF);
297
306
  GetAppParam ("NCBI", "WWWENTREZ", "LINK_FEATC", DEF_LINK_FEATC, link_featc, MAX_WWWBUF);
298
307
  GetAppParam ("NCBI", "WWWENTREZ", "LINK_SEQ", DEF_LINK_SEQ, link_seq, MAX_WWWBUF);
 
308
  GetAppParam ("NCBI", "WWWENTREZ", "LINK_PROJID", DEF_LINK_PROJID, link_projid, MAX_WWWBUF);
299
309
  GetAppParam ("NCBI", "WWWENTREZ", "LINK_WGS", DEF_LINK_WGS, link_wgs, MAX_WWWBUF);
300
310
  GetAppParam ("NCBI", "WWWENTREZ", "LINK_OMIM", DEF_LINK_OMIM, link_omim, MAX_WWWBUF);
301
311
  GetAppParam ("NCBI", "WWWENTREZ", "LINK_REF", DEF_LINK_REF, ref_link, MAX_WWWBUF);
306
316
  GetAppParam ("NCBI", "WWWENTREZ", "LINK_ECAMBIG", DEF_LINK_ECAMBIG, ec_ambig, MAX_WWWBUF);
307
317
  GetAppParam ("NCBI", "WWWENTREZ", "LINK_FF", DEF_LINK_FF, link_ff, MAX_WWWBUF);
308
318
  GetAppParam ("NCBI", "WWWENTREZ", "LINK_MUID", DEF_LINK_MUID, link_muid, MAX_WWWBUF);
309
 
  GetAppParam ("NCBI", "WWWENTREZ", "LINK_FF", DEF_LINK_FF, link_ff, MAX_WWWBUF);
310
 
  GetAppParam ("NCBI", "WWWENTREZ", "LINK_MUID", DEF_LINK_MUID, link_muid, MAX_WWWBUF);
311
319
  GetAppParam ("NCBI", "WWWENTREZ", "LINK_ACE", DEF_LINK_ACE, link_ace, MAX_WWWBUF);
312
320
  GetAppParam ("NCBI", "WWWENTREZ", "LINK_TAX", DEF_LINK_TAX, link_tax, MAX_WWWBUF);
313
321
  GetAppParam ("NCBI", "WWWENTREZ", "LINK_CODE", DEF_LINK_CODE, link_code, MAX_WWWBUF);
367
375
  GetAppParam ("NCBI", "WWWENTREZ", "LINK_BOLD", DEF_LINK_BOLD, link_bold, MAX_WWWBUF);
368
376
  GetAppParam ("NCBI", "WWWENTREZ", "LINK_HPRD", DEF_LINK_HPRD, link_hprd, MAX_WWWBUF);
369
377
  GetAppParam ("NCBI", "WWWENTREZ", "LINK_USPTO", DEF_LINK_USPTO, link_uspto, MAX_WWWBUF);
 
378
  GetAppParam ("NCBI", "WWWENTREZ", "LINK_VECTOR", DEF_LINK_VECTOR, link_vector, MAX_WWWBUF);
 
379
  GetAppParam ("NCBI", "WWWENTREZ", "LINK_MIRBASE", DEF_LINK_MIRBASE, link_mirbase, MAX_WWWBUF);
370
380
}
371
381
 
372
382
 
666
676
  FF_www_db_xref_std (ffstring, db, identifier, link);
667
677
}
668
678
 
 
679
static void FF_www_db_xref_vector (
 
680
  StringItemPtr ffstring,
 
681
  CharPtr db, 
 
682
  CharPtr identifier,
 
683
  BioseqPtr bsp,
 
684
  CharPtr link
 
685
)
 
686
{
 
687
  Char     ch;
 
688
  Char     buf [512], tax [256];
 
689
  CharPtr  ptr;
 
690
 
 
691
  StringCpy (buf, link);
 
692
  if (bsp != NULL) {
 
693
    if (BioseqToGeneticCode (bsp, NULL, NULL, NULL, tax, sizeof (tax), NULL)) {
 
694
      ptr = tax;
 
695
      ch = *ptr;
 
696
      while (ch != '\0') {
 
697
        if (IS_WHITESP (ch)) {
 
698
          *ptr = '_';
 
699
        }
 
700
        ptr++;
 
701
        ch = *ptr;
 
702
      }
 
703
      StringCat (buf, "org=");
 
704
      StringCat (buf, tax);
 
705
      StringCat (buf, "&");
 
706
    }
 
707
  }
 
708
  StringCat (buf, "gene=");
 
709
  FF_www_db_xref_std (ffstring, db, identifier, buf);
 
710
}
 
711
 
669
712
static void FF_www_db_xref_null (
670
713
  StringItemPtr ffstring,
671
714
  CharPtr db,
684
727
static void Do_www_db_xref(
685
728
  IntAsn2gbJobPtr ajp,
686
729
  StringItemPtr ffstring,
687
 
  CharPtr db, CharPtr identifier
 
730
  CharPtr db,
 
731
  CharPtr identifier,
 
732
  BioseqPtr bsp
688
733
)
689
734
{
690
735
  if ( ffstring == NULL || db == NULL || identifier == NULL ) return;
809
854
    FF_www_db_xref_null(ffstring, db, identifier, link_bold);
810
855
  } else if ( StringCmp(db , "HPRD") == 0) {
811
856
    FF_www_db_xref_hprd(ffstring, db, identifier, link_hprd);
 
857
  } else if ( StringCmp(db , "VectorBase") == 0) {
 
858
    FF_www_db_xref_vector(ffstring, db, identifier, bsp, link_vector);
 
859
  } else if ( StringCmp(db , "miRBase") == 0) {
 
860
    FF_www_db_xref_std(ffstring, db, identifier, link_mirbase);
812
861
 
813
862
  } else {  
814
863
    /* default: no link just the text */
819
868
NLM_EXTERN void FF_www_db_xref(
820
869
  IntAsn2gbJobPtr ajp,
821
870
  StringItemPtr ffstring,
822
 
  CharPtr db, CharPtr identifier
 
871
  CharPtr db,
 
872
  CharPtr identifier,
 
873
  BioseqPtr bsp
823
874
)
824
875
{
825
876
  if ( ffstring == NULL || db == NULL || identifier == NULL ) return;
826
877
  
827
878
  if ( GetWWW(ajp) ) {
828
 
    Do_www_db_xref (ajp, ffstring, db, identifier);
 
879
    Do_www_db_xref (ajp, ffstring, db, identifier, bsp);
829
880
  } else { /* not in www mode */
830
881
    if (StringCmp(db , "MGD") == 0 || StringCmp(db , "MGI") == 0) {
831
882
      if (StringNICmp (identifier, "MGI:", 4) == 0) {
881
932
  }
882
933
  ajp->www = TRUE;
883
934
 
884
 
  Do_www_db_xref (ajp, ffstring, dbt->db, buf);
 
935
  Do_www_db_xref (ajp, ffstring, dbt->db, buf, NULL);
885
936
 
886
937
  ajp->www = FALSE;
887
938
 
1078
1129
 
1079
1130
{
1080
1131
  AuthorPtr    ap;
 
1132
  ValNodePtr   clist;
1081
1133
  ValNodePtr   conslist;
1082
1134
  Int2         count;
1083
1135
  ValNodePtr   head = NULL;
1147
1199
      prefix = ", ";
1148
1200
    }
1149
1201
 
 
1202
    prefix = NULL;
 
1203
    clist = NULL;
1150
1204
    for (vnp = conslist; vnp != NULL; vnp = vnp->next) {
1151
1205
      str = NULL;
1152
1206
      pid = (PersonIdPtr) vnp->data.ptrvalue;
1153
1207
      if (pid->choice == 5) {
1154
 
        str = MakeSingleAuthorString (format, NULL, (CharPtr) pid->data, NULL, NULL, index, NULL);
1155
 
        if ((! StringHasNoText (str)) && consortP != NULL && *consortP == NULL) {
1156
 
          *consortP = StringSave (str);
1157
 
        }
1158
 
 
1159
 
        /* optionally populate gbseq for XML-ized GenBank format */
1160
 
 
1161
 
        if (gbref != NULL) {
1162
 
          gbref->consortium = StringSave (str);
1163
 
        }
1164
 
 
1165
 
        str = MemFree (str);
1166
 
      }
 
1208
        str = MakeSingleAuthorString (format, prefix, (CharPtr) pid->data, NULL, NULL, index, NULL);
 
1209
        if (str != NULL) {
 
1210
          ValNodeAddStr (&clist, 0, str);
 
1211
        }
 
1212
        prefix = "; ";
 
1213
      }
 
1214
    }
 
1215
    if (clist != NULL) {
 
1216
      str = MergeFFValNodeStrs (clist);
 
1217
      if ((! StringHasNoText (str)) && consortP != NULL && *consortP == NULL) {
 
1218
        *consortP = StringSave (str);
 
1219
      }
 
1220
 
 
1221
      /* optionally populate gbseq for XML-ized GenBank format */
 
1222
 
 
1223
      if (gbref != NULL) {
 
1224
        gbref->consortium = StringSave (str);
 
1225
      }
 
1226
 
 
1227
      str = MemFree (str);
 
1228
      ValNodeFreeData (clist);
1167
1229
    }
1168
1230
 
1169
1231
    ValNodeFree (pidlist);
2504
2566
}
2505
2567
 
2506
2568
static CharPtr FormatCitPat (
2507
 
  FmtType   format,
 
2569
  FmtType format,
 
2570
  ModType mode,
2508
2571
  CitPatPtr cpp,
2509
 
  SeqIdPtr  seqidp,
 
2572
  SeqIdPtr seqidp,
2510
2573
  IntAsn2gbJobPtr ajp
2511
2574
)
2512
2575
 
2513
2576
{
2514
2577
  AffilPtr       afp;
2515
2578
  AuthListPtr    alp;
 
2579
  IdPatPtr       cit;
2516
2580
  CharPtr        consortium = NULL;
2517
2581
  Char           date [40];
2518
2582
  ValNodePtr     head = NULL;
 
2583
  Boolean        is_us_pre_grant = FALSE;
2519
2584
  CharPtr        prefix = NULL;
2520
2585
  CharPtr        rsult = NULL;
2521
2586
  SeqIdPtr       sip;
2527
2592
 
2528
2593
  if (cpp == NULL) return NULL;
2529
2594
 
 
2595
  if (StringHasNoText (cpp->number) &&
 
2596
      StringDoesHaveText (cpp->app_number) &&
 
2597
      StringCmp (cpp->country, "US") == 0 &&
 
2598
      mode != RELEASE_MODE) {
 
2599
    for (sip = seqidp; sip != NULL; sip = sip->next) {
 
2600
      if (sip->choice != SEQID_PATENT) continue;
 
2601
      psip = (PatentSeqIdPtr) sip->data.ptrvalue;
 
2602
      if (psip == NULL) continue;
 
2603
      cit = psip->cit;
 
2604
      if (cit == NULL) continue;
 
2605
      if (StringDoesHaveText (cit->app_number)) {
 
2606
        is_us_pre_grant = TRUE;
 
2607
      }
 
2608
    }
 
2609
  }
 
2610
 
2530
2611
  if (format == GENBANK_FMT || format == GENPEPT_FMT) {
2531
 
    ValNodeCopyStr (&head, 0, "Patent: ");
2532
 
    suffix = " ";
 
2612
    if (is_us_pre_grant) {
 
2613
      ValNodeCopyStr (&head, 0, "Pre-Grant Patent: ");
 
2614
      suffix = " ";
 
2615
    } else {
 
2616
      ValNodeCopyStr (&head, 0, "Patent: ");
 
2617
      suffix = " ";
 
2618
    }
2533
2619
  } else if (format == EMBL_FMT || format == EMBLPEPT_FMT) {
2534
2620
    ValNodeCopyStr (&head, 0, "Patent number ");
2535
2621
  }
2550
2636
      ValNodeCopyStr (&head, 0, cpp->number);
2551
2637
    }
2552
2638
  } else if (! StringHasNoText (cpp->app_number)) {
2553
 
    AddValNodeString (&head, "(", cpp->app_number, ")");
 
2639
    if (is_us_pre_grant) {
 
2640
      AddValNodeString (&head, NULL, cpp->app_number, NULL);
 
2641
    } else {
 
2642
      AddValNodeString (&head, "(", cpp->app_number, ")");
 
2643
    }
2554
2644
  }
2555
2645
 
2556
2646
  if (! StringHasNoText (cpp->doc_type)) {
2922
3012
 
2923
3013
static CharPtr GetPubJournal (
2924
3014
  FmtType format,
 
3015
  ModType mode,
2925
3016
  Boolean dropBadCitGens,
2926
3017
  Boolean noAffilOnUnpub,
2927
3018
  Boolean citArtIsoJta,
2928
3019
  PubdescPtr pdp,
2929
3020
  CitSubPtr csp,
2930
 
  SeqIdPtr  seqidp,
 
3021
  SeqIdPtr seqidp,
2931
3022
  IndxPtr index,
2932
3023
  IntAsn2gbJobPtr ajp
2933
3024
)
2996
3087
      case PUB_Patent :
2997
3088
        cpp = (CitPatPtr) vnp->data.ptrvalue;
2998
3089
        if (cpp != NULL) {
2999
 
          journal = FormatCitPat (format, cpp, seqidp, ajp);
 
3090
          journal = FormatCitPat (format, mode, cpp, seqidp, ajp);
3000
3091
        }
3001
3092
        break;
3002
3093
      default :
3221
3312
static void AddReferenceToGbseq (
3222
3313
  GBSeqPtr gbseq,
3223
3314
  GBReferencePtr gbref,
3224
 
  CharPtr str
 
3315
  CharPtr str,
 
3316
  RefBlockPtr rbp,
 
3317
  BioseqPtr bsp
3225
3318
)
3226
3319
 
3227
3320
{
3228
 
  CharPtr  copy;
3229
 
  CharPtr  ptr;
3230
 
  CharPtr  ref;
 
3321
  Char            buf [32];
 
3322
  CharPtr         copy;
 
3323
  ValNodePtr      head = NULL;
 
3324
  IntRefBlockPtr  irp;
 
3325
  SeqLocPtr       loc;
 
3326
  CharPtr         ptr;
 
3327
  CharPtr         ref;
 
3328
  SeqLocPtr       slp;
 
3329
  Int4            start;
 
3330
  Int4            stop;
 
3331
  CharPtr         tmp;
3231
3332
 
3232
 
  if (gbseq == NULL || gbref == NULL || StringHasNoText (str)) return;
 
3333
  if (gbseq == NULL || gbref == NULL || StringHasNoText (str) || rbp == NULL || bsp == NULL) return;
3233
3334
 
3234
3335
  copy = StringSave (str);
3235
3336
 
3244
3345
    ref = copy + 12;
3245
3346
    ptr = StringStr (ref, "\n  AUTHORS");
3246
3347
    if (ptr == NULL) {
 
3348
      ptr = StringStr (ref, "\n  CONSRTM");
 
3349
    }
 
3350
    if (ptr == NULL) {
3247
3351
      ptr = StringStr (ref, ")\n");
 
3352
      if (ptr != NULL) {
 
3353
        ptr++;
 
3354
      }
3248
3355
    }
3249
3356
    if (ptr != NULL) {
3250
3357
      *ptr = '\0';
3267
3374
  Asn2gnbkCompressSpaces (gbref->journal);
3268
3375
 
3269
3376
  MemFree (copy);
 
3377
 
 
3378
  if (rbp->sites == 1 || rbp->sites == 2) {
 
3379
    gbref->position = StringSave ("sites");
 
3380
  } else if (rbp->sites == 3) {
 
3381
  } else {
 
3382
    irp = (IntRefBlockPtr) rbp;
 
3383
    loc = irp->loc;
 
3384
    if (loc != NULL) {
 
3385
      slp = SeqLocFindNext (loc, NULL);
 
3386
      while (slp != NULL) {
 
3387
        start = SeqLocStart (slp) + 1;
 
3388
        stop = SeqLocStop (slp) + 1;
 
3389
        if (head == NULL) {
 
3390
          sprintf (buf, "%ld..%ld", (long) start, (long) stop);
 
3391
        } else {
 
3392
          sprintf (buf, "; %ld..%ld", (long) start, (long) stop);
 
3393
        }
 
3394
        ValNodeCopyStr (&head, 0, buf);
 
3395
        slp = SeqLocFindNext (loc, slp);
 
3396
      }
 
3397
      tmp = MergeFFValNodeStrs (head);
 
3398
      ValNodeFreeData (head);
 
3399
      gbref->position = tmp;
 
3400
    } else {
 
3401
      start = 1;
 
3402
      stop = bsp->length;
 
3403
      sprintf (buf, "%ld..%ld", (long) start, (long) stop);
 
3404
      gbref->position = StringSave (buf);
 
3405
    }
 
3406
  }
3270
3407
}
3271
3408
 
3272
3409
static Boolean IsCitSub (
3348
3485
  Int4               pmid = 0;
3349
3486
  CharPtr            prefix = NULL;
3350
3487
  RefBlockPtr        rbp;
 
3488
  ValNodePtr         remarks = NULL;
 
3489
  CharPtr            remprefix = NULL;
3351
3490
  SubmitBlockPtr     sbp;
3352
3491
  SeqDescrPtr        sdp;
3353
3492
  SeqFeatPtr         sfp = NULL;
3598
3737
 
3599
3738
  /* print author list */
3600
3739
 
3601
 
  FFRecycleString(ajp, temp);
3602
 
  temp = FFGetString(ajp);
3603
 
  FFStartPrint(temp, afp->format, 2, 12, "AUTHORS", 12, 5, 5, "RA", FALSE);
3604
 
 
3605
3740
  str = NULL;
3606
3741
  consortium = NULL;
3607
3742
 
3611
3746
    TrimSpacesAroundString (str);
3612
3747
  }
3613
3748
 
3614
 
  if (afp->format == GENBANK_FMT || afp->format == GENPEPT_FMT) {
3615
 
    suffix = NULL;
3616
 
    trailingPeriod = TRUE;
3617
 
  } else if (afp->format == EMBL_FMT || afp->format == EMBLPEPT_FMT) {
3618
 
    trailingPeriod = FALSE;
3619
 
    len = StringLen (str);
3620
 
    if (len > 0 && str [len - 1] != '.') {
3621
 
      suffix = ".;";
3622
 
    } else {
3623
 
      suffix = ";";
3624
 
    }
3625
 
  }
 
3749
  if (str != NULL || StringHasNoText (consortium)) {
 
3750
    FFRecycleString(ajp, temp);
 
3751
    temp = FFGetString(ajp);
 
3752
    FFStartPrint(temp, afp->format, 2, 12, "AUTHORS", 12, 5, 5, "RA", FALSE);
3626
3753
 
3627
 
  /* if no authors were found, period will still be added by this call */
3628
 
  if (str != NULL) {
3629
 
    FFAddTextToString(temp, NULL, str, suffix, trailingPeriod, FALSE, TILDE_TO_SPACES);
3630
 
  } else {
3631
3754
    if (afp->format == GENBANK_FMT || afp->format == GENPEPT_FMT) {
3632
 
      FFAddOneChar(temp, '.', FALSE);
 
3755
      suffix = NULL;
 
3756
      trailingPeriod = TRUE;
3633
3757
    } else if (afp->format == EMBL_FMT || afp->format == EMBLPEPT_FMT) {
3634
 
      FFAddOneChar(temp, ';', FALSE);
3635
 
    }    
3636
 
  }
3637
 
 
3638
 
  MemFree (str);
3639
 
  if (afp->format == GENBANK_FMT || afp->format == GENPEPT_FMT) {
 
3758
      trailingPeriod = FALSE;
 
3759
      len = StringLen (str);
 
3760
      if (len > 0 && str [len - 1] != '.') {
 
3761
        suffix = ".;";
 
3762
      } else {
 
3763
        suffix = ";";
 
3764
      }
 
3765
    }
 
3766
 
 
3767
    /* if no authors were found, period will still be added by this call */
 
3768
    if (str != NULL) {
 
3769
      FFAddTextToString(temp, NULL, str, suffix, trailingPeriod, FALSE, TILDE_TO_SPACES);
 
3770
    } else if (StringHasNoText (consortium)) {
 
3771
      if (afp->format == GENBANK_FMT || afp->format == GENPEPT_FMT) {
 
3772
        FFAddOneChar(temp, '.', FALSE);
 
3773
      } else if (afp->format == EMBL_FMT || afp->format == EMBLPEPT_FMT) {
 
3774
        FFAddOneChar(temp, ';', FALSE);
 
3775
      }    
 
3776
    }
 
3777
 
 
3778
    if (afp->format == GENBANK_FMT || afp->format == GENPEPT_FMT) {
3640
3779
      FFLineWrap(ffstring, temp, 12, 12, ASN2FF_GB_MAX, NULL);
3641
 
  } else {
 
3780
    } else {
3642
3781
      FFLineWrap(ffstring, temp, 5, 5, ASN2FF_EMBL_MAX, "RA");
 
3782
    }
3643
3783
  }
 
3784
  MemFree (str);
3644
3785
 
3645
3786
  /* print consortium */
3646
3787
 
3730
3871
    citArtIsoJta = FALSE;
3731
3872
  }
3732
3873
 
3733
 
  str = GetPubJournal (afp->format, ajp->flags.dropBadCitGens,
3734
 
                       ajp->flags.noAffilOnUnpub, citArtIsoJta,
3735
 
                       pdp, csp, bsp->id, index, ajp);
 
3874
  str = GetPubJournal (afp->format, ajp->mode, ajp->flags.dropBadCitGens,
 
3875
                       ajp->flags.noAffilOnUnpub, citArtIsoJta, pdp, csp,
 
3876
                       bsp->id, index, ajp);
3736
3877
  if (str == NULL) {
3737
3878
    str = StringSave ("Unpublished");
3738
3879
  }
3815
3956
 
3816
3957
  if (gbseq != NULL) {
3817
3958
    if (gbref != NULL) {
3818
 
      gbref->medline = muid;
3819
3959
      gbref->pubmed = pmid;
3820
3960
    }
3821
3961
  }
3825
3965
 
3826
3966
    if (gbseq != NULL) {
3827
3967
      if (gbref != NULL) {
3828
 
        AddReferenceToGbseq (gbseq, gbref, str);
 
3968
        AddReferenceToGbseq (gbseq, gbref, str, rbp, bsp);
3829
3969
      }
3830
3970
    }
3831
3971
 
3858
3998
        FFRecycleString(ajp, temp);
3859
3999
        temp = FFGetString(ajp);
3860
4000
 
 
4001
        if (remprefix != NULL) {
 
4002
          ValNodeCopyStr (&remarks, 0, remprefix);
 
4003
        }
 
4004
        ValNodeCopyStr (&remarks, 0, pdp->comment);
 
4005
        remprefix = "; ";
3861
4006
        FFStartPrint (temp, afp->format, 2, 12, prefix, 12, 5, 5, NULL, FALSE);
3862
4007
        FFAddOneString (temp, pdp->comment, FALSE, TRUE, TILDE_EXPAND);
3863
4008
        /* AddCommentWithURLlinks(ajp, temp, NULL, pdp->comment, NULL); */
3866
4011
 
3867
4012
        if (gbseq != NULL) {
3868
4013
          if (gbref != NULL) {
 
4014
            /*
3869
4015
            gbref->remark = StringSave (pdp->comment);
 
4016
            */
3870
4017
          }
3871
4018
        }
3872
4019
 
3890
4037
      temp = FFGetString(ajp);
3891
4038
 
3892
4039
      sprintf (buf, "GenBank staff at the National Library of Medicine created this entry [NCBI gibbsq %ld] from the original journal article.", (long) gibbsq);
 
4040
      if (remprefix != NULL) {
 
4041
        ValNodeCopyStr (&remarks, 0, remprefix);
 
4042
      }
 
4043
      ValNodeCopyStr (&remarks, 0, buf);
 
4044
      remprefix = "; ";
3893
4045
      FFStartPrint (temp, afp->format, 2, 12, prefix, 12, 5, 5, NULL, FALSE);
3894
4046
      FFAddOneString (temp, buf, FALSE, FALSE, TILDE_EXPAND);
3895
4047
      FFLineWrap(ffstring, temp, 12, 12, ASN2FF_GB_MAX, NULL);
3906
4058
        temp = FFGetString(ajp);
3907
4059
 
3908
4060
        sprintf (buf, "This sequence comes from %s", str);
 
4061
        if (remprefix != NULL) {
 
4062
          ValNodeCopyStr (&remarks, 0, remprefix);
 
4063
        }
 
4064
        ValNodeCopyStr (&remarks, 0, buf);
 
4065
        remprefix = "; ";
3909
4066
        FFStartPrint (temp, afp->format, 2, 12, prefix, 12, 5, 5, NULL, FALSE);
3910
4067
        FFAddOneString (temp, buf, TRUE, TRUE, TILDE_EXPAND);
3911
4068
        FFLineWrap(ffstring, temp, 12, 12, ASN2FF_GB_MAX, NULL);
3916
4073
        FFRecycleString(ajp, temp);
3917
4074
        temp = FFGetString(ajp);
3918
4075
 
3919
 
        FFStartPrint (temp ,afp->format, 2, 12, prefix, 12, 5, 5, NULL, FALSE);
 
4076
        if (remprefix != NULL) {
 
4077
          ValNodeCopyStr (&remarks, 0, remprefix);
 
4078
        }
 
4079
        ValNodeCopyStr (&remarks, 0, "Polyadenylate residues occurring in the figure were omitted from the sequence.");
 
4080
        remprefix = "; ";
 
4081
        FFStartPrint (temp, afp->format, 2, 12, prefix, 12, 5, 5, NULL, FALSE);
3920
4082
        FFAddOneString (temp, "Polyadenylate residues occurring in the figure were omitted from the sequence.", TRUE, TRUE, TILDE_EXPAND);
3921
4083
        FFLineWrap(ffstring, temp, 12, 12, ASN2FF_GB_MAX, NULL);
3922
4084
        prefix = NULL;
3931
4093
        temp = FFGetString(ajp);
3932
4094
 
3933
4095
        sprintf (buf, "Map location: %s", str);
 
4096
        if (remprefix != NULL) {
 
4097
          ValNodeCopyStr (&remarks, 0, remprefix);
 
4098
        }
 
4099
        ValNodeCopyStr (&remarks, 0, buf);
 
4100
        remprefix = "; ";
3934
4101
        FFStartPrint (temp, afp->format, 2, 12, prefix, 12, 5, 5, NULL, FALSE);
3935
4102
        FFAddOneString (temp, buf, TRUE, TRUE, TILDE_EXPAND);
3936
4103
        FFLineWrap(ffstring, temp, 12, 12, ASN2FF_GB_MAX, NULL);
3952
4119
                FFRecycleString(ajp, temp);
3953
4120
                temp = FFGetString(ajp);
3954
4121
 
 
4122
                len = StringLen (crp->exp) + 20;
 
4123
                str = MemNew (sizeof (Char) * len);
 
4124
                if (str != NULL) {
 
4125
                  sprintf (str, "Erratum:[%s]", crp->exp);
 
4126
                  if (remprefix != NULL) {
 
4127
                    ValNodeCopyStr (&remarks, 0, remprefix);
 
4128
                  }
 
4129
                  ValNodeCopyStr (&remarks, 0, str);
 
4130
                  remprefix = "; ";
 
4131
                  str = MemFree (str);
 
4132
                }
3955
4133
                FFStartPrint (temp, afp->format, 2, 12, prefix, 12, 5, 5, NULL, FALSE);
3956
4134
                FFAddOneString (temp, "Erratum:", FALSE, FALSE, TILDE_TO_SPACES);
3957
4135
                FFAddTextToString (temp, "[", crp->exp, "]", FALSE, TRUE, TILDE_EXPAND);
3968
4146
            FFRecycleString(ajp, temp);
3969
4147
            temp = FFGetString(ajp);
3970
4148
 
 
4149
            if (remprefix != NULL) {
 
4150
              ValNodeCopyStr (&remarks, 0, remprefix);
 
4151
            }
 
4152
            ValNodeCopyStr (&remarks, 0, csp->descr);
 
4153
            remprefix = "; ";
3971
4154
            FFStartPrint (temp, afp->format, 2, 12, prefix, 12, 5, 5, NULL, FALSE);
3972
4155
            /* FFAddOneString (temp, csp->descr, FALSE, TRUE, TILDE_EXPAND); */
3973
4156
            AddCommentWithURLlinks(ajp, temp, NULL, csp->descr, NULL);
3984
4167
 
3985
4168
  if (gbseq != NULL) {
3986
4169
    if (gbref != NULL) {
3987
 
      AddReferenceToGbseq (gbseq, gbref, str);
 
4170
      if (remarks != NULL) {
 
4171
        gbref->remark = MergeFFValNodeStrs (remarks);
 
4172
      }
 
4173
 
 
4174
      AddReferenceToGbseq (gbseq, gbref, str, rbp, bsp);
3988
4175
    }
3989
4176
  }
 
4177
  ValNodeFreeData (remarks);
3990
4178
 
3991
4179
  FFRecycleString(ajp, ffstring);
3992
4180
  FFRecycleString(ajp, temp);