static void DoFastaFeat ( SeqFeatPtr sfp, Pointer userdata ) { CSpeedFlagPtr cfp; CharPtr str; if (sfp == NULL) return; cfp = (CSpeedFlagPtr) userdata; if (cfp == NULL) return; if (cfp->ofp != NULL) { str = SeqLocPrint (sfp->location); if (str != NULL) { fprintf (cfp->ofp, "> [%s]\n", str); MemFree (str); } SeqLocFastaStream (sfp->location, cfp->ofp, STREAM_EXPAND_GAPS, 70, 0, 0); } else { SeqPortStreamLoc (sfp->location, STREAM_EXPAND_GAPS, NULL, EmptyStreamProc); } }
Int2 LIBCALLBACK VSMFastaProtSaveWithProduct ( Pointer data ) { Char filename[255]; FastaExportOptionsData fe; ValNode vn; SeqEntryPtr sep = NULL; SeqFeatPtr sfp; SeqLocPtr slp; Uint1 code; BioseqPtr bsp; OMProcControlPtr ompcp; if ((ompcp = (OMProcControlPtr) data) == NULL) { return OM_MSG_RET_ERROR; } sfp = NULL; switch(ompcp->input_itemtype) { case OBJ_SEQENTRY: case OBJ_BIOSEQ: case OBJ_BIOSEQSET: break; case OBJ_SEQFEAT: sfp = (SeqFeatPtr) ompcp->input_data; if (sfp == NULL || (sfp->data.choice != SEQFEAT_CDREGION && sfp->data.choice != SEQFEAT_PROT)) return OM_MSG_RET_ERROR; break; default: ErrPostEx(SEV_ERROR, 0,0,"ToFasta: Can only write Seq-entry, Bioseq, or Bioseq-set"); return OM_MSG_RET_ERROR; } if (sfp != NULL) { } else if (ompcp->input_choicetype == OBJ_SEQENTRY) sep = (SeqEntryPtr)(ompcp->input_choice); else { vn.next = NULL; vn.data.ptrvalue = ompcp->input_data; if (ompcp->input_itemtype == OBJ_BIOSEQ) vn.choice = 1; else vn.choice = 2; sep = &vn; } filename[0] = '\0'; if (GetOutputFileName(filename, (size_t)254, NULL)) { WatchCursor(); #ifdef WIN_MAC fe.fp = FileOpen (filename, "r"); if (fe.fp != NULL) { FileClose (fe.fp); } else { FileCreate (filename, "TEXT", "ttxt"); } #endif fe.fp = FileOpen(filename, "w"); if (sfp != NULL) { code = Seq_code_ncbieaa; slp = sfp->location; if (sfp->data.choice == SEQFEAT_CDREGION) { slp = sfp->product; } bsp = GetBioseqGivenSeqLoc (slp, ompcp->input_entityID); if (slp != NULL && bsp != NULL) { SeqLocFastaStream (slp, fe.fp, STREAM_EXPAND_GAPS | STREAM_CORRECT_INVAL, 70, 0, 0); } } else { fe.flags = STREAM_EXPAND_GAPS | STREAM_CORRECT_INVAL; fe.linelen = 70; fe.blocklen = 0; fe.grouplen = 0; VisitBioseqsInSep (sep, &fe, WriteOneProteinWithProduct); } FileClose(fe.fp); ArrowCursor(); } return OM_MSG_RET_DONE; }
static Int2 LIBCALLBACK VSMGenericFastaSave (OMProcControlPtr ompcp, Boolean is_na) { Char filename[255]; FILE * fp; ValNode vn; SeqEntryPtr sep = NULL; SeqFeatPtr sfp; SeqLocPtr slp; Uint1 code; BioseqPtr bsp; sfp = NULL; switch(ompcp->input_itemtype) { case OBJ_SEQENTRY: case OBJ_BIOSEQ: case OBJ_BIOSEQSET: break; case OBJ_SEQFEAT: sfp = (SeqFeatPtr) ompcp->input_data; if (sfp == NULL) return OM_MSG_RET_ERROR; break; default: ErrPostEx(SEV_ERROR, 0,0,"ToFasta: Can only write Seq-entry, Bioseq, or Bioseq-set"); return OM_MSG_RET_ERROR; } if (sfp != NULL) { } else if (ompcp->input_choicetype == OBJ_SEQENTRY) sep = (SeqEntryPtr)(ompcp->input_choice); else { vn.next = NULL; vn.data.ptrvalue = ompcp->input_data; if (ompcp->input_itemtype == OBJ_BIOSEQ) vn.choice = 1; else vn.choice = 2; sep = &vn; } filename[0] = '\0'; if (GetOutputFileName(filename, (size_t)254, NULL)) { WatchCursor(); #ifdef WIN_MAC fp = FileOpen (filename, "r"); if (fp != NULL) { FileClose (fp); } else { FileCreate (filename, "TEXT", "ttxt"); } #endif fp = FileOpen(filename, "w"); if (sfp != NULL) { if (is_na) code = Seq_code_iupacna; else code = Seq_code_ncbieaa; slp = sfp->location; if (sfp->data.choice == SEQFEAT_CDREGION && (! is_na)) { slp = sfp->product; } /* spp = SeqPortNewByLoc (slp, code); */ bsp = GetBioseqGivenSeqLoc (slp, ompcp->input_entityID); /* if (spp != NULL && bsp != NULL) { while (FastaSeqLine(spp, buf, 70, is_na)) FastaFileFunc(bsp, FASTA_SEQLINE, buf, sizeof (buf), (Pointer)fp); SeqPortFree(spp); FastaFileFunc(bsp, FASTA_EOS, buf, sizeof (buf), (Pointer)fp); } */ if (slp != NULL && bsp != NULL) { SeqLocFastaStream (slp, fp, STREAM_EXPAND_GAPS | STREAM_CORRECT_INVAL, 70, 0, 0); } } else { /* SeqEntryToFasta(sep, fp, is_na); */ SeqEntryFastaStreamEx (sep, fp, STREAM_EXPAND_GAPS | STREAM_CORRECT_INVAL, 70, 0, 0, is_na, !is_na, FALSE, !is_na, FALSE); } FileClose(fp); ArrowCursor(); } return OM_MSG_RET_DONE; }