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; }
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; }
Picture& Picture::operator=(const Picture& p) { if(this != &p) { delete []data; init(p.height,p.width); copyblock(0,0,p); } return *this; }
/* * 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); }
/* * 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); }
Picture::Picture(const Picture& p): height(p.height), width(p.width), data(new char[p.height * p.width]) { copyblock(0,0,p); }