/*	This file controls the visibility of various error messages and groups of error
	messages, or “message classes”. It can be selectively overridden using a separate
	logcontrol.plist file in your AddOns folder, or a dictionary called “logging-enable” in
	Oolite’s preferences.
	
	Classes which are related, but not hierarchically, can be controlled using metaclasses, 
	whose names start with a $. See $error etc. below for examples.
	
	Log output can be modified using the following preference keys:
		logging-show-class
		logging-show-function
		logging-show-file-and-line
		logging-echo-to-stderr
	
	“logging-show-class” defaults to YES. The others default to NO.
	“logging-echo-to-stderr” causes log information to be printed to the standard error
	file in addition to the log file.
*/


{
	/*** Special message classes ***/
	_default								= yes;					// Fallback value for otherwise undefined classes. Must be yes or no.
	// _override							= yes;					// Use to force display of all messages (or suppress all messages). Must be yes or no.
	
	
	/*** Metaclasses ***/
	$aiError								= $scriptError;
	$entityState							= no;
	$error									= yes;					// Most errors, ranging from minor to major. Should probably always be enabled.
	$scriptDebugOn							= no;					// This metaclass is set by the debugOn and debugOff script actions.
	$scriptError							= $error;
	$shaderDebugOn							= no;					// Enabled by 's' key while paused, disabled by 'n' while paused.
	$shaderError							= $error;
	$troubleShootingDump					= yes;
	
	
	/*** Common programming problems ***/
	general.error							= $error;
	general.error.subclassResponsibility	= inherit;
	general.error.parameterError			= inherit;
	general.error.deprecatedMethod			= inherit;
	general.error.inconsistentState			= inherit;
	
	
	exception = yes;
	
	
	files.notFound							= $error;				// Failure to load a file.
	files.notLoaded							= $error;				// A file should have been loaded at some earlier point, but wasn’t.
	
	
	/*** Old-style logging calls ***/
	unclassified							= inherit;
	
	
	/*** Module-specific message classes ***/
	ai										= yes;					// AI messages are sent if a ship's reportAIMessages property is set, for instance through the JavaScript console.
	ai.message.receive						= inherit;
	ai.takeAction							= inherit;
	ai.takeAction.noAction					= inherit;
	ai.takeAction.orphaned					= $aiError;
	ai.takeAction.debugMessage				= inherit;
	ai.takeAction.badSelector				= inherit;
	ai.pop									= inherit;
	ai.error.recursion						= $aiError;
	ai.setTakeOffFromPlanet.noPlanet		= $aiError;
	ai.suggestEscort						= inherit;
	ai.suggestEscort.refused				= inherit;
	ai.rollD.invalidValue					= $aiError;
	ai.syntax.setCoordinates				= $aiError;
	ai.scanForNearestShipMatchingPredicate.compile.failed = $aiError;
	ai.invalidFormat						= $aiError;
	ai.invalidFormat.state					= inherit;
	ai.invalidFormat.handler				= inherit;
	ai.invalidFormat.action					= inherit;
	ai.unpermittedMethod					= $aiError;
	ai.load									= no;
	ai.invalid.notAStation					= $aiError;				// Warning when station AI message is used on non-station.
	
	
	beacon.list								= $scriptDebugOn;
	beacon.list.flightTraining				= inherit;
	
	
	character								= $error;
	character.load.unknownSystem			= inherit;
	
	
	$dataCacheStatus = yes;
	$dataCacheError = $error;
	$dataCacheDebug = no;
	dataCache.found							= no;	// $dataCacheStatus;	// Generally redundant since it will be folllowed by .upToDate or .rebuild.*
	dataCache.upToDate						= $dataCacheStatus;
	dataCache.notFound						= $dataCacheError;
	dataCache.rebuild						= $dataCacheStatus;
	dataCache.rebuild.pathsChanged			= inherit;
	dataCache.rebuild.datesChanged			= inherit;
	dataCache.rebuild.explicitFlush			= inherit;
	dataCache.removedOld					= $dataCacheStatus;
	dataCache.write.success					= $dataCacheStatus;
	dataCache.write.buildPath.failed		= $dataCacheError;
	dataCache.write.failed					= $dataCacheError;
	dataCache.write.serialize.failed		= $dataCacheError;
	dataCache.retrieve.success				= $dataCacheDebug;
	dataCache.retrieve.failed				= $dataCacheDebug;
	dataCache.set.success					= $dataCacheDebug;
	dataCache.set.failed					= $dataCacheError;
	dataCache.remove.success				= $dataCacheDebug;
	dataCache.clear.success					= $dataCacheDebug;
	dataCache.prune							= $dataCacheDebug;
	
	
	display.modes.noneFound					= $error;
	display.context.create.failed			= $error;
	display.mode.found						= no;
	display.mode.found.failed				= $error;
	display.mode.list						= no;
	display.mode.list.none					= $error;
	display.mode.list.native				= yes;
	display.mode.list.native.failed			= $error;
	display.mode.switch.failed				= $error;
	display.mode.unknown					= $error;
	display.initGL							= no;
	
	
	$linkedListError						= $error;
	entity.behaviour.changed				= $entityState;
	entity.linkedList						= $scriptDebugOn;			// Management/verification of the lists used to track the relative position of entities.
	entity.linkedList.add					= inherit;
	entity.linkedList.add.error				= $linkedListError;
	entity.linkedList.remove				= inherit;
	entity.linkedList.remove.error			= $linkedListError;
	entity.linkedList.verify				= no;	//$linkedListError;	// Non-fatal errors that look scary.
	entity.linkedList.verify.error			= inherit;
	entity.linkedList.verify.rebuild		= inherit;
	entity.linkedList.update.error			= $linkedListError;
	
	
	equip.buy.mounted						= no;
	equip.buy.mounted.failed				= $scriptError;
	
	
	gui.reset								= no;
	
	
	input.keyMapping						= no;
	input.keyMapping.codeOutOfRange			= inherit;
	input.keyMapping.keyPress				= no;
	input.keyMapping.keyPress.keyDown		= inherit;
	input.keyMapping.keyPress.keyUp			= inherit;
	
	
	joystickHandler.init					= yes;
	
	
	mesh.load.error							= $error;
	mesh.load.error.fileNotFound			= inherit;
	mesh.load.error.tooManyVertices			= inherit;
	mesh.load.error.tooManyFaces			= inherit;
	mesh.load.octree.size					= no;
	
	
	oxp.versionMismatch						= $error;
	
	
	player.ship								= no;
	player.ship.damage						= no;
	
	$plistError								= $error;
	plist.parse.foundation.failed			= $plistError;
	plist.wrongType							= $plistError;
	plist.homebrew.badEncoding				= $plistError;
	plist.homebrew.exception				= $plistError;
	plist.homebrew.parseError				= $plistError;
	plist.homebrew.parseWarning				= $plistError;
	plist.homebrew.tokenize.trace			= no;					// Log details of first stage of homebrew parsing. Extremely verbose!
	plist.homebrew.interpret.trace			= no;					// Log details of second stage of homebrew parsing. Also extremely verbose!
	plist.homebrew.success					= yes;
	
	
	rendering.opengl.error					= no;					// Test for and display OpenGL errors
	rendering.opengl.version				= $troubleShootingDump;	// Display renderer version information at startup
	rendering.opengl.extensions				= $troubleShootingDump;	// List OpenGL extensions at startup
	rendering.opengl.shader.support			= $troubleShootingDump;	// Messages about factors influencing availability of OpenGL shaders
	rendering.opengl.stateDump				= yes;					// Dump of OpenGL state (debug tool, currently unused)
	rendering.opengl.shader.uniform			= $shaderDebugOn;
	
	
	resourceManager.foundFile				= off;					// Tells you where all assets (models, textures, sounds) are found. Very verbose!
	
	
	save.failed								= yes;
	save.success							= no;
	quickSave.failed						= yes;
	load.failed								= yes;
	
	
	setup.ship.badEntry.subentities			= inherit;
	
	
	script.addShips.failed					= $scriptError;
	script.missionDescription				= $scriptError;
	script.missionDescription.noMissionText	= inherit;
	script.missionDescription.noMissionKey	= inherit;
	
	script.debug							= $scriptDebugOn;
	script.debug.message					= inherit;				// debugMessage: script action
	script.debug.onOff						= inherit;				// debugOn/debugOff script actions
	script.debug.processSceneString.addScene = inherit;
	script.debug.processSceneString.addModel = inherit;
	script.debug.processSceneString.addMiniPlanet = inherit;
	script.debug.processSceneString.addBillboard = inherit;
	script.debug.setSunNovaIn				= inherit;
	
	script.debug.note						= inherit;
	script.debug.note.awardCargo			= inherit;
	script.debug.note.removeAllCargo		= inherit;
	script.debug.note.useSpecialCargo		= inherit;
	script.debug.note.addShips				= inherit;
	script.debug.note.set					= inherit;
	script.debug.note.showShipyardModel		= inherit;
	script.debug.note.showShipModel			= inherit;
	script.debug.note.setFuelLeak			= inherit;
	script.debug.note.addPlanet				= inherit;
	script.debug.note.replaceVariablesInString = inherit;
	script.debug.note.processSceneString	= inherit;
	script.debug.note.testCondition			= no;
	
	script.debug.trace						= off;					// Trace messages are very verbose, printing at least one message per script action. They are not available at all in release versions.
	script.debug.trace.scriptAction			= inherit;				// Messages for each legacy script action executed.
	script.debug.trace.testCondition		= inherit;				// Messages for each legacy script condition evaluated.
	script.debug.trace.testCondition.checkingVariable = inherit;	// Messages for tests of mission/local variables in script conditions.
	script.debug.trace.testCondition.testValues	= inherit;			// Messages for string and number comparisons.
	script.debug.trace.testCondition.oneOf	= inherit;				// Messages for "oneof" tests.
	
	script.debug.syntax						= $scriptError;			// Messages relating to script formatting
	script.debug.syntax.badConditional		= inherit;
	script.debug.syntax.badComparison		= inherit;
	script.debug.syntax.action				= inherit;
	script.debug.syntax.action.noneSpecified = inherit;
	script.debug.syntax.action.badSelector	= inherit;
	script.debug.syntax.action.badElement	= inherit;
	script.debug.syntax.scriptCondition.noneSpecified = inherit;
	script.debug.syntax.setPlanetInfo		= inherit;
	script.debug.syntax.awardCargo			= inherit;
	script.debug.syntax.messageShipAIs		= inherit;
	script.debug.syntax.addShips			= inherit;
	script.debug.syntax.set					= inherit;
	script.debug.syntax.reset				= inherit;
	script.debug.syntax.subtract			= inherit;
	
	script.error							= $scriptError;
	script.error.removeAllCargo.notDocked	= inherit;
	script.error.addPlanet.keyNotFound		= inherit;
	script.error.addPlanet.noPosition		= inherit;
	script.error.exception					= inherit;
	
	script.javaScript.load.success			= no;
	script.javaScript.load.failed			= $scriptError;
	script.javaScript.init.success			= no;
	script.javaScript.init.error			= $error;				// Fatal start-up error
	script.javaScript.call.badSelector		= $scriptError;
	script.javaScript.error					= $scriptError;
	script.javaScript.exception				= $scriptError;
	script.javaScript.warning				= $scriptError;
	script.javaScript.badParameter			= $scriptError;
	script.javaScript.context.create		= no;
	
	script.load								= no;
	script.load.badName						= $scriptError;
	script.load.notFound					= $scriptError;
	script.load.parseOK						= inherit;
	script.load.unnamed						= $scriptError;
	script.load.exception					= $error;
	script.load.world.listAll				= $troubleShootingDump;	// List names and versions of all loaded world scripts at startup.
	
	script.plist.run.badTarget				= $error;
	
	script.trace							= no;
	script.trace.runWorld					= inherit;
	script.trace.plist.run					= inherit;
	script.trace.javaScript.call			= inherit;				// Prints selector and parameter string on Player.call()
	
	script.deprecated.scriptActionOnTarget	= $scriptError;			// Warning not to use scriptActionOnTarget:
	
	script.unpermittedMethod				= $scriptError;
	
	
	sdl										= no;
	sdl.init.failed							= $error;
	sdl.init.audio.failed					= $error;
	
	
	searchPaths.dumpAll						= $troubleShootingDump;
	
	
	$shaderDebug							= $shaderDebugOn;
	$shaderError							= $error;
	shader.load.noShader					= $error;
	shader.uniform							= $shaderDebug;
	shader.uniform.set						= inherit;				// Successfully set a uniform.
	shader.uniform.unSet					= inherit;				// A uniform went unset or was cleared (either because there was no matching uniform in the shader, or the new uniform could not be set up).
	shader.uniform.badDescription			= inherit;				// A uniform specified in shipdata.plist could not be set up, because the configuration could not be understood.
	shader.uniform.bind.failed				= inherit;				// Problem setting up uniform bound to an object property.
	shader.uniform.unpermittedMethod		= $shaderError;
	shader.vessel.init						= $shaderDebug;
	shader.compile.vertex.failure			= $shaderError;
	shader.compile.fragment.failure			= $shaderError;
	shader.link.failure						= $shaderError;
	
	
	ship.noPrimaryRole						= no;
	ship.escort								= no;
	ship.escort.accept						= inherit;
	ship.escort.reject						= inherit;
	
	shipData.load.shipyard.unknown			= yes;					// Warning for when shipyard.plist entries do not have matching shipdata.plist entry.
	shipData.load.begin						= yes;
	shipData.load.done						= no;
	shipData.load.error						= $error;
	shipData.load.warning					= $error;
	shipData.translateSubentity				= no;
	
	
	shipRegistry.selection.profile			= no;
	
	
	sky.setup								= no;
	
	
	$soundError								= $error;
	$soundDebug								= no;
	$soundDebugVerbose						= $soundDebug;
	sound.channel.cleanup.success			= $soundDebugVerbose;
	sound.channel.cleanup.failed			= $soundError;
	sound.channel.cleanup.failed.broken		= inherit;
	sound.channel.cleanup.failed.badState	= inherit;
	sound.channel.machPortError				= $soundError;
	sound.customSounds						= $soundDebug;
	sound.customSounds.recursion			= $soundError;			// Circular dependency in customsounds.plist, e.g. [foo] = [bar], [bar] = [foo].
	sound.initialization					= $soundError;
	sound.initialization.error				= inherit;
	sound.load.success						= $soundDebug;
	sound.load.failed						= $soundError;
	sound.mixer.outOfChannels				= $soundError;
	sound.mixer.inspector.loadFailed		= $soundError;
	sound.mixer.replacingBrokenChannel		= $soundDebug;
	sound.mixer.failedToConnectChannel		= $soundError;
	sound.play.success						= $soundDebugVerbose;
	sound.play.failed						= $soundError;
	sound.play.failed.badReuse				= inherit;
	sound.play.failed.setupFailed			= inherit;
	sound.play.failed.auError				= inherit;
	sound.render.undexpectedNull			= $soundError;
	sound.streaming.refill					= $soundDebugVerbose;
	sound.streaming.loop					= $soundDebug;
	sound.streaming.underflow				= $soundError;
	sound.virtualringbuffer					= $soundError;
	sound.streaming.releaseContext			= $soundDebug;
	sound.invalidBeep						= $soundError;
	
	
	strings.conversion						= $scriptError;			// Conversion of text to values (vectors, quaternions etc)
	strings.conversion.vector				= inherit;
	strings.conversion.quaternion			= inherit;
	strings.conversion.vectorAndQuaternion	= inherit;
	strings.conversion.randomSeed			= inherit;
	
	
	sun.nova								= no;					// Debug messages for nova
	
	
	$textureDebug							= no;
	texture.load.noName						= $error;
	texture.dealloc							= $textureDebug;
	texture.planet.generate					= $textureDebug;
	texture.upload							= $textureDebug;
	
	textureCache							= $textureDebug;
	
	textureLoader.asyncLoad					= $textureDebug;
	textureLoader.asyncLoad.done			= inherit;
	textureLoader.asyncLoad.exception		= $error;
	textureLoader.block						= $textureDebug;
	textureLoader.block.done				= inherit;
	textureLoader.detachThreads.failed		= $error;
	textureLoader.queueTask.inconsistency	= $error;
	textureLoader.unknownType				= $error;
	
	
	universe.populate						= no;				// “Populating a system with…” message when generating a star system
	universe.populate.witchspace			= inherit;
	universe.setup.badStation				= $scriptError;		// Message generated if the main station turns out not to be a station (for instance, this could happen if a non-station ship had the role coriolis).
	
	
	verifyOXP.verbose						= yes;
	
	
	/*** Mac OS X/Cocoa-specific ***/
	growl.error								= $error;
	growl.debug								= no;
	
	
	iTunesIntegration.failed				= $error;
}
