*copyc OSD$DEFAULT_PRAGMATS
MODULE icm$fetch_access_info;
?? TITLE := 'MODULE icm$fetch_access_info' ??

?? PUSH (LISTEXT := ON) ??
*copyc AMT$ACCESS_INFORMATION
*copyc amc$fap_request_codes
*copyc AMP$SET_FILE_INSTANCE_ABNORMAL
*copyc ICE$ERROR_CODES
*copyc ICF$OPEN_FILE_DESCRIPTOR
*copyc ICP$STATUS_PARTNER_JOB
*copyc OST$STATUS
?? POP ??

?? NEWTITLE := 'PROCEDURE icp$fetch_access_info' ??
{  ICP$FETCH_ACCESS_INFO
{
{     The purpose of this procedure is to return the access_info
{  that is available for a link file.

  PROCEDURE [XDCL] icp$fetch_access_info
    (    icf_file: ^icf_open_file_descriptor;
         operation: amt$fap_operation;
         access_info: ^amt$access_information;
     VAR status: ost$status);

    VAR
      partner_stat: ict$status_partner_status,
      stat: ost$status,
      i: integer;


    status.normal := TRUE;
    FOR i := LOWERBOUND (access_info^) TO UPPERBOUND (access_info^) DO
      access_info^ [i].item_returned := TRUE;
      CASE access_info^ [i].key OF

      = amc$error_status =
        access_info^ [i].error_status := icf_file^.last_status;

      = amc$file_position =
        access_info^ [i].file_position := icf_file^.position;

      = amc$last_access_operation =
        access_info^ [i].last_access_operation := icf_file^.last_fap_op;

      = amc$last_op_status =
        icp$status_partner_job (icf_file^.partner_id, partner_stat, stat);
        IF stat.normal THEN
          IF (partner_stat = icc$partner_signed_on) OR
                (partner_stat = icc$partner_not_found) THEN
            access_info^ [i].last_op_status := amc$complete;
          ELSE
            access_info^ [i].last_op_status := amc$active;
          IFEND;
          IF partner_stat = icc$partner_not_found THEN
            amp$set_file_instance_abnormal (icf_file^.file_id,
                  ice$partner_ended, operation, '', status);
          IFEND;
        ELSE
          status := stat;
        IFEND;

      = amc$previous_record_length =
        access_info^ [i].previous_record_length := icf_file^.last_length;

{  Thats all the info thats defined for a link file.

      ELSE
        access_info^ [i].item_returned := FALSE;

      CASEND;

    FOREND;

  PROCEND icp$fetch_access_info;
MODEND icm$fetch_access_info;
