MULTICS TECHNICAL BULLETIN                                 MTB764

To:       MTB Distribution

From:     Gary C. Dixon

Date:     May 21, 1987

Subject:  Changes to the sys_log_ Subroutine

               -----------------------------------

This MTB documents the sys_log_ subroutine, which the Initializer
uses  to  report  and  log  errors.   It  documents  the  current
interfaces (as input for the Privileged Subroutines manual).  And
it proposes a new, more general interface to this subroutine.

               -----------------------------------

Please send comments by Multics mail to:

    GDixon -at pco

_________________________________________________________________

Multics project  internal documentation; not to  be reproduced or
distributed outside the Multics project without permission of the
Director of MDC.


MTB764                                           sys_log_ Changes

                             CONTENTS

                                                         Page

   1:  Introduction to the Problem . . . . . . . . . . . . . .   1
   1.1:  The Solution  . . . . . . . . . . . . . . . . . . . .   1
   Appendix A:  Documentation for sys_log_ . . . . . . . . . .   1
      sys_log_ . . . . . . . . . . . . . . . . . . . . . . . .   2
         sys_log_$error_log  . . . . . . . . . . . . . . . . .   3
         sys_log_$sys_log_ . . . . . . . . . . . . . . . . . .   4
         sys_log_$binary . . . . . . . . . . . . . . . . . . .   5
         sys_log_$command  . . . . . . . . . . . . . . . . . .   6
         sys_log_$command_error  . . . . . . . . . . . . . . .   6
         sys_log_$general  . . . . . . . . . . . . . . . . . .   7
   Appendix B:  Documentation for sys_log_constants.incl.pl1 .  15


sys_log_ Changes                                           MTB764

111:::  IIINNNTTTRRROOODDDUUUCCCTTTIIIOOONNN TTTOOO TTTHHHEEE PPPRRROOOBBBLLLEEEMMM

The  sys_log_  subroutine  currently  provides  5 entrypoints for
printing and logging Initializer error and progress messages.  It
is  used  to  maintain  security  auditing  trails,  to  document
operator  actions,  to  record  system  activity  and  to  report
unexpected errors  and events.  These entrypoints  are documented
in Appendix A.

While the current interfaces  do perform their intended function,
they are cumbersome to use.  Each time a message is to be printed
or  logged, a complex  call statement must  be inserted into  the
program, followed by  some kind of goto or exiting  action if the
error  is fatal.   This often-repeated  complexity makes  writing
Initializer  programs a  harder job,  and makes  understanding of
such program more difficult than necessary.

111...111:::  TTThhheee SSSooollluuutttiiiooonnn

Since many new Initializer programs are being written for the DSA
project, a  new sys_log_ interface has been  designed.  It allows
the complexity  of the error message interface  to be centralized
within  sys_log_ itself  and within  an internal  error-reporting
procedure of the  calling program.  The calls in the  body of the
calling program are reduced to  the minimum of information needed
to produce the message.  This  makes the programs must simpler to
write and to understand.

The new interface, called  sys_log_$general, is documented at the
end of Appendix A.  This documentation includes an example of the
calling program and its internal error reporting procedure.

Appendix     B    shows     the    complete     text    of    the
sys_log_constants.incl.pl1 file, which  has been greatly extended
in support of sys_log_$general.

Please review and comment upon the these appendices.

AAAPPPPPPEEENNNDDDIIIXXX AAA:::  DDDOOOCCCUUUMMMEEENNNTTTAAATTTIIIOOONNN FFFOOORRR SSSYYYSSS_LLLOOOGGG_


________                                                 ________

sys_log_                                                 sys_log_
________                                                 ________

NNNaaammmeee:::  sssyyysss_llloooggg_

The  sys_log_  subroutine  provides  an  error  message  handling
facility to  programs that run  in the Initializer  process.  The
subroutine has two modes of operation.

Command mode is used by operator commands to report errors to the
operator in a manner similar to com_err_.  The error messages are
printed on  the operator terminal that issued  the command.  They
are  also written into  the admin log,  which can be  printed via
"print_sys_log -admin".

Answer Service  (AS) mode is used by  noncommand programs running
in the  Initializer to report errors  in a manner similar  to the
hardcore  syserr_ mechanism.  The  error messages are  printed on
one of three Answering Service I/O switches (severity1, severity2
or severity3).  They are also  written into the Answering Service
log, which can be printed via "print_sys_log -as".


