tool_mgr(initialize):-
	to_bb(mk_area, an_area),
	to_bb(update_me, an_area, an_area),
	get_env_var('IFE_HOME', _Ife_Home),	% load installation defaults
	name(_Ife_Home, _Str1),
	append(_Str1, "lib/ac/ac/kbs/tools", _Str2),
	name(_TL_fname, _Str2),
	to_bb(transaction_mgr,[' scanning the ', _TL_fname,' tool list...'] ),
	[-_TL_fname].


/* Assuming all tools need data, get it. Then data_for predicate will start the tool.  */
start(_Application):-
	tool(_Application,_Prog,_Args),		/* check tool exists */
	to_bb(application_dialog, get_data_for, _Application),
	assert(starting(_Application)).

start(_Application):-
	not_found(_Application).


/* Data_model returns requested data (filename in _Data; later step file/actual data)  
 * data requested is in a format suitable for the tool, _Application 
 * Note: ife_ah listening for "new_application" and matches the _Application with
 * the first column of the lib/startup/ah_clients .
 */
data_for(_Application, _Data):-
	starting(_Application),	/* check still trying to start the tool */
	tool(_Application, _Prog, _Args),		/* check tool exists */
	to_bb(application_dialog, new_application, _Application, _Args, _Data),
	to_bb(transaction_mgr,started,_Application).
data_for(_Application, _Data):-
	to_bb(transaction_mgr,error,['no-one wanted ', _Application, ' data'] ).



closed(_Application):-
	tool(_Application, _Prog, _Args),
	retract(starting(_Application)),
	to_bb(application_dialog, [[_Application, '_complete']],
			[  ['"', _Application, '" finished']]),
	to_bb(an_area, [[_Application, '_complete	finished']]),
	to_bb(transaction_mgr, stopped, _Application).
closed(_Application):-
	tool(_Application, _Prog, _Args),
	to_bb(application_dialog, [[_Application, '_complete']],
			[ ['"', _Application,
			   '" tool fininshed - but I dont recall starting it!!']
			]),
	to_bb(an_area, [[_Application, '_complete	finished']]),
	to_bb(transaction_mgr,error,[['unstarted tool, "', _Application, '" finished']]).

closed(_Application):-
	to_bb(application_dialog, [[_Application, '_complete']],
			[ ['"', _Application,
			   '" fininshed - but I dont know this tool!!']
			]),
	to_bb(an_area, [[_Application, '_complete	finished']]),
	to_bb(transaction_mgr,error,[['unknown tool, "', _Application, '" finished']]).

not_found(_Application):-
	tool(_Application, _Prog, _Args),
	to_bb(an_area, [[_Application, '_aborted	unknown']]),
	to_bb(application_dialog, [[_Application, '_aborted']],
			[['I dont know about any "', _Application, '" tool']]).

aborted(_Application, _Exit_code):-
	tool(_Application, _Prog, _Args),
	retract(starting(_Application)),
	to_bb(application_dialog, [[_Application, '_aborted']],
			[['"', _Application, '" aborted: exit code ', _Exit_code]]),
	to_bb(an_area, [[_Application, '_aborted']],
			[['"', _Application, '" aborted: exit code ', _Exit_code]]),
	to_bb(transaction_mgr,stopped,_Application).
aborted(_Application, _Exit_code):-
	tool(_Application, _Prog, _Args),
	to_bb(application_dialog, [[_Application, '_aborted']],
			[ ['"', _Application, '" aborted: exit code ',
			    _Exit_code, ' - but I dont recall starting it!!']
			]),
	to_bb(an_area, [[_Application, '_aborted']],
			[['"', _Application, '" aborted: exit code ', _Exit_code]]),
	to_bb(transaction_mgr,error,[['unstarted tool, "', _Application, '" aborted']]).

