vlc_messages.h 5.46 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.4 2002/07/20 18:01:42 sam Exp $
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
 *
 * 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.
 * 
 * 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>

/*****************************************************************************
 * msg_item_t
 *****************************************************************************
 * Store a single message.
 *****************************************************************************/
typedef struct
{
    int     i_type;                               /* message type, see below */
37
    int     i_object_id;
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
    char *  psz_module;
    char *  psz_msg;                                   /* the message itself */

#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 */
#define VLC_MSG_INFO  0                                 /* standard messages */
#define VLC_MSG_ERR   1                                    /* error messages */
#define VLC_MSG_WARN  2                                  /* warning messages */
#define VLC_MSG_DBG   3                                    /* debug messages */

/*****************************************************************************
 * msg_bank_t
 *****************************************************************************
 * Store all data requiered by messages interfaces.
 *****************************************************************************/
60
struct msg_bank_t
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
{
    /* Message queue lock */
    vlc_mutex_t             lock;

    /* Message queue */
    msg_item_t              msg[VLC_MSG_QSIZE];             /* message queue */
    int i_start;
    int i_stop;

    /* Subscribers */
    int i_sub;
    msg_subscription_t **pp_sub;
};

/*****************************************************************************
 * msg_subscription_t
 *****************************************************************************
 * Used by interface plugins which subscribe to the message bank.
 *****************************************************************************/
80
struct msg_subscription_t
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
{
    int   i_start;
    int*  pi_stop;

    msg_item_t*  p_msg;
    vlc_mutex_t* p_lock;
};

/*****************************************************************************
 * Prototypes
 *****************************************************************************/
VLC_EXPORT( void, __msg_Generic, ( vlc_object_t *, int, const char *, const char *, ... ) );
VLC_EXPORT( void, __msg_Info,    ( void *, const char *, ... ) );
VLC_EXPORT( void, __msg_Err,     ( void *, const char *, ... ) );
VLC_EXPORT( void, __msg_Warn,    ( void *, const char *, ... ) );
VLC_EXPORT( void, __msg_Dbg,    ( void *, const char *, ... ) );

#ifdef HAVE_VARIADIC_MACROS

#   define msg_Info( p_this, psz_format, args... ) \
      __msg_Generic( CAST_TO_VLC_OBJECT(p_this), VLC_MSG_INFO, MODULE_STRING, \
                     psz_format, ## args )

#   define msg_Err( p_this, psz_format, args... ) \
      __msg_Generic( CAST_TO_VLC_OBJECT(p_this), VLC_MSG_ERR, MODULE_STRING, \
                     psz_format, ## args )

#   define msg_Warn( p_this, psz_format, args... ) \
      __msg_Generic( CAST_TO_VLC_OBJECT(p_this), VLC_MSG_WARN, MODULE_STRING, \
                     psz_format, ## args )

#   define msg_Dbg( p_this, psz_format, args... ) \
      __msg_Generic( CAST_TO_VLC_OBJECT(p_this), VLC_MSG_DBG, MODULE_STRING, \
                     psz_format, ## args )

#else /* HAVE_VARIADIC_MACROS */

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

#endif /* HAVE_VARIADIC_MACROS */

125
#define msg_Create(a) __msg_Create(CAST_TO_VLC_OBJECT(a))
126
#define msg_Flush(a) __msg_Flush(CAST_TO_VLC_OBJECT(a))
127 128
#define msg_Destroy(a) __msg_Destroy(CAST_TO_VLC_OBJECT(a))
void __msg_Create  ( vlc_object_t * );
129
void __msg_Flush   ( vlc_object_t * );
130 131 132 133 134 135 136
void __msg_Destroy ( vlc_object_t * );

#define msg_Subscribe(a) __msg_Subscribe(CAST_TO_VLC_OBJECT(a))
#define msg_Unsubscribe(a,b) __msg_Unsubscribe(CAST_TO_VLC_OBJECT(a),b)
VLC_EXPORT( msg_subscription_t*, __msg_Subscribe, ( vlc_object_t * ) );
VLC_EXPORT( void, __msg_Unsubscribe, ( vlc_object_t *, msg_subscription_t * ) );