Split up into many files
Check types in C land