You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
138 lines
6.0 KiB
138 lines
6.0 KiB
/*******************************************************************************
|
|
* intf_msg.h: messages interface
|
|
* (c)1999 VideoLAN
|
|
*******************************************************************************
|
|
* This library provides basic functions for threads to interact with user
|
|
* interface, such as message output. If INTF_MSG_QUEUE is defined (which is the
|
|
* defaul), messages are not printed directly by threads, to bypass console
|
|
* limitations and slow printf() calls, but sent to a queue and printed later by
|
|
* interface thread.
|
|
* If INTF_MSG_QUEUE is not defined, output is directly performed on stderr.
|
|
*******************************************************************************
|
|
* required headers:
|
|
* "config.h"
|
|
* "mtime.h"
|
|
* "vlc_thread.h"
|
|
*******************************************************************************/
|
|
|
|
/*******************************************************************************
|
|
* interface_message_t
|
|
*******************************************************************************
|
|
* Store a single message. Messages have a maximal size of INTF_MSG_MSGSIZE.
|
|
* If DEBUG is defined, messages have a date field and debug messages are
|
|
* printed with a date to allow more precise profiling.
|
|
*******************************************************************************/
|
|
typedef struct
|
|
{
|
|
int i_type; /* message type, see below */
|
|
char * psz_msg; /* the message itself */
|
|
|
|
#ifdef DEBUG
|
|
/* Debugging informations - in DEBUG mode, all messages are dated and debug
|
|
* messages have calling location informations printed */
|
|
mtime_t date; /* date of the message (all messages) */
|
|
char * psz_file; /* file in which the function was called */
|
|
char * psz_function; /* function from which the function was called */
|
|
int i_line; /* line at which the function was called */
|
|
#endif
|
|
} interface_msg_message_t;
|
|
|
|
/* Message types */
|
|
#define INTF_MSG_STD 0 /* standard message */
|
|
#define INTF_MSG_ERR 1 /* error message */
|
|
#define INTF_MSG_INTF 2 /* interface message */
|
|
#define INTF_MSG_DBG 3 /* debug message */
|
|
|
|
/*******************************************************************************
|
|
* interface_msg_t
|
|
*******************************************************************************
|
|
* Store all data requiered by messages interfaces. It has a singe instance in
|
|
* program_data.
|
|
*******************************************************************************/
|
|
typedef struct
|
|
{
|
|
#ifdef INTF_MSG_QUEUE
|
|
/* Message queue */
|
|
vlc_mutex_t lock; /* message queue lock */
|
|
int i_count; /* number of messages stored */
|
|
interface_msg_message_t msg[INTF_MSG_QSIZE]; /* message queue */
|
|
#endif
|
|
|
|
#ifdef DEBUG_LOG
|
|
/* Log file */
|
|
FILE * p_log_file; /* log file */
|
|
#endif
|
|
|
|
#ifndef INTF_MSG_QUEUE
|
|
#ifndef DEBUG_LOG
|
|
/* If neither messages queue, neither log file is used, then the structure
|
|
* is empty. However, empty structures are not allowed in C. Therefore, a
|
|
* dummy integer is used to fill it. */
|
|
int i_dummy; /* unused filler */
|
|
#endif
|
|
#endif
|
|
} interface_msg_t;
|
|
|
|
/*******************************************************************************
|
|
* intf_DbgMsg macros and functions
|
|
*******************************************************************************
|
|
* The intf_DbgMsg* functions are defined as macro to be able to use the
|
|
* compiler extensions and print the file, the function and the line number
|
|
* from which they have been called. They call _intf_DbgMsg*() functions after
|
|
* having added debugging informations.
|
|
* Outside DEBUG mode, intf_DbgMsg* functions do nothing.
|
|
*******************************************************************************/
|
|
#ifdef DEBUG
|
|
|
|
/* DEBUG mode */
|
|
void _intf_DbgMsg ( char *psz_file, char *psz_function, int i_line,
|
|
char *psz_format, ... );
|
|
void _intf_DbgMsgImm ( char *psz_file, char *psz_function, int i_line,
|
|
char *psz_format, ... );
|
|
|
|
#define intf_DbgMsg( format, args... ) \
|
|
_intf_DbgMsg( __FILE__, __FUNCTION__, __LINE__, format, ## args )
|
|
#define intf_DbgMsgImm( format, args... ) \
|
|
_intf_DbgMsg( __FILE__, __FUNCTION__, __LINE__, format, ## args )
|
|
|
|
#else
|
|
|
|
/* Non-DEBUG mode */
|
|
#define intf_DbgMsg( format, args... )
|
|
#define intf_DbgMsgImm( format, args...)
|
|
|
|
#endif
|
|
|
|
/*******************************************************************************
|
|
* intf_FlushMsg macro and function
|
|
*******************************************************************************
|
|
* intf_FlushMsg is a function which flushs message queue and print all messages
|
|
* remaining. It is only usefull if INTF_MSG_QUEUE is defined. In this case, it
|
|
* is really a function. In the other case, it is a macro doing nothing.
|
|
*******************************************************************************/
|
|
#ifdef INTF_MSG_QUEUE
|
|
|
|
/* Message queue mode */
|
|
void intf_FlushMsg ( void );
|
|
|
|
#else
|
|
|
|
/* Direct mode */
|
|
#define intf_FlushMsg() ;
|
|
|
|
#endif
|
|
|
|
/*******************************************************************************
|
|
* Prototypes
|
|
*******************************************************************************/
|
|
int intf_InitMsg ( interface_msg_t *p_intf_msg );
|
|
void intf_TerminateMsg ( interface_msg_t *p_intf_msg );
|
|
|
|
void intf_Msg ( char *psz_format, ... );
|
|
void intf_ErrMsg ( char *psz_format, ... );
|
|
void intf_IntfMsg ( char *psz_format, ... );
|
|
|
|
void intf_MsgImm ( char *psz_format, ... );
|
|
void intf_ErrMsgImm ( char *psz_format, ... );
|
|
|
|
|
|
|