Esempio n. 1
0
 void bwrite(int f, char * buf, char * &bufptr, T val) {
     if (bufptr + sizeof(T) - buf >=  bufsize) {
         writea(f, buf, bufptr - buf);
         bufptr = buf;
     }
     *((T*)bufptr) = val;
     bufptr += sizeof(T);
 }
Esempio n. 2
0
size_t write_compressed(int f, T * tbuf, size_t nbytes) {
    
#ifndef GRAPHCHI_DISABLE_COMPRESSION
    unsigned char * buf = (unsigned char*)tbuf;
    int ret;
    unsigned have;
    z_stream strm;
    int CHUNK = (int) std::max((size_t)4096 * 1024, nbytes);
    unsigned char * out = (unsigned char *) malloc(CHUNK);
    lseek(f, 0, SEEK_SET);

    /* allocate deflate state */
    strm.zalloc = Z_NULL;
    strm.zfree = Z_NULL;
    strm.opaque = Z_NULL;
    ret = deflateInit(&strm, Z_BEST_SPEED);
    if (ret != Z_OK)
        assert(false);
    
    /* compress until end of file */
    strm.avail_in = (int) nbytes;
    strm.next_in = buf;
    
    int trerr = ftruncate(f, 0);
    IASSERT (trerr == 0);
    size_t totwritten = 0;
    
   /* run deflate() on input until output buffer not full, finish
     compression if all of source has been read in */
    do {
        strm.avail_out = CHUNK;
        strm.next_out = out;
        ret = deflate(&strm, Z_FINISH);    /* no bad return value */
        assert(ret != Z_STREAM_ERROR);  /* state not clobbered */
        have = CHUNK - strm.avail_out;
        if (write(f, out, have) != have) {
            (void)deflateEnd(&strm);
            assert(false);
        }
        totwritten += have;
    } while (strm.avail_out == 0);
    IASSERT(strm.avail_in == 0);     /* all input will be used */
        
    IASSERT(ret == Z_STREAM_END);        /* stream will be complete */
    
    /* clean up and return */
    (void)deflateEnd(&strm);
    free(out);
    return totwritten;
#else
    writea(f, tbuf, nbytes);
    return nbytes;
#endif 

}
Esempio n. 3
0
        void finish() {
            flush();

            /* Write rest of the buffer out */
            writea(fd, buf, bufptr - buf);
            free(buf);
            buf = NULL;
            
            write_header();
            close(fd);
        }
Esempio n. 4
0
int
_er90b_writea(struct fdinfo *fio, bitptr bufptr, int nbytes, 
	struct ffsw *retstat, int fulp, int *ubc)
{
int ret = 0;
char *buf;
ER90BYT *f;
int zero = 0;
struct ffsw dumstat;

	buf = BPTR2CP(bufptr);
	if ((BPBITOFF(bufptr) & 7) != 0 || *ubc != 0)
		ERETURN(retstat, FDC_ERR_UBC, 0);

	if (fio->rwflag == POSITIN) {
		f = (ER90BYT *)fio->lyr_info;
		if (f->tpos) {
			ret = _tape_tpwait(f->fd, &(f->tpos));
			if (ret < 0)
				ERETURN(retstat, errno, 0);
		}		
	}
	else if (fio->rwflag == READIN) {
		/* write after read requires position to zero */
		ret = _er90b_pos(fio, FP_RSEEK, &zero, 1,
			&dumstat);
		if (ret < 0) {
			*retstat = dumstat;
			return(ERR);
		}
	}

