?? NEWTITLE := 'NOS/VE : Basic Access Methods : Set Evaluated File Abnormal' ??
MODULE fsm$set_evaluated_file_abnormal;
?? RIGHT := 110 ??

{ File status processing.

?? NEWTITLE := 'Global Declarations Referenced by This Module', EJECT ??
?? PUSH (LISTEXT := ON) ??
*copyc amc$condition_code_limits
*copyc amc$fap_request_codes
*copyc bac$unused_request_table_entry
*copyc ost$name
*copyc ost$status
?? POP ??
*copyc baf$task_file_entry_p
*copyc clp$convert_file_ref_to_string
*copyc clp$get_fs_path_string
*copyc clp$trimmed_string_size
*copyc osp$append_status_file
*copyc osp$append_status_parameter
*copyc osp$set_status_abnormal
*copyc bav$request_name_table_ptr
?? OLDTITLE ??
?? NEWTITLE := 'Global Declarations Decalred by This Module', EJECT ??

  CONST
    error_size = 4,
    error_text = '____';

?? OLDTITLE ??
?? NEWTITLE := '[xdcl, #gate] FSP$APPEND_STATUS_FILE_ID', EJECT ??

  PROCEDURE [XDCL, #GATE] fsp$append_status_file_id
    (    delimiter: char;
         file_id: amt$file_identifier;
     VAR status: ost$status);

    VAR
      file_instance: ^bat$task_file_entry,
      ignore_path_handle: fmt$path_handle,
      local_status: ost$status,
      path: fst$path,
      path_size: fst$path_size;

    file_instance := baf$task_file_entry_p (file_id);
    IF file_instance <> NIL THEN
      clp$get_fs_path_string (file_instance^.local_file_name, path, path_size, ignore_path_handle,
            local_status);
    ELSE
      local_status.normal := FALSE;
    IFEND;

    IF (NOT local_status.normal) OR (path_size = 0) THEN
      path := error_text;
      path_size := error_size;
    IFEND;

    osp$append_status_file (osc$status_parameter_delimiter, path (1, path_size), status);

  PROCEND fsp$append_status_file_id;
?? TITLE := 'PROCEDURE [XDCL, #GATE] bap$set_evaluated_file_abnormal', EJECT ??

  PROCEDURE [XDCL, #GATE] bap$set_evaluated_file_abnormal
    (    evaluated_file_reference: fst$evaluated_file_reference;
         condition: ost$status_condition;
         request_name: string ( * <= osc$max_name_size);
         text: string ( * <= osc$max_string_size);
     VAR status: ost$status);


    VAR
      local_status: ost$status,
      path: fst$path,
      path_size: fst$path_size;

{FILE NAME
    clp$convert_file_ref_to_string (evaluated_file_reference, {include_open_position} FALSE, path, path_size,
          local_status);
    IF (NOT local_status.normal) OR (path_size = 0) THEN
      path := error_text;
      path_size := error_size;
    IFEND;

    bap$set_file_reference_abnormal (path (1, path_size), condition, request_name, text, status);

  PROCEND bap$set_evaluated_file_abnormal;

?? TITLE := 'PROCEDURE [XDCL, #GATE] bap$set_file_reference_abnormal', EJECT ??

  PROCEDURE [XDCL, #GATE, INLINE] bap$set_file_reference_abnormal
    (    file: fst$file_reference;
         condition: ost$status_condition;
         request_name: string ( * <= osc$max_name_size);
         text: string ( * <= osc$max_string_size);
     VAR status: ost$status);

    VAR
      status_text: string (osc$max_string_size),
      status_text_index: ost$string_index,
      text_length: ost$string_size;

    osp$set_status_abnormal (amc$access_method_id, condition, '', status);

{FILE NAME
    osp$append_status_file (osc$status_parameter_delimiter, file, status);

{REQUEST NAME
    IF request_name = osc$null_name THEN
      text_length := error_size;
      status_text (1, text_length) := error_text;
    ELSE
      text_length := clp$trimmed_string_size (request_name);
      IF text_length > osc$max_name_size THEN
        text_length := osc$max_name_size;
      IFEND;
      status_text (1, text_length) := request_name (1, text_length);
    IFEND;

{Fill in null parameters for access level, file organization, record type,
{block type, & the error position}
    status_text_index := text_length + 1;
    status_text (status_text_index) := osc$status_parameter_delimiter;
    status_text (status_text_index + 1) := osc$status_parameter_delimiter;
    status_text (status_text_index + 2) := osc$status_parameter_delimiter;
    status_text (status_text_index + 3) := osc$status_parameter_delimiter;
    status_text (status_text_index + 4) := osc$status_parameter_delimiter;

{TEXT
    status_text_index := status_text_index + 5;
    status_text (status_text_index) := osc$status_parameter_delimiter;
    text_length := clp$trimmed_string_size (text);
    IF text_length > (osc$max_string_size - status_text_index) THEN
      text_length := (osc$max_string_size - status_text_index);
    IFEND;
    status_text (status_text_index + 1, text_length) := text (1, text_length);

    osp$append_status_parameter (osc$status_parameter_delimiter,
          status_text (1, status_text_index + text_length), status);

  PROCEND bap$set_file_reference_abnormal;

?? TITLE := 'PROCEDURE [XDCL, #GATE] fsp$append_stat_evaluated_file', EJECT ??

  PROCEDURE [XDCL, #GATE] fsp$append_stat_evaluated_file
    (    delimiter: char;
         evaluated_file_reference: fst$evaluated_file_reference;
     VAR status: {i/o} ost$status);

    VAR
      local_status: ost$status,
      path: fst$path,
      path_size: fst$path_size;

    clp$convert_file_ref_to_string (evaluated_file_reference, {include_open_position} FALSE, path, path_size,
          local_status);
    IF (NOT local_status.normal) OR (path_size = 0) THEN
      path := error_text;
      path_size := error_size;
    IFEND;

    osp$append_status_file (delimiter, path (1, path_size), status);

  PROCEND fsp$append_stat_evaluated_file;

?? TITLE := 'PROCEDURE [XDCL, #GATE] fsp$set_evaluated_file_abnormal', EJECT ??

  PROCEDURE [XDCL, #GATE] fsp$set_evaluated_file_abnormal
    (    evaluated_file_reference: fst$evaluated_file_reference;
         condition: ost$status_condition;
         request_code: amt$last_operation;
         text: string ( * <= osc$max_string_size);
     VAR status: ost$status);

    VAR
      local_status: ost$status,
      path: fst$path,
      path_size: fst$path_size,
      request_name: ost$name;

    clp$convert_file_ref_to_string (evaluated_file_reference, {include_open_position} FALSE, path, path_size,
          local_status);
    IF (NOT local_status.normal) OR (path_size = 0) THEN
      path := error_text;
      path_size := error_size;
    IFEND;

    IF (request_code >= LOWERBOUND (bav$request_name_table_ptr^)) AND
          (request_code <= UPPERBOUND (bav$request_name_table_ptr^)) AND
          (bav$request_name_table_ptr^ [request_code].name <> bac$unused_request_table_entry) THEN
      request_name := bav$request_name_table_ptr^ [request_code].name;
    ELSE
      request_name := osc$null_name;
    IFEND;

    bap$set_file_reference_abnormal (path (1, path_size), condition, request_name, text, status);

  PROCEND fsp$set_evaluated_file_abnormal;

?? TITLE := 'PROCEDURE [XDCL, #GATE] fsp$set_file_reference_abnormal', EJECT ??

  PROCEDURE [XDCL, #GATE] fsp$set_file_reference_abnormal
    (    file: fst$file_reference;
         condition: ost$status_condition;
         request_code: amt$last_operation;
         text: string ( * <= osc$max_string_size);
     VAR status: ost$status);

    VAR
      request_name: ost$name;

    IF (request_code >= LOWERBOUND (bav$request_name_table_ptr^)) AND
          (request_code <= UPPERBOUND (bav$request_name_table_ptr^)) AND
          (bav$request_name_table_ptr^ [request_code].name <> bac$unused_request_table_entry) THEN
      request_name := bav$request_name_table_ptr^ [request_code].name;
    ELSE
      request_name := osc$null_name;
    IFEND;

    bap$set_file_reference_abnormal (file, condition, request_name, text, status);

  PROCEND fsp$set_file_reference_abnormal;
?? OLDTITLE ??
MODEND fsm$set_evaluated_file_abnormal;

