Beispiel #1
0
static Errcode read_scanline(Rfile *rf)
/* Read scanline (hseg) record and load it into the screen. */
{
struct rd_sline sl;

	if(rf_read(rf,&sl,sizeof(sl)) < Success)
		goto error;

	if(((USHORT)sl.sdlen) > PKT_BUFSIZE)
		goto format_error;

	if(sl.sdlen == 0)
		return(Success);

	sl.y = rf->hdr.ydots-1 - sl.y;
	if(rf_read(rf,rf->pktbuf,sl.sdlen) < Success)
		goto error;

	while(sl.xrpt-- > 0)
	{
		pj_put_hseg(rf->screen,rf->pktbuf,sl.x,sl.y,sl.sdlen);
		sl.x += sl.sdlen;
	}

	return(Success);
format_error:
	rf->lasterr = Err_format;
error:
	return(rf->lasterr);
}
Beispiel #2
0
static ssize_t
rf_pread(mdb_tgt_t *t, void *buf, size_t nbytes, physaddr_t addr)
{
	if (RF_CORE(t->t_data) != NULL)
		return (rf_read(RF_CORE(t->t_data), buf, nbytes, addr));

	return (rf_read(RF_OBJECT(t->t_data), buf, nbytes, addr));
}
Beispiel #3
0
static ssize_t
rf_aread(mdb_tgt_t *t, mdb_tgt_as_t as, void *buf,
    size_t len, mdb_tgt_addr_t addr)
{
	switch ((uintptr_t)as) {
	case (uintptr_t)MDB_TGT_AS_VIRT:
	case (uintptr_t)MDB_TGT_AS_PHYS:
		if (RF_CORE(t->t_data) != NULL)
			return (rf_read(RF_CORE(t->t_data), buf, len, addr));
		/*FALLTHRU*/
	case (uintptr_t)MDB_TGT_AS_FILE:
		return (rf_read(RF_OBJECT(t->t_data), buf, len, addr));
	default:
		return (set_errno(EMDB_NOMAP));
	}
}
Beispiel #4
0
int dev_stdin_read(void *dev, int fd, void *buf, int size)
{
        //TODO: This is the PERFORMANCE FIX
        while ((size > rf_getlength(active_proc->stdin)) && (active_proc != focus_proc)) {
                active_proc->state = PSTATE_STDINSLEEP;
                halt();
        }
        return rf_read(active_proc->stdin, buf, size);
}
Beispiel #5
0
static Errcode open_rnd_file(Pdr *pd, char *path, Image_file **pif,
							 Anim_info *ainfo )
/* Open existing rnd file and query for header info. */
{
Errcode err;
Rfile *rf;
Rndhdr rh;

	if((err = rfile_open_sub((Rfile **)pif, path, "rb")) < Success)
		return(err);

	rf = *((Rfile **)pif);

	if(rf_read(rf,&rh,sizeof(rh)) < Success)
		goto rferror;

	if(strncmp(headstr,rh.prs,IDCKSIZE) != 0)
		goto bad_magic;

	rf->hdr = rh.hdr;

	rf->ainfo.width = rf->hdr.xdots;
	rf->ainfo.height = rf->hdr.ydots;
	rf->ainfo.num_frames = 1;
	rf->ainfo.millisec_per_frame = DEFAULT_AINFO_SPEED;

	if(rh.hdr.ncolor <= 0) /* bad file header */
	{
		err = Err_format;
		goto error;
	}
	else 
	{
	ULONG ncolors;

		ncolors = rh.hdr.ncolor-1;
		while(ncolors)
		{
			++rf->ainfo.depth;
			ncolors >>= 1;
		}
	}
	
	if(ainfo)
		*ainfo = rf->ainfo;

	return(Success);

rferror:
	err = rf->lasterr;
	goto error;
bad_magic:
	err = Err_bad_magic;
error:
	close_rnd_file(pif);
	return(err);
}
Beispiel #6
0
static Errcode read_color_map(Rfile *rf)
/* Read all color entries scale them and load into screen until an end of 
 * color map record. */
{
Cmap *cmap;
Rgb3 *rgb;
USHORT maxintens;
struct {
	UBYTE opcode;
	Rd_cmap cm;
} cmrec;

	cmap = rf->screen->cmap;

	if((maxintens = rf->hdr.maxintens) == 0) /* assume unity if 0 input */
		maxintens = RGB_MAX - 1;

	for(;;)
	{
		if(rf_read(rf,&cmrec,sizeof(cmrec)) < Success)
			goto error;

		switch(cmrec.opcode)
		{
   			case RND_CMAP:   /* Set color map entry */
				if(((USHORT)cmrec.cm.ix) > 0xFF) /* out of range */
					continue;
				rgb = &cmap->ctab[cmrec.cm.ix];
				rgb->r = pj_uscale_by(cmrec.cm.r,(RGB_MAX - 1),maxintens);
				rgb->g = pj_uscale_by(cmrec.cm.g,(RGB_MAX - 1),maxintens);
				rgb->b = pj_uscale_by(cmrec.cm.b,(RGB_MAX - 1),maxintens);
				continue;
   			case RND_CMAPE:  /* End of color map */
				pj_cmap_load(rf->screen,cmap); /* load colors to screen */
				return(rf_seek(rf,1-sizeof(cmrec),SEEK_CUR)); 
			default:
				rf->lasterr = Err_format;
				goto error;
		}
	}
error:
	return(rf->lasterr);
}
Beispiel #7
0
static ssize_t
rf_fread(mdb_tgt_t *t, void *buf, size_t nbytes, uintptr_t addr)
{
	return (rf_read(RF_OBJECT(t->t_data), buf, nbytes, addr));
}