vlc_messages.h 6.21 KB
Newer Older
1 2 3 4 5 6
/*****************************************************************************
 * messages.h: messages interface
 * This library provides basic functions for threads to interact with user
 * interface, such as message output.
 *****************************************************************************
 * Copyright (C) 1999, 2000, 2001, 2002 VideoLAN
7
 * $Id: vlc_messages.h,v 1.10 2003/12/04 17:15:59 gbazin Exp $
8 9 10 11 12 13 14 15
 *
 * Authors: Vincent Seguin <seguin@via.ecp.fr>
 *          Samuel Hocevar <sam@zoy.org>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
16
 *
17 18 19 20 21 22 23 24 25 26 27
 * 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 General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
 *****************************************************************************/

#include <stdarg.h>
Sigmund Augdal Helberg's avatar
all:  
Sigmund Augdal Helberg committed
28 29 30 31 32 33 34
/**
 * \defgroup messages Messages
 * This library provides basic functions for threads to interact with user
 * interface, such as message output.
 *
 * @{
 */
35

Sigmund Augdal Helberg's avatar
all:  
Sigmund Augdal Helberg committed
36 37

/**
38
 * Store a single message.
Sigmund Augdal Helberg's avatar
all:  
Sigmund Augdal Helberg committed
39
 */
40 41
typedef struct
{
Sigmund Augdal Helberg's avatar
all:  
Sigmund Augdal Helberg committed
42
    int     i_type;                             /**< message type, see below */
43
    int     i_object_id;
44
    int     i_object_type;
45
    char *  psz_module;
Sigmund Augdal Helberg's avatar
all:  
Sigmund Augdal Helberg committed
46
    char *  psz_msg;                                 /**< the message itself */
47 48 49 50 51 52 53 54 55 56

#if 0
    mtime_t date;                                     /* date of the message */
    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
} msg_item_t;

/* Message types */
Sigmund Augdal Helberg's avatar
all:  
Sigmund Augdal Helberg committed
57 58 59 60 61 62 63 64 65 66
/** standard messages */
#define VLC_MSG_INFO  0                               
/** error messages */
#define VLC_MSG_ERR   1                                  
/** warning messages */
#define VLC_MSG_WARN  2
/** debug messages */
#define VLC_MSG_DBG   3

/**
67
 * Store all data requiered by messages interfaces.
Sigmund Augdal Helberg's avatar
all:  
Sigmund Augdal Helberg committed
68
 */
69
struct msg_bank_t
70
{
Sigmund Augdal Helberg's avatar
all:  
Sigmund Augdal Helberg committed
71
    /** Message queue lock */
72
    vlc_mutex_t             lock;
73 74
    vlc_bool_t              b_configured;
    vlc_bool_t              b_overflow;
75 76

    /* Message queue */
Sigmund Augdal Helberg's avatar
all:  
Sigmund Augdal Helberg committed
77
    msg_item_t              msg[VLC_MSG_QSIZE];           /**< message queue */
78 79 80 81 82 83
    int i_start;
    int i_stop;

    /* Subscribers */
    int i_sub;
    msg_subscription_t **pp_sub;
84 85 86 87 88

    /* Logfile for WinCE */
#ifdef UNDER_CE
    FILE *logfile;
#endif
89 90
};

Sigmund Augdal Helberg's avatar
all:  
Sigmund Augdal Helberg committed
91
/**
92
 * Used by interface plugins which subscribe to the message bank.
Sigmund Augdal Helberg's avatar
all:  
Sigmund Augdal Helberg committed
93
 */
94
struct msg_subscription_t
95 96 97 98 99 100 101 102 103 104 105
{
    int   i_start;
    int*  pi_stop;

    msg_item_t*  p_msg;
    vlc_mutex_t* p_lock;
};

/*****************************************************************************
 * Prototypes
 *****************************************************************************/
