http://www.lysator.liu.se/~jb