learning new stuff from the book C interfaces and Implementation techniques for creating re-usable software