/* abstree.h * RasMol2 Molecular Graphics * Roger Sayle, October 1994 * Version 2.5 */ #define OpCode(x) (((x)->type)&0x0f) /* Operator Types */ #define OpAnd 0x01 #define OpOr 0x02 #define OpNot 0x03 #define OpEqual 0x04 #define OpNotEq 0x05 #define OpLess 0x06 #define OpMore 0x07 #define OpLessEq 0x08 #define OpMoreEq 0x09 #define OpConst 0x0a #define OpWithin 0x0b #define OpMember 0xac #define OpLftProp 0x10 #define OpLftVal 0x20 #define OpRgtProp 0x40 #define OpRgtVal 0x80 /* Property fields */ #define PropIdent 1 #define PropXCord 2 #define PropYCord 3 #define PropZCord 4 #define PropTemp 5 #define PropRad 6 #define PropResId 7 #define PropName 8 #define PropChain 9 #define PropResName 10 #define PropSelect 11 #define PropElemNo 12 #define PredAbsOrd(x) ((x)-20) #define PredAbsChr(x) ((x)+20) #define PredAlpha 20 #define PredAmino 21 #define PredAT 22 #define PredBonded 23 #define PredCG 24 #define PredCystine 25 #define PredDNA 26 #define PredHelix 27 #define PredHetero 28 #define PredHydrogen 29 #define PredIon 30 #define PredLigand 31 #define PredMainChain 32 #define PredNucleic 33 #define PredProtein 34 #define PredPurine 35 #define PredPyrimidine 36 #define PredRNA 37 #define PredSelected 38 /* Unused! */ #define PredSheet 39 #define PredSidechain 40 #define PredSolvent 41 #define PredTurn 42 #define PredWater 43 #define PredAcidic 44 #define PredAcyclic 45 #define PredAliphatic 46 #define PredAromatic 47 #define PredBasic 48 #define PredBuried 49 #define PredCharged 50 #define PredCyclic 51 #define PredHydrophobic 52 #define PredLarge 53 #define PredMedium 54 #define PredNeutral 55 #define PredPolar 56 #define PredSmall 57 #define PredSurface 58 #define SetSize 10 typedef struct _AtomSet { struct _AtomSet __far *next; Atom __far *data[SetSize]; int count; } AtomSet; typedef union { AtomSet __far *set; struct _Expr *ptr; Long limit; int val; } Branch; typedef struct _Expr { int type; Branch rgt; Branch lft; } Expr; /* CPK Colour Indices * 0 Light Grey 1 Sky Blue 2 Red 3 Yellow * 4 White 5 Pink 6 Golden Rod 7 Blue * 8 Orange 9 Dark Grey 10 Brown 11 Purple * 12 Deep Pink 13 Green 14 Fire Brick 15 Mid Green */ #define MAXELEMNO 104 typedef struct { char symbol[2]; int covalrad; int vdwrad; int cpkcol; char *name; } ElemStruct; /* Structures with Implicit Hydrogens */ #define VDWCarbon 468 #define VDWNitrogen 375 #define VDWOxygen 350 #define VDWSulphur 462 #ifdef ABSTREE ElemStruct Element[MAXELEMNO] = { { { ' ', ' ' }, 170, 360, 12, "" }, /* 0 */ { { 'H', ' ' }, 80, 275, 4, "HYDROGEN" }, /* 1 */ { { 'H', 'e' }, 400, 550, 5, "HELIUM" }, /* 2 */ { { 'L', 'i' }, 170, 305, 14, "LITHIUM" }, /* 3 */ { { 'B', 'e' }, 88, 157, 12, "BERYLLIUM" }, /* 4 */ { { 'B', ' ' }, 205, 387, 13, "BORON" }, /* 5 */ { { 'C', ' ' }, 170, 387, 0, "CARBON" }, /* 6 */ { { 'N', ' ' }, 188, 350, 1, "NITROGEN" }, /* 7 */ { { 'O', ' ' }, 182, 337, 2, "OXYGEN" }, /* 8 */ { { 'F', ' ' }, 180, 325, 6, "FLUORINE" }, /* 9 */ { { 'N', 'e' }, 280, 505, 12, "NEON" }, /* 10 */ { { 'N', 'a' }, 243, 550, 7, "SODIUM" }, /* 11 */ { { 'M', 'g' }, 275, 375, 15, "MAGNESIUM" }, /* 12 */ { { 'A', 'l' }, 338, 375, 9, "ALUMINIUM" }, /* 13 */ { { 'S', 'i' }, 300, 550, 6, "SILICON" }, /* 14 */ { { 'P', ' ' }, 262, 470, 8, "PHOSPHORUS" }, /* 15 */ { { 'S', ' ' }, 255, 452, 3, "SULPHUR" }, /* 16 */ { { 'C', 'l' }, 248, 437, 13, "CHLORINE" }, /* 17 */ { { 'A', 'r' }, 392, 692, 12, "ARGON" }, /* 18 */ { { 'K', ' ' }, 332, 597, 12, "POTASSIUM" }, /* 19 */ { { 'C', 'a' }, 248, 487, 9, "CALCIUM" }, /* 20 */ { { 'S', 'c' }, 360, 330, 12, "SCANDIUM" }, /* 21 */ { { 'T', 'i' }, 368, 487, 9, "TITANIUM" }, /* 22 */ { { 'V', ' ' }, 332, 265, 12, "VANADIUM" }, /* 23 */ { { 'C', 'r' }, 338, 282, 9, "CHROMIUM" }, /* 24 */ { { 'M', 'n' }, 338, 297, 9, "MANGANESE" }, /* 25 */ { { 'F', 'e' }, 335, 487, 8, "IRON" }, /* 26 */ { { 'C', 'o' }, 332, 282, 12, "COBALT" }, /* 27 */ { { 'N', 'i' }, 375, 310, 10, "NICKEL" }, /* 28 */ { { 'C', 'u' }, 380, 287, 10, "COPPER" }, /* 29 */ { { 'Z', 'n' }, 362, 287, 10, "ZINC" }, /* 30 */ { { 'G', 'a' }, 305, 387, 12, "GALLIUM" }, /* 31 */ { { 'G', 'e' }, 292, 999, 12, "GERMANIUM" }, /* 32 */ /* 1225? */ { { 'A', 's' }, 302, 207, 12, "ARSENIC" }, /* 33 */ { { 'S', 'e' }, 305, 225, 12, "SELENIUM" }, /* 34 */ { { 'B', 'r' }, 302, 437, 10, "BROMINE" }, /* 35 */ { { 'K', 'r' }, 400, 475, 12, "KRYPTON" }, /* 36 */ { { 'R', 'b' }, 368, 662, 12, "RUBIDIUM" }, /* 37 */ { { 'S', 'r' }, 280, 505, 12, "STRONTIUM" }, /* 38 */ { { 'Y', ' ' }, 445, 402, 12, "YTTRIUM" }, /* 39 */ { { 'Z', 'r' }, 390, 355, 12, "ZIRCONIUM" }, /* 40 */ { { 'N', 'b' }, 370, 332, 12, "NIOBIUM" }, /* 41 */ { { 'M', 'o' }, 368, 437, 12, "MOLYBDENUM" }, /* 42 */ { { 'T', 'c' }, 338, 450, 12, "TECHNETIUM" }, /* 43 */ { { 'R', 'u' }, 350, 300, 12, "RUTHENIUM" }, /* 44 */ { { 'R', 'h' }, 362, 305, 12, "RHODIUM" }, /* 45 */ { { 'P', 'd' }, 375, 360, 12, "PALLADIUM" }, /* 46 */ { { 'A', 'g' }, 398, 387, 9, "SILVER" }, /* 47 */ { { 'C', 'd' }, 422, 437, 12, "CADMIUM" }, /* 48 */ { { 'I', 'n' }, 407, 362, 12, "INDIUM" }, /* 49 */ { { 'S', 'n' }, 365, 417, 12, "TIN", }, /* 50 */ { { 'S', 'b' }, 155, 280, 12, "ANTIMONY" }, /* 51 */ { { 'T', 'e' }, 175, 315, 12, "TELLURIUM" }, /* 52 */ { { 'I', ' ' }, 350, 437, 11, "IODINE" }, /* 53 */ { { 'X', 'e' }, 425, 525, 12, "XENON" }, /* 54 */ { { 'C', 's' }, 418, 752, 12, "CAESIUM" }, /* 55 */ { { 'B', 'a' }, 335, 602, 8, "BARIUM" }, /* 56 */ { { 'L', 'a' }, 255, 457, 12, "LANTHANUM" }, /* 57 */ { { 'C', 'e' }, 258, 465, 12, "CERIUM" }, /* 58 */ { { 'P', 'r' }, 225, 405, 12, "PRASEODYMIUM" }, /* 59 */ { { 'N', 'd' }, 248, 447, 12, "NEODYMIUM" }, /* 60 */ { { 'P', 'm' }, 245, 440, 12, "PROMETHIUM" }, /* 61 */ { { 'S', 'm' }, 240, 435, 12, "SAMARIUM" }, /* 62 */ { { 'E', 'u' }, 273, 490, 12, "EUROPIUM" }, /* 63 */ { { 'G', 'd' }, 235, 422, 12, "GADOLINIUM" }, /* 64 */ { { 'T', 'b' }, 230, 415, 12, "TERBIUM" }, /* 65 */ { { 'D', 'y' }, 228, 407, 12, "DYSPROSIUM" }, /* 66 */ { { 'H', 'o' }, 222, 402, 12, "HOLMIUM" }, /* 67 */ { { 'E', 'r' }, 220, 397, 12, "ERBIUM" }, /* 68 */ { { 'T', 'm' }, 218, 392, 12, "THULIUM" }, /* 69 */ { { 'Y', 'b' }, 215, 385, 12, "YTTERBIUM" }, /* 70 */ { { 'L', 'u' }, 212, 382, 12, "LUTETIUM" }, /* 71 */ { { 'H', 'f' }, 195, 350, 12, "HAFNIUM" }, /* 72 */ { { 'T', 'a' }, 170, 305, 12, "TANTALUM" }, /* 73 */ { { 'W', ' ' }, 175, 315, 12, "TUNGSTEN" }, /* 74 */ { { 'R', 'e' }, 180, 325, 12, "RHENIUM" }, /* 75 */ { { 'O', 's' }, 220, 395, 12, "OSMIUM" }, /* 76 */ { { 'I', 'r' }, 170, 305, 12, "IRIDIUM" }, /* 77 */ { { 'P', 't' }, 325, 387, 12, "PLATINUM" }, /* 78 */ { { 'A', 'u' }, 335, 362, 6, "GOLD" }, /* 79 */ { { 'H', 'g' }, 275, 495, 12, "MERCURY" }, /* 80 */ { { 'T', 'l' }, 238, 427, 12, "THALLIUM" }, /* 81 */ { { 'P', 'b' }, 300, 540, 12, "LEAD" }, /* 82 */ { { 'B', 'i' }, 240, 432, 12, "BISMUTH" }, /* 83 */ { { 'P', 'o' }, 168, 302, 12, "POLONIUM" }, /* 84 */ { { 'A', 't' }, 155, 280, 12, "ASTATINE" }, /* 85 */ { { 'R', 'n' }, 475, 575, 12, "RADON" }, /* 86 */ { { 'F', 'r' }, 450, 810, 12, "FRANCIUM" }, /* 87 */ { { 'R', 'a' }, 358, 642, 12, "RADIUM" }, /* 88 */ { { 'A', 'c' }, 295, 530, 12, "ACTINIUM" }, /* 89 */ { { 'T', 'h' }, 255, 460, 12, "THORIUM" }, /* 90 */ { { 'P', 'a' }, 222, 400, 12, "PROTACTINIUM" }, /* 91 */ { { 'U', ' ' }, 242, 437, 12, "URANIUM" }, /* 92 */ { { 'N', 'p' }, 238, 427, 12, "NEPTUNIUM" }, /* 93 */ { { 'P', 'u' }, 232, 417, 12, "PLUTONIUM" }, /* 94 */ { { 'A', 'm' }, 230, 415, 12, "AMERICIUM" }, /* 95 */ { { 'C', 'm' }, 228, 412, 12, "CURIUM" }, /* 96 */ { { 'B', 'k' }, 225, 410, 12, "BERKELIUM" }, /* 97 */ { { 'C', 'f' }, 222, 407, 12, "CALIFORNIUM" }, /* 98 */ { { 'E', 's' }, 220, 405, 12, "EINSTEINIUM" }, /* 99 */ { { 'F', 'm' }, 218, 402, 12, "FERMIUM" }, /* 100 */ { { 'M', 'd' }, 215, 400, 12, "MENDELEVIUM" }, /* 101 */ { { 'N', 'o' }, 212, 397, 12, "NOBELIUM" }, /* 102 */ { { 'L', 'r' }, 210, 395, 12, "LAWRENCIUM" } /* 103 */ /* Lw? */ }; Expr *QueryExpr; Chain __far *QChain; Group __far *QGroup; Atom __far *QAtom; #else extern ElemStruct Element[MAXELEMNO]; extern Expr *QueryExpr; extern Chain __far *QChain; extern Group __far *QGroup; extern Atom __far *QAtom; #ifdef FUNCPROTO Expr *AllocateNode(); void DeAllocateExpr( Expr* ); int EvaluateExpr( Expr* ); int DefineSetExpr( char*, Expr* ); Expr *LookUpSetExpr( char* ); AtomSet __far *BuildAtomSet( Expr* ); void DeleteAtomSet( AtomSet __far* ); Expr *LookUpElement( char* ); int ElemVDWRadius( int ); int GetElemNumber( Atom __far* ); int ParsePrimitiveExpr( char** ); void FormatLabel( Chain __far*, Group __far*, Atom __far*, char*, char* ); void InitialiseAbstree(); void ResetSymbolTable(); #else /* non-ANSI C compiler */ Expr *AllocateNode(); void DeAllocateExpr(); int EvaluateExpr(); int DefineSetExpr(); Expr *LookUpSetExpr(); AtomSet __far *BuildAtomSet(); void DeleteAtomSet(); Expr *LookUpElement(); int ElemVDWRadius(); int GetElemNumber(); int ParsePrimitiveExpr(); void FormatLabel(); void InitialiseAbstree(); void ResetSymbolTable(); #endif #endif