dt_Handle transform, container, molecule1, moleculeX;
  dt_String asmi;  
  dt_Integer slen;  

  /* Read SMIRKS in. */
  transform = dt_smirkin(25, "[O:1][H:2]>>[O-:1].[H+:2]");

  /* Put molecules in the sequence. */
  container = dt_alloc_seq();
  molecule1 = dt_smilin(1, "O");
  dt_append(container, molecule1);
  moleculeX = dt_smilin(12, "Oc1ccc(O)cc1");
  dt_append(container, moleculeX);
  /* The next item gives the first molecule. */
 
molecule1 = dt_next(container);
 
asmi = dt_arbsmiles(&alen, molecule1, 0);
   
printf("The molecule1 is %.*s.\n", alen, asmi);

 
/* The next item gives the second molecule */
 
moleculeX = dt_next(container);
 
asmi = dt_arbsmiles(&alen, moleculeX, 0);
   
printf("The moleculeX is %.*s.\n", alen, asmi);

 
/* The next item is the NULL object. */
 
moleculeX = dt_next(container);
 
if (NULL_OB == moleculeX)
   
printf("The NULL object is next.\n");

 
/* A reset and next operation gives the first molecule again. */
 
dt_reset(container);
 
moleculeX = dt_next(container);
 
if (moleculeX == molecule1)
   
printf("Reset is like rewind.\n");

The molecule1 is O.
The moleculeX is Oc1ccc(cc1)O.
The NULL object is next.
Reset is like rewind.