remove unneeded vgagl
[mplayer/glamo.git] / cfg-mplayer.h
blob58dd5c2fa6a38d849bccbaed5d9a9c83048c75ad
1 /*
2 * config for cfgparser
3 */
5 #include "cfg-common.h"
7 extern int noconsolecontrols;
9 #if defined(HAVE_FBDEV)||defined(HAVE_VESA)
10 extern char *monitor_hfreq_str;
11 extern char *monitor_vfreq_str;
12 extern char *monitor_dotclock_str;
13 #endif
15 #ifdef HAVE_FBDEV
16 extern char *fb_mode_cfgfile;
17 extern char *fb_mode_name;
18 #endif
19 #ifdef HAVE_DIRECTFB
20 #if DIRECTFBVERSION > 912
21 extern char *dfb_params;
22 #endif
23 #endif
24 #ifdef USE_FAKE_MONO
25 extern int fakemono; // defined in dec_audio.c
26 #endif
28 extern int volstep;
30 #ifdef HAVE_LIRC
31 extern char *lirc_configfile;
32 #endif
34 extern int vo_doublebuffering;
35 extern int vo_vsync;
36 extern int vo_fsmode;
37 extern int vo_dbpp;
38 extern int vo_directrendering;
39 extern float vo_panscan;
40 /* only used at startup (setting these values from configfile) */
41 extern int vo_gamma_brightness;
42 extern int vo_gamma_saturation;
43 extern int vo_gamma_contrast;
44 extern int vo_gamma_hue;
45 extern char *vo_geometry;
46 extern int vo_ontop;
47 extern int vo_keepaspect;
48 extern int vo_rootwin;
50 extern int opt_screen_size_x;
51 extern int opt_screen_size_y;
52 extern int fullscreen;
53 extern int vidmode;
55 #ifdef USE_OSD
56 extern int osd_level;
57 #endif
59 extern char *ao_outputfilename;
60 extern int ao_pcm_waveheader;
62 #ifdef HAVE_X11
63 extern char *mDisplayName;
64 extern int fs_layer;
65 extern int stop_xscreensaver;
66 extern char **vo_fstype_list;
67 extern int vo_nomouse_input;
68 #endif
69 extern int WinID;
71 #ifdef HAVE_MENU
72 extern int menu_startup;
73 #endif
75 #ifdef HAVE_ZR
76 extern int vo_zr_parseoption(m_option_t* conf, char *opt, char * param);
77 extern void vo_zr_revertoption(m_option_t* opt,char* pram);
78 #endif
80 #ifdef HAVE_DXR2
81 extern m_option_t dxr2_opts[];
82 #endif
84 #ifdef STREAMING_LIVE_DOT_COM
85 extern int isSDPFile;
86 extern int rtspStreamOverTCP;
87 #endif
89 #ifdef HAVE_NEW_GUI
90 extern char * skinName;
91 extern int enqueue;
92 extern int guiWinID;
93 #endif
95 #ifdef HAVE_ODIVX_POSTPROCESS
96 extern int use_old_pp;
97 #endif
99 #ifdef HAVE_XINERAMA
100 extern int xinerama_screen;
101 #endif
103 #ifdef HAVE_RTC
104 extern int nortc;
105 #endif
107 /* from libvo/aspect.c */
108 extern float monitor_aspect;
110 extern int sws_flags;
111 extern int readPPOpt(void *conf, char *arg);
112 extern void revertPPOpt(void *conf, char* opt);
113 extern char* pp_help;
115 m_option_t vd_conf[]={
116 {"help", "Use MPlayer with an appropriate video file instead of live partners to avoid vd.\n", CONF_TYPE_PRINT, CONF_NOCFG|CONF_GLOBAL, 0, 0, NULL},
117 {NULL, NULL, 0, 0, 0, 0, NULL}
121 * CONF_TYPE_FUNC_FULL :
122 * allows own implementations for passing the params
124 * the function receives parameter name and argument (if it does not start with - )
125 * useful with a conf.name like 'aa*' to parse several parameters to a function
126 * return 0 =ok, but we didn't need the param (could be the filename)
127 * return 1 =ok, we accepted the param
128 * negative values: see cfgparser.h, ERR_XXX
130 * by Folke
133 m_option_t mplayer_opts[]={
134 /* name, pointer, type, flags, min, max */
136 //---------------------- libao/libvo options ------------------------
137 {"o", "Option -o has been renamed to -vo (video-out), use -vo.\n",
138 CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL},
139 {"vo", &video_driver_list, CONF_TYPE_STRING_LIST, 0, 0, 0, NULL},
140 {"ao", &audio_driver_list, CONF_TYPE_STRING_LIST, 0, 0, 0, NULL},
141 {"fixed-vo", &fixed_vo, CONF_TYPE_FLAG,CONF_GLOBAL , 0, 1, NULL},
142 {"nofixed-vo", &fixed_vo, CONF_TYPE_FLAG,CONF_GLOBAL, 0, 0, NULL},
143 {"ontop", &vo_ontop, CONF_TYPE_FLAG, 0, 0, 1, NULL},
144 {"noontop", &vo_ontop, CONF_TYPE_FLAG, 0, 1, 0, NULL},
145 {"rootwin", &vo_rootwin, CONF_TYPE_FLAG, 0, 0, 1, NULL},
147 {"aop", "-aop is deprecated, use -af instead.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL},
148 {"dsp", "Use -ao oss:dsp_path.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL},
149 {"mixer", &mixer_device, CONF_TYPE_STRING, 0, 0, 0, NULL},
150 {"mixer-channel", &mixer_channel, CONF_TYPE_STRING, 0, 0, 0, NULL},
151 {"softvol", &soft_vol, CONF_TYPE_FLAG, 0, 0, 1, NULL},
152 {"nosoftvol", &soft_vol, CONF_TYPE_FLAG, 0, 1, 0, NULL},
153 {"softvol-max", &soft_vol_max, CONF_TYPE_FLOAT, CONF_RANGE, 10, 10000, NULL},
154 {"volstep", &volstep, CONF_TYPE_INT, CONF_RANGE, 0, 100, NULL},
155 {"master", "Option -master has been removed, use -af volume instead.\n", CONF_TYPE_PRINT, 0, 0, 0, NULL},
156 // override audio buffer size (used only by -ao oss, anyway obsolete...)
157 {"abs", &ao_data.buffersize, CONF_TYPE_INT, CONF_MIN, 0, 0, NULL},
159 // -ao pcm options:
160 {"aofile", "-aofile is deprecated. Use -ao pcm:file=<filename> instead.\n", CONF_TYPE_PRINT, 0, 0, 0, NULL},
161 {"waveheader", "-waveheader is deprecated. Use -ao pcm:waveheader instead.\n", CONF_TYPE_PRINT, 0, 0, 1, NULL},
162 {"nowaveheader", "-nowaveheader is deprecated. Use -ao pcm:nowaveheader instead.\n", CONF_TYPE_PRINT, 0, 1, 0, NULL},
164 {"alsa", "-alsa has been removed. Remove it from your config file.\n",
165 CONF_TYPE_PRINT, 0, 0, 0, NULL},
166 {"noalsa", "-noalsa has been removed. Remove it from your config file.\n",
167 CONF_TYPE_PRINT, 0, 0, 0, NULL},
168 #ifdef USE_EDL
169 {"edlout", &edl_output_filename, CONF_TYPE_STRING, 0, 0, 0, NULL},
170 #else
171 {"edlout", "MPlayer was compiled without EDL support.\n", CONF_TYPE_PRINT, 0, 0, 0, NULL},
172 #endif
174 #ifdef HAVE_X11
175 {"display", &mDisplayName, CONF_TYPE_STRING, 0, 0, 0, NULL},
176 #endif
178 // -vo png only:
179 #ifdef HAVE_PNG
180 {"z", "-z is replaced by -vo png:z=<0-9>\n", CONF_TYPE_PRINT, 0, 0, 0, NULL},
181 #endif
182 // -vo jpeg only:
183 #ifdef HAVE_JPEG
184 {"jpeg", "-jpeg is deprecated. Use -vo jpeg:options instead.\n",
185 CONF_TYPE_PRINT, 0, 0, 0, NULL},
186 #endif
187 // -vo sdl only:
188 {"sdl", "Use -vo sdl:driver=<driver> instead of -vo sdl -sdl driver.\n",
189 CONF_TYPE_PRINT, 0, 0, 0, NULL},
190 {"noxv", "-noxv is deprecated. Use -vo sdl:nohwaccel instead.\n", CONF_TYPE_PRINT, 0, 0, 0, NULL},
191 {"forcexv", "-forcexv is deprecated. Use -vo sdl:forcexv instead.\n", CONF_TYPE_PRINT, 0, 0, 0, NULL},
192 // -ao sdl only:
193 {"sdla", "Use -ao sdl:driver instead of -ao sdl -sdla driver.\n",
194 CONF_TYPE_PRINT, 0, 0, 0, NULL},
196 #if defined(HAVE_FBDEV)||defined(HAVE_VESA)
197 {"monitor-hfreq", &monitor_hfreq_str, CONF_TYPE_STRING, 0, 0, 0, NULL},
198 {"monitor-vfreq", &monitor_vfreq_str, CONF_TYPE_STRING, 0, 0, 0, NULL},
199 {"monitor-dotclock", &monitor_dotclock_str, CONF_TYPE_STRING, 0, 0, 0, NULL},
200 #endif
202 #ifdef HAVE_FBDEV
203 {"fbmode", &fb_mode_name, CONF_TYPE_STRING, 0, 0, 0, NULL},
204 {"fbmodeconfig", &fb_mode_cfgfile, CONF_TYPE_STRING, 0, 0, 0, NULL},
205 #endif
206 #ifdef HAVE_DIRECTFB
207 #if DIRECTFBVERSION > 912
208 {"dfbopts", "-dfbopts is deprecated, use -vf directfb:dfbopts=... instead\n", CONF_TYPE_PRINT, 0, 0, 0, NULL},
209 #endif
210 #endif
212 // force window width/height or resolution (with -vm)
213 {"x", &opt_screen_size_x, CONF_TYPE_INT, CONF_RANGE, 0, 4096, NULL},
214 {"y", &opt_screen_size_y, CONF_TYPE_INT, CONF_RANGE, 0, 4096, NULL},
215 // set screen dimensions (when not detectable or virtual!=visible)
216 {"screenw", &vo_screenwidth, CONF_TYPE_INT, CONF_RANGE|CONF_OLD, 0, 4096, NULL},
217 {"screenh", &vo_screenheight, CONF_TYPE_INT, CONF_RANGE|CONF_OLD, 0, 4096, NULL},
218 // Geometry string
219 {"geometry", &vo_geometry, CONF_TYPE_STRING, 0, 0, 0, NULL},
220 // set aspect ratio of monitor - useful for 16:9 TVout
221 {"monitoraspect", &monitor_aspect, CONF_TYPE_FLOAT, CONF_RANGE, 0.2, 9.0, NULL},
222 // video mode switching: (x11,xv,dga)
223 {"vm", &vidmode, CONF_TYPE_FLAG, 0, 0, 1, NULL},
224 {"novm", &vidmode, CONF_TYPE_FLAG, 0, 1, 0, NULL},
225 // start in fullscreen mode:
226 {"fs", &fullscreen, CONF_TYPE_FLAG, 0, 0, 1, NULL},
227 {"nofs", &fullscreen, CONF_TYPE_FLAG, 0, 1, 0, NULL},
228 // set fullscreen switch method (workaround for buggy WMs)
229 {"fsmode", "-fsmode is obsolete, avoid it and use -fstype instead.\nIf you really want it, try -fsmode-dontuse, but don't report bugs!\n", CONF_TYPE_PRINT, CONF_RANGE, 0, 31, NULL},
230 {"fsmode-dontuse", &vo_fsmode, CONF_TYPE_INT, CONF_RANGE, 0, 31, NULL},
231 // set bpp (x11+vm, dga, fbdev, vesa, svga?)
232 {"bpp", &vo_dbpp, CONF_TYPE_INT, CONF_RANGE, 0, 32, NULL},
233 {"colorkey", &vo_colorkey, CONF_TYPE_INT, 0, 0, 0, NULL},
234 {"nocolorkey", &vo_colorkey, CONF_TYPE_FLAG, 0, 0, 0x1000000, NULL},
235 // double buffering: (mga/xmga, xv, vidix, vesa, fbdev)
236 {"double", &vo_doublebuffering, CONF_TYPE_FLAG, 0, 0, 1, NULL},
237 {"nodouble", &vo_doublebuffering, CONF_TYPE_FLAG, 0, 1, 0, NULL},
238 // wait for v-sync (vesa)
239 {"vsync", &vo_vsync, CONF_TYPE_FLAG, 0, 0, 1, NULL},
240 {"novsync", &vo_vsync, CONF_TYPE_FLAG, 0, 1, 0, NULL},
241 {"panscan", &vo_panscan, CONF_TYPE_FLOAT, CONF_RANGE, 0.0, 1.0, NULL},
243 {"grabpointer", &vo_grabpointer, CONF_TYPE_FLAG, 0, 0, 1, NULL},
244 {"nograbpointer", &vo_grabpointer, CONF_TYPE_FLAG, 0, 1, 0, NULL},
246 {"adapter", &vo_adapter_num, CONF_TYPE_INT, CONF_RANGE, 0, 5, NULL},
247 {"refreshrate",&vo_refresh_rate,CONF_TYPE_INT,CONF_RANGE, 0,100, NULL},
248 {"wid", &WinID, CONF_TYPE_INT, 0, 0, 0, NULL},
249 #ifdef HAVE_X11
250 // x11,xv,xmga,xvidix
251 {"icelayer", "-icelayer is obsolete. Use -fstype layer:<number> instead.\n", CONF_TYPE_PRINT, 0, 0, 0, NULL},
252 {"stop-xscreensaver", &stop_xscreensaver, CONF_TYPE_FLAG, 0, 0, 1, NULL},
253 {"nostop-xscreensaver", &stop_xscreensaver, CONF_TYPE_FLAG, 0, 1, 0, NULL},
254 {"stop_xscreensaver", "Use -stop-xscreensaver instead, options with _ have been obsoleted.\n", CONF_TYPE_PRINT, 0, 0, 0, NULL},
255 {"fstype", &vo_fstype_list, CONF_TYPE_STRING_LIST, 0, 0, 0, NULL},
256 {"nomouseinput", &vo_nomouse_input, CONF_TYPE_FLAG,0,0,-1,NULL},
257 #endif
259 #ifdef HAVE_XINERAMA
260 {"xineramascreen", &xinerama_screen, CONF_TYPE_INT, CONF_RANGE, 0, 32, NULL},
261 #endif
263 {"brightness",&vo_gamma_brightness, CONF_TYPE_INT, CONF_RANGE, -100, 100, NULL},
264 {"saturation",&vo_gamma_saturation, CONF_TYPE_INT, CONF_RANGE, -100, 100, NULL},
265 {"contrast",&vo_gamma_contrast, CONF_TYPE_INT, CONF_RANGE, -100, 100, NULL},
266 {"hue",&vo_gamma_hue, CONF_TYPE_INT, CONF_RANGE, -100, 100, NULL},
267 {"keepaspect", &vo_keepaspect, CONF_TYPE_FLAG, 0, 0, 1, NULL},
268 {"nokeepaspect", &vo_keepaspect, CONF_TYPE_FLAG, 0, 1, 0, NULL},
270 // direct rendering (decoding to video out buffer)
271 {"dr", &vo_directrendering, CONF_TYPE_FLAG, 0, 0, 1, NULL},
272 {"nodr", &vo_directrendering, CONF_TYPE_FLAG, 0, 1, 0, NULL},
273 {"vaa_dr", "-vaa_dr is obsolete, use -dr.\n", CONF_TYPE_PRINT, 0, 0, 0, NULL},
274 {"vaa_nodr", "-vaa_nodr is obsolete, use -nodr.\n", CONF_TYPE_PRINT, 0, 0, 0, NULL},
276 #ifdef HAVE_AA
277 // -vo aa
278 {"aa*", "-aa* is deprecated. Use -vo aa:suboption instead.\n", CONF_TYPE_PRINT, 0, 0, 0, NULL},
279 #endif
281 #ifdef HAVE_ZR
282 // -vo zr
283 {"zr*", vo_zr_parseoption, CONF_TYPE_FUNC_FULL, 0, 0, 0, &vo_zr_revertoption },
284 #endif
286 #ifdef HAVE_DXR2
287 {"dxr2", &dxr2_opts, CONF_TYPE_SUBCONFIG, 0, 0, 0, NULL},
288 #endif
290 #ifdef STREAMING_LIVE_DOT_COM
291 {"sdp", "-sdp is obsolete, use sdp://file instead.\n", CONF_TYPE_PRINT, 0, 0, 0, NULL},
292 // -rtsp-stream-over-tcp option, specifying TCP streaming of RTP/RTCP
293 {"rtsp-stream-over-tcp", &rtspStreamOverTCP, CONF_TYPE_FLAG, 0, 0, 1, NULL},
294 #else
295 {"rtsp-stream-over-tcp", "RTSP support requires the \"LIVE.COM Streaming Media\" libraries.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL},
296 #endif
298 //---------------------- mplayer-only options ------------------------
300 #ifdef CRASH_DEBUG
301 {"crash-debug", &crash_debug, CONF_TYPE_FLAG, CONF_GLOBAL, 0, 1, NULL},
302 {"nocrash-debug", &crash_debug, CONF_TYPE_FLAG, CONF_GLOBAL, 1, 0, NULL},
303 #endif
304 {"osdlevel", &osd_level, CONF_TYPE_INT, CONF_RANGE, 0, 3, NULL},
305 #ifdef HAVE_MENU
306 {"menu", &use_menu, CONF_TYPE_FLAG, CONF_GLOBAL, 0, 1, NULL},
307 {"nomenu", &use_menu, CONF_TYPE_FLAG, CONF_GLOBAL, 1, 0, NULL},
308 {"menu-root", &menu_root, CONF_TYPE_STRING, CONF_GLOBAL, 0, 0, NULL},
309 {"menu-cfg", &menu_cfg, CONF_TYPE_STRING, CONF_GLOBAL, 0, 0, NULL},
310 {"menu-startup", &menu_startup, CONF_TYPE_FLAG, CONF_GLOBAL, 0, 1, NULL},
311 #else
312 {"menu", "OSD menu support was not compiled in.\n", CONF_TYPE_PRINT,0, 0, 0, NULL},
313 #endif
315 // these should be moved to -common, and supported in MEncoder
316 {"vobsub", &vobsub_name, CONF_TYPE_STRING, 0, 0, 0, NULL},
317 {"vobsubid", &vobsub_id, CONF_TYPE_INT, CONF_RANGE, 0, 31, NULL},
319 {"sstep", &step_sec, CONF_TYPE_INT, CONF_MIN, 0, 0, NULL},
321 {"framedrop", &frame_dropping, CONF_TYPE_FLAG, 0, 0, 1, NULL},
322 {"hardframedrop", &frame_dropping, CONF_TYPE_FLAG, 0, 0, 2, NULL},
323 {"noframedrop", &frame_dropping, CONF_TYPE_FLAG, 0, 1, 0, NULL},
325 {"autoq", &auto_quality, CONF_TYPE_INT, CONF_RANGE, 0, 100, NULL},
327 {"benchmark", &benchmark, CONF_TYPE_FLAG, 0, 0, 1, NULL},
329 // dump some stream out instead of playing the file
330 // this really should be in MEncoder instead of MPlayer... -> TODO
331 {"dumpfile", &stream_dump_name, CONF_TYPE_STRING, 0, 0, 0, NULL},
332 {"dumpaudio", &stream_dump_type, CONF_TYPE_FLAG, 0, 0, 1, NULL},
333 {"dumpvideo", &stream_dump_type, CONF_TYPE_FLAG, 0, 0, 2, NULL},
334 {"dumpsub", &stream_dump_type, CONF_TYPE_FLAG, 0, 0, 3, NULL},
335 {"dumpmpsub", &stream_dump_type, CONF_TYPE_FLAG, 0, 0, 4, NULL},
336 {"dumpstream", &stream_dump_type, CONF_TYPE_FLAG, 0, 0, 5, NULL},
337 {"dumpsrtsub", &stream_dump_type, CONF_TYPE_FLAG, 0, 0, 6, NULL},
338 {"dumpmicrodvdsub", &stream_dump_type, CONF_TYPE_FLAG, 0, 0, 7, NULL},
339 {"dumpjacosub", &stream_dump_type, CONF_TYPE_FLAG, 0, 0, 8, NULL},
340 {"dumpsami", &stream_dump_type, CONF_TYPE_FLAG, 0, 0, 9, NULL},
342 #ifdef HAVE_LIRC
343 {"lircconf", &lirc_configfile, CONF_TYPE_STRING, CONF_GLOBAL, 0, 0, NULL},
344 #endif
346 {"gui", "Please remove gui=yes from your config file. Run gmplayer if you want the GUI.\n", CONF_TYPE_PRINT, 0, 0, 0, NULL},
347 // {"gui", &use_gui, CONF_TYPE_FLAG, CONF_GLOBAL|CONF_NOCMD, 0, 1, NULL},
348 // {"nogui", &use_gui, CONF_TYPE_FLAG, CONF_GLOBAL, 1, 0, NULL},
350 #ifdef HAVE_NEW_GUI
351 {"skin", &skinName, CONF_TYPE_STRING, CONF_GLOBAL, 0, 0, NULL},
352 {"enqueue", &enqueue, CONF_TYPE_FLAG, 0, 0, 1, NULL},
353 {"noenqueue", &enqueue, CONF_TYPE_FLAG, 0, 0, 0, NULL},
354 {"guiwid", &guiWinID, CONF_TYPE_INT, 0, 0, 0, NULL},
355 #endif
357 {"noloop", &loop_times, CONF_TYPE_FLAG, 0, 0, -1, NULL},
358 {"loop", &loop_times, CONF_TYPE_INT, CONF_RANGE, -1, 10000, NULL},
359 {"playlist", NULL, CONF_TYPE_STRING, 0, 0, 0, NULL},
361 // a-v sync stuff:
362 {"noautosync", &autosync, CONF_TYPE_FLAG, 0, 0, -1, NULL},
363 {"autosync", &autosync, CONF_TYPE_INT, CONF_RANGE, 0, 10000, NULL},
364 // {"dapsync", &dapsync, CONF_TYPE_FLAG, 0, 0, 1, NULL},
365 // {"nodapsync", &dapsync, CONF_TYPE_FLAG, 0, 1, 0, NULL},
367 {"softsleep", &softsleep, CONF_TYPE_FLAG, 0, 0, 1, NULL},
368 #ifdef HAVE_RTC
369 {"nortc", &nortc, CONF_TYPE_FLAG, 0, 0, 1, NULL},
370 {"rtc", &nortc, CONF_TYPE_FLAG, 0, 0, 0, NULL},
371 {"rtc-device", &rtc_device, CONF_TYPE_STRING, 0, 0, 0, NULL},
372 #endif
374 {"slave", &slave_mode, CONF_TYPE_FLAG,CONF_GLOBAL , 0, 1, NULL},
375 {"use-stdin", "-use-stdin has been renamed to -noconsolecontrols, use that instead.", CONF_TYPE_PRINT, 0, 0, 0, NULL},
376 {"key-fifo-size", &key_fifo_size, CONF_TYPE_INT, CONF_RANGE, 2, 65000, NULL},
377 {"noconsolecontrols", &noconsolecontrols, CONF_TYPE_FLAG, CONF_GLOBAL, 0, 1, NULL},
378 {"consolecontrols", &noconsolecontrols, CONF_TYPE_FLAG, CONF_GLOBAL, 0, 0, NULL},
380 #define MAIN_CONF
381 #include "cfg-common.h"
382 #undef MAIN_CONF
384 {"identify", &identify, CONF_TYPE_FLAG, CONF_GLOBAL, 0, 1, NULL},
385 {"really-quiet", &verbose, CONF_TYPE_FLAG, CONF_GLOBAL, 0, -10, NULL},
386 {"-help", help_text, CONF_TYPE_PRINT, CONF_NOCFG|CONF_GLOBAL, 0, 0, NULL},
387 {"help", help_text, CONF_TYPE_PRINT, CONF_NOCFG|CONF_GLOBAL, 0, 0, NULL},
388 {"h", help_text, CONF_TYPE_PRINT, CONF_NOCFG|CONF_GLOBAL, 0, 0, NULL},
390 {"vd", vd_conf, CONF_TYPE_SUBCONFIG, 0, 0, 0, NULL},
391 {NULL, NULL, 0, 0, 0, 0, NULL}