/*
 *  CopyRight 1995. Nicholas Poljakov all rights reserved.
 */
/*************************  REM_PATH.C  ***************************/
/*                 get path for remote disk                       */
/******************************************************************/

#include <dos.h>
#include <stdio.h>
#include <string.h>
#include <io.h>
#include <fcntl.h>
#include <stdlib.h>
#include <state1.h>
extern char lu_id[8];
extern char tp_id[8];
extern char tp_exist;
extern struct  part {            /* partner structure */
		  char	 plu[8] ;	     /* str plu_name	    */
                  int psl;                    /* str plu_s_limit     */
		  char	 mode_name[8] ;	     /* str mode_name	    */
                  int max_ru_size;            /* str ru_h_size       */
                  int pacing;                 /* str =               */
                  unsigned char lu_type;
               }  pstr[4];

rem_path(rp, from)
char *rp;
int from;
{
    unsigned  long conv_id;
    unsigned char rts;
    unsigned char wr;
    unsigned int max_length ;
    unsigned  char tpn[64];
    struct rc {
                unsigned int prim;
                unsigned long sec;
              } v_rc;
    unsigned long rc;
    char p_lu[9];
    char p_mode[9];
    struct msg {  /*send_data*/
                int len;
                char str[40];
               } gds;
    int length;

              if (!tp_exist) {
                 tp_started
                             (lu_id,
                              tp_id,
                              &rc);
                 if (rc != 0) {
                                 return (-1);
                               }
                 tp_exist = 1; /* TP_started O.K! */
              }

              strcpy (tpn,"DIR "); /* name of work */
              strcat (tpn, "path");      /* name of sub-funct */
              /*conv_id - return param -id work link */
              strcpy(p_lu, pstr[from].plu);
              strcpy(p_mode, pstr[from].mode_name);

              allocate  (p_lu,
                         p_mode,
                         tpn,
                         WHEN_SESSION_ALLOCATED,
                         NONE,
                         NONE,
                         NULL,
                         NULL,
                         tp_id,
                         &conv_id,
                         NULL,
                         &v_rc) ;

              if (v_rc.prim != 0) {
                  return (-1);
              }
              max_length = 255;
              recwait (tp_id,   /* receive DATA */
                       conv_id,
                       ll,
                       &v_rc,
                       &length,
                       max_length,
                       &rts,
                       &gds,
                       &wr);
              if (v_rc.prim != 0) {
                  return -1;
	      }
              gds.str[gds.len - 2] = 0x00;
	      strcpy (rp, gds.str);
              recwait (tp_id,   /* receive DEALLOCATE_NORMAL */
                       conv_id,
                       ll,
                       &v_rc,
                       &length,
                       max_length,
                       &rts,
                       &gds,
                       &wr);
              if (v_rc.prim != 0) {
                  if (v_rc.prim == deallocate_normal) {
                        return 0;
                  }
                  else
                        return -1;
              }
       return 0;
}
