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

📄 main.cpp

📁 Pegasus is an open-source implementationof the DMTF CIM and WBEM standards. It is designed to be por
💻 CPP
字号:
//%2006//////////////////////////////////////////////////////////////////////////// Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development// Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.// Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;// IBM Corp.; EMC Corporation, The Open Group.// Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;// IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.// Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;// EMC Corporation; VERITAS Software Corporation; The Open Group.// Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.;// EMC Corporation; Symantec Corporation; The Open Group.//// Permission is hereby granted, free of charge, to any person obtaining a copy// of this software and associated documentation files (the "Software"), to// deal in the Software without restriction, including without limitation the// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or// sell copies of the Software, and to permit persons to whom the Software is// furnished to do so, subject to the following conditions:// // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN// ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED// "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.////==============================================================================//// Author: Bob Blair (bblair@bmc.com)//// Modified By: Seema Gupta (gseema@in.ibm.com)//              Alagaraja Ramasubramanian, IBM (alags_raj@in.ibm.com) - PEP-167//              Amit K Arora, IBM (amitarora@in.ibm.com) - Bug#2333//              Josephine Eskaline Joyce, IBM (jojustin@in.ibm.com) - Bug#2756, Bug#3032////%/////////////////////////////////////////////////////////////////////////////// A main for the cimmof_parser.  It can be embedded elsewhere, too. #include <Pegasus/Common/Config.h>#include <iostream>#include <Pegasus/Compiler/mofCompilerOptions.h>#include "cmdlineExceptions.h"#include "cmdline.h" #include <Pegasus/Compiler/cimmofParser.h>#include <Pegasus/Compiler/parserExceptions.h>#ifdef PEGASUS_OS_OS400#include <qycmutiltyUtility.H>#include <qycmutilu2.H>#include "vfyptrs.cinc"#include <stdio.h>#include "OS400ConvertChar.h"#endifPEGASUS_USING_STD;#ifdef PEGASUS_HAVE_NAMESPACESusing namespace ParserExceptions;#endif// This is used by the parsing routines to control flow// through include filesstatic mofCompilerOptions cmdline;extern "C++" int processCmdLine(int, char **, mofCompilerOptions &, ostream &);extern "C++" ostream& help(ostream& os, int progtype);extern "C++" ostream& cimmofl_warning(ostream& os);#ifdef PEGASUS_OS_OS400// Escape message generator for os400, reports errors that cimmofl encounters.void os400_return_msg(int ret, String msg_, Boolean qsh);#endif#define NAMESPACE_ROOT "root/cimv2"static const char MSG_PATH [] 				= "pegasus/pegasusServer";intmain(int argc, char ** argv) {  int ret = 0;  String msg_;  MessageLoaderParms parms;  MessageLoader::_useProcessLocale = true; //l10n set message loading to use process locale  MessageLoader::setPegasusMsgHomeRelative(argv[0]);#ifdef PEGASUS_OS_OS400  VFYPTRS_INCDCL;               // VFYPTRS local variables  // verify pointers  #pragma exception_handler (qsyvp_excp_hndlr,qsyvp_excp_comm_area,\    0,_C2_MH_ESCAPE)    for( int arg_index = 1; arg_index < argc; arg_index++ ){	VFYPTRS(VERIFY_SPP_NULL(argv[arg_index]));    }  #pragma disable_handler    // Convert the args to ASCII    for(Uint32 i = 0;i< argc;++i)    {	EtoA(argv[i]);    }    // Set the stderr stream to buffered with 32k.    // Allows utf-8 to be sent to stderr (P9A66750).    setvbuf(stderr, new char[32768], _IOLBF, 32768);    // check what environment we are running in, native or qsh    Boolean qsh = false;    if( getenv(#pragma convert(37)	       "SHLVL"#pragma convert(0)	       ) == NULL ){  // native mode	// Check to ensure the user is authorized to use the command,	// suppress diagnostic message, send escape message	if(FALSE == ycmCheckCmdAuthorities(1)){	  ycmSend_Message_Escape(CPFDF80_RC,				 NULL,				 NULL,#pragma convert(37)				 "*CTLBDY   ",#pragma convert(0)				 1);	  return CPFDF80_RC;	}    }    else{ // qsh mode	// Check to ensure the user is authorized to use the command	// ycmCheckCmdAuthorities() will send a diagnostic message to qsh        qsh = true;	if(FALSE == ycmCheckCmdAuthorities()){	  return CPFDF80_RC;	}    }#endif  try {    ret = processCmdLine(argc, argv, cmdline, cerr);  } catch (ArgumentErrorsException &e) {   String msg(e.getMessage());   cerr << argv[0] << ": " << msg << endl;         if (msg.find(String("Unknown flag")) != PEG_NOT_FOUND)         {            MessageLoaderParms parms;            parms.msg_id = "Compiler.cimmofMessages.ERR_OPTION_NOT_SUPPORTED";            parms.default_msg = "Invalid option. Use '--help' to obtain command syntax.";            parms.msg_src_path = MSG_PATH;            cerr << argv[0] << ": " << MessageLoader::getMessage(parms) << endl;         }        else         {            MessageLoaderParms parms;            parms.msg_id = "Compiler.cimmofMessages.ERR_USAGE";            parms.default_msg = "Incorrect usage. Use '--help' to obtain command syntax.";            parms.msg_src_path = MSG_PATH;            cerr << argv[0] << ": " << MessageLoader::getMessage(parms) << endl;         }    ret =  PEGASUS_CIMMOF_CIM_EXCEPTION;  } catch (CmdlineNoRepository &e) {    cerr << e.getMessage() << endl;    ret = PEGASUS_CIMMOF_CMDLINE_NOREPOSITORY;  } catch (CIMException &e) {  	//l10n    //cerr << "Unexpected condition: " << e.getMessage() << endl;    parms.msg_id = "Compiler.cmdline.cimmof.main.UNEXPECTED_CONDITION";    parms.default_msg = "Unexpected condition: ";    cerr << MessageLoader::getMessage(parms) << e.getMessage() << endl;    ret = PEGASUS_CIMMOF_UNEXPECTED_CONDITION;  }  if (ret) {    if (ret > 0) {    	//l10n      //cerr << "Unexpected result from processing command line: " << ret <<endl;      //cerr << "Compilation terminating." << endl;      parms.msg_id = "Compiler.cmdline.cimmof.main.UNEXPECTED_RESULT";      parms.default_msg = "Unexpected result from processing command line: $0";      parms.arg0 = ret;      cerr << MessageLoader::getMessage(parms) << endl;      parms.msg_id = "Compiler.cmdline.cimmof.main.COMPILE_TERMINATING";      parms.default_msg = "Compilation terminating.";      cerr << MessageLoader::getMessage(parms) << endl;    }#ifdef PEGASUS_OS_OS400    os400_return_msg(ret, msg_, qsh);#endif    return ret;  }#ifndef PEGASUS_OS_OS400  if (cmdline.is_local() && !cmdline.get_no_usage_warning())  {        cimmofl_warning(cerr);  }#endif  const Array<String>& filespecs = cmdline.get_filespec_list();  // For most options, a real repository is required.  If we can't  // create one and we need to, bail.   cimmofParser *p = cimmofParser::Instance();   p->setCompilerOptions(&cmdline);  if ( p->setRepository() ) {	    p->setDefaultNamespacePath(NAMESPACE_ROOT);  } else {  	//l10n    //cerr << "Failed to set DefaultNamespacePath." << endl;    parms.msg_id = "Compiler.cmdline.cimmof.main.FAILED_TO_SET";    parms.default_msg = "Failed to set DefaultNamespacePath.";    cerr << MessageLoader::getMessage(parms) << endl;    // ATTN: P3 BB 2001 Did not set namespace.  We may need to log an error here.	ret = PEGASUS_CIMMOF_NO_DEFAULTNAMESPACEPATH;#ifdef PEGASUS_OS_OS400    os400_return_msg(ret, msg_, qsh);#endif    return ret;  }  if (filespecs.size())    // user specified command line args    for (unsigned int i = 0; i < filespecs.size(); i++) {      if (p->setInputBufferFromName((const String &)filespecs[i]) == 0) {        try {          ret = p->parse();        } catch(ParserLexException &e) {          //l10n          parms.msg_id = "Compiler.cmdline.cimmof.main.LEXER_ERROR";          parms.default_msg = "Lexer error: ";          //msg_ = String("Lexer error: ").append(e.getMessage());          msg_ = MessageLoader::getMessage(parms).append(e.getMessage());          ret = PEGASUS_CIMMOF_PARSER_LEXER_ERROR ;        } catch(Exception &e) {          //l10n          parms.msg_id = "Compiler.cmdline.cimmof.main.PARSING_ERROR";          parms.default_msg = "Parsing error: ";          //msg_ = String("Parsing error: ").append(e.getMessage());          msg_ = MessageLoader::getMessage(parms).append(e.getMessage());          ret = PEGASUS_CIMMOF_PARSING_ERROR;        }      } else {        //l10n        // ATTN: l10n TODO - this path was not localized by the msg freeze for R2.3.  So, use an        // internal exception msg for now.  But, need to replace this with        // a new cimmof msg in release 2.4.        parms.msg_id = "Common.InternalException.CANNOT_OPEN_FILE";        parms.default_msg = "Can't open file $0";        parms.arg0 = filespecs[i];        //msg_ = String("Can't open file ").append(filespecs[i]);        msg_ = MessageLoader::getMessage(parms);        ret = PEGASUS_CIMMOF_BAD_FILENAME;      }    }  else {    try {    int ret =  p->parse();    } catch(ParserLexException &e) {    	//l10n    	parms.msg_id = "Compiler.cmdline.cimmof.main.LEXER_ERROR";        parms.default_msg = "Lexer error: ";	    //msg_ = String("Lexer error: ").append(e.getMessage());	    msg_ = MessageLoader::getMessage(parms).append(e.getMessage());        ret = PEGASUS_CIMMOF_PARSER_LEXER_ERROR ;    } catch(Exception &e) {    	//l10n    	parms.msg_id = "Compiler.cmdline.cimmof.main.GENERAL_EXCEPTION";    	parms.default_msg = "Compiler general exception: ";	    //msg_ = String("Compiler general exception: ").append(e.getMessage());	    msg_ = MessageLoader::getMessage(parms).append(e.getMessage());        ret = PEGASUS_CIMMOF_COMPILER_GENERAL_EXCEPTION;    }  }  cerr << msg_ << endl;#ifdef PEGASUS_OS_OS400  os400_return_msg(ret, msg_, qsh);#endif  return ret;}// os400_return_msg:  creates an escape message for the os400, reports any //                    severe errors that cimmofl encounters.// @ret:  the (unix) return status.// @msg_:  The general error message. // @qsh:  shell status (QSHELL or Native mode).#ifdef PEGASUS_OS_OS400voidos400_return_msg(int ret, String msg_, Boolean qsh){  // Send good completion message to stdout if the compile worked.  // Callers of QYCMMOFL *PGM from the native command line will want to see this.  // Note: in PTF mode the quiet option should be used.  if (ret == 0 && !cmdline.quiet())    {      //l10n      //cout << "Compile completed successfully." << endl;      MessageLoaderParms parms;      parms.msg_id = "Compiler.cmdline.cimmof.main.COMPILE_SUCCESSFUL";      parms.default_msg = "Compile completed successfully.";      cout << MessageLoader::getMessage(parms) << endl;  }  // Send a CPDDF83 and CPFDF81 OS/400 program message if an error occurred,  // and we are running in native mode.  // This will allow PTFs to monitor for this message.  if (ret != 0 && !qsh)  {      message_t    message_;	// Message information      cmd_msg_t    cmdMSG;      memset((char *)&cmdMSG, ' ', sizeof(cmd_msg_t) ); // init to blanks      memcpy(cmdMSG.commandName, "QYCMMOFL", 8);  // must be in utf-8      CString utf8 = msg_.getCString();      if (strlen((const char *)utf8) <= 200)            // max repl data is 200 chars  	  memcpy(cmdMSG.message, utf8, strlen((const char *)utf8));      else	  memcpy(cmdMSG.message, utf8, 200);#pragma convert(37)      memcpy(message_.MsgId, "CPDDF83", 7);      memcpy(message_.MsgData, (char *)&cmdMSG, sizeof(cmd_msg_t));      message_.MsgLen = sizeof(cmd_msg_t);      memcpy(message_.MsgType, "*DIAG     ", 10);       ycmSend_Message(&message_,		      "*CTLBDY   ",		      1,		      true);                     // repl data is utf-8       ycmSend_Message_Escape(CPFDF81_RC,			     "03",               // must be in ccsid 37			     "QYCMMOFL",         // must be in ccsid 37			     "*CTLBDY   ",			     1);#pragma convert(0)  }}#endif

⌨️ 快捷键说明

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