startup:-					/* read and execute clauses*/
	prompt(_,''),
	'$char_type'("$",__,2),
	to_bb(mk_area, u_mdl),			/* ignored, startup problem*/
	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),
	get_env_var('IFE_HOME',_Ife_Home),		/* load installation defaults */
	name(_Ife_Home, _Dirname),
	append(_Dirname, "lib/um/kbs/defaults", _Filename),
	name(_File, _Filename),
	[_File],
	get_login_name(_User_name),
	kset(user_name, _User_name),
 	tell_usr(user_name, _User_name),
	get_env_var('IFE_MODE',_Ife_Mode),		/* load COMBINE/NATIVE */
	( _Ife_Mode == combine ->
		tell_usr(user_type, combine)
	;
		classif_user(_User_name)
	),
	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
	).

