DYT/Tool/3rdParty_x64/include/dcmtk/ofstd/ofconapp.h
2024-11-22 23:19:31 +08:00

239 lines
8.3 KiB
C++

/*
*
* Copyright (C) 1999-2012, OFFIS e.V.
* All rights reserved. See COPYRIGHT file for details.
*
* This software and supporting documentation were developed by
*
* OFFIS e.V.
* R&D Division Health
* Escherweg 2
* D-26121 Oldenburg, Germany
*
*
* Module: ofstd
*
* Author: Joerg Riesmeier
*
* Purpose: Handle console applications (Header)
*
*/
#ifndef OFCONAPP_H
#define OFCONAPP_H
#include "dcmtk/config/osconfig.h"
#include "dcmtk/ofstd/oftypes.h"
#include "dcmtk/ofstd/ofcmdln.h"
#include "dcmtk/ofstd/ofstring.h" /* for class OFString */
/*---------------------*
* class declaration *
*---------------------*/
/** support class for console applications.
* Builds an envelope for the OFCommandLine class to provide a consistent
* behaviour for all DCMTK console applications.
* Performs console output operations and error checking.
*/
class DCMTK_OFSTD_EXPORT OFConsoleApplication
{
public:
/** constructor
*
** @param app application name
* @param desc (short) description of what the application does
* @param rcsid identifier for console application
*/
OFConsoleApplication(const char *app,
const char *desc = NULL,
const char *rcsid = NULL);
/** destructor
*/
~OFConsoleApplication();
/** parse command line.
* If the command line has no argument (in case at least one argument is required) and
* if the command line has only one argument, namely "--help" or the specified shortcut,
* (in all cases) the usage is printed (see printUsage).
*
** @param cmd reference to the OFCommandLine object. Should be valid at least as
* long as this object exists.
* @param argCount number of arguments (argc)
* @param argValue pointer to argument array (argv[])
* @param flags flags to be used for parsing (e.g. OFCommandLine::PF_NoCommandFiles)
* @param startPos first argument to be parsed (default: 1, i.e. omit program name)
*
** @return status of parsing process, true if successful, false otherwise
*/
OFBool parseCommandLine(OFCommandLine &cmd,
int argCount,
char *argValue[],
const int flags = 0,
const int startPos = 1);
#ifdef DCMTK_USE_WCHAR_T
/** parse command line.
* This is a Windows-specific version supporting the wide character encoding (UTF-16).
* If the command line has no argument (in case at least one argument is required) and
* if the command line has only one argument, namely "--help" or the specified shortcut,
* (in all cases) the usage is printed (see printUsage).
*
** @param cmd reference to the OFCommandLine object. Should be valid at least as
* long as this object exists.
* @param argCount number of arguments (argc)
* @param argValue pointer to argument array (argv[])
* @param flags flags to be used for parsing (e.g. OFCommandLine::PF_NoCommandFiles)
* @param startPos first argument to be parsed (default: 1, i.e. omit program name)
*
** @return status of parsing process, true if successful, false otherwise
*/
OFBool parseCommandLine(OFCommandLine &cmd,
int argCount,
wchar_t *argValue[],
const int flags = 0,
const int startPos = 1);
#endif // HAVE_WINDOWS_H ...
/** print header of console application (consisting of identifier, name and description)
*
** @param hostInfo print host information as reported by 'config.guess' if OFTrue.
* If compiled with 'libiconv' support, the current locale's character
* encoding is also shown. On Windows systems, either the current OEM
* and ANSI code page identifiers are printed or "Unicode (UTF-16)" if
* support is enabled. Finally, if the DEBUG macro is defined, a note
* on the presence of debug code is given.
* @param stdError print to standard error stream if OFTrue (default: standard output)
*/
void printHeader(const OFBool hostInfo = OFFalse,
const OFBool stdError = OFFalse);
/** print usage (syntax of command line options) to standard output stream
*
** @param cmd reference to command line class (default: object used for parsing)
*/
void printUsage(const OFCommandLine *cmd = NULL);
/** print expanded command line arguments to standard error stream
*
** @param cmd reference to command line class (default: object used for parsing)
*/
void printArguments(OFCommandLine *cmd = NULL);
/** print resource identifier to standard error stream
*/
void printIdentifier();
/** print error message (incl. header) to standard error stream and exit with error code
*
** @param str error message to be printed
* @param code error code to be returned (exit)
*/
void printError(const char *str,
const int code = 1);
/** print warning message (w/o header) to standard error stream
*
** @param str warning message to be printed
* @param prefix prefix printed in front of the message
*/
void printWarning(const char *str,
const char *prefix = "warning");
/** print message (w/o header) to standard error stream.
*
** @param str message to be printed
*/
void printMessage(const char *str);
/** check quiet mode
*
** @return OFTrue if quiet mode is active, OFFalse otherwise
*/
OFBool quietMode() const;
/** switch on/off quiet mode
*
** @param mode if OFTrue all error and warning messages will be suppressed
*/
void setQuietMode(const OFBool mode = OFTrue);
/** check value status and print error message if necessary
*
** @param status status of OFCommandLine::getValue() call
* @param cmd reference to command line class (default: object used for parsing)
*/
void checkValue(const OFCommandLine::E_ValueStatus status,
OFCommandLine *cmd = NULL);
/** check parameter status and print error message if necessary
*
** @param status status of OFCommandLine::getParam() call
* @param cmd reference to command line class (default: object used for parsing)
*/
void checkParam(const OFCommandLine::E_ParamValueStatus status,
OFCommandLine *cmd = NULL);
/** check dependence between sub and base option and report an error if required.
* Message format: "error: " + subOpt + " only allowed with " + baseOpt
*
** @param subOpt option to be checked
* @param baseOpt base option required for sub option
* @param condition if false error message is printed (i.e. base option is absent)
*/
void checkDependence(const char *subOpt,
const char *baseOpt,
OFBool condition);
/** check conflict between two options and report an error if required.
* Message format: "error: " + firstOpt + " not allowed with " + secondOpt
*
** @param firstOpt first option to be checked
* @param secondOpt second option to be checked
* @param condition if true error message is printed (i.e. a conflict exists)
*/
void checkConflict(const char *firstOpt,
const char *secondOpt,
OFBool condition);
protected:
/** check parse status of previously parsed command line
*/
OFBool checkParseStatus(const OFCommandLine::E_ParseStatus status);
private:
/// Name of the application (short form)
OFString Name;
/// Short description of the application
OFString Description;
/// Identification string (rcsid)
OFString Identification;
/// Switch on/off error and warning messages
OFBool QuietMode;
/// Pointer to associated CommandLine class
OFCommandLine *CmdLine;
// --- declarations to avoid compiler warnings
OFConsoleApplication(const OFConsoleApplication &);
OFConsoleApplication &operator=(const OFConsoleApplication &);
};
#endif