1:- module(attvar_reader, [read_attvars/1,read_attvars/0,install_attvar_expander/1,uninstall_attvar_expander/1]).

Utility LOGICMOO_ATTVAR_READER

This module works with Utility LOGICMOO_ATTVAR_SERIALIZER to allows us to keep attributed variables and files inside the prolog database.

    9:- set_module(class(library)).   10/*  Logicmoo Debug Tools
   11% ===================================================================
   12% File 'logicmoo_util_varnames.pl'
   13% Purpose: An Implementation in SWI-Prolog of certain debugging tools
   14% Maintainer: Douglas Miles
   15% Contact: $Author: dmiles $@users.sourceforge.net ;
   16% Version: 'logicmoo_util_varnames.pl' 1.0.0
   17% Revision: $Revision: 1.1 $
   18% Revised At:  $Date: 2002/07/11 21:57:28 $
   19% ===================================================================
   20*/
   21:- create_prolog_flag(assert_attvars,false,[keep(true)]).   22:- create_prolog_flag(read_attvars,false,[keep(true)]).   23:- module_transparent((read_attvars/1,read_attvars/0)).   24
   25:- use_module((toplevel_variable_names)).   26:- if(\+ current_module(attvar_serializer)).   27:- use_module(library(logicmoo/attvar_serializer)).   28:- endif.   29
   30:- multifile(lmcache:use_attvar_expander/1).   31:- dynamic(lmcache:use_attvar_expander/1).   32
   33:- multifile(lmcache:never_use_attvar_expander/1).   34:- dynamic(lmcache:never_use_attvar_expander/1).
 install_attvar_expander(+FileOrModule) is det
Installs Attvar Expander to File Or Module
   40install_attvar_expander(M):- lmcache:use_attvar_expander(M),!.
   41install_attvar_expander(M):-
   42  dmsg(install_attvar_expander(M)),
   43  asserta(lmcache:use_attvar_expander(M)),
   44  system:multifile(M:term_expansion/4),
   45  system:module_transparent(M:term_expansion/4),
   46  system:dynamic(M:term_expansion/4),
   47  asserta(((M:term_expansion(I,P,O,P):- system_expanded_attvars(M:term,P,I,O)))),
   48  system:multifile(M:goal_expansion/4),
   49  system:module_transparent(M:goal_expansion/4),
   50  system:dynamic(M:goal_expansion/4),
   51  set_prolog_flag(read_attvars,true),
   52  set_prolog_flag(assert_attvars,true),
   53  asserta(((M:goal_expansion(I,P,O,P):- system_expanded_attvars(M:goal,P,I,O)))),
   54  !.
 uninstall_attvar_expander(+FileOrModule) is det
Uninstalls Attvar Expander from File Or Module
   61uninstall_attvar_expander(M):-
   62  retract(lmcache:use_attvar_expander(M)),!,
   63  ignore(retract((M:goal_expansion(I,P,O,P):- system_expanded_attvars(M:goal,P,I,O)))),
   64  ignore(retract((M:term_expansion(I,P,O,P):- system_expanded_attvars(M:term,P,I,O)))),
   65  (lmcache:use_attvar_expander(M)->true;set_prolog_flag(read_attvars,false)).
   66uninstall_attvar_expander(_):-set_prolog_flag(read_attvars,false).
   67  
   68  
   69
   70read_attvars:- read_attvars(true).
   71
   72read_attvars(TF):- 
   73  set_prolog_flag(read_attvars,TF),
   74%  set_prolog_flag(assert_attvars,TF),
   75  prolog_load_context(module,M),
   76  (TF==true->
   77     install_attvar_expander(M);
   78     uninstall_attvar_expander(M)).
   79:- export(read_attvars/1).   80:- system:import(read_attvars/1).   81
   82
   83user:expand_query(Goal, Expanded, Bindings, ExpandedBindings):- fail,
   84      prolog_load_context(module,LC),
   85      \+ lmcache:never_use_attvar_expander(LC),
   86      current_prolog_flag(read_attvars,true),
   87      \+ current_prolog_flag(read_attvars_toplevel,false),
   88      \+ current_prolog_flag(xref,true), 
   89      Struct= ['$variable_names'|Bindings],
   90      deserialize_attvars(Struct,Goal,Expanded),
   91      [_|ExpandedBindings] = Struct.
   92
   93
   94:- fixup_exports.