?? RIGHT := 110 ??
?? NEWTITLE := 'NOS/VE Interactive Facility (Stand Alone): FAP Screen' ??
MODULE ifm$st_interactive_usr_fap_scrn;

?? NEWTITLE := 'Global Declarations', EJECT ??
?? PUSH (LISTEXT := ON) ??
*copyc cle$unseen_mail_condition
*copyc ife$interactive_exception_codes
*copyc ifk$keypoints
*copyc nae$condition_codes
*copyc ost$status
?? POP ??
*copyc ifp$st_fap_control_ring_3
*copyc osp$disestablish_cond_handler
*copyc osp$establish_condition_handler
*copyc osp$set_status_abnormal
*copyc osp$set_status_condition
*copyc pmp$continue_to_cause
*copyc pmp$long_term_wait
?? OLDTITLE ??
?? NEWTITLE := 'ifp$st_fap_control', EJECT ??

  PROCEDURE [XDCL] ifp$st_fap_control
    (    file_id: amt$file_identifier;
         call_block: amt$call_block;
         layer_number: amt$fap_layer_number;
     VAR status: ost$status);

?? NEWTITLE := 'condition_handler', EJECT ??

    PROCEDURE condition_handler
      (    condition: pmt$condition;
           condition_information: ^pmt$condition_information;
           save_area: ^ost$stack_frame_save_area;
       VAR handler_status: ost$status);


      CASE condition.selector OF

      = ifc$interactive_condition =
        CASE condition.interactive_condition OF
        = ifc$pause_break =
          osp$set_status_condition (ife$pause_break_received, status);
        = ifc$terminate_break =
          osp$set_status_condition (ife$terminate_break_received, status);
        = ifc$terminal_connection_broken =
          osp$set_status_condition (ife$connection_break_disconnect, status);
        = ifc$job_reconnect =
          osp$set_status_condition (ife$terminal_reconnected_to_job, status);
        ELSE
          osp$set_status_abnormal (ifc$interactive_facility_id, 0,
                'unknown interactive condition encountered', status);
        CASEND;

      ELSE
        ;
      CASEND;

      pmp$continue_to_cause (pmc$execute_standard_procedure, handler_status);

    PROCEND condition_handler;
?? OLDTITLE ??

    #KEYPOINT (osk$entry, 0, ifk$st_fap_control);

    osp$establish_condition_handler (^condition_handler, FALSE);

  /perform_operation/
    WHILE TRUE DO
      ifp$st_fap_control_ring_3 (file_id, call_block, layer_number, status);

      IF status.normal THEN
        EXIT /perform_operation/;
      ELSE
        CASE status.condition OF
        = cle$unseen_mail_condition, ife$abort_get, ife$connection_break_disconnect, ife$pause_break_received,
              ife$terminal_reconnected_to_job, ife$terminate_break_received, nae$interactive_cond_interrupt =
          pmp$long_term_wait (100, 100);
          CYCLE /perform_operation/;
        ELSE
          EXIT /perform_operation/;
        CASEND;
      IFEND;
    WHILEND /perform_operation/;

    osp$disestablish_cond_handler;

    #KEYPOINT (osk$exit, 0, ifk$st_fap_control);

  PROCEND ifp$st_fap_control;

MODEND ifm$st_interactive_usr_fap_scrn
