The macro should be correct and I can't give you any further help regarding this since I'm not on a Windows PC at the moment (and too lazy to reboot... FML)
Anyway, I thought I might clarify the while(0) thingie since some other people asked me about this on ICQ too, so here we go:
do {} while(x); executes once and then checks if x evaluates to true and if so, repeats again. Unlike a normal while loop where the condition is checked prior running the loop, so do {} while(0); executes the block of code inbetween exactly once. The reason why its in anyway although it does nothing special has two reasons:
1) It gives you a new scope, meaning that char *funct; is only visible within this block of code and can be redeclared later again by "calling" the macro again. Although this is not really needed in Lite-C which doesn't care about redeclaring variables, even with a different type, its still considered nice.
2) More interesting for Lite-C users is that it behaves like it was only a single execution of something, thus it allows you to use it in conditions where it would normally need a extra scope like in ifs. Without the do{}while() construct, this wouldn't be possible: