
/*
 *  DGetIoctl.C
 */

#include "lib.h"

short
DGetIoctl(_chan, pval, paux)
void *_chan;
short *pval;
char *paux;
{
    CHANN *chan = (CHANN *)_chan;
    IOSTD *ior;
    short cmd = -1;

    if ((ior = (IOSTD *)GetHead(&chan->rdylist)) || (ior = (IOSTD *)GetHead(&chan->port.mp_MsgList))) {
	if (ior->io_Command == DNCMD_IOCTL) {
	    CIOCTL *cio = (CIOCTL *)ior->io_Data;
	    cmd = cio->cmd;
	    *pval = (cio->valh << 8) | cio->vall;
	    *paux = cio->valaux;
	    Forbid();
	    Remove((NODE *)ior);
	    ReplyMsg((MSG *)ior);
	    Permit();
	}
    }
    FixSignal(chan);
    if (chan->eof)
	SetSignal(1 << chan->port.mp_SigBit, 1 << chan->port.mp_SigBit);
    return(cmd);
}
