?? TITLE := 'NOS/VE Basic Access Method: REWIND' ??
MODULE bam$rewind;
?? RIGHT := 110 ??

?? NEWTITLE := 'Global Declarations Referenced by This Module', EJECT ??
?? PUSH (LISTEXT := ON) ??
*copyc amc$condition_code_limits
*copyc ame$access_validation_errors
*copyc ame$conflicting_access_level
*copyc ame$improper_file_id
*copyc ame$ring_validation_errors
*copyc ost$caller_identifier
*copyc rmt$device_class
?? POP ??
*copyc amp$set_file_instance_abnormal
*copyc baf$task_file_entry_p
*copyc osp$set_status_abnormal
*copyc bav$task_file_table
*copyc fmv$global_file_information
?? OLDTITLE ??
?? NEWTITLE := '[xdcl] BAP$REWIND' ??

  PROCEDURE [XDCL] bap$rewind
    (    file_identifier: amt$file_identifier;
         call_block: amt$call_block;
         fap_layer_number: amt$fap_layer_number;
     VAR status: ost$status);

    VAR
      file_instance_p: ^bat$task_file_entry,
      caller_id: ost$caller_identifier;

    #CALLER_ID (caller_id);
    status.normal := TRUE;
    file_instance_p := baf$task_file_entry_p (file_identifier);
    IF file_instance_p = NIL THEN
      osp$set_status_abnormal (amc$access_method_id, ame$improper_file_id,
            'Uninitialized task_file_table in bap$rewind', status);
      RETURN; {----->
    IFEND;

    IF caller_id.ring > file_instance_p^.instance_attributes.static_label.ring_attributes.r2 THEN
      amp$set_file_instance_abnormal (file_identifier, ame$ring_validation_error, call_block.operation, '',
            status);
      RETURN; {----->
    IFEND;

    IF NOT ((pfc$read IN file_instance_p^.instance_attributes.dynamic_label.access_mode) OR
          (pfc$modify IN file_instance_p^.instance_attributes.dynamic_label.access_mode) OR
          (pfc$shorten IN file_instance_p^.instance_attributes.dynamic_label.access_mode) OR
          (pfc$append IN file_instance_p^.instance_attributes.dynamic_label.access_mode)) THEN
      amp$set_file_instance_abnormal (file_identifier, ame$improper_access_attempt, call_block.operation,
            ' READ or WRITE', status);
      RETURN; {----->
    IFEND;

    IF file_instance_p^.global_file_information = NIL THEN
{error}
      RETURN; {----->
    IFEND;

    IF file_instance_p^.access_level = amc$segment THEN
      amp$set_file_instance_abnormal (file_identifier, ame$conflicting_access_level, call_block.operation,
            'SEGMENT ACCESS', status);
      RETURN; {----->
    IFEND;

    IF file_instance_p^.device_class = rmc$magnetic_tape_device THEN
      RETURN; {----->
    IFEND;

    IF file_instance_p^.private_read_information <> NIL THEN
      file_instance_p^.private_read_information^.positioning_info :=
            fmv$global_file_information.positioning_info;
    ELSE
      file_instance_p^.global_file_information^.positioning_info :=
            fmv$global_file_information.positioning_info;
    IFEND;

  PROCEND bap$rewind;
?? OLDTITLE ??
MODEND bam$rewind;
