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

« back to all changes in this revision

Viewing changes to api/asn2gnb2.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:
30
30
*
31
31
* Version Creation Date:   10/21/98
32
32
*
33
 
* $Revision: 1.115 $
 
33
* $Revision: 1.125 $
34
34
*
35
35
* File Description:  New GenBank flatfile generator - work in progress
36
36
*
63
63
#endif
64
64
#endif
65
65
 
66
 
static CharPtr link_projid = "http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=genomeprj&cmd=Retrieve&dopt=Overview&list_uids=";
 
66
static CharPtr link_projid = "http://www.ncbi.nlm.nih.gov/sites/entrez?db=genomeprj&cmd=Retrieve&dopt=Overview&list_uids=";
67
67
 
68
 
static CharPtr link_wgs = "http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?";
 
68
static CharPtr link_wgs = "http://www.ncbi.nlm.nih.gov/sites/entrez?";
69
69
 
70
70
static CharPtr link_sp = "http://www.uniprot.org/uniprot/";
71
71
 
 
72
/*
72
73
static CharPtr link_featn = "http://www.ncbi.nlm.nih.gov/nuccore/";
73
74
static CharPtr link_featp = "http://www.ncbi.nlm.nih.gov/protein/";
 
75
*/
74
76
 
75
77
static CharPtr link_seqn = "http://www.ncbi.nlm.nih.gov/nuccore/";
76
78
static CharPtr link_seqp = "http://www.ncbi.nlm.nih.gov/protein/";
454
456
  Char               gene [32];
455
457
  Boolean            genome_view;
456
458
  GBSeqPtr           gbseq;
457
 
  Int4               gi = 0;
458
459
  ValNodePtr         gilistpos;
459
 
  Char               gi_buf [16];
460
460
  SeqIdPtr           gpp = NULL;
461
461
  Boolean            has_next_pref_ul = FALSE;
462
462
  Boolean            hasComment;
464
464
  Int2               imol = 0;
465
465
  IndxPtr            index;
466
466
  Int2               istrand;
467
 
  Boolean            is_aa;
468
467
  Boolean            is_nm = FALSE;
469
468
  Boolean            is_np = FALSE;
470
469
  Boolean            is_nz = FALSE;
485
484
  Uint1              origin;
486
485
  OrgRefPtr          orp;
487
486
  BioseqPtr          parent;
488
 
  CharPtr            prefix = NULL;
489
487
  Int4               prevGi;
490
488
  SeqDescrPtr        sdp;
491
489
  Char               sect [128];
506
504
  ValNodePtr         vnp;
507
505
  Boolean            wgsmaster = FALSE;
508
506
  Int2               moltype, strandedness, topol;
 
507
  /*
 
508
  Int4               gi = 0;
 
509
  Char               gi_buf [16];
 
510
  Boolean            is_aa;
 
511
  CharPtr            prefix = NULL;
 
512
  */
509
513
 
510
514
  if (awp == NULL) return;
511
515
  ajp = awp->ajp;
1277
1281
 
1278
1282
  bbp->string = suffix;
1279
1283
 
 
1284
  /*
1280
1285
  if (awp->contig && (! awp->showconfeats) && awp->smartconfeats && GetWWW (ajp) &&
1281
1286
      (awp->format == GENBANK_FMT || awp->format == GENPEPT_FMT)) {
1282
1287
    is_aa = ISA_aa (bsp->mol);
1320
1325
      MemFree (prefix);
1321
1326
    }
1322
1327
  }
 
1328
  */
1323
1329
 
1324
1330
  if (GetWWW (ajp) && awp->mode == ENTREZ_MODE && awp->afp != NULL &&
1325
1331
      (awp->format == GENBANK_FMT || awp->format == GENPEPT_FMT)) {
2214
2220
  FFAddOneString(ffstring, "</a>", FALSE, FALSE, TILDE_IGNORE);
2215
2221
}
2216
2222
 
2217
 
static void AddOldProjectBlock (
2218
 
  Asn2gbWorkPtr awp
2219
 
)
2220
 
 
2221
 
