X-Git-Url: https://git.draconx.ca/gitweb/cdecl99.git/blobdiff_plain/0be9665d13739d12085ef2f5c2d4a47215d7612d..879d69d46fdf7ddf33beac6c32c7f2646d97d0ca:/test/test.h diff --git a/test/test.h b/test/test.h index b8f7ee3..dbf3f82 100644 --- a/test/test.h +++ b/test/test.h @@ -1,8 +1,80 @@ +/* + * Copyright © 2012, 2020 Nick Bowler + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + #ifndef CDECL_TEST_H_ #define CDECL_TEST_H_ #include #include +#include +#include +#include + +#ifndef _ +# define _(x) (x) +#endif + +static inline int +print_option_start(const struct option *opt, const char *argname) +{ + int w; + + if (!argname) + argname = _("ARG"); + + if (opt->val >= CHAR_MIN && opt->val <= CHAR_MAX) { + switch (opt->has_arg) { + case 0: + w = printf(_(" -%c, --%s"), opt->val, opt->name); + break; + case 1: + w = printf(_(" -%c, --%s=%s"), + opt->val, opt->name, argname); + break; + case 2: + w = printf(_(" -%c, --%s[=%s]"), + opt->val, opt->name, argname); + break; + default: + assert(0); + } + } else { + switch (opt->has_arg) { + case 0: + w = printf(_(" --%s"), opt->name); + break; + case 1: + w = printf(_(" --%s=%s"), opt->name, argname); + break; + case 2: + w = printf(_(" --%s[=%s]"), opt->name, argname); + break; + default: + assert(0); + } + } + + if (w > 18) { + putchar('\n'); + w = 0; + } + + return w; +} struct cdecl_declspec; struct cdecl;