It is not required for your program to define with nemo_main(). There are cases where the user needs more control. An example of this is the falcON N-body code in $NEMO/use/dehnen/falcON. A header file (see e.g. inc/main.h) now defines main, instead of through the NEMO library:
// in main.h:
extern string defv[];
extern string usage;
namespace nbdy {
char version [200]; // to hold version info
extern void main(); // to be defined by user
};
int main(int argc, char *argv[]) // ::main()
{
snprintf(nbdy::version,200,"VERSION=" /*..*/ ); // write version info
initparam(argv,defv); // start NEMO
nbdy::main(); // call nbdy::main()
finiparam(); // finish NEMO
}
and the application includes this header file, and defines the keyword list in the usual way :
// in application.cc
#include <main.h>
string defv[] = { /*...*/, nbdy::version, NULL }; // use version info
string usage = /*...*/ ;
void nbdy::main() { /*...*/ } // nbdy::main()