________                                                 ________

sys_log_                                                 sys_log_
________                                                 ________

ARGUMENTS:

   The following argument is used by all sys_log_ entrypoints.

severity
   defines the severity of the error.  Allowed values are defined
   by named constants in sys_log_constants.incl.pl1.

      SL_LOG_SILENT (= 0)
          Only log the message, do not print it.

      SL_LOG (= 1)
          Log the message and print  it.  When called in AS mode,
          print  the message on  the severity1 I/O  switch.  When
          called  in  command  mode,  print  the  message  on the
          operator's console.

      SL_LOG_BEEP (= 2)
          Log  the message and  print it preceeded  by a line  of
          asterisks and followed by  a BELL character which turns
          on the  audible alarm.  When  called in AS  mode, print
          the message  on the severity2 I/O  switch.  When called
          in  command mode, print  the message on  the operator's
          console.

      SL_LOG_CRASH (= 3)
          Log  the  message,  print  it  preceeded  by  a line of
          asterisks and  followed by a BELL  character, and crash
          the system.  When called in  AS mode, print the message
          on  the severity3 I/O  switch.  When called  in command
          mode, print the message on the operator's console.

EEEnnntttrrryyy:::  sssyyysss_llloooggg_$$$eeerrrrrrooorrr_llloooggg

This entrypoint logs/prints an error table code and message in AS
mode.  The message format is:

     caller:  error_code_text ioa_message

USAGE

declare sys_log_$error_log entry options(variable);

call sys_log_$error_log (severity, code, caller, ioa_ctl, args);


________                                                 ________

sys_log_                                                 sys_log_
________                                                 ________

ARGUMENTS

severity
   is  a fixed bin(17)  argument which  defines the  severity, as
   described above.  (Input)

code
   is  a fixed bin(35)  error table  code whose  expanded text is
   placed in the message.  If code is zero, then no error message
   text is placed in the message.  (Input)

caller
   is a char(*)  name of the calling program.  This  is placed in
   the  message to  identify where  the message  is coming  from.
   (Input)

ioa_ctl
   is a char(*) or char(*) varying ioa_ control string describing
   the message format.  (Input)

args
   are arguments to be substituted  into the ioa_ control string.
   (Input)

EEEnnntttrrryyy:::  sssyyysss_llloooggg_

This entrypoint  logs/prints a message  in AS mode.   The ioa_ctl
string  should include  the caller's  name to  identify where the
message is coming from.

USAGE

declare sys_log_ entry options(variable);

call sys_log_ (severity, ioa_ctl, args);

ARGUMENTS

severity
   is  a fixed bin(17)  argument which  defines the  severity, as
   described above.  (Input)

ioa_ctl
   is a char(*) or char(*) varying ioa_ control string describing
   the message format.  (Input)


________                                                 ________

sys_log_                                                 sys_log_
________                                                 ________

args
   are arguments to be substituted  into the ioa_ control string.
   (Input)

EEEnnntttrrryyy:::  sssyyysss_llloooggg_$$$bbbiiinnnaaarrryyy

This  entrypoint logs/prints  a message  in AS  mode.  The logged
message  includes   binary  data  which  further   describes  the
circumstances of the error.

USAGE

declare sys_log_$binary entry options(variable);

call sys_log_$binary (severity, data_ptr, data_lth, data_class,
     ioa_ctl, args);

ARGUMENTS

severity
   is  a fixed bin(17)  argument which  defines the  severity, as
   described above.  (Input)

data_ptr
   is an aligned pointer to the binary data.  (Input)

data_lth
   is  a  fixed bin(17)  length  of  the  binary  data, in words.
   (Input)

data_class
   is a  char(10) varying parameter defining the  class of binary
   data.   This is  used by  print_sys_log to  find a  routine to
   expand  and  print  the  binary  data.   For  example,  if the
   data_class were CLASS, then  print_sys_log would use a routine
   called expand_CLASS_msg_ to expand  and print the binary data.
   (Input)

ioa_ctl
   is a char(*) or char(*) varying ioa_ control string describing
   the message format.  (Input)

args
   are arguments to be substituted  into the ioa_ control string.
   (Input)


________                                                 ________

sys_log_                                                 sys_log_
________                                                 ________

EEEnnntttrrryyy:::  sssyyysss_llloooggg_$$$cccooommmmmmaaannnddd

