
  PROCEDURE {[INLINE]} bai$append_tape_error
    (    file_identifier: amt$file_identifier;
         tape_failure_modes: amt$tape_failure_modes;
     VAR status: ost$status);

?? RIGHT := 110 ??
?? PUSH (LISTEXT := ON) ??

    VAR
      delimiter: char,
      found_error: boolean,
      error_text: string (255),
      error_index: integer,
      tape_error: amt$tape_failure_mode;

    found_error := FALSE;

    IF status.normal THEN
      RETURN; {----->
    IFEND;

    error_text := '';
    error_index := 1;
    delimiter := '[';

    FOR tape_error := LOWERVALUE (amt$tape_failure_mode) TO UPPERVALUE (amt$tape_failure_mode) DO
      IF tape_error IN tape_failure_modes THEN
        found_error := TRUE;
        CASE tape_error OF
        = amc$tfm_agc_gains_not_set =
          append_text (delimiter, ' agc_gains_not_set', error_text, error_index);
        = amc$tfm_bad_id_burst =
          append_text (delimiter, ' bad_id_burst', error_text, error_index);
        = amc$tfm_blank_tape_read =
          append_text (delimiter, ' blank_tape_read', error_text, error_index);
        = amc$tfm_data_parity_error =
          append_text (delimiter, ' data_parity_error', error_text, error_index);
        = amc$tfm_device_not_ready =
          append_text (delimiter, ' device_not_ready', error_text, error_index);
        = amc$tfm_erase_error =
          append_text (delimiter, ' erase_error', error_text, error_index);
        = amc$tfm_record_fragment =
          append_text (delimiter, ' record_fragment', error_text, error_index);
        = amc$tfm_hardware_failure =
          append_text (delimiter, ' hardware_failure', error_text, error_index);
        ELSE
          append_text (delimiter, ' unknown failure mode', error_text, error_index);
        CASEND;
        delimiter := ',';
      IFEND;
    FOREND;
    IF found_error THEN
      append_text (' ', ']', error_text, error_index);
      osp$append_status_parameter (' ', error_text, status);
    IFEND;

  PROCEND bai$append_tape_error;


  PROCEDURE [INLINE] append_text
    (    delimiter: char;
         text: string ( * );
     VAR error_text: string ( * );
     VAR error_index: integer);

    error_text (error_index) := delimiter;
    error_index := error_index + 1;
    error_text (error_index, * ) := text;
    error_index := error_index + STRLENGTH (text);

  PROCEND append_text;

*copyc amt$file_identifier
*copyc amt$tape_failure_isolation
*copyc bat$tape_descriptor
*copyc osp$append_status_parameter
?? POP ??
