1 /*   asn2gnbi.h
2 * ===========================================================================
3 *
4 *                            PUBLIC DOMAIN NOTICE
5 *            National Center for Biotechnology Information (NCBI)
6 *
7 *  This software/database is a "United States Government Work" under the
8 *  terms of the United States Copyright Act.  It was written as part of
9 *  the author's official duties as a United States Government employee and
10 *  thus cannot be copyrighted.  This software/database is freely available
11 *  to the public for use. The National Library of Medicine and the U.S.
12 *  Government do not place any restriction on its use or reproduction.
13 *  We would, however, appreciate having the NCBI and the author cited in
14 *  any work or product based on this material
15 *
16 *  Although all reasonable efforts have been taken to ensure the accuracy
17 *  and reliability of the software and data, the NLM and the U.S.
18 *  Government do not and cannot warrant the performance or results that
19 *  may be obtained by using this software or data. The NLM and the U.S.
20 *  Government disclaim all warranties, express or implied, including
21 *  warranties of performance, merchantability or fitness for any particular
22 *  purpose.
23 *
24 * ===========================================================================
25 *
26 * File Name:  asn2gnbi.h
27 *
28 * Author:  Karl Sirotkin, Tom Madden, Tatiana Tatusov, Jonathan Kans
29 *
30 * Version Creation Date:   12/30/03
31 *
32 * $Revision: 1.173 $
33 *
34 * File Description:  New GenBank flatfile generator, internal header
35 *
36 * Modifications:
37 * --------------------------------------------------------------------------
38 * ==========================================================================
39 */
40 
41 #ifndef _ASN2NGNBI_
42 #define _ASN2NGNBI_
43 
44 #include <asn2gnbp.h>
45 #include <explore.h>
46 
47 #undef NLM_EXTERN
48 #ifdef NLM_IMPORT
49 #define NLM_EXTERN NLM_IMPORT
50 #else
51 #define NLM_EXTERN extern
52 #endif
53 
54 #ifdef __cplusplus
55 extern "C" {
56 #endif
57 
58 
59 
60 #define ASN2FF_EMBL_MAX 78
61 #define ASN2FF_GB_MAX   79
62 #define SEQID_MAX_LEN   41
63 
64 #define TILDE_IGNORE     0
65 #define TILDE_TO_SPACES  1
66 #define TILDE_EXPAND     2
67 #define TILDE_OLD_EXPAND 3
68 #define TILDE_SEMICOLON  4
69 
70 
71 /* flags set by mode to customize behavior */
72 
73 typedef struct asn2gbflags {
74   Boolean             suppressLocalID;
75   Boolean             validateFeats;
76   Boolean             ignorePatPubs;
77   Boolean             dropShortAA;
78   Boolean             avoidLocusColl;
79   Boolean             iupacaaOnly;
80   Boolean             dropBadCitGens;
81   Boolean             noAffilOnUnpub;
82   Boolean             dropIllegalQuals;
83   Boolean             checkQualSyntax;
84   Boolean             needRequiredQuals;
85   Boolean             needOrganismQual;
86   Boolean             needAtLeastOneRef;
87   Boolean             citArtIsoJta;
88   Boolean             dropBadDbxref;
89   Boolean             useEmblMolType;
90   Boolean             hideBankItComment;
91   Boolean             checkCDSproductID;
92   Boolean             suppressSegLoc;
93   Boolean             srcQualsToNote;
94   Boolean             hideEmptySource;
95   Boolean             goQualsToNote;
96   Boolean             separateGeneSyns;
97   Boolean             refSeqQualsToNote;
98   Boolean             selenocysteineToNote;
99   Boolean             pyrrolysineToNote;
100   Boolean             extraProductsToNote;
101   Boolean             codonRecognizedToNote;
102   Boolean             hideSpecificGeneMaps;
103   Boolean             forGbRelease;
104 } Asn2gbFlags, PNTR Asn2gbFlagsPtr;
105 
106 /* internal Asn2gbSect structure has fields on top of Asn2gbSect fields */
107 
108 typedef struct int_Asn2gbSect {
109   Asn2gbSect  asp;
110   Int4        feat_counts [FEATDEF_MAX];
111   CharPtr     gi;
112   CharPtr     acc;
113   CharPtr     feat_key [FEATDEF_MAX];
114   Boolean     feat_js_prefix_added;
115 } IntAsn2gbSect, PNTR IntAsn2gbSectPtr;
116 
117 /* string structure */
118 
119 #define STRING_BUF_LEN  1024
120 
121 typedef struct stringitem {
122   struct stringitem  *curr;
123   struct stringitem  *next;
124   Pointer            iajp;
125   Char               buf [STRING_BUF_LEN];
126   Int4               pos;
127 } StringItem, PNTR StringItemPtr;
128 
129 /* internal asn2gbjob structure has fields on top of Asn2gbJob fields */
130 
131 typedef struct int_asn2gb_job {
132   Asn2gbJob       ajp;
133   FmtType         format;
134   ModType         mode;
135   Asn2gbFlags     flags;
136   Boolean         showFarTransl;
137   Boolean         transIfNoProd;
138   Boolean         alwaysTranslCds;
139   Boolean         showTranscript;
140   Boolean         showPeptide;
141   Boolean         hideTranslation;
142   Boolean         hideEvidence;
143   Boolean         masterStyle;
144   Boolean         newSourceOrg;
145   Boolean         produceInsdSeq;
146   Boolean         oldXmlPolicy;
147   Boolean         refseqConventions;
148   ValNodePtr      lockedBspList;
149   ValNodePtr      manygaps;
150   ValNodePtr      gapvnp;
151   ValNodePtr      remotevnp;
152   Asn2gbLockFunc  remotelock;
153   Asn2gbFreeFunc  remotefree;
154   Pointer         remotedata;
155   Boolean         relModeError;
156   Boolean         skipProts;
157   Boolean         skipMrnas;
158   IndxPtr         index;
159   GBSeqPtr        gbseq;
160   BlockMask       bkmask;
161   AsnIoPtr        aip;
162   AsnTypePtr      atp;
163   StringItemPtr   pool;
164   Boolean         www;
165   Boolean         specialGapFormat;
166   Boolean         relaxedMapping;
167   Boolean         gpipdDeflines;
168   Boolean         hideProteinID;
169   Boolean         hideGoTerms;
170   Boolean         multiIntervalGenes;
171   Boolean         segmentedBioseqs;
172   Boolean         smallGenomeSet;
173   Boolean         reindex;
174   Int4            seqGapCurrLen;
175   Boolean         hideGI;
176   ValNodePtr      gihead;
177   ValNodePtr      gitail;
178   TextFsaPtr      bad_html_fsa;
179   Boolean         seqspans;
180   Int2            sat;
181   Int4            sat_key;
182 } IntAsn2gbJob, PNTR IntAsn2gbJobPtr;
183 
184 /* array for assigning biosource and feature data fields to qualifiers */
185 /* should be allocated to MAX (ASN2GNBK_TOTAL_SOURCE, ASN2GNBK_TOTAL_FEATUR) */
186 
187 typedef union qualval {
188   CharPtr              str;
189   Boolean              ble;
190   Int4                 num;
191   ValNodePtr           vnp;
192   GBQualPtr            gbq;
193   OrgModPtr            omp;
194   SubSourcePtr         ssp;
195   CodeBreakPtr         cbp;
196   SeqLocPtr            slp;
197   SeqIdPtr             sip;
198   tRNAPtr              trp;
199   UserObjectPtr        uop;
200   UserFieldPtr         ufp;
201   RNAGenPtr            rgp;
202   GeneNomenclaturePtr  gnp;
203   PCRReactionSetPtr    prp;
204   DbtagPtr             dbt;
205 } QualVal, PNTR QualValPtr;
206 
207 /* structure passed to individual paragraph format functions */
208 
209 typedef struct asn2gbformat {
210   IntAsn2gbJobPtr  ajp;
211   Asn2gbSectPtr    asp;
212   QualValPtr       qvp;
213   FmtType          format;
214   Asn2gbWriteFunc  ffwrite;
215   Pointer          userdata;
216   FILE             *fp;
217   AsnIoPtr         aip;
218   AsnTypePtr       atp;
219 } Asn2gbFormat, PNTR Asn2gbFormatPtr;
220 
221 /* structure for bypassing unannotated WGS components in Web Entrez */
222 
223 typedef struct wgsaccn {
224   Char     accn [6];
225   Int2     count;
226   Boolean  hasfeats;
227 } WgsAccn, PNTR WgsAccnPtr;
228 
229 /* structure for storing working parameters while building asn2gb_job structure */
230 
231 typedef struct asn2gbwork {
232   IntAsn2gbJobPtr  ajp;
233   Uint2            entityID;
234 
235   FmtType          format;
236   ModType          mode;
237   StlType          style;
238 
239   ValNodePtr       pubhead;    /* for collecting publications */
240   ValNodePtr       srchead;    /* for collecting biosources */
241 
242   /* linked lists of paragraphs, sections, blocks */
243 
244   ValNodePtr       sectionList;
245   ValNodePtr       blockList;    /* reset for each new section */
246 
247   /* most recent node of linked lists, for quickly adding next node */
248 
249   ValNodePtr       lastsection;
250   ValNodePtr       lastblock;    /* reset for each new section */
251 
252   Int4             currsection;
253 
254   /* set if doing immediate write at time of creation for web speed */
255 
256   Asn2gbFormatPtr  afp;
257 
258   /* section fields needed for populating blocks */
259 
260   Asn2gbSectPtr    asp;
261 
262   BioseqPtr        target;
263   BioseqPtr        parent;
264   BioseqPtr        bsp;
265   BioseqPtr        refs;
266   SeqLocPtr        slp;
267   Uint2            seg;
268   Int4             numsegs;
269   Int4             partcount;
270   Int4             from;
271   Int4             to;
272 
273   Int2             sectionCount;
274   Int2             sectionMax;
275   BIG_ID           currGi;
276   BIG_ID           prevGi;
277   BIG_ID           nextGi;
278   ValNodePtr       gilistpos;
279   Char             currAccVer [SEQID_MAX_LEN];
280   Char             currAccVerLabel [SEQID_MAX_LEN];
281 
282   Boolean          showAllFeats;
283 
284   Boolean          contig;
285   Boolean          showconfeats;
286   Boolean          showconsource;
287   Boolean          smartconfeats;
288 
289   Boolean          onlyNearFeats;
290   Boolean          farFeatsSuppress;
291   Boolean          nearFeatsSuppress;
292 
293   Boolean          citSubsFirst;
294   Boolean          hideGeneFeats;
295   Boolean          newLocusLine;
296   Boolean          showBaseCount;
297   Boolean          forcePrimaryBlock;
298 
299   Boolean          showFeatStats;
300   Boolean          showRefStats;
301   Boolean          hideFeatures;
302   Boolean          hideImpFeats;
303   Boolean          hideVariations;
304   Boolean          hideRepeatRegions;
305   Boolean          hideSitesBondsRegions;
306   Boolean          hideCddFeats;
307   Boolean          hideCdsProdFeats;
308 
309   Boolean          hideGeneRIFs;
310   Boolean          onlyGeneRIFs;
311   Boolean          onlyReviewPubs;
312   Boolean          newestPubs;
313   Boolean          oldestPubs;
314   Boolean          hidePubs;
315 
316   Boolean          showFtableRefs;
317   Boolean          hideGaps;
318   Boolean          hideSources;
319   Boolean          hideSequence;
320 
321   Boolean          isGPS;
322   Boolean          copyGpsCdsUp;
323   Boolean          copyGpsGeneDown;
324 
325   Boolean          isNCBIGenomes;
326   Boolean          isRefSeq;
327 
328   Boolean          showContigAndSeq;
329 
330   Char             basename [SEQID_MAX_LEN];
331 
332   SeqFeatPtr       currfargap;
333 
334   SeqFeatPtr       lastsfp;
335   SeqAnnotPtr      lastsap;
336   Int4             lastleft;
337   Int4             lastright;
338 
339   SeqFeatPtr       bestprot;
340 
341   Boolean          firstfeat;
342   Boolean          featseen;
343   Boolean          featjustseen;
344   Int4             localFeatCount;
345   ValNodePtr       wgsaccnlist;
346 
347   Boolean          has_mat_peptide;
348   Boolean          has_sig_peptide;
349   Int2             sig_pept_trim_len;
350 
351   Boolean          farFeatTimeLimit;
352   time_t           farFeatStartTime;
353 
354   Boolean          sourcePubFuse;
355 
356   SeqSubmitPtr     ssp;
357   Boolean          hup;
358 
359   Boolean          failed;
360 } Asn2gbWork, PNTR Asn2gbWorkPtr;
361 
362 
363 /* Seq-hist replacedBy is preformatted into string field, */
364 /* then comment descriptors, Map location:, and Region:, */
365 /* then comment features, finally HTGS */
366 
367 typedef struct comment_block {
368   ASN2GB_BASE_BLOCK
369   Boolean           first;
370   Boolean           no_blank_before;
371 } CommentBlock, PNTR CommentBlockPtr;
372 
373 /* internal reference block has fields on top of RefBlock fields */
374 
375 typedef struct int_ref_block {
376   RefBlock   rb;
377   DatePtr    date;     /* internal sorting use only */
378   SeqLocPtr  loc;      /* final location on target bioseq */
379   CharPtr    authstr;  /* author string */
380   Uint2      index;    /* index if feature on target bioseq */
381   Boolean    justuids; /* gibb pub with uids and Figure, etc. */
382   CharPtr    fig;      /* figure string from equivalent gibb pub */
383   CharPtr    maploc;   /* maploc string from equivalent gibb pub */
384   Boolean    poly_a;   /* poly_a field from equivalent gibb pub */
385   Int4       left;
386   Int4       right;
387 } IntRefBlock, PNTR IntRefBlockPtr;
388 
389 /* internal source block has fields on top of BaseBlock fields */
390 
391 typedef struct int_src_block {
392   BaseBlock         bb;
393   Boolean           is_descriptor;
394   Boolean           is_focus;
395   Boolean           is_synthetic;
396   BioSourcePtr      biop;
397   Uint4             orghash;
398   Uint4             modhash;
399   Uint4             subhash;
400   Uint4             xrfhash;
401   SeqLocPtr         loc;     /* final location on target bioseq */
402   CharPtr           taxname;
403   CharPtr           comment;
404   OrgModPtr         omp;
405   SubSourcePtr      ssp;
406   ValNodePtr        vnp;
407   Int4              left;
408   Int4              right;
409   Int4              source_count;
410 } IntSrcBlock, PNTR IntSrcBlockPtr;
411 
412 /* internal feature block has fields on top of FeatBlock fields */
413 
414 typedef struct int_feat_block {
415   FeatBlock  fb;
416   Boolean    mapToNuc;
417   Boolean    mapToProt;
418   Boolean    mapToGen;
419   Boolean    mapToMrna;
420   Boolean    mapToPep;
421   Boolean    isCDS;     /* set if using IntCdsBlock */
422   Boolean    isPrt;     /* set if using IntPrtBlock */
423   Boolean    firstfeat;
424   Int4       left;
425   Int4       right;
426   Int4       feat_count; /* unique in combination with feature type */
427 } IntFeatBlock, PNTR IntFeatBlockPtr;
428 
429 /* internal cds block has fields on top of IntFeatBlock fields */
430 
431 typedef struct int_cds_block {
432   IntFeatBlock  ifb;
433   CharPtr       fig;    /* figure string from pub */
434   CharPtr       maploc; /* maploc string from pub */
435 } IntCdsBlock, PNTR IntCdsBlockPtr;
436 
437 /* internal protein block has fields on top of IntFeatBlock fields */
438 
439 typedef struct int_prt_block {
440   IntFeatBlock  ifb;
441   Boolean       is_whole_loc;
442   Boolean       suppress_mol_wt;
443   Boolean       trim_initial_met;
444   Int2          sig_pept_trim_len;
445 } IntPrtBlock, PNTR IntPrtBlockPtr;
446 
447 
448 /* enumerated qualifier category definitions */
449 
450 typedef enum {
451   Qual_class_ignore = 0,
452   Qual_class_string,
453   Qual_class_tilde,
454   Qual_class_sgml,
455   Qual_class_boolean,
456   Qual_class_int,
457   Qual_class_evidence,
458   Qual_class_exception,
459   Qual_class_valnode,
460   Qual_class_EC_valnode,
461   Qual_class_xtraprds,
462   Qual_class_quote,
463   Qual_class_EC_quote,
464   Qual_class_noquote,
465   Qual_class_label,
466   Qual_class_number,
467   Qual_class_paren,
468   Qual_class_usedin,
469   Qual_class_region,
470   Qual_class_replace,
471   Qual_class_consplice,
472   Qual_class_bond,
473   Qual_class_site,
474   Qual_class_L_R_B,
475   Qual_class_rpt,
476   Qual_class_organelle,
477   Qual_class_orgmod,
478   Qual_class_subsource,
479   Qual_class_code_break,
480   Qual_class_anti_codon,
481   Qual_class_codon,
482   Qual_class_compare,
483   Qual_class_method,
484   Qual_class_pubset,
485   Qual_class_db_xref,
486   Qual_class_nuc_id,
487   Qual_class_prt_id,
488   Qual_class_seq_loc,
489   Qual_class_its,
490   Qual_class_sec_str,
491   Qual_class_trna_codons,
492   Qual_class_translation,
493   Qual_class_transcription,
494   Qual_class_peptide,
495   Qual_class_protnames,
496   Qual_class_encodes,
497   Qual_class_illegal,
498   Qual_class_note,
499   Qual_class_rpt_unit,
500   Qual_class_product,
501   Qual_class_model_ev,
502   Qual_class_gene_syn,
503   Qual_class_sep_gene_syn,
504   Qual_class_locus_tag,
505   Qual_class_map,
506   Qual_class_go,
507   Qual_class_nomenclature,
508   Qual_class_gene_nomen,
509   Qual_class_pcr,
510   Qual_class_pcr_react,
511   Qual_class_mol_wt,
512   Qual_class_voucher,
513   Qual_class_lat_lon,
514   Qual_class_mobile_element,
515   Qual_class_tag_peptide,
516   Qual_class_variation_id,
517   Qual_class_delta_item,
518   Qual_class_variation_set,
519   Qual_class_experiment
520 }  QualType;
521 
522 /* source 'feature' */
523 
524 /* some qualifiers will require additional content verification not
525    explicitly indicated by the class type */
526 
527 typedef enum {
528   SCQUAL_acronym = 1,
529   SCQUAL_altitude,
530   SCQUAL_anamorph,
531   SCQUAL_authority,
532   SCQUAL_biotype,
533   SCQUAL_biovar,
534   SCQUAL_bio_material,
535   SCQUAL_breed,
536   SCQUAL_cell_line,
537   SCQUAL_cell_type,
538   SCQUAL_chemovar,
539   SCQUAL_chromosome,
540   SCQUAL_citation,
541   SCQUAL_clone,
542   SCQUAL_clone_lib,
543   SCQUAL_collected_by,
544   SCQUAL_collection_date,
545   SCQUAL_common,
546   SCQUAL_common_name,
547   SCQUAL_country,
548   SCQUAL_cultivar,
549   SCQUAL_culture_collection,
550   SCQUAL_db_xref,
551   SCQUAL_org_xref,
552   SCQUAL_dev_stage,
553   SCQUAL_dosage,
554   SCQUAL_ecotype,
555   SCQUAL_endogenous_virus_name,
556   SCQUAL_environmental_sample,
557   SCQUAL_extrachrom,
558   SCQUAL_focus,
559   SCQUAL_forma,
560   SCQUAL_forma_specialis,
561   SCQUAL_frequency,
562   SCQUAL_fwd_primer_name,
563   SCQUAL_fwd_primer_seq,
564   SCQUAL_gb_acronym,
565   SCQUAL_gb_anamorph,
566   SCQUAL_gb_synonym,
567   SCQUAL_genotype,
568   SCQUAL_germline,
569   SCQUAL_group,
570   SCQUAL_haplogroup,
571   SCQUAL_haplotype,
572   SCQUAL_identified_by,
573   SCQUAL_ins_seq_name,
574   SCQUAL_isolate,
575   SCQUAL_isolation_source,
576   SCQUAL_lab_host,
577   SCQUAL_label,
578   SCQUAL_lat_lon,
579   SCQUAL_linkage_group,
580   SCQUAL_macronuclear,
581   SCQUAL_map,
582   SCQUAL_mating_type,
583   SCQUAL_metagenome_note,
584   SCQUAL_metagenome_source,
585   SCQUAL_metagenomic,
586   SCQUAL_mol_type,
587   SCQUAL_note,
588   SCQUAL_old_lineage,
589   SCQUAL_old_name,
590   SCQUAL_organism,
591   SCQUAL_organelle,
592   SCQUAL_orgmod_note,
593   SCQUAL_pathovar,
594   SCQUAL_PCR_primers,
595   SCQUAL_PCR_primer_note,
596   SCQUAL_PCR_reaction,
597   SCQUAL_phenotype,
598   SCQUAL_plasmid_name,
599   SCQUAL_plastid_name,
600   SCQUAL_pop_variant,
601   SCQUAL_rearranged,
602   SCQUAL_rev_primer_name,
603   SCQUAL_rev_primer_seq,
604   SCQUAL_segment,
605   SCQUAL_seqfeat_note,
606   SCQUAL_sequenced_mol,
607   SCQUAL_serogroup,
608   SCQUAL_serotype,
609   SCQUAL_serovar,
610   SCQUAL_sex,
611   SCQUAL_spec_or_nat_host,
612   SCQUAL_specimen_voucher,
613   SCQUAL_strain,
614   SCQUAL_sub_clone,
615   SCQUAL_sub_group,
616   SCQUAL_sub_species,
617   SCQUAL_sub_strain,
618   SCQUAL_sub_type,
619   SCQUAL_subsource_note,
620   SCQUAL_synonym,
621   SCQUAL_teleomorph,
622   SCQUAL_tissue_lib,
623   SCQUAL_tissue_type,
624   SCQUAL_transgenic,
625   SCQUAL_transposon_name,
626   SCQUAL_type,
627   SCQUAL_type_material,
628   SCQUAL_unstructured,
629   SCQUAL_usedin,
630   SCQUAL_variety,
631   SCQUAL_whole_replicon,
632   SCQUAL_zero_orgmod,
633   SCQUAL_one_orgmod,
634   SCQUAL_zero_subsrc,
635   ASN2GNBK_TOTAL_SOURCE
636 }  SourceType;
637 
638 NLM_EXTERN SourceType orgModToSourceIdx [42];
639 
640 typedef enum {
641   FTQUAL_allele = 1,
642   FTQUAL_anticodon,
643   FTQUAL_artificial_location,
644   FTQUAL_artificial_location_str,
645   FTQUAL_bond,
646   FTQUAL_bond_type,
647   FTQUAL_bound_moiety,
648   FTQUAL_cdd_definition,
649   FTQUAL_cds_product,
650   FTQUAL_citation,
651   FTQUAL_clone,
652   FTQUAL_coded_by,
653   FTQUAL_compare,
654   FTQUAL_codon,
655   FTQUAL_codon_start,
656   FTQUAL_cons_splice,
657   FTQUAL_db_xref,
658   FTQUAL_delta_item,
659   FTQUAL_derived_from,
660   FTQUAL_direction,
661   FTQUAL_EC_number,
662   FTQUAL_encodes,
663   FTQUAL_estimated_length,
664   FTQUAL_evidence,
665   FTQUAL_exception,
666   FTQUAL_exception_note,
667   FTQUAL_experiment,
668   FTQUAL_experiment_string,
669   FTQUAL_extra_products,
670   FTQUAL_figure,
671   FTQUAL_frequency,
672   FTQUAL_function,
673   FTQUAL_gap_type,
674   FTQUAL_gene,
675   FTQUAL_gene_desc,
676   FTQUAL_gene_allele,
677   FTQUAL_gene_map,
678   FTQUAL_gene_cyt_map,
679   FTQUAL_gene_gen_map,
680   FTQUAL_gene_rad_map,
681   FTQUAL_gene_syn,
682   FTQUAL_gene_syn_refseq,
683   FTQUAL_gene_note,
684   FTQUAL_gene_xref,
685   FTQUAL_go_component,
686   FTQUAL_go_function,
687   FTQUAL_go_process,
688   FTQUAL_heterogen,
689   FTQUAL_illegal_qual,
690   FTQUAL_inference,
691   FTQUAL_inference_string,
692   FTQUAL_inference_good,
693   FTQUAL_inference_bad,
694   FTQUAL_insertion_seq,
695   FTQUAL_label,
696   FTQUAL_linkage_evidence,
697   FTQUAL_locus_tag,
698   FTQUAL_map,
699   FTQUAL_maploc,
700   FTQUAL_mobile_element,
701   FTQUAL_mobile_element_type,
702   FTQUAL_mod_base,
703   FTQUAL_modelev,
704   FTQUAL_mol_wt,
705   FTQUAL_ncRNA_class,
706   FTQUAL_ncRNA_note,
707   FTQUAL_ncRNA_other,
708   FTQUAL_nomenclature,
709   FTQUAL_gene_nomen,
710   FTQUAL_note,
711   FTQUAL_number,
712   FTQUAL_old_locus_tag,
713   FTQUAL_operon,
714   FTQUAL_organism,
715   FTQUAL_partial,
716   FTQUAL_PCR_conditions,
717   FTQUAL_peptide,
718   FTQUAL_phenotype,
719   FTQUAL_product,
720   FTQUAL_product_quals,
721   FTQUAL_prot_activity,
722   FTQUAL_prot_comment,
723   FTQUAL_prot_EC_number,
724   FTQUAL_prot_note,
725   FTQUAL_prot_method,
726   FTQUAL_prot_conflict,
727   FTQUAL_prot_desc,
728   FTQUAL_prot_missing,
729   FTQUAL_prot_name,
730   FTQUAL_prot_names,
731   FTQUAL_protein_id,
732   FTQUAL_pseudo,
733   FTQUAL_pseudogene,
734   FTQUAL_pyrrolysine,
735   FTQUAL_pyrrolysine_note,
736   FTQUAL_recombination_class,
737   FTQUAL_recombination_note,
738   FTQUAL_recombination_other,
739   FTQUAL_region,
740   FTQUAL_region_name,
741   FTQUAL_regulatory_class,
742   FTQUAL_regulatory_note,
743   FTQUAL_regulatory_other,
744   FTQUAL_replace,
745   FTQUAL_ribosomal_slippage,
746   FTQUAL_rpt_family,
747   FTQUAL_rpt_type,
748   FTQUAL_rpt_unit,
749   FTQUAL_rpt_unit_range,
750   FTQUAL_rpt_unit_seq,
751   FTQUAL_rrna_its,
752   FTQUAL_satellite,
753   FTQUAL_sec_str_type,
754   FTQUAL_selenocysteine,
755   FTQUAL_selenocysteine_note,
756   FTQUAL_seqannot_note,
757   FTQUAL_seqfeat_note,
758   FTQUAL_site,
759   FTQUAL_site_type,
760   FTQUAL_standard_name,
761   FTQUAL_tag_peptide,
762   FTQUAL_tag_peptide_str,
763   FTQUAL_transcription,
764   FTQUAL_transcript_id,
765   FTQUAL_transcript_id_note,
766   FTQUAL_transl_except,
767   FTQUAL_transl_table,
768   FTQUAL_translation,
769   FTQUAL_transposon,
770   FTQUAL_trans_splicing,
771   FTQUAL_trna_aa,
772   FTQUAL_trna_codons,
773   FTQUAL_trna_codons_note,
774   FTQUAL_UniProtKB_evidence,
775   FTQUAL_usedin,
776   FTQUAL_variation_id,
777   FTQUAL_variation_set,
778   FTQUAL_xtra_prod_quals,
779   ASN2GNBK_TOTAL_FEATUR
780 }  FtQualType;
781 
782 NLM_EXTERN void FF_www_db_xref(
783   IntAsn2gbJobPtr ajp,
784   StringItemPtr ffstring,
785   CharPtr db,
786   CharPtr identifier,
787   BioseqPtr bsp
788 );
789 
790 NLM_EXTERN void FF_www_specimen_voucher (
791   IntAsn2gbJobPtr ajp,
792   StringItemPtr ffstring,
793   CharPtr subname
794 );
795 
796 NLM_EXTERN void FF_Add_NCBI_Base_URL (
797   StringItemPtr ffstring,
798   CharPtr url
799 );
800 
801 NLM_EXTERN Boolean StringIsJustQuotes (
802   CharPtr str
803 );
804 
805 
806 typedef struct sourcequal {
807   CharPtr   name;
808   QualType  qualclass;
809 } SourceQual, PNTR SourceQualPtr;
810 
811 NLM_EXTERN SourceQual asn2gnbk_source_quals [ASN2GNBK_TOTAL_SOURCE];
812 
813 NLM_EXTERN SourceType subSourceToSourceIdx [45];
814 
815 NLM_EXTERN void DoOneSection (
816   BioseqPtr target,
817   BioseqPtr parent,
818   BioseqPtr bsp,
819   BioseqPtr refs,
820   SeqLocPtr slp,
821   Uint2 seg,
822   Int4 from,
823   Int4 to,
824   Boolean contig,
825   Boolean onePartOfSeg,
826   Asn2gbWorkPtr awp
827 );
828 
829 NLM_EXTERN void DoOneBioseq (
830   BioseqPtr bsp,
831   Pointer userdata
832 );
833 
834 NLM_EXTERN BaseBlockPtr Asn2gbAddBlock (
835   Asn2gbWorkPtr awp,
836   BlockType blocktype,
837   size_t size
838 );
839 
840 NLM_EXTERN void InitWWW (IntAsn2gbJobPtr ajp);
841 NLM_EXTERN void FiniWWW (IntAsn2gbJobPtr ajp);
842 NLM_EXTERN Boolean GetWWW (IntAsn2gbJobPtr ajp);
843 
844 NLM_EXTERN Boolean CommentHasSuspiciousHtml (IntAsn2gbJobPtr ajp, CharPtr searchString);
845 
846 NLM_EXTERN StringItemPtr FFGetString (IntAsn2gbJobPtr ajp);
847 NLM_EXTERN void FFRecycleString (IntAsn2gbJobPtr ajp, StringItemPtr ffstring);
848 NLM_EXTERN void FFAddOneChar (
849   StringItemPtr sip,
850   Char ch,
851   Boolean convertQuotes
852 );
853 NLM_EXTERN void FFAddNewLine(StringItemPtr ffstring);
854 NLM_EXTERN void FFAddNChar (
855   StringItemPtr sip,
856   Char ch,
857   Int4 n,
858   Boolean convertQuotes
859 );
860 NLM_EXTERN void FFExpandTildes (StringItemPtr sip, CharPtr PNTR cpp);
861 NLM_EXTERN void FFSemicolonSeparateTildes (StringItemPtr sip, CharPtr PNTR cpp);
862 NLM_EXTERN void FFReplaceTildesWithSpaces (StringItemPtr ffstring, CharPtr PNTR cpp);
863 NLM_EXTERN void FFOldExpand (StringItemPtr sip, CharPtr PNTR cpp);
864 NLM_EXTERN void AddCommentStringWithTildes (StringItemPtr ffstring, CharPtr string);
865 NLM_EXTERN void AddCommentWithURLlinks (
866   IntAsn2gbJobPtr ajp,
867   StringItemPtr ffstring,
868   CharPtr prefix,
869   CharPtr str,
870   CharPtr suffix
871 );
872 NLM_EXTERN CharPtr GetStrForStructuredComment (
873   IntAsn2gbJobPtr ajp,
874   UserObjectPtr uop
875 );
876 NLM_EXTERN void AddStringWithTildes (StringItemPtr ffstring, CharPtr string);
877 NLM_EXTERN void FFProcessTildes (StringItemPtr sip, CharPtr PNTR cpp, Int2 tildeAction);
878 NLM_EXTERN void FFAddPeriod (StringItemPtr sip);
879 NLM_EXTERN void FFAddOneString (
880   StringItemPtr sip,
881   CharPtr string,
882   Boolean addPeriod,
883   Boolean convertQuotes,
884   Int2 tildeAction
885 );
886 NLM_EXTERN void FFCatenateSubString (
887   StringItemPtr dest,
888   StringItemPtr start_sip, Int4 start_pos,
889   StringItemPtr end_sip, Int4 end_pos,
890   Uint4 line_max
891 );
892 NLM_EXTERN CharPtr FFToCharPtr (StringItemPtr sip);
893 NLM_EXTERN CharPtr FFToCharPtrEx (StringItemPtr sip, CharPtr pfx, CharPtr sfx);
894 NLM_EXTERN void FFSkipLink (StringItemPtr PNTR iterp, Int4Ptr ip);
895 NLM_EXTERN void FFSkipHTMLAmpersandEscape (StringItemPtr PNTR iterp, Int4Ptr ip);
896 
897 NLM_EXTERN Boolean FFIsStartOfLink (
898     StringItemPtr iter,
899     Int4 pos );
900 
901 NLM_EXTERN Boolean FFIsStartOfHTMLAmpersandEscape (
902     StringItemPtr iter,
903     Int4 pos );
904 
905 NLM_EXTERN void FFSavePosition(StringItemPtr ffstring, StringItemPtr PNTR bufptr, Int4 PNTR posptr);
906 NLM_EXTERN void FFTrim (
907     StringItemPtr ffstring,
908     StringItemPtr line_start,
909     Int4 line_pos,
910     Int4 line_prefix_len
911 );
912 NLM_EXTERN int FFNextChar(
913   StringItemPtr start_sip,
914   Int4 start_pos
915 );
916 NLM_EXTERN void FFAdvanceChar(
917   StringItemPtr* start_sip,
918   Int4* start_pos
919 );
920 NLM_EXTERN void FFCalculateLineBreak (
921   StringItemPtr PNTR break_sip, Int4 PNTR break_pos,
922   Int4 init_indent, Int4 visible,
923   Boolean is_html
924 );
925 NLM_EXTERN void FFLineWrap (
926   IntAsn2gbJobPtr ajp,
927   StringItemPtr dest,
928   StringItemPtr src,
929   Int4 init_indent,
930   Int4 cont_indent,
931   Int4 line_max,
932   CharPtr eb_line_prefix
933 );
934 NLM_EXTERN void FFStartPrint (
935   StringItemPtr sip,
936   FmtType format,
937   Int4 gb_init_indent,
938   Int4 gb_cont_indent,
939   CharPtr gb_label,
940   Int4 gb_tab_to,
941   Int4 eb_init_indent,
942   Int4 eb_cont_indent,
943   CharPtr eb_line_prefix,
944   Boolean eb_print_xx
945 );
946 NLM_EXTERN void FFAddTextToString (
947   StringItemPtr ffstring,
948   CharPtr prefix,
949   CharPtr string,
950   CharPtr suffix,
951   Boolean addPeriod,
952   Boolean convertQuotes,
953   Int2 tildeAction
954 );
955 NLM_EXTERN CharPtr FFEndPrint (
956   IntAsn2gbJobPtr ajp,
957   StringItemPtr ffstring,
958   FmtType format,
959   Int2 gb_init_indent,
960   Int2 gb_cont_indent,
961   Int2 eb_init_indent,
962   Int2 eb_cont_indent,
963   CharPtr eb_line_prefix
964 );
965 NLM_EXTERN CharPtr FFEndPrintEx (
966   IntAsn2gbJobPtr ajp,
967   StringItemPtr ffstring,
968   FmtType format,
969   Int2 gb_init_indent,
970   Int2 gb_cont_indent,
971   Int2 eb_init_indent,
972   Int2 eb_cont_indent,
973   CharPtr eb_line_prefix,
974   CharPtr pfx,
975   CharPtr sfx
976 );
977 NLM_EXTERN Uint4 FFLength(StringItemPtr ffstring);
978 NLM_EXTERN Char FFCharAt(StringItemPtr ffstring, Uint4 pos);
979 NLM_EXTERN Char FFFindChar (
980   StringItemPtr ffstring,
981   StringItemPtr start_buf,
982   Uint4 start_pos,
983   Uint4 old_pos,
984   Uint4 new_pos
985 );
986 NLM_EXTERN Boolean FFEmpty(StringItemPtr ffstring);
987 NLM_EXTERN Int4 FFStringSearch (
988   StringItemPtr text,
989   const CharPtr pattern,
990   Uint4 position
991 );
992 NLM_EXTERN Boolean FFStartsWith(
993   StringItemPtr text,
994   Int4 text_pos,
995   const CharPtr pattern,
996   Boolean case_insens
997 );
998 
999 /*
1000  * Scans the given buffer from a given scan position, for the next occurrence of
1001  * the indicated character. The search breaks when the character is found, or the
1002  * supplied break position is reached.
1003  * On exit, the scan position will either be on the character found, or at the
1004  * given break position.
1005  */
1006 NLM_EXTERN Boolean FFFindSingleChar(
1007   StringItemPtr* p_line_sip,
1008   Int4* p_line_pos,
1009   StringItemPtr break_sip,
1010   Int4 break_pos,
1011   char c
1012 );
1013 
1014  /*
1015  * Returns the number of bytes remaining in the buffer chain, starting from the
1016  * given buffer and a read mark inside it.
1017  */
1018 NLM_EXTERN Int4 FFRemainingLength(
1019   StringItemPtr sip,
1020   Int4 cur_pos
1021 );
1022 
1023  /*
1024  * Scans the given line for the next opening tag of an HTML hyperlink. Ajusts
1025  * the line position to immediately after the opening tag (if such a tag is
1026  * found) or the the end of the line (if no such tag is found).
1027  * If a character buffer is supplied, this function will copy any opening tag
1028  * it finds into that buffer.
1029  */
1030 NLM_EXTERN Boolean FFExtractNextOpenLink(
1031   StringItemPtr* p_line_sip,
1032   Int4* p_line_pos,
1033   StringItemPtr break_sip,
1034   Int4 break_pos,
1035   char* buf_open_link
1036 );
1037 
1038  /*
1039  * Scans the given line for the next closing tag of an HTML hyperlink. Ajusts
1040  * the line position to immediately after the closing tag (if such a tag is
1041  * found) or the the end of the line (if no such tag is found).
1042  */
1043 NLM_EXTERN Boolean FFExtractNextCloseLink(
1044   StringItemPtr* p_line_sip,
1045   Int4* p_line_pos,
1046   StringItemPtr break_sip,
1047   Int4 break_pos
1048 );
1049 
1050 /*
1051  * Tests whether the line ends between the opening and closing tag of an HTML
1052  * hyper link.
1053  */
1054 NLM_EXTERN Boolean FFLineBreakSplitsHtmlLink(
1055   StringItemPtr start_sip,
1056   Int4 start_pos,
1057   StringItemPtr break_sip,
1058   Int4 break_pos,
1059   char* buf_link_open,
1060   Int4* html_open_link_counter
1061 );
1062 
1063 NLM_EXTERN Boolean IsWholeWordSubstr (
1064   StringItemPtr searchStr,
1065   Uint4 foundPos,
1066   CharPtr subStr
1067 );
1068 
1069 NLM_EXTERN ValNodePtr ValNodeCopyStrToHead (ValNodePtr PNTR head, Int2 choice, CharPtr str);
1070 NLM_EXTERN CharPtr MergeFFValNodeStrs (
1071   ValNodePtr list
1072 );
1073 NLM_EXTERN void AddValNodeString (
1074   ValNodePtr PNTR head,
1075   CharPtr prefix,
1076   CharPtr string,
1077   CharPtr suffix
1078 );
1079 NLM_EXTERN void FFAddString_NoRedund (
1080   StringItemPtr unique,
1081   CharPtr prefix,
1082   CharPtr string,
1083   CharPtr suffix,
1084   Boolean convertQuotes
1085 );
1086 NLM_EXTERN void s_AddPeriodToEnd (CharPtr someString);
1087 NLM_EXTERN Boolean s_RemovePeriodFromEnd (CharPtr someString);
1088 NLM_EXTERN Boolean IsEllipsis (
1089   CharPtr str
1090 );
1091 NLM_EXTERN void A2GBSeqLocReplaceID (
1092   SeqLocPtr newloc,
1093   SeqLocPtr ajpslp
1094 );
1095 NLM_EXTERN CharPtr asn2gb_PrintDate (
1096   DatePtr dp
1097 );
1098 NLM_EXTERN CharPtr DateToFF (
1099   CharPtr buf,
1100   DatePtr dp,
1101   Boolean citSub
1102 );
1103 
1104 NLM_EXTERN CharPtr FFFlatLoc (
1105   IntAsn2gbJobPtr ajp,
1106   BioseqPtr bsp,
1107   SeqLocPtr location,
1108   Boolean masterStyle,
1109   Boolean isGap
1110 );
1111 
1112 NLM_EXTERN void FF_www_featloc(StringItemPtr ffstring, CharPtr loc);
1113 
1114 NLM_EXTERN void FF_asn2gb_www_featkey (
1115   IntAsn2gbJobPtr ajp,
1116   StringItemPtr ffstring,
1117   CharPtr key,
1118   SeqFeatPtr sfp,
1119   SeqLocPtr slp,
1120   Int4 from,
1121   Int4 to,
1122   Uint1 strand,
1123   Uint4 itemID
1124 );
1125 
1126 NLM_EXTERN void FF_asn2gb_www_featkey_Ex (
1127   IntAsn2gbJobPtr ajp,
1128   StringItemPtr ffstring,
1129   CharPtr key,
1130   SeqFeatPtr sfp,
1131   SeqLocPtr slp,
1132   Int4 from,
1133   Int4 to,
1134   Uint1 strand,
1135   Uint4 itemID,
1136   Int2 sat,
1137   Int4 sat_key
1138 );
1139 
1140 NLM_EXTERN CharPtr AddJsInterval (
1141   IntAsn2gbSectPtr iasp,
1142   CharPtr pfx,
1143   BioseqPtr target,
1144   Uint1 featdeftype,
1145   SeqLocPtr location,
1146   CharPtr currAccVer
1147 );
1148 
1149 NLM_EXTERN SeqFeatPtr GetGeneByXref (
1150   BioseqPtr bsp,
1151   GeneRefPtr grp
1152 );
1153 
1154 NLM_EXTERN GeneRefPtr GetGeneByFeat (
1155   SeqFeatPtr sfp,
1156   BoolPtr pseudoP,
1157   BoolPtr suppressedP
1158 );
1159 
1160 NLM_EXTERN CharPtr GetMolTypeQual (
1161   BioseqPtr bsp
1162 );
1163 
1164 NLM_EXTERN void AddFeatureToGbseq (
1165   GBSeqPtr gbseq,
1166   GBFeaturePtr gbfeat,
1167   CharPtr str,
1168   SeqFeatPtr sfp
1169 );
1170 
1171 NLM_EXTERN void AddIntervalsToGbfeat (
1172   GBFeaturePtr gbfeat,
1173   SeqLocPtr location,
1174   BioseqPtr target
1175 );
1176 
1177 NLM_EXTERN SeqIdPtr SeqLocIdForProduct (
1178   SeqLocPtr product
1179 );
1180 
1181 NLM_EXTERN CharPtr GetAuthorsString (
1182   FmtType format,
1183   AuthListPtr alp,
1184   CharPtr PNTR consortP,
1185   IndxPtr index,
1186   GBReferencePtr gbref
1187 );
1188 
1189 NLM_EXTERN AuthListPtr GetAuthListPtr (
1190   PubdescPtr pdp,
1191   CitSubPtr csp
1192 );
1193 
1194 NLM_EXTERN Int2 MatchRef (
1195   ValNodePtr ppr,
1196   RefBlockPtr PNTR rbpp,
1197   Int2 numReferences
1198 );
1199 
1200 NLM_EXTERN SeqLocPtr SeqLocReMapEx (
1201   SeqIdPtr newid,
1202   SeqLocPtr seq_loc,
1203   SeqLocPtr location,
1204   Int4 offset,
1205   Boolean rev,
1206   Boolean masterStyle,
1207   Boolean relaxed
1208 );
1209 
1210 NLM_EXTERN CharPtr Get3LetterSymbol (
1211   IntAsn2gbJobPtr  ajp,
1212   Uint1 seq_code,
1213   SeqCodeTablePtr table,
1214   Uint1 residue
1215 );
1216 
1217 NLM_EXTERN CharPtr CleanQualValue (
1218   CharPtr str
1219 );
1220 NLM_EXTERN CharPtr Asn2gnbkCompressSpaces (CharPtr str);
1221 NLM_EXTERN CharPtr StripAllSpaces (
1222   CharPtr str
1223 );
1224 
1225 NLM_EXTERN Boolean GetAccnVerFromServer (BIG_ID gi, CharPtr buf);
1226 
1227 NLM_EXTERN CharPtr bondList [];
1228 NLM_EXTERN CharPtr siteList [];
1229 NLM_EXTERN CharPtr secStrText [];
1230 
1231 NLM_EXTERN CharPtr goQualType [];
1232 NLM_EXTERN CharPtr goFieldType [];
1233 
1234 NLM_EXTERN CharPtr legalDbXrefs [];
1235 NLM_EXTERN CharPtr legalSrcDbXrefs [];
1236 NLM_EXTERN CharPtr legalRefSeqDbXrefs [];
1237 
1238 NLM_EXTERN Boolean DbxrefIsValid (
1239   CharPtr name,
1240   BoolPtr is_refseq_P,
1241   BoolPtr is_source_P,
1242   BoolPtr is_badcap_P,
1243   CharPtr PNTR goodcapP
1244 );
1245 
1246 NLM_EXTERN void AddAllDbxrefsToBioseq (
1247   BioseqPtr bsp
1248 );
1249 
1250 NLM_EXTERN void AddRefStatsBlock (
1251   Asn2gbWorkPtr awp
1252 );
1253 NLM_EXTERN Boolean AddReferenceBlock (
1254   Asn2gbWorkPtr awp,
1255   Boolean isRefSeq
1256 );
1257 NLM_EXTERN void AddSourceFeatBlock (
1258   Asn2gbWorkPtr awp
1259 );
1260 NLM_EXTERN void AddFeatStatsBlock (
1261   Asn2gbWorkPtr awp
1262 );
1263 NLM_EXTERN void AddFeatureBlock (
1264   Asn2gbWorkPtr awp
1265 );
1266 NLM_EXTERN void AddLocusBlock (
1267   Asn2gbWorkPtr awp,
1268   Boolean willshowwgs,
1269   Boolean willshowtsa,
1270   Boolean willshowtls,
1271   Boolean willshowcage,
1272   Boolean willshowgenome,
1273   Boolean willshowcontig,
1274   Boolean willshowsequence
1275 );
1276 NLM_EXTERN void AddAccessionBlock (
1277   Asn2gbWorkPtr awp
1278 );
1279 NLM_EXTERN void AddVersionBlock (
1280   Asn2gbWorkPtr awp
1281 );
1282 NLM_EXTERN void AddDblinkBlock (
1283   Asn2gbWorkPtr awp
1284 );
1285 NLM_EXTERN void AddDbsourceBlock (
1286   Asn2gbWorkPtr awp
1287 );
1288 NLM_EXTERN void AddDateBlock (
1289   Asn2gbWorkPtr awp
1290 );
1291 NLM_EXTERN void AddDeflineBlock (
1292   Asn2gbWorkPtr awp
1293 );
1294 NLM_EXTERN void AddKeywordsBlock (
1295   Asn2gbWorkPtr awp
1296 );
1297 NLM_EXTERN void AddSegmentBlock (
1298   Asn2gbWorkPtr awp,
1299   Boolean onePartOfSeg,
1300   Boolean is_na
1301 );
1302 NLM_EXTERN void AddSourceOrganismBlock (
1303   Asn2gbWorkPtr awp
1304 );
1305 NLM_EXTERN void AddCommentBlock (
1306   Asn2gbWorkPtr awp
1307 );
1308 NLM_EXTERN void AddPrimaryBlock (
1309   Asn2gbWorkPtr awp
1310 );
1311 NLM_EXTERN void AddFeatHeaderBlock (
1312   Asn2gbWorkPtr awp
1313 );
1314 NLM_EXTERN void AddSourceFeatBlock (
1315   Asn2gbWorkPtr awp
1316 );
1317 NLM_EXTERN void AddWGSBlock (
1318   Asn2gbWorkPtr awp
1319 );
1320 NLM_EXTERN void AddTSABlock (
1321   Asn2gbWorkPtr awp
1322 );
1323 NLM_EXTERN void AddTLSBlock (
1324   Asn2gbWorkPtr awp
1325 );
1326 NLM_EXTERN void AddCAGEBlock (
1327   Asn2gbWorkPtr awp
1328 );
1329 NLM_EXTERN void AddGenomeBlock (
1330   Asn2gbWorkPtr awp
1331 );
1332 NLM_EXTERN void AddContigBlock (
1333   Asn2gbWorkPtr awp
1334 );
1335 NLM_EXTERN void AddBasecountBlock (
1336   Asn2gbWorkPtr awp
1337 );
1338 NLM_EXTERN void AddOriginBlock (
1339   Asn2gbWorkPtr awp
1340 );
1341 NLM_EXTERN void AddSequenceBlock (
1342   Asn2gbWorkPtr awp
1343 );
1344 NLM_EXTERN void AddSlashBlock (
1345   Asn2gbWorkPtr awp
1346 );
1347 
1348 NLM_EXTERN CharPtr DefaultFormatBlock (
1349   Asn2gbFormatPtr afp,
1350   BaseBlockPtr bbp
1351 );
1352 NLM_EXTERN CharPtr FormatSourceBlock (
1353   Asn2gbFormatPtr afp,
1354   BaseBlockPtr bbp
1355 );
1356 NLM_EXTERN CharPtr FormatOrganismBlock (
1357   Asn2gbFormatPtr afp,
1358   BaseBlockPtr bbp
1359 );
1360 NLM_EXTERN CharPtr FormatReferenceBlock (
1361   Asn2gbFormatPtr afp,
1362   BaseBlockPtr bbp
1363 );
1364 NLM_EXTERN CharPtr FormatCommentBlock (
1365   Asn2gbFormatPtr afp,
1366   BaseBlockPtr bbp
1367 );
1368 NLM_EXTERN CharPtr FormatFeatHeaderBlock (
1369   Asn2gbFormatPtr afp,
1370   BaseBlockPtr bbp
1371 );
1372 NLM_EXTERN CharPtr FormatSourceFeatBlock (
1373   Asn2gbFormatPtr afp,
1374   BaseBlockPtr bbp
1375 );
1376 NLM_EXTERN CharPtr FormatFeatureBlock (
1377   Asn2gbFormatPtr afp,
1378   BaseBlockPtr bbp
1379 );
1380 NLM_EXTERN CharPtr FormatBasecountBlock (
1381   Asn2gbFormatPtr afp,
1382   BaseBlockPtr bbp
1383 );
1384 NLM_EXTERN CharPtr FormatSequenceBlock (
1385   Asn2gbFormatPtr afp,
1386   BaseBlockPtr bbp
1387 );
1388 NLM_EXTERN CharPtr FormatContigBlock (
1389   Asn2gbFormatPtr afp,
1390   BaseBlockPtr bbp
1391 );
1392 NLM_EXTERN CharPtr FormatSlashBlock (
1393   Asn2gbFormatPtr afp,
1394   BaseBlockPtr bbp
1395 );
1396 
1397 NLM_EXTERN void PrintFtableIntervals (
1398   ValNodePtr PNTR head,
1399   BioseqPtr target,
1400   SeqLocPtr location,
1401   CharPtr label,
1402   Boolean relaxed
1403 );
1404 NLM_EXTERN void PrintFtableLocAndQuals (
1405   IntAsn2gbJobPtr ajp,
1406   ValNodePtr PNTR head,
1407   BioseqPtr target,
1408   SeqFeatPtr sfp,
1409   SeqMgrFeatContextPtr context
1410 );
1411 NLM_EXTERN CharPtr FormatFtableSourceFeatBlock (
1412   BaseBlockPtr bbp,
1413   BioseqPtr target
1414 );
1415 
1416 NLM_EXTERN void DoImmediateRemoteFeatureFormat (
1417   Asn2gbFormatPtr afp,
1418   BaseBlockPtr bbp,
1419   SeqFeatPtr sfp
1420 );
1421 
1422 NLM_EXTERN void DoImmediateFormat (
1423   Asn2gbFormatPtr afp,
1424   BaseBlockPtr bbp
1425 );
1426 
1427 NLM_EXTERN void DoQuickLinkFormat (
1428   Asn2gbFormatPtr afp,
1429   CharPtr str
1430 );
1431 
1432 NLM_EXTERN Boolean DeltaLitOnly (
1433   BioseqPtr bsp
1434 );
1435 
1436 NLM_EXTERN Boolean SegHasParts (
1437   BioseqPtr bsp
1438 );
1439 
1440 NLM_EXTERN void SetIfpFeatCount (
1441   IntFeatBlockPtr ifp,
1442   IntAsn2gbJobPtr ajp,
1443   Asn2gbWorkPtr awp,
1444   Boolean isProt
1445 );
1446 
1447 NLM_EXTERN Boolean GetAccVerForBioseq (
1448   BioseqPtr bsp,
1449   CharPtr buf,
1450   size_t buflen,
1451   Boolean hideGi,
1452   Boolean isSpan
1453 );
1454 
1455 #ifdef __cplusplus
1456 }
1457 #endif
1458 
1459 #undef NLM_EXTERN
1460 #ifdef NLM_EXPORT
1461 #define NLM_EXTERN NLM_EXPORT
1462 #else
1463 #define NLM_EXTERN
1464 #endif
1465 
1466 #endif /* ndef _ASN2NGNBI_ */
1467 
1468