This  entrypoint  logs/prints  a  message  in  command mode.  The
ioa_ctl string should include the caller's name to identify where
the message is coming from.

USAGE

declare sys_log_$command entry options(variable);

call sys_log_$command (severity, ioa_ctl, args);

ARGUMENTS

severity
   is  a fixed bin(17)  argument which  defines the  severity, as
   described above.  (Input)

ioa_ctl
   is a char(*) or char(*) varying ioa_ control string describing
   the message format.  (Input)

args
   are arguments to be substituted  into the ioa_ control string.
   (Input)

EEEnnntttrrryyy:::  sssyyysss_llloooggg_$$$cccooommmmmmaaannnddd_eeerrrrrrooorrr

This entrypoint  logs/prints an error  table code and  message in
command mode.  The message format is:

     caller:  error_code_text ioa_message

USAGE

declare sys_log_$command_error entry options(variable);

call sys_log_$command_error (severity, code, caller, ioa_ctl,
     args);


________                                                 ________

sys_log_                                                 sys_log_
________                                                 ________

ARGUMENTS

severity
   is  a fixed bin(17)  argument which  defines the  severity, as
   described above.  (Input)

code
   is  a fixed bin(35)  error table  code whose  expanded text is
   placed in the message.  If code is zero, then no error message
   text is placed in the message.  (Input)

caller
   is a char(*)  name of the calling program.  This  is placed in
   the  message to  identify where  the message  is coming  from.
   (Input)

ioa_ctl
   is a char(*) or char(*) varying ioa_ control string describing
   the message format.  (Input)

args
   are arguments to be substituted  into the ioa_ control string.
   (Input)

EEEnnntttrrryyy:::  sssyyysss_llloooggg_$$$gggeeennneeerrraaalll

This  entrypoint logs/print  an error   message in  either AS  or
command modes.  It  allows the caller to specify  which items are
placed in the  message, and whether these items are  to come from
the input  structure or from  an associated argument  list.  This
entrypoint should  be used in preference to  those above, because
calling  programs can  be written   in a  more readable  fashion.
Refer to the Notes below for an example.

USAGE

declare sys_log_$general (pointer);

call sys_log_$general (sl_info_ptr);

ARGUMENTS

sl_info_ptr
   points to the sl_info structure described below.  (Input)


________                                                 ________

sys_log_                                                 sys_log_
________                                                 ________

INFO STRUCTURE

The sys_log_$general entrypoint uses  information provided by the
following  structure to  determine which  items to  place in  the
message,  and where  to obtain  those items.   This structure  is
declared in sys_log_constants.incl.pl1.

dcl 1 sl_info aligned automatic,
      2 version                  char(8),
      2 arg_list_ptr             ptr,
      2 loc,
        3 (mode,
           severity,
           code,
           caller,
           data,
           class,
           ioa_msg)              fixed bin,
      2 flags,
        3 ioa_msg_is_error_code  bit(1) unal,
        3 flags_pad              bit(35) unal,
      2 mode                     fixed bin,
      2 severity                 fixed bin,
      2 code                     fixed bin(35),
      2 caller                   char(65) varying,
      2 data,
        3 data_ptr               ptr,
        3 data_lth               fixed bin(21),
      2 class                    char(10) varying,
      2 ioa_msg                  char(500) varying;

Structure Elements

version
   is the version number of this  structure.  It should be set to
   the named constant SL_INFO_version_1.  (Input)

arg_list_ptr
   is a pointer to an argument list.  Various error message items
   can  be extracted  from this  argument list,  under control of
   sl_info.loc.  (Input)

loc
   is  the location  of information  needed to  process the error
   message.   The  information  can   be  given  in  the  sl_info
   structure, can  come from the argument list,  or certain items
   can be  omitted completely.  (Input) All  sl_info.loc elements
   can have one of the following values:


________                                                 ________

sys_log_                                                 sys_log_
________                                                 ________

   SL_INFO_arg_given_in_structure (= -1)
      the  information is  located in  the correspondingly named,
      level 2 structure element.

   SL_INFO_arg_not_given (= 0)
      the information is not given.

   +N
      a  positive  integer  giving  the  argument  number  in the
      argument list which contains the information.

loc.mode
   is the location of the mode.

loc.severity
   is the location of the severity.

loc.code
   is the location of the error code.

loc.caller
   is the location of the caller name.

loc.data
   is the location  of the binary data pointer and  length.  If a
   positive  integer N  is given,   then the  pointer is  the Nth
   argument  in the  argument list,  and the  argument length  is
   argument N+1.

