mirror of
https://github.com/Oibaf66/fbzx-wii.git
synced 2024-11-24 17:16:57 +01:00
FTP and SMP connect also after start up, SCRs on file select menus
This commit is contained in:
parent
1a74eec1d5
commit
27460a96b6
@ -611,7 +611,7 @@ inline void show_screen (int tstados) {
|
||||
temporal3 = ordenador.memoria[(((*ordenador.p_translt) + (ordenador.video_offset))&0xFFFFFF80)+(procesador.R&0x7F)]; // data with snow
|
||||
ordenador.screen_snow=0; // no more snow for now
|
||||
} else
|
||||
temporal3 = ordenador.memoria[(*ordenador.p_translt) + ordenador.video_offset]; // bitmap // bitmap
|
||||
temporal3 = ordenador.memoria[(*ordenador.p_translt) + ordenador.video_offset]; // bitmap
|
||||
|
||||
ordenador.p_translt++;
|
||||
ordenador.p_translt2++;
|
||||
|
@ -71,7 +71,8 @@ unsigned char *sound[NUM_SNDBUF];
|
||||
char path_snaps[2049];
|
||||
char path_taps[2049];
|
||||
char path_mdrs[2049];
|
||||
char path_scr[2049];
|
||||
char path_scr1[2049];
|
||||
char path_scr2[2049];
|
||||
char path_confs[2049];
|
||||
char path_poke[2049];
|
||||
char path_tmp[2049];
|
||||
@ -1267,14 +1268,16 @@ int main(int argc,char *argv[]) {
|
||||
strcat(path_snaps,"/");
|
||||
strcpy(path_taps,path_snaps);
|
||||
strcpy(path_mdrs,path_snaps);
|
||||
strcpy(path_scr,path_snaps);
|
||||
strcpy(path_scr1,path_snaps);
|
||||
strcpy(path_scr2,path_snaps);
|
||||
strcpy(path_confs,path_snaps);
|
||||
strcpy(path_poke,path_snaps);
|
||||
strcpy(path_tmp,path_snaps);
|
||||
strcat(path_snaps,"snapshots");
|
||||
strcat(path_taps,"tapes");
|
||||
strcat(path_mdrs,"microdrives");
|
||||
strcat(path_scr,"scr");
|
||||
strcat(path_scr1,"scr"); //left scr for retrocompatibility
|
||||
strcat(path_scr2,"scr2");
|
||||
strcat(path_confs,"configurations");
|
||||
strcat(path_poke,"poke");
|
||||
strcat(path_tmp,"tmp");
|
||||
|
@ -35,13 +35,14 @@ extern unsigned char *sound[NUM_SNDBUF];
|
||||
extern char path_snaps[2049];
|
||||
extern char path_taps[2049];
|
||||
extern char path_mdrs[2049];
|
||||
extern char path_scr[2049];
|
||||
extern char path_scr1[2049];
|
||||
extern char path_scr2[2049];
|
||||
extern char path_confs[2049];
|
||||
extern char path_poke[2049];
|
||||
extern char path_tmp[2049];
|
||||
extern unsigned int colors[80];
|
||||
extern unsigned int jump_frames,curr_frames;
|
||||
extern unsigned char usbismount, smbismount, tmpismade, ftpismount;
|
||||
extern unsigned char usbismount, smbismount, tmpismade, ftpismount,networkisinit;
|
||||
|
||||
void SDL_Fullscreen_Switch(void);
|
||||
void load_rom(char);
|
||||
@ -55,5 +56,8 @@ void init_sound();
|
||||
void init_screen(int resx,int resy,int depth,int fullscreen,int dblbuffer,int hwsurface);
|
||||
int set_video_mode();
|
||||
int remove_dir(char *dir);
|
||||
unsigned char ConnectFTP ();
|
||||
unsigned char ConnectShare ();
|
||||
unsigned char InitNetwork();
|
||||
|
||||
#endif
|
||||
|
169
src/gui_sdl.c
169
src/gui_sdl.c
@ -32,7 +32,6 @@
|
||||
#include "VirtualKeyboard.h"
|
||||
#include "tape.h"
|
||||
#include "menus.h"
|
||||
#include "emulator.h"
|
||||
#include "cargador.h"
|
||||
#include "characters.h"
|
||||
|
||||
@ -147,18 +146,17 @@ static const char *microdrive_messages[] = {
|
||||
};
|
||||
|
||||
static const char *tools_messages[] = {
|
||||
/*00*/ "Save SCR",
|
||||
/*01*/ " ",
|
||||
/*02*/ "Load SCR",
|
||||
/*03*/ " ",
|
||||
/*04*/ "Insert poke",
|
||||
/*05*/ " ",
|
||||
/*06*/ "Load poke file",
|
||||
/*07*/ " ",
|
||||
/*08*/ "Port",
|
||||
/*09*/ "^|sd|usb|smb|ftp",
|
||||
/*10*/ " ",
|
||||
/*11*/ "Help",
|
||||
/*00*/ "Screen shot",
|
||||
/*01*/ "^|Save1|Save2|Load|Delete",
|
||||
/*02*/ " ",
|
||||
/*03*/ "Insert poke",
|
||||
/*04*/ " ",
|
||||
/*05*/ "Load poke file",
|
||||
/*06*/ " ",
|
||||
/*07*/ "Port",
|
||||
/*08*/ "^|sd|usb|smb|ftp",
|
||||
/*09*/ " ",
|
||||
/*10*/ "Help",
|
||||
NULL
|
||||
};
|
||||
|
||||
@ -228,7 +226,7 @@ static void insert_tape()
|
||||
ordenador.tape_current_bit=0;
|
||||
ordenador.tape_current_mode=TAP_TRASH;
|
||||
|
||||
const char *filename = menu_select_file(path_taps, ordenador.current_tap, 0);
|
||||
const char *filename = menu_select_file(path_taps, ordenador.current_tap, 1);
|
||||
|
||||
if (filename==NULL) // Aborted
|
||||
return;
|
||||
@ -286,7 +284,7 @@ static void insert_tape()
|
||||
|
||||
static void delete_tape()
|
||||
{
|
||||
const char *filename = menu_select_file(path_taps, NULL, -1);
|
||||
const char *filename = menu_select_file(path_taps, NULL, 1);
|
||||
|
||||
if (filename==NULL) // Aborted
|
||||
return;
|
||||
@ -309,6 +307,15 @@ void create_tapfile_sdl() {
|
||||
|
||||
clean_screen();
|
||||
|
||||
if (ordenador.port==3) //If FTP is selected, saves file on SD card
|
||||
{
|
||||
int length;
|
||||
strcpy(path_taps,getenv("HOME"));
|
||||
length=strlen(path_taps);
|
||||
if ((length>0)&&(path_taps[length-1]!='/')) strcat(path_taps,"/");
|
||||
strcat(path_taps,"tapes");
|
||||
}
|
||||
|
||||
print_string(videomem,"Choose a name for the TAP file",-1,32,14,0,ancho);
|
||||
print_string(videomem,"(up to 30 characters)",-1,52,14,0,ancho);
|
||||
|
||||
@ -318,6 +325,8 @@ void create_tapfile_sdl() {
|
||||
|
||||
retorno=ask_filename_sdl(nombre2,82,"tap",path_taps,NULL);
|
||||
|
||||
if (ordenador.port==3) strcpy(path_taps,"ftp:");
|
||||
|
||||
if(retorno==2) // abort
|
||||
return;
|
||||
|
||||
@ -760,7 +769,7 @@ static void select_mdr()
|
||||
|
||||
static void delete_mdr()
|
||||
{
|
||||
const char *filename = menu_select_file(path_mdrs, NULL, -1);
|
||||
const char *filename = menu_select_file(path_mdrs, NULL, 0);
|
||||
|
||||
if (filename==NULL) // Aborted
|
||||
return;
|
||||
@ -886,6 +895,19 @@ static void microdrive()
|
||||
}
|
||||
}
|
||||
|
||||
static void delete_scr()
|
||||
{
|
||||
const char *filename = menu_select_file(getenv("HOME"), NULL, 0); //Start from Home
|
||||
|
||||
if (filename==NULL) // Aborted
|
||||
return;
|
||||
|
||||
if ((ext_matches(filename, ".scr")|ext_matches(filename, ".SCR"))
|
||||
&& (msgYesNo("Delete the file?", 0, FULL_DISPLAY_X /2-138/RATIO, FULL_DISPLAY_Y /2-48/RATIO))) unlink(filename);
|
||||
|
||||
free((void *)filename);
|
||||
}
|
||||
|
||||
static void load_scr()
|
||||
{
|
||||
int retorno,loop;
|
||||
@ -894,7 +916,7 @@ static void load_scr()
|
||||
unsigned char paleta_tmp[64];
|
||||
|
||||
|
||||
const char *filename = menu_select_file(path_scr, NULL, -1);
|
||||
const char *filename = menu_select_file(path_scr1, NULL, 0); // Load from SCR1
|
||||
|
||||
if (filename==NULL) // Aborted
|
||||
return;
|
||||
@ -939,15 +961,27 @@ static void load_scr()
|
||||
|
||||
}
|
||||
|
||||
static void save_scr()
|
||||
static void save_scr(int i)
|
||||
{
|
||||
const char *dir = path_scr;
|
||||
const char *dir;
|
||||
const char *tape = ordenador.last_selected_file;
|
||||
char *ptr;
|
||||
FILE *fichero;
|
||||
char db[256];
|
||||
char fb[81];
|
||||
int retorno,retval;
|
||||
int retorno,retval, length;
|
||||
char path_scr[2049];
|
||||
|
||||
strcpy(path_scr,getenv("HOME"));
|
||||
length=strlen(path_scr);
|
||||
if ((length>0)&&(path_scr[length-1]!='/'))
|
||||
strcat(path_scr,"/");
|
||||
|
||||
//Save only on SD card
|
||||
if (i==1) strcat(path_scr,"scr"); else
|
||||
if (i==2) strcat(path_scr,"scr2"); else return;
|
||||
|
||||
dir = path_scr;
|
||||
|
||||
// Name (for saves) - TO CHECK
|
||||
if (tape && strrchr(tape, '/'))
|
||||
@ -959,21 +993,10 @@ static void save_scr()
|
||||
ptr = strrchr (fb, '.');
|
||||
if (ptr) *ptr = 0;
|
||||
|
||||
//If file is taken from FTP, saves file on SD card
|
||||
if (ordenador.port==3)
|
||||
{
|
||||
int length;
|
||||
strcpy(path_scr,getenv("HOME"));
|
||||
length=strlen(path_scr);
|
||||
if ((length>0)&&(path_scr[length-1]!='/')) strcat(path_scr,"/");
|
||||
strcat(path_scr,"scr");
|
||||
dir=path_scr;
|
||||
}
|
||||
|
||||
// Save SCR file
|
||||
snprintf(db, 255, "%s/%s.scr", dir, fb);
|
||||
|
||||
if (ordenador.port==3) strcpy(path_scr,"ftp:");
|
||||
|
||||
fichero=fopen(db,"r");
|
||||
|
||||
@ -989,7 +1012,7 @@ static void save_scr()
|
||||
if(fichero==NULL)
|
||||
retorno=-1;
|
||||
else {
|
||||
retval=fwrite(ordenador.block1+0x04000,6912,1,fichero); // save screen
|
||||
retval=fwrite(ordenador.block1+0x04000+ordenador.video_offset,6912,1,fichero); // save screen
|
||||
if (ordenador.ulaplus!=0) {
|
||||
retval=fwrite(ordenador.ulaplus_palete,64,1,fichero); // save ULAPlus palete
|
||||
}
|
||||
@ -999,7 +1022,7 @@ static void save_scr()
|
||||
|
||||
switch(retorno) {
|
||||
case 0:
|
||||
msgInfo("SCR saved",3000,NULL);
|
||||
if (i==1) msgInfo("SCR1 saved",3000,NULL); else msgInfo("SCR2 saved",3000,NULL);
|
||||
break;
|
||||
case -1:
|
||||
msgInfo("Can't create file",3000,NULL);
|
||||
@ -1021,11 +1044,13 @@ static void set_port(int which)
|
||||
if ((length>0)&&(path_snaps[length-1]!='/')) strcat(path_snaps,"/");
|
||||
strcpy(path_taps,path_snaps);
|
||||
strcpy(path_poke,path_snaps);
|
||||
strcpy(path_scr,path_snaps);
|
||||
strcpy(path_scr1,path_snaps);
|
||||
strcpy(path_scr2,path_snaps);
|
||||
strcat(path_snaps,"snapshots");
|
||||
strcat(path_taps,"tapes");
|
||||
strcat(path_poke,"poke");
|
||||
strcat(path_scr,"scr");
|
||||
strcat(path_scr1,"scr");
|
||||
strcat(path_scr2,"scr2");
|
||||
ordenador.port = which;
|
||||
break;
|
||||
case 1: //PORT_USB
|
||||
@ -1033,30 +1058,48 @@ static void set_port(int which)
|
||||
strcpy(path_snaps,"usb:/");
|
||||
strcpy(path_taps,"usb:/");
|
||||
strcpy(path_poke,"usb:/");
|
||||
strcpy(path_scr,"usb:/");
|
||||
strcpy(path_scr1,"usb:/");
|
||||
strcpy(path_scr2,"usb:/");
|
||||
ordenador.port = which;}
|
||||
else
|
||||
msgInfo("USB is not mounted",3000,NULL);
|
||||
break;
|
||||
case 2: //PORT_SMB
|
||||
if (!smbismount)
|
||||
{
|
||||
msgInfo("Try to mount SMB",0,NULL);
|
||||
if (!networkisinit) networkisinit = InitNetwork();
|
||||
if (networkisinit) ConnectShare();
|
||||
if (smbismount) msgInfo("SMB is now mounted",3000,NULL);
|
||||
}
|
||||
if (smbismount) {
|
||||
strcpy(path_snaps,"smb:/");
|
||||
strcpy(path_taps,"smb:/");
|
||||
strcpy(path_poke,"smb:/");
|
||||
strcpy(path_scr,"smb:/");
|
||||
strcpy(path_scr1,"smb:/");
|
||||
strcpy(path_scr2,"smb:/");
|
||||
ordenador.port = which;}
|
||||
else
|
||||
msgInfo("SMB is not mounted",3000,NULL);
|
||||
break;
|
||||
case 3: //PORT_FTP
|
||||
if (!ftpismount)
|
||||
{
|
||||
msgInfo("Try to mount FTP",0,NULL);
|
||||
if (!networkisinit) networkisinit = InitNetwork();
|
||||
if (networkisinit) ConnectFTP();
|
||||
if (ftpismount) msgInfo("FTP is now mounted",3000,NULL);
|
||||
}
|
||||
|
||||
if (ftpismount) {
|
||||
strcpy(path_snaps,"ftp:");
|
||||
strcpy(path_taps,"ftp:");
|
||||
strcpy(path_poke,"ftp:");
|
||||
strcpy(path_scr,"ftp:");
|
||||
strcpy(path_scr1,"ftp:");
|
||||
strcpy(path_scr2,"ftp:");
|
||||
ordenador.port = which;}
|
||||
else
|
||||
msgInfo("FTP is not connected",3000,NULL);
|
||||
msgInfo("FTP is not mounted",3000,NULL);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@ -1296,7 +1339,7 @@ void load_poke_file()
|
||||
int ritorno;
|
||||
ritorno=0;
|
||||
|
||||
const char *filename = menu_select_file(dir, NULL,-1);
|
||||
const char *filename = menu_select_file(dir, NULL,0);
|
||||
|
||||
if (!filename) return;
|
||||
|
||||
@ -1323,37 +1366,57 @@ static void help(void)
|
||||
help_messages, NULL);
|
||||
}
|
||||
|
||||
void manage_scr(int which)
|
||||
{
|
||||
|
||||
switch (which)
|
||||
{
|
||||
case 0: // Save SCR 1
|
||||
save_scr(1);
|
||||
break;
|
||||
case 1: // Save SCR 2
|
||||
save_scr(2);
|
||||
break;
|
||||
case 2: // Load SCR
|
||||
load_scr();
|
||||
break;
|
||||
case 3: // Delete scr
|
||||
delete_scr();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static void tools()
|
||||
{
|
||||
int opt ;
|
||||
int submenus[1];
|
||||
int submenus[2];
|
||||
|
||||
memset(submenus, 0, sizeof(submenus));
|
||||
|
||||
submenus[0] = ordenador.port;
|
||||
submenus[1] = ordenador.port;
|
||||
|
||||
opt = menu_select_title("Tools menu",
|
||||
tools_messages, submenus);
|
||||
if (opt < 0)
|
||||
return;
|
||||
|
||||
set_port(submenus[0]);
|
||||
set_port(submenus[1]);
|
||||
|
||||
switch(opt)
|
||||
{
|
||||
case 0: // Save SCR
|
||||
save_scr();
|
||||
case 0:
|
||||
manage_scr(submenus[0]);
|
||||
break;
|
||||
case 2: // Load SCR
|
||||
load_scr();
|
||||
break;
|
||||
case 4: // Insert poke
|
||||
case 3: // Insert poke
|
||||
do_poke_sdl();
|
||||
break;
|
||||
case 6: // Load poke file
|
||||
case 5: // Load poke file
|
||||
load_poke_file();
|
||||
break;
|
||||
case 11:
|
||||
case 10:
|
||||
help();
|
||||
break;
|
||||
default:
|
||||
@ -1407,7 +1470,7 @@ static void save_load_snapshot(int which)
|
||||
case 2:
|
||||
case 0: // Load or delete file
|
||||
{
|
||||
const char *filename = menu_select_file(dir, NULL,-1);
|
||||
const char *filename = menu_select_file(dir, NULL,1);
|
||||
|
||||
if (!filename)
|
||||
return;
|
||||
@ -1487,7 +1550,7 @@ static void save_load_game_configurations(int which)
|
||||
case 2:
|
||||
case 0: // Load or delete file
|
||||
{
|
||||
const char *filename = menu_select_file(dir, NULL,-1);
|
||||
const char *filename = menu_select_file(dir, NULL,0);
|
||||
|
||||
if (!filename)
|
||||
return;
|
||||
|
208
src/menu_sdl.c
208
src/menu_sdl.c
@ -111,7 +111,7 @@ int msgInfo(char *text, int duration, SDL_Rect *irc)
|
||||
rc.x = X;
|
||||
rc.y=Y;
|
||||
rc.w=12*(len + 2)/RATIO;
|
||||
rc.h=duration > 0 ? 48/RATIO : 80/RATIO;
|
||||
rc.h=duration >= 0 ? 48/RATIO : 80/RATIO;
|
||||
|
||||
src.x=rc.x+4/RATIO;
|
||||
src.y=rc.y+4/RATIO;
|
||||
@ -505,16 +505,118 @@ void print_font(SDL_Surface *screen, int r, int g, int b,
|
||||
}
|
||||
|
||||
|
||||
static void menu_draw(SDL_Surface *screen, menu_t *p_menu, int sel, int font_size)
|
||||
#ifdef GEKKO
|
||||
inline void paint_one_pixel_scr(unsigned char *colour,unsigned char *address)
|
||||
{
|
||||
*(address++)=*(colour+2);
|
||||
*(address++)=*(colour+3);
|
||||
}
|
||||
#else
|
||||
|
||||
inline void paint_one_pixel_scr(unsigned char *colour,unsigned char *address) {
|
||||
|
||||
#if BYTE_ORDER == LITTLE_ENDIAN
|
||||
switch(ordenador.bpp) {
|
||||
case 1:
|
||||
*address=*colour;
|
||||
break;
|
||||
case 3:
|
||||
*(address++)=*(colour++);
|
||||
case 2:
|
||||
*(address++)=*(colour++);
|
||||
*(address++)=*(colour++);
|
||||
break;
|
||||
case 4:
|
||||
*((unsigned int *)address)=*((unsigned int *)colour);
|
||||
break;
|
||||
}
|
||||
#else //BIG ENDIAN
|
||||
switch(ordenador.bpp) {
|
||||
case 1:
|
||||
*address=*(colour+3);
|
||||
break;
|
||||
case 3:
|
||||
*(address++)=*(colour+1);
|
||||
case 2:
|
||||
*(address++)=*(colour+2);
|
||||
*(address++)=*(colour+3);
|
||||
break;
|
||||
case 4:
|
||||
*((unsigned int *)address)=*((unsigned int *)colour);
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
void draw_scr_file(int x,int y, char *filename)
|
||||
{
|
||||
FILE *fichero;
|
||||
char screen [6912];
|
||||
unsigned int *p_translt, *p_translt2;
|
||||
unsigned char attribute, ink, paper, mask, octect;
|
||||
int loop_x, loop_y,bucle,valor,*p ;
|
||||
unsigned char *address;
|
||||
|
||||
|
||||
if (filename==NULL) // Aborted
|
||||
return;
|
||||
|
||||
if (!(ext_matches(filename, ".scr")||ext_matches(filename, ".SCR"))) return;
|
||||
|
||||
fichero=fopen(filename,"rb");
|
||||
|
||||
if (!fichero) return;
|
||||
|
||||
if (fread(screen,1,6912,fichero)!=6912) {fclose(fichero);return;}
|
||||
fclose(fichero);
|
||||
|
||||
p_translt = ordenador.translate;
|
||||
p_translt2 = ordenador.translate2;
|
||||
|
||||
for (loop_y=0; loop_y<192;loop_y++)
|
||||
for(loop_x=0; loop_x<32; loop_x++)
|
||||
{
|
||||
|
||||
attribute = screen[(*p_translt2)-147456]; // attribute
|
||||
|
||||
ink = attribute & 0x07; // ink colour
|
||||
paper = (attribute >> 3) & 0x07; // paper colour
|
||||
|
||||
octect = screen[(*p_translt)-147456]; // bitmap
|
||||
mask = 0x80;
|
||||
|
||||
for (bucle = 0; bucle < 8; bucle++)
|
||||
{
|
||||
valor = (octect & mask) ? (int) ink : (int) paper;
|
||||
p=(colors+valor);
|
||||
|
||||
address = (unsigned char *)(ordenador.screen->pixels + (x + loop_x*8 + bucle + (y + loop_y)*640)*ordenador.bpp);
|
||||
|
||||
paint_one_pixel_scr((unsigned char *)p, address);
|
||||
|
||||
mask = ((mask >> 1) & 0x7F);
|
||||
}
|
||||
|
||||
p_translt++;
|
||||
p_translt2++;
|
||||
}
|
||||
}
|
||||
|
||||
static void menu_draw(SDL_Surface *screen, menu_t *p_menu, int sel, int font_size, int draw_scr)
|
||||
{
|
||||
int font_height = TTF_FontHeight(p_menu->p_font);
|
||||
int line_height = (font_height + font_height / 4);
|
||||
int x_start = p_menu->x1;
|
||||
int y_start = p_menu->y1 + line_height;
|
||||
SDL_Rect r;
|
||||
int entries_visible = (p_menu->y2 - p_menu->y1) / line_height - 1;
|
||||
|
||||
int i, y;
|
||||
int entries_visible = (p_menu->y2 - p_menu->y1-5) / line_height - 1;
|
||||
const char *selected_file = NULL;
|
||||
char filename[2049];
|
||||
char name[512];
|
||||
char *ptr;
|
||||
int i, y, length;
|
||||
|
||||
if ( p_menu->n_entries * line_height > p_menu->y2 )
|
||||
y_start = p_menu->y1 + line_height;
|
||||
@ -563,8 +665,10 @@ static void menu_draw(SDL_Surface *screen, menu_t *p_menu, int sel, int font_siz
|
||||
menu_print_font(screen, 0x40,0x40,0x40,
|
||||
x_start, y_start + y, msg, font_size);
|
||||
else if (p_menu->cur_sel == i) /* Selected - color */
|
||||
menu_print_font(screen, 0,200,0,
|
||||
{menu_print_font(screen, 0,200,0,
|
||||
x_start, y_start + y, msg, font_size);
|
||||
selected_file = msg;
|
||||
}
|
||||
else if (IS_SUBMENU(msg))
|
||||
{
|
||||
if (p_menu->cur_sel == i-1)
|
||||
@ -638,6 +742,47 @@ static void menu_draw(SDL_Surface *screen, menu_t *p_menu, int sel, int font_siz
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ((draw_scr)&&(RATIO==1)) //Only in 640 mode
|
||||
{
|
||||
if ((!selected_file)||(selected_file[0] == '[')) return; //No dir
|
||||
|
||||
|
||||
// Select after "/"
|
||||
if (strrchr(selected_file, '/'))
|
||||
strcpy(name, strrchr(selected_file, '/') + 1);
|
||||
else strcpy(name,selected_file);
|
||||
|
||||
if ((ext_matches(name, ".zip")||ext_matches(name, ".ZIP")))
|
||||
{
|
||||
//remove the zip extension
|
||||
ptr = strrchr (name, '.');
|
||||
if (ptr) *ptr = 0;
|
||||
}
|
||||
|
||||
//remove the other extensions
|
||||
ptr = strrchr (name, '.');
|
||||
if (ptr) *ptr = 0;
|
||||
|
||||
//Always load from SD card
|
||||
strcpy(filename,getenv("HOME"));
|
||||
length=strlen(filename);
|
||||
if ((length>0)&&(filename[length-1]!='/'))
|
||||
strcat(filename,"/");
|
||||
strcat(filename, "scr/");
|
||||
strcat(filename, name);
|
||||
strcat(filename, ".scr");
|
||||
draw_scr_file(370,52, filename);
|
||||
|
||||
strcpy(filename,getenv("HOME"));
|
||||
length=strlen(filename);
|
||||
if ((length>0)&&(filename[length-1]!='/'))
|
||||
strcat(filename,"/");
|
||||
strcat(filename, "scr2/");
|
||||
strcat(filename, name);
|
||||
strcat(filename, ".scr");
|
||||
draw_scr_file(370,258, filename);
|
||||
}
|
||||
}
|
||||
|
||||
static int get_next_seq_y(menu_t *p_menu, int v, int dy, int cicle)
|
||||
@ -899,17 +1044,12 @@ uint32_t menu_wait_key_press(void)
|
||||
return keys;
|
||||
}
|
||||
|
||||
|
||||
extern void PicDisplay(char *name, int off_x, int off_y, int wait);
|
||||
extern const char **get_t64_list(char *t64);
|
||||
extern const char **get_prg_list(char *t64);
|
||||
|
||||
extern char curdir[256];
|
||||
|
||||
static int menu_select_internal(SDL_Surface *screen,
|
||||
menu_t *p_menu, int *p_submenus, int sel,
|
||||
void (*select_next_cb)(menu_t *p, void *data),
|
||||
void *select_next_cb_data, int font_size)
|
||||
void *select_next_cb_data, int font_size, int draw_scr)
|
||||
{
|
||||
int ret = -1;
|
||||
int i;
|
||||
@ -926,7 +1066,7 @@ static int menu_select_internal(SDL_Surface *screen,
|
||||
|
||||
SDL_FillRect(screen, &r, SDL_MapRGB(screen->format, 0xff, 0xff, 0xff));
|
||||
|
||||
menu_draw(screen, p_menu, 0, font_size);
|
||||
menu_draw(screen, p_menu, 0, font_size, draw_scr);
|
||||
SDL_Flip(screen);
|
||||
|
||||
keys = menu_wait_key_press();
|
||||
@ -967,7 +1107,7 @@ static int menu_select_internal(SDL_Surface *screen,
|
||||
int menu_select_sized(const char *title, const char **msgs, int *submenus, int sel,
|
||||
int x, int y, int x2, int y2,
|
||||
void (*select_next_cb)(menu_t *p, void *data),
|
||||
void *select_next_cb_data, int font_size)
|
||||
void *select_next_cb_data, int font_size, int draw_scr)
|
||||
|
||||
{
|
||||
menu_t menu;
|
||||
@ -987,7 +1127,7 @@ int menu_select_sized(const char *title, const char **msgs, int *submenus, int s
|
||||
if (sel >= 0)
|
||||
select_one(&menu, sel);
|
||||
out = menu_select_internal(real_screen, &menu, submenus, sel,
|
||||
select_next_cb, select_next_cb_data, font_size);
|
||||
select_next_cb, select_next_cb_data, font_size, draw_scr);
|
||||
|
||||
menu_fini(&menu);
|
||||
|
||||
@ -998,8 +1138,8 @@ int menu_select_title(const char *title, const char **msgs, int *submenus)
|
||||
{
|
||||
SDL_FillRect(real_screen, 0, SDL_MapRGB(real_screen->format, 0, 0, 0));
|
||||
return menu_select_sized(title, msgs, submenus, 0,
|
||||
32/RATIO, 32/RATIO, FULL_DISPLAY_X-32/RATIO, FULL_DISPLAY_Y-32/RATIO,
|
||||
NULL, NULL, 20);
|
||||
28/RATIO, 28/RATIO, FULL_DISPLAY_X-28/RATIO, FULL_DISPLAY_Y-28/RATIO,
|
||||
NULL, NULL, 20, 0);
|
||||
}
|
||||
|
||||
int menu_select(const char **msgs, int *submenus)
|
||||
@ -1008,7 +1148,7 @@ int menu_select(const char **msgs, int *submenus)
|
||||
}
|
||||
|
||||
static const char *menu_select_file_internal_zip(char *path,
|
||||
int x, int y, int x2, int y2, const char *selected_file, int which)
|
||||
int x, int y, int x2, int y2, const char *selected_file, int draw_scr)
|
||||
{
|
||||
const char **file_list = get_file_list_zip(path);
|
||||
char *sel;
|
||||
@ -1026,9 +1166,9 @@ static const char *menu_select_file_internal_zip(char *path,
|
||||
if (ptr_selected_file) ptr_selected_file++;
|
||||
else ptr_selected_file = selected_file;
|
||||
snprintf(buf,64,"file:%s",ptr_selected_file);
|
||||
opt = menu_select_sized(buf, file_list, NULL, 0, x, y, x2, y2, NULL, NULL, 16);
|
||||
opt = menu_select_sized(buf, file_list, NULL, 0, x, y, x2, y2, NULL, NULL, 16, draw_scr);
|
||||
}
|
||||
else opt = menu_select_sized("Select file", file_list, NULL, 0, x, y, x2, y2, NULL, NULL ,16);
|
||||
else opt = menu_select_sized("Select file", file_list, NULL, 0, x, y, x2, y2, NULL, NULL ,16, draw_scr);
|
||||
|
||||
if (opt < 0) {free(path); return NULL;}
|
||||
|
||||
@ -1124,7 +1264,7 @@ static const char *menu_select_file_internal_zip(char *path,
|
||||
}
|
||||
|
||||
static const char *menu_select_file_internal(const char *dir_path,
|
||||
int x, int y, int x2, int y2, const char *selected_file, int which)
|
||||
int x, int y, int x2, int y2, const char *selected_file, int draw_scr)
|
||||
{
|
||||
const char **file_list = get_file_list(dir_path);
|
||||
char *sel;
|
||||
@ -1144,9 +1284,9 @@ static const char *menu_select_file_internal(const char *dir_path,
|
||||
if (ptr_selected_file) ptr_selected_file++;
|
||||
else ptr_selected_file = selected_file;
|
||||
snprintf(buf,64,"file:%s",ptr_selected_file);
|
||||
opt = menu_select_sized(buf, file_list, NULL, 0, x, y, x2, y2, NULL, NULL, 16);
|
||||
opt = menu_select_sized(buf, file_list, NULL, 0, x, y, x2, y2, NULL, NULL, 16, draw_scr);
|
||||
}
|
||||
else opt = menu_select_sized("Select file", file_list, NULL, 0, x, y, x2, y2, NULL, NULL ,16);
|
||||
else opt = menu_select_sized("Select file", file_list, NULL, 0, x, y, x2, y2, NULL, NULL ,16, draw_scr);
|
||||
|
||||
if (opt < 0)
|
||||
return NULL;
|
||||
@ -1175,7 +1315,7 @@ static const char *menu_select_file_internal(const char *dir_path,
|
||||
/* Too deep recursion! */
|
||||
if (s >= sizeof(buf))
|
||||
return NULL;
|
||||
return menu_select_file(buf, selected_file, which);
|
||||
return menu_select_file(buf, selected_file, draw_scr);
|
||||
}
|
||||
|
||||
|
||||
@ -1187,36 +1327,24 @@ static const char *menu_select_file_internal(const char *dir_path,
|
||||
free(sel);
|
||||
|
||||
if ((ext_matches(out, ".zip")||ext_matches(out, ".ZIP"))&&(tmpismade))
|
||||
{out_zip = (char *) menu_select_file_internal_zip (out, x, y, x2, y2, selected_file, which);
|
||||
{out_zip = (char *) menu_select_file_internal_zip (out, x, y, x2, y2, selected_file, draw_scr);
|
||||
if (!out_zip) return NULL;
|
||||
if(!strcmp(out_zip,"[..]"))
|
||||
{
|
||||
free(out_zip);
|
||||
return menu_select_file_internal (dir_path, x, y, x2, y2, selected_file, which);
|
||||
return menu_select_file_internal (dir_path, x, y, x2, y2, selected_file, draw_scr);
|
||||
}
|
||||
else return out_zip;
|
||||
}
|
||||
else return out;
|
||||
}
|
||||
|
||||
/*
|
||||
const char *menu_select_file_start(const char *dir_path, const char **d64_name)
|
||||
{
|
||||
const char *file = menu_select_file_internal(dir_path,
|
||||
32, 32, FULL_DISPLAY_X, FULL_DISPLAY_Y - 32);
|
||||
|
||||
if (!file)
|
||||
return NULL;
|
||||
|
||||
return file;
|
||||
}
|
||||
*/
|
||||
const char *menu_select_file(const char *dir_path,const char *selected_file, int which)
|
||||
const char *menu_select_file(const char *dir_path,const char *selected_file, int draw_scr)
|
||||
{
|
||||
if (dir_path == NULL)
|
||||
dir_path = "";
|
||||
return menu_select_file_internal(dir_path,
|
||||
0, 32/RATIO, FULL_DISPLAY_X, FULL_DISPLAY_Y - 32/RATIO, selected_file, which);
|
||||
0, 20/RATIO, FULL_DISPLAY_X, FULL_DISPLAY_Y - 20/RATIO, selected_file, draw_scr);
|
||||
}
|
||||
|
||||
static TTF_Font *read_font(const char *path, int font_size)
|
||||
|
@ -51,8 +51,8 @@ void print_font(SDL_Surface *screen, int r, int g, int b, int x, int y, const ch
|
||||
/* Various option selects */
|
||||
int menu_select_title(const char *title, const char **pp_msgs, int *p_submenus);
|
||||
int menu_select(const char **pp_msgs, int *p_submenus);
|
||||
const char *menu_select_file(const char *dir_path,const char *selected_file, int which);
|
||||
const char *menu_select_file_start(const char *dir_path, const char **d64_name);
|
||||
const char *menu_select_file(const char *dir_path,const char *selected_file, int draw_scr);
|
||||
|
||||
|
||||
uint32_t menu_wait_key_press(void);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user