239 lines
8.3 KiB
C
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
|