loc.class
   is the location of the binary data class.

loc.ioa_msg
   is  the location of  the ioa_ control  string.  If a  positive
   integer N is  given, then then ioa_ control string  is the Nth
   argument  in the  argument list,  and remaining  arguments are
   substituted      into     the     control      string.      If
   SL_INFO_arg_given_in_structure  is  given,   then  ioa_msg  is
   treated as a character string message text rather than an ioa_
   control string; no argument substitution is performed.

flags.ioa_msg_is_error_code
   is "1"b  if loc.ioa_msg is a  positive integer N, and  the Nth
   argument in the argument list  is an error code whose expanded
   text is the ioa_ control structure.   If this flag is "0"b and
   loc.ioa_msg is positive, then the Nth argument in the argument
   list is a char(*) or  char(*) varying ioa_ control string.  If
   loc.ioa_msg is nonpositive, this flag is ignored.  (Input)


________                                                 ________

sys_log_                                                 sys_log_
________                                                 ________

mode
   is a  fixed bin(17) operating mode for sys_log_.   If the mode
   is located  in the argument list  or not given as  input, then
   the   value  actually   used  is   returned  in  sl_info.mode.
   (Input/Output) It can be one of the following values:

   SL_INFO_as_mode (= 1)
      operate  in AS mode.   This is the  default if loc.mode  is
      SL_INFO_arg_not_given.

   SL_INFO_command_mode (= 2)
      operate in command mode.

severity
   is  a fixed bin(17)  argument which  defines the  severity, as
   described above.   If the severity is located  in the argument
   list or  not given as input,  then the value actually  used is
   returned in sl_info.severity.   (Input/Output) If loc.severity
   is SL_INFO_arg_not_given, then SL_LOG is the default value for
   mode.

code
   is  a fixed bin(35)  error table  code whose  expanded text is
   placed  in  the  message.   If  code  is  -1  or  loc.code  is
   SL_INFO_arg_not_given, then  no error table text  is placed in
   the message.  If a zero code  is given, it means that no error
   really  occurred; therefore  printing/logging of  the sys_log_
   message is aborted.  Otherwise, code  is treated as a standard
   error   table  code   whose  text   is  obtained   by  calling
   convert_status_code_  and placed in  the message.  If  code is
   located in  the argument list,  then the value  is returned in
   sl_info.code.  (Input/Output)

caller
   is  a char(*)  name of   the program  reporting the  error.  A
   caller name should always be  given.  If the caller is located
   in  the   argument  list,  then   the  name  is   returned  in
   sl_info.caller.  (Input/Output)

data
   is a pointer to and fixed bin(17) length of the binary data to
   be associated  with the logged  message.  If the  data_ptr and
   data_lth are  located in the argument list,  then these values
   are   returned  in   sl_info.data_ptr  and   sl_info.data_lth.
   (Input/Output)


________                                                 ________

sys_log_                                                 sys_log_
________                                                 ________

class
   is a char(*) binary data class name.  It is required if binary
   data is given.  If the class  is located in the argument list,
   then   the   data   class   is   returned   in  sl_info.class.
   (Input/Output)

ioa_msg
   is  a char(*)  or char(*) varying  ioa_ control  string, or an
   error table  code whose text  is the ioa_  control string (see
   sl_info.ioa_msg_is_error_code  above).    The  text  expansion
   after argument substitution is returned.  (Input/Output)

Notes

The  calling  program  should  use  an  error diagnostic internal
procedure to report its errors.  This internal procedure fills in
the  sl_info structure  and calls  sys_log_$general, passing  its
argument list as the location for various message items.

The  sys_log_constants.incl.pl1  file  declares  several constant
versions   of  the   sl_info  structure   to  simplify  structure
assignment.   These are summarized  below.  Refer to  the include
file for details.

  sl_info_sev_code_msg
     sl_info settings for an SL_INFO_as_mode operation to be used
     with an Error internal procedure whose calling sequence is:

        call Error (severity, code, ioa_ctl, args);

     The Error  internal procedure must  set sl_info.arg_list_ptr
     and sl_info.caller.  It may  optionally set sl_info.data and
     sl_info.class.

  sl_info_sev_msg
     an SL_INFO_as_mode operation with Error calling sequence:

       call Error (severity, ioa_ctl, args);

  sl_info_sev_coded_msg
     an SL_INFO_as_mode operation with Error calling sequence:

       call Error (severity, ioa_ctl_as_error_code, args);