{
2222
 
  IntAsn2gbJobPtr    ajp;
2223
 
  Asn2gbSectPtr      asp;
2224
 
  BaseBlockPtr       bbp;
2225
 
  BioseqPtr          bsp;
2226
 
  Char               buf [32];
2227
 
  UserFieldPtr       curr;
2228
 
  SeqMgrDescContext  dcontext;
2229
 
  StringItemPtr      ffstring;
2230
 
  GBSeqPtr           gbseq;
2231
 
  UserObjectPtr      gpuop = NULL;
2232
 
  ValNodePtr         head = NULL;
2233
 
  Uint4              itemID = 0;
2234
 
  ObjectIdPtr        oip;
2235
 
  Int4               parentID;
2236
 
  CharPtr            prefix;
2237
 
  Int4               projectID;
2238
 
  SeqDescrPtr        sdp;
2239
 
  UserObjectPtr      uop;
2240
 
  Int4               val;
2241
 
 
2242
 
  if (awp == NULL) return;
2243
 
  ajp = awp->ajp;
2244
 
  if (ajp == NULL) return;
2245
 
  bsp = awp->bsp;
2246
 
  if (bsp == NULL) return;
2247
 
  asp = awp->asp;
2248
 
  if (asp == NULL) return;
2249
 
 
2250
 
  if (! ISA_na (bsp->mol)) return;
2251
 
  if (awp->format != GENBANK_FMT) return;
2252
 
 
2253
 
  if (ajp->gbseq) {
2254
 
    gbseq = &asp->gbseq;
2255
 
  } else {
2256
 
    gbseq = NULL;
2257
 
  }
2258
 
 
2259
 
  sdp = SeqMgrGetNextDescriptor (bsp, NULL, Seq_descr_user, &dcontext);
2260
 
  while (sdp != NULL) {
2261
 
    uop = (UserObjectPtr) sdp->data.ptrvalue;
2262
 
    if (uop != NULL) {
2263
 
      oip = uop->type;
2264
 
      if (oip != NULL && StringICmp (oip->str, "GenomeProjectsDB") == 0) {
2265
 
        gpuop = uop;
2266
 
        itemID = dcontext.itemID;
2267
 
      }
2268
 
    }
2269
 
    sdp = SeqMgrGetNextDescriptor (bsp, sdp, Seq_descr_user, &dcontext);
2270
 
  }
2271
 
  if (gpuop == NULL) return;
2272
 
 
2273
 
  ffstring = FFGetString (ajp);
2274
 
  if ( ffstring == NULL ) return;
2275
 
 
2276
 
  bbp = Asn2gbAddBlock (awp, PROJECT_BLOCK, sizeof (BaseBlock));
2277
 
  if (bbp == NULL) return;
2278
 
 
2279
 
  bbp->entityID = awp->entityID;
2280
 
  bbp->itemID = itemID;
2281
 
  bbp->itemtype = OBJ_SEQDESC;
2282
 
 
2283
 
  FFStartPrint (ffstring, awp->format, 0, 12, "PROJECT", 12, 5, 5, "XX", TRUE);
2284
 
 
2285
 
  prefix = "GenomeProject:";
2286
 
  projectID = 0;
2287
 
  parentID = 0;
2288
 
  for (curr = gpuop->data; curr != NULL; curr = curr->next) {
2289
 
    oip = curr->label;
2290
 
    if (oip == NULL) continue;
2291
 
    if (StringICmp (oip->str, "ProjectID") == 0) {
2292
 
      if (curr->choice == 2) {
2293
 
        val = (Int4) curr->data.intvalue;
2294
 
        if (projectID > 0) {
2295
 
          sprintf (buf, "%ld", (long) projectID);
2296
 
          FFAddOneString (ffstring, prefix, FALSE, FALSE, TILDE_IGNORE);
2297
 
          if (GetWWW (ajp)) {
2298
 
            FF_asn2gb_www_projID (ffstring, buf);
2299
 
          } else {
2300
 
            FFAddOneString (ffstring, buf, FALSE, FALSE, TILDE_IGNORE);
2301
 
          }
2302
 
          /*
2303
 
          FFAddTextToString (ffstring, prefix, buf, NULL, FALSE, FALSE, TILDE_IGNORE);
2304
 
          */
2305
 
          if (gbseq != NULL) {
2306
 
            if (head == NULL) {
2307
 
              sprintf (buf, "%ld", (long) projectID);
2308
 
            } else {
2309
 
              sprintf (buf, ", %ld", (long) projectID);
2310
 
            }
2311
 
            ValNodeCopyStr (&head, 0, buf);
2312
 
          }
2313
 
          prefix = ",";
2314
 
          parentID = 0;
2315
 
        }
2316
 
        projectID = val;
2317
 
      }
2318
 
    } else if (StringICmp (oip->str, "ParentID") == 0) {
2319
 
      if (curr->choice == 2) {
2320
 
        val = (Int4) curr->data.intvalue;
2321
 
        parentID = val;
2322
 
      }
2323
 
    }
2324
 
  }
2325
 
  if (projectID > 0) {
2326
 
    sprintf (buf, "%ld", (long) projectID);
2327
 
    FFAddOneString (ffstring, prefix, FALSE, FALSE, TILDE_IGNORE);
2328
 
    if (GetWWW (ajp)) {
2329
 
      FF_asn2gb_www_projID (ffstring, buf);
2330
 
    } else {
2331
 
      FFAddOneString (ffstring, buf, FALSE, FALSE, TILDE_IGNORE);
2332
 
    }
2333
 
    /*
2334
 
    FFAddTextToString (ffstring, prefix, buf, NULL, FALSE, FALSE, TILDE_IGNORE);
2335
 
    */
2336
 
    if (gbseq != NULL) {
2337
 
      if (head == NULL) {
2338
 
        sprintf (buf, "%ld", (long) projectID);
2339
 
      } else {
2340
 
        sprintf (buf, ", %ld", (long) projectID);
2341
 
      }
2342
 
      ValNodeCopyStr (&head, 0, buf);
2343
 
    }
2344
 
  }
2345
 
 
2346
 
  bbp->string = FFEndPrint (ajp, ffstring, awp->format, 12, 12, 5, 5, "XX");
2347
 
  FFRecycleString (ajp, ffstring);
2348
 
 
2349
 
  if (gbseq != NULL) {
2350
 
    if (head != NULL) {
2351
 
      gbseq->project = MergeFFValNodeStrs (head);
2352
 
      ValNodeFreeData (head);
2353
 
    }
2354
 
  }
2355
 
 
2356
 
  if (awp->afp != NULL) {
2357
 
    DoImmediateFormat (awp->afp, bbp);
2358
 
  }
2359
 
}
2360
 
 
2361
2223
static CharPtr GetDBLinkString (
2362
2224
  UserObjectPtr uop
2363
2225
)
2365
2227
{
2366
2228
  Char          buf1 [256];
2367
2229
  Char          buf2 [256];
 
2230
  Char          buf3 [256];
2368
2231
  CharPtr PNTR  cpp;
2369
2232
  Int4          i;
2370
2233
  Int4Ptr       ip;
2380
2243
 
2381
2244
  buf1 [0] = '\0';
2382
2245
  buf2 [0] = '\0';
 
2246
  buf3 [0] = '\0';
2383
2247
 
2384
2248
  for (ufp = uop->data; ufp != NULL; ufp = ufp->next) {
2385
2249
    oip = ufp->label;
2416
2280
        }
2417
2281
      }
