dt_Handle pattern, molecule, pathset;
  dt_Integer slen, pcount;
  dt_String str;

  /* Read SMARTS in. */
  pattern = dt_smartin(2, "Oa");

  /* Optimized for matches on typical molecules. */
  str = dt_smarts_opt(&slen, 2, "aO", 0);
  printf("The optimized SMARTS expression is %.*s.\n", slen, str);

  /* The aromatic oxygen pattern and hydroquinone have
    matching paths. */
  molecule = dt_smilin(12, "Oc1ccc(O)cc1");
  pathset = dt_match(pattern, molecule, 0);
  /* There are two oxygen-aromatic paths in hydroquinone. */
pcount = dt_count(pathset, TYP_PATH);
printf("There are %d oxygen-aromatic atom paths in hydroquinone.\n", pcount);

The optimized SMARTS expression is Oa.
There are 2 oxygen-aromatic atom paths in hydroquinone.