________                                                 ________

sys_log_                                                 sys_log_
________                                                 ________

  sl_info_sev_code_label_msg
     an SL_INFO_as_mode operation with Error calling sequence:

       call Error (severity, code, return_label, ioa_ctl, args);

  sl_info_code_msg
     an SL_INFO_as_mode operation with Error calling sequence:

       call Error (code, ioa_ctl, args);

  sl_info_msg
     an SL_INFO_as_mode operation with Error calling sequence:

       call Error (ioa_ctl, args);

These  structure templates  can be  used in  conjunction with  an
internal  procedure to  report errors,  as shown  in the  example
below.


________                                                 ________

sys_log_                                                 sys_log_
________                                                 ________

  as_proc_: procedure (P_code);

  dcl  P_code fixed bin(35) parameter;
          .
          .
  dcl  MY_NAME char(8) initial ("as_proc_") internal static
       options(constant);
          .
          .
       call xxx_ (path, modes, code);
       if code ^= 0 then
       call Error (SL_LOG_BEEP, code, ABORT_LABEL,
          "Calling xxx_ subroutine for ^a.", path);
          .
          .
  ABORT_LABEL:
       P_code = code;
       return;
          .
          .
  Error: procedure options(variable);

  dcl  return_label label based(return_label_ptr),
       return_label_ptr pointer;

       sl_info = sl_info_sev_code_label_msg;
       sl_info.arg_list_ptr = cu_$arg_list_ptr();
       sl_info.caller = MY_NAME;
       call sys_log_$general (addr(sl_info));
       if sl_info.code ^= 0 then do;
          call cu_$arg_ptr (3, return_label_ptr, 0, 0);
          go to return_label;
          end;
       else return;

       end Error;
  end as_proc_;

If sys_log_$general is called  with an invalid sl_info structure,
then  it  reports  this  error  by  signalling the sys_log_error_
condition, passing the  following condition information structure
which is declared in sys_log_error_info.incl.pl1:

dcl  1 sys_log_error_info     aligned automatic,
       2 header               like condition_info_header,
       2 sl_info_ptr          ptr;


________                                                 ________

sys_log_                                                 sys_log_
________                                                 ________

Structure Elements

header.version
   is  the version number  of this structure.   It is set  to the
   named constant SYS_LOG_ERROR_INFO_version_1.

header.action_flags.cant_restart
   is  "1"b, indicating that  restarting with an  invalid sl_info
   structure is impossible.

header.status_code
   is an error table code indicating how the sl_info structure is
   invalid.

sl_info_ptr
   is a pointer to the invalid sl_info structure.


sys_log_ Changes                                           MTB764

AAAPPPPPPEEENNNDDDIIIXXX BBB:::  DDDOOOCCCUUUMMMEEENNNTTTAAATTTIIIOOONNN FFFOOORRR SSSYYYSSS_LLLOOOGGG_CCCOOONNNSSSTTTAAANNNTTTSSS...IIINNNCCCLLL...PPPLLL111

/* BEGIN INCLUDE FILE sys_log_constants.incl.pl1  */

/****^  HISTORY COMMENTS:
  1) change(87-04-22,GDixon):
     Added sl_info structure and associated named constants for
     use in calling sys_log_$general.
                                         END HISTORY COMMENTS */

/* format: style4 */

dcl  (
     SL_TYPE_CRASH init (-3), /* type message with banner &
                                 kill system */
     SL_TYPE_BEEP init (-2),  /* type message with banner */
     SL_TYPE init (-1),       /* type message */
     SL_LOG_SILENT init (0),  /* log message */
     SL_LOG init (1),         /* log & type message */
     SL_LOG_BEEP init (2),    /* log & type message with
                                 banner */
     SL_LOG_CRASH init (3)    /* log & type message with banner
                                 & kill system */
     ) fixed bin internal static options (constant);


MTB764                                           sys_log_ Changes

