]> git.sesse.net Git - vlc/blob - include/vlc_common.h
* ./include/*, ./src/*: separated WIN32 #tests and UNDER_CE #tests, because
[vlc] / include / vlc_common.h
1 /*****************************************************************************
2  * common.h: common definitions
3  * Collection of useful common types and macros definitions
4  *****************************************************************************
5  * Copyright (C) 1998, 1999, 2000 VideoLAN
6  * $Id: vlc_common.h,v 1.37 2002/11/11 14:39:11 sam Exp $
7  *
8  * Authors: Samuel Hocevar <sam@via.ecp.fr>
9  *          Vincent Seguin <seguin@via.ecp.fr>
10  *          Gildas Bazin <gbazin@netcourrier.com>
11  *
12  * This program is free software; you can redistribute it and/or modify
13  * it under the terms of the GNU General Public License as published by
14  * the Free Software Foundation; either version 2 of the License, or
15  * (at your option) any later version.
16  * 
17  * This program is distributed in the hope that it will be useful,
18  * but WITHOUT ANY WARRANTY; without even the implied warranty of
19  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20  * GNU General Public License for more details.
21  *
22  * You should have received a copy of the GNU General Public License
23  * along with this program; if not, write to the Free Software
24  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
25  *****************************************************************************/
26
27 /*****************************************************************************
28  * Required vlc headers
29  *****************************************************************************/
30 #if defined( __BORLANDC__ )
31 #   undef PACKAGE
32 #endif
33
34 #include "config.h"
35
36 #if defined( __BORLANDC__ )
37 #   undef HAVE_VARIADIC_MACROS
38 #   undef HAVE_STDINT_H
39 #endif
40
41 #include "vlc_config.h"
42 #include "modules_inner.h"
43
44 /*****************************************************************************
45  * Required system headers
46  *****************************************************************************/
47 #ifdef HAVE_STRING_H
48 #   include <string.h>                                         /* strerror() */
49 #endif
50
51 #ifdef HAVE_SYS_TYPES_H
52 #   include <sys/types.h>
53 #endif
54
55 /*****************************************************************************
56  * Basic types definitions
57  *****************************************************************************/
58 #if defined( HAVE_STDINT_H )
59 #   include <stdint.h>
60 #elif defined( HAVE_INTTYPES_H )
61 #   include <inttypes.h>
62 #elif defined( SYS_CYGWIN )
63 #   include <sys/types.h>
64     /* Cygwin only defines half of these... */
65     typedef u_int8_t            uint8_t;
66     typedef u_int16_t           uint16_t;
67     typedef u_int32_t           uint32_t;
68     typedef u_int64_t           uint64_t;
69 #else
70     /* Fallback types (very x86-centric, sorry) */
71     typedef unsigned char       uint8_t;
72     typedef signed char         int8_t;
73     typedef unsigned short      uint16_t;
74     typedef signed short        int16_t;
75     typedef unsigned int        uint32_t;
76     typedef signed int          int32_t;
77 #   if defined( _MSC_VER ) \
78       || defined( UNDER_CE ) \
79       || ( defined( WIN32 ) && !defined( __MINGW32__ ) )
80     typedef unsigned __int64    uint64_t;
81     typedef signed __int64      int64_t;
82 #   else
83     typedef unsigned long long  uint64_t;
84     typedef signed long long    int64_t;
85 #   endif
86 #endif
87
88 typedef uint8_t                 byte_t;
89
90 /* ptrdiff_t definition */
91 #ifdef HAVE_STDDEF_H
92 #   include <stddef.h>
93 #else
94 #   include <malloc.h>
95 #   ifndef _PTRDIFF_T
96 #       define _PTRDIFF_T
97 /* Not portable in a 64-bit environment. */
98 typedef int                 ptrdiff_t;
99 #   endif
100 #endif
101
102 #if defined( WIN32 ) || defined( UNDER_CE )
103 typedef int                 ssize_t;
104 #endif
105
106 /* Counter for statistics and profiling */
107 typedef unsigned long       count_t;
108
109 /* DCT elements types */
110 typedef int16_t             dctelem_t;
111
112 /* Video buffer types */
113 typedef uint8_t             yuv_data_t;
114
115 /* Audio volume */
116 typedef uint16_t            audio_volume_t;
117
118 /*****************************************************************************
119  * Old types definitions
120  *****************************************************************************
121  * We still provide these types because most of the VLC code uses them
122  * instead of the C9x types. They should be removed when the transition is
123  * complete (probably in 10 years).
124  *****************************************************************************/
125 typedef uint8_t    u8;
126 typedef int8_t     s8;
127 typedef uint16_t   u16;
128 typedef int16_t    s16;
129 typedef uint32_t   u32;
130 typedef int32_t    s32;
131 typedef uint64_t   u64;
132 typedef int64_t    s64;
133
134 /*****************************************************************************
135  * mtime_t: high precision date or time interval
136  *****************************************************************************
137  * Store a high precision date or time interval. The maximum precision is the
138  * microsecond, and a 64 bits integer is used to avoid overflows (maximum
139  * time interval is then 292271 years, which should be long enough for any
140  * video). Dates are stored as microseconds since a common date (usually the
141  * epoch). Note that date and time intervals can be manipulated using regular
142  * arithmetic operators, and that no special functions are required.
143  *****************************************************************************/
144 typedef int64_t mtime_t;
145
146 /*****************************************************************************
147  * The vlc_fourcc_t type.
148  *****************************************************************************
149  * See http://www.webartz.com/fourcc/ for a very detailed list.
150  *****************************************************************************/
151 typedef uint32_t vlc_fourcc_t;
152
153 #ifdef WORDS_BIGENDIAN
154 #   define VLC_FOURCC( a, b, c, d ) \
155         ( ((uint32_t)d) | ( ((uint32_t)c) << 8 ) \
156            | ( ((uint32_t)b) << 16 ) | ( ((uint32_t)a) << 24 ) )
157 #   define VLC_TWOCC( a, b ) \
158         ( (uint16_t)(b) | ( (uint16_t)(a) << 8 ) )
159
160 #else
161 #   define VLC_FOURCC( a, b, c, d ) \
162         ( ((uint32_t)a) | ( ((uint32_t)b) << 8 ) \
163            | ( ((uint32_t)c) << 16 ) | ( ((uint32_t)d) << 24 ) )
164 #   define VLC_TWOCC( a, b ) \
165         ( (uint16_t)(a) | ( (uint16_t)(b) << 8 ) )
166
167 #endif
168
169 /*****************************************************************************
170  * Classes declaration
171  *****************************************************************************/
172
173 /* Internal types */
174 typedef struct libvlc_t libvlc_t;
175 typedef struct vlc_t vlc_t;
176 typedef struct vlc_list_t vlc_list_t;
177 typedef struct vlc_object_t vlc_object_t;
178 typedef struct variable_t variable_t;
179
180 /* Messages */
181 typedef struct msg_bank_t msg_bank_t;
182 typedef struct msg_subscription_t msg_subscription_t;
183
184 /* Playlist */
185 typedef struct playlist_t playlist_t;
186 typedef struct playlist_item_t playlist_item_t;
187
188 /* Modules */
189 typedef struct module_bank_t module_bank_t;
190 typedef struct module_t module_t;
191 typedef struct module_config_t module_config_t;
192 typedef struct module_symbols_t module_symbols_t;
193
194 /* Interface */
195 typedef struct intf_thread_t intf_thread_t;
196 typedef struct intf_sys_t intf_sys_t;
197 typedef struct intf_console_t intf_console_t;
198 typedef struct intf_msg_t intf_msg_t;
199 typedef struct intf_channel_t intf_channel_t;
200
201 /* Input */
202 typedef struct input_thread_t input_thread_t;
203 typedef struct input_channel_t input_channel_t;
204 typedef struct input_area_t input_area_t;
205 typedef struct input_buffers_t input_buffers_t;
206 typedef struct input_socket_t input_socket_t;
207 typedef struct input_info_t input_info_t;
208 typedef struct input_info_category_t input_info_category_t;
209 typedef struct access_sys_t access_sys_t;
210 typedef struct demux_sys_t demux_sys_t;
211 typedef struct es_descriptor_t es_descriptor_t;
212 typedef struct es_sys_t es_sys_t;
213 typedef struct pgrm_descriptor_t pgrm_descriptor_t;
214 typedef struct pgrm_sys_t pgrm_sys_t;
215 typedef struct stream_descriptor_t stream_descriptor_t;
216 typedef struct stream_sys_t stream_sys_t;
217
218 /* Audio */
219 typedef struct aout_instance_t aout_instance_t;
220 typedef struct aout_sys_t aout_sys_t;
221 typedef struct aout_fifo_t aout_fifo_t;
222 typedef struct aout_input_t aout_input_t;
223 typedef struct aout_buffer_t aout_buffer_t;
224 typedef struct audio_sample_format_t audio_sample_format_t;
225 typedef struct audio_date_t audio_date_t;
226
227 /* Video */
228 typedef struct vout_thread_t vout_thread_t;
229 typedef struct vout_font_t vout_font_t;
230 typedef struct vout_sys_t vout_sys_t;
231 typedef struct chroma_sys_t chroma_sys_t;
232 typedef struct picture_t picture_t;
233 typedef struct picture_sys_t picture_sys_t;
234 typedef struct picture_heap_t picture_heap_t;
235 typedef struct subpicture_t subpicture_t;
236 typedef struct subpicture_sys_t subpicture_sys_t;
237
238 /* Stream output */
239 typedef struct sout_instance_t sout_instance_t;
240 typedef struct sout_fifo_t sout_fifo_t;
241
242 /* Decoders */
243 typedef struct decoder_fifo_t decoder_fifo_t;
244
245 /* Misc */
246 typedef struct data_packet_t data_packet_t;
247 typedef struct data_buffer_t data_buffer_t;
248 typedef struct stream_position_t stream_position_t;
249 typedef struct stream_ctrl_t stream_ctrl_t;
250 typedef struct pes_packet_t pes_packet_t;
251 typedef struct bit_stream_t bit_stream_t;
252 typedef struct network_socket_t network_socket_t;
253 typedef struct iso639_lang_t iso639_lang_t;
254
255 /*****************************************************************************
256  * Variable callbacks
257  *****************************************************************************/
258 typedef int ( * vlc_callback_t ) ( vlc_object_t *,      /* variable's object */
259                                    char const *,            /* variable name */
260                                    vlc_value_t,                 /* old value */
261                                    vlc_value_t,                 /* new value */
262                                    void * );                /* callback data */
263
264 /*****************************************************************************
265  * Plug-in stuff
266  *****************************************************************************/
267 #ifndef __PLUGIN__
268 #   define VLC_EXPORT( type, name, args ) type name args
269 #else
270 #   define VLC_EXPORT( type, name, args ) struct _u_n_u_s_e_d_
271     extern module_symbols_t* p_symbols;
272 #endif
273
274 /*****************************************************************************
275  * OS-specific headers and thread types
276  *****************************************************************************/
277 #if defined( WIN32 ) || defined( UNDER_CE )
278 #   define WIN32_LEAN_AND_MEAN
279 #   include <windows.h>
280 #endif
281
282 #include "vlc_threads.h"
283
284 /*****************************************************************************
285  * Common structure members
286  *****************************************************************************/
287
288 /* VLC_COMMON_MEMBERS : members common to all basic vlc objects */
289 #define VLC_COMMON_MEMBERS                                                  \
290     int   i_object_id;                                                      \
291     int   i_object_type;                                                    \
292     char *psz_object_type;                                                  \
293     char *psz_object_name;                                                  \
294                                                                             \
295     /* Thread properties, if any */                                         \
296     vlc_bool_t   b_thread;                                                  \
297     vlc_thread_t thread_id;                                                 \
298                                                                             \
299     /* Object access lock */                                                \
300     vlc_mutex_t  object_lock;                                               \
301     vlc_cond_t   object_wait;                                               \
302                                                                             \
303     /* Object properties */                                                 \
304     volatile vlc_bool_t b_error;                    /* set by the object */ \
305     volatile vlc_bool_t b_die;                     /* set by the outside */ \
306     volatile vlc_bool_t b_dead;                     /* set by the object */ \
307     volatile vlc_bool_t b_attached;                 /* set by the object */ \
308                                                                             \
309     /* Object variables */                                                  \
310     vlc_mutex_t     var_lock;                                               \
311     int             i_vars;                                                 \
312     variable_t *    p_vars;                                                 \
313                                                                             \
314     /* Stuff related to the libvlc structure */                             \
315     libvlc_t *      p_libvlc;                        /* root of all evil */ \
316     vlc_t *         p_vlc;                     /* (root of all evil) - 1 */ \
317                                                                             \
318     volatile int    i_refcount;                           /* usage count */ \
319     vlc_object_t *  p_parent;                              /* our parent */ \
320     vlc_object_t ** pp_children;                         /* our children */ \
321     volatile int    i_children;                                             \
322                                                                             \
323     /* Private data */                                                      \
324     void *          p_private;                                              \
325                                                                             \
326     /* Just a reminder so that people don't cast garbage */                 \
327     int be_sure_to_add_VLC_COMMON_MEMBERS_to_struct;                        \
328
329 /* VLC_OBJECT: attempt at doing a clever cast */
330 #define VLC_OBJECT( x ) \
331     ((vlc_object_t *)(x))+0*(x)->be_sure_to_add_VLC_COMMON_MEMBERS_to_struct
332
333 /*****************************************************************************
334  * Macros and inline functions
335  *****************************************************************************/
336 #ifdef NTOHL_IN_SYS_PARAM_H
337 #   include <sys/param.h>
338
339 #elif !defined(WIN32) && !defined( UNDER_CE )
340 #   include <netinet/in.h>
341
342 #endif /* NTOHL_IN_SYS_PARAM_H || WIN32 */
343
344 /* CEIL: division with round to nearest greater integer */
345 #define CEIL(n, d)  ( ((n) / (d)) + ( ((n) % (d)) ? 1 : 0) )
346
347 /* PAD: PAD(n, d) = CEIL(n ,d) * d */
348 #define PAD(n, d)   ( ((n) % (d)) ? ((((n) / (d)) + 1) * (d)) : (n) )
349
350 /* __MAX and __MIN: self explanatory */
351 #ifndef __MAX
352 #   define __MAX(a, b)   ( ((a) > (b)) ? (a) : (b) )
353 #endif
354 #ifndef __MIN
355 #   define __MIN(a, b)   ( ((a) < (b)) ? (a) : (b) )
356 #endif
357
358 /* Dynamic array handling: realloc array, move data, increment position */
359 #define INSERT_ELEM( p_ar, i_oldsize, i_pos, elem )                           \
360     do                                                                        \
361     {                                                                         \
362         if( i_oldsize )                                                       \
363         {                                                                     \
364             (p_ar) = realloc( p_ar, ((i_oldsize) + 1) * sizeof( *(p_ar) ) );  \
365         }                                                                     \
366         else                                                                  \
367         {                                                                     \
368             (p_ar) = malloc( ((i_oldsize) + 1) * sizeof( *(p_ar) ) );         \
369         }                                                                     \
370         memmove( (p_ar) + (i_pos) + 1,                                        \
371                  (p_ar) + (i_pos),                                            \
372                  ((i_oldsize) - (i_pos)) * sizeof( *(p_ar) ) );               \
373         (p_ar)[i_pos] = elem;                                                 \
374         (i_oldsize)++;                                                        \
375     }                                                                         \
376     while( 0 )
377
378 #define REMOVE_ELEM( p_ar, i_oldsize, i_pos )                                 \
379     do                                                                        \
380     {                                                                         \
381         memmove( (p_ar) + (i_pos),                                            \
382                  (p_ar) + (i_pos) + 1,                                        \
383                  ((i_oldsize) - (i_pos) - 1) * sizeof( *(p_ar) ) );           \
384         if( i_oldsize > 1 )                                                   \
385         {                                                                     \
386             (p_ar) = realloc( p_ar, ((i_oldsize) - 1) * sizeof( *(p_ar) ) );  \
387         }                                                                     \
388         else                                                                  \
389         {                                                                     \
390             free( p_ar );                                                     \
391             (p_ar) = NULL;                                                    \
392         }                                                                     \
393         (i_oldsize)--;                                                        \
394     }                                                                         \
395     while( 0 )
396
397
398 /* MSB (big endian)/LSB (little endian) conversions - network order is always
399  * MSB, and should be used for both network communications and files. Note that
400  * byte orders other than little and big endians are not supported, but only
401  * the VAX seems to have such exotic properties. */
402 static inline uint16_t U16_AT( void * _p )
403 {
404     uint8_t * p = (uint8_t *)_p;
405     return ( ((uint16_t)p[0] << 8) | p[1] );
406 }
407 static inline uint32_t U32_AT( void * _p )
408 {
409     uint8_t * p = (uint8_t *)_p;
410     return ( ((uint32_t)p[0] << 24) | ((uint32_t)p[1] << 16)
411               | ((uint32_t)p[2] << 8) | p[3] );
412 }
413 static inline uint64_t U64_AT( void * _p )
414 {
415     uint8_t * p = (uint8_t *)_p;
416     return ( ((uint64_t)p[0] << 56) | ((uint64_t)p[1] << 48)
417               | ((uint64_t)p[2] << 40) | ((uint64_t)p[3] << 32)
418               | ((uint64_t)p[4] << 24) | ((uint64_t)p[5] << 16)
419               | ((uint64_t)p[6] << 8) | p[7] );
420 }
421 #if WORDS_BIGENDIAN
422 #   define hton16(i)   ( i )
423 #   define hton32(i)   ( i )
424 #   define hton64(i)   ( i )
425 #   define ntoh16(i)   ( i )
426 #   define ntoh32(i)   ( i )
427 #   define ntoh64(i)   ( i )
428 #else
429 #   define hton16(i)   U16_AT(&i)
430 #   define hton32(i)   U32_AT(&i)
431 #   define hton64(i)   U64_AT(&i)
432 #   define ntoh16(i)   U16_AT(&i)
433 #   define ntoh32(i)   U32_AT(&i)
434 #   define ntoh64(i)   U64_AT(&i)
435 #endif
436
437 /* Alignment of critical static data structures */
438 #ifdef ATTRIBUTE_ALIGNED_MAX
439 #   define ATTR_ALIGN(align) __attribute__ ((__aligned__ ((ATTRIBUTE_ALIGNED_MAX < align) ? ATTRIBUTE_ALIGNED_MAX : align)))
440 #else
441 #   define ATTR_ALIGN(align)
442 #endif
443
444 /* Alignment of critical dynamic data structure
445  *
446  * Not all platforms support memalign so we provide a vlc_memalign wrapper
447  * void *vlc_memalign( size_t align, size_t size, void **pp_orig )
448  * *pp_orig is the pointer that has to be freed afterwards.
449  */
450 #if 0
451 #ifdef HAVE_POSIX_MEMALIGN
452 #   define vlc_memalign(align,size,pp_orig) \
453     ( !posix_memalign( pp_orig, align, size ) ? *(pp_orig) : NULL )
454 #endif
455 #endif
456 #ifdef HAVE_MEMALIGN
457     /* Some systems have memalign() but no declaration for it */
458     void * memalign( size_t align, size_t size );
459
460 #   define vlc_memalign(pp_orig,align,size) \
461     ( *(pp_orig) = memalign( align, size ) )
462
463 #else /* We don't have any choice but to align manually */
464 #   define vlc_memalign(pp_orig,align,size) \
465     (( *(pp_orig) = malloc( size + align - 1 )) \
466         ? (void *)( (((unsigned long)*(pp_orig)) + (unsigned long)(align-1) ) \
467                        & (~(unsigned long)(align-1)) ) \
468         : NULL )
469
470 #endif
471
472 /* strdup/strndup (defined in src/extras/libc.c) */
473 #ifndef HAVE_STRDUP
474     char * strdup( const char *s );
475 #endif
476 #ifndef HAVE_STRNDUP
477     char * strndup( const char *s, size_t n );
478 #endif
479
480 /* atof (defined in src/extras/libc.c) */
481 #ifndef HAVE_ATOF
482     double atof( const char *nptr );
483 #endif
484
485 /* getenv - always returns NULL */
486 #ifndef HAVE_GETENV
487     char *getenv( const char *name );
488 #endif
489
490 /* strncasecmp/strcasecmp (defined in src/extras/libc.c) */
491 #ifndef HAVE_STRCASECMP
492 #   ifdef HAVE_STRICMP
493 #       define strcasecmp stricmp
494 #   else
495         int strcasecmp( const char *s1, const char *s2 );
496 #   endif
497 #endif
498
499 #ifndef HAVE_STRNCASECMP
500 #   ifdef HAVE_STRNICMP
501 #       define strncasecmp strnicmp
502 #   else
503         int strncasecmp( const char *s1, const char *s2, size_t n );
504 #   endif
505 #endif
506
507 /* Format type specifiers for 64 bits numbers */
508 #if !defined(WIN32) && !defined(UNDER_CE)
509 #   define I64Fd "%lld"
510 #   define I64Fi "%lli"
511 #   define I64Fo "%llo"
512 #   define I64Fu "%llu"
513 #   define I64Fx "%llx"
514 #   define I64FX "%llX"
515 #else
516 #   define I64Fd "%I64d"
517 #   define I64Fi "%I64i"
518 #   define I64Fo "%I64o"
519 #   define I64Fu "%I64u"
520 #   define I64Fx "%I64x"
521 #   define I64FX "%I64X"
522 #endif /* defined(WIN32)||defined(UNDER_CE) */
523
524 /* 64 bits integer constant suffix */
525 #if !defined(WIN32) && !defined(UNDER_CE)
526 #   define I64C(x)         x##LL
527 #else
528 #   define I64C(x)         x##i64
529 #endif /* defined(WIN32)||defined(UNDER_CE) */
530
531 #if defined(WIN32) && !defined(UNDER_CE)
532 /* win32, cl and icl support */
533 #   if defined( _MSC_VER ) || !defined( __MINGW32__ )
534 #       define __attribute__(x)
535 #       define __inline__      __inline
536 #       define S_IFBLK         0x3000  /* Block */
537 #       define S_ISBLK(m)      (0)
538 #       define S_ISCHR(m)      (0)
539 #       define S_ISFIFO(m)     (((m)&_S_IFMT) == _S_IFIFO)
540 #       define S_ISREG(m)      (((m)&_S_IFMT) == _S_IFREG)
541 #   endif
542
543 /* several type definitions */
544 #   if defined( __MINGW32__ )
545 #       if !defined( _OFF_T_ )
546 typedef long long _off_t;
547 typedef _off_t off_t;
548 #           define _OFF_T_
549 #       else
550 #           define off_t long long
551 #       endif
552 #   endif
553
554 #   if defined( _MSC_VER )
555 #       if !defined( _OFF_T_DEFINED )
556 typedef __int64 off_t;
557 #           define _OFF_T_DEFINED
558 #       else
559 #           define off_t __int64
560 #       endif
561 #   endif
562
563 #   if defined( __BORLANDC__ )
564 #       undef off_t
565 #       define off_t unsigned __int64
566 #   endif
567
568 #   ifndef O_NONBLOCK
569 #       define O_NONBLOCK 0
570 #   endif
571
572     /* These two are not defined in mingw32 (bug?) */
573 #   ifndef snprintf
574 #       define snprintf _snprintf
575 #   endif
576 #   ifndef vsnprintf
577 #       define vsnprintf _vsnprintf
578 #   endif
579
580 #endif
581
582 /* lseek (defined in src/extras/libc.c) */
583 #ifndef HAVE_ATOF
584     off_t lseek( int fildes, off_t offset, int whence );
585 #endif
586
587 /*****************************************************************************
588  * CPU capabilities
589  *****************************************************************************/
590 #define CPU_CAPABILITY_NONE    0
591 #define CPU_CAPABILITY_486     (1<<0)
592 #define CPU_CAPABILITY_586     (1<<1)
593 #define CPU_CAPABILITY_PPRO    (1<<2)
594 #define CPU_CAPABILITY_MMX     (1<<3)
595 #define CPU_CAPABILITY_3DNOW   (1<<4)
596 #define CPU_CAPABILITY_MMXEXT  (1<<5)
597 #define CPU_CAPABILITY_SSE     (1<<6)
598 #define CPU_CAPABILITY_ALTIVEC (1<<16)
599 #define CPU_CAPABILITY_FPU     (1<<31)
600
601 /*****************************************************************************
602  * I18n stuff
603  *****************************************************************************/
604 #if defined( ENABLE_NLS ) \
605      && ( defined(HAVE_GETTEXT) || defined(HAVE_INCLUDED_GETTEXT) )
606 #   include <libintl.h>
607 #   undef _
608 #   define _(String) dgettext (PACKAGE, String)
609 #   ifdef gettext_noop
610 #       define N_(String) gettext_noop (String)
611 #   else
612 #       define N_(String) (String)
613 #   endif
614 #elif !defined( NEED_GNOMESUPPORT_H )
615 #   define _(String) (String)
616 #   define N_(String) (String)
617 #endif
618
619 /*****************************************************************************
620  * Additional vlc stuff
621  *****************************************************************************/
622 #include "vlc_symbols.h"
623 #include "os_specific.h"
624 #include "vlc_messages.h"
625 #include "variables.h"
626 #include "vlc_objects.h"
627 #include "vlc_threads_funcs.h"
628 #include "mtime.h"
629 #include "modules.h"
630 #include "main.h"
631 #include "configuration.h"
632
633 #if defined( __BORLANDC__ )
634 #   undef PACKAGE
635 #   define PACKAGE
636 #endif
637