106
VLC_EXPORT( void, __msg_Generic, ( vlc_object_t *, int, const char *, const char *, ... ) ATTRIBUTE_FORMAT( 4, 5 ) );
107
VLC_EXPORT( void, __msg_GenericVa, ( vlc_object_t *, int, const char *, const char *, va_list args ) );
Sigmund Augdal Helberg's avatar
all:  
Sigmund Augdal Helberg committed
108 109 110 111
VLC_EXPORT( void, __msg_Info,    ( vlc_object_t *, const char *, ... ) ATTRIBUTE_FORMAT( 2, 3 ) );
VLC_EXPORT( void, __msg_Err,     ( vlc_object_t *, const char *, ... ) ATTRIBUTE_FORMAT( 2, 3 ) );
VLC_EXPORT( void, __msg_Warn,    ( vlc_object_t *, const char *, ... ) ATTRIBUTE_FORMAT( 2, 3 ) );
VLC_EXPORT( void, __msg_Dbg,    ( vlc_object_t *, const char *, ... ) ATTRIBUTE_FORMAT( 2, 3 ) );
112 113 114 115

#ifdef HAVE_VARIADIC_MACROS

#   define msg_Info( p_this, psz_format, args... ) \
116
      __msg_Generic( VLC_OBJECT(p_this), VLC_MSG_INFO, MODULE_STRING, \
117 118 119
                     psz_format, ## args )

#   define msg_Err( p_this, psz_format, args... ) \
120
      __msg_Generic( VLC_OBJECT(p_this), VLC_MSG_ERR, MODULE_STRING, \
121 122 123
                     psz_format, ## args )

#   define msg_Warn( p_this, psz_format, args... ) \
124
      __msg_Generic( VLC_OBJECT(p_this), VLC_MSG_WARN, MODULE_STRING, \
125 126 127
                     psz_format, ## args )

#   define msg_Dbg( p_this, psz_format, args... ) \
128
      __msg_Generic( VLC_OBJECT(p_this), VLC_MSG_DBG, MODULE_STRING, \
129 130
                     psz_format, ## args )

131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166
#elif defined(_MSC_VER) /* To avoid warnings and even errors with c++ files */

inline void msg_Info( void *p_this, const char *psz_format, ... )
{
  va_list ap;
  va_start( ap, psz_format );
  __msg_GenericVa( ( vlc_object_t *)p_this, VLC_MSG_INFO, MODULE_STRING,
                   psz_format, ap );
  va_end(ap);
}
inline void msg_Err( void *p_this, const char *psz_format, ... )
{
  va_list ap;
  va_start( ap, psz_format );
  __msg_GenericVa( ( vlc_object_t *)p_this, VLC_MSG_ERR, MODULE_STRING,
                   psz_format, ap );
  va_end(ap);
}
inline void msg_Warn( void *p_this, const char *psz_format, ... )
{
  va_list ap;
  va_start( ap, psz_format );
  __msg_GenericVa( ( vlc_object_t *)p_this, VLC_MSG_WARN, MODULE_STRING,
                   psz_format, ap );
  va_end(ap);
}
inline void msg_Dbg( void *p_this, const char *psz_format, ... )
{
  va_list ap;
  va_start( ap, psz_format );
  __msg_GenericVa( ( vlc_object_t *)p_this, VLC_MSG_DBG, MODULE_STRING,
                   psz_format, ap );
  va_end(ap);
}

#else /* _MSC_VER */
167 168 169 170 171 172 173 174

#   define msg_Info __msg_Info
#   define msg_Err __msg_Err
#   define msg_Warn __msg_Warn
#   define msg_Dbg __msg_Dbg

#endif /* HAVE_VARIADIC_MACROS */

175 176 177
#define msg_Create(a) __msg_Create(VLC_OBJECT(a))
#define msg_Flush(a) __msg_Flush(VLC_OBJECT(a))
#define msg_Destroy(a) __msg_Destroy(VLC_OBJECT(a))
178
void __msg_Create  ( vlc_object_t * );
179
void __msg_Flush   ( vlc_object_t * );
180 181
void __msg_Destroy ( vlc_object_t * );

182 183
#define msg_Subscribe(a) __msg_Subscribe(VLC_OBJECT(a))
#define msg_Unsubscribe(a,b) __msg_Unsubscribe(VLC_OBJECT(a),b)
184 185 186
VLC_EXPORT( msg_subscription_t*, __msg_Subscribe, ( vlc_object_t * ) );
VLC_EXPORT( void, __msg_Unsubscribe, ( vlc_object_t *, msg_subscription_t * ) );

Sigmund Augdal Helberg's avatar
all:  
Sigmund Augdal Helberg committed
187 188 189 190

/**
 * @}
 */