add: NULL,
context: main (int argc, char *argv[]){	struct options_struct options = {		/* .logFile = */            NULL,		/* .runMode = */            runMode_normal,		/* .gfxdriver = */          TFB_GFXDRIVER_SDL_PURE,		/* .gfxflags = */           0,		/* .soundDriver = */        audio_DRIVER_MIXSDL,		/* .soundFlags = */         audio_QUALITY_MEDIUM,		/* .width = */              640,		/* .height = */             480,		/* .bpp = */                16,#ifdef CONTENTDIR		/* .contentDir = */         CONTENTDIR,#elif defined (win32)		/* .contentDir = */         "../../content",#else		/* .contentDir = */         "content",#endif		/* .addons = */             NULL,		/* .numAddons = */          0,		/* .gammaSet = */           0,		/* .gamma = */              0.0f,		/* .whichMusic = */         OPT_3DO,		/* .whichCoarseScan = */    OPT_PC,		/* .whichMenu = */          OPT_PC,		/* .whichFont = */          OPT_PC,		/* .smoothScroll = */       OPT_PC,		/* .meleeScale = */         TFB_SCALE_TRILINEAR,		/* .subtitles = */          TRUE,		/* .stereoSFX = */          FALSE,		/* .musicVolumeScale = */   1.0f,		/* .sfxVolumeScale = */     1.0f,		/* .speechVolumeScale = */  1.0f,	};	int optionsResult;	optionsResult = preParseOptions(argc, argv, &options);	if (optionsResult != 0)	{		// TODO: various uninitialisations		return optionsResult;	}	if (options.logFile != NULL)	{		int i;		freopen (options.logFile, "w", stderr);		for (i = 0; i < argc; ++i)			fprintf (stderr, "argv[%d] = [%s]\n", i, argv[i]);	}	fprintf (stderr, "The Ur-Quan Masters v%d.%d%s (compiled %s %s)\n"	        "This software comes with ABSOLUTELY NO WARRANTY;\n"			"for details see the included 'COPYING' file.\n\n",			UQM_MAJOR_VERSION, UQM_MINOR_VERSION, UQM_EXTRA_VERSION,			__DATE__, __TIME__);	/* mem_init () uses mutexes.  Mutex creation cannot use	   the memory system until the memory system is rewritten	   to rely on a thread-safe allocator.	*/	TFB_PreInit ();	mem_init ();	InitThreadSystem ();	optionsResult = parseOptions(argc, argv, &options);	if (optionsResult != 0)	{		// TODO: various uninitialisations		return optionsResult;	}	if (options.runMode == runMode_usage)	{		usage(stdout);		// TODO: various uninitialisations		return EXIT_SUCCESS;	}		/* TODO: Once threading is gone, these become local variables	   again.  In the meantime, they must be global so that	   initAudio (in StarCon2Main) can see them.  initAudio needed	   to be moved there because calling AssignTask in the main	   thread doesn't work */	snddriver = options.soundDriver;	soundflags = options.soundFlags;	// Fill in global variables:	optWhichMusic = options.whichMusic;	optWhichCoarseScan = options.whichCoarseScan;	optWhichMenu = options.whichMenu;	optWhichFonts = options.whichFonts;	optSmoothScroll = options.smoothScroll;	optMeleeScale = options.meleeScale;	optSubtitles = options.subTitles;	optStereoSFX = options.stereoSFX;	musicVolumeScale = options.musicVolumeScale;	sfxVolumeScale = options.sfxVolumeScale;	speechVolumeScale = options.speechVolumeScale;	initIO();	prepareContentDir (options.contentDir, options.addons);	HFree ((void *) options.addons);	prepareConfigDir ();	prepareMeleeDir ();	prepareSaveDir ();	initTempDir();		InitTimeSystem ();	InitTaskSystem ();	GraphicsLock = CreateMutex ("Graphics",			SYNC_CLASS_TOPLEVEL | SYNC_CLASS_VIDEO);	RenderingCond = CreateCondVar ("DCQ empty",			SYNC_CLASS_TOPLEVEL | SYNC_CLASS_VIDEO);	TFB_InitGraphics (options.gfxDriver, options.gfxFlags,			options.width, options.height, options.bpp);	if (options.gammaSet)		TFB_SetGamma (options.gamma);	init_communication ();	/* TODO: Once threading is gone, restore initAudio here.	   initAudio calls AssignTask, which currently blocks on	   ProcessThreadLifecycles... */	// initAudio (snddriver, soundflags);	TFB_InitInput (TFB_INPUTDRIVER_SDL, 0);	StartThread (Starcon2Main, NULL, 1024, "Starcon2Main");	for (;;)	{		TFB_ProcessEvents ();		ProcessThreadLifecycles ();		TFB_FlushGraphics ();	}	unInitTempDir ();	uninitIO ();	exit (EXIT_SUCCESS);}