Added RZX browser screen preview

This commit is contained in:
fabio.olimpieri 2015-03-15 14:53:19 +00:00
parent adfc358ec1
commit 8e988a0240
3 changed files with 62 additions and 9 deletions

View File

@ -517,6 +517,11 @@ void print_font(SDL_Surface *screen, int r, int g, int b,
SDL_FreeSurface(font_surf);
}
int extract_screen_rzx (char *screen, FILE * fichero)
{
return -1;
}
int extract_screen(char* screen, const char* name)
{
FILE *fichero;
@ -573,6 +578,21 @@ int extract_screen(char* screen, const char* name)
return retorno;
}
if ((ext_matches(name, ".rzx")||ext_matches(name, ".RZX")))
{
sprintf(filename,"%s/%s",load_path_rzx, name);
fichero=fopen(filename,"rb");
if (!fichero) //Try in the tmp zip directory
{
sprintf(filename,"%s/%s",path_tmp, name);
fichero=fopen(filename,"rb");
if (!fichero) return -1;
}
retorno = extract_screen_rzx(screen, fichero);
fclose(fichero);
return retorno;
}
return -1;
}
@ -587,12 +607,40 @@ void draw_scr_file(int x,int y, const char *selected_file, int which)
char name[MAX_PATH_LENGTH];
char filename[MAX_PATH_LENGTH];
char *ptr;
char block_n[5];
char ext[4];
unsigned int rzx_position, block_n_int;
if (selected_file==NULL) // Aborted
return;
strcpy(name,selected_file);
strcpy(name,selected_file);
if (strstr(name, "Frames:")&&(which==0)) //RZX Browser item
{
if (name[0]==']') strncpy(block_n, name+1,4);
else strncpy(block_n, name,4);
block_n[4]=0;
block_n_int=atoi(block_n);
if (block_n_int >(MAX_RZX_BROWSER_ITEM-1)) return;
rzx_position=rzx_browser_list[block_n_int].position;
if (extract_snapshot(rzx_position, load_path_snaps, ext)) return; //error
strcpy(name, "rzxtemp.");
strcat(name, ext);
if (extract_screen(screen, name)) return; //error
sprintf(filename, "%s/%s", load_path_snaps, name);
unlink(filename);
}
else
{
if ((ext_matches(name, ".zip")||ext_matches(name, ".ZIP")))
{
//remove the zip extension
@ -634,7 +682,7 @@ void draw_scr_file(int x,int y, const char *selected_file, int which)
fclose(fichero);
}
}
}
p_translt = ordenador.translate;
p_translt2 = ordenador.translate2;

View File

@ -281,15 +281,16 @@ void set_rzxfile_position(unsigned int rzx_position)
#endif
}
int extract_snapshot(int position)
int extract_snapshot(unsigned int position, char *path, char *ext)
{
int done=0;
long old_position, fpos;
int done=0, ret=0;
int old_position, fpos;
FILE *snapfile;
old_position=ftell(rzxfile);
fseek(rzxfile,position,SEEK_SET);
fread(block.buff,5,1,rzxfile);
fread(block.buff,12,1,rzxfile);
strcpy(rzx_snap.filename,"");
rzx_snap.options=0x00;
@ -301,8 +302,10 @@ old_position=ftell(rzxfile);
fpos=ftell(rzxfile);
rzx_popen(fpos,"rb");
#endif
strcpy(rzx_snap.filename,"rzxtemp.");
strcpy(rzx_snap.filename, path);
strcat(rzx_snap.filename,"/rzxtemp.");
strcat(rzx_snap.filename,&block.buff[4]);
strcpy(ext, &block.buff[4]);
#ifndef RZX_BIG_ENDIAN
rzx_snap.length=*((rzx_u32*)&block.buff[8]);
#else
@ -311,7 +314,7 @@ old_position=ftell(rzxfile);
/* extract to tempfile */
snapfile=fopen(rzx_snap.filename,"wb");
/* if you can't, skip to next block */
if(snapfile==NULL) return -1;
if(snapfile==NULL) {fseek(rzxfile,old_position,SEEK_SET); return -1;}
/* ok */
//rzx_snap.options|=RZX_REMOVE;
fpos=rzx_snap.length;
@ -332,10 +335,11 @@ old_position=ftell(rzxfile);
#endif
fclose(snapfile);
done=0;
}
}
else ret=-1;
fseek(rzxfile,old_position,SEEK_SET);
return 0;
return ret;
}
void rzx_close_irb()

View File

@ -139,6 +139,7 @@ int rzx_add_snapshot(const char *filename, const rzx_u32 flags);
int rzx_add_comment(const char *text, const rzx_u32 flags);
void set_rzxfile_position(unsigned int rzx_position);
int extract_snapshot(unsigned int position, char *path, char *ext);
#ifdef RZX_DEBUG
extern rzx_u16 INcount;