| 
      babel-1.6
      | 
     
    
     | 
Makefile, 
README.1ST, 
addh.c, 
addh2.c, 
aromatic.c, 
assbnd.c, 
asstypes.c, 
babel.h, 
bblmacs.h, 
bblmast.h, 
bbltyp.h, 
block.c, 
bndord.c, 
bo.c, 
buildct.c, 
combine.c, 
convert.c, 
delatms.c, 
delh2o.c, 
element.lis, 
filesrch.c, 
fileutil.c, 
gastchg.c, 
gauss.hdr, 
htoend.c, 
int2cart.c, 
intcart.c, 
menus.c, 
miniums.c, 
molwt.c, 
new.lis, 
nodummy.c, 
orient.c, 
precip.c, 
printbad.c, 
progress.c, 
psgvb.hdr, 
quanta.lis, 
rdalch.c, 
rdampout.c, 
rdbalst.c, 
rdbgf.c, 
rdboogie.c, 
rdc3d.c, 
rdcacao.c, 
rdcadpac.c, 
rdcharmm.c, 
rdcsd.c, 
rddock.c, 
rddpdb.c, 
rdelmnts.c, 
rdfdat.c, 
rdfeat.c, 
rdfract.c, 
rdg96.c, 
rdgamout.c, 
rdgauout.c, 
rdgzmat.c, 
rdhin.c, 
rdinsite.c, 
rdint.c, 
rdirc.c, 
rdisis.c, 
rdm3d.c, 
rdmacmod.c, 
rdmacmol.c, 
rdmdl.c, 
rdmicro.c, 
rdmm2.c, 
rdmm2in.c, 
rdmm3.c, 
rdmolen.c, 
rdmopac.c, 
rdmopcrt.c, 
rdpcmod.c, 
rdpdb.c, 
rdprep.c, 
rdpsgout.c, 
rdpsgvin.c, 
rdquanta.c, 
rdschak.c, 
rdshelx.c, 
rdsmiles.c, 
rdspart.c, 
rdspmm.c, 
rdspsemi.c, 
rdsybmol.c, 
rdsybyl.c, 
rdtypes.c, 
rdunichm.c, 
rdwiz.c, 
rdxed.c, 
rdxyz.c, 
renum.c, 
report.c, 
rings.c, 
ringutil.c, 
sets.c, 
smilesto.c, 
spline.c, 
strngutl.c, 
tokenst.c, 
tosmiles.c, 
tree.c, 
typbybo.c, 
types.lis, 
umslist.c, 
utils.c, 
vectors.c, 
wralch.c, 
wrbalst.c, 
wrbgf.c, 
wrbmin.c, 
wrbox.c, 
wrc3d.c, 
wrcacao.c, 
wrcache.c, 
wrcacint.c, 
wrchdrw.c, 
wrcontmp.c, 
wrcsr.c, 
wrcssr.c, 
wrdock.c, 
wrdpdb.c, 
wrfeat.c, 
wrfh.c, 
wrg96.c, 
wrgamess.c, 
wrgau.c, 
wrgaucrt.c, 
wrhin.c, 
wricon.c, 
wrint.c, 
wrisis.c, 
wrm3d.c, 
wrmaccs.c, 
wrmacmod.c, 
wrmcmol.c, 
wrmdl.c, 
wrmicro.c, 
wrmimic.c, 
wrmiv.c, 
wrmm2.c, 
wrmm3.c, 
wrmopac.c, 
wrpcmod.c, 
wrpdb.c, 
wrpsgv.c, 
wrpsgvz.c, 
wrsmiles.c, 
wrspart.c, 
wrsybmol.c, 
wrsybyl.c, 
wrtinker.c, 
wrtorlst.c, 
wrunichm.c, 
wrwiz.c, 
wrxed.c, 
wrxyz.c
      | 
     
    
   | 
  
 
   | 
  
