Metropoli BBS
VIEWER: pioin.c MODE: TEXT (ASCII)
/*  pioin.c */

#include "mvdm.h"                       /* VDH services, etc.   */
#include "pio.h"      
#include "basemid.h"
   
/* PIO specific         */

#pragma alloc_text(CSWAP_TEXT,PIODataIn,RequestDirect)

extern IOH Ioh;

/* entry from data input trap in VDM */

BYTE HOOKENTRY PIODataIn(ULONG portaddr, PCRF pcrf)
{
    BYTE dataread;                     /* set up byte to return */

	 VdhInt3();

	 RequestDirect();

	 /* disable I/O trap */

	 VDHSetIOHookState(current_VDM,DIGIO_BASE,3,&Ioh,0);

    dataread = inp(portaddr);	
    return(dataread);                  /* return data read      */
}

BOOL HOOKENTRY RequestDirect(void)
{
	if (owner_VDM != current_VDM)
	{
	  if (owner_VDM !=0)
	  {
	     VDHPopup(0,0,MSG_DEVICE_IN_USE,&Resp,ABORT,0);
		  if (Resp != ABORT)
		  {
		     VDHKillVDM(current_VDM);
			  owner_VDM = current_VDM;
		  }
	  }
	  else
	  owner_VDM = current_VDM;
	}
}
[ RETURN TO DIRECTORY ]