/*! \note Still very unsafe, but I need to redo everything later anyway. */ void grs_run(GritShared *grs, GritRec *gr_base) { // Make sure we have shared data. if( grs->dib==NULL && grs->palRec.data==NULL) { lprintf(LOG_WARNING, "No shared data to run with!\n"); return; } // Make copy of gr_base for flags, etc GritRec *gr= grit_alloc(); grs_free(gr->shared); grit_copy_options(gr, gr_base); grit_copy_strings(gr, gr_base); // Attach shared data gr->shared= grs; strrepl(&gr->symName, grs->symName); strrepl(&gr->dstPath, grs->dstPath); if(grs->dib == NULL) { // Palette only. Create new dib. gr->srcDib= dib_alloc(16, 16, 8, NULL); memset(dib_get_pal(gr->srcDib), 0, PAL_MAX*RGB_SIZE); memcpy(dib_get_pal(gr->srcDib), grs->palRec.data, rec_size(&grs->palRec)); } else gr->srcDib= dib_clone(grs->dib); // NOTE: aliasing screws up deletion later; detach manually. gr->_dib= gr->srcDib; // Run for shared gr do { if(!grit_validate(gr)) break; bool grit_prep_gfx(GritRec *gr); bool grit_prep_shared_pal(GritRec *gr); if(gr->gfxProcMode != GRIT_EXCLUDE) grit_prep_gfx(gr); if(gr->palProcMode != GRIT_EXCLUDE) grit_prep_shared_pal(gr); if(gr->bExport) grit_export(gr); } while(0); gr->_dib= NULL; // Detach shared data and delete gr gr->shared= NULL; grit_free(gr); }
/*! Converts and prepares the bitmap for export. */ bool grit_prep(GritRec *gr) { // TODO: clear internals lprintf(LOG_STATUS, "Preparing data.\n"); if(grit_prep_work_dib(gr) == false) { lprintf(LOG_ERROR, " No work DIB D: .\n"); return false; } if(gr->isTiled()) { if(gr->isMapped()) // Convert to tilemap/tileset grit_prep_map(gr); else // Just (meta)tile the image. //# TODO: just (meta)tile; no map. grit_prep_tiles(gr); } /* OLD // NOTE: don't check for -g! just yet: -g! + -m is possible too // if tiles: prep tiles & map grit_prep_tiles(gr); if(gr->gfxMode == GRIT_GFX_TILE) { if(gr->mapProcMode != GRIT_EXCLUDE) grit_prep_map(gr); } */ if(gr->gfxProcMode != GRIT_EXCLUDE) grit_prep_gfx(gr); if(gr->palProcMode != GRIT_EXCLUDE) grit_prep_pal(gr); lprintf(LOG_STATUS, "Data preparation complete.\n"); return true; }