1 /*   mmdbapi1.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:  mmdbapi1.h
27 *
28 * Author:  Christopher Hogue
29 *
30 * Version Creation Date:   03/14/95
31 *
32 * $Revision: 6.32 $
33 *
34 * File Description:
35 *
36 * Modifications:
37 * --------------------------------------------------------------------------
38 * Date     Name        Description of modification
39 * -------  ----------  -----------------------------------------------------
40 * 95/08/28 C. Hogue    Major change to new Biostruc ASN.1 v4.0,
41 *                      Addition of Features, Secondary Structure, Ensembles,
42 *                      PDB file generators, Kinemage file renderers.
43 *		       Model nodes and Dictionaries altered...
44 *
45 * $Log: mmdbapi1.h,v $
46 * Revision 6.32  2000/12/05 21:03:05  hurwitz
47 * made it neat
48 *
49 * Revision 6.31  2000/07/24 22:29:45  thiessen
50 * fix header conflict
51 *
52 * Revision 6.30  2000/07/21 18:56:41  thiessen
53 * allow dynamic slave->master transformation
54 *
55 * Revision 6.29  2000/03/13 15:51:25  thiessen
56 * added storage for PARS to each residue for Cn3D; removed unused fields
57 *
58 * Revision 6.28  2000/03/09 17:52:57  thiessen
59 * changes to MSD, MGD for feature implementation in Cn3D
60 *
61 * Revision 6.27  2000/03/01 16:16:45  thiessen
62 * modified backbone definitions, added AM_PARTIALBACKBONE
63 *
64 * Revision 6.26  1999/10/05 23:18:17  lewisg
65 * add ddv and udv to cn3d with memory management
66 *
67 * Revision 6.25  1999/06/07 21:23:36  ywang
68 * add iUserDefinedFeatureOld, FeatureOnOld to MGD
69 *
70 * Revision 6.24  1999/05/07 14:11:25  zimmerma
71 * - Modified InstallAlignedSlave(), InstallStrucFeature(), BiostrucAddFeature() and
72 * Boolean InstBSAnnotSet() for additional args: Boolean Chain, and CharPtr SlaveChain;
73 *
74 * - InstBSAnnotSet now also expects argument CharPtr JobID
75 *
76 * - Added forward DCLs for LIBCALL isBiopoly() and LIBCALL isHet()
77 *
78 * Revision 6.23  1999/04/26 20:49:59  lewisg
79 * changed arguments named list to fix visual c++ bug
80 *
81 * Revision 6.22  1999/04/15 21:36:18  ywang
82 * move iMimeType to data block for MSD
83 *
84 * Revision 6.21  1999/04/13 23:07:17  ywang
85 * move position for Byte bVisible for MOD
86 *
87 * Revision 6.20  1999/03/18 21:04:30  lewisg
88 * reverse transform for saving
89 *
90 * Revision 6.19  1999/03/17 20:11:10  lewisg
91 * fix memory overwrite in pfd
92 *
93 * Revision 6.18  1999/03/01 20:22:11  ywang
94 * add bTurnedOff flag on MGD
95 *
96 * Revision 6.17  1999/02/24 22:58:10  ywang
97 * add iMimeType to MSD node and other minor name change
98 *
99 * Revision 6.16  1999/02/02 22:27:01  ywang
100 * add bJustHighlighted flag to MGD for feature edit
101 *
102  * Revision 6.15  1998/12/16  19:30:14  ywang
103  * add flag for highlight status to MGD
104  *
105  * Revision 6.14  1998/11/06  23:02:02  ywang
106  * add FeatureOn to MGD for feature on/off control
107  *
108  * Revision 6.13  1998/11/04  00:53:41  ywang
109  * add iFeature to MGD for modeling control
110  *
111  * Revision 6.12  1998/10/21  15:43:22  ywang
112  * attach the whole vast alignment data to master structure
113  *
114  * Revision 6.11  1998/10/01  21:56:37  ywang
115  * set display flag for object
116  *
117  * Revision 6.10  1998/09/22  17:52:21  ywang
118  * add flag for display control on MM and MG level
119  *
120  * Revision 6.9  1998/05/12  21:46:24  lewisg
121  * stricter conservation coloring
122  *
123 * Revision 6.8  1998/04/28 22:51:20  lewisg
124 * created separate pointer to master in MGD
125 *
126 * Revision 6.7  1998/04/21 22:58:53  lewisg
127 * eliminate dead code
128 *
129 * Revision 6.6  1998/04/10 22:41:48  lewisg
130 * eliminated dead code and added a visible bit to MSD
131 *
132 * Revision 6.5  1998/03/26 22:43:30  lewisg
133 * added seqentry and seq annot to msd
134 *
135 * Revision 6.4  1998/03/10 04:31:05  lewisg
136 * change name of MakePDBSeqId to MakePDBSeqId2 to avoid name conflict
137 *
138 * Revision 6.3  1998/03/06 23:17:12  lewisg
139 * codewarrior fixes
140 *
141 * Revision 6.2  1998/03/06 01:15:28  lewisg
142 * merge
143 *
144 * Revision 6.0  1997/08/25 18:11:00  madden
145 * Revision changed to 6.0
146 *
147 * Revision 5.5  1997/06/19 18:40:03  vakatov
148 * [WIN32,MSVC++]  Adopted for the "NCBIOBJ.LIB" DLL'ization
149 *
150 * Revision 5.4  1997/04/18 19:18:56  hogue
151 * Int2 counters for atoms upgraded to Int4's, made ppAsnOrder alloc optional.
152 *
153  * Revision 5.3  1997/04/09  18:59:33  hogue
154  * removed redundant include of objall.h
155  *
156  * Revision 5.2  1997/01/08  21:07:51  vakatov
157  * Removed redundant declaration of NCBI_months[12]
158  *
159  * Revision 5.1  1996/07/31  18:38:22  hogue
160  * Structure feature handling structs added, and pointer from ald to graphic for composing groups of segments.
161  *
162  * Revision 5.0  1996/05/28  14:02:09  ostell
163  * Set to revision 5.0
164  *
165  * Revision 1.17  1996/05/01  14:41:26  hogue
166  * Added  MakeChemGraphNodeList, and Domain support
167  *
168  * Revision 1.16  1996/04/18  17:38:36  hogue
169  * FETCH_ENTREZ flag use altered, added pdnmsSlaves to MSD for slave structures in multiple alignments
170  *
171  * Revision 1.15  1996/03/29  19:28:49  hogue
172  * Added pExtra pointer to MSD
173  *
174  * Revision 1.14  1996/01/31  21:35:00  hogue
175  * Changes to accomodate the free-ing of models, most dramatically is the
176  * encapuslation of interim free-ers to FreeSurfaceModelAsnList and
177  * FreeAtomicModelAsnLists.  KEEP_ASN no longer supported.  PDNSM and its
178  * kin renamed to PDNML.
179  *
180  * Revision 1.13  1995/11/09  22:54:56  hogue
181  * Added new pointers, variables to node data structures for Feature tables,
182  * rendering, coloring; added linking pointers between models and locations/objects
183  *
184  * Revision 1.12  1995/09/19  21:08:08  hogue
185  * Removed unnecessary typedefs.
186  *
187  * Revision 1.11  1995/09/18  21:25:11  hogue
188  * Het name field added in MGD
189  *
190  * Revision 1.10  1995/08/29  20:03:06  kans
191  * Entrez-like loading now enabled, models fixed
192  *
193  * Revision 1.8  1995/08/28  22:46:40  kans
194  * moved BiostrucAvail to mmdbapi1.[ch]
195  *
196  * Revision 1.7  1995/08/28  20:06:37  kans
197  * *** empty log message ***
198  *
199  * Revision 1.5  1995/08/28  19:31:53  kans
200  * version 4.1
201  *
202  * Revision 1.3  1995/08/11  20:23:09  epstein
203  * add support for VECMODEL
204  *
205  * Revision 1.2  1995/08/03  21:44:33  kans
206  * numerous changes
207  *
208  * Revision 1.1  1995/08/02  17:07:15  kans
209  * Initial revision
210  *
211 *
212 * ==========================================================================
213 */
214 
215 /*****************************************************************************
216 *
217 *  mmdbapi1.c
218 *
219 *   UNDER CONSTRUCTION NOTICE.
220 *	EVERYTHING SUBJECT TO RADICAL CHANGES!
221 *
222 *  programmer C.W.V. Hogue
223 *  created: 14 Mar 95
224 *  last mod: 28 AUGUST 95
225 *****************************************************************************/
226 
227 #ifndef _MMDBAPI1_
228 #define _MMDBAPI1_
229 
230 /* GLOBAL VARIABLES */
231 
232 #include <asn.h>
233 #include <objall.h>
234 #include <strimprt.h>
235 #include <objmmdb1.h>
236 #include <objmmdb2.h>
237 #include <objmmdb3.h>
238 #include <dvncode.h>
239 #include <corematx.h>
240 #include <objseq.h>
241 #include <objsset.h>
242 /*#include <mmdbapi.h>*/
243 
244 #define INP_ASCII_FILE 1
245 #define INP_BINARY_FILE 0
246 #define INP_GI 2
247 #define INP_PDB_ACCESSION 3
248 
249 #define DICT_DEFAULT "bstdt.val"
250 /* new version 4 ASN.1 defines */
251 #define PDBNAME_DEFAULT "1AAA"
252 #define STRING_UNK_PDB "Unknown/Non-PDB"
253 #define STRING_UNK_RES "UNK"
254 #define STRING_UNK_MOL " "
255 #define STRING_NCBI_SS "NCBI assigned secondary structure"
256 #define STRING_PDB_SS "PDB secondary structure"
257 #define STRING_NCBI_VAST "VAST Alignment"
258 #define STRING_NCBI_DOMAIN "NCBI Domains"
259 #define STRING_PDB_SITE "PDB SITE"
260 #define STRING_PDB_FOOTNOTE "PDB FOOTNOTE"
261 #define Assembly_Type_Physiological_Form 1
262 #define Assembly_Type_Crystallographic_Cell 2
263 #define Assembly_Type_Other 255
264 
265 #define Molecule_type_dna 1
266 #define Molecule_type_rna 2
267 #define Molecule_type_protein 3
268 #define Molecule_type_other_biopolymer 4
269 #define Molecule_type_solvent 5
270 #define Molecule_type_other_nonpolymer 6
271 #define Molecule_type_other 255
272 
273 #define Residue_deoxyribonucleotide 1
274 #define Residue_ribonucleotide 2
275 #define Residue_amino_acid 3
276 #define Residue_other 255
277 
278 #define Feature_type_helix 1
279 #define Feature_type_strand 2
280 #define Feature_type_sheet 3
281 #define Feature_type_turn 4
282 #define Feature_type_site 5
283 #define Feature_type_footnote 6
284 #define Feature_type_subgraph 100
285 #define Feature_type_region 101
286 #define Feature_type_alignment 200
287 #define Feature_type_similarity 201
288 #define Feature_type_other 255
289 
290 #define Feature_type_transform 153
291 #define Feature_type_camera 154
292 #define Feature_type_script 155
293 #define Feature_type_multalign 202
294 #define Feature_type_color 150
295 #define Feature_type_render 151
296 #define Feature_type_label 152
297 #define Feature_type_indirect 203
298 #define Feature_type_cn3dstate 254
299 #define Feature_type_comment 7
300 
301 #define MAX_FEATURES 10
302 #define VIEW_CODE 1 /* undef to remove display specific stuff in Modelstruc*/
303 /* #define BIG_CODE 1  define to add "user" variables to a Modelstruc PFB nodes */
304 
305 #define INTSTRLEN 30  /* characters in MAXINT */
306 
307 #define Model_type_ncbi_vector  1
308 #define Model_type_ncbi_backbone 2
309 #define Model_type_ncbi_all_atom 3
310 #define Model_type_pdb_model 4
311 #define Model_type_other 255
312 
313 #define BSEVERYTHING 5
314 
315 /*bExtent settings:*/
316 /* used by Biostruc2Modelstruc */
317 /* determines how much is converted */
318 #define COORDS_DATA  0x01
319 #define TEMP_DATA    0x02 /*must have coords too*/
320 #define OCC_DATA     0x04 /* must have coords too */
321 #define ALTCNF_DATA  0x08 /* other locations */
322 #define FETCH_ENTREZ 0x20 /* Need to call EntrezInit/EntrezFini   */
323 #define BD_TREE      0x40
324 /* #define FEATURE_TAB  0x80 not used */
325 #define POWER_VIEW   0xFF
326 #define CONVERT_ALL  0xFF
327 
328 /*
329  * Flags for the bMe of the MBD,MAD,MGD,MMD, MSD hierarchy of structures.
330  * SHOW_ME byte is for a viewer to see if the node and its children are to be shown
331  * REG_STYLE says display using the default style palette for the node and children
332  * AM_CHANGED is a flag saying the node has been changed by last operation.
333  * AM_MDB,  AM_MAD, AM_MGD, AM_MMD, AM_MSD say what kind of sub-struc this is
334  * and can be used to typecast appropriately.
335  *
336  */
337 
338 /* Flags Block bUpdate byte */
339 /* these bits ARE stacked - i.e.
340  * don't set with:
341  *  byte = AM_CHANGED, instead use
342  *  byte = (byte | AM_CHANGED)
343  *
344  */
345 #define AM_CHANGED 0x01
346 #define SHOW_ME    0x02
347 #define REG_STYLE  0x04
348 /* define AM_ION   0x80 declared below */
349 
350 
351 /* Flags Block bMe byte */
352 /* these bits are NOT EVER stacked
353  * and are set by MMDBAPI
354  * you can use a switch statement
355  * on these...
356  */
357 #define AM_ALD     0x80  /* Atom Location   Data */
358 #define AM_MDD     0x40  /* Model Density   Data */
359 #define AM_MOD     0x20  /* Model Object    Data */
360 #define AM_MBD     0x10  /* Model Bond      Data */
361 #define AM_MAD     0x08  /* Model Atom      Data */
362 #define AM_MGD     0x04  /* Model Graph     Data */
363 #define AM_MMD     0x02  /* Model Molecule  Data */
364 #define AM_MSD     0x01  /* Model Structure Data */
365 #define AM_UNK     0x00
366 
367 /*
368  * Flags for the bWhat of MBD, MAD, MGD, MMD, MDS hierarchy.
369  * This says what is contained in this branch of hierarchy, i.e.
370  * a full MSD structure can be (no Nucleic acids)
371  * e.g. pMSD->bWhat = AM_POLY | AM_PROT | AM_HET | AM_SOL
372  * or, in a MMD molecule
373  * pMMD->bWhat = AM_POLY | AM_PROT
374  * etc...
375  * This way if the structure has NO HET groups,  the don't invoke
376  * them from a menu...
377  */
378 
379 /* Flags Block bWhat byte  For Struc, Molec */
380 /* these bits ARE stacked in Struc, but NOT stacked in Molec */
381 #define  AM_ION   0x80 /* not set in PDB derived data - do lookup */
382 #define  AM_RNA   0x40
383 #define  AM_WAT   0x20
384 #define  AM_SOL   0x10
385 #define  AM_HET   0x08
386 #define  AM_DNA   0x04
387 #define  AM_PROT  0x02
388 #define  AM_POLY  0x01
389 
390 /* Flags Block bWhat byte for Graph */
391 /* these bits ARE stacked */
392 #define  DICT_REF     0x80
393 #define  DICT_GLOBAL  0x40
394 #define  DICT_LOCAL   0x20
395 #define  RES_RNA      0x10
396 #define  RES_DNA      0x08
397 #define  RES_AA       0x04
398 
399 /* Flags for bNCBISecStru or pPDBSecStru in PMGD of type RES_AA */
400 #define   SS_HELIX     0x80
401 #define   SS_SHEET     0x40
402 #define   SS_STRAND    0x20
403 #define   SS_TURN      0x10
404 
405 /* Flags Block bWhat byte for MAD atom */
406 /* all these are  set by traversers */
407 #define  AM_BACKBONE            0x01  /* PROT & NA */
408 #define  AM_CALPHA              0x02  /* PROT */
409 #define  AM_PALPHA              0x04  /* RNA & DNA */
410 #define  AM_PARTIALBACKBONE     0x08  /* PROT & NA - all atoms off linear backbone */
411 #define  AM_CBETA               0x10  /* PROT */
412 #define  AM_NBETA               0x20  /* RNA & DNA */
413 #define  AM_C1RIBOSE            0x40  /* RNA & DNA */
414 #define  AM_C4RIBOSE            0x80  /* RNA & DNA */
415 
416 /* shorter names from the ASN.1 defines */
417 #define Bond_order_partial_double 2
418 #define Bond_order_aromatic 3
419 #define Bond_order_double 4
420 #define Bond_order_triple 5
421 #define Bond_order_other 6
422 #define Bond_order_unknown 255
423 #define Bond_order_single 1
424 
425 /* Flags Block bWhat byte for MBD bond */
426 /* these bits are stacked */
427 #define  BOND_VIRTUAL  0x80  /* set by traversers */
428 #define  BOND_PDOUBLE  0x40
429 #define  BOND_VDW      0x20  /* not set for PDB */
430 #define  BOND_IONIC    0x10  /* not set for PDB */
431 #define  BOND_H        0x08  /* not set for PDB */
432 #define  BOND_TRIPLE   0x04
433 #define  BOND_DOUBLE   0x02
434 #define  BOND_SINGLE   0x01
435 #define  BOND_NONE     0x00
436 
437 /* if BOND_PDOUBLE & BOND_DOUBLE then aromatic */
438 
439 /* Flags Block bWhat byte  For Object */
440 /* these are not stacked */
441 #define  OBJ_SPHERE     0x80
442 #define  OBJ_CYLINDER   0x40
443 #define  OBJ_BRICK      0x20
444 #define  OBJ_TMESH      0x10
445 #define  OBJ_TRIANGLES  0x08
446 #define  OBJ_CONE       0x04
447 
448 /* Pointers to the hierarchical types for Biostruc data
449  * Note the terse struct names MMx, PMMx, MMxD are used to limit the
450  * length of long pointer casts when coding and for Hungarian Notation
451  * coding.  The names are broken down
452  * here in the header file for each declaration,  so you can see how they
453  * are logically constructed.
454  * a PDN is a Pointer to DValNode
455  * a PVN is a Pointer to ValNode
456  */
457 
458 typedef DValNodePtr PDNMS; /* Model Structure (MS) */
459 /* Node contains a PMSD - Pointer to Model Structure Data */
460 /* choice = structure no */
461 
462 typedef DValNodePtr PDNMM; /*  Model Molecule (MM) */
463 /* Node contains a PMMD - Pointer to Model Molecule Data */
464 /* choice = molecule id */
465 
466 typedef DValNodePtr PDNMG; /* Model  Residue (MG)*/
467 /* Node contains a PMGD - Pointer to Model Residue Data */
468 /* choice = residue id */
469 
470 typedef ValNodePtr PVNMA; /* Model Atom (MA) */
471 /* Node contains a PMAD - Pointer to Model Atom Data */
472 /* choice = element */
473 
474 typedef ValNodePtr PVNMB; /* Model Bond (MB)*/
475 /* Node contains a PMBD - Pointer to Model Bond Data */
476 /* choice = bond order */
477 
478 typedef ValNodePtr PVNAL; /* Atom Location (AL) */
479 /* Node contains a PALD - Pointer to Atom Location Data */
480 /* choice = model id */
481 
482 typedef ValNodePtr PVNMO; /* Model Object */
483 /* Node contains a PMOD - Pointer to Model Object Data */
484 /* choice = model id */
485 
486 typedef ValNodePtr PVNMD; /* Model Density */
487 /* Node contains a PMDD - Pointer to Model Density Data */
488 /* choice = model id */
489 
490 typedef DValNodePtr PDNML; /* Structure Model */
491 /* Node contains a BiostrucModelPtr */
492 /* choice = model id */
493 
494 typedef DValNodePtr PDNSF; /* Structure Feature */
495 /* Node contains a BiostrucFeatureSetPtr */
496 /* choice = feature number */
497 
498 /***************************/
499 /*MMDBAPI NODE DECLARATIONS*/
500 /***************************/
501 
502 /**************/
503 /* Flag Block */
504 /**************/
505 
506 /* COMMON TO MSD, MMD, MGD, MAD, MOD, MDD and MBD: */
507 /* if you have a PMxD, can cast as a "PFB" and get the correct type */
508 
509 typedef struct nlm_flagblock {
510   struct nlm_flagblock PNTR pfbParent;
511   /* pointer to parent Data node (for MSD it is NULL) */
512   Byte bMe; /* Me byte - identifies typecast and display triage */
513   Byte bWhat; /* What is in me? */
514   Byte bUpdate; /* byte to indicate status */
515   Byte bReserved;
516   Int4Ptr pI4vFeatID;  /* Feature Id */
517   PointerPtr ppvFeatData; /* vector containing pointers */
518   Int2 iNumFeats;  /* number of Features registered in node */
519 #ifdef BIG_CODE
520   Byte bReserved1;  /*  */
521   Byte bUser1;
522   Int2 i2Reserved;
523   Int2 i2User;
524 #endif
525 }FB,  *PFB, **PPFB;
526 
527 
528 /*************************/
529 /*  Feature Handlers     */
530 /*************************/
531 
532 typedef DValNodePtr PDNTRN;
533 
534 typedef DValNodePtr PDNSFS; /* Structure Feature Set*/
535 /* Node contains a PSFS - Pointer to Structure Feature Set */
536 /* choice = Feature Set Id  - each "session" is a new feature set */
537 
538 typedef void (LIBCALLBACK *PColor3DFunc)(ColorPropPtr pcpThis, Uint1  PNTR pIndex);
539 
540 typedef void (LIBCALLBACK *PStrFeatFunc)(Pointer PNTR ppCUserData,
541 				         UserObjectPtr PNTR ppASNUserObj);
542 
543 /*  New uses nothing, returns NEW pointer value in pCUserData */
544 /*  Free frees what is passed in ppCUserData */
545 /*  ToC  uses ppASNUserObj, allocates anc copies, creating NEW pointer
546     in ppCUserData  - does the allocation using the New fn. if necessary */
547 /*  ToASN uses ppCUserData, returns NEW pointer
548     in pASNUserObj  - does the allocation of the UserData  */
549 /*  ToASN is automatically used upon writing to stream. - its object is Free-ed */
550 /*  with UserObjectFree(*ppASNUserObj) */
551 
552 /* if the feature type has registered functions, it is automatically   */
553 /* appended as a C structure on each appropriate node, and the ASN.1   */
554 /* is deleted.  When a call is made to save the Biostruc, it is        */
555 /* reconstructed, and the features are reconstructed from the feature  */
556 /* registry.  Afterward, the feature ASN.1 structures are freed.       */
557 
558 typedef ValNodePtr PVNSFF;  /* linked list of SFF */
559 /* choice = feature type code */
560 
561 typedef struct Nlm_sff
562     { /* structure feature functions */
563       PStrFeatFunc pFeatNewFn;
564       PStrFeatFunc pFeatFreeFn;
565       PStrFeatFunc pFeatToASNFn;
566       PStrFeatFunc pFeatToCFn;
567     }SFF, *PSFF;
568 
569 typedef struct Nlm_sfd
570 {
571   struct Nlm_sfd PNTR next;
572   PDNSFS pdnsfsSet;
573   Int4 iId;
574   Int4 iType;
575   CharPtr pcName;
576   Int2 iColor;  /* table integer index */
577   Int2 iRender;  /* render code from spec */
578   Byte bPFBtype;  /* type of node feature applies to */
579   Pointer pData; /* transform, camera, script, align in ASN.1 format  */
580   BiostrucFeaturePtr pbsfFeat; /* stub for ASN.1 used only for write */
581 }SFD,  *PSFD;
582 
583 typedef struct Nlm_sfs
584 {
585   Int4 iId;
586   PDNSFS pdnsfsSet;
587   Boolean SetisOn;
588   CharPtr pcName;
589   PSFD   psfdFeats;
590   ValNodePtr pvnDescr;
591   BiostrucFeatureSetPtr pbsfsFeatSet;  /* ASN.1 stub only for write */
592 }SFS,  *PSFS;
593 
594 
595 /************************/
596 /* Model Structure Data */
597 /************************/
598 typedef struct Nlm_msd
599 {
600   /* flag block */
601   PFB pfbParent;
602   Byte bMe;
603   Byte bWhat;
604   Byte bUpdate;
605   Byte bReserved;
606   Int4Ptr pI4vFeatID;
607   PointerPtr ppvFeatData;
608   Int2 iNumFeats;
609 #ifdef BIG_CODE
610   Byte bReserved1;  /*  */
611   Byte bUser1;
612   Int2 i2Reserved;
613   Int2 i2User;
614 #endif
615   /* bookkeeping block */
616   Byte bVisible; /* can it be seen? */
617   Byte bMaster; /* am I a master struct? */
618   Byte bAligned; /* master: how many slaves? */
619   BytePtr pbAligned;  /* slave: pointer to master bAligned */
620   PDNMS pdnmsLink;
621   CharPtr pcSName; /* the "retrieval" string */
622   Int2 iType; /* encodes pcSName as net id or filename for retrieve */
623   BiostrucPtr pbsBS;  /* the ASN.1 Biostruc is kept here, usually */
624   /* "header" with {id, desc, history} only */
625   /* but during write operations it is to be */
626   /* fully reconstructed. */
627   ResidueGraphPtr pDictLocal;  /* the local ASN.1 dictionary */
628   /* make this into a linked-list of dictionaries with id's */
629   BiomolDescrPtr pGraphDescr;  /* The chemical graph ASN.1 descr (ValNode) */
630   CharPtr pcPDBName;  /* from ASN.1 Biostruc descr field */
631   Int4 iMMDBid;  /* MMDB unique number */
632   CharPtr pcChemName; /* from ASN.1 chem graph descr field */
633   CharPtr pcPdbClass;
634   CharPtr pcPdbSource;
635   Int2 iModels;  /* Number of Models present */
636   Int2 iActiveModel; /* Index of Active Model */
637   Int2 iFeatures;
638   Int2 iPDBType;  /* enum from ASN.1 */
639   Int4 iMolCount; /* number of molecules */
640   Int4 iObjCount; /* number of objects */
641   Int4 iDensCount; /* number of densities */
642   Int4 iIMBCount; /* number of inter-molecule bonds */
643   Int4 iHashChange; /* iModels+iFeatures+iObjCount+iDensCount + #ALD's */
644   /* data block */
645   Int2 iMimeType;
646   PDNML pdnmlModels; /* contains PMLD with Models that are */
647   /*   PDNSF pdnsfFeatures; */  /*  BiostrucFeatureSetPtrs */
648   /* moved to psastrucAlignment */
649   PDNSFS pdnsfsHead;  /* the feature registry for this structure */
650   PDNMM pdnmmHead; /* the list of molecules (children) */
651   PVNMB pvnmbIMBHead;  /* Inter-molecule bonds in structure (children) */
652   PVNMO pvnmoHead; /* the list of model objects */
653   PVNMD pvnmdHead; /* the list of model densities */
654   FloatLoPtr PNTR ppflBoundBox; /* matrix 2x3 with max & min XYZs */
655   /*  When needed, Allocated with:  ppflBoundBox = FLMatrix(0,2,0,3); */
656   FloatLoPtr PNTR ppflRotate; /* matrix 3x3 with rotations for structure */
657   FloatLoPtr pflTranslate; /* 3 - vector with translations for structure */
658   PDNMS pdnmsSlaves;  /* slave structures in multiple alignments */
659   BiostrucAnnotSetPtr psaStrucAlignment;
660   VoidPtr pGlobalPARS; /* will hold pointer to default "global" PARS for this structure */
661   ValNodePtr pdnSlaveToMasterTransforms; /* store transformation for slave onto master */
662 } MSD,  *PMSD;
663 
664 
665 /***********************/
666 /* Model Molecule Data */
667 /***********************/
668 typedef struct Nlm_mmd
669 {
670   /* flag block */
671   PFB pfbParent;
672   Byte bMe;
673   Byte bWhat;
674   Byte bUpdate;
675   Byte bReserved;
676   Int4Ptr pI4vFeatID;
677   PointerPtr ppvFeatData;
678   Int2 iNumFeats;
679 #ifdef BIG_CODE
680   Byte bReserved1;  /*  */
681   Byte bUser1;
682   Int2 i2Reserved;
683   Int2 i2User;
684 #endif
685   /* bookkeeping block */
686   Byte bVisible;  /* to control show/off on MM level -- Yanli  */
687   PDNMM pdnmmLink;
688   ValNodePtr pMolDescr; /* the ASN.1 molecule descr */
689   ValNodePtr pSeqId;
690   CharPtr pcMolName; /* from ASN.1 "chain" descr field */
691   Int4 iChainId;
692   Int4 iGi;
693   Int4 iResCount; /* number of graphs */
694   Int4 iIRBCount; /* number of inter-res bonds */
695   CharPtr pcSeqId;
696   CharPtr pcSequence;
697   PDNMG pdnmgStartSelect, pdnmgEndSelect;  /* used to select a range of residues in the molecule.  lyg */
698   Int4 iTargetRow; /* corresponding row in the original ASN1 alignment */
699   /* data block */
700   PDNMG pdnmgHead;  /* the list of model graphs (children)  */
701   PVNMB pvnmbIRBHead;  /* Inter-residue bonds in molecule (children) */
702   FloatLoPtr PNTR ppflBoundBox; /* matrix 2x3 with max & min XYZs */
703   ValNodePtr pvnContainedBy;
704 } MMD, *PMMD;
705 
706 
707 /********************/
708 /* Model Graph Data */
709 /********************/
710 typedef struct Nlm_mgd
711 {
712   /* flag block */
713   PFB pfbParent;
714   Byte bMe;
715   Byte bWhat;
716   Byte bUpdate;
717   Byte bReserved;
718  	Int4Ptr pI4vFeatID;
719   PointerPtr ppvFeatData;
720   Int2 iNumFeats;
721 #ifdef BIG_CODE
722   Byte bReserved1;  /*  */
723   Byte bUser1;
724   Int2 i2Reserved;
725   Int2 i2User;
726 #endif
727   /* bookkeeping block */
728   Byte bVisible;     /* control display at residue level */
729   Byte bHighlighted;
730   Byte bNCBISecStru;
731   Byte bPDBSecStru;
732   PDNMG pdnmgLink;
733   Int2 iDomain;   /* NCBI assigned domain number */
734   CharPtr pcGraphName;  /* PDB 3-letter code */
735   CharPtr pcGraphNum; /* the PDB numbering string e.g . 38A */
736   Int4 iIDict;  /* index into dictionary */
737   CharPtr pcIUPAC; /* IUPAC name X = invalid graph code */
738   CharPtr pcNCBISS; /* pointer into the NCBI ss features string */
739   CharPtr pcPDBSS; /* pointer into the PDB ss features string */
740   CharPtr pcPDBComment; /* pointer into name of heterogen in dict */
741   Int4 iAtomCount;
742   Int4 iBondCount;
743   /* data block */
744   PVNMA pvnmaAHead; /* the atom list (children) */
745   PVNMB pvnmbBHead; /* the bond list (children) */
746   FloatLoPtr PNTR ppflBoundBox; /* matrix 2x3 with max & min XYZs */
747   ValNodePtr pvnContainedBy;
748   BytePtr pbMasterReserved;
749   /* will contain list of pointers to PARS structures - "global" has choice = 0,
750   * "special style" has choice >= 1 */
751   ValNodePtr pvnPARSList;
752 } MGD, *PMGD;
753 
754 
755 /*******************/
756 /* Model Atom Data */
757 /*******************/
758 typedef struct Nlm_mad
759 {
760   /* flag block */
761   PFB pfbParent;
762   Byte bMe;
763   Byte bWhat;
764   Byte bUpdate;
765   Byte bReserved;
766   Int4Ptr pI4vFeatID;
767   PointerPtr ppvFeatData;
768   Int2 iNumFeats;
769 #ifdef BIG_CODE
770   Byte bReserved1;  /*  */
771   Byte bUser1;
772   Int2 i2Reserved;
773   Int2 i2User;
774 #endif
775   /* bookkeeping block */
776   PVNMA pvnmaLink; /* element number is pvnmaLink->choice */
777   CharPtr pcAName; /* PDB name in the DICTIONARY!! */
778   Int2 iIndex; /* MMDB index */
779   /* data block */
780   ValNodePtr pvnBonds;
781   ValNodePtr pvnContainedBy;
782   PVNAL pvnalLocate;
783 }MAD,  *PMAD;
784 
785 
786 /**********************/
787 /* Atom Location Data */
788 /**********************/
789 typedef struct Nlm_ald
790 {
791   /* flag block */
792   PFB pfbParent;
793   Byte bMe;
794   Byte bWhat;
795   Byte bUpdate;
796   Byte bReserved;
797   Int4Ptr pI4vFeatID;
798   PointerPtr ppvFeatData;
799   Int2 iNumFeats;
800 #ifdef BIG_CODE
801   Byte bReserved1;  /*  */
802   Byte bUser1;
803   Int2 i2Reserved;
804   Int2 i2User;
805 #endif
806   struct  Nlm_ald PNTR next;
807   PVNAL pvnalLink; /* link to get model id */
808   Int4 iUniqueId;
809   Char  cAltConf; /* if = " " */
810   Int1 iCoordSet;  /* index from ASN.1 model coord set */
811   Int1 iFloatNo;
812   FloatLoPtr pflvData;
813   Pointer pGraphic;  /* pointer to graphic segment */
814 } ALD, *PALD;
815 
816 
817 /*  pflvData is a vector containing...
818   its size is dependent on the amount of data
819 i.e. 3 = XYZ only
820      4 = XYZ + occupancy
821      5 = XYZ + occupancy + isotropic Temp
822     10 = XYZ + occupancy + anisotropic Temp
823 Indexed as follows...
824    [0]    X;
825    [1]    Y;
826    [2]    Z;
827    [3]    Occ;
828    [4]    B11;
829    [5]    B12;
830    [6]    B13;
831    [7]    B22;
832    [8]    B23;
833    [9]    B33;
834 */
835 
836 
837 /*******************/
838 /* Model Bond Data */
839 /*******************/
840 typedef struct Nlm_mbd
841 {
842   /* flag block */
843   PFB pfbParent;
844   Byte bMe;
845   Byte bWhat;
846   Byte bUpdate;
847   Byte bReserved;
848   Int4Ptr pI4vFeatID;
849   PointerPtr ppvFeatData;
850   Int2 iNumFeats;
851 #ifdef BIG_CODE
852   Byte bReserved1;  /*  */
853   Byte bUser1;
854   Int2 i2Reserved;
855   Int2 i2User;
856 #endif
857   /* bookkeeping block */
858   PVNMB pvnmbLink;  /*  ASN.1 defined types is in pvnmbLink->choice */
859   /* data block */
860   PMAD pmadFrom;
861   PMAD pmadTo;
862 }MBD,  *PMBD;
863 
864 
865 /*********************/
866 /* Model Object Data */
867 /*********************/
868 typedef struct Nlm_mod
869 {
870   /* flag block */
871   PFB pfbParent;
872   Byte bMe;
873   Byte bWhat;
874   Byte bUpdate;
875   Byte bReserved;
876   Int4Ptr pI4vFeatID;
877   PointerPtr ppvFeatData;
878   Int2 iNumFeats;
879 #ifdef BIG_CODE
880   Byte bReserved1;  /*  */
881   Byte bUser1;
882   Int2 i2Reserved;
883   Int2 i2User;
884 #endif
885   /* bookkeeping block */
886   PVNMO pvnmoLink;
887   ValNodePtr pvnContains;
888   struct  Nlm_mld PNTR pmldCoordSet;
889   Byte bVisible;   /* control object display to synchronize with its partner display -- Yanli  */
890   /* data block */
891   Int4  	   iCoordNo;
892   FloatLoPtrPtr ppflObject;  /* coordinate lists */
893   UcharPtr pucSwap;          /* same length as coord list */
894   Int4	   iTriNo;
895   Int4PtrPtr ppi4Triangles;  /* triangles list */
896   FloatLo flRadius;
897   Int2Ptr pi2vColor;  /* colors for each triangle */
898   /* cast a matrix Floating pt N x 3 for data */
899   /* length 0 for sphere */
900   /*        1 for cylinder */
901   /*        7 for brick */
902   /*        n for surface */
903 #ifdef VIEW_CODE
904   /* logic to pass surface as optimized t-mesh */
905   /* regardless of order of points */
906   /* can view surface as dots or as t-mesh */
907   /* display block */
908 #endif
909 }MOD,  *PMOD;
910 
911 
912 /**********************/
913 /* Model Density Data */
914 /**********************/
915 typedef struct Nlm_mdd
916 {
917   /* flag block */
918   PFB pfbParent;
919   Byte bMe;
920   Byte bWhat;
921   Byte bUpdate;
922   Byte bReserved;
923   Int4Ptr pI4vFeatID;
924   PointerPtr ppvFeatData;
925   Int2 iNumFeats;
926 #ifdef BIG_CODE
927   Byte bReserved1;  /*  */
928   Byte bUser1;
929   Int2 i2Reserved;
930   Int2 i2User;
931 #endif
932   /* bookkeeping block */
933   PVNMD pvnmdLink;
934   struct  Nlm_mld PNTR pmldCoordSet;
935   /* pointer to the ASN.1 data */
936   /* data block */
937   /* put the floating point Brick values into a matrix */
938   /* cast the density matrix into XYZ points in a n x 3 matrix */
939   /* make a connectivity matrix m x 2 of integer array indices */
940   /* cast the contents into a ValNode matrix containing PFB's */
941   ValNodePtr pvnContains;
942 #ifdef VIEW_CODE
943   /* display the Brick as lines */
944   /* display the intensity as dots or connected lines */
945   /* cast the intensity value into colors in an Int2 n-vector  */
946   /* cast the intensities into display layers - and Int2 n-vector */
947 
948   /* display block */
949 #endif
950 }MDD,  *PMDD;
951 
952 
953 /**********************/
954 /*Model Location Data */
955 /**********************/
956 /* these hold each coordset's data
957  * can be either atomic, object or density data
958  * if Atomic, there needs to be a vector of
959  * pointers to each and every ALD in the model
960  * This vector allows indexing features to atom locs
961  */
962 typedef struct Nlm_mld
963 {
964   /* tiny flag block */
965   PMSD    pmsdParent;  /* Parent Structure*/
966   struct  Nlm_mld PNTR next;
967   Byte    bSelected; /* for saving/conversion to other file formats */
968   Byte    bReserved;
969   Int2 iType;
970   Int2 iId;
971   CharPtr pcModelName;
972   CharPtr pcAltConf; /* A string of all AltConfs in model */
973   Int2 iNoCoordSet;  /* index from ASN.1 model coord set */
974   PointerPtr ppAsnOrder; /* vector containing all PALD's if atomic data */
975   PMOD pmodObject;  /* if model coord set is object */
976   PMDD pmddDensity;  /* if model coord set is density */
977   BiostrucModelPtr pbsmModel;
978 } MLD, *PMLD;
979 
980 
981 typedef BiostrucResidueGraphSetPtr PRGD;
982 typedef void (LIBCALLBACK * pNodeFunc) PROTO((PFB pfbThis,Int4 iModel, Int4 iIndex, Pointer ptr));
983 
984 /***********************/
985 /*       MMDBAPI       */
986 /* Function Prototypes */
987 /***********************/
988 
989 #undef NLM_EXTERN
990 #ifdef NLM_IMPORT
991 #define NLM_EXTERN NLM_IMPORT
992 #else
993 #define NLM_EXTERN extern
994 #endif
995 
996 #ifdef __cplusplus
997 extern "C" {
998 #endif
999 
1000 PMBD LIBCALL NewMBD(void);
1001 PMAD LIBCALL NewMAD(void);
1002 PMLD LIBCALL NewMLD(void);
1003 PALD LIBCALL NewALD(void);
1004 PMGD LIBCALL NewMGD(void);
1005 PMMD LIBCALL NewMMD(void);
1006 PMSD LIBCALL NewMSD(void);
1007 PMOD LIBCALL NewMOD(void);
1008 PMDD LIBCALL NewMDD(void);
1009 PSFF LIBCALL NewSFF PROTO((void));
1010 PSFD LIBCALL NewSFD PROTO((void));
1011 PSFS LIBCALL NewSFS PROTO((void));
1012 void LIBCALL FreeSFS PROTO((PSFS psfsThis));
1013 void LIBCALL FreeSFF PROTO((PSFF psffThis));
1014 void LIBCALL FreeSFD PROTO((PSFD psfdThis));void LIBCALL FreeMBD(PMBD pmbdThis);
1015 void LIBCALL FreeMAD(PMAD pmadThis);
1016 void LIBCALL FreeALD(PALD paldThis);
1017 void LIBCALL FreeMGD(PMGD pmgdThis);
1018 void LIBCALL FreeMMD(PMMD pmmdThis);
1019 void LIBCALL FreeMSD(PMSD pmsdThis);
1020 void LIBCALL FreeMOD(PMOD pmodThis);
1021 void LIBCALL FreeMDD(PMDD pmddThis);
1022 void LIBCALL FreeMLD(PMLD pmldThis);
1023 void LIBCALL FreeKeptModel(PMLD pmldThis);
1024 void LIBCALL FreeKeptFeature(BiostrucFeatureSetPtr pbsfsThis);
1025 PVNMB LIBCALL NewVNMB(PVNMB PNTR ppvnmbList,  Int2 choice);
1026 PVNMO LIBCALL NewVNMO(PVNMO PNTR ppvnmoList,  Int2 choice);
1027 PVNMD LIBCALL NewVNMD(PVNMD PNTR ppvnmdList,  Int2 choice);
1028 PVNMA LIBCALL NewVNMA(PVNMA PNTR ppvnmaList,  Int2 choice);
1029 PVNAL LIBCALL NewVNAL(PVNAL PNTR ppvnalList, Int2 choice);
1030 PDNMG LIBCALL NewDNMG(PDNMG PNTR ppdnmgList,  Int2 choice);
1031 PDNMM LIBCALL NewDNMM(PDNMM PNTR ppdnmmList,  Int2 choice);
1032 PDNMS LIBCALL NewDNMS(PDNMS PNTR ppdnmsList,  Int2 choice);
1033 ValNodePtr LIBCALL FreeVNDataFn (ValNodePtr vnp,  pFreeFunc freefn);
1034 void LIBCALL FreeListVNAL(PVNAL pvnalList);
1035 void LIBCALL FreeListDNML(PDNML pdnmlList);
1036 
1037 PVNSFF LIBCALL NewVNSFF(PVNSFF PNTR ppvnsffList,  Int2 choice);
1038 PDNSFS LIBCALL NewDNSFS(PDNSFS PNTR ppdnsfsList,  Int2 choice);
1039 void LIBCALL FreeListDNSFS(PDNSFS pdnsfsList);
1040 void LIBCALL FreeListVNSFF(PVNSFF pvnsffList);
1041 
1042 void LIBCALL FreeListDNSF(PDNSF pdnsfList);
1043 void LIBCALL FreeListVNMB(PVNMB pvnmbList);
1044 void LIBCALL FreeListVNMO(PVNMO pvnmoList);
1045 void LIBCALL FreeListVNMD(PVNMD pvnmdList);
1046 void LIBCALL FreeListVNMA(PVNMA pvnmaList);
1047 PDNMG LIBCALL FreeDNMG(PDNMG pdnmgList, PDNMG pdnmgThis);
1048 void LIBCALL FreeListDNMG(PDNMG pdnmgList);
1049 PDNMM LIBCALL FreeDNMM(PDNMM pdnmmList,  PDNMM pdnmmThis);
1050 void LIBCALL FreeListDNMM(PDNMM pdnmmList);
1051 PDNMS LIBCALL FreeDNMS(PDNMS pdnmsList, PDNMS pdnmsThis);
1052 NLM_EXTERN void LIBCALL FreeListDNMS(PDNMS pdnmsList);
1053 void LIBCALL FreeAtomicModelAsnLists(AtomicCoordinatesPtr pacThis);
1054 NLM_EXTERN PRGD LIBCALL LoadDict(CharPtr pcDictName);
1055 
1056 PMAD LIBCALL AtomFromMMDBIndex(PDNMS pdnmsList, Int2 iStru, Int2 iMol, Int2 iGraph, Int4 iAtom);
1057 CharPtr MyType(PFB pfbThis);
1058 PMGD LIBCALL GraphFromMMDBIndex(PDNMS pdnmsList, Int2 iStru, Int2 iMol, Int2 iGraph );
1059 PMMD LIBCALL MolFromMMDBIndex(PDNMS pdnmsList, Int2 iStru, Int2 iMol);
1060 
1061 BiostrucPtr LIBCALL FetchBS(CharPtr pcFetch,  Int2 iType, Int4 mdlLvl,
1062 		Int4 maxModels, Byte bExtent);
1063 Boolean LIBCALL AssignSurfaceContents(PDNMS pdnmsList, Int2 iModel, PFB pfbThis, ChemGraphPntrsPtr pcgpContents);
1064 void LIBCALL FreeSurfaceModelAsnList(SurfaceCoordinatesPtr pscThis);
1065 Boolean LIBCALL FillSurface(SurfaceCoordinatesPtr pscThis, PMOD pmodThis);
1066 Int2 LIBCALL BiostrucModel2ModelStruc( BiostrucModelPtr pbsmThis, PDNMS pdnmsThis,
1067 		Int2 iChoice, Int2 iModelCount, Byte bExtent);
1068 ValNodePtr LIBCALL MakeChemGraphNodeList(PDNMS pdnmsThis,  ChemGraphPntrsPtr pcgpThis);
1069 
1070 ValNodePtr LIBCALL MakeRegionNodeList(PDNMS pdnmsThis, RegionPntrsPtr prgpThis);
1071 void LIBCALL ResolveAlignChain(PDNMS pdnmsThis);
1072 Boolean LIBCALL SetNodeFeatureData(PFB pfbThis, PSFD  psfdThis);
1073 
1074 /***************** modified 4/26/99 KA to handle VAST chains **************/
1075 void LIBCALL InstallAlignedSlave(PDNMS pdnmsMaster, ChemGraphAlignmentPtr pcgaAlign,
1076 				 PSFD psfdThis, Boolean Chain, CharPtr SlaveChain);
1077 
1078 PSFD LIBCALL InstallStrucFeature(PDNMS pdnmsThis, PDNSFS pdnsfsThis, BiostrucFeaturePtr pbsfThis,
1079 				 Boolean Chain, CharPtr SlaveChain);
1080 
1081 Int2 LIBCALL BiostrucAddFeature(BiostrucFeatureSetPtr pbsfsThis, PDNMS pdnmsThis,
1082 				Boolean Chain, CharPtr SlaveChain);
1083 /*************************************************************************/
1084 
1085 PDNTRN LIBCALL NewDNTRN(PDNTRN PNTR ppdntrnList,  Int2 choice);
1086 void LIBCALL FreeDNTRN(PDNTRN pdntrnList);
1087 void LIBCALL TransformToDNTRN(PDNTRN PNTR pplist,  TransformPtr transform);
1088 void LIBCALLBACK DoApplyTransform(PFB pfbThis, Int4 iModel, Int4 iIndex, Pointer ptr);
1089 void LIBCALLBACK DoReverseTransform(PFB pfbThis, Int4 iModel, Int4 iIndex, Pointer ptr);
1090 BiostrucAnnotSetPtr LIBCALL  BiostrucAnnotSetGetByFid (BiostrucAnnotSetPtr basp, Int4 feature_id, Int4 feature_set_id);
1091 PDNMS LIBCALL FindLoadedBiostruc(CharPtr pcPDBID, Int4 iId);
1092 
1093 /***************** modified 4/26/99 KA to handle VAST chains **************/
1094 Boolean InstBSAnnotSet(BiostrucAnnotSetPtr pbsasThis, CharPtr JobID, Boolean Chain, CharPtr Path);
1095 
1096 /****** DZ: moved from mkbioseqB.c 4/27/99 KA to support PruneBiostruc ******/
1097 
1098 Boolean LIBCALL isBiopoly(Int4 molecule_id, MoleculeGraphPtr currentbp);
1099 Boolean LIBCALL isHet(Int4 molecule_id, MoleculeGraphPtr currenthet);
1100 
1101 /*************************************************************************/
1102 
1103 SeqAnnotPtr LIBCALL BiosToSeq (BiostrucAnnotSetPtr set, Boolean usePValue,
1104                                Char* pdbname_master, Char* pdbname_slave);
1105 SeqAnnotPtr LIBCALL BiostrToSeqAnnotSet (BiostrucAnnotSetPtr set,
1106                                Boolean usePValue, Char* pdbname_master);
1107 int LIBCALLBACK CompareScores(VoidPtr vp1, VoidPtr vp2);
1108 void LIBCALL VastTableSort(BiostrucFeatureSetPtr pbsfs,  Int2 iSort);
1109 SeqAnnotPtr LIBCALL fnPBSFtoPSA (BiostrucFeaturePtr pbsfSelected);
1110 
1111 Byte LIBCALL SetBondOrder(Byte bThis,  Int2 iType);
1112 NLM_EXTERN PDNMS LIBCALL Biostruc2Modelstruc(PDNMS PNTR ppdnmsList, BiostrucPtr pbsBS,
1113                      PRGD prgdDict, Byte  bExtent, Int2 iChoice,
1114                          CharPtr pcFetch, Int2 iType );
1115 Int2 LIBCALL TraverseAll( DValNodePtr pdnModel, Int4 iModel, Int4 iIndex,
1116 			  Pointer ptr, pNodeFunc pfnCallMe);
1117 AlternateConformationIdsPtr LIBCALL AlternateConformationIdsFree (AlternateConformationIdsPtr );
1118 
1119 /*  Function to retrieve Biostrucs from ASN.1 files  */
1120 NLM_EXTERN BiostrucPtr LIBCALL BiostrucAsnGet(AsnIoPtr aip, AsnTypePtr atp, Int4 mdlLvl, Int4 maxModels);
1121 
1122 NLM_EXTERN Boolean LIBCALL BiostrucAvail (void);
1123 
1124 #ifdef __cplusplus
1125 }
1126 #endif
1127 
1128 #undef NLM_EXTERN
1129 #ifdef NLM_EXPORT
1130 #define NLM_EXTERN NLM_EXPORT
1131 #else
1132 #define NLM_EXTERN
1133 #endif
1134 
1135 #endif
1136