print_message(+Severity, +Message)  hookablePrints a Message of a given Severity.  The behavior can be
customized using the hooks user:portray_message/2,
user:generate_message_hook/3 and user:message_hook/3.
     
All messages from the system are printed by calling this predicate.
First print_message/2 calls user:portray_message/2 with
the same arguments.  If this does not succeed, the message is
processed in the following phases:
          
user:generate_message_hook/3 is tried,
then if it does not succeed, 'SU_messages':generate_message/3 is
called.  If that also fails or gives an exception, then the built-in
default conversion is used, which gives the following result:
                         ['~q'-[Message],nl]
          
          user:message_hook/3 is tried, then, if it does not
succeed, the built-in predicate print_message_lines/3 is
called for the user_error stream. 
portray_message(+Severity, +Message)  hookuser:portray_message(+Severity, +Message)print_message/2 before processing the message.  If this
succeeds, it is assumed that the message has been processed and nothing
further is done.
     generate_message_hook(+Message, -L0, -L)  hookuser:generate_message_hook(+Message, -L0, -L)'SU_messages':generate_message/3 in the message generation phase
in print_message/2.
     'SU_messages':generate_message(+Message, -L0, -L)  extendibleL0-L; this means, that L0 is the generated list with
L appended to it.  This list will be translated into
format-command lines, which will be passed to the message printing
phase.
     message_hook(+Severity, +Message, +Lines)  hookuser:message_hook(+Severity, +Message, +Lines)print_message_lines/3 in the message
printing phase of print_message/2.  A way for the user to
intercept the abstract message term Message of type
Severity, whose translation into format-command lines is
Lines, before it is actually printed.
     print_message_lines(+Stream, +Severity, +Lines)print_message_lines/3 takes
the prefix as its second argument).  In case of the query
severity no newline is written after the last line.
     goal_source_info(+AGoal, ?Goal, ?SourceInfo)Annotated goals occur in most of error message terms, and
carry information on the Goal causing the error and its source
position. The SourceInfo term, retrieved by
goal_source_info/3 will be one of the following:
          
[]fileref(File,Line)clauseref(File,MFunc,ClauseNo,CallNo,Line):Name/Arity, calls are numbered
textually and the virtual line number shows the position of the
goal within the listing of the predicate MFunc, as
produced by listing/1. Such a term is returned for
goals occurring in interpreted predicates, which do
not have “real” line number information, e.g. because they were
entered from the terminal, or created dynamically.