startup:-					/* read and execute clauses*/
	prompt(_,''),
	'$char_type'("A",__,1),
	'$char_type'("B",__,1),
	'$char_type'("C",__,1),
	'$char_type'("D",__,1),
	'$char_type'("E",__,1),
	'$char_type'("F",__,1),
	'$char_type'("G",__,1),
	'$char_type'("H",__,1),
	'$char_type'("I",__,1),
	'$char_type'("J",__,1),
	'$char_type'("K",__,1),
	'$char_type'("L",__,1),
	'$char_type'("M",__,1),
	'$char_type'("N",__,1),
	'$char_type'("O",__,1),
	'$char_type'("P",__,1),
	'$char_type'("Q",__,1),
	'$char_type'("R",__,1),
	'$char_type'("S",__,1),
	'$char_type'("T",__,1),
	'$char_type'("U",__,1),
	'$char_type'("V",__,1),
	'$char_type'("W",__,1),
	'$char_type'("X",__,1),
	'$char_type'("Y",__,1),
	'$char_type'("Z",__,1),
	'$char_type'("$",___,2),
	to_bb(mk_area, u_cpt),			/* ignored, startup problem*/
	to_bb(mk_area, u_cpt),
	to_bb(mk_area, u_mdl),
	to_bb(mk_area, user_dialog),
	to_bb(update_me, user_dialog, user_dialog),
	to_bb(update_me, application, application),
	to_bb(update_me, u_mdl, 'user_model	u_mdl_thinks'),
	to_bb(update_me, u_cpt, 'user_cpt	u_cpt_got'),
	get_date(_Date),
	kset(date, _Date),
	/* tell_usr(date, _Date), */
	chat_usr([
		'   Prototype Intelligent Front End',
		''
		  ]),
	get_env_var('IFE_HOME', _Ife_Home),	% load installation defaults
	name(_Ife_Home, _Str1),
	append(_Str1, "lib/uc/initial/kbs/defaults", _Str2),
	name(_Defaults, _Str2),
	[-_Defaults],
	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|_Term1] ->
		_Term = _Term1
	; 
		( _Rest = [application_said|_Term2] ->
			_Term = _Term2
		;
			_Term = _Rest
		)
	),
	( _Rest == [_Cpt|help] -> _Term = true ; true ),
	( _Rest == [_Cpt|description] -> _Term = true ; true ),
	!, _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
	).

