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); }
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)); }
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)); } }
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); }
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); }
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); }
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)); }