library from "C Interfaces and Implementations" by David Hanson