startup:-					/* read and execute clauses*/
	prompt(_,''),
	'$char_type'("$",__,2),
	to_bb(mk_area, application_dialog),	/* ignored, startup problem*/
	to_bb(mk_area, application_dialog),
	to_bb(mk_area, journal),
	to_bb(mk_area, u_mdl),
	to_bb(mk_area, u_cpt),
	to_bb(mk_area, user_dialog),
	to_bb(update_me, user_dialog, user_dialog),
	to_bb(update_me, application_dialog, application_dialog),
	to_bb(mk_area, transaction),
	to_bb(update_me, transaction, transaction),
	to_bb(journal,[' Application dialog started...'] ),
	chat_usr([' ','',' ']),
	get_env_var('IFE_HOME', _Ife_Home),	%% load installation defaults
	name(_Ife_Home, _Str1),
	append(_Str1, "lib/ac/initial/kbs/defaults", _Str2),
	name(_Defaults, _Str2),
	[-_Defaults],
	get_env_var('IFE_MODE',_Ife_Mode),	/* load combine or native */
	get_env_var('IFE_PWIN',_Ife_Pwin),	/* load pw1 */
	( _Ife_Mode == combine ->
		load_project_window(_Ife_Pwin),
		to_bb(journal,[' Loaded project window ', _Ife_Pwin,' ...'] )
	;
		chat_usr([
			'  No project window... you are in IFe native mode ',
			' '])
	),
	cmd_loop.

cmd_loop:-
	repeat,					/* infinite loop */
		get_cmd,
		fail.

get_cmd:-
	write('>'), ttyflush,
	getterm(_Area, _Rest),			/* ignore BB area */
	( _Area == abort -> halt ; true ),
	( _Area == quitrqst -> quitrqst ; true ),
	( _Rest = [user_said|_Term] ; _Term = _Rest),
	!, _Pred=.._Term,				/* uchk */
	!, _Pred,
	!.

getterm(_Area, _Term):-
	getname(_Name1,_Chr1),
	name(_Area,_Name1),
	( _Chr1 \== 10 ->
		getname(_Name2,_Chr2),
		name(_Pred_name,_Name2),
		getargs(_Chr2,_Args),
		_Term=[_Pred_name|_Args]
	;
		_Term = []
	).

getargs(_Chr,_Args):-
	( _Chr\==10 ->
		getname(_Name,_Chr_3),
		convert(_Name,_Atom),
		getargs(_Chr_3, _Args_1),
		_Args=[_Atom|_Args_1]
	;
		_Args=[]
	).

getname(_Name,_Chr):-
	_Chr \== 10,
	get0(_Chr_1),
	( _Chr_1\==9, _Chr_1\==10 ->
		getname(_Name_1,_Chr_2),
		_Chr=_Chr_2,
		( _Chr_1==32 ->			/* replace ' ' with '_' */
			_Name=[95|_Name_1]
		;
			_Name=[_Chr_1|_Name_1]
		)
	;
		_Name=[],
		_Chr=_Chr_1
	).

getname(_Name, _Chr):-
	_Name=[].


convert([43|_String], _Var):-		% handle '+' signed numbers
	convert(_String, _Var).
convert([45|_String], _Var):-		% handle '-' signed numbers
	convert(_String, _Var2),
	_Var is - _Var2.

convert(_String, _Var):-
	name(_Atm, _String),
	( number(_Atm) ->
		_Var = _Atm
	; flt(_Atm, _Flt) ->
		_Var = _Flt
	;
		_Var = _Atm
	).