	if (nbytes > 0) {
		CLRFFSTAT(*retstat);	/* flag async in progress */
		ret=   writea(fio->realfd, buf, nbytes,
			(struct iosw *)retstat, 0);
		if (ret < 0)
			ERETURN(retstat, errno, 0);
	}
	else if (nbytes < 0) {
		ERETURN(retstat, FDC_ERR_REQ, 0);
	}
	else {	/* nbytes == 0 */
		retstat->sw_flag = 1;
		FFSTAT(*retstat) = FFCNT; /* I/O is done, and other stat */
					/* fields are already set. */
	}
	fio->rwflag = WRITIN;
	return (ret);
}
Esempio n. 5
0
static void sca_init_sync_port(port_t *port)
{
	card_t *card = port_to_card(port);
	int transmit, i;

	port->rxin = 0;
	port->txin = 0;
	port->txlast = 0;

#if !defined(PAGE0_ALWAYS_MAPPED) && !defined(ALL_PAGES_ALWAYS_MAPPED)
	openwin(card, 0);
#endif

	for (transmit = 0; transmit < 2; transmit++) {
		u16 dmac = transmit ? get_dmac_tx(port) : get_dmac_rx(port);
		u16 buffs = transmit ? card->tx_ring_buffers
			: card->rx_ring_buffers;

		for (i = 0; i < buffs; i++) {
			pkt_desc __iomem *desc = desc_address(port, i, transmit);
			u16 chain_off = desc_offset(port, i + 1, transmit);
			u32 buff_off = buffer_offset(port, i, transmit);

			writea(chain_off, &desc->cp);
			writel(buff_off, &desc->bp);
			writew(0, &desc->len);
			writeb(0, &desc->stat);
		}

		/* DMA disable - to halt state */
		sca_out(0, transmit ? DSR_TX(phy_node(port)) :
			DSR_RX(phy_node(port)), card);
		/* software ABORT - to initial state */
		sca_out(DCR_ABORT, transmit ? DCR_TX(phy_node(port)) :
			DCR_RX(phy_node(port)), card);

#ifdef __HD64570_H
		sca_out(0, dmac + CPB, card); /* pointer base */
#endif
		/* current desc addr */
		sca_outa(desc_offset(port, 0, transmit), dmac + CDAL, card);
		if (!transmit)
			sca_outa(desc_offset(port, buffs - 1, transmit),
				 dmac + EDAL, card);
		else
			sca_outa(desc_offset(port, 0, transmit), dmac + EDAL,
				 card);

		/* clear frame end interrupt counter */
		sca_out(DCR_CLEAR_EOF, transmit ? DCR_TX(phy_node(port)) :
			DCR_RX(phy_node(port)), card);

		if (!transmit) { /* Receive */
			/* set buffer length */
			sca_outw(HDLC_MAX_MRU, dmac + BFLL, card);
			/* Chain mode, Multi-frame */
			sca_out(0x14, DMR_RX(phy_node(port)), card);
			sca_out(DIR_EOME | DIR_BOFE, DIR_RX(phy_node(port)),
				card);
			/* DMA enable */
			sca_out(DSR_DE, DSR_RX(phy_node(port)), card);
		} else {	/* Transmit */
			/* Chain mode, Multi-frame */
			sca_out(0x14, DMR_TX(phy_node(port)), card);
			/* enable underflow interrupts */
			sca_out(DIR_BOFE, DIR_TX(phy_node(port)), card);
		}
	}

	hdlc_set_carrier(!(sca_in(get_msci(port) + ST3, card) & ST3_DCD),
			 port_to_dev(port));
}
Esempio n. 6
0
int main()
{
	int s, len;
	char num[10];
	
	while (scanf("%d %s",&s, num)==2&&s)
	{
		len=strlen(num);
		for (int i=1; i<=2*s+3; ++i)
			for (int j=1; j<=len*(s+2); ++j)
				lc[i][j]=' ';
		for (int k=0; k<len; k++)
		{
			int x=1, y=k*(s+2)+1;
			if (num[k] == '0') {
				writea(x, y, s);
				writeb(x, y, s);
				writec(x, y, s);
				writed(x, y, s);
				writee(x, y, s);
				writef(x, y, s);
			}
			else if (num[k] == '1') {
				writee(x, y, s);
				writed(x, y, s);
			}
			else if (num[k] == '2') {
				writeb(x, y, s);
				writec(x, y, s);
				writee(x, y, s);
				writef(x, y, s);
				writeg(x, y, s);
			}
			else if (num[k] == '3') {
				writef(x, y, s);
				writee(x, y, s);
				writeg(x, y, s);
				writed(x, y, s);
				writec(x, y, s);
			}
			else if (num[k] == '4') {
				writea(x, y, s);
				writeg(x, y, s);
				writee(x, y, s);
				writed(x, y, s);
			}
			else if (num[k] == '5') {
				writef(x, y, s);
				writea(x, y, s);
				writeg(x, y, s);
				writed(x, y, s);
				writec(x, y, s);
			}
			else if (num[k] == '6') {
				writef(x, y, s);
				writea(x, y, s);
				writeb(x, y, s);
				writec(x, y, s);
				writed(x, y, s);
				writeg(x, y, s);
			}
			else if (num[k] == '7') {
				writef(x, y, s);
				writee(x, y, s);
				writed(x, y, s);
			}
			else if (num[k] == '8') {
				writea(x, y, s);
				writeb(x, y, s);
				writec(x, y, s);
				writed(x, y, s);
				writee(x, y, s);
				writef(x, y, s);
				writeg(x, y, s);
			}
			else {
				writef(x, y, s);
				writea(x, y, s);
				writeg(x, y, s);
				writee(x, y, s);
				writed(x, y, s);
				writec(x, y, s);
			}
		}
		for (int i=1; i<=2*s+3; i++)
		{
			for (int j=1; j<=len*(s+2); j++)
			{
				printf("%c",lc[i][j]);
				if (j%(s+2)==0&&(j<len*(s+2))) printf(" ");
			}
			puts("");
		}
		puts("");
	}
	return 0;
}