+ /*==================*\r
+ * Required defines *\r
+ *==================*/\r
+\r
+ #ifndef MODEL\r
+ # error Must specify a model name. Define MODEL=name.\r
+ #else\r
+ /* create generic macros that work with any model */\r
+ # define EXPAND_CONCAT(name1,name2) name1 ## name2\r
+ # define CONCAT(name1,name2) EXPAND_CONCAT(name1,name2)\r
+ # define MODEL_INITIALIZE CONCAT(MODEL,_initialize)\r
+ # define MODEL_STEP CONCAT(MODEL,_step)\r
+ # define MODEL_TERMINATE CONCAT(MODEL,_terminate)\r
+ # define RT_MDL CONCAT(MODEL,_M)\r
+ #endif\r
+\r
+ /* Error checking */\r
+ #define STRINGIZE(num) #num\r
+ #define POS(line) __FILE__ ":" STRINGIZE(line)\r
+ #define CHECK0(expr) do { int __err = (expr); if (__err) { fprintf(stderr, "Error: %s returned '%s' at " POS(__LINE__) "\n", #expr, strerror(__err)); exit(1); } } while (0);\r
+ #define CHECKE(expr) do { if ((expr) == -1) { perror(#expr " at " POS(__LINE__)); exit(1); } } while (0);\r
+\r