{
{    The purpose of this request is to cause a remote procedure call request to
{ be sent to the server mainframe, and for the remote procedure on the server
{ mainframe to be called.  All input parameters to the server must have been
{ NEXTed into the p_send_to_server_params sequence or the p_send_data_area
{ parameters returned on the dfp$begin_remote_procedure_call request.  All
{ output returned from the server may be read from the
{ p_receive_from_server_param sequence or the p_receive_data_area parameters.
{ The caller of this request waits until the request is processed by the server
{ mainframe and the response is returned.
{
{    If the server is terminated, an error dfe$server_has_terminated is
{ immediately returned and the caller should call
{ dfp$end_remote_procedure_call.  If the state of the server is inactive, or
{ awaiting_recovery then the status dfe$server_not_active is returned.  If the
{ state of the server is active but the job requires recovery the status
{ returned depends upon the job recovery location stored in the procedure
{ address table.  If the job recovery location is
{ dfc$job_rec_in_unavailable_wait then the status of dfe$server_not_active
{ returned and the caller should call osp$wait_on_condition to wait for the
{ server to become active. If the job
{ recovery location is dfc$job_rec_started_by_caller, the status of
{ dfe$job_needs_recovery is returned and the caller should call
{ osp$wait_on_condition after calling dfp$end_remote_procedure_call.
{
{   NOTE:  This procedure is identical to the file server procedure
{         dfp$send_remote_procedure_call except that application_name and
{         procedure_name are used in place of the parameter procedure_ordinal.
{
{       DFP$SEND_APPLICATION_RPC (QUEUE_ENTRY_LOCATION, APPLICATION_NAME,
{             PROCEDURE_NAME, SEND_TO_SERVER_PARAMS_SIZE,
{             DATA_SIZE_TO_SEND_TO_SERVER, P_RECEIVE_FROM_SERVER_PARAMS,
{             P_RECEIVE_DATA_AREA, STATUS)
{
{ QUEUE_ENTRY_LOCATION: (input)  This parameter specifies the paramater value
{       returned from the dfp$begin_remote_procedure_call request and
{       identifies the server mainframe to which the information is to be sent.
{
{ APPLICATION_NAME: (input)  This parameter specifies the name of the
{       application associated with the remote procedure as defined on the
{       DEFINE_APPLICATION_RPC subcommand.
{
{ PROCEDURE_NAME: (input)  This procedure specifies the name of the procedure
{       to be called on the server side.
{
{ SEND_TO_SERVER_PARAMS_SIZE: (input)  This parameter specifies the length of
{       the parameters to send to the server procedure.  This size includes the
{       total length NEXTed by the caller into the sequence
{       p_send_to_server_params returned by dfp$begin_remote_procedure_call.
{       i#current_sequence_position can be used to obtain this size.
{
{ DATA_SIZE_TO_SEND_TO_SERVER: (input)  This parameter specifies the length of
{       total length NEXTed by the caller into the sequence p_send_data
{       returned by dfp$begin_remote_procedure_call.  The caller must have
{       referenced at least the length sent to insure that the pages are wired
{       at the time of the request.
{
{ P_RECEIVE_FROM_SERVER_PARAMS: (output)  This parameter specifies the location
{       of the parameters from the remote procedure.  It will have the value of
{       NIL if no parameter other than status is returned.  The caller should
{       not write into this area.  Size of the sequence is obtained by
{       #SIZE(p_receive_from_server_params^).  This area will be freed on the
{       next call to dfp$send_application_rpc or dfp$end_remote_procedure_call.
{
{ P_RECEIVE_DATA_AREA: (output)  This parameter specifies a pointer to the data
{       area that is too large to fit into the area provided by the receive
{       parameter area.  The value will be NIL if no data is returned.  Size
{       obtainable from #SIZE (p_receive_data_area^).  Caller should not write
{       into this area.  This area will be released on the next call to
{       dfp$send_remote_procedure_call or dfp$end_remote_procedure_call.
{
{ STATUS: (output)  This parameter specifies the request status.
{     procedure on the server or, if a failure occurred in the remote procedure
{     call mechanism (for example, due to a server failure) , this indicates that
{     status.  If this status is abnormal then p_receive_from_server_params
{     and p_receive_data_area are both NIL.
{     Conditions
{         dfe$invalid_queue_entry_id
{         dfe$job_needs_recovery
{         dfe$server_has_terminated
{         dfe$server_not_active
{         dfe$server_request_terminated
{            This condition indicates the server failed while the request was
{            pending.  It is unknown if the request started or completed.
{
