void gfxdevice_record_init(gfxdevice_t*dev, char use_tempfile) { internal_t*i = (internal_t*)rfx_calloc(sizeof(internal_t)); memset(dev, 0, sizeof(gfxdevice_t)); dev->name = "record"; dev->internal = i; i->use_tempfile = use_tempfile; if(!use_tempfile) { writer_init_growingmemwriter(&i->w, 1048576); } else { char buffer[128]; i->filename = strdup(mktempname(buffer, "gfx")); writer_init_filewriter2(&i->w, i->filename); } i->fontlist = gfxfontlist_create(); i->cliplevel = 0; dev->setparameter = record_setparameter; dev->startpage = record_startpage; dev->startclip = record_startclip; dev->endclip = record_endclip; dev->stroke = record_stroke; dev->fill = record_fill; dev->fillbitmap = record_fillbitmap; dev->fillgradient = record_fillgradient; dev->addfont = record_addfont; dev->drawchar = record_drawchar; dev->drawlink = record_drawlink; dev->endpage = record_endpage; dev->finish = record_finish; }
char*reader_readString(reader_t*r) { writer_t g; writer_init_growingmemwriter(&g, 16); while(1) { U8 b = reader_readU8(r); writer_writeU8(&g, b); if(!b) break; } char*string = (char*)writer_growmemwrite_getmem(&g); g.finish(&g); return string; }