aboutsummaryrefslogblamecommitdiff
path: root/src/xz/message.h
blob: 7ef9b165425c91aba3489ea76a4155fff692cc9e (plain) (tree)



































































































































                                                                               
///////////////////////////////////////////////////////////////////////////////
//
/// \file       message.h
/// \brief      Printing messages to stderr
//
//  Copyright (C) 2007-2008 Lasse Collin
//
//  This program is free software; you can redistribute it and/or
//  modify it under the terms of the GNU Lesser General Public
//  License as published by the Free Software Foundation; either
//  version 2.1 of the License, or (at your option) any later version.
//
//  This program is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
//  Lesser General Public License for more details.
//
///////////////////////////////////////////////////////////////////////////////

#ifndef MESSAGE_H
#define MESSAGE_H


/// Verbosity levels
enum message_verbosity {
	V_SILENT,   ///< No messages
	V_ERROR,    ///< Only error messages
	V_WARNING,  ///< Errors and warnings
	V_VERBOSE,  ///< Errors, warnings, and verbose statistics
	V_DEBUG,    ///< Debugging, FIXME remove?
};


/// \brief      Initializes the message functions
///
/// \param      argv0       Name of the program i.e. argv[0] from main()
/// \param      verbosity   Verbosity level
///
/// If an error occurs, this function doesn't return.
///
extern void message_init(const char *argv0);


/// Increase verbosity level by one step unless it was at maximum.
extern void message_verbosity_increase(void);

/// Decrease verbosity level by one step unless it was at minimum.
extern void message_verbosity_decrease(void);


/// Set the total number of files to be processed (stdin is counted as a file
/// here). The default is one.
extern void message_set_files(unsigned int files);


/// \brief      Print a message if verbosity level is at least "verbosity"
///
/// This doesn't touch the exit status.
extern void message(enum message_verbosity verbosity, const char *fmt, ...)
		lzma_attribute((format(printf, 2, 3)));


/// \brief      Prints a warning and possibly sets exit status
///
/// The message is printed only if verbosity level is at least V_WARNING.
/// The exit status is set to WARNING unless it was already at ERROR.
extern void message_warning(const char *fmt, ...)
		lzma_attribute((format(printf, 1, 2)));


/// \brief      Prints an error message and sets exit status
///
/// The message is printed only if verbosity level is at least V_ERROR.
/// The exit status is set to ERROR.
extern void message_error(const char *fmt, ...)
		lzma_attribute((format(printf, 1, 2)));


/// \brief      Prints an error message and exits with EXIT_ERROR
///
/// The message is printed only if verbosity level is at least V_ERROR.
extern void message_fatal(const char *fmt, ...)
		lzma_attribute((format(printf, 1, 2)))
		lzma_attribute((noreturn));


/// Print an error message that an internal error occurred and exit with
/// EXIT_ERROR.
extern void message_bug(void) lzma_attribute((noreturn));


/// Print a message that establishing signal handlers failed, and exit with
/// exit status ERROR.
extern void message_signal_handler(void) lzma_attribute((noreturn));


/// Converts lzma_ret to a string.
extern const char *message_strm(lzma_ret code);


/// Print a message that user should try --help.
extern void message_try_help(void);


/// Prints the version number to stdout and exits with exit status SUCCESS.
extern void message_version(void) lzma_attribute((noreturn));


/// Print the help message.
extern void message_help(bool long_help) lzma_attribute((noreturn));


///
extern void message_progress_start(const char *filename, uint64_t in_size);


///
extern void message_progress_update(uint64_t in_pos, uint64_t out_pos);


/// \brief      Finishes the progress message if we were in verbose mode
///
/// \param      in_pos      Final input position i.e. how much input there was.
/// \param      out_pos     Final output position
/// \param      success     True if the operation was successful. We don't
///                         print the final progress message if the operation
///                         wasn't successful.
///
extern void message_progress_end(
		uint64_t in_pos, uint64_t out_pos, bool success);

#endif