1 /*   macro_i.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:  macro_i.h
27 *
28 * Author:  Colleen Bollin
29 *
30 * Version Creation Date:   11/15/2007
31 *
32 * $Revision: 1.170 $
33 *
34 * File Description:
35 *
36 * Modifications:
37 * --------------------------------------------------------------------------
38 * Date     Name        Description of modification
39 * -------  ----------  -----------------------------------------------------
40 *
41 *
42 * ==========================================================================
43 */
44 
45 #ifndef _macroapi_h_
46 #define _macroapi_h_
47 
48 #ifdef __cplusplus
49 extern "C" {
50 #endif
51 
52 /*
53  * Some batch operations will be faster if information about the entire record is collected once
54  * and reused.  The BatchExtra structure is where such data belongs.
55  */
56 typedef struct batchextra {
57   ValNodePtr cit_list; /* this contains a list of minimized pubs and the numbers to be used for citations referring
58                         * to these pubs on a given Bioseq.
59                         * If needed, it should be generated by GetCitListsForSeqEntry.
60                         */
61 } BatchExtraData, PNTR BatchExtraPtr;
62 
63 NLM_EXTERN BatchExtraPtr BatchExtraNew ();
64 NLM_EXTERN BatchExtraPtr BatchExtraFree (BatchExtraPtr b);
65 
66 NLM_EXTERN ValNodePtr GetCitListsForSeqEntry (SeqEntryPtr sep);
67 NLM_EXTERN ValNodePtr PubSerialNumberListFree (ValNodePtr vnp);
68 /* GetCitationNumberForMinPub can be used to calculate the citation number to be used
69  * for a minimized pub from a SeqFeat->cit on a given Bioseq.  pub_list should have
70  * been generated by GetCitListsForSeqEntry and should be freed by PubSerialNumberListFree.
71  */
72 NLM_EXTERN Int4 GetCitationNumberForMinPub (BioseqPtr bsp, ValNodePtr min_pub, ValNodePtr pub_list);
73 NLM_EXTERN ValNodePtr GetMinPubForCitationNumber (BioseqPtr bsp, Int4 number, ValNodePtr pub_list);
74 
75 NLM_EXTERN FeatureFieldPtr FeatureFieldCopy (FeatureFieldPtr orig);
76 NLM_EXTERN FieldTypePtr FieldTypeCopy (FieldTypePtr orig);
77 
78 NLM_EXTERN FieldTypePtr FieldTypeFromString (CharPtr str);
79 NLM_EXTERN Int4 GetFeatdefFromFeatureType (Int4 feature_type);
80 NLM_EXTERN Int4 GetFeatureTypeFromFeatdef (Int4 featdef);
81 NLM_EXTERN CharPtr GetFeatureNameFromFeatureType (Int4 feature_type);
82 NLM_EXTERN Int4 GetFeatureTypeByName (CharPtr feat_name);
83 NLM_EXTERN void AddImportFeaturesToChoiceList (ValNodePtr PNTR feature_type_list);
84 NLM_EXTERN void AddAllFeaturesToChoiceList (ValNodePtr PNTR feature_type_list);
85 NLM_EXTERN CharPtr GetFeatQualName (Int4 featqual);
86 NLM_EXTERN Int4 GetFeatQualByName (CharPtr qualname);
87 NLM_EXTERN Int4 GetNumFeatQual (void);
88 NLM_EXTERN void AddAllFeatureFieldsToChoiceList (ValNodePtr PNTR field_list);
89 NLM_EXTERN CharPtr SummarizeFeatQual (ValNodePtr qual);
90 NLM_EXTERN CharPtr GetSourceQualName (Int4 srcqual);
91 NLM_EXTERN Int4 GetSourceQualTypeByName (CharPtr qualname);
92 NLM_EXTERN Int4 GetSrcQualFromSubSrcOrOrgMod (Int4 qual, Boolean is_org_mod);
93 NLM_EXTERN Int4 GetSubSrcQualFromSrcQual (Int4 srcqual, Int4Ptr subfield);
94 NLM_EXTERN Int4 GetOrgModQualFromSrcQual (Int4 srcqual, Int4Ptr subfield);
95 NLM_EXTERN ValNodePtr GetSourceQualList (Boolean for_remove);
96 NLM_EXTERN Boolean IsNonTextSourceQual (Int4 srcqual);
97 NLM_EXTERN Boolean IsNonTextFieldType (FieldTypePtr field);
98 NLM_EXTERN TextFsaPtr GetOrgModSearch (void);
99 NLM_EXTERN Int4 GenomeFromSrcLoc (Int4 srcloc);
100 NLM_EXTERN Int4 SrcLocFromGenome (Int4 genome);
101 NLM_EXTERN CharPtr LocNameFromGenome (Int4 genome);
102 NLM_EXTERN Int4 GenomeFromLocName (CharPtr loc_name);
103 NLM_EXTERN ValNodePtr GetLocationList (Boolean for_remove);
104 NLM_EXTERN Int4 OriginFromSrcOrig (Int4 srcorig);
105 NLM_EXTERN Int4 SrcOrigFromOrigin (Int4 origin);
106 NLM_EXTERN CharPtr OriginNameFromOrigin (Int4 origin);
107 NLM_EXTERN ValNodePtr GetOriginList (Boolean for_remove);
108 NLM_EXTERN BioSourcePtr GetBioSourceFromObject (Uint1 choice, Pointer data);
109 NLM_EXTERN ValNodePtr GetSourceQualSampleFieldList (SeqEntryPtr sep);
110 NLM_EXTERN ValNodePtr GetSourceQualSampleFieldListForSeqEntryList (ValNodePtr list);
111 NLM_EXTERN CharPtr CDSGeneProtNameFromField (Int4 field);
112 NLM_EXTERN CharPtr CDSGeneProtFeatureNameFromFeatureType (Int4 feature_type);
113 NLM_EXTERN void AddAllCDSGeneProtFieldsToChoiceList (ValNodePtr PNTR field_list);
114 NLM_EXTERN void AddAllCDSGeneProtFeaturesToChoiceList (ValNodePtr PNTR field_list);
115 NLM_EXTERN FeatureFieldPtr FeatureFieldFromCDSGeneProtField (Uint2 cds_gene_prot_field);
116 
117 NLM_EXTERN CharPtr BiomolNameFromBiomol (Int4 biomol);
118 NLM_EXTERN Int4 BiomolFromMoleculeType (Int4 molecule_type);
119 NLM_EXTERN ValNodePtr GetMoleculeTypeList (void);
120 NLM_EXTERN CharPtr TechNameFromTech (Int4 tech);
121 NLM_EXTERN Int4 TechFromTechName (CharPtr tech_name);
122 NLM_EXTERN Int4 TechFromTechniqueType (Int4 technique_type);
123 NLM_EXTERN ValNodePtr GetTechniqueTypeList (void);
124 NLM_EXTERN Int4 CompletenessFromCompletednessType (Int4 completedness_type);
125 NLM_EXTERN CharPtr CompletenessNameFromCompleteness (Int4 completeness);
126 NLM_EXTERN ValNodePtr GetCompletednessTypeList (void);
127 NLM_EXTERN Int4 MolFromMoleculeClassType (Int4 moleculeclass_type);
128 NLM_EXTERN CharPtr MolNameFromMol (Int4 mol);
129 NLM_EXTERN ValNodePtr GetMoleculeClassTypeList (void);
130 NLM_EXTERN Int4 TopologyFromTopologyType (Int4 topology_type);
131 NLM_EXTERN CharPtr TopologyNameFromTopology (Int4 topology);
132 NLM_EXTERN ValNodePtr GetTopologyTypeList (void);
133 NLM_EXTERN Int4 StrandFromStrandType (Int4 strand_type);
134 NLM_EXTERN CharPtr StrandNameFromStrand (Int4 strand);
135 NLM_EXTERN ValNodePtr GetStrandTypeList (void);
136 NLM_EXTERN Int4 Asn1BondTypeFromMacroBondType (Int4 macro_bond_type);
137 NLM_EXTERN Int4 MacroBondTypeFromAsn1BondType (Int4 asn1_bond_type);
138 NLM_EXTERN CharPtr GetMacroBondTypeName (Int4 macro_bond_type);
139 NLM_EXTERN ValNodePtr GetBondTypeList (void);
140 NLM_EXTERN Int4 Asn1SiteTypeFromMacroSiteType (Int4 macro_site_type);
141 NLM_EXTERN Int4 MacroSiteTypeFromAsn1SiteType (Int4 asn1_site_type);
142 NLM_EXTERN CharPtr GetMacroSiteTypeName (Int4 macro_site_type);
143 NLM_EXTERN ValNodePtr GetSiteTypeList (void);
144 
145 
146 
147 NLM_EXTERN FieldTypePtr GetFromFieldFromFieldPair (FieldPairTypePtr fieldpair);
148 NLM_EXTERN FieldTypePtr GetToFieldFromFieldPair (FieldPairTypePtr fieldpair);
149 NLM_EXTERN FieldPairTypePtr BuildFieldPairFromFromField (FieldTypePtr field_from);
150 NLM_EXTERN Uint1 FieldTypeFromAECRAction (AECRActionPtr action);
151 NLM_EXTERN Uint1 FieldTypeChoiceFromFieldPairTypeChoice (Uint1 field_pair_choice);
152 NLM_EXTERN Int2 FeatureTypeFromFieldType (FieldTypePtr field);
153 NLM_EXTERN Int4 GetFeatureTypeForRnaType (Int4 rnatype);
154 NLM_EXTERN int CompareFieldTypes (FieldTypePtr vnp1, FieldTypePtr vnp2);
155 NLM_EXTERN int CompareFieldTypesEx (FieldTypePtr vnp1, FieldTypePtr vnp2, Boolean use_source_qual_sort);
156 NLM_EXTERN Boolean AreAECRActionFieldsEqual (AECRActionPtr action1, AECRActionPtr action2);
157 NLM_EXTERN ValNodePtr GetFieldTypeListFromAECRAction (AECRActionPtr action);
158 NLM_EXTERN Uint1 GetBiomolForRnaType (Int4 rnatype);
159 NLM_EXTERN CharPtr GetBiomolNameForRnaType (Int4 rnatype);
160 NLM_EXTERN void AddAllRNASubtypesToChoiceList (ValNodePtr PNTR field_list);
161 NLM_EXTERN ValNodePtr MakeFeatureFieldField (Uint2 ftype, Int4 legalqual);
162 
163 /* source qual functions */
164 NLM_EXTERN CharPtr GetSourceQualFromBioSource (BioSourcePtr biop, SourceQualChoicePtr scp, StringConstraintPtr constraint);
165 NLM_EXTERN ValNodePtr GetMultipleSourceQualsFromBioSource (BioSourcePtr biop, SourceQualChoicePtr scp, StringConstraintPtr constraint);
166 NLM_EXTERN CharPtr GetQualFromFeature (SeqFeatPtr sfp, FeatureFieldPtr field, StringConstraintPtr scp);
167 NLM_EXTERN CharPtr GetQualFromFeatureEx (SeqFeatPtr sfp, FeatureFieldPtr field, StringConstraintPtr scp, BatchExtraPtr batch_extra);
168 NLM_EXTERN Boolean SetQualOnFeature (SeqFeatPtr sfp, FeatureFieldPtr field, StringConstraintPtr scp, CharPtr value, Uint2 existing_text);
169 NLM_EXTERN Boolean RemoveQualFromFeature (SeqFeatPtr sfp, FeatureFieldPtr field, StringConstraintPtr scp);
170 NLM_EXTERN Boolean SetSourceQualInBioSource (BioSourcePtr biop, SourceQualChoicePtr scp, StringConstraintPtr constraint, CharPtr value, Uint2 existing_text);
171 NLM_EXTERN Boolean RemoveSourceQualFromBioSource (BioSourcePtr biop, SourceQualChoicePtr scp, StringConstraintPtr constraint);
172 NLM_EXTERN Boolean AllowSourceQualMulti (SourceQualChoicePtr s);
173 NLM_EXTERN Boolean SetStringInGBQualList (GBQualPtr PNTR list, ValNodePtr field, StringConstraintPtr scp, CharPtr new_val, Uint2 existing_text);
174 NLM_EXTERN Boolean RemoveGBQualMatch (GBQualPtr PNTR list, CharPtr qual_name, Int4 subfield, StringConstraintPtr scp);
175 NLM_EXTERN CharPtr GetFirstGBQualMatch (GBQualPtr qual, CharPtr qual_name, Int4 subfield, StringConstraintPtr scp);
176 
177 NLM_EXTERN ValNodePtr SourceQualValsFromBioSourcePtr (BioSourcePtr biop);
178 NLM_EXTERN BioSourcePtr BioSourceFromSourceQualVals (ValNodePtr fields);
179 NLM_EXTERN CharPtr GetDBxrefFromBioSource (BioSourcePtr biop, CharPtr db_name);
180 NLM_EXTERN Boolean SetDBxrefForBioSource (BioSourcePtr biop, CharPtr db_name, CharPtr str, Uint2 existing_text);
181 NLM_EXTERN Boolean RemoveDBxrefForBioSource (BioSourcePtr biop, CharPtr db_name, StringConstraintPtr scp);
182 
183 /* RNA-field functions */
184 NLM_EXTERN ValNodePtr GetRNATypeList (void);
185 NLM_EXTERN ValNodePtr GetRnaFieldList (void);
186 NLM_EXTERN CharPtr GetNameForRnaField (Int4 rnafield);
187 NLM_EXTERN CharPtr SummarizeRnaType (RnaFeatTypePtr rt);
188 NLM_EXTERN FeatureFieldPtr FeatureFieldFromRnaQual (RnaQualPtr rq);
189 NLM_EXTERN RnaQualPtr RnaQualFromFeatureField (FeatureFieldPtr ffp);
190 NLM_EXTERN Boolean SetRNARefProductString (RnaRefPtr rrp, StringConstraintPtr scp, CharPtr new_val, Uint2 existing_text);
191 NLM_EXTERN CharPtr GetRNARefProductString (RnaRefPtr rrp, StringConstraintPtr scp);
192 NLM_EXTERN CharPtr GetRNAProductString (SeqFeatPtr sfp, StringConstraintPtr scp);
193 NLM_EXTERN Boolean SetRNAProductString (SeqFeatPtr sfp, StringConstraintPtr scp, CharPtr new_val, Uint2 existing_text);
194 NLM_EXTERN Boolean RemoveRNAProductString (SeqFeatPtr sfp, StringConstraintPtr scp);
195 NLM_EXTERN Boolean SettmRNATagPeptide (RnaRefPtr rrp, StringConstraintPtr scp, CharPtr new_val, Uint2 existing_text);
196 NLM_EXTERN CharPtr GettmRNATagPeptide (RnaRefPtr rrp, StringConstraintPtr scp);
197 NLM_EXTERN Boolean SetncRNAClass (RnaRefPtr rrp, StringConstraintPtr scp, CharPtr new_val, Uint2 existing_text);
198 NLM_EXTERN CharPtr GetncRNAClass (RnaRefPtr rrp, StringConstraintPtr scp);
199 NLM_EXTERN Boolean SettRNACodons_Recognized (SeqFeatPtr sfp, StringConstraintPtr scp, CharPtr new_val, Uint2 existing_text);
200 
201 /* Structured Comment functions */
202 NLM_EXTERN CharPtr GetStructuredCommentFieldFromUserObject (UserObjectPtr uop, StructuredCommentFieldPtr field, StringConstraintPtr scp);
203 NLM_EXTERN Boolean IsUserObjectStructuredComment (UserObjectPtr uop);
204 NLM_EXTERN ValNodePtr GetStructuredCommentFieldList (SeqEntryPtr sep);
205 NLM_EXTERN ValNodePtr GetStructuredCommentFieldListFromUserObject (UserObjectPtr uop);
206 
207 
208 /* Publication functions */
209 NLM_EXTERN CharPtr GetPubFieldLabel (Int4 pub_field);
210 NLM_EXTERN Int4 GetPubFieldFromLabel(CharPtr label);
211 NLM_EXTERN ValNodePtr GetPubFieldList (void);
212 NLM_EXTERN ValNodePtr GetPubClassList ();
213 NLM_EXTERN CharPtr GetPubclassFromPub (PubPtr the_pub);
214 NLM_EXTERN Boolean SetPubclassOnPub (PubPtr the_pub, CharPtr pub_class);
215 NLM_EXTERN CharPtr GetPubFieldFromPub (PubPtr the_pub, Int4 field, StringConstraintPtr scp);
216 NLM_EXTERN Int4 GetPubMLStatus (PubPtr the_pub);
217 
218 /* DBLink functions */
219 NLM_EXTERN Int4 GetNumDBLinkFields (void);
220 NLM_EXTERN CharPtr GetDBLinkNameFromDBLinkFieldType (Int4 field_type);
221 NLM_EXTERN Int4 GetDBLinkFieldTypeFromDBLinkName (CharPtr field_name);
222 
223 NLM_EXTERN CharPtr GetBioProjectIdFromBioseq (BioseqPtr bsp, StringConstraintPtr scp);
224 
225 
226 /* Dbtag functions */
227 NLM_EXTERN CharPtr GetDbtagString (DbtagPtr db_tag);
228 NLM_EXTERN Boolean SetDbtagString (DbtagPtr db_tag, CharPtr value, Uint2 existing_text);
229 
230 /* other useful functions */
231 NLM_EXTERN void GetGeneInfoForFeature (SeqFeatPtr sfp, GeneRefPtr PNTR p_grp, SeqFeatPtr PNTR p_gene);
232 
233 /* generic string functions */
234 NLM_EXTERN Boolean SetStringValue (CharPtr PNTR existing_val, CharPtr new_val, Uint2 existing_text);
235 NLM_EXTERN Boolean RemoveValNodeStringMatch (ValNodePtr PNTR list, StringConstraintPtr scp);
236 NLM_EXTERN Boolean SetStringsInValNodeStringList (ValNodePtr PNTR list, StringConstraintPtr scp, CharPtr new_val, Uint2 existing_text);
237 
238 
239 NLM_EXTERN Boolean IsStringConstraintEmpty (StringConstraintPtr scp);
240 NLM_EXTERN Boolean DoesSingleStringMatchConstraint (CharPtr str, StringConstraintPtr scp);
241 NLM_EXTERN Boolean DoesStringMatchConstraint (CharPtr str, StringConstraintPtr scp);
242 NLM_EXTERN Boolean RemoveStringConstraintPortionFromString (CharPtr PNTR str, StringConstraintPtr scp);
243 NLM_EXTERN Boolean ReplaceStringConstraintPortionInString (CharPtr PNTR str, CharPtr replace, StringConstraintPtr scp);
244 NLM_EXTERN Boolean IsSourceConstraintEmpty (SourceConstraintPtr scp);
245 NLM_EXTERN Boolean DoesBiosourceMatchConstraint (BioSourcePtr biop, SourceConstraintPtr scp);
246 NLM_EXTERN Boolean IsSequenceConstraintEmpty (SequenceConstraintPtr constraint);
247 NLM_EXTERN Boolean DoesSequenceMatchSequenceConstraint (BioseqPtr bsp, SequenceConstraintPtr constraint);
248 NLM_EXTERN Boolean IsPublicationConstraintEmpty (PublicationConstraintPtr constraint);
249 NLM_EXTERN Boolean IsFieldConstraintEmpty (FieldConstraintPtr constraint);
250 NLM_EXTERN Boolean IsCDSGeneProtQualConstraintEmpty (CDSGeneProtQualConstraintPtr constraint);
251 NLM_EXTERN Boolean IsLocationConstraintEmpty (LocationConstraintPtr lcp);
252 NLM_EXTERN Boolean IsMolinfoFieldConstraintEmpty (MolinfoFieldConstraintPtr constraint);
253 NLM_EXTERN Boolean IsTranslationConstraintEmpty (TranslationConstraintPtr constraint);
254 NLM_EXTERN Boolean DoesObjectMatchConstraintChoiceSet (Uint1 choice, Pointer data, ConstraintChoiceSetPtr csp);
255 NLM_EXTERN Boolean DoesSeqIDListMeetStringConstraint (SeqIdPtr sip, StringConstraintPtr string_constraint);
256 NLM_EXTERN ValNodePtr FreeObjectList (ValNodePtr vnp);
257 NLM_EXTERN ValNodePtr GetObjectListForAECRAction (SeqEntryPtr sep, AECRActionPtr action);
258 NLM_EXTERN ValNodePtr GetObjectListForAECRActionEx (SeqEntryPtr sep, AECRActionPtr action, BatchExtraPtr batch_extra);
259 NLM_EXTERN ValNodePtr GetObjectListForFieldType (Uint1 field_type, SeqEntryPtr sep);
260 NLM_EXTERN ValNodePtr GetSequenceListForConstraint (SeqEntryPtr sep, ConstraintChoiceSetPtr csp);
261 NLM_EXTERN Int4 DoApplyActionToObjectList (ApplyActionPtr action, ValNodePtr object_list, Boolean also_change_mrna, StringConstraintPtr scp);
262 NLM_EXTERN Int4 DoApplyActionToObjectListEx (ApplyActionPtr action, ValNodePtr object_list, Boolean also_change_mrna, StringConstraintPtr scp, BatchExtraPtr batch_extra);
263 NLM_EXTERN Int4 DoEditActionToObjectList (EditActionPtr action, ValNodePtr object_list, Boolean also_change_mrna);
264 NLM_EXTERN Int4 DoEditActionToObjectListEx (EditActionPtr action, ValNodePtr object_list, Boolean also_change_mrna, BatchExtraPtr batch_extra);
265 NLM_EXTERN Int4 DoConvertActionToObjectList (ConvertActionPtr action, ValNodePtr object_list, Boolean also_change_mrna, StringConstraintPtr scp);
266 NLM_EXTERN Int4 DoConvertActionToObjectListEx (ConvertActionPtr action, ValNodePtr object_list, Boolean also_change_mrna, StringConstraintPtr scp, BatchExtraPtr batch_extra);
267 NLM_EXTERN Int4 DoCopyActionToObjectList (CopyActionPtr action, ValNodePtr object_list, Boolean also_change_mrna, StringConstraintPtr scp);
268 NLM_EXTERN Int4 DoCopyActionToObjectListEx (CopyActionPtr action, ValNodePtr object_list, Boolean also_change_mrna, StringConstraintPtr scp, BatchExtraPtr batch_extra);
269 NLM_EXTERN Int4 DoSwapActionToObjectList (SwapActionPtr action, ValNodePtr object_list, Boolean also_change_mrna, StringConstraintPtr scp);
270 NLM_EXTERN Int4 DoRemoveActionToObjectList (RemoveActionPtr action, ValNodePtr object_list, Boolean also_change_mrna, StringConstraintPtr scp);
271 NLM_EXTERN Int4 DoParseActionToObjectList (AECRParseActionPtr action, ValNodePtr object_list, Boolean also_change_mrna, StringConstraintPtr scp);
272 NLM_EXTERN Int4 DoParseActionToObjectListEx (AECRParseActionPtr action, ValNodePtr object_list, Boolean also_change_mrna, StringConstraintPtr scp, BatchExtraPtr batch_extra);
273 NLM_EXTERN StringConstraintPtr FindStringConstraintInConstraintSetForField (FieldTypePtr field, ConstraintChoiceSetPtr csp);
274 NLM_EXTERN StringConstraintPtr FindStringConstraintInConstraintSetForFieldPair (FieldPairTypePtr fieldpair, ConstraintChoiceSetPtr csp);
275 NLM_EXTERN StringConstraintPtr StringConstraintFromFieldEdit (FieldEditPtr edit);
276 NLM_EXTERN ValNodePtr GetDuplicateFeaturesForRemoval (SeqEntryPtr sep, RemoveDuplicateFeatureActionPtr action);
277 NLM_EXTERN void RemoveDuplicateFeaturesInList (ValNodePtr delete_list, Uint2 entityID, Boolean remove_proteins);
278 NLM_EXTERN Boolean RemoveDuplicateFeaturesInSeqEntry (SeqEntryPtr sep, RemoveDuplicateFeatureActionPtr action, FILE *log_fp);
279 
280 NLM_EXTERN int LIBCALLBACK SortVnpByObject (VoidPtr ptr1, VoidPtr ptr2);
281 
282 NLM_EXTERN Boolean IsConversionSupported (Uint2 featdef_from, Uint2 featdef_to);
283 NLM_EXTERN Boolean ConvertRNAToImpFeat (SeqFeatPtr sfp, Int4 featdef_to);
284 
285 NLM_EXTERN void ApplyTextTransformsToString (CharPtr PNTR str, ValNodePtr transform_list);
286 NLM_EXTERN CharPtr GetTextPortionFromString (CharPtr str, TextPortionPtr text_portion);
287 NLM_EXTERN Boolean RemoveTextPortionFromString (CharPtr str, TextPortionPtr text_portion);
288 NLM_EXTERN Boolean IsTextMarkerEmpty (TextMarkerPtr marker);
289 NLM_EXTERN TextMarkerPtr MakeTextTextMarker (CharPtr text);
290 
291 NLM_EXTERN Uint2 GetEntityIdFromObject (Uint1 choice, Pointer data);
292 
293 typedef struct aecrsample {
294   FieldTypePtr field;
295   CharPtr first_value;
296   Int4    num_found;
297   Boolean all_same;
298 } AECRSampleData, PNTR AECRSamplePtr;
299 
300 NLM_EXTERN AECRSamplePtr AECRSampleFree (AECRSamplePtr sample);
301 
302 NLM_EXTERN ValNodePtr AECRSampleListFree (ValNodePtr list);
303 NLM_EXTERN ValNodePtr GetAECRSampleListForSeqEntry (Uint1 field_type, SeqEntryPtr sep);
304 NLM_EXTERN ValNodePtr GetAECRSampleList (AECRActionPtr act, SeqEntryPtr sep);
305 NLM_EXTERN AECRSamplePtr GetFieldSampleFromList (ValNodePtr list, FieldTypePtr field);
306 NLM_EXTERN void GetAECRExistingTextList (Uint1 field_type, SeqEntryPtr sep, FILE *fp);
307 NLM_EXTERN AECRSamplePtr GetAECRSampleFromObjectList (ValNodePtr object_list, FieldTypePtr field);
308 NLM_EXTERN AECRSamplePtr GetAECRSampleFromObjectListEx (ValNodePtr object_list, FieldTypePtr field, BatchExtraPtr batch_extra);
309 
310 NLM_EXTERN AECRSamplePtr GetExistingTextForParseAction (ParseActionPtr action, SeqEntryPtr sep);
311 
312 NLM_EXTERN void ExportFieldTable (Uint1 field_type, ValNodePtr src_field_list, SeqEntryPtr sep, FILE *fp);
313 
314 NLM_EXTERN ValNodePtr GetFieldListForFieldType (Uint1 field_type, SeqEntryPtr sep);
315 NLM_EXTERN int LIBCALLBACK SortVnpByFieldType (VoidPtr ptr1, VoidPtr ptr2);
316 NLM_EXTERN int LIBCALLBACK SortVnpByFieldTypeAndSourceQualifier (VoidPtr ptr1, VoidPtr ptr2);
317 
318 NLM_EXTERN ValNodePtr GetSourceQualFieldListFromBioSource (BioSourcePtr biop);
319 NLM_EXTERN void SortUniqueFieldTypeList (ValNodePtr PNTR field_list);
320 NLM_EXTERN ValNodePtr LIBCALLBACK FieldTypeListFree (ValNodePtr list);
321 NLM_EXTERN ValNodePtr LIBCALLBACK FieldTypeListCopy (ValNodePtr orig);
322 
323 NLM_EXTERN void ApplyMolinfoBlockToSeqEntry (SeqEntryPtr sep, MolinfoBlockPtr mib);
324 
325 NLM_EXTERN CharPtr GetDescriptorNameFromDescriptorType (Int4 descriptortype);
326 NLM_EXTERN void AddAllDescriptorsToChoiceList (ValNodePtr PNTR descriptor_type_list);
327 
328 NLM_EXTERN Boolean IsFixPubCapsActionEmpty (FixPubCapsActionPtr action);
329 
330 NLM_EXTERN void ApplyMacroToSeqEntry (SeqEntryPtr sep, ValNodePtr macro);
331 NLM_EXTERN Boolean ApplyMacroToSeqEntryEx (SeqEntryPtr sep, ValNodePtr macro, FILE *log_fp, GlobalAlignFunc align_func);
332 NLM_EXTERN Boolean ApplyMacroToSeqEntryExEx (SeqEntryPtr sep, ValNodePtr macro, FILE *log_fp, GlobalAlignFunc align_func, Int4Ptr pNumNoOp);
333 NLM_EXTERN Boolean PreprocessMacroForRepeatedUse (ValNodePtr macro, FILE *log_fp);
334 NLM_EXTERN void CleanupMacroAfterRepeatedUse (ValNodePtr macro);
335 
336 NLM_EXTERN SeqFeatPtr ApplyOneFeatureToBioseq (BioseqPtr bsp, Uint1 featdef, SeqLocPtr slp, ValNodePtr fields, ValNodePtr src_fields, Boolean add_mrna);
337 
338 /* for generating text representations of macro objects */
339 NLM_EXTERN CharPtr SummarizeSourceQual (ValNodePtr field);
340 NLM_EXTERN CharPtr FeatureFieldLabel (CharPtr feature_name, ValNodePtr field);
341 NLM_EXTERN Boolean IsFeatureFieldEmpty (FeatureFieldPtr field);
342 NLM_EXTERN Boolean IsFieldTypeEmpty (FieldTypePtr field);
343 NLM_EXTERN CharPtr SummarizeFieldType (ValNodePtr vnp);
344 NLM_EXTERN Boolean IsFieldTypeNonText (ValNodePtr field_type);
345 NLM_EXTERN CharPtr SummarizeExistingText (Uint2 existing_text);
346 NLM_EXTERN Boolean IsTextTransformEmpty (ValNodePtr vnp);
347 extern const CharPtr kTaxnameAfterBinomialString;
348 NLM_EXTERN CharPtr SummarizeTextPortion (TextPortionPtr text_portion);
349 NLM_EXTERN CharPtr SummarizeTextTransform (ValNodePtr transform);
350 NLM_EXTERN CharPtr SummarizeParseSrc (ValNodePtr src);
351 NLM_EXTERN CharPtr SummarizeParseDst (ValNodePtr dst);
352 NLM_EXTERN CharPtr SummarizeAECRAction (AECRActionPtr a);
353 NLM_EXTERN CharPtr SummarizeParseAction (ParseActionPtr p);
354 NLM_EXTERN CharPtr SummarizeAutodefAction (AutodefActionPtr autodef);
355 NLM_EXTERN CharPtr SummarizeRemoveDescriptorAction (RemoveDescriptorActionPtr a);
356 NLM_EXTERN CharPtr SummarizeFixPubCapsAction (FixPubCapsActionPtr a);
357 NLM_EXTERN CharPtr SummarizeFixCapsAction (FixCapsActionPtr action);
358 NLM_EXTERN CharPtr SummarizeFixFormatAction (FixFormatActionPtr action);
359 NLM_EXTERN CharPtr SummarizeSortFieldsAction (SortFieldsActionPtr action);
360 NLM_EXTERN CharPtr SummarizeMolinfoBlockAction (MolinfoBlockPtr mib);
361 NLM_EXTERN CharPtr SummarizeRemoveDuplicateFeaturesAction (RemoveDuplicateFeatureActionPtr action);
362 NLM_EXTERN CharPtr SummarizeAuthorFixAction (AuthorFixActionPtr a);
363 NLM_EXTERN CharPtr SummarizeWordSubstitution (WordSubstitutionPtr word);
364 NLM_EXTERN CharPtr SummarizeFeatureStrandedness (Uint2 strandedness);
365 NLM_EXTERN CharPtr SummarizeStringConstraint (StringConstraintPtr constraint);
366 NLM_EXTERN CharPtr SummarizeStringConstraintEx (StringConstraintPtr constraint, Boolean short_version);
367 NLM_EXTERN CharPtr SummarizeConstraintSet (ValNodePtr constraint_set);
368 NLM_EXTERN CharPtr SummarizeConstraint (ValNodePtr constraint);
369 NLM_EXTERN CharPtr SummarizeUpdateSequencesAction (UpdateSequencesActionPtr action);
370 NLM_EXTERN CharPtr SummarizePerformAutofixAction (AutofixActionPtr action);
371 NLM_EXTERN CharPtr SummarizeFixSetsAction (FixSetsActionPtr action);
372 NLM_EXTERN CharPtr SummarizeApplyTableAction (ApplyTableActionPtr action);
373 NLM_EXTERN CharPtr SummarizeRemoveSequencesAction (RemoveSequencesActionPtr action);
374 NLM_EXTERN CharPtr SummarizePropagateSequenceTechnology (Pointer action);
375 NLM_EXTERN CharPtr SummarizeMacroAction (ValNodePtr vnp);
376 
377 
378 extern const CharPtr s_QuantityWords [];
379 extern const Int4 k_NumQuantityWords;
380 extern const CharPtr s_SpecialPubFieldWords [];
381 extern const Int4 k_NumSpecialPubFieldWords;
382 
383 NLM_EXTERN Boolean AllowFieldMulti (FieldTypePtr field);
384 
385 NLM_EXTERN CharPtr GetFieldValueForObject (Uint1 choice, Pointer data, FieldTypePtr field, StringConstraintPtr scp);
386 NLM_EXTERN CharPtr GetFieldValueForObjectEx (Uint1 choice, Pointer data, FieldTypePtr field, StringConstraintPtr scp, BatchExtraPtr batch_extra);
387 NLM_EXTERN Boolean SetFieldValueForObject (Uint1 choice, Pointer data, FieldTypePtr field, StringConstraintPtr scp, CharPtr value, Uint2 existing_text);
388 NLM_EXTERN Boolean SetFieldValueForObjectEx (Uint1 choice, Pointer data, FieldTypePtr field, StringConstraintPtr scp, CharPtr value, Uint2 existing_text, BatchExtraPtr batch_extra);
389 NLM_EXTERN BioseqPtr GetSequenceForObject (Uint1 choice, Pointer data);
390 NLM_EXTERN ValNodePtr GetMultipleFieldValuesForObject (Uint1 choice, Pointer data, FieldTypePtr field, StringConstraintPtr scp, BatchExtraPtr batch_extra);
391 
392 NLM_EXTERN void InitValNodeBlock (ValNodeBlockPtr vnbp, ValNodePtr list);
393 NLM_EXTERN void ValNodeAddPointerToEnd (ValNodeBlockPtr vnbp, Uint1 choice, Pointer data);
394 NLM_EXTERN void ValNodeAddPointerToFront (ValNodeBlockPtr vnbp, Uint1 choice, Pointer data);
395 NLM_EXTERN void ValNodeLinkToEnd (ValNodeBlockPtr vnbp, ValNodePtr list);
396 NLM_EXTERN void ValNodeSortBlock (ValNodeBlockPtr vnbp, int (LIBCALLBACK *compar )PROTO ((Nlm_VoidPtr, Nlm_VoidPtr )));
397 
398 
399 typedef enum {
400   eTableMatchFeatureID = 1,
401   eTableMatchGeneLocusTag,
402   eTableMatchProteinID,
403   eTableMatchDbxref,
404   eTableMatchNucID,
405   eTableMatchBioSource,
406   eTableMatchSourceQual,
407   eTableMatchProteinName,    /* J. Chen */
408   eTableMatchBioProject,
409   eTableMatchAny
410 } ETableMatchType;
411 
412 
413 typedef struct matchtype {
414   Uint1   choice;
415   Pointer data;
416   Uint1   match_location;
417 } MatchTypeData, PNTR MatchTypePtr;
418 
419 typedef struct tabcolumnconfig {
420   MatchTypePtr match_type;
421   FieldTypePtr field;
422   Uint2 existing_text;
423   Boolean skip_blank;
424   Boolean match_mrna;
425   ValNodePtr constraint;
426 } TabColumnConfigData, PNTR TabColumnConfigPtr;
427 
428 
429 
430 NLM_EXTERN MatchTypePtr MatchTypeNew ();
431 NLM_EXTERN MatchTypePtr MatchTypeFree (MatchTypePtr match_type);
432 
433 NLM_EXTERN TabColumnConfigPtr TabColumnConfigNew (void);
434 NLM_EXTERN TabColumnConfigPtr TabColumnConfigFree (TabColumnConfigPtr t);
435 NLM_EXTERN TabColumnConfigPtr TabColumnConfigCopy (TabColumnConfigPtr orig);
436 NLM_EXTERN void TabColumnConfigReset (TabColumnConfigPtr t);
437 NLM_EXTERN ValNodePtr TabColumnConfigListFree (ValNodePtr columns);
438 NLM_EXTERN ValNodePtr TabColumnConfigListCopy (ValNodePtr orig);
439 NLM_EXTERN MatchTypePtr MatchTypeFromTableMatchType (TableMatchPtr t);
440 NLM_EXTERN TableMatchPtr TableMatchTypeFromMatchType (MatchTypePtr m);
441 
442 NLM_EXTERN ValNodePtr ValidateTabTableValues (ValNodePtr table, ValNodePtr columns);
443 NLM_EXTERN ValNodePtr CheckForDuplicateColumns (ValNodePtr columns);
444 NLM_EXTERN void FixDuplicateColumns (ValNodePtr columns);
445 NLM_EXTERN ValNodePtr ValidateFeatureFieldColumnNames (ValNodePtr header_line, ValNodePtr PNTR perr_list);
446 NLM_EXTERN ValNodePtr FreeObjectTableForTabTable (ValNodePtr table);
447 NLM_EXTERN ValNodePtr GetObjectTableForTabTable (SeqEntryPtr sep, ValNodePtr table, ValNodePtr columns, ValNodePtr PNTR p_err_list);
448 NLM_EXTERN ValNodePtr GetSequenceListsForMatchTypeInTabTable (SeqEntryPtr sep, ValNodePtr table, Int4 col, MatchTypePtr match_type, ValNodePtr PNTR p_err_list);
449 NLM_EXTERN ValNodePtr FreeSequenceLists (ValNodePtr lists);
450 NLM_EXTERN ValNodePtr ApplyTableValuesToObjectTable (SeqEntryPtr sep, ValNodePtr table, ValNodePtr columns, ValNodePtr obj_table);
451 NLM_EXTERN ValNodePtr CheckObjTableForRowsThatApplyToTheSameDestination (ValNodePtr obj_table);
452 NLM_EXTERN ValNodePtr CheckObjTableForExistingText (SeqEntryPtr sep, ValNodePtr table, ValNodePtr columns, ValNodePtr obj_table);
453 
454 NLM_EXTERN ValNodePtr ApplyTableToFeatures (SeqEntryPtr sep, ValNodePtr table, ValNodePtr columns);
455 NLM_EXTERN ValNodePtr CheckTableForExistingText (SeqEntryPtr sep, ValNodePtr table, ValNodePtr columns);
456 
457 NLM_EXTERN SeqFeatPtr GetmRNAForFeature (SeqFeatPtr sfp);
458 NLM_EXTERN Boolean AdjustmRNAProductToMatchProteinProduct (SeqFeatPtr sfp);
459 NLM_EXTERN Boolean IsFieldTypeCDSProduct (FieldTypePtr ft);
460 
461 NLM_EXTERN ValNodePtr GetPublicationTitlesInSep (SeqEntryPtr sep);
462 NLM_EXTERN ValNodePtr GetBankitCommentsInSep (SeqEntryPtr sep);
463 NLM_EXTERN ValNodePtr GetPublicationTitlesOnSep (SeqEntryPtr sep);
464 NLM_EXTERN ValNodePtr GetBankitCommentsOnSep (SeqEntryPtr sep);
465 
466 NLM_EXTERN BioseqPtr GetRepresentativeBioseqFromBioseqSet (BioseqSetPtr bssp);
467 
468 NLM_EXTERN ValNodePtr ValNodeCopyPtr (ValNodePtr orig);
469 NLM_EXTERN SeqLocPtr ParseSimpleSeqLoc (CharPtr str, BioseqPtr bsp);
470 
471 NLM_EXTERN void FixCapitalizationInString (CharPtr PNTR pTitle, Uint2 capitalization, ValNodePtr   org_names);
472 
473 NLM_EXTERN Boolean GBBlockIsCompletelyEmpty (GBBlockPtr gb);
474 
475 NLM_EXTERN CharPtr GetObjectIdString (ObjectIdPtr oip);
476 NLM_EXTERN Boolean SetObjectIdString (ObjectIdPtr oip, CharPtr value, Uint2 existing_text);
477 
478 NLM_EXTERN void SplitPCRPrimersByPosition (SeqEntryPtr sep);
479 NLM_EXTERN void SplitPCRPrimersByConstraints (SeqEntryPtr sep, StringConstraintPtr scp_fwd, StringConstraintPtr scp_rev);
480 NLM_EXTERN void MergePCRPrimers (SeqEntryPtr sep);
481 
482 NLM_EXTERN SubSourcePtr FindBadLatLon (BioSourcePtr biop);
483 NLM_EXTERN Boolean LatLonAutocorrectList (FILE *fp, ValNodePtr object_list);
484 NLM_EXTERN void FixiPCRPrimerSeqsCallback (BioSourcePtr biop, Pointer data);
485 
486 NLM_EXTERN Boolean HasTaxonomyID (BioSourcePtr biop);
487 
488 NLM_EXTERN ProtRefPtr GetProtRefForFeature (SeqFeatPtr sfp);
489 
490 NLM_EXTERN Boolean StripSuffixFromAuthor (AuthorPtr pAuthor);
491 NLM_EXTERN Boolean TruncateAuthorMiddleInitials (AuthorPtr pAuthor);
492 NLM_EXTERN CharPtr GetAuthorListString (AuthListPtr alp, StringConstraintPtr scp);
493 NLM_EXTERN ValNodePtr ReadNameListFromString (CharPtr value);
494 
495 NLM_EXTERN Int4 ConvertLocalIdsToTSAIds (SeqEntryPtr sep, CharPtr suffix, TextPortionPtr tp);
496 NLM_EXTERN Int4 CreateTSAIDsFromDeflineInSep (SeqEntryPtr sep, CharPtr suffix, TextPortionPtr t);
497 NLM_EXTERN Int4 EditTSAIds (SeqEntryPtr sep, CharPtr suffix, TextPortionPtr tp);
498 NLM_EXTERN CharPtr SummarizeCreateTSAIDsAction (CreateTSAIdsActionPtr action);
499 
500 
501 /* for product name rules */
502 NLM_EXTERN Int4 CountSuspectRuleSet (SuspectRuleSetPtr set);
503 
504 NLM_EXTERN Boolean IsSearchFuncEmpty (SearchFuncPtr func);
505 NLM_EXTERN Boolean IsSuspectRuleEmpty (SuspectRulePtr rule);
506 
507 NLM_EXTERN CharPtr SummarizeSearchFunc (SearchFuncPtr func, Boolean short_version);
508 NLM_EXTERN CharPtr SummarizeReplaceFunc (ReplaceFuncPtr replace, Boolean short_version);
509 NLM_EXTERN CharPtr SummarizeFixType (Uint2 fix_type);
510 NLM_EXTERN CharPtr SummarizeReplaceRule (ReplaceRulePtr replace, Boolean short_version);
511 NLM_EXTERN CharPtr SummarizeSuspectRule (SuspectRulePtr rule);
512 NLM_EXTERN CharPtr SummarizeSuspectRuleEx (SuspectRulePtr rule, Boolean short_version);
513 
514 
515 NLM_EXTERN Boolean StringMayContainPlural (CharPtr search);
516 NLM_EXTERN Boolean ContainsNorMoreSetsOfBracketsOrParentheses (CharPtr search, Int4 n);
517 NLM_EXTERN Boolean ContainsThreeOrMoreNumbersTogether (CharPtr search);
518 NLM_EXTERN Boolean IsPrefixPlusNumbers (CharPtr prefix, CharPtr search);
519 NLM_EXTERN Boolean StringContainsUnbalancedParentheses (CharPtr search);
520 NLM_EXTERN Boolean StringContainsUnderscore (CharPtr search);
521 NLM_EXTERN Boolean ProductContainsTerm (CharPtr pattern, CharPtr search);
522 
523 NLM_EXTERN Boolean DoesStringMatchSuspectRule (CharPtr str, SeqFeatPtr sfp, SuspectRulePtr rule);
524 NLM_EXTERN ValNodePtr GetFeaturesForSuspectRules (SeqEntryPtr sep, SuspectRuleSetPtr rules, Uint2 featdef);
525 NLM_EXTERN ValNodePtr FreeListOfObjectLists (ValNodePtr list);
526 NLM_EXTERN void PrintSuspectRuleMatches (SeqEntryPtr sep, SuspectRuleSetPtr rules, FILE *fp);
527 NLM_EXTERN ValNodePtr GetSuspectRuleDiscrepancies (SeqEntryPtr sep, SuspectRuleSetPtr rules, Uint2 featdef, Uint4 clickable_item_type);
528 NLM_EXTERN Int4 ApplySuspectRuleFixesToSeqEntry (SeqEntryPtr sep, SuspectRuleSetPtr rules, FILE *fp);
529 
530 NLM_EXTERN Boolean ApplySuspectProductNameFixToString (SuspectRulePtr rule, CharPtr PNTR str);
531 NLM_EXTERN Boolean ApplySuspectProductNameFixToFeature (SuspectRulePtr rule, SeqFeatPtr cds, FILE *fp);
532 NLM_EXTERN void SortSuspectRuleSetByFind (SuspectRuleSetPtr PNTR rules);
533 NLM_EXTERN void SortSuspectRuleSetByFixTypeThenFind (SuspectRuleSetPtr PNTR rules);
534 
535 NLM_EXTERN void FindDiffsBetweenRuleSets (SuspectRuleSetPtr set1, SuspectRuleSetPtr set2, SuspectRuleSetPtr PNTR in1not2, SuspectRuleSetPtr PNTR in2not1);
536 NLM_EXTERN Boolean FindSuspectProductNamesInEntrezGene (FILE *input_file, SuspectRuleSetPtr rule_list, FILE *output_file);
537 NLM_EXTERN Boolean FixSuspectProductNamesInEntrezGene (FILE *input_file, SuspectRuleSetPtr rule_list, FILE *output_file);
538 NLM_EXTERN void FindSuspectProductNamesInNameList (FILE *input_file, SuspectRuleSetPtr rule_list, FILE *output_file);
539 NLM_EXTERN void FixSuspectProductNamesInNameList (FILE *input_file, SuspectRuleSetPtr rule_list, FILE *output_file);
540 
541 
542 /* declarations for product update table handling */
543 NLM_EXTERN ValNodePtr ReadProductUpdateTable (FILE *fp);
544 NLM_EXTERN ValNodePtr ProductUpdateTableFree (ValNodePtr list);
545 NLM_EXTERN Boolean ApplyProductUpdateTable (ValNodePtr table, SeqEntryPtr sep, FILE *log_fp);
546 NLM_EXTERN void ExportProductUpdateTable (SeqEntryPtr sep, FILE *fp);
547 NLM_EXTERN void ExportProductUpdateTableWithPrecomputedSuggestions (FILE *fp, SeqEntryPtr sep, SuspectRuleSetPtr rules);
548 
549 NLM_EXTERN ValNodePtr GetBioseqMatchesForSequenceIDs (ValNodePtr query_list, Uint1 match_location, SeqEntryPtr sep);
550 
551 NLM_EXTERN ValNodePtr ShuffleUpdateBioseqListWithIndex (ValNodePtr PNTR update_bioseq_list, ValNodePtr orig_bioseq_list);
552 
553 NLM_EXTERN Boolean IsUserFieldStructuredCommentPrefixOrSuffix (UserFieldPtr ufp);
554 
555 
556 NLM_EXTERN void ConvertListToMiscFeat (ValNodePtr list, Boolean remove_gene, LogInfoPtr lip);
557 NLM_EXTERN Boolean TrimStopsFromCompleteCodingRegions (SeqEntryPtr sep, FILE *log_fp);
558 NLM_EXTERN Boolean DoFeaturesMatch (SeqFeatPtr sfp1, SeqFeatPtr sfp2, Boolean allow_different_sequences, Boolean case_sensitive, Boolean ignore_partial);
559 
560 
561 #ifdef __cplusplus
562 }
563 #endif
564 
565 #endif
566