This is dump.c in view mode; [Download] [Up]
//------------------------------------------------------------------------ // ^FILE: dump.c - debugging/dumping functions of the CmdLine library // // ^DESCRIPTION: // If DEBUG_CMDLINE is #defined when this file is compiled, then // the functions that print out debugging information for a CmdLine // and a CmdArg are implemented. // // ^HISTORY: // 04/01/92 Brad Appleton <brad@ssd.csd.harris.com> Created // // 03/01/93 Brad Appleton <brad@ssd.csd.harris.com> // - Added arg_sequence field to CmdArg // - Added cmd_nargs_parsed field to CmdLine // - Added cmd_description field to CmdLine //-^^--------------------------------------------------------------------- #include "cmdline.h" #ifdef DEBUG_CMDLINE # include <iostream.h> # include <string.h> # include "arglist.h" # include "states.h" #endif #ifdef DEBUG_CMDLINE // Indent a line corresponding to a given indent level. // The number of spaces to indent is 3x the indent level // static ostream & indent(ostream & os, unsigned level) { os.width(level * 3); return (os << ""); } // Dump the arg_syntax field of a CmdArg in a mnemonic format // static ostream & dump_arg_syntax(ostream & os, unsigned syntax) { if (syntax & CmdArg::isREQ) { os << "isREQ" ; } else { os << "isOPT" ; } if (syntax & CmdArg::isVALREQ) { os << "+isVALREQ" ; } if (syntax & CmdArg::isVALOPT) { os << "+isVALOPT" ; } if (syntax & CmdArg::isVALSEP) { os << "+isVALSEP" ; } if (syntax & CmdArg::isVALSTICKY) { os << "+isVALSTICKY" ; } if (syntax & CmdArg::isLIST) { os << "+isLIST" ; } if (syntax & CmdArg::isPOS) { os << "+isPOS" ; } if (syntax & CmdArg::isHIDDEN) { os << "+isHID" ; } return os; } // Dump the arg_flags field of a CmdArg in a mnemonic format static ostream & dump_arg_flags(ostream & os, unsigned flags) { if (flags & CmdArg::GIVEN) { os << "GIVEN" ; } else { os << "NOTGIVEN"; } if (flags & CmdArg::VALGIVEN) { os << "+VALGIVEN"; } if (flags & CmdArg::OPTION) { os << "+OPTION"; } if (flags & CmdArg::KEYWORD) { os << "+KEYWORD"; } if (flags & CmdArg::POSITIONAL) { os << "+POSITIONAL"; } if (flags & CmdArg::VALSEP) { os << "+VALSEP"; } else if (flags & CmdArg::VALGIVEN) { os << "+VALSAME"; } return os; } // Dump the cmd_flags field of a CmdLine in a mnemonic format static ostream & dump_cmd_flags(ostream & os, unsigned flags) { if (flags & CmdLine::NO_ABORT) { os << "NO_ABORT" ; } else { os << "ABORT" ; } if (flags & CmdLine::ANY_CASE_OPTS) { os << "+ANY_CASE_OPTS"; } if (flags & CmdLine::PROMPT_USER) { os << "+PROMPT_USER"; } if (flags & CmdLine::OPTS_FIRST) { os << "+OPTS_FIRST"; } if (flags & CmdLine::OPTS_ONLY) { os << "+OPTS_ONLY"; } if (flags & CmdLine::KWDS_ONLY) { os << "+KWDS_ONLY"; } if (flags & CmdLine::TEMP) { os << "+TEMP"; } if (flags & CmdLine::QUIET) { os << "+QUIET"; } if (flags & CmdLine::NO_GUESSING) { os << "+NO_GUESSING"; } return os; } // Dump the status of a CmdLine in a mnemonic format static ostream & dump_cmd_status(ostream & os, unsigned status) { if (! status) { os << "NO_ERROR"; return os; } else { os << "ERROR"; } if (status & CmdLine::ARG_MISSING) { os << "+ARG_MISSING"; } if (status & CmdLine::VAL_MISSING) { os << "+VAL_MISSING"; } if (status & CmdLine::VAL_NOTSTICKY) { os << "+VAL_NOTSTICKY"; } if (status & CmdLine::VAL_NOTSEP) { os << "+VAL_NOTSEP"; } if (status & CmdLine::KWD_AMBIGUOUS) { os << "+KWD_AMBIG"; } if (status & CmdLine::BAD_OPTION) { os << "+BAD_OPT"; } if (status & CmdLine::BAD_KEYWORD) { os << "+BAD_KWD"; } if (status & CmdLine::BAD_VALUE) { os << "+BAD_VAL"; } if (status & CmdLine::TOO_MANY_ARGS) { os << "+TOO_MANY"; } return os; } // Dump the state of a CmdLine in a mnemonic format static ostream & dump_cmd_state(ostream & os, unsigned state) { if (! state) { os << "NO_OPTIONS"; } else { os << "ARGS"; } if (state & cmd_END_OF_OPTIONS) { os << "+ENDOPTS"; } if (state & cmd_OPTIONS_USED) { os << "+OPTS_USED"; } if (state & cmd_KEYWORDS_USED) { os << "+KWDS_USED"; } if (state & cmd_GUESSING) { os << "+GUESSING"; } return os; } // Dump the parse_state of a CmdLine in a mnemonic format static ostream & dump_cmd_parse_state(ostream & os, unsigned parse_state) { switch (parse_state) { case cmd_START_STATE : os << "START_STATE"; break; case cmd_TOK_REQUIRED : os << "TOK_REQUIRED"; break; case cmd_WANT_VAL : os << "WANT_VAL"; break; case cmd_NEED_VAL : os << "NEED_VAL"; break; #ifdef vms_style case cmd_WANT_VALSEP : os << "WANT_VALSEP"; break; case cmd_NEED_VALSEP : os << "NEED_VALSEP"; break; case cmd_WANT_LISTSEP : os << "WANT_LISTSEP"; break; case cmd_NEED_LISTSEP : os << "NEED_LISTSEP"; break; #endif default : os << parse_state; } return os; } // Dump the arguments (including the default arguments) in an arg_list static ostream & dump_cmd_args(ostream & os, CmdArgListList * arg_list, unsigned level) { ::indent(os, level) << "CmdLine::cmd_args {\n" ; CmdArgListListIter list_iter(arg_list); for (CmdArgList * alist = list_iter() ; alist ; alist = list_iter()) { CmdArgListIter iter(alist); for (CmdArg * cmdarg = iter() ; cmdarg ; cmdarg = iter()) { cmdarg->dump(os, level + 1); } } ::indent(os, level) << "}" << endl; return os; } #endif /* DEBUG_CMDLINE */ // Dump a CmdArg void CmdArg::dump(ostream & os, unsigned level) const { #ifdef DEBUG_CMDLINE ::indent(os, level) << "CmdArg {\n" ; ::indent(os, level + 1) << "option='" << char(arg_char_name) << "', " << "keyword=\"" << arg_keyword_name << "\", " << "value=\"" << arg_value_name << "\"\n" ; ::indent(os, level + 1) << "syntax=" ; dump_arg_syntax(os, arg_syntax) << "\n"; ::indent(os, level + 1) << "flags=" ; dump_arg_flags(os, arg_flags) << "\n"; ::indent(os, level + 1) << "sequence=" << arg_sequence << "\n"; ::indent(os, level) << "}" << endl; #endif } // Dump a CmdLine void CmdLine::dump(ostream & os, unsigned level) const { #ifdef DEBUG_CMDLINE ::indent(os, level) << "CmdLine {\n" ; ::indent(os, level + 1) << "name=\"" << cmd_name << "\"\n"; ::indent(os, level + 1) << "description=\"" << cmd_description << "\"\n"; ::indent(os, level + 1) << "flags=" ; dump_cmd_flags(os, cmd_flags) << "\n"; ::indent(os, level + 1) << "status=" ; dump_cmd_status(os, cmd_status) << "\n"; ::indent(os, level + 1) << "state=" ; dump_cmd_state(os, cmd_state) << "\n"; ::indent(os, level + 1) << "parse_state=" ; dump_cmd_parse_state(os, cmd_parse_state) << "\n"; ::indent(os, level + 1); if (cmd_matched_arg == NULL) { os << "matched_arg=NULL\n"; } else { os << "matched_arg=" << (void *)cmd_matched_arg << "\n"; } ::indent(os, level + 1) << "# valid-args-parsed=" << cmd_nargs_parsed << "\n" ; ::indent(os, level) << "}" << endl; #endif } // Dump the arguments of a CmdLine void CmdLine::dump_args(ostream & os, unsigned level) const { #ifdef DEBUG_CMDLINE dump_cmd_args(os, cmd_args, level); #endif }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.