2418
2282
    }
 
2283
    if (StringICmp (oip->str, "ProbeDB") == 0 && ufp->choice == 7) {
 
2284
      cpp = (CharPtr PNTR) ufp->data.ptrvalue;
 
2285
      if (ufp->num > 0 && cpp != NULL) {
 
2286
        str = cpp [0];
 
2287
        if (StringDoesHaveText (str)) {
 
2288
          sprintf (buf3, "ProbeDB:%s", str);
 
2289
          for (i = 1; i < ufp->num; i++) {
 
2290
            str = cpp [i];
 
2291
            if (StringDoesHaveText (str)) {
 
2292
              sprintf (tmp, ",%s", str);
 
2293
              StringCat (buf3, tmp);
 
2294
            }
 
2295
          }
 
2296
        }
 
2297
      }
 
2298
    }
2419
2299
  }
2420
2300
 
2421
 
  if (StringHasNoText (buf1) && StringHasNoText (buf2)) return NULL;
 
2301
  if (StringHasNoText (buf1) && StringHasNoText (buf2) && StringHasNoText (buf3)) return NULL;
2422
2302
 
2423
 
  len = StringLen (buf1) + StringLen (buf2);
 
2303
  len = StringLen (buf1) + StringLen (buf2) + StringLen (buf3);
