Admin User, created Mar 21. 2025
/**
* Warranty & Liability
* To the extent permitted by applicable law and unless explicitly
* otherwise agreed upon, XLOG Technologies AG makes no warranties
* regarding the provided information. XLOG Technologies AG assumes
* no liability that any problems might be solved with the information
* provided by XLOG Technologies AG.
*
* Rights & License
* All industrial property rights regarding the information - copyright
* and patent rights in particular - are the sole property of XLOG
* Technologies AG. If the company was not the originator of some
* excerpts, XLOG Technologies AG has at least obtained the right to
* reproduce, change and translate the information.
*
* Reproduction is restricted to the whole unaltered document. Reproduction
* of the information is only allowed for non-commercial uses. Selling,
* giving away or letting of the execution of the library is prohibited.
* The library can be distributed as part of your applications and libraries
* for execution provided this comment remains unchanged.
*
* Restrictions
* Only to be distributed with programs that add significant and primary
* functionality to the library. Not to be distributed with additional
* software intended to replace any components of the library.
*
* Trademarks
* Jekejeke is a registered trademark of XLOG Technologies AG.
*/
/***************************************************************/
/* Temporarily Redirecting */
/***************************************************************/
/**
* with_text_to(A, G):
* The predicate succeeds whenever the goal G succeeds and
* unifies A with its text output.
*/
% with_text_to(-Atom, +Goal)
with_text_to(A, G) :-
current_output(S),
try_call_finally(
sys_redirect_output,
(G, sys_fetch_output(A)),
set_output(S)).
% sys_redirect_output
sys_redirect_output :-
open_output_atom_stream(T),
set_output(T).
% sys_fetch_output(-Atom)
sys_fetch_output(A) :-
current_output(T),
flush_output(T),
close_output_atom_stream(T, A).
/**
* with_text_from(A, G):
* The predicate succeeds whenever the goal G succeeds and
* provides A as its text input.
*/
% with_text_from(+Atom, +Goal)
with_text_from(A, G) :-
current_input(S),
open_input_atom_stream(A, T),
try_call_finally(
set_input(T),
G,
set_input(S)).
/***************************************************************/
/* Term Atom */
/***************************************************************/
/**
* term_atom(T, A):
* term_atom(T, A, O):
* The build-in succeeds in writing the term T into a new
* atom A. The ternary predicate accepts write options O.
*/
% term_atom(+Term, -Atom)
term_atom(Term, Atom) :-
term_atom(Term, Atom, []).
% term_atom(+Term, -Atom, +List)
term_atom(Term, Atom, Opts) :- var(Atom), !,
open_output_atom_stream(Stream),
write_term(Stream, Term, [quoted(true)|Opts]),
flush_output(Stream),
close_output_atom_stream(Stream, Atom).
term_atom(Term, Atom, Opts) :-
open_input_atom_stream(Atom, Stream),
read_term(Stream, Term, [end_of_term(eof)|Opts]).
/***************************************************************/
/* Enum Atoms */
/***************************************************************/
/**
* enum_atoms(S, A):
* enum_atoms(S, A, O):
* The predicate succeeds in A with the subsequent atoms
* from the stream S. The terminary predicate allows
* specifying atom options.
*/
% enum_atoms(+Stream, -Line)
enum_atoms(InStream, Line) :-
enum_atoms(InStream, Line, []).
% enum_atoms(+Stream, -Line, +List)
enum_atoms(InStream, Line, Opts) :-
repeat,
get_atom(InStream, Line, Opts),
(Line \== '' ->
true; !, fail).
/*******************************************************************/
/* Foreign Predicates */
/*******************************************************************/
% open_input_atom_stream(X, Y):
% defined in foreign(util/auxlib)
% open_output_atom_stream(X):
% defined in foreign(util/auxlib)
% close_output_atom_stream(X, Y):
% defined in foreign(util/auxlib)
% xml_escape(X, Y):
% defined in foreign(util/auxlib)
% percent_encode(X, Y):
% defined in foreign(util/auxlib)
:- ensure_loaded(foreign(util/auxlib)).