dcl  1 sl_info aligned automatic,
       2 version char(8),     /* structure version       */
       2 arg_list_ptr ptr,    /* arg_list with values    */
       2 loc,
         3 (mode, severity, code, caller, data, class, ioa_msg)
           fixed bin,
  /* These flags control where the corresponding data item is found.*/
  /*  -1: data appears in the corresponding structure element below */
  /*   0: data is not present anywhere                              */
  /*  +N: data is Nth item in argument list pointed to by           */
  /*      sl_info.arg_list_ptr.  Upon return, data copied into      */
  /*      corresponding structure element.                          */
  /*  if data = +N:                                                 */
  /*      argN is data_ptr, argN+1 is data_len                      */
  /*  if ioa_msg = +N:                                              */
  /*      argN+1, ... argLAST are arguments substituted into the    */
  /*      ioa_msg control string.  The formatted msg is returned.   */
       2 flags,
         3 ioa_msg_is_error_code bit(1) unal,
                              /* ioa_ctl is error code.  */
         3 flags_pad bit(35) unal,
       2 mode fixed bin,      /* as-mode, command-mode   */
       2 severity fixed bin,  /* error severity          */
       2 code fixed bin(35),  /* error table code        */
       2 caller char(65) varying,
                              /* caller refname$entryname*/
       2 data,                /* binary data ptr/length  */
         3 data_ptr ptr,
         3 data_lth fixed bin(21),
       2 class char(10) varying,
                              /* binary data class       */
       2 ioa_msg char(500) varying;
                              /* formatted message text  */

/* *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  */
/*                                                       */
/* If data values (eg, sl_info.caller) are passed in the */
/* argument list,their data types should be as shown in  */
/* the structure above, except that character strings    */
/* should be char(*) nonvarying.                         */
/*                                                       */
/* *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  */

/* value for sl_info.version */
dcl  SL_INFO_version_1 char (8) int static options(constant)
     init("sl_info1");


sys_log_ Changes                                           MTB764

/* values for sl_info.mode */
dcl (SL_INFO_as_mode init(1),
     SL_INFO_command_mode init(2)) fixed bin int static
     options(constant);

/* values for sl_info.loc.(severity, code, caller, data,
   class, ioa_ctl, arg) */
dcl (SL_INFO_arg_given_in_structure init(-1),
     SL_INFO_arg_not_given init(0)) fixed bin int static
     options(constant);

/* *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  */
/*                                                       */
/* The following static structures are commonly used in  */
/* the LS user control software.                         */
/*                                                       */
/* *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  */

/* Syntax: call Abort (severity, code, ioa_ctl, args);   */

dcl  1 sl_info_sev_code_msg             aligned int static
                                        options(constant),
       2 version char(8)                init ("sl_info1"),
       2 arg_list_ptr ptr               init (null),
       2 loc,
         3 (mode                        init (-1),
            severity                    init ( 1),
            code                        init ( 2),
            caller                      init (-1),
            data                        init ( 0),
            class                       init ( 0),
            ioa_msg                     init ( 3)) fixed bin,
       2 flags,
         3 ioa_msg_is_error_code bit(1) unal init ("0"b),
         3 flags_pad bit(35) unal       init ("0"b),
       2 mode fixed bin                 init ( 1),
       2 severity fixed bin             init ( 0),
       2 code fixed bin(35)             init ( 0),
       2 caller char(65) varying        init (""),
       2 data,
         3 data_ptr ptr                 init (null),
         3 data_lth fixed bin(21)       init ( 0),
       2 class char(10) varying         init (""),
       2 ioa_msg char(500) varying      init ("");


MTB764                                           sys_log_ Changes

/* Syntax: call Abort (severity, ioa_ctl, args);            */

dcl  1 sl_info_sev_msg                  aligned int static
                                        options(constant),
       2 version char(8)                init ("sl_info1"),
       2 arg_list_ptr ptr               init (null),
       2 loc,
         3 (mode                        init (-1),
            severity                    init ( 1),
            code                        init ( 0),
            caller                      init (-1),
            data                        init ( 0),
            class                       init ( 0),
            ioa_msg                     init ( 2)) fixed bin,
       2 flags,
         3 ioa_msg_is_error_code bit(1) unal init ("0"b),
         3 flags_pad bit(35) unal       init ("0"b),
       2 mode fixed bin                 init ( 1),
       2 severity fixed bin             init ( 0),
       2 code fixed bin(35)             init ( 0),
       2 caller char(65) varying        init (""),
       2 data,
         3 data_ptr ptr                 init (null),
         3 data_lth fixed bin(21)       init ( 0),
       2 class char(10) varying         init (""),
       2 ioa_msg char(500) varying      init ("");


sys_log_ Changes                                           MTB764

/* Syntax: call Abort (severity, ioa_ctl_as_error_code, args); */

