diff options
Diffstat (limited to 'include/cmdline.h')
-rw-r--r-- | include/cmdline.h | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/include/cmdline.h b/include/cmdline.h new file mode 100644 index 0000000..e528d15 --- /dev/null +++ b/include/cmdline.h @@ -0,0 +1,135 @@ +/* cmdline.h: macros to help process command-line arguments. + +Copyright (C) 1992, 2004 Free Software Foundation, Inc. + +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 2, 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, write to the Free Software +Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ + +#ifndef CMDLINE_H +#define CMDLINE_H + +#include "filename.h" +#include "getopt.h" +#include "global.h" + + +/* Test whether getopt found an option ``A''. + Assumes the option index is in the variable `option_index', and the + option table in a variable `long_options'. */ + +#define ARGUMENT_IS(a) STREQ (long_options[option_index].name, a) + + +/* Read the string S as a percentage, i.e., a number between 0 and 100. */ + +#define GET_PERCENT(s) \ + ({ \ + unsigned temp = atou (s); \ + if (temp > 100) \ + FATAL1 ("GET_PERCENT: The argument %u should be at most 100, since \ +it's a percentage", temp); \ + temp / 100.0; \ + }) + + +/* Read the string S as two character codes separated by a hyphen. Put + the numeric values of the codes into START and END. */ + +#define GET_RANGE(s, start, end) \ + do \ + { \ + string str1 = strtok (s, "-"); \ + if (str1 == NULL) \ + FATAL1 ("GET_RANGE: No character code in argument `%s'", s); \ + start = xparse_charcode (str1); \ + end = xparse_charcode (s + strlen (str1) + 1); \ + } \ + while (0) + + +/* In most programs, we want to deduce the resolution from the filename + given, if possible. But in some we don't. Correspondingly, we want + to remove the suffix if we do deduce the resolution (since the + resolution is the suffix (plus a format)). Assumes lots of + variables. */ + +#ifdef CMDLINE_NO_DPI +#define FIND_CMDLINE_DPI() /* as nothing */ +#define MAYBE_REMOVE_SUFFIX(s) s +#else +#define FIND_CMDLINE_DPI() \ + if (!explicit_dpi) \ + { \ + string test_dpi = find_dpi (argv[optind]); \ + if (test_dpi != NULL) \ + dpi = test_dpi; \ + } +#define MAYBE_REMOVE_SUFFIX(s) remove_suffix (s) +#endif + + +/* Perform common actions at the end of parsing the arguments. Assumes + lots of variables: `printed_version', a boolean for whether the + version number has been printed; `optind', the current option index; + `argc'; `argv'; and `explicit_dpi', for whether the resolution has + been assigned already. */ + +#define FINISH_COMMAND_LINE() \ + do \ + { \ + /* Just wanted to know the version number? */ \ + if (printed_version && optind == argc) exit (0); \ + \ + /* Exactly one (non-empty) argument left? */ \ + if (optind + 1 == argc && *argv[optind] != 0) \ + { \ + FIND_CMDLINE_DPI (); \ + return MAYBE_REMOVE_SUFFIX (argv[optind]); \ + } \ + else \ + { \ + fprintf (stderr, "Usage: %s [options] <font_name>.\n", argv[0]);\ + fprintf (stderr, "(%s.)\n", optind == argc ? "Missing <font_name>"\ + : "Too many <font_name>s"); \ + fputs ("For more information, use ``-help''.\n", stderr); \ + exit (1); \ + } \ + return NULL; /* stop warnings */ \ + } \ + while (0) + +#define GETOPT_USAGE \ +" You can use `--' or `-' to start an option.\n\ + You can use any unambiguous abbreviation for an option name.\n\ + You can separate option names and values with `=' or ` '.\n\ +" + +/* What to pass to `strtok' to separate different arguments to an + option, as in `-option=arg1,arg2,arg3'. It is useful to allow + whitespace as well so that the option value can come from a file, via + the shell construct "`cat file`" (including the quotes). */ +#define ARG_SEP ", \t\n" + + +/* This parses a string of unsigned integers separated by commas, and + returns a vector of the integers (as numbers). A -1 is appended to + mark the end of the list, hence the return type. */ +extern int *scan_unsigned_list (string); + +/* If S has the form <name>.<number><stuff>, as in `foo.1200gf', return + <number>, as a string; otherwise, return NULL. */ +extern string find_dpi (string s); + +#endif /* not CMDLINE_H */ + |