1:-swi_module(world_text_output, []).    2/*
    3* 
    4<module>  
    5%  Database pretty outputing controls 
    6%
    7% Logicmoo Project PrologMUD: A MUD server written in Prolog
    8% Maintainer: Douglas Miles
    9% Dec 13, 2035
   10%
   11*/
   12:- include(prologmud(mud_header)).   13
   14
   15% :- include(prologmud(mud_header)).
   16
   17% :- register_module_type (utility).
   18
   19% live another day to fight (meaning repl_to_string/1 for now is in prolog)
   20% local_decl_db_prop(repl_writer(tAgent,term),[prologSingleValued,relationMostInstance(tAgent,default_repl_writer)]).
   21% local_decl_db_prop(repl_to_string(tAgent,term),[prologSingleValued,relationMostInstance(tAgent,default_repl_obj_to_string)]).
   22
   23:-export(default_repl_buffer/4).   24default_repl_buffer(Loc,_TL,_N,_Type,V):- arg(1,Loc,Prev),append(Prev,[V],New),
   25  nb_setarg(1,Loc,New).
   26default_repl_obj_to_string_buffer(Out,_Type,Out).
   27
   28:-export(default_repl_writer/4).   29default_repl_writer(TL,N,Type,V):- default_repl_writer_1(TL,N,Type,V),!. 
   30:-export(default_repl_obj_to_string/3).   31default_repl_obj_to_string(O,Type,Out):- copy_term(Type,TypeO), ignore((TypeO = o )), ( TypeO == o -> Out=O ; Out = stringD(TypeO,O)).
   32
   33default_repl_writer_1(_TL,N,_Type,mudDescription(V)):- N==ftText,compound(V),!,fmt('~N~w~n',[V]).
   34default_repl_writer_1(_TL,N,_Type,V):- N == text, compound(V),V=..[_,_,O],O==[],!.
   35default_repl_writer_1(_TL,N,Type,V):- 
   36  copy_term(Type,TypeO),ignore(TypeO=o),  ( TypeO == o -> fmt('~q= ~q.~n',[N,V]) ; fmt('~q=D(~w) ~q.~n',[N,TypeO,V])).
   37
   38
   39canUseEnglish:-true.
   40
   41
   42:-export(show_kb_preds/2).   43show_kb_preds(Agent,List):- 
   44  ignore(mudAtLoc(Agent,LOC)),
   45  show_kb_preds(Agent,LOC,List),!.
   46
   47:-export(show_kb_preds/3).   48show_kb_preds(Agent,LOC,List):-
   49  ignore((once(mudAtLoc(Agent,LOC);localityOfObject(Agent,LOC)))),
   50  ignore((once(locationToRegion(LOC,Region);localityOfObject(Agent,Region)))),
   51  show_binds_kb_preds(Agent,[vHere=Region,isSelf=LOC,isSelfAgent=Agent],List).
   52
   53show_kb_preds_to_buffer(Agent,LOC,List,Buffer):-
   54  ignore((once(mudAtLoc(Agent,LOC);localityOfObject(Agent,LOC)))),
   55  ignore((once(locationToRegion(LOC,Region);localityOfObject(Agent,Region)))),
   56  show_binds_kb_preds_to_buffer(Agent,[vHere=Region,isSelf=LOC,isSelfAgent=Agent],List,Buffer).
   57
   58
   59show_binds_kb_preds_to_buffer(_Agent,Substs,List,Buffer):-
   60    must_det_l((         
   61        notrace(subst_each(List,Substs,ListR)),
   62        dmsg(substs=Substs),
   63        show_kb_via_pred(default_repl_buffer(Buffer),
   64          default_repl_obj_to_string_buffer,ListR))),!.
   65
   66show_binds_kb_preds(Agent,Substs,List):-
   67    must_det_l((
   68         once((t_l:repl_writer(Agent,WPred);WPred=default_repl_writer)),
   69         once((t_l:repl_to_string(Agent,ToSTR);ToSTR=default_repl_obj_to_string)),!,
   70        subst_each(List,Substs,ListR),
   71        dmsg(substs=Substs),
   72        show_kb_via_pred(WPred,ToSTR,ListR))),!.
   73
   74
   75
   76:-export(show_kb_via_pred/3).   77show_kb_via_pred(_,_,[]).
   78show_kb_via_pred(WPred,ToSTR,[L|List]):-!,must(show_kb_via_pred(WPred,ToSTR,L)),show_kb_via_pred(WPred,ToSTR,List),!.
   79show_kb_via_pred(WPred,ToSTR,L):-!,no_loop_check( 
   80   catch((ignore(show_failure(show_kb_via_pred_0(WPred,ToSTR,L)))),
   81   E,dmsg(error_failed(E,show_kb_via_pred_0(WPred,L))))),!.
   82
   83
   84
   85:-export(show_kb_via_pred_0/3).   86
   87show_kb_via_pred_0(WPred,ToSTR,listof(Call)):- contains_var(value,Call),subst(Call,value,P,PCall),subst(Call,value,PS,PSCall),!,
   88                                               show_kb_via_pred_0(WPred,ToSTR,forEach(findall(P,no_repeats(PCall),PS),fmt(PSCall))).
   89
   90show_kb_via_pred_0(WPred,ToSTR,listof(Call)):- !,show_kb_via_pred_format_call(WPred,ToSTR,Call,listof(Call)).
   91                                               
   92
   93show_kb_via_pred_0(WPred,ToSTR,F = Call):- contains_var(value,Call),value\==Call,!,show_kb_via_pred_format_call(WPred,ToSTR,F = value, Call),!.
   94show_kb_via_pred_0(WPred,ToSTR,F = Call):- !,show_kb_via_pred_format_call(WPred,ToSTR, F = Call ,F = Call),!.
   95show_kb_via_pred_0(WPred,ToSTR,forEach(Call,Show)):-!, show_kb_via_pred_format_call(WPred,ToSTR, Show, forEach(Call)),!.
   96show_kb_via_pred_0(WPred,ToSTR,fmt(Show)):- !, show_kb_via_pred_format_call(WPred,ToSTR, Show ,true).
   97show_kb_via_pred_0(_WPred,_STR,call(Call)):- !,  with_output_to(string(Value),no_repeats(Call)),
   98      fmt(Value),!.
   99      % show_kb_via_pred_0(WPred,ToSTR,fmt(Value)).
  100
  101show_kb_via_pred_0(WPred,ToSTR,once(Call)):- !,show_kb_via_pred_format_call(WPred,ToSTR,Call,once(Call)),!.
  102show_kb_via_pred_0(WPred,ToSTR,all(Call)):- !,functor(Call,F,_), show_kb_via_pred_1(WPred,ToSTR,F,all(Call)),!.
  103show_kb_via_pred_0(WPred,ToSTR,Call):- functor(Call,F,_), show_kb_via_pred_1(WPred,ToSTR,F,Call),!.
  104
  105show_kb_via_pred_1(WPred,ToSTR,F,all(Call)):-!,show_kb_via_pred_2(WPred,ToSTR,F,Call).
  106show_kb_via_pred_1(WPred,ToSTR,F,once(Call)):-!,show_kb_via_pred_2(WPred,ToSTR,F,once(Call)).
  107show_kb_via_pred_1(_WPred,_ToSTR,_F,call(Call)):-!,on_x_debug(req1(Call)).
  108show_kb_via_pred_1(WPred,ToSTR,F,Call):-show_kb_via_pred_2(WPred,ToSTR,F,Call).
  109
  110
  111show_kb_via_pred_format_call(WPred0,ToSTRIn,Format0,Call0):-
  112   wsubst(Call0:Format0,value(ToSTR),value,Call:Format),
  113   ignore( ToSTR = (ToSTRIn) ),
  114   subst([WPred0,ToSTR,Format,Call],value,_NewValue,[WPred,ToSTROut,FormatOut,GCall]),
  115   show_kb_via_pred_fmt(WPred,ToSTROut,FormatOut,_UnkType,GCall).
  116
  117
  118show_kb_via_pred_fmt(WPred,ToSTR,SayIt,_Type,forEach(GCall)):-!,forall(req1(GCall),show_kb_via_pred_0(WPred,ToSTR,SayIt)).     
  119show_kb_via_pred_fmt(WPred,ToSTR,SayIt,Type,listof(GCall)):-!,findall(SayIt,catch(req1(GCall),Error,(dmsg(error(SayIt=Error:GCall)),fail)),Count),
  120    merge_list_on_p(WPred,ToSTR,SayIt,Type,GCall,_NewValue,Count).
  121show_kb_via_pred_fmt(WPred,ToSTR,SayIt,Type,GCall):-!,findall(SayIt,catch(req1(GCall),Error,(dmsg(error(SayIt=Error:GCall)),fail)),Count),
  122    merge_list_on_p(WPred,ToSTR,SayIt,Type,GCall,_NewValue,Count).
  123
  124
  125merge_list_on_p(_WPred,_ToSTR,_SayIt,_Type,_GCall,_NewValue,[]):-
  126  % fmt_holds_tcall(WPred,ToSTR,SayIt,Type,[noVal]).
  127  !. % dont print anything
  128
  129merge_list_on_p(WPred,ToSTR,SayIt,Type,GCall,_NewValue,[]):-
  130  fmt_holds_tcall(WPred,ToSTR,SayIt,Type,notFound(f1SayIt,SayIt,Type,GCall)).
  131
  132
  133merge_list_on_p(WPred,ToSTR,SayIt,Type,_GCall,_NewValue,SayItList):-  SayIt = ( _ = _ ),!,
  134  findall(K,(member(KV,SayItList),arg(1,KV,K)),Keys),
  135  list_to_set(Keys,KeySet),!,
  136     forall(member(K,KeySet),
  137        (findall(V,(member(KV,SayItList),arg(1,KV,K),arg(2,KV,V)),VS),
  138          fmt_holds_tcall(WPred,ToSTR,K,Type,VS))).
  139
  140merge_list_on_p(WPred,ToSTR,_SayIt,Type,listof(_GCall),_NewValue,SayItList):-  
  141  findall(K,(member(KV,SayItList),arg(1,KV,K)),Keys),
  142  list_to_set(Keys,KeySet),!,
  143     forall(member(K,KeySet),
  144        (findall(KV,(member(KV,SayItList),arg(1,KV,K)),VS),
  145          fmt_holds_tcall(WPred,ToSTR,K,Type,VS))).
  146
  147merge_list_on_p(WPred,ToSTR, _SayIt ,Type,_GCall,_NewValue,SayItList):- fmt_holds_tcall(WPred,ToSTR,ftText,Type,SayItList).
  148
  149
  150% merge_list_on_p(WPred,ToSTR, SayIt ,Type,GCall,NewValue,SayItList):- forall(member(KV,SayItList),fmt_holds_tcall_pred_trans(WPred,ToSTR,SayIt,Type,KV)).
  151
  152:-export(req1/1).  153req1(O):- is_list(O),!,maplist(req1,O).
  154req1(O):- no_repeats(call_u(O)).
  155
  156missing_out(_).
  157
  158
  159show_kb_via_pred_2(WPred0,ToSTRIn,F0,Call0):-
  160      wsubst(Call0,value(ToSTR),value,Call),
  161      ignore( ToSTR = (ToSTRIn) ),
  162      subst([WPred0,ToSTR,F0,Call],value,NewValue,[WPred,ToSTROut,F,GCall]),
  163      show_kb_via_pred_3(WPred,ToSTROut,F,_UnkType,GCall,NewValue),!.
  164
  165show_kb_via_pred_3(WPred,ToSTR,fmt(SayIt),Type,GCall,NewValue):-!,
  166  % dmsg(show_kb_via_pred_3(WPred,ToSTR,F,GCall,NewValue)),
  167      findall(NewValue,(catch(req1(GCall),Error, NewValue=Error), 
  168             fmt((SayIt))),Count),
  169      (Count==[] ->
  170        missing_out(fmt_holds_tcall(WPred,ToSTR,F,Type,notFound(f1,F,Type))); true),!.
  171
  172show_kb_via_pred_3(WPred,ToSTR,fmt,Type,GCall,NewValue):-!,
  173  % dmsg(show_kb_via_pred_3(WPred,ToSTR,F,GCall,NewValue)),
  174      findall(NewValue,(catch(req1(GCall),Error, NewValue=Error), 
  175             fmt(GCall)),Count),
  176      (Count==[] ->
  177        missing_out(fmt_holds_tcall(WPred,ToSTR,F,Type,notFound(f2,F,Type))); true),!.
  178
  179
  180show_kb_via_pred_3(WPred,ToSTR,output,Type,GCall,NewValue):-!,
  181  % dmsg(show_kb_via_pred_3(WPred,ToSTR,F,GCall,NewValue)),
  182      findall(NewValue,(catch(req1(GCall),Error, NewValue=Error), 
  183             fmt_holds_tcall(WPred,ToSTR,F,Type,NewValue)),Count),
  184      (Count==[] ->
  185        missing_out(fmt_holds_tcall(WPred,ToSTR,F,Type,notFound(f3,F,Type))); true),!.
  186
  187
  188show_kb_via_pred_3(WPred,ToSTR,F,Type,GCall,NewValue):- canUseEnglish,!,
  189  % dmsg(show_kb_via_pred_3(WPred,ToSTR,F,GCall,NewValue)),
  190      findall(NewValue,(catch(req1(GCall),Error, NewValue=Error), 
  191             fmt_holds_tcall(WPred,ToSTR,text,Type,GCall)),Count),!,
  192      (Count==[] ->
  193        (missing_out(fmt_holds_tcall(WPred,ToSTR,F,Type,notFound(f4,F,Type)))); true),!.
  194
  195show_kb_via_pred_3(WPred,ToSTR,F,Type,GCall,NewValue):-
  196  % dmsg(show_kb_via_pred_3(WPred,ToSTR,F,GCall,NewValue)),
  197      findall(NewValue,(catch(req1(GCall),Error, NewValue=Error), 
  198             fmt_holds_tcall(WPred,ToSTR,F,Type,NewValue)),Count),
  199      (Count==[] ->
  200        missing_out(fmt_holds_tcall(WPred,ToSTR,F,Type,notFound(f5,F,Type))); true),!.
  201
  202
  203fmt_holds_tcall(WPred,ToSTR,N,Type, V):-  var(V),!,fmt_holds_tcall_pred_trans(WPred,ToSTR,N,Type,V),!.
  204fmt_holds_tcall(WPred,ToSTR,N,Type,[V]):- fmt_holds_tcall(WPred,ToSTR,N,Type,V),!.
  205fmt_holds_tcall(WPred,ToSTR,N,Type,[V|VV]):-  is_list([V|VV]), list_to_set([V|VV],Vs), fmt_holds_tcall_pred(WPred,ToSTR,N,Type,Vs),!.
  206fmt_holds_tcall(WPred,ToSTR,N,Type, V):-  fmt_holds_tcall_pred(WPred,ToSTR,N,Type,V),!.
  207
  208% fmt_holds_tcall_pred(WPred,ToSTR,N,Type,[L|List]):-!, doall((member(V,[L|List]),fmt_holds_tcall_pred_trans(WPred,ToSTR,N,Type,V))).
  209fmt_holds_tcall_pred(WPred,ToSTR,N,Type,V0):-fmt_holds_tcall_pred_trans(WPred,ToSTR,N,Type,V0),!.
  210
  211% fmt_holds_tcall_pred_trans(_, _ ,N,_ ,V):-!, fmt(N=V).
  212fmt_holds_tcall_pred_trans(WPred,ToSTR,N,Type,V0):-must((on_x_debug(call(ToSTR,V0,Type,V)),!,on_x_debug(call(WPred,_Tn,N,Type,V)))),!.
  213
  214
  215:- include(prologmud(mud_footer)).