If you don't actually want or need the parallel behaviour of the multiple macros, it seems a bit overkill to start messing with home rolled semaphores just to get a "sub call". Why not just put your library routines in... erm... a library i.e. a DLL?
Cheers
Ian