- case 'c': items_add((argitem){util_strdup(&argv[1][2]), 0}); break; /* compile */
- case 'a': items_add((argitem){util_strdup(&argv[1][2]), 1}); break; /* assemble */
- case 'i': items_add((argitem){util_strdup(&argv[1][2]), 2}); break; /* includes */
+ #define param_argument(argtype) do { \
+ argitem item; \
+ if (argv[1][2]) { \
+ item.name = util_strdup(&argv[1][2]); \
+ item.type = argtype; \
+ items_add(item); \
+ } else { \
+ ++argv; \
+ --argc; \
+ if (argc <= 1) \
+ goto clean_params_usage; \
+ item.name = util_strdup(argv[1]); \
+ item.type = argtype; \
+ items_add(item); \
+ } \
+ } while (0)
+
+ case 'c': { param_argument(0); break; } /* compile */
+ case 'a': { param_argument(1); break; } /* assemble */
+ case 'i': { param_argument(2); break; } /* includes */
+ #undef parm_argument