in contrib/champ/champ.c [4532:4720]
int ChampAtomToString(CChamp *I,int index,char *buf)
{
/* first, determine whether this is a trivial or block atom */
int c;
int mask;
int a;
int trivial=true;
ListAtom *at;
buf[0]=0;
if(index) {
at=I->Atom + index;
/* the following are non-trivial */
trivial = trivial && (!at->neg_flag) && (!at->hydro_flag);
trivial = trivial && !(at->charge&(cH_Cation|cH_Dication|
cH_Anion|cH_Dianion|
cH_Trication|cH_Trianion|
cH_Tetcation|cH_Tetanion|
cH_Pentcation|cH_Pentanion
));
trivial = trivial && !(at->cycle|at->valence|at->degree);
trivial = trivial && !(at->class&cH_Aliphatic);
trivial = trivial && !((at->atom!=cH_Any) &&
at->atom&( cH_Na | cH_K | cH_Ca | cH_Mg |
cH_Zn | cH_Fe | cH_Cu | cH_Se |
cH_A | cH_E | cH_G | cH_J |
cH_L | cH_M | cH_Q | cH_R |
cH_T | cH_X | cH_Z ));
trivial = trivial && (at->stereo==0);
if(trivial&&(at->atom!=cH_Any)) {
/* check number of atoms represented */
c = 0;
mask = 1;
for(a=0;a<32;a++) {
if(mask&at->atom) {
c++;
if(c>1) {
trivial=false;
break;
}
}
mask=mask*2;
}
}
if(trivial) {
if(at->class&cH_Aromatic) {
switch(at->atom) {
case cH_C: buf[0]='c'; buf[1]=0; break;
case cH_N: buf[0]='n'; buf[1]=0; break;
case cH_O: buf[0]='o'; buf[1]=0; break;
case cH_S: buf[0]='s'; buf[1]=0; break;
default:
trivial=false; break;
}
} else {
switch(at->atom) {
case cH_Any: buf[0]='*'; buf[1]=0; break;
case cH_NotH: buf[0]='?'; buf[1]=0; break;
case cH_B: buf[0]='B'; buf[1]=0; break;
case cH_C: buf[0]='C'; buf[1]=0; break;
case cH_N: buf[0]='N'; buf[1]=0; break;
case cH_O: buf[0]='O'; buf[1]=0; break;
/* case cH_H: buf[0]='H'; buf[1]=0; break;*/
case cH_H: strcpy(buf,"[H]"); break;
case cH_S: buf[0]='S'; buf[1]=0; break;
case cH_P: buf[0]='P'; buf[1]=0; break;
case cH_F: buf[0]='F'; buf[1]=0; break;
case cH_Cl: buf[0]='C'; buf[1]='l'; buf[2]=0; break;
case cH_Br: buf[0]='B'; buf[1]='r'; buf[2]=0; break;
case cH_I: buf[0]='I'; buf[1]=0; break;
default:
trivial = false; break;
}
}
}
if(!trivial) {
strcat(buf,"[");
if(at->atom==cH_Sym) {
strcat(buf,at->symbol);
} else {
switch(at->atom) {
case cH_Any: strcat(buf,"*"); break;
case cH_NotH: strcat(buf,"?"); break;
case cH_B: strcat(buf,"B"); break;
case cH_C: strcat(buf,"C"); break;
case cH_N: strcat(buf,"N"); break;
case cH_O: strcat(buf,"O"); break;
case cH_H: strcat(buf,"H"); break;
case cH_S: strcat(buf,"S"); break;
case cH_P: strcat(buf,"P"); break;
case cH_F: strcat(buf,"F"); break;
case cH_Cl: strcat(buf,"Cl"); break;
case cH_Br: strcat(buf,"Br"); break;
case cH_I: strcat(buf,"I"); break;
case cH_Na: strcat(buf,"Na"); break;
case cH_K: strcat(buf,"K"); break;
case cH_Ca: strcat(buf,"Ca"); break;
case cH_Mg: strcat(buf,"Mg"); break;
case cH_Fe: strcat(buf,"Fe"); break;
case cH_Zn: strcat(buf,"Zn"); break;
case cH_Cu: strcat(buf,"Cu"); break;
case cH_Se: strcat(buf,"Se"); break;
case cH_A: strcat(buf,"A"); break;
case cH_E: strcat(buf,"E"); break;
case cH_G: strcat(buf,"G"); break;
case cH_J: strcat(buf,"J"); break;
case cH_L: strcat(buf,"L"); break;
case cH_M: strcat(buf,"M"); break;
case cH_Q: strcat(buf,"Q"); break;
case cH_R: strcat(buf,"R"); break;
case cH_T: strcat(buf,"T"); break;
case cH_X: strcat(buf,"X"); break;
case cH_Z: strcat(buf,"Z"); break;
default: sprintf(buf,"%x",at->atom); break;
}
}
switch(at->stereo) {
case cH_Anticlock:
strcat(buf,"@");
break;
case cH_Clockwise:
strcat(buf,"@@");
break;
}
if(at->imp_hydro) {
switch(at->imp_hydro) {
case 0:
break;
case 1:
strcat(buf,"H");
break;
case 2:
strcat(buf,"H2");
break;
case 3:
strcat(buf,"H3");
break;
case 4:
strcat(buf,"H4");
break;
}
}
if(at->charge) {
switch(at->charge) {
case cH_Cation:
strcat(buf,"+");
break;
case cH_Anion:
strcat(buf,"-");
break;
case cH_Dication:
strcat(buf,"++");
break;
case cH_Dianion:
strcat(buf,"--");
break;
case cH_Trication:
strcat(buf,"+3");
break;
case cH_Trianion:
strcat(buf,"-3");
break;
case cH_Tetcation:
strcat(buf,"+4");
break;
case cH_Tetanion:
strcat(buf,"-4");
break;
case cH_Pentcation:
strcat(buf,"+5");
break;
case cH_Pentanion:
strcat(buf,"-5");
break;
}
}
strcat(buf,"]");
}
} else
buf[0]=0;
return(strlen(buf));
}