/*****
  This file is part of the Babel Program
Copyright (C) 1992-96 W. Patrick Walters and Matthew T. Stahl 
All Rights Reserved 
All Rights Reserved 
All Rights Reserved 
All Rights Reserved 
  
  For more information please contact :
  
  babel@mercury.aichem.arizona.edu
  --------------------------------------------------------------------------------
  
  FILE : tokenst.c
  AUTHOR(S) : Pat Walters
  DATE : 10-92
  PURPOSE : routines to determine the number of tokens in a string
  from Turbo Algorithms
  by Keith Weiskamp
  Namir Shammas
  Ron Pronk
  
  ******/
#include "bbltyp.h"
int 
  found_token(char *strng, char *delimstr, int zindex)
{
  if (zindex > 0)
    return (((strchr(delimstr, strng[zindex-1])) != NULL) &&
	    ((strchr(delimstr, strng[zindex])) == NULL));
  else
    return 0;
}
int 
  count_tokens(char *tokens, char *delimstr)
{
  int i, count, strlength;
  int all_tokens, no_tokens, is_token;
  char *tempstr;
  
  if (tokens[0] == '\0')
    return 0;
  if (delimstr[0] == '\0')
    strcpy(delimstr," ");
  tempstr = (char *)malloc(strlen(tokens) + 2);
  tempstr[0] = delimstr[0];
  tempstr[1] = '\0';
  strcat(tempstr,tokens);
  strlength = strlen(tempstr);
  all_tokens = 1;
  no_tokens = 1;
  i = 0;
  while ((i < strlength) && (all_tokens || no_tokens))
  {
    is_token = ((strchr(delimstr, tempstr[i]) != NULL));
    no_tokens = ((!is_token) && no_tokens);
    all_tokens = (is_token && all_tokens);
    i++;
  }
  if (all_tokens || no_tokens)
  {
    if (tempstr) free(tempstr);
    if (no_tokens)
      return 1;
    if (all_tokens)
      return 0;
  }
  count = 0;
  for (i = 0; i  0))
  {
    if (found_token(tempstr,delimstr,i)) n --;
    if (n > 0) i++;
  }
  if ( i >= strlength)
  {
    if (tempstr) free(tempstr);
    return NULL;
  }
  else
  {
    ptr = i;
    while ((i < strlength) && (strchr(delimstr, tempstr[i]) == NULL))
      i++;
    tempstr = tempstr + ptr;
    tempstr[i - ptr] = '\0';
    return tempstr;
  }
}
void get_token(char *target, char *source, char *delimstr, int tokenindex)
{
  int i,n,strlength,ptr;
  char ch;
  char *tempstr, *top;
  
  if (tokenindex < 1) tokenindex = 1;
  if (delimstr[0] == '\0') strcpy(delimstr, " ");
  ch = delimstr[0];
  tempstr = (char *)malloc(strlen(source) + 3);
  if (!tempstr) 
  {
    printf("UNABLE TO ALLOCATE MEMORY");
    exit(1);
  }	  
  top = tempstr;
  tempstr[0] = ch;
  tempstr[1] = '\0';
  strcat(tempstr, source);
  strlength = strlen(tempstr);
  tempstr[strlength] = ch;
  tempstr[++strlength] = '\0';
  n = tokenindex;
  i = 1;
  while ((i < strlength) && (n > 0))
  {
    if (found_token(tempstr,delimstr,i)) n --;
    if (n > 0) i++;
  }
  if ( i >= strlength)
  {
    if (tempstr) free(tempstr);
    target[0] = '\0';
  }
  else
  {
    ptr = i;
    while ((i < strlength) && (strchr(delimstr, tempstr[i]) == NULL))
      i++;
    tempstr = tempstr + ptr;
    tempstr[i - ptr] = '\0';
    strcpy(target,tempstr);
  }
  free(top);
}
char *trim_spaces(char *string)
{
  int length;
  length = strlen(string);
  if (length == 0)
    return string;
  while ((length > 0) && (string[0] == ' '))
  {
    string++;
    --length;
  }
  if (length > 0)
  {
    while ((length > 0) && (string[length-1] == ' '))
    {
      string[length-1] = '\0';
      --length;
    }
  }
  return(string);
}
   |