?? RIGHT := 110 ??
MODULE dfm$manage_ijl_access_work;
{
{   The purpose of this module is to manage fetching and clearing the
{ inhibit_access_work in a initiated_job_list entry.  The particular mainframe
{ inhibit_access_work is set by use of delayed swap in work.
{
?? PUSH (LISTEXT := ON) ??
*copyc dfp$locate_server_translation
*copyc dft$rb_file_server_request
*copyc i#call_monitor
*copyc jmv$jcb
*copyc dfv$file_server_debug_enabled
*copyc dft$mainframe_set
*copyc pmt$binary_mainframe_id
?? POP ??
?? TITLE := ' [XDCL, #GATE] dfp$clear_inhibit_access_work', EJECT ??
{  There is a small window here is the state of the server changes an
{ delayed swap in is being performed while this routine executes.
{
{ The purpose of this routine is to change the inhibit_access_work in
{ the initiated_job_list_entry.  The particular requested mainframe
{ is removed from the callers job inhibit_access_work.
{  The inhibit_access_state in the segment_descriptor_table_ex
{ may optionally be changed as a result of this request.
{
  PROCEDURE [XDCL, #GATE] dfp$clear_inhibit_access_work
    (    server_mainframe_id: pmt$binary_mainframe_id;
         clear_sdtx: boolean);

    VAR
      mainframe_id_ordinal: 1 .. dfc$max_number_of_mainframes,
      request_block: dft$rb_file_server_request,
      server_found: boolean;

    dfp$locate_server_translation (server_mainframe_id, mainframe_id_ordinal, server_found);
    IF server_found THEN
      jmv$jcb.ijle_p^.inhibit_access_work := jmv$jcb.ijle_p^.inhibit_access_work -
            $dft$mainframe_set [mainframe_id_ordinal];
      IF clear_sdtx THEN
        request_block.reqcode := syc$rc_file_server_request;
        request_block.request := dfc$fsr_clear_inhibit_access;
        request_block.status.normal := TRUE;
        request_block.clear_ijl_ordinal := jmv$jcb.ijl_ordinal;
        request_block.clear_inhibit_work := $dft$mainframe_set [mainframe_id_ordinal];
        i#call_monitor (#LOC (request_block), #SIZE (request_block));
      IFEND;
    IFEND;
  PROCEND dfp$clear_inhibit_access_work;
?? TITLE := ' [XDCL, #GATE] dfp$fetch_access_work', EJECT ??

{  This routine fetches the inhibit and terminated access work
{ for the requesting job.

  PROCEDURE [XDCL, #GATE] dfp$fetch_access_work
    (VAR inhibit_access_work: dft$mainframe_set;
     VAR terminate_access_work: dft$mainframe_set);

    inhibit_access_work := jmv$jcb.ijle_p^.inhibit_access_work;
    terminate_access_work := jmv$jcb.ijle_p^.terminate_access_work;
  PROCEND dfp$fetch_access_work;

?? TITLE := ' [XDCL, #GATE] dfp$verify_all_sdtxs_recovered', EJECT ??
{  This procedure interfaces to monitor to verify that all
{ segments for the current job have recovered.

  PROCEDURE [XDCL, #GATE] dfp$verify_all_sdtxs_recovered
    (    server_mainframe_id: pmt$binary_mainframe_id);

    VAR
      mainframe_id_ordinal: 1 .. dfc$max_number_of_mainframes,
      request_block: dft$rb_file_server_request,
      server_found: boolean;

    dfp$locate_server_translation (server_mainframe_id, mainframe_id_ordinal, server_found);
    IF server_found THEN
      request_block.reqcode := syc$rc_file_server_request;
      request_block.request := dfc$fsr_verify_sdtx_recovery;
      request_block.status.normal := TRUE;
      request_block.recovered_job_ijl_ordinal := jmv$jcb.ijl_ordinal;
      request_block.recovered_mainframe := $dft$mainframe_set [mainframe_id_ordinal];
      request_block.job_terminate_access_work := $dft$mainframe_set [];
      i#call_monitor (#LOC (request_block), #SIZE (request_block));
    IFEND;
  PROCEND dfp$verify_all_sdtxs_recovered;
MODEND dfm$manage_ijl_access_work;
