?? options.cc
字號:
/* Handles parsing the Options provided to the user. Copyright (C) 1989 Free Software Foundation, Inc. written by Douglas C. Schmidt (schmidt@ics.uci.edu)This file is part of GNU TRIE-GEN.GNU TRIE-GEN is free software; you can redistribute it and/or modifyit under the terms of the GNU General Public License as published bythe Free Software Foundation; either version 1, or (at your option)any later version.GNU TRIE-GEN is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See theGNU General Public License for more details.You should have received a copy of the GNU General Public Licensealong with GNU TRIE-GEN; see the file COPYING. If not, write tothe Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */#include <stdio.h>#include <builtin.h>#include <assert.h>#include <stdarg.h>#include <GetOpt.h>#include "options.h"/* Global option coordinator for the entire program. */Options option; /* Current program version. */extern char *version_string;static voidreport_error (const char *format, ...){ va_list args; va_start (args, format); char c; while (c = *format++) { if (c=='%') switch (c = *format++) { case 'a': exit (1); case 'n': fputs (option.program_name (), stderr); break; case 'e': typedef void (*CallbackT) (void); CallbackT callback = va_arg (args, CallbackT); (*callback) (); break; case 's': fputs (va_arg (args, const char *), stderr); break; default: fputc (c, stderr); } else fputc (c, stderr); } va_end (args);}/* Prints program usage to standard error stream. */inline void Options::usage (void) { report_error ("Usage: %n [-cdf] (type %n -h for help)\n");}/* Output command-line Options. */void Options::print_options (void){ int i; printf ("/* Command-line: "); for (i = 0; i < argument_count; i++) printf ("%s ", argument_vector[i]); printf (" */");}/* Sets the default Options. */int Options::option_word = 0; int Options::argument_count = 0;char ** Options::argument_vector = 0;Options::Options (void) { option_word = 0;}/* Dumps option status when debug is set. */Options::~Options (void) { if (option_word & DEBUG) { fprintf (stderr, "\ndumping Options:\nCOMPACT is.......: %s\nDEBUG is.......: %s" "\nFULL is........: %s\nCONST is.......: %s", option_word & COMPACT ? "enabled" : "disabled", option_word & DEBUG ? "enabled" : "disabled", option_word & FULL ? "enabled" : "disabled", option_word & CONST ? "enabled" : "disabled"); fprintf (stderr, "\nfinished dumping Options\n"); }}/* Parses the command line Options and sets appropriate flags in option_word. */void Options::operator () (int argc, char *argv[]){ GetOpt getopt (argc, argv, "cCdfh"); int option_char; argument_count = argc; argument_vector = argv; while ((option_char = getopt ()) != EOF) { switch (option_char) { case 'c': /* Compact the output tables. */ { option_word |= COMPACT; break; } case 'C': /* Make the generated tables readonly (const). */ { option_word |= CONST; break; } case 'd': /* Enable debugging option. */ { option_word |= DEBUG; report_error ("Starting program %n, version %s, with debuggin on.\n", version_string); break; } case 'f': /* Generate a full table */ { option_word |= FULL; break; } case 'h': { report_error ("-c\tCompact the generated trie.\n" "-C\tMake strings in the generated lookup table constant, i.e., readonly.\n" "-d\tEnable debugging (produces verbose output to standard error).\n" "-f\tGenerates a `full' trie rather than a minimal-prefix trie.\n" "-h\tPrints out the help diagnostic.\n%a"); } default: report_error ("%e%a", usage); } } if (argv[getopt.optind] && ! freopen (argv[getopt.optind], "r", stdin)) report_error ("Unable to read key word file %s.\n%e%a", argv[getopt.optind], usage); if (++getopt.optind < argc) report_error ("Extra trailing arguments to %n.\n%e%a", usage);}#ifndef __OPTIMIZE__const char *Options::program_name (void){ return argument_vector[0];}/* TRUE if option enable, else FALSE. */int Options::operator[] (Option_Type option) { return option_word & option;}/* Enables option OPT. */voidOptions::operator= (enum Option_Type opt) { option_word |= opt;}/* Disables option OPT. */voidOptions::operator!= (enum Option_Type opt) { option_word &= ~opt;}#endif /* not defined __OPTIMIZE__ */
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -