HELP SYSPRMESSAGE                               Jonathan Meyer, Oct 1990


    sysprmessage(<culprit1>, <culprit2>, <culpritN>, N,
                <message_string>, <header_string>, <detail_level>)

    This procedure is used to generate system messages on *CUCHARERR,
    and is called by *SYSPRWARNING and *SYSPRMISHAP.


         CONTENTS - (Use <ENTER> g to access required sections)

 -- Overview
 -- Using -sysprmessage-
 -- Redefining prwarning
 -- Redefining prmishap
 -- See Also


-- Overview -----------------------------------------------------------

In its full form, -sysprmessage- prints 5 lines of information:

    ;;; <header_string> <message_string>
    ;;; INVOLVING:  <culprit1> <culprit2> ... <culpritN>
    ;;; FILE     :  <popfilename>  LINE NUMBER <poplinenum>
    ;;; COMPILING:  <names of procedures being compiled>>
    ;;; DOING    :  <pdprops of procedures currently executing>

If there are no culprits (ie. N is 0), the INVOLVING line is not
printed. Similarly, the FILE line is not printed if -popfilename- is
false, and the COMPILING line is not printed when the Poplog VM is in
execute mode.

There are two ways of altering which information -sysprmessage- prints.
By modifying one of the variables:

    POP_MISHAP_DOING_LIM - controls the DOING line
    POPSYSCALL           - controls the DOING line
    POPFILENAME          - controls the FILE line
    POPLINENUM           - controls the FILE line

or by varying the <detail_level> argument, which should be an integer
between 0-5. See REF *MISHAPS / sysprmessage for more information
about the detail line.



-- Using -sysprmessage- -----------------------------------------------

-sysprmessage- can be used in programs to print out useful information.
The DOING line can be especially useful in debugging. The following
procedure shows how to call -sysprmessage- to display only the DOING
line and the given message:

    define show_doing(message) with_props false;
        dlocal popfilename = false, popsyscall = false;
        ;;; turn off the FILE line, don't print system calls.
        sysprmessage(0, message, 'CALLED -', 5);
    enddefine;

An example call of show_doing:

    define test();
        show_doing('message 1');
    enddefine;

    define call_test();
        test();
    enddefine;

    test();
    ;;; CALLED - message 1
    ;;; DOING    :  test compile nextitem compile

    call_test();
    ;;; CALLED - message 1
    ;;; DOING    :  test call_test compile nextitem compile



-- Redefining prwarning -----------------------------------------------

The following example shows how to use sysprmessage to redefine
prwarning so that it prints a controllable amount of information
according to a variable called -warningdetail-.

    vars warningdetail = 5;
    define prwarning(word);
        lvars word;
        if popwarnings then word :: popwarnings -> popwarnings endif;
        sysprmessage(0, word_string(word), 'DECLARING VARIABLE',
                    warningdetail);
    enddefine;

    ;;; test above by marking and compiling the following:

    define foo;
        if declare_variable_1 > 10 then "hello" endif;
    enddefine;

    0 -> warningdetail;
    declare_variable_1;

    3 -> warningdetail;
    declare_variable_2;

Also try printing out popmessages, to see how calls to sysprmessage are
reflected in popmessages.



-- Redefining prmishap ------------------------------------------------

Using sysprmessage, it becomes easy to redefine prmishap to use a
different word from MISHAP. For example, to make MISHAPS use the word
ERROR, simply do:

    define prmishap(message, list);
        lvars message, list;
        sysprmessage(destlist(list), message, 'ERROR -', 5);
    enddefine;

And to generate a test myprmishap, do something like:

    <ENTER> im

    Setpop
    : myprmishap -> prmishap;
    : 1 2
    ;;; ERROR - MSEP: MISSING SEPARATOR (eg semicolon)
    ;;; INVOLVING:  1 2
    ;;; DOING    :  myprmishap compile Im runproc nextitem compile



-- See Also -----------------------------------------------------------

REF  *MISHAPS      - Details of Poplog error handling
HELP *MISHAP       - on POP-11 error procedures
HELP *PRMISHAP     - prints error messages; user-redefinable
HELP *INTERRUPT    - on POP-11 interrupt procedures
HELP *POPFILENAME  - current file
HELP *POPSYSCALL   - controls inclusion in error messages of systems
                     procedures


--- C.all/help/sysprmessage --------------------------------------------
--- Copyright University of Sussex 1990. All rights reserved. ----------
