?? RIGHT := 110 ??
MODULE dsm$run_ve ALIAS 'DSMRUN';

*copy pxiotyp
*copy dsc$constant_definitions
*copy dsd$os_global_variables
*copy dsp$dst_global_variables
*copy dsc$job_control_registers
*copy dsp$callsda
*copy dsi$deadstart_utilities
*copy dsi$virtual_memory_access
*copyc dsi$c170_access_to_ssr
*copy dsi$transmit_data_via_ssr
*copyc dsi$display_dayfile_message
?? NEWTITLE := '~~~~~   Request resources at run time', EJECT ??
{*********************************************************}

*copyc dsp$claim_nve_resources

?? TITLE := 'dsp$check_if_ve_running', EJECT ??

{ PURPOSE:
{   This procedure checks if the NOS/VE system is running.  If it is
{   not, it issues a fatal error and aborts this subsystem step.
{ NOTES:
{   If NOS/VE is not running this subsystem step is aborted and control
{   is not returned to the caller.

  PROCEDURE [XDCL] dsp$check_if_ve_running;

    VAR
      ve_status: integer;


      get_ve_status (ve_status);
      IF exitcd = 0 THEN
        error_processor (nosve_down, fatal_error);
      IFEND;

  PROCEND dsp$check_if_ve_running;

?? TITLE := 'dsp$nve_resource_interface', EJECT ??

  PROCEDURE [XDCL] dsp$nve_resource_interface;

    VAR
      block: ^SEQ ( * ),
      nve_request_p: ^dst$170_request_block,
      rma: integer;

      jcrget;
      dsp$receive_data_via_ssr (block);
      IF block <> NIL THEN
        dyfstring ('Process ve request.', debug_log);
        NEXT nve_request_p IN block;
        CASE nve_request_p^.request OF

        = dsc$170_rb_request_resources, dsc$170_rb_update_free_clock =
          dsp$claim_nve_resources (nve_request_p^);

        = dsc$170_rb_call_dft_through_sda =
          rma := nve_request_p^.dft_request_rma DIV 8;
          pp_table.ssr_buffer.offset := rma MOD 100(8);
          pp_table.ssr_buffer.rlower := (rma DIV 100(8)) MOD 10000(8);
          pp_table.ssr_buffer.rupper := rma DIV 1000000(8);
          callsda (call_dft, pp_table);

        ELSE
          error_processor (incorrect_nve_request, fatal_error);
        CASEND;
        dsp$send_data_via_ssr (block, #SIZE (block^));
        FREE block;
      IFEND;

  PROCEND dsp$nve_resource_interface;
?? TITLE := 'dsp$nve_down_condition', EJECT ??

  PROCEDURE [XDCL] dsp$nve_down_condition ALIAS 'nvedwn';
    error_processor (nosve_down, fatal_error);
  PROCEND dsp$nve_down_condition;

MODEND dsm$run_ve;