2424
2304
  str = (CharPtr) MemNew (sizeof (Char) * (len + 2));
2425
2305
  if (str == NULL) return NULL;
2426
2306
 
2437
2317
    prefix = "\n";
2438
2318
  }
2439
2319
 
 
2320
  if (StringDoesHaveText (buf3)) {
 
2321
    StringCat (str, prefix);
 
2322
    StringCat (str, buf3);
 
2323
    prefix = "\n";
 
2324
  }
 
2325
 
2440
2326
  return str;
2441
2327
}
2442
2328
 
2443
 
static void AddDblinkBlock (
 
2329
NLM_EXTERN void AddDblinkBlock (
2444
2330
  Asn2gbWorkPtr awp
2445
2331
)
2446
2332
 
2477
2363
  asp = awp->asp;
2478
2364
  if (asp == NULL) return;
2479
2365
 
 
2366
  if (ISA_na (bsp->mol) && awp->format != GENBANK_FMT) return;
 
2367
  if (ISA_aa (bsp->mol) && awp->format != GENPEPT_FMT) return;
 
2368
 
 
2369
  /*
2480
2370
  if (! ISA_na (bsp->mol)) return;
2481
2371
  if (awp->format != GENBANK_FMT) return;
 
2372
  */
2482
2373
 
2483
2374
  if (ajp->gbseq) {
2484
2375
    gbseq = &asp->gbseq;
2586
2477
    bbp->string = FFEndPrint (ajp, ffstring, awp->format, 12, 12, 5, 5, "XX");
2587
2478
    FFRecycleString (ajp, ffstring);
2588
2479
    ffstring = FFGetString (ajp);
 
2480
 
 
2481
    if (awp->afp != NULL) {
 
2482
      DoImmediateFormat (awp->afp, bbp);
 
2483
    }
2589
2484
  }
2590
2485
 
2591
2486
  if (dbuop != NULL) {
2609
2504
 
2610
2505
      bbp->string = FFEndPrint (ajp, ffstring, awp->format, 12, 12, 5, 5, "XX");
2611
2506
      MemFree (str);
 
2507
 
 
2508
      if (awp->afp != NULL) {
 
2509
        DoImmediateFormat (awp->afp, bbp);
 
2510
      }
2612
2511
    }
2613
2512
  }
2614
2513
 
2620
2519
      ValNodeFreeData (head);
2621
2520
    }
2622
2521
  }
2623
 
 
2624
 
  if (awp->afp != NULL) {
2625
 
    DoImmediateFormat (awp->afp, bbp);
2626
 
  }
2627
 
}
2628
 
 
2629
 
NLM_EXTERN void AddProjectBlock (
2630
 
  Asn2gbWorkPtr awp
2631
 
)
2632
 
 
2633
 
{
2634
 
  AddOldProjectBlock (awp);
2635
 
  AddDblinkBlock (awp);
2636
2522
}
2637
2523
 
2638
2524
/* only displaying PID in GenPept format */
3407
3293
   return (str);
3408
3294
}
3409
3295
 
3410
 
