⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 options.cc

📁 早期freebsd实现
💻 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__ */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -