void initCircleThingy() { vector<GLfloat> vertices; load_raw("circleThingy.raw",vertices); if (vertices.size() % 9 != 0) { cout << "problem loading RAW\n"; } glNewList(circleThingyDL, GL_COMPILE); for (int i=0; i < vertices.size(); i += 9) { vec3 x = vec3(vertices.at(i+3)-vertices.at(i), vertices.at(i+4)-vertices.at(i+1), vertices.at(i+5)-vertices.at(i+2) ), y = vec3(vertices.at(i+6)-vertices.at(i), vertices.at(i+7)-vertices.at(i+1), vertices.at(i+8)-vertices.at(i+2) ); vec3 triNormVec = glm::core::function::geometric::cross(x,y); triNormVec = glm::core::function::geometric::normalize(triNormVec); glBegin(GL_TRIANGLES); glVertex3f(vertices.at(i+0),vertices.at(i+1),vertices.at(i+2)); glNormal3f(triNormVec[0], triNormVec[1], triNormVec[2]); glVertex3f(vertices.at(i+3),vertices.at(i+4),vertices.at(i+5)); glNormal3f(triNormVec[0], triNormVec[1], triNormVec[2]); glVertex3f(vertices.at(i+6),vertices.at(i+7),vertices.at(i+8)); glNormal3f(triNormVec[0], triNormVec[1], triNormVec[2]); glEnd(); } glEndList(); }
extern "C" void gxpport_loadimmutable_from_platformbuffer (unsigned char* srcBuffer, int length, jboolean isStatic, int* ret_imgWidth, int* ret_imgHeight, gxpport_image_native_handle *newImmutableImagePtr, gxutl_native_image_error_codes* creationErrorPtr) { int rscSize; gxutl_image_buffer_raw* dataBuffer = (gxutl_image_buffer_raw*)srcBuffer; /* Check resource limit */ rscSize = ImgRegionRscSize(NULL, dataBuffer->width, dataBuffer->height); if (midpCheckResourceLimit(RSC_TYPE_IMAGE_IMMUT, rscSize) == 0) { /* Exceed Resource limit */ *creationErrorPtr = GXUTL_NATIVE_IMAGE_RESOURCE_LIMIT; return; } _Platform_ImmutableImage* immutableImage = (_Platform_ImmutableImage*)midpMalloc(sizeof(_Platform_ImmutableImage)); if (immutableImage == NULL) { *creationErrorPtr = GXUTL_NATIVE_IMAGE_OUT_OF_MEMORY_ERROR; return; } if (!load_raw(&immutableImage->qimage, dataBuffer, length, isStatic, ret_imgWidth, ret_imgHeight)) { midpFree(immutableImage); *creationErrorPtr = GXUTL_NATIVE_IMAGE_DECODING_ERROR; return; } /* Image creation succeeds */ if (midpIncResourceCount(RSC_TYPE_IMAGE_IMMUT, rscSize) == 0) { REPORT_ERROR(LC_LOWUI, "Error in updating resource limit" " for Immutable image"); } immutableImage->marker = 7; immutableImage->qpixmap = NULL; *newImmutableImagePtr = immutableImage; *creationErrorPtr = GXUTL_NATIVE_IMAGE_NO_ERROR; }
static gint32 open_raw( char* filename, enum pix_fmt fmt, struct raw_data* img_data, const gchar* plugin_name ) { gint32 img; FILE *file; file = fopen(filename, "rb"); if (!file) { show_message("can't open file for reading"); return(ERROR); } img = load_raw(filename, file, fmt, img_data, plugin_name); fclose (file); return img; }
extern "C" void gxpport_decodeimmutable_from_selfidentifying (unsigned char* srcBuffer, int length, int* imgWidth, int* imgHeight, gxpport_image_native_handle *newImmutableImagePtr, gxutl_native_image_error_codes* creationErrorPtr) { MIDP_ERROR err; gxutl_image_format format; unsigned int w, h; err = gxutl_image_get_info(srcBuffer, (unsigned int)length, &format, &w, &h); if (err != MIDP_ERROR_NONE || format == GXUTL_IMAGE_FORMAT_UNSUPPORTED) { *creationErrorPtr = GXUTL_NATIVE_IMAGE_UNSUPPORTED_FORMAT_ERROR; return; } /* Check resource limit */ int rscSize = ImgRegionRscSize(NULL, w, h); if (midpCheckResourceLimit(RSC_TYPE_IMAGE_IMMUT, rscSize) == 0) { /* Exceed Resource limit */ *creationErrorPtr = GXUTL_NATIVE_IMAGE_RESOURCE_LIMIT; return; } bool loadResult = FALSE; _Platform_ImmutableImage* immutableImage = (_Platform_ImmutableImage*)midpMalloc(sizeof(_Platform_ImmutableImage)); if (immutableImage == NULL) { *creationErrorPtr = GXUTL_NATIVE_IMAGE_OUT_OF_MEMORY_ERROR; return; } switch(format) { case GXUTL_IMAGE_FORMAT_JPEG: case GXUTL_IMAGE_FORMAT_PNG: immutableImage->qimage = new QImage(); if (NULL == immutableImage->qimage) { *creationErrorPtr = GXUTL_NATIVE_IMAGE_OUT_OF_MEMORY_ERROR; return; } if (immutableImage->qimage->loadFromData((uchar*)srcBuffer, (unsigned int)length)) { *imgWidth = immutableImage->qimage->width(); *imgHeight = immutableImage->qimage->height(); if ((0 == *imgWidth) || (0 == *imgHeight)) { delete immutableImage->qimage; } else { immutableImage->marker = 4; loadResult = TRUE; } } else { delete immutableImage->qimage; immutableImage->qimage = NULL; } break; case GXUTL_IMAGE_FORMAT_RAW: loadResult = load_raw(&immutableImage->qimage, (gxutl_image_buffer_raw*)srcBuffer, (unsigned int)length, KNI_FALSE, imgWidth, imgHeight); immutableImage->marker = 5; break; default: /* Shouldn't be here */ *creationErrorPtr = GXUTL_NATIVE_IMAGE_UNSUPPORTED_FORMAT_ERROR; return; } if (!loadResult) { midpFree(immutableImage); *creationErrorPtr = GXUTL_NATIVE_IMAGE_DECODING_ERROR; return; } /* Image creation succeeds */ if (midpIncResourceCount(RSC_TYPE_IMAGE_IMMUT, rscSize) == 0) { REPORT_ERROR(LC_LOWUI, "Error in updating resource limit" " for Immutable image"); } immutableImage->qpixmap = NULL; *newImmutableImagePtr = immutableImage; *creationErrorPtr = GXUTL_NATIVE_IMAGE_NO_ERROR; }
void BackupDevice::loadfile() { //never use save files if we are in movie mode if(isMovieMode) return; if(filename.length() ==0) return; //No sense crashing if no filename supplied FILE* inf = fopen(filename.c_str(),"rb"); if(!inf) { //no dsv found; we need to try auto-importing a file with .sav extension printf("DeSmuME .dsv save file not found. Trying to load an old raw .sav file.\n"); //change extension to sav char tmp[MAX_PATH]; strcpy(tmp,filename.c_str()); tmp[strlen(tmp)-3] = 0; strcat(tmp,"sav"); inf = fopen(tmp,"rb"); if(!inf) { printf("Missing save file %s\n",filename.c_str()); return; } fclose(inf); load_raw(tmp); } else { //scan for desmume save footer const u32 cookieLen = strlen(kDesmumeSaveCookie); char *sigbuf = new char[cookieLen]; fseek(inf, -cookieLen, SEEK_END); fread(sigbuf,1,cookieLen,inf); int cmp = memcmp(sigbuf,kDesmumeSaveCookie,cookieLen); delete[] sigbuf; if(cmp) { //maybe it is a misnamed raw save file. try loading it that way printf("Not a DeSmuME .dsv save file. Trying to load as raw.\n"); fclose(inf); load_raw(filename.c_str()); return; } //desmume format fseek(inf, -cookieLen, SEEK_END); fseek(inf, -4, SEEK_CUR); u32 version = 0xFFFFFFFF; read32le(&version,inf); if(version!=0) { printf("Unknown save file format\n"); return; } fseek(inf, -24, SEEK_CUR); struct { u32 size,padSize,type,addr_size,mem_size; } info; read32le(&info.size,inf); read32le(&info.padSize,inf); read32le(&info.type,inf); read32le(&info.addr_size,inf); read32le(&info.mem_size,inf); //establish the save data data.resize(info.size); fseek(inf, 0, SEEK_SET); if(info.size>0) fread(&data[0],1,info.size,inf); //read all the raw data we have state = RUNNING; addr_size = info.addr_size; //none of the other fields are used right now fclose(inf); } }
extern int main(int argc, char *argv[]) { struct pt_image_section_cache *iscache; struct ptxed_decoder decoder; struct ptxed_options options; struct ptxed_stats stats; struct pt_config config; struct pt_image *image; const char *prog; int errcode, i; if (!argc) { help(""); return 1; } prog = argv[0]; iscache = NULL; image = NULL; memset(&decoder, 0, sizeof(decoder)); decoder.type = pdt_block_decoder; memset(&options, 0, sizeof(options)); memset(&stats, 0, sizeof(stats)); pt_config_init(&config); iscache = pt_iscache_alloc(NULL); if (!iscache) { fprintf(stderr, "%s: failed to allocate image section cache.\n", prog); goto err; } image = pt_image_alloc(NULL); if (!image) { fprintf(stderr, "%s: failed to allocate image.\n", prog); goto err; } for (i = 1; i < argc;) { char *arg; arg = argv[i++]; if (strcmp(arg, "--help") == 0 || strcmp(arg, "-h") == 0) { help(prog); goto out; } if (strcmp(arg, "--version") == 0) { version(prog); goto out; } if (strcmp(arg, "--pt") == 0) { if (argc <= i) { fprintf(stderr, "%s: --pt: missing argument.\n", prog); goto out; } arg = argv[i++]; if (ptxed_have_decoder(&decoder)) { fprintf(stderr, "%s: duplicate pt sources: %s.\n", prog, arg); goto err; } errcode = pt_cpu_errata(&config.errata, &config.cpu); if (errcode < 0) goto err; errcode = load_pt(&config, arg, prog); if (errcode < 0) goto err; switch (decoder.type) { case pdt_insn_decoder: decoder.variant.insn = pt_insn_alloc_decoder(&config); if (!decoder.variant.insn) { fprintf(stderr, "%s: failed to create " "decoder.\n", prog); goto err; } errcode = pt_insn_set_image(decoder.variant.insn, image); if (errcode < 0) { fprintf(stderr, "%s: failed to set image.\n", prog); goto err; } break; case pdt_block_decoder: decoder.variant.block = pt_blk_alloc_decoder(&config); if (!decoder.variant.block) { fprintf(stderr, "%s: failed to create " "decoder.\n", prog); goto err; } errcode = pt_blk_set_image(decoder.variant.block, image); if (errcode < 0) { fprintf(stderr, "%s: failed to set image.\n", prog); goto err; } break; } continue; } if (strcmp(arg, "--raw") == 0) { if (argc <= i) { fprintf(stderr, "%s: --raw: missing argument.\n", prog); goto out; } arg = argv[i++]; errcode = load_raw(iscache, image, arg, prog); if (errcode < 0) goto err; continue; } #if defined(FEATURE_ELF) if (strcmp(arg, "--elf") == 0) { uint64_t base; if (argc <= i) { fprintf(stderr, "%s: --elf: missing argument.\n", prog); goto out; } arg = argv[i++]; base = 0ull; errcode = extract_base(arg, &base); if (errcode < 0) goto err; errcode = load_elf(iscache, image, arg, base, prog, options.track_image); if (errcode < 0) goto err; continue; } #endif /* defined(FEATURE_ELF) */ if (strcmp(arg, "--att") == 0) { options.att_format = 1; continue; } if (strcmp(arg, "--no-inst") == 0) { options.dont_print_insn = 1; continue; } if (strcmp(arg, "--quiet") == 0 || strcmp(arg, "-q") == 0) { options.quiet = 1; continue; } if (strcmp(arg, "--offset") == 0) { options.print_offset = 1; continue; } if (strcmp(arg, "--time") == 0) { options.print_time = 1; continue; } if (strcmp(arg, "--raw-insn") == 0) { options.print_raw_insn = 1; continue; } if (strcmp(arg, "--stat") == 0) { options.print_stats = 1; continue; } if (strcmp(arg, "--stat:insn") == 0) { stats.flags |= ptxed_stat_insn; continue; } if (strcmp(arg, "--stat:blocks") == 0) { stats.flags |= ptxed_stat_blocks; continue; } if (strcmp(arg, "--cpu") == 0) { /* override cpu information before the decoder * is initialized. */ if (ptxed_have_decoder(&decoder)) { fprintf(stderr, "%s: please specify cpu before the pt source file.\n", prog); goto err; } if (argc <= i) { fprintf(stderr, "%s: --cpu: missing argument.\n", prog); goto out; } arg = argv[i++]; if (strcmp(arg, "auto") == 0) { errcode = pt_cpu_read(&config.cpu); if (errcode < 0) { fprintf(stderr, "%s: error reading cpu: %s.\n", prog, pt_errstr(pt_errcode(errcode))); return 1; } continue; } if (strcmp(arg, "none") == 0) { memset(&config.cpu, 0, sizeof(config.cpu)); continue; } errcode = pt_cpu_parse(&config.cpu, arg); if (errcode < 0) { fprintf(stderr, "%s: cpu must be specified as f/m[/s]\n", prog); goto err; } continue; } if (strcmp(arg, "--mtc-freq") == 0) { if (!get_arg_uint8(&config.mtc_freq, "--mtc-freq", argv[i++], prog)) goto err; continue; } if (strcmp(arg, "--nom-freq") == 0) { if (!get_arg_uint8(&config.nom_freq, "--nom-freq", argv[i++], prog)) goto err; continue; } if (strcmp(arg, "--cpuid-0x15.eax") == 0) { if (!get_arg_uint32(&config.cpuid_0x15_eax, "--cpuid-0x15.eax", argv[i++], prog)) goto err; continue; } if (strcmp(arg, "--cpuid-0x15.ebx") == 0) { if (!get_arg_uint32(&config.cpuid_0x15_ebx, "--cpuid-0x15.ebx", argv[i++], prog)) goto err; continue; } if (strcmp(arg, "--verbose") == 0 || strcmp(arg, "-v") == 0) { options.track_image = 1; continue; } if (strcmp(arg, "--insn-decoder") == 0) { if (ptxed_have_decoder(&decoder)) { fprintf(stderr, "%s: please specify %s before the pt " "source file.\n", arg, prog); goto err; } decoder.type = pdt_insn_decoder; continue; } if (strcmp(arg, "--block-decoder") == 0) { if (ptxed_have_decoder(&decoder)) { fprintf(stderr, "%s: please specify %s before the pt " "source file.\n", arg, prog); goto err; } decoder.type = pdt_block_decoder; continue; } if (strcmp(arg, "--block:show-blocks") == 0) { options.track_blocks = 1; continue; } if (strcmp(arg, "--block:end-on-call") == 0) { config.flags.variant.block.end_on_call = 1; continue; } fprintf(stderr, "%s: unknown option: %s.\n", prog, arg); goto err; } if (!ptxed_have_decoder(&decoder)) { fprintf(stderr, "%s: no pt file.\n", prog); goto err; } xed_tables_init(); /* If we didn't select any statistics, select them all depending on the * decoder type. */ if (options.print_stats && !stats.flags) { stats.flags |= ptxed_stat_insn; if (decoder.type == pdt_block_decoder) stats.flags |= ptxed_stat_blocks; } decode(&decoder, iscache, &options, options.print_stats ? &stats : NULL); if (options.print_stats) print_stats(&stats); out: ptxed_free_decoder(&decoder); pt_image_free(image); pt_iscache_free(iscache); return 0; err: ptxed_free_decoder(&decoder); pt_image_free(image); pt_iscache_free(iscache); return 1; }
font_desc_t* read_font_desc(const char* fname,float factor,int verbose){ unsigned char sor[1024]; unsigned char sor2[1024]; font_desc_t *desc; FILE *f = NULL; char *dn; //struct stat fstate; char section[64]; int i,j; int chardb=0; int fontdb=-1; int first=1; desc=malloc(sizeof(font_desc_t));if(!desc) goto fail_out; memset(desc,0,sizeof(font_desc_t)); f=fopen(fname,"rt");if(!f){ mp_msg(MSGT_OSD, MSGL_V, "font: can't open file: %s\n",fname); goto fail_out;} i = strlen (fname) - 9; if ((dn = malloc(i+1))){ strncpy (dn, fname, i); dn[i]='\0'; } desc->fpath = dn; // search in the same dir as fonts.desc // desc->fpath=get_path("font/"); // if (stat(desc->fpath, &fstate)!=0) desc->fpath=DATADIR"/font"; // set up some defaults, and erase table desc->charspace=2; desc->spacewidth=12; desc->height=0; for(i=0;i<65536;i++) desc->start[i]=desc->width[i]=desc->font[i]=-1; section[0]=0; while(fgets(sor,1020,f)){ unsigned char* p[8]; int pdb=0; unsigned char *s=sor; unsigned char *d=sor2; int ec=' '; int id=0; sor[1020]=0; /* skip files that look like: TTF (0x00, 0x01), PFM (0x00, 0x01), PFB * (0x80, 0x01), PCF (0x01, 0x66), fon ("MZ"), gzipped (0x1f, 0x8b) */ if (first) { if (!sor[0] || sor[1] == 1 || (sor[0] == 'M' && sor[1] == 'Z') || (sor[0] == 0x1f && sor[1] == 0x8b) || (sor[0] == 1 && sor[1] == 0x66)) { mp_msg(MSGT_OSD, MSGL_ERR, "%s doesn't look like a bitmap font description, ignoring.\n", fname); goto fail_out; } first = 0; } p[0]=d;++pdb; while(1){ int c=*s++; if(c==0 || c==13 || c==10) break; if(!id){ if(c==39 || c==34){ id=c;continue;} // idezojel if(c==';' || c=='#') break; if(c==9) c=' '; if(c==' '){ if(ec==' ') continue; *d=0; ++d; p[pdb]=d;++pdb; if(pdb>=8) break; continue; } } else { if(id==c){ id=0;continue;} // idezojel } *d=c;d++; ec=c; } if(d==sor2) continue; // skip empty lines *d=0; // printf("params=%d sor=%s\n",pdb,sor); // for(i=0;i<pdb;i++) printf(" param %d = '%s'\n",i,p[i]); if(pdb==1 && p[0][0]=='['){ int len=strlen(p[0]); if(len && len<63 && p[0][len-1]==']'){ strcpy(section,p[0]); mp_msg(MSGT_OSD, MSGL_DBG2, "font: Reading section: %s\n",section); if(strcmp(section,"[files]")==0){ ++fontdb; if(fontdb>=16){ mp_msg(MSGT_OSD, MSGL_ERR, "font: Too many bitmaps defined.\n");goto fail_out;} } continue; } } if(strcmp(section,"[fpath]")==0){ if(pdb==1){ free (desc->fpath); // release previously allocated memory desc->fpath=strdup(p[0]); continue; } } else #ifdef __AMIGAOS4__ #define FONT_PATH_SEP "" #else //! path seperator for font paths, may not be more than one character #define FONT_PATH_SEP "/" #endif if(strcmp(section,"[files]")==0){ char *default_dir=MPLAYER_DATADIR FONT_PATH_SEP "font"; if(pdb==2 && strcmp(p[0],"alpha")==0){ char *cp; if (!(cp=malloc(strlen(desc->fpath)+strlen(p[1])+2))) goto fail_out; snprintf(cp,strlen(desc->fpath)+strlen(p[1])+2,"%s" FONT_PATH_SEP "%s", desc->fpath,p[1]); if(!((desc->pic_a[fontdb]=load_raw(cp,verbose)))){ free(cp); if (!(cp=malloc(strlen(default_dir)+strlen(p[1])+2))) goto fail_out; snprintf(cp,strlen(default_dir)+strlen(p[1])+2,"%s" FONT_PATH_SEP "%s", default_dir,p[1]); if (!((desc->pic_a[fontdb]=load_raw(cp,verbose)))){ mp_msg(MSGT_OSD, MSGL_ERR, "Can't load font bitmap: %s\n",p[1]); free(cp); goto fail_out; } } free(cp); continue; } if(pdb==2 && strcmp(p[0],"bitmap")==0){ char *cp; if (!(cp=malloc(strlen(desc->fpath)+strlen(p[1])+2))) goto fail_out; snprintf(cp,strlen(desc->fpath)+strlen(p[1])+2,"%s" FONT_PATH_SEP "%s", desc->fpath,p[1]); if(!((desc->pic_b[fontdb]=load_raw(cp,verbose)))){ free(cp); if (!(cp=malloc(strlen(default_dir)+strlen(p[1])+2))) goto fail_out; snprintf(cp,strlen(default_dir)+strlen(p[1])+2,"%s" FONT_PATH_SEP "%s", default_dir,p[1]); if (!((desc->pic_b[fontdb]=load_raw(cp,verbose)))){ mp_msg(MSGT_OSD, MSGL_ERR, "Can't load font bitmap: %s\n",p[1]); free(cp); goto fail_out; } } free(cp); continue; } } else if(strcmp(section,"[info]")==0){ if(pdb==2 && strcmp(p[0],"name")==0){ desc->name=strdup(p[1]); continue; } if(pdb==2 && strcmp(p[0],"descversion")==0){ // This version field was never used. // Since bitmap fonts are now deprecated there is // no point in handling it. continue; } if(pdb==2 && strcmp(p[0],"spacewidth")==0){ desc->spacewidth=atoi(p[1]); continue; } if(pdb==2 && strcmp(p[0],"charspace")==0){ desc->charspace=atoi(p[1]); continue; } if(pdb==2 && strcmp(p[0],"height")==0){ desc->height=atoi(p[1]); continue; } } else if(strcmp(section,"[characters]")==0){ if(pdb==3){ int chr=p[0][0]; int start=atoi(p[1]); int end=atoi(p[2]); if(sub_unicode && (chr>=0x80)) chr=(chr<<8)+p[0][1]; else if(strlen(p[0])!=1) chr=strtol(p[0],NULL,0); if(end<start) { mp_msg(MSGT_OSD, MSGL_WARN, "error in font desc: end<start for char '%c'\n",chr); } else { desc->start[chr]=start; desc->width[chr]=end-start+1; desc->font[chr]=fontdb; // printf("char %d '%c' start=%d width=%d\n",chr,chr,desc->start[chr],desc->width[chr]); ++chardb; } continue; } } mp_msg(MSGT_OSD, MSGL_ERR, "Syntax error in font desc: %s",sor); goto fail_out; } fclose(f); f = NULL; if (first == 1) { mp_msg(MSGT_OSD, MSGL_ERR, "%s is empty or a directory, ignoring.\n", fname); goto fail_out; } //printf("font: pos of U = %d\n",desc->start[218]); for(i=0;i<=fontdb;i++){ if(!desc->pic_a[i] || !desc->pic_b[i]){ mp_msg(MSGT_OSD, MSGL_ERR, "font: Missing bitmap(s) for sub-font #%d\n",i); goto fail_out; } //if(factor!=1.0f) { // re-sample alpha int f=factor*256.0f; int size=desc->pic_a[i]->w*desc->pic_a[i]->h; int j; mp_msg(MSGT_OSD, MSGL_DBG2, "font: resampling alpha by factor %5.3f (%d) ",factor,f);fflush(stdout); for(j=0;j<size;j++){ int x=desc->pic_a[i]->bmp[j]; // alpha int y=desc->pic_b[i]->bmp[j]; // bitmap #ifdef FAST_OSD x=(x<(255-f))?0:1; #else x=255-((x*f)>>8); // scale //if(x<0) x=0; else if(x>255) x=255; //x^=255; // invert if(x+y>255) x=255-y; // to avoid overflows //x=0; //x=((x*f*(255-y))>>16); //x=((x*f*(255-y))>>16)+y; //x=(x*f)>>8;if(x<y) x=y; if(x<1) x=1; else if(x>=252) x=0; #endif desc->pic_a[i]->bmp[j]=x; // desc->pic_b[i]->bmp[j]=0; // hack } mp_msg(MSGT_OSD, MSGL_DBG2, "DONE!\n"); } if(!desc->height) desc->height=desc->pic_a[i]->h; } j='_';if(desc->font[j]<0) j='?'; for(i=0;i<65536;i++) if(desc->font[i]<0){ desc->start[i]=desc->start[j]; desc->width[i]=desc->width[j]; desc->font[i]=desc->font[j]; } desc->font[' ']=-1; desc->width[' ']=desc->spacewidth; mp_msg(MSGT_OSD, MSGL_V, "Bitmap font %s loaded successfully! (%d chars)\n",fname,chardb); return desc; fail_out: if (f) fclose(f); free(desc->fpath); free(desc->name); free(desc); return NULL; }
void BackupDevice::loadfile() { //never use save files if we are in movie mode if(isMovieMode) return; if(filename.length() ==0) return; //No sense crashing if no filename supplied EMUFILE_FILE* inf = new EMUFILE_FILE(filename.c_str(),"rb"); if(inf->fail()) { delete inf; //no dsv found; we need to try auto-importing a file with .sav extension printf("DeSmuME .dsv save file not found. Trying to load an old raw .sav file.\n"); //change extension to sav char tmp[MAX_PATH]; strcpy(tmp,filename.c_str()); tmp[strlen(tmp)-3] = 0; strcat(tmp,"sav"); inf = new EMUFILE_FILE(tmp,"rb"); if(inf->fail()) { delete inf; printf("Missing save file %s\n",filename.c_str()); return; } delete inf; if (!load_no_gba(tmp)) load_raw(tmp); } else { //scan for desmume save footer const s32 cookieLen = (s32)strlen(kDesmumeSaveCookie); char *sigbuf = new char[cookieLen]; inf->fseek(-cookieLen, SEEK_END); inf->fread(sigbuf,cookieLen); int cmp = memcmp(sigbuf,kDesmumeSaveCookie,cookieLen); delete[] sigbuf; if(cmp) { //maybe it is a misnamed raw save file. try loading it that way printf("Not a DeSmuME .dsv save file. Trying to load as raw.\n"); delete inf; if (!load_no_gba(filename.c_str())) load_raw(filename.c_str()); return; } //desmume format inf->fseek(-cookieLen, SEEK_END); inf->fseek(-4, SEEK_CUR); u32 version = 0xFFFFFFFF; read32le(&version,inf); if(version!=0) { printf("Unknown save file format\n"); return; } inf->fseek(-24, SEEK_CUR); read32le(&info.size,inf); read32le(&info.padSize,inf); read32le(&info.type,inf); read32le(&info.addr_size,inf); read32le(&info.mem_size,inf); u32 left = 0; if (CommonSettings.autodetectBackupMethod == 1) { if (advsc.isLoaded()) { info.type = advsc.getSaveType(); if (info.type != 0xFF || info.type != 0xFE) { u32 adv_size = save_types[info.type+1][1]; if (info.size > adv_size) info.size = adv_size; else if (info.size < adv_size) { left = adv_size - info.size; info.size = adv_size; } } } } //establish the save data resize(info.size); inf->fseek(0, SEEK_SET); if(info.size>0) inf->fread(&data[0],info.size - left); //read all the raw data we have state = RUNNING; addr_size = info.addr_size; //none of the other fields are used right now if (CommonSettings.autodetectBackupMethod != 1 && info.type == 0) { info.type = searchFileSaveType(info.size); if (info.type == 0xFF) info.type = 0; } u32 ss = info.size * 8 / 1024; if (ss >= 1024) { ss /= 1024; printf("Backup size: %i Mbit\n", ss); } else printf("Backup size: %i Kbit\n", ss); delete inf; } }
void Font::load(const char * source){ u_char * current; size_t file_size; u_char * page_start; char * font_name; char * page_name; size_t char_count; //ATexture page_texture; FontHeader *header; string path; char * base = basename(source); char * dir = dirname(source); LOGI("Loading font from %s, basename %s, dirname %s", source, base, dir); if(_data) delete[] _data; const u_char * data = load_raw(source, &file_size); _data = data; current = (u_char*)data; header = (FontHeader*)data; current+=sizeof(FontHeader); LOGI("Read font file version %i", header->version); BlockHeader *block_header; while(((size_t)(current-data)) < file_size){ block_header = (BlockHeader*)current; current+=sizeof(BlockHeader); switch(block_header->block_type){ case 1: // FontInfo block FontInfo *info; info = (FontInfo*)current; LOGI("Font Info block, font size: %hu", info->font_size); font_name = &(info->font_name); LOGI("Font name: %s", (current+14)); break; case 2: // FontCommon block, common values for characters FontCommon *common; common = (FontCommon*)current; LOGI("Font Common block, line height %i, pages %i, scale h %i, scale w %i", common->line_height, common->pages, common->scale_h, common->scale_w); _line_height = common->line_height; _base = common->base; _scale_w = common->scale_w; _scale_h = common->scale_h; _pages_count = common->pages; _bit_field = common->bit_field; _alpha_chnl = common->alpha_chnl; _red_chnl = common->red_chnl; _green_chnl = common->green_chnl; _blue_chnl = common->blue_chnl; break; case 3: page_start = current; for(size_t i=0; i<_pages_count; i++){ page_name = (char*)page_start; page_start += strlen(page_name)+1; path = string(dir) + "/" + page_name; _page_texture = loadBitmap(path.c_str()); //_page_texture = page_texture; //_pages.push_back(page_texture); LOGI("Font page name: %s", path.c_str()); }; break; case 4: FFontChar* fcharacter; AFontChar character; u_char* char_start; char_start = current; char_count = block_header->block_size/sizeof(FFontChar); for(size_t i=0; i<char_count; i++){ fcharacter = (FFontChar*)char_start; char_start += sizeof(FFontChar); character = _char_from_fchar(fcharacter); _characters[character->id] = character; } break; } current+=block_header->block_size; } }