home *** CD-ROM | disk | FTP | other *** search
/ Nebula 1 / Nebula One.iso / Educational / RasMol / Source / abstree.h < prev    next >
Encoding:
C/C++ Source or Header  |  1995-09-26  |  10.9 KB  |  297 lines

  1. /* abstree.h
  2.  * RasMol2 Molecular Graphics
  3.  * Roger Sayle, August 1995
  4.  * Version 2.6
  5.  */
  6.  
  7. #define OpCode(x) (((x)->type)&0x0f)
  8.  
  9. /* Operator Types */
  10. #define OpAnd            0x01
  11. #define OpOr             0x02
  12. #define OpNot            0x03
  13. #define OpEqual          0x04
  14. #define OpNotEq          0x05
  15. #define OpLess           0x06
  16. #define OpMore           0x07
  17. #define OpLessEq         0x08
  18. #define OpMoreEq         0x09
  19. #define OpConst          0x0a
  20. #define OpWithin         0x0b
  21. #define OpMember         0xac
  22.  
  23. #define OpLftProp        0x10
  24. #define OpLftVal         0x20
  25. #define OpRgtProp        0x40
  26. #define OpRgtVal         0x80
  27.  
  28. /* Property fields */
  29. #define PropIdent        1
  30. #define PropXCord        2
  31. #define PropYCord        3
  32. #define PropZCord        4
  33. #define PropTemp         5
  34. #define PropRad          6
  35. #define PropResId        7
  36. #define PropName         8
  37. #define PropChain        9
  38. #define PropResName      10
  39. #define PropSelect       11
  40. #define PropElemNo       12
  41. #define PropModel        13
  42.  
  43. #define PredAbsOrd(x)    ((x)-20)
  44. #define PredAbsChr(x)    ((x)+20)
  45.  
  46. #define PredAlpha        20
  47. #define PredAmino        21
  48. #define PredAT           22
  49. #define PredBonded       23
  50. #define PredCG           24
  51. #define PredCystine      25
  52. #define PredDNA          26
  53. #define PredHelix        27
  54. #define PredHetero       28
  55. #define PredHydrogen     29
  56. #define PredIon          30
  57. #define PredLigand       31
  58. #define PredMainChain    32
  59. #define PredNucleic      33
  60. #define PredProtein      34
  61. #define PredPurine       35
  62. #define PredPyrimidine   36
  63. #define PredRNA          37
  64. #define PredSelected     38 /* Unused! */
  65. #define PredSheet        39
  66. #define PredSidechain    40
  67. #define PredSolvent      41
  68. #define PredTurn         42
  69. #define PredWater     43
  70.  
  71. #define PredAcidic       44
  72. #define PredAcyclic      45
  73. #define PredAliphatic    46
  74. #define PredAromatic     47
  75. #define PredBasic        48
  76. #define PredBuried       49
  77. #define PredCharged      50
  78. #define PredCyclic       51
  79. #define PredHydrophobic  52
  80. #define PredLarge        53
  81. #define PredMedium       54
  82. #define PredNeutral      55
  83. #define PredPolar        56
  84. #define PredSmall        57
  85. #define PredSurface      58
  86.  
  87.  
  88.  
  89. #define SetSize     10
  90. typedef struct _AtomSet {
  91.     struct _AtomSet __far *next;
  92.     Atom __far *data[SetSize];
  93.         int count;
  94.         } AtomSet;
  95.         
  96. typedef union {
  97.     AtomSet __far *set;
  98.     struct _Expr *ptr;
  99.         Long limit;
  100.     int val;
  101.     } Branch;
  102.  
  103. typedef struct _Expr {
  104.     int type;
  105.         Branch rgt;
  106.         Branch lft;
  107.     } Expr;
  108.  
  109. /* CPK Colour Indices
  110.  *  0 Light Grey    1 Sky Blue      2 Red           3 Yellow
  111.  *  4 White         5 Pink          6 Golden Rod    7 Blue
  112.  *  8 Orange        9 Dark Grey    10 Brown        11 Purple
  113.  * 12 Deep Pink    13 Green        14 Fire Brick   15 Mid Green
  114.  */
  115.  
  116. #define MAXELEMNO  104
  117. typedef struct {
  118.            char symbol[2];
  119.            int covalrad;
  120.            int vdwrad;
  121.            int cpkcol;
  122.            char *name;
  123.         } ElemStruct;
  124.  
  125. /* Structures with Implicit Hydrogens */
  126. #define VDWCarbon    468
  127. #define VDWNitrogen  375
  128. #define VDWOxygen    350
  129. #define VDWSulphur   462
  130.  
  131. #ifdef ABSTREE
  132. ElemStruct Element[MAXELEMNO] =  {
  133.     { { ' ', ' ' }, 170, 360, 12, ""             },  /*   0 */
  134.     { { 'H', ' ' },  80, 275,  4, "HYDROGEN"     },  /*   1 */
  135.     { { 'H', 'e' }, 400, 550,  5, "HELIUM"       },  /*   2 */
  136.     { { 'L', 'i' }, 170, 305, 14, "LITHIUM"      },  /*   3 */
  137.     { { 'B', 'e' },  88, 157, 12, "BERYLLIUM"    },  /*   4 */
  138.     { { 'B', ' ' }, 208, 387, 13, "BORON"        },  /*   5 */
  139.     { { 'C', ' ' }, 180, 387,  0, "CARBON"       },  /*   6 */
  140.     { { 'N', ' ' }, 170, 350,  1, "NITROGEN"     },  /*   7 */
  141.     { { 'O', ' ' }, 170, 337,  2, "OXYGEN"       },  /*   8 */
  142.     { { 'F', ' ' }, 160, 325,  6, "FLUORINE"     },  /*   9 */
  143.     { { 'N', 'e' }, 280, 505, 12, "NEON"         },  /*  10 */
  144.     { { 'N', 'a' }, 243, 550,  7, "SODIUM"       },  /*  11 */
  145.     { { 'M', 'g' }, 275, 375, 15, "MAGNESIUM"    },  /*  12 */
  146.     { { 'A', 'l' }, 338, 375,  9, "ALUMINIUM"    },  /*  13 */
  147.     { { 'S', 'i' }, 300, 550,  6, "SILICON"      },  /*  14 */
  148.     { { 'P', ' ' }, 259, 470,  8, "PHOSPHORUS"   },  /*  15 */  /* 262? */
  149.     { { 'S', ' ' }, 255, 452,  3, "SULPHUR"      },  /*  16 */
  150.     { { 'C', 'l' }, 250, 437, 13, "CHLORINE"     },  /*  17 */
  151.     { { 'A', 'r' }, 392, 692, 12, "ARGON"        },  /*  18 */
  152.     { { 'K', ' ' }, 332, 597, 12, "POTASSIUM"    },  /*  19 */
  153.     { { 'C', 'a' }, 248, 487,  9, "CALCIUM"      },  /*  20 */
  154.     { { 'S', 'c' }, 360, 330, 12, "SCANDIUM"     },  /*  21 */
  155.     { { 'T', 'i' }, 368, 487,  9, "TITANIUM"     },  /*  22 */
  156.     { { 'V', ' ' }, 332, 265, 12, "VANADIUM"     },  /*  23 */
  157.     { { 'C', 'r' }, 338, 282,  9, "CHROMIUM"     },  /*  24 */
  158.     { { 'M', 'n' }, 338, 297,  9, "MANGANESE"    },  /*  25 */
  159.     { { 'F', 'e' }, 335, 487,  8, "IRON"         },  /*  26 */
  160.     { { 'C', 'o' }, 332, 282, 12, "COBALT"       },  /*  27 */
  161.     { { 'N', 'i' }, 375, 310, 10, "NICKEL"       },  /*  28 */
  162.     { { 'C', 'u' }, 380, 287, 10, "COPPER"       },  /*  29 */
  163.     { { 'Z', 'n' }, 362, 287, 10, "ZINC"         },  /*  30 */
  164.     { { 'G', 'a' }, 305, 387, 12, "GALLIUM"      },  /*  31 */
  165.     { { 'G', 'e' }, 292, 999, 12, "GERMANIUM"    },  /*  32 */  /* 1225? */
  166.     { { 'A', 's' }, 302, 207, 12, "ARSENIC"      },  /*  33 */
  167.     { { 'S', 'e' }, 305, 225, 12, "SELENIUM"     },  /*  34 */
  168.     { { 'B', 'r' }, 302, 437, 10, "BROMINE"      },  /*  35 */
  169.     { { 'K', 'r' }, 400, 475, 12, "KRYPTON"      },  /*  36 */
  170.     { { 'R', 'b' }, 368, 662, 12, "RUBIDIUM"     },  /*  37 */
  171.     { { 'S', 'r' }, 280, 505, 12, "STRONTIUM"    },  /*  38 */
  172.     { { 'Y', ' ' }, 445, 402, 12, "YTTRIUM"      },  /*  39 */
  173.     { { 'Z', 'r' }, 390, 355, 12, "ZIRCONIUM"    },  /*  40 */
  174.     { { 'N', 'b' }, 370, 332, 12, "NIOBIUM"      },  /*  41 */
  175.     { { 'M', 'o' }, 368, 437, 12, "MOLYBDENUM"   },  /*  42 */
  176.     { { 'T', 'c' }, 338, 450, 12, "TECHNETIUM"   },  /*  43 */
  177.     { { 'R', 'u' }, 350, 300, 12, "RUTHENIUM"    },  /*  44 */
  178.     { { 'R', 'h' }, 362, 305, 12, "RHODIUM"      },  /*  45 */
  179.     { { 'P', 'd' }, 375, 360, 12, "PALLADIUM"    },  /*  46 */
  180.     { { 'A', 'g' }, 398, 387,  9, "SILVER"       },  /*  47 */
  181.     { { 'C', 'd' }, 422, 437, 12, "CADMIUM"      },  /*  48 */
  182.     { { 'I', 'n' }, 408, 362, 12, "INDIUM"       },  /*  49 */
  183.     { { 'S', 'n' }, 365, 417, 12, "TIN",         },  /*  50 */
  184.     { { 'S', 'b' }, 365, 280, 12, "ANTIMONY"     },  /*  51 */
  185.     { { 'T', 'e' }, 368, 315, 12, "TELLURIUM"    },  /*  52 */
  186.     { { 'I', ' ' }, 350, 437, 11, "IODINE"       },  /*  53 */
  187.     { { 'X', 'e' }, 425, 525, 12, "XENON"        },  /*  54 */
  188.     { { 'C', 's' }, 418, 752, 12, "CAESIUM"      },  /*  55 */
  189.     { { 'B', 'a' }, 335, 602,  8, "BARIUM"       },  /*  56 */
  190.     { { 'L', 'a' }, 468, 457, 12, "LANTHANUM"    },  /*  57 */
  191.     { { 'C', 'e' }, 458, 465, 12, "CERIUM"       },  /*  58 */
  192.     { { 'P', 'r' }, 455, 405, 12, "PRASEODYMIUM" },  /*  59 */
  193.     { { 'N', 'd' }, 452, 447, 12, "NEODYMIUM"    },  /*  60 */
  194.     { { 'P', 'm' }, 450, 440, 12, "PROMETHIUM"   },  /*  61 */
  195.     { { 'S', 'm' }, 450, 435, 12, "SAMARIUM"     },  /*  62 */
  196.     { { 'E', 'u' }, 498, 490, 12, "EUROPIUM"     },  /*  63 */
  197.     { { 'G', 'd' }, 448, 422, 12, "GADOLINIUM"   },  /*  64 */
  198.     { { 'T', 'b' }, 440, 415, 12, "TERBIUM"      },  /*  65 */
  199.     { { 'D', 'y' }, 438, 407, 12, "DYSPROSIUM"   },  /*  66 */
  200.     { { 'H', 'o' }, 435, 402, 12, "HOLMIUM"      },  /*  67 */
  201.     { { 'E', 'r' }, 432, 397, 12, "ERBIUM"       },  /*  68 */
  202.     { { 'T', 'm' }, 430, 392, 12, "THULIUM"      },  /*  69 */
  203.     { { 'Y', 'b' }, 485, 385, 12, "YTTERBIUM"    },  /*  70 */
  204.     { { 'L', 'u' }, 430, 382, 12, "LUTETIUM"     },  /*  71 */
  205.     { { 'H', 'f' }, 392, 350, 12, "HAFNIUM"      },  /*  72 */
  206.     { { 'T', 'a' }, 358, 305, 12, "TANTALUM"     },  /*  73 */
  207.     { { 'W', ' ' }, 342, 315, 12, "TUNGSTEN"     },  /*  74 */
  208.     { { 'R', 'e' }, 338, 325, 12, "RHENIUM"      },  /*  75 */
  209.     { { 'O', 's' }, 342, 395, 12, "OSMIUM"       },  /*  76 */
  210.     { { 'I', 'r' }, 330, 305, 12, "IRIDIUM"      },  /*  77 */
  211.     { { 'P', 't' }, 375, 387, 12, "PLATINUM"     },  /*  78 */
  212.     { { 'A', 'u' }, 375, 362,  6, "GOLD"         },  /*  79 */
  213.     { { 'H', 'g' }, 425, 495, 12, "MERCURY"      },  /*  80 */
  214.     { { 'T', 'l' }, 388, 427, 12, "THALLIUM"     },  /*  81 */
  215.     { { 'P', 'b' }, 385, 540, 12, "LEAD"         },  /*  82 */
  216.     { { 'B', 'i' }, 385, 432, 12, "BISMUTH"      },  /*  83 */
  217.     { { 'P', 'o' }, 420, 302, 12, "POLONIUM"     },  /*  84 */
  218.     { { 'A', 't' }, 302, 280, 12, "ASTATINE"     },  /*  85 */
  219.     { { 'R', 'n' }, 475, 575, 12, "RADON"        },  /*  86 */
  220.     { { 'F', 'r' }, 450, 810, 12, "FRANCIUM"     },  /*  87 */
  221.     { { 'R', 'a' }, 358, 642, 12, "RADIUM"       },  /*  88 */
  222.     { { 'A', 'c' }, 295, 530, 12, "ACTINIUM"     },  /*  89 */
  223.     { { 'T', 'h' }, 255, 460, 12, "THORIUM"      },  /*  90 */
  224.     { { 'P', 'a' }, 222, 400, 12, "PROTACTINIUM" },  /*  91 */
  225.     { { 'U', ' ' }, 242, 437, 12, "URANIUM"      },  /*  92 */
  226.     { { 'N', 'p' }, 238, 427, 12, "NEPTUNIUM"    },  /*  93 */
  227.     { { 'P', 'u' }, 232, 417, 12, "PLUTONIUM"    },  /*  94 */
  228.     { { 'A', 'm' }, 230, 415, 12, "AMERICIUM"    },  /*  95 */
  229.     { { 'C', 'm' }, 228, 412, 12, "CURIUM"       },  /*  96 */
  230.     { { 'B', 'k' }, 225, 410, 12, "BERKELIUM"    },  /*  97 */
  231.     { { 'C', 'f' }, 222, 407, 12, "CALIFORNIUM"  },  /*  98 */
  232.     { { 'E', 's' }, 220, 405, 12, "EINSTEINIUM"  },  /*  99 */
  233.     { { 'F', 'm' }, 218, 402, 12, "FERMIUM"      },  /* 100 */
  234.     { { 'M', 'd' }, 215, 400, 12, "MENDELEVIUM"  },  /* 101 */
  235.     { { 'N', 'o' }, 212, 397, 12, "NOBELIUM"     },  /* 102 */
  236.     { { 'L', 'r' }, 210, 395, 12, "LAWRENCIUM"   }   /* 103 */ /* Lw? */
  237.         };
  238.  
  239.  
  240. Expr *QueryExpr;
  241. Chain __far *QChain;
  242. Group __far *QGroup;
  243. Atom __far *QAtom;
  244.  
  245. #else
  246. extern ElemStruct Element[MAXELEMNO];
  247.  
  248. extern Expr *QueryExpr;
  249. extern Chain __far *QChain;
  250. extern Group __far *QGroup;
  251. extern Atom __far *QAtom;
  252.  
  253. #ifdef FUNCPROTO
  254. Expr *AllocateNode();
  255. void DeAllocateExpr( Expr* );
  256. int EvaluateExpr( Expr* );
  257. int DefineSetExpr( char*, Expr* );
  258. Expr *LookUpSetExpr( char* );
  259. AtomSet __far *BuildAtomSet( Expr* );
  260. void DeleteAtomSet( AtomSet __far* );
  261. Expr *LookUpElement( char* );
  262.  
  263. int ElemVDWRadius( int );
  264. int ParsePrimitiveExpr( char** );
  265. int GetElemNumber( Group __far*, Atom __far* );
  266. void FormatLabel( Chain __far*, Group __far*, Atom __far*, char*, char* );
  267. void InitialiseAbstree();
  268. void ResetSymbolTable();
  269.  
  270. double CalcTorsion( Atom __far*, Atom __far*, Atom __far*, Atom __far* );
  271. double CalcAngle( Atom __far*, Atom __far*, Atom __far* );
  272. double CalcDistance( Atom __far*, Atom __far* );
  273.  
  274. #else /* non-ANSI C compiler */
  275. Expr *AllocateNode();
  276. void DeAllocateExpr();
  277. int EvaluateExpr();
  278. int DefineSetExpr();
  279. Expr *LookUpSetExpr();
  280. AtomSet __far *BuildAtomSet();
  281. void DeleteAtomSet();
  282. Expr *LookUpElement();
  283.  
  284. int ElemVDWRadius();
  285. int ParsePrimitiveExpr();
  286. int GetElemNumber();
  287. void FormatLabel();
  288. void InitialiseAbstree();
  289. void ResetSymbolTable();
  290.  
  291. double CalcTorsion();
  292. double CalcAngle();
  293. double CalcDistance();
  294. #endif
  295. #endif
  296.  
  297.