/*
	2004.02.01
		first released source code for IOMP
*/

#ifndef _MP_MSG_H
#define _MP_MSG_H

typedef struct {
    int mq_id;
    int my_sub_changed;
    int my_sub_number;
    int my_audio_number;
    int my_angle_number;
	int my_chapter_number;
    int my_chapter_change;
    int my_move_chapter;
    int my_angle_changed;
	int my_autoreplay;
	int my_shtimer;
	int my_shbattery;
	int my_menumode;
	int my_fullscreen;
	int my_full_w;
	int my_full_h;
	int my_off_screen;
	int my_battery;
	int my_pos;
	int my_pos_flag;
	int my_aid_set[10];
	int my_displaymode; // aspect:expand:monitor:media
	int	my_monitoraspect;
	int S2X;
	int S3X;
	int S6X;
	int S7Y;
	int my_spu_b;
	void *my_icdsc;
	char **lang_str;
	int clearflag;
	int my_osdcolor;
    int my_film_w;
    int my_film_h;
    int my_file_mode;
    int my_file_x[4];
    int my_file_y[4];
	int my_spu_draw;
	int my_new_subid;
    int my_new_aid;
	int disable_output;
	int disable_subtitle;
	int right_osd;
	int progbar_item;
	int my_vcd_track;
} avamax_var_t;
extern avamax_var_t *avamax_var;

#define MEDIA_16_9		1
#define MONITOR_16_9	2
#define FULL_ON			4
#define ASPECT_ON		8

typedef struct _colcon_t {
    unsigned long pts;
    int top;
    int bottom;
    int start;
    int end;
    int color;
    struct _colcon_t *next;
} colcon_t;
extern int DrawingSPU;
extern colcon_t *colcon_head;
extern colcon_t *colcon_tail;
extern colcon_t *colcon_current;
extern int start_c_x;
extern int end_c_x;
extern int start_c_y;
extern int end_c_y;
extern int col_color;

extern int verbose; // defined in mplayer.c

// verbosity elevel:

// stuff from level MSGL_FATAL-MSGL_HINT should be translated.

#define MSGL_FATAL 0  // will exit/abort
#define MSGL_ERR 1    // continues
#define MSGL_WARN 2   // only warning
#define MSGL_HINT 3   // short help message
#define MSGL_INFO 4   // -quiet
#define MSGL_STATUS 5 // v=0
#define MSGL_V 6      // v=1
#define MSGL_DBG2 7   // v=2
#define MSGL_DBG3 8   // v=3
#define MSGL_DBG4 9   // v=4

// code/module:

#define MSGT_GLOBAL 0        // common player stuff errors
#define MSGT_CPLAYER 1       // console player (mplayer.c)
#define MSGT_GPLAYER 2       // gui player

#define MSGT_VO 3	       // libvo
#define MSGT_AO 4	       // libao

#define MSGT_DEMUXER 5    // demuxer.c (general stuff)
#define MSGT_DS 6         // demux stream (add/read packet etc)
#define MSGT_DEMUX 7      // fileformat-specific stuff (demux_*.c)
#define MSGT_HEADER 8     // fileformat-specific header (*header.c)

#define MSGT_AVSYNC 9     // mplayer.c timer stuff
#define MSGT_AUTOQ 10     // mplayer.c auto-quality stuff

#define MSGT_CFGPARSER 11 // cfgparser.c

#define MSGT_DECAUDIO 12  // av decoder
#define MSGT_DECVIDEO 13

#define MSGT_SEEK 14	// seeking code
#define MSGT_WIN32 15	// win32 dll stuff
#define MSGT_OPEN 16	// open.c (stream opening)
#define MSGT_DVD 17	// open.c (DVD init/read/seek)

#define MSGT_PARSEES 18	// parse_es.c (mpeg stream parser)
#define MSGT_LIRC 19	// lirc_mp.c and input lirc driver

#define MSGT_STREAM 20  // stream.c
#define MSGT_CACHE 21 	// cache2.c

#define MSGT_MENCODER 22

#define MSGT_XACODEC 23	// XAnim codecs

#define MSGT_TV 24	// TV input subsystem

#define MSGT_OSDEP 25	// OS Dependant parts (linux/ for now)

#define MSGT_SPUDEC 26	// spudec.c

#define MSGT_PLAYTREE 27    // Playtree handeling (playtree.c, playtreeparser.c)

#define MSGT_INPUT 28

#define MSGT_VFILTER 29

#define MSGT_OSD 30

#define MSGT_NETWORK 31

#define MSGT_CPUDETECT 32

#define MSGT_CODECCFG 33

#define MSGT_SWS 34

#define MSGT_VOBSUB 35
#define MSGT_SUBREADER 36

#define MSGT_AFILTER 37  // Audio filter messages

#define MSGT_MAX 64

void mp_msg_init();
void mp_msg_set_level(int verbose);
int mp_msg_test(int mod, int lev);

#include "config.h"

#ifdef TARGET_OS2
// va_start/vsnprintf seems to be broken under OS2 :(
#define mp_msg(mod,lev, fmt, args... ) do{if((lev)<=mp_msg_levels[mod]) printf( fmt, ## args );}while(0)
#define mp_dbg(mod,lev, args... ) 
#else

#ifdef USE_I18N
#include <libintl.h>
#include <locale.h>
#define mp_gettext(String) gettext(String)
#else
#define mp_gettext(String) String
#endif

void mp_msg_c( int x, const char *format, ... );

#ifdef __GNUC__
#define mp_msg(mod,lev, args... ) mp_msg_c(((mod)<<8)|(lev), ## args )

#ifdef MP_DEBUG
#define mp_dbg(mod,lev, args... ) mp_msg_c(((mod)<<8)|(lev), ## args )
#else
// these messages are only usefull for developers, disable them
#define mp_dbg(mod,lev, args... ) 
#endif
#else // not GNU C
#define mp_msg(mod,lev, ... ) mp_msg_c(((mod)<<8)|(lev), __VA_ARGS__)

#ifdef MP_DEBUG
#define mp_dbg(mod,lev, ... ) mp_msg_c(((mod)<<8)|(lev), __VA_ARGS__)
#else
// these messages are only usefull for developers, disable them
#define mp_dbg(mod,lev, ... ) 
#endif
#endif

#endif
#endif
