CCL Home Page
Up Directory CCL abstree.h
/* 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

Modified: Tue Oct 25 16:00:00 1994 GMT
Page accessed 5498 times since Sat Apr 17 21:38:18 1999 GMT