?? RIGHT := 110 ??
?? NEWTITLE := 'NOS/VE OS : Job Recovery Logging' ??
MODULE osm$job_recovery_logging;

{ PURPOSE:
{   This module contains those routines to help debug and display the status of jobs during active
{   job recovery.  In general these display data to the system log, job log, and system console.

?? NEWTITLE := 'Global Declarations Referenced by This Module', EJECT ??
?? PUSH (LISTEXT := ON) ??
*copyc jmt$system_supplied_name
*copyc jmt$user_supplied_name
*copyc oss$job_paged_literal
?? POP ??
*copyc dpp$put_critical_message
*copyc osp$unpack_status_condition
*copyc osp$verify_system_privilege
*copyc pmp$get_user_identification
*copyc pmp$get_job_names
?? EJECT ??
*copyc pmp$log_ascii
*copyc osv$control_codes_to_quest_mark
?? OLDTITLE ??
?? NEWTITLE := 'format_text', EJECT ??

  PROCEDURE format_text
    (    page_width: ost$string_size;
     VAR remaining_text: string ( * );
     VAR remaining_text_length: ost$string_size;
     VAR print_line: string ( * );
     VAR print_line_length: ost$string_size);

    IF remaining_text_length <= page_width THEN
      print_line := remaining_text (1, remaining_text_length);
      print_line_length := remaining_text_length;
      remaining_text_length := 0;
    ELSE
      print_line_length := page_width + 1;
      WHILE (print_line_length > 0) AND (remaining_text (print_line_length) <> ' ') DO
        print_line_length := print_line_length - 1;
      WHILEND;

      IF print_line_length = 0 THEN
        print_line := remaining_text (1, page_width);
        print_line_length := page_width;
      ELSE
        print_line_length := print_line_length;
        print_line := remaining_text (1, print_line_length);
      IFEND;

      remaining_text := remaining_text (print_line_length + 1, * );
      remaining_text_length := remaining_text_length - print_line_length;
    IFEND;

  PROCEND format_text;
?? OLDTITLE ??
?? NEWTITLE := 'osp$log_job_recovery_message', EJECT ??

  PROCEDURE [XDCL, #GATE] osp$log_job_recovery_message
    (    text: string ( * );
     VAR status: ost$status);

    CONST
      c$printer_width = 116;

    VAR
      found: boolean,
      local_status: ost$status,
      message_text: string (osc$max_string_size),
      message_text_length: integer,
      space_character: [oss$job_paged_literal, READ] PACKED ARRAY [0 .. 255] OF boolean :=
            [REP 32 of FALSE, TRUE, REP 223 of FALSE],
      user: ost$user_identification,
      user_job_length: integer,
      user_job_name: jmt$user_supplied_name,
      user_length: integer,
      print_line: string (c$printer_width),
      print_line_length: ost$string_size,
      remaining_text: string (osc$max_string_size),
      remaining_text_length: ost$string_size,
      system_job_name: jmt$system_supplied_name;

    status.normal := TRUE;
    osp$verify_system_privilege;

    pmp$get_user_identification (user, local_status);
    pmp$get_job_names (user_job_name, system_job_name, local_status);

    #SCAN (space_character, user.user, user_length, found);
    user_length := user_length - 1;
    #SCAN (space_character, user_job_name, user_job_length, found);
    user_job_length := user_job_length - 1;
    STRINGREP (message_text, message_text_length, user.user (1, user_length), ' ',
          user_job_name (1, user_job_length), ' ', system_job_name, ' ', text);

    remaining_text := message_text;
    remaining_text_length := message_text_length;
    REPEAT
      format_text (c$printer_width, remaining_text, remaining_text_length, print_line, print_line_length);
      pmp$log_ascii (print_line (1, print_line_length), $pmt$ascii_logset [pmc$system_log],
            pmc$msg_origin_system, local_status);
      IF NOT local_status.normal THEN
        status := local_status;
      IFEND;
      pmp$log_ascii (print_line (1, print_line_length), $pmt$ascii_logset [pmc$job_log],
            pmc$msg_origin_system, local_status);
      IF NOT local_status.normal THEN
        status := local_status;
      IFEND;
    UNTIL remaining_text_length = 0;

    dpp$put_critical_message (message_text (1, message_text_length), local_status);

  PROCEND osp$log_job_recovery_message;
?? OLDTITLE ??
?? NEWTITLE := 'osp$log_job_recovery_status', EJECT ??

  PROCEDURE [XDCL, #GATE] osp$log_job_recovery_status
    (    recovery_status: ost$status;
     VAR status: ost$status);

    VAR
      condition_code: ost$status_condition_number,
      condition_identifier: ost$status_identifier,
      local_status: ost$status,
      message_size: integer,
      message_text: string (osc$max_string_size + 12);

    status.normal := TRUE;
    osp$verify_system_privilege;

    osp$unpack_status_condition (recovery_status.condition, condition_identifier, condition_code);
    #TRANSLATE (osv$control_codes_to_quest_mark, recovery_status.text.value (1, recovery_status.text.size),
          local_status.text.value (1, recovery_status.text.size));
    STRINGREP (message_text, message_size, condition_identifier, condition_code, ' ',
          local_status.text.value (1, recovery_status.text.size));
    osp$log_job_recovery_message (message_text (1, message_size), status);

  PROCEND osp$log_job_recovery_status;
?? OLDTITLE ??
MODEND osm$job_recovery_logging;
