rewritten untested to Dans online2 recogniser (compiles)