예제 #1
0
파일: qio.c 프로젝트: carriercomm/plan9-gpl
Block*
adjustblock(Block* bp, int len)
{
	int n;
	Block *nbp;

	if(len < 0){
		freeb(bp);
		return nil;
	}

	if(bp->rp+len > bp->lim){
		nbp = copyblock(bp, len);
		freeblist(bp);
		QDEBUG checkb(nbp, "adjustblock 1");

		return nbp;
	}

	n = BLEN(bp);
	if(len > n)
		memset(bp->wp, 0, len-n);
	bp->wp = bp->rp+len;
	QDEBUG checkb(bp, "adjustblock 2");

	return bp;
}
예제 #2
0
파일: smsc.c 프로젝트: grobe0ba/plan9front
static int
smscreceive(Dev *ep)
{
	Block *b;
	uint hd;
	int n;

	if(Doburst)
		b = allocb(Hsburst*512);
	else
		b = allocb(Maxpkt+4);
	if((n = read(ep->dfd, b->wp, b->lim - b->base)) < 0){
		freeb(b);
		return -1;
	}
	b->wp += n;
	while(BLEN(b) >= 4){
		hd = GET4(b->rp);
		b->rp += 4;
		n = hd >> 16;
		if(n > BLEN(b))
			break;
		if((hd & Rxerror) == 0){
			if(n == BLEN(b)){
				etheriq(b, 1);
				return 0;
			}
			etheriq(copyblock(b, n), 1);
		}
		b->rp += (n + 3) & ~3;
	}
	freeb(b);
	return 0;
}
예제 #3
0
Picture& Picture::operator=(const Picture& p)
{
	if(this != &p)
	{
		delete []data;
		init(p.height,p.width);
		copyblock(0,0,p);
	}
	return *this;
}
예제 #4
0
파일: rudp.c 프로젝트: Shamar/harvey
/*
 *  Enqueue a copy of an unacked block for possible retransmissions
 */
void
relackq(Reliable *r, Block *bp)
{
	Block *np;

	np = copyblock(bp, blocklen(bp));
	if(r->unacked)
		r->unackedtail->list = np;
	else {
		/* restart timer */
		r->timeout = 0;
		r->xmits = 1;
		r->unacked = np;
	}
	r->unackedtail = np;
	np->list = nil;
}
	// totallength and N are number of complex samples
	void PeriodogramComponent::periodogram(int totallength,int N,float data[],float result[])
	{
		 int num_of_block = 2*totallength/N-1;
		 float datablock[2*N],PSDresult[N],PSDresultshift[N];
		 int offset;
		 clearArray(result,N);
		 for( int i= 1;i<=num_of_block;i++)
		 {
		     offset = N/2*(i-1);
		     copyblock(offset,N,data,datablock);
		     winHan(N,datablock);
		     FFT (datablock, N, 1);
		     PSD(datablock,PSDresult,N);
		     PSDshift(PSDresult,PSDresultshift,N);
		     addArray(result,PSDresultshift,N);
		 }
		 avgArray(result,N,num_of_block);
	}
예제 #6
0
파일: rudp.c 프로젝트: Shamar/harvey
/*
 *  called with ucb locked
 */
void
relrexmit(Conv *c, Reliable *r)
{
	Rudppriv *upriv;
	Block *np;
	Fs *f;

	upriv = c->p->priv;
	f = c->p->f;
	r->timeout = 0;
	if(r->xmits++ > Rudpmaxxmit){
		relhangup(c, r);
		return;
	}

	upriv->rxmits++;
	np = copyblock(r->unacked, blocklen(r->unacked));
	DPRINT("rxmit r->ackrvcd+1 = %lud\n", r->ackrcvd+1);
	doipoput(c, f, np, 0, c->ttl, c->tos);
}
예제 #7
0
Picture::Picture(const Picture& p):
	height(p.height), width(p.width),
	data(new char[p.height * p.width])
{
	copyblock(0,0,p);
}