> IMHO the reason you struggle with include(d) files is because of the way
> you have structured your code.
Wrong.

It's because I was writing an app to parse ANYONE'S code, and
I have no way of knowing how structured THEIR code is. That's why it
becomes a struggle: because you can't envisage how they code. Further,
as this poll has shown, some people have nested (recursive) IncludeFiles,
which makes collating them all a difficult task. You parse the main source,
and get a list of included source files. Then you must parse those, which in
turn run the risk of including more. It becomes messy and difficult to get a
list like that, especially when you consider XIncludeFile and the fact that
IncludeFiles can be named from constants and so on. It's really a tough
thing to code: give it a try and you'll see.
> a more manageable technique is to put all your include statements at
> the top of the file
Depends on how you're using them. IncludeFiles are not just for definitions.
They can be anything -- even a single block of frequently-used code that
you wish to insert at any point, to save typing or pasting it in. Doing this
can keep your main source code small, and easier to navigate (a bit like
folding a procedure to keep it out of the way).