static Boolean FF_www_dbsource(
 
3296
static Boolean FF_www_dbsource (
3411
3297
  IntAsn2gbJobPtr ajp,
3412
3298
  StringItemPtr ffstring,
3413
3299
  CharPtr str,
3414
3300
  Boolean first,
3415
 
  Uint1 choice,
 
3301
  SeqIdPtr sip,
3416
3302
  Boolean is_na
3417
3303
)
 
3304
 
3418
3305
{
3419
 
  CharPtr  temp, end, text, loc, link=NULL;
3420
 
  Int2 j;
 
3306
  CharPtr  temp, end, text, loc, link = NULL;
 
3307
  Uint1    choice;
 
3308
  Int2     j;
 
3309
  Int4     gi = 0;
 
3310
  Char     gibuf [32];
 
3311
 
 
3312
  if (sip == NULL) return FALSE;
 
3313
  choice = sip->choice;
3421
3314
 
3422
3315
  if( GetWWW(ajp) ) {
3423
3316
    if (choice == SEQID_PIR) {
3468
3361
      if (choice == SEQID_SWISSPROT) {
3469
3362
        FFAddOneString (ffstring, "<a href=\"", FALSE, FALSE, TILDE_IGNORE);
3470
3363
        FF_Add_NCBI_Base_URL (ffstring, link);
 
3364
        for (text = temp; text != end; ++text ) {
 
3365
          FFAddOneChar (ffstring, *text, FALSE);
 
3366
        }
3471
3367
      } else {
3472
3368
        FFAddOneString (ffstring, "<a href=\"", FALSE, FALSE, TILDE_IGNORE);
3473
3369
        FF_Add_NCBI_Base_URL (ffstring, link);
3474
 
        FFAddOneString (ffstring, /* "val=" */ NULL, FALSE, FALSE, TILDE_IGNORE);
3475
 
      }
3476
 
      for (text = temp; text != end; ++text ) {
3477
 
        FFAddOneChar(ffstring, *text, FALSE);
 
3370
        gi = GetGIForSeqId (sip);
 
3371
        if (gi > 0) {
 
3372
          sprintf (gibuf, "%ld", (long) gi);
 
3373
          FFAddOneString (ffstring, gibuf, FALSE, FALSE, TILDE_IGNORE);
 
3374
        } else {
 
3375
          for (text = temp; text != end; ++text ) {
 
3376
            FFAddOneChar(ffstring, *text, FALSE);
 
3377
          }
 
3378
        }
3478
3379
      }
3479
3380
      FFAddOneString(ffstring, "\">", FALSE, FALSE, TILDE_IGNORE);
3480
3381
 
3550
3451
      case SEQID_PRF :
3551
3452
      case SEQID_PDB :
3552
3453
        if (WriteDbsourceID (sip, buf, &is_na)) {
3553
 
          FF_www_dbsource (ajp, ffstring, buf, TRUE, sip->choice, is_na);
 
3454
          FF_www_dbsource (ajp, ffstring, buf, TRUE, sip, is_na);
3554
3455
          FFAddNewLine(ffstring);
3555
3456
          unknown = FALSE;
3556
3457
        }
3606
3507
              }
3607
3508
              if (sip != NULL) {
3608
3509
                if (WriteDbsourceID (sip, buf, &is_na)) {
3609
 
                  FF_www_dbsource (ajp, ffstring, buf, TRUE, sip->choice, is_na);
 
3510
                  FF_www_dbsource (ajp, ffstring, buf, TRUE, sip, is_na);
3610
3511
                  FFAddNewLine(ffstring);
3611
3512
                  unknown = FALSE;
3612
3513
                }
3625
3526
                }
3626
3527
              }
3627
3528
              if (WriteDbsourceID (sip, buf, &is_na)) {
3628
 
                FF_www_dbsource (ajp, ffstring, buf, TRUE, sip->choice, is_na);
 
3529
                FF_www_dbsource (ajp, ffstring, buf, TRUE, sip, is_na);
3629
3530
                FFAddNewLine(ffstring);
3630
3531
                unknown = FALSE;
3631
3532
              }
3633
3534
          }
3634
3535
        } else {
3635
3536
          if (WriteDbsourceID (sip, buf, &is_na)) {
3636
 
            FF_www_dbsource (ajp, ffstring, buf, TRUE, sip->choice, is_na);
 
3537
            FF_www_dbsource (ajp, ffstring, buf, TRUE, sip, is_na);
3637
3538
            FFAddNewLine(ffstring);
3638
3539
            unknown = FALSE;
3639
3540
          }
3998
3899
          }
3999
3900
          ValNodeCopyStr (&head, 0, "WGS");
4000
3901
          break;
 
3902
        /*
4001
3903
        case MI_TECH_barcode :
4002
3904
          if (head != NULL) {
4003
3905
            ValNodeCopyStr (&head, 0, "; ");
4004
3906
          }
4005
3907
          ValNodeCopyStr (&head, 0, "BARCODE");
4006
3908
          break;
 
3909
        */
4007
3910
        case MI_TECH_tsa :
4008
3911
          if (head != NULL) {
4009
3912
            ValNodeCopyStr (&head, 0, "; ");