newgeo
|
clear_screen.c,
filter_atom_type.c,
intgen.c,
newgeo.c,
newgeo.h,
newgeo.make,
read_geo.c,
read_mm2.c,
read_sybyl.c,
valid_atom.c,
write_geo.c,
write_mm2.c,
write_sybyl.c,
|
|
|
#include "utility.h"
int valid_atom(atom_name,atom_number,flag)
/*============================================================================*/
/* AUTHOR: John R. Hurst, Data Management, 072088
/* This routine either looks up the atom name provided to make sure that
/* it is valid, or if passed an atomic number, insures that the number is
/* valid. In either case, both the atomic number and the atom name are returned.
/*
/* CALLING SEQUENCE:
/*
/* CALL BY: int = valid_atom(atom_name,atom_number,flag);
/*
/* WHERE: Return value: 1 indicates successful completion
/* 0 indicates error
/*
/* atom_name is the address of a two character atom name
/* atom_number is the address of a longword.
/* flag is the value 1 (name is supplied) or 2 (number is
/* supplied).
/*
/* ON ENTRY: if flag is 1, atom_name contains the atom name to validate.
/* if flag is 2, atom_number contains the atomic number to
/* look up.
/*
/* ON EXIT: If successful, atom_name and atom_number contain valid
/* name and atomic number.
/*
/* ERROR CONDITIONS:
/* If an error is encountered, 0 is returned
/* LAST MODIFICATION: 11 JUNE 1991 MVG
/*============================================================================*/
char *atom_name;
int *atom_number;
int flag;
{
static char valid_atoms[][3] = /* list of valid atoms */
{
"H ", "He",
"Li","Be", "B ","C ","N ","O ","F ","Ne",
"Na","Mg", "Al","Si","P ","S ","Cl","Ar",
"K ","Ca","Sc","Ti","V ","Cr","Mn","Fe","Co",
"Ni","Cu","Zn","Ga","Ge","As","Se","Br","Kr",
"Rb","Sr","Y ","Zr","Nb","Mo","Tc","Ru","Rh",
"Pd","Ag","Cd","In","Sn","Sb","Te","I ","Xe",
"Cs","Ba","La",
"Ce","Pr","Nd","Pm","Sm","Eu","Gd","Tb","Dy","Ho","Er","Tm","Yb","Lu",
"Hf","Ta","W ","Re","Os","Ir",
"Pt","Au","Hg","Tl","Pb","Bi","Po","At","Rn",
"Fr","Ra","Ac",
"Th","Pa","U ","Np","Pu","Am","Bk","Cf","Es","Fm","Md","No","Lw"
};
static valid_atom_cnt = sizeof valid_atoms/sizeof valid_atoms[0];
int i; /* loop variable */
/* Check for atom name in list if flag is 1. */
if(flag == 1)
{
for(i=0 ; i < valid_atom_cnt; i++)
{
*atom_name = toupper(*atom_name);
*(atom_name+ 1) = tolower(*(atom_name+1));
if(strncmp(atom_name,valid_atoms[i],2) == 0)
{
*atom_number = i+1;
return(1);
}
}
return(0);
}
else
{
if(*atom_number < 1 || *atom_number >= valid_atom_cnt)
return(0);
strncpy(atom_name,valid_atoms[*atom_number-1],2);
return(1);
}
}
|