Example #1
0
int iomb_read(mval *v,int4 t)
{
	io_desc 	*io_ptr;
	d_mb_struct	*mb_ptr;
	int 		status;


	assert(stringpool.free >= stringpool.base);
	assert(stringpool.free <= stringpool.top);
	io_ptr = io_curr_device.in;
	mb_ptr = (d_mb_struct *) io_ptr->dev_sp;
	if (stringpool.free + mb_ptr->maxmsg > stringpool.top)
		stp_gcol (mb_ptr->maxmsg);
	v->str.addr = (char *)stringpool.free;
	status = TRUE;
	assert (io_ptr->state == dev_open);
	if (mb_ptr->in_top == mb_ptr->in_pos)
		status = iomb_dataread(t);

	memcpy(v->str.addr,mb_ptr->in_pos,(v->str.len = INTCAST(mb_ptr->in_top - mb_ptr->in_pos)));
	mb_ptr->in_pos = mb_ptr->in_top = mb_ptr->inbuf;
	io_ptr->dollar.x = 0;
	io_ptr->dollar.y++;
	return status;
}
Example #2
0
int iomb_readfl(mval *v, int4 length, int4 t)
{
    int 	status;
    io_desc 	*io_ptr;
    d_mb_struct *mb_ptr;
    int		len;

    status = TRUE;
    io_ptr = io_curr_device.in;
    mb_ptr = (d_mb_struct *) io_ptr->dev_sp;
    assert (io_ptr->state == dev_open);
    if((mb_ptr->in_top - mb_ptr->in_pos) < length)
    {
	status = iomb_dataread(t);
    }
    if(( len = (int)(mb_ptr->in_top - mb_ptr->in_pos)) > length)
    {
	len = length;
    }
    memcpy(v->str.addr, mb_ptr->in_pos, len);
    v->str.len = len;
    mb_ptr->in_pos += len;
    io_ptr->dollar.x += len;
    return status;
}
Example #3
0
short iomb_rdone(mint *v,int4 t)
{
	short 		status;
	io_desc 	*io_ptr;
	d_mb_struct 	*mb_ptr;

	status = TRUE;
	io_ptr = io_curr_device.in;
	mb_ptr = (d_mb_struct *) io_ptr->dev_sp;
	assert (io_ptr->state == dev_open);
	if(mb_ptr->in_top == mb_ptr->in_pos)
		status = iomb_dataread(t);
	if (!status)
	{
		*v = -1;
		return status;
	}
	*v = *mb_ptr->in_pos++;
	io_ptr->dollar.x++;
	return TRUE;
}
Example #4
0
int iomb_rdone(mint *v,int4 t)
{
	short		not_timed_out;
	io_desc		*io_ptr;
	d_mb_struct	*mb_ptr;

	io_ptr = io_curr_device.in;
	assert (io_ptr->state == dev_open);
	mb_ptr = (d_mb_struct *) io_ptr->dev_sp;

	if (mb_ptr->in_top == mb_ptr->in_pos)
		not_timed_out = iomb_dataread(t);
	else
		not_timed_out = TRUE;

	if (not_timed_out && (mb_ptr->in_top != mb_ptr->in_pos))
	{
		*v = *mb_ptr->in_pos++;
		if ((++io_ptr->dollar.x > io_ptr->width) && io_ptr->wrap)
		{
			io_ptr->dollar.y += (io_ptr->dollar.x / io_ptr->width);
			if(io_ptr->length)
				io_ptr->dollar.y %= io_ptr->length;
			io_ptr->dollar.x %= io_ptr->width;
		}
	} else
	{
		*v = -1;
		if (io_ptr->dollar.zeof)
		{
			io_ptr->dollar.x = 0;
			io_ptr->dollar.y++;
		}
	}

	return not_timed_out;
}