dcl  1 sl_info_sev_coded_msg            aligned int static
                                        options(constant),
       2 version char(8)                init ("sl_info1"),
       2 arg_list_ptr ptr               init (null),
       2 loc,
         3 (mode                        init (-1),
            severity                    init ( 1),
            code                        init ( 0),
            caller                      init (-1),
            data                        init ( 0),
            class                       init ( 0),
            ioa_msg                     init ( 2)) fixed bin,
       2 flags,
         3 ioa_msg_is_error_code bit(1) unal init ("1"b),
         3 flags_pad bit(35) unal       init ("0"b),
       2 mode fixed bin                 init ( 1),
       2 severity fixed bin             init ( 0),
       2 code fixed bin(35)             init ( 0),
       2 caller char(65) varying        init (""),
       2 data,
         3 data_ptr ptr                 init (null),
         3 data_lth fixed bin(21)       init ( 0),
       2 class char(10) varying         init (""),
       2 ioa_msg char(500) varying      init ("");


MTB764                                           sys_log_ Changes

/* Syntax: call Abort (severity, code, error_return_label,
                       ioa_ctl, args);               */

dcl  1 sl_info_sev_code_label_msg       aligned int static
                                        options(constant),
       2 version char(8)                init ("sl_info1"),
       2 arg_list_ptr ptr               init (null),
       2 loc,
         3 (mode                        init (-1),
            severity                    init ( 1),
            code                        init ( 2),
            caller                      init (-1),
            data                        init ( 0),
            class                       init ( 0),
            ioa_msg                     init ( 4)) fixed bin,
       2 flags,
         3 ioa_msg_is_error_code bit(1) unal init ("0"b),
         3 flags_pad bit(35) unal       init ("0"b),
       2 mode fixed bin                 init ( 1),
       2 severity fixed bin             init ( 0),
       2 code fixed bin(35)             init ( 0),
       2 caller char(65) varying        init (""),
       2 data,
         3 data_ptr ptr                 init (null),
         3 data_lth fixed bin(21)       init ( 0),
       2 class char(10) varying         init (""),
       2 ioa_msg char(500) varying      init ("");


sys_log_ Changes                                           MTB764

/* Syntax:  call Log_error (code, ioa_ctl, args);        */

dcl  1 sl_info_code_msg                 aligned int static
                                        options(constant),
       2 version char(8)                init ("sl_info1"),
       2 arg_list_ptr ptr               init (null),
       2 loc,
         3 (mode                        init (-1),
            severity                    init (-1),
            code                        init ( 1),
            caller                      init (-1),
            data                        init ( 0),
            class                       init ( 0),
            ioa_msg                     init ( 2)) fixed bin,
       2 flags,
         3 ioa_msg_is_error_code bit(1) unal init ("0"b),
         3 flags_pad bit(35) unal       init ("0"b),
       2 mode fixed bin                 init ( 1),
       2 severity fixed bin             init ( 0),
       2 code fixed bin(35)             init ( 0),
       2 caller char(65) varying        init (""),
       2 data,
         3 data_ptr ptr                 init (null),
         3 data_lth fixed bin(21)       init ( 0),
       2 class char(10) varying         init (""),
       2 ioa_msg char(500) varying      init ("");


MTB764                                           sys_log_ Changes

/* Syntax:  call Trace (ioa_ctl, args);                  */

dcl  1 sl_info_msg                      aligned int static
                                        options(constant),
       2 version char(8)                init ("sl_info1"),
       2 arg_list_ptr ptr               init (null),
       2 loc,
         3 (mode                        init (-1),
            severity                    init (-1),
            code                        init ( 0),
            caller                      init (-1),
            data                        init ( 0),
            class                       init ( 0),
            ioa_msg                     init ( 1)) fixed bin,
       2 flags,
         3 ioa_msg_is_error_code bit(1) unal init ("0"b),
         3 flags_pad bit(35) unal       init ("0"b),
       2 mode fixed bin                 init ( 1),
       2 severity fixed bin             init ( 0),
       2 code fixed bin(35)             init ( 0),
       2 caller char(65) varying        init (""),
       2 data,
         3 data_ptr ptr                 init (null),
         3 data_lth fixed bin(21)       init ( 0),
       2 class char(10) varying         init (""),
       2 ioa_msg char(500) varying      init ("");

/* END INCLUDE FILE sys_log_constants.incl.pl1 */