X-Git-Url: https://git.draconx.ca/gitweb/cdecl99.git/blobdiff_plain/63274ac7f99c516b88bd1f94e05e5c715a4800ce..66df1b09aaf2805cf08c6788456fb9c9f02279e9:/src/cdecl99.c diff --git a/src/cdecl99.c b/src/cdecl99.c index 2df7ec8..04de1a6 100644 --- a/src/cdecl99.c +++ b/src/cdecl99.c @@ -21,7 +21,9 @@ #include #include #include +#include #include +#include #include "readline.h" #include "cdecl.h" @@ -41,7 +43,8 @@ static const struct option lopts[] = { static void print_version(void) { puts(PACKAGE_STRING); - puts("Copyright (C) 2011 Nick Bowler."); + /* TRANSLATORS: (C) must *always* be translated as ©. */ + printf("Copyright %s 2011 Nick Bowler.\n", gettext("(C)")); puts("License GPLv3+: GNU GPL version 3 or later ."); puts("This is free software: you are free to change and redistribute it."); puts("There is NO WARRANTY, to the extent permitted by law."); @@ -151,6 +154,32 @@ out: return ret; } +static int cmd_declare(const char *cmd, const char *arg) +{ + struct cdecl *decl; + const char *str; + int ret = -1; + + /* The name of the command is significant here. */ + decl = cdecl_parse_english(cmd); + if (!decl) + goto out; + + /* + * English parses have at most one full declarator, so no loop is + * needed here. + */ + str = do_format(cdecl_declare, decl); + if (!str) + goto out; + + printf("%s\n", str); + ret = 1; +out: + cdecl_free(decl); + return ret; +} + static int cmd_quit(const char *cmd, const char *arg) { return 0; @@ -165,6 +194,8 @@ static const struct command { } commands[] = { { "explain", cmd_explain, "Explain a C declaration." }, { "simplify", cmd_simplify, "Simplify a C declaration." }, + { "declare", cmd_declare, "Construct a C declaration." }, + { "type", cmd_declare, "Construct a C type name." }, { "help", cmd_help, "Print this list of commands." }, { "quit", cmd_quit, "Quit the program." }, { "exit", cmd_quit, NULL } @@ -288,6 +319,11 @@ int main(int argc, char **argv) if (argc > 0) progname = argv[0]; + /* Initialize gettext. */ + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, LOCALEDIR); + textdomain(PACKAGE); + while ((opt = getopt_long(argc, argv, sopts, lopts, NULL)) != -1) { switch (opt) { case 'q':