/*
 * CopyRight 1995. Nicholas Poljakov all rights reserved.
 */
#include <malloc.h>
#include <dos.h>
#include <stdio.h>
#include <preptrcv.h>
#include <state1.h>

 preptrcv (tp_id,conv_id,type,locks,
          p_rc)

unsigned char tp_id[8];
unsigned long conv_id;
unsigned char type;
unsigned char locks;

struct rc {
 unsigned int prim;
 unsigned long sec; } *p_rc;

 {
  union REGS inregs,outregs;
  struct SREGS segregs;
       char _near *dp1;
       char _near *dp2;
  struct p_rcv *ptr;
  int i,l;

     l = sizeof(struct p_rcv);
     if ((ptr = (char *)calloc(1,l)) == NULL)
       {
        p_rc->prim = PORT_BUSY; /* нет доступной памяти */
        p_rc->sec = 0x00;
        return(0);
        }

     ptr->code=Prepare_to_receive;
     ptr->e_cd=0x0000;

     memcpy (ptr->tp_id,tp_id,8);
     ptr->conv_id=conv_id;
     ptr->type = type;
     ptr->locks = locks;
/*
     inregs.x.dx = FP_OFF(ptr);
     segregs.ds = FP_SEG(ptr);
     inregs.x.ax = ptr->code;

         int86x(0x68,&inregs,&outregs,&segregs);
 */
     dp1 = FP_OFF( ptr );
     dp2 = FP_SEG( ptr );
     _asm
         {
            push  ds
            mov   dx, word ptr dp1[0]
            mov   ax, word ptr dp2[0]
	    mov   ds, ax
        mov   ax, Prepare_to_receive
            int   68h
            pop   ds
         }


  p_rc->prim = ptr->prim_rc;
  p_rc->sec = ptr->sec_rc;
  free(ptr);

 return(0);
 }
