https://alandroidnet.com/related/c programming a modern approach