From aff0dc6d17635592a1ba402af70bb2bbb34963cd Mon Sep 17 00:00:00 2001 From: dborth Date: Wed, 13 Aug 2008 22:44:59 +0000 Subject: [PATCH] -scrollable cheat menu -housekeeping --- source/ngc/cheatmgr.cpp | 22 +++--- source/ngc/dvd.cpp | 4 +- source/ngc/dvd.h | 13 ---- source/ngc/fileop.cpp | 2 +- source/ngc/fileop.h | 4 +- source/ngc/filesel.cpp | 69 ++----------------- source/ngc/filesel.h | 22 +++++- source/ngc/freeze.cpp | 15 ++-- source/ngc/freeze.h | 12 +++- source/ngc/menu.cpp | 148 ++++++++++++++++++++++++++++++++++++++-- source/ngc/menu.h | 4 +- source/ngc/menudraw.cpp | 129 +++++++++++++++++++++++++++++++--- source/ngc/menudraw.h | 30 +++++--- source/ngc/smbop.cpp | 8 ++- source/ngc/unzip.cpp | 28 ++++---- 15 files changed, 369 insertions(+), 141 deletions(-) diff --git a/source/ngc/cheatmgr.cpp b/source/ngc/cheatmgr.cpp index 16f95a5..4dd7fee 100644 --- a/source/ngc/cheatmgr.cpp +++ b/source/ngc/cheatmgr.cpp @@ -2,6 +2,7 @@ * Snes9x 1.51 * * Nintendo Wii/Gamecube Port + * * Tantric August 2008 * * cheatmgr.cpp @@ -37,16 +38,19 @@ bool8 NGCLoadCheatFile (int length) while (offset < length) { - memcpy (data, savebuffer+offset, 28); - offset += 28; + if(Cheat.num_cheats < MAX_CHEATS) + { + memcpy (data, savebuffer+offset, 28); + offset += 28; - Cheat.c [Cheat.num_cheats].enabled = (data [0] & 4) == 0; - Cheat.c [Cheat.num_cheats].byte = data [1]; - Cheat.c [Cheat.num_cheats].address = data [2] | (data [3] << 8) | (data [4] << 16); - Cheat.c [Cheat.num_cheats].saved_byte = data [5]; - Cheat.c [Cheat.num_cheats].saved = (data [0] & 8) != 0; - memmove (Cheat.c [Cheat.num_cheats].name, &data [8], 20); - Cheat.c [Cheat.num_cheats++].name [20] = 0; + Cheat.c [Cheat.num_cheats].enabled = (data [0] & 4) == 0; + Cheat.c [Cheat.num_cheats].byte = data [1]; + Cheat.c [Cheat.num_cheats].address = data [2] | (data [3] << 8) | (data [4] << 16); + Cheat.c [Cheat.num_cheats].saved_byte = data [5]; + Cheat.c [Cheat.num_cheats].saved = (data [0] & 8) != 0; + memmove (Cheat.c [Cheat.num_cheats].name, &data [8], 20); + Cheat.c [Cheat.num_cheats++].name [20] = 0; + } } return (TRUE); diff --git a/source/ngc/dvd.cpp b/source/ngc/dvd.cpp index f306af8..502fcdc 100644 --- a/source/ngc/dvd.cpp +++ b/source/ngc/dvd.cpp @@ -19,6 +19,7 @@ extern int offset; extern int selection; +extern FILEENTRIES filelist[MAXFILES]; /** DVD I/O Address base **/ volatile unsigned long *dvd = (volatile unsigned long *) 0xCC006000; @@ -107,9 +108,6 @@ static int IsJoliet = 0; u64 rootdir = 0; int rootdirlength = 0; -/** Global file entry table **/ -FILEENTRIES filelist[MAXFILES]; - /** * Primary Volume Descriptor * diff --git a/source/ngc/dvd.h b/source/ngc/dvd.h index a67f3f7..a3c45e9 100644 --- a/source/ngc/dvd.h +++ b/source/ngc/dvd.h @@ -10,21 +10,8 @@ #ifndef _NGCDVD_ #define _NGCDVD_ -#define MAXJOLIET 255 -#define MAXDISPLAY 54 -typedef struct -{ - u64 offset; - unsigned int length; - char flags; - char filename[MAXJOLIET + 1]; - char displayname[MAXDISPLAY + 1]; -} FILEENTRIES; - extern u64 rootdir; extern int rootdirlength; -#define MAXFILES 2000 /** Restrict to 2000 files per dir **/ -extern FILEENTRIES filelist[MAXFILES]; int getpvd (); int ParseDVDdirectory (); diff --git a/source/ngc/fileop.cpp b/source/ngc/fileop.cpp index bdf0b9c..391ca3c 100644 --- a/source/ngc/fileop.cpp +++ b/source/ngc/fileop.cpp @@ -2,6 +2,7 @@ * Snes9x 1.50 * * Nintendo Wii/Gamecube Port + * * softdev July 2006 * crunchy2 May 2007 * Tantric August 2008 @@ -21,7 +22,6 @@ #include "unzip.h" #include "video.h" #include "menudraw.h" -#include "dvd.h" #include "filesel.h" #include "sram.h" #include "preferences.h" diff --git a/source/ngc/fileop.h b/source/ngc/fileop.h index 2781102..87cfaf9 100644 --- a/source/ngc/fileop.h +++ b/source/ngc/fileop.h @@ -1,9 +1,11 @@ /**************************************************************************** * Snes9x 1.50 * - * Nintendo Gamecube Port + * Nintendo Wii/Gamecube Port + * * softdev July 2006 * crunchy2 May 2007 + * Tantric August 2008 * * fileop.h * diff --git a/source/ngc/filesel.cpp b/source/ngc/filesel.cpp index 66837b8..fc68a76 100644 --- a/source/ngc/filesel.cpp +++ b/source/ngc/filesel.cpp @@ -2,6 +2,7 @@ * Snes9x 1.50 * * Nintendo Wii/Gamecube Port + * * softdev July 2006 * svpe June 2007 * crunchy2 May-July 2007 @@ -36,11 +37,13 @@ int selection; char currentdir[MAXPATHLEN]; int maxfiles; extern int screenheight; -#define PAGESIZE 17 extern unsigned long ARAM_ROMSIZE; int havedir = 0; int hasloaded = 0; +// Global file entry table +FILEENTRIES filelist[MAXFILES]; + unsigned char savebuffer[SAVEBUFFERSIZE] ATTRIBUTE_ALIGN (32); /**************************************************************************** @@ -195,68 +198,6 @@ void StripExt(char* returnstring, char * inputstring) *loc_dot = '\0'; // strip file extension } -/**************************************************************************** - * Showfile screen - * - * Display the file selection to the user -****************************************************************************/ - -static void -ShowFiles () -{ - int i, j; - char text[MAXPATHLEN]; - int ypos; - int w; - - clearscreen (); - - setfontsize (28); - DrawText (-1, 60, (char*)"Choose Game"); - - setfontsize(18); - - ypos = (screenheight - ((PAGESIZE - 1) * 20)) >> 1; - - if (screenheight == 480) - ypos += 24; - else - ypos += 10; - - j = 0; - for (i = offset; i < (offset + PAGESIZE) && (i < maxfiles); i++) - { - if (filelist[i].flags) // if a dir - { - strcpy (text, "["); - strcat (text, filelist[i].displayname); - strcat (text, "]"); - } - else - { - // hide file extension on listing (.7z, .fig, .smc) - StripExt(text, filelist[i].displayname); - } - if (j == (selection - offset)) - { - /*** Highlighted text entry ***/ - for ( w = 0; w < 20; w++ ) - DrawLineFast( 30, 610, ( j * 20 ) + (ypos-16) + w, 0x80, 0x80, 0x80 ); - - setfontcolour (0x00, 0x00, 0xe0); - DrawText (50, (j * 20) + ypos, text); - setfontcolour (0x00, 0x00, 0x00); - } - else - { - /*** Normal entry ***/ - DrawText (50, (j * 20) + ypos, text); - } - j++; - } - showscreen (); -} - /**************************************************************************** * FileSelector * @@ -282,7 +223,7 @@ FileSelector (int method) while (haverom == 0) { if (redraw) - ShowFiles (); + ShowFiles (filelist, maxfiles, offset, selection); redraw = 0; VIDEO_WaitVSync(); // slow things down a bit so we don't overread the pads diff --git a/source/ngc/filesel.h b/source/ngc/filesel.h index bf9c749..744540c 100644 --- a/source/ngc/filesel.h +++ b/source/ngc/filesel.h @@ -1,21 +1,41 @@ /**************************************************************************** * Snes9x 1.50 * - * Nintendo Gamecube Filesel - borrowed from GPP + * Nintendo Wii/Gamecube Port * * softdev July 2006 * crunchy2 May 2007 + * Tantric August 2008 + * + * filesel.h + * + * Generic file routines - reading, writing, browsing ****************************************************************************/ #ifndef _NGCFILESEL_ #define _NGCFILESEL_ #define SAVEBUFFERSIZE ((512 * 1024) + 2048 + 64 + 4 + 4) +#define MAXJOLIET 255 +#define MAXDISPLAY 54 + +typedef struct +{ + u64 offset; + unsigned int length; + char flags; + char filename[MAXJOLIET + 1]; + char displayname[MAXDISPLAY + 1]; +} FILEENTRIES; + +#define MAXFILES 2000 // Restrict to 2000 files per dir +extern FILEENTRIES filelist[MAXFILES]; void ClearSaveBuffer (); int OpenROM (int method); int autoLoadMethod(); int autoSaveMethod(); int FileSortCallback(const void *f1, const void *f2); +void StripExt(char* returnstring, char * inputstring); #endif diff --git a/source/ngc/freeze.cpp b/source/ngc/freeze.cpp index 70c6e0f..90536ab 100644 --- a/source/ngc/freeze.cpp +++ b/source/ngc/freeze.cpp @@ -1,16 +1,21 @@ /**************************************************************************** - * Snes9x 1.50 - GX 2.0 + * Snes9x 1.50 * - * NGC Snapshots Memory File System + * Nintendo Wii/Gamecube Port + * + * softdev July 2006 + * crunchy2 May 2007-July 2007 + * Tantric August 2008 + * + * freeze.cpp + * + * Snapshots Memory File System * * This is a single global memory file controller. Don't even think of opening two * at the same time ! * * There's just enough here to do SnapShots - you should add anything else you * need. - * - * softdev July 2006 - * crunchy2 May 2007-July 2007 ****************************************************************************/ #include #include diff --git a/source/ngc/freeze.h b/source/ngc/freeze.h index 7016000..8188854 100644 --- a/source/ngc/freeze.h +++ b/source/ngc/freeze.h @@ -1,7 +1,15 @@ /**************************************************************************** - * Snes9x 1.50 - GX 2.0 + * Snes9x 1.50 * - * NGC Snapshots Memory File System + * Nintendo Wii/Gamecube Port + * + * softdev July 2006 + * crunchy2 May 2007-July 2007 + * Tantric August 2008 + * + * freeze.h + * + * Snapshots Memory File System * * This is a single global memory file controller. Don't even think of opening two * at the same time ! diff --git a/source/ngc/menu.cpp b/source/ngc/menu.cpp index ac36f1b..647376c 100644 --- a/source/ngc/menu.cpp +++ b/source/ngc/menu.cpp @@ -1,10 +1,15 @@ /**************************************************************************** * Snes9x 1.50 * - * Nintendo Gamecube Menu + * Nintendo Wii/Gamecube Port * * softdev July 2006 * crunchy2 May-June 2007 + * Tantric August 2008 + * + * menu.cpp + * + * Menu flow routines ****************************************************************************/ #include #include @@ -293,6 +298,9 @@ PreferencesMenu () ****************************************************************************/ static int cheatmenuCount = 0; static char cheatmenu[MAX_CHEATS][50]; +static char cheatmenuvalue[MAX_CHEATS][50]; + +#define PADCAL 40 void CheatMenu() { @@ -300,10 +308,26 @@ void CheatMenu() int oldmenu = menu; menu = 0; + int selection = 0; + int offset = 0; + u32 p, wp, ph, wh; + signed char a, c; + int redraw = 1; + int selectit = 0; + float mag, mag2; + u16 ang, ang2; + int scroll_delay = 0; + bool move_selection = 0; + #define SCROLL_INITIAL_DELAY 15 + #define SCROLL_LOOP_DELAY 2 + if(Cheat.num_cheats > 0) { cheatmenuCount = Cheat.num_cheats + 1; + for(uint16 i=0; i < Cheat.num_cheats; i++) + sprintf (cheatmenu[i], "%s", Cheat.c[i].name); + sprintf (cheatmenu[cheatmenuCount-1], "Back to Game Menu"); while(ret != cheatmenuCount-1) @@ -314,17 +338,133 @@ void CheatMenu() S9xDisableCheat(ret); else S9xEnableCheat(ret); + + ret = -1; } for(uint16 i=0; i < Cheat.num_cheats; i++) - sprintf (cheatmenu[i], "%s %s", Cheat.c[i].name, Cheat.c[i].enabled == true ? " ON" : "OFF"); + sprintf (cheatmenuvalue[i], "%s", Cheat.c[i].enabled == true ? "ON" : "OFF"); - ret = RunMenu (cheatmenu, cheatmenuCount, (char*)"Cheats", 16); + if (redraw) + ShowCheats (cheatmenu, cheatmenuvalue, cheatmenuCount, offset, selection); + + redraw = 0; + + VIDEO_WaitVSync(); // slow things down a bit so we don't overread the pads + + p = PAD_ButtonsDown (0); + ph = PAD_ButtonsHeld (0); + #ifdef HW_RVL + wp = WPAD_ButtonsDown (0); + wh = WPAD_ButtonsHeld (0); + wpad_get_analogues(0, &mag, &ang, &mag2, &ang2); // get joystick info from wii expansions + #else + wp = 0; + wh = 0; + ang = 0; + ang2 = 0; + mag = 0; + mag2 = 0; + #endif + a = PAD_StickY (0); + c = PAD_SubStickX (0); + + /*** Check for exit combo ***/ + if ( (c < -70) || (wp & WPAD_BUTTON_HOME) || (wp & WPAD_CLASSIC_BUTTON_HOME) ) + break; + + /*** Check buttons, perform actions ***/ + if ( (p & PAD_BUTTON_A) || selectit || (wp & (WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A)) ) + { + if ( selectit ) + selectit = 0; + + redraw = 1; + ret = selection; + } // End of A + + if ( ((p | ph) & PAD_BUTTON_DOWN) || ((wp | wh) & (WPAD_BUTTON_DOWN | WPAD_CLASSIC_BUTTON_DOWN)) || (a < -PADCAL) || (mag>JOY_THRESHOLD && (ang>130 && ang<230)) ) + { + if ( (p & PAD_BUTTON_DOWN) || (wp & (WPAD_BUTTON_DOWN | WPAD_CLASSIC_BUTTON_DOWN)) ) { /*** Button just pressed ***/ + scroll_delay = SCROLL_INITIAL_DELAY; // reset scroll delay. + move_selection = 1; //continue (move selection) + } + else if (scroll_delay == 0) { /*** Button is held ***/ + scroll_delay = SCROLL_LOOP_DELAY; + move_selection = 1; //continue (move selection) + } else { + scroll_delay--; // wait + } + + if (move_selection) + { + selection++; + if (selection == cheatmenuCount) + selection = offset = 0; + if ((selection - offset) >= PAGESIZE) + offset += PAGESIZE; + redraw = 1; + move_selection = 0; + } + } // End of down + if ( ((p | ph) & PAD_BUTTON_UP) || ((wp | wh) & (WPAD_BUTTON_UP | WPAD_CLASSIC_BUTTON_UP)) || (a > PADCAL) || (mag>JOY_THRESHOLD && (ang>300 || ang<50)) ) + { + if ( (p & PAD_BUTTON_UP) || (wp & (WPAD_BUTTON_UP | WPAD_CLASSIC_BUTTON_UP)) ) { /*** Button just pressed***/ + scroll_delay = SCROLL_INITIAL_DELAY; // reset scroll delay. + move_selection = 1; //continue (move selection) + } + else if (scroll_delay == 0) { /*** Button is held ***/ + scroll_delay = SCROLL_LOOP_DELAY; + move_selection = 1; //continue (move selection) + } else { + scroll_delay--; // wait + } + + if (move_selection) + { + selection--; + if (selection < 0) { + selection = cheatmenuCount - 1; + offset = selection - PAGESIZE + 1; + } + if (selection < offset) + offset -= PAGESIZE; + if (offset < 0) + offset = 0; + redraw = 1; + move_selection = 0; + } + } // End of Up + if ( (p & PAD_BUTTON_LEFT) || (wp & (WPAD_BUTTON_LEFT | WPAD_CLASSIC_BUTTON_LEFT)) ) + { + /*** Go back a page ***/ + selection -= PAGESIZE; + if (selection < 0) + { + selection = cheatmenuCount - 1; + offset = selection - PAGESIZE + 1; + } + if (selection < offset) + offset -= PAGESIZE; + if (offset < 0) + offset = 0; + redraw = 1; + } + if ( (p & PAD_BUTTON_RIGHT) || (wp & (WPAD_BUTTON_RIGHT | WPAD_CLASSIC_BUTTON_RIGHT)) ) + { + /*** Go forward a page ***/ + selection += PAGESIZE; + if (selection > cheatmenuCount - 1) + selection = offset = 0; + if ((selection - offset) >= PAGESIZE) + offset += PAGESIZE; + redraw = 1; + } } } else { - WaitPrompt((char*)"Cheat file not found!"); + WaitPrompt((char*)"No cheats found!"); } menu = oldmenu; } diff --git a/source/ngc/menu.h b/source/ngc/menu.h index afd641c..17b5fc5 100644 --- a/source/ngc/menu.h +++ b/source/ngc/menu.h @@ -1,7 +1,7 @@ /**************************************************************************** - * Snes9x 1.50 + * Snes9x 1.50 * - * Nintendo Gamecube Menu + * Nintendo Wii/Gamecube Port * * softdev July 2006 ****************************************************************************/ diff --git a/source/ngc/menudraw.cpp b/source/ngc/menudraw.cpp index 40c7bb0..833fe68 100644 --- a/source/ngc/menudraw.cpp +++ b/source/ngc/menudraw.cpp @@ -1,21 +1,22 @@ /**************************************************************************** * Snes9x 1.50 * - * Nintendo Gamecube Screen Font Driver + * Nintendo Wii/Gamecube Port + * + * softdev July 2006 + * crunchy2 June 2007 + * Tantric August 2008 + * + * menudraw.cpp + * + * Menu drawing routines * * Uses libfreetype 2.2.1 compiled for GC with TTF support only. * TTF only reduces the library by some 900k bytes! * - * Visit - http://www.freetype.org ! - * * **WARNING*** * * ONLY USE GUARANTEED PATENT FREE FONTS. - * THOSE IN YOUR WINDOWS\FONTS DIRECTORY ARE COPYRIGHT - * AND MAY NOT BE DISTRIBUTED! - * - * softdev July 2006 - * crunchy2 June 2007 ****************************************************************************/ #include #include @@ -33,6 +34,8 @@ #include "video.h" #include "menudraw.h" #include "snes9xGX.h" +#include "filesel.h" +#include "dvd.h" #include "aram.h" #include "images/gfx_bg.h" @@ -627,6 +630,116 @@ RunMenu (char items[][50], int maxitems, char *title, int fontsize, int x) } +/**************************************************************************** + * Showfile screen + * + * Display the file selection to the user +****************************************************************************/ + +void +ShowFiles (FILEENTRIES filelist[], int maxfiles, int offset, int selection) +{ + int i, j; + char text[MAXPATHLEN]; + int ypos; + int w; + + clearscreen (); + + setfontsize (28); + DrawText (-1, 60, (char*)"Choose Game"); + + setfontsize(18); + + ypos = (screenheight - ((PAGESIZE - 1) * 20)) >> 1; + + if (screenheight == 480) + ypos += 24; + else + ypos += 10; + + j = 0; + for (i = offset; i < (offset + PAGESIZE) && (i < maxfiles); i++) + { + if (filelist[i].flags) // if a dir + { + strcpy (text, "["); + strcat (text, filelist[i].displayname); + strcat (text, "]"); + } + else + { + // hide file extension on listing (.7z, .fig, .smc) + StripExt(text, filelist[i].displayname); + } + if (j == (selection - offset)) + { + /*** Highlighted text entry ***/ + for ( w = 0; w < 20; w++ ) + DrawLineFast( 30, 610, ( j * 20 ) + (ypos-16) + w, 0x80, 0x80, 0x80 ); + + setfontcolour (0x00, 0x00, 0xe0); + DrawText (50, (j * 20) + ypos, text); + setfontcolour (0x00, 0x00, 0x00); + } + else + { + /*** Normal entry ***/ + DrawText (50, (j * 20) + ypos, text); + } + j++; + } + showscreen (); +} + +/**************************************************************************** + * Cheats screen + * + * Displays a scrollable list of cheats to the user +****************************************************************************/ + +void +ShowCheats (char items[][50], char itemvalues[][50], int maxitems, int offset, int selection) +{ + int i, j = 0; + int ypos; + int w; + + clearscreen (); + + setfontsize (28); + DrawText (-1, 60, (char*)"Cheats"); + + setfontsize(18); + + ypos = (screenheight - ((PAGESIZE - 1) * 20)) >> 1; + + if (screenheight == 480) + ypos += 24; + else + ypos += 10; + + for (i = offset; i < (offset + PAGESIZE) && (i < maxitems); i++) + { + if (i == selection) + { + /*** Highlighted text entry ***/ + for ( w = 0; w < 20; w++ ) + DrawLineFast( 30, 610, ( j * 20 ) + (ypos-16) + w, 0x80, 0x80, 0x80 ); + + DrawText (150, (j * 20) + ypos, items[i]); + DrawText (400, (j * 20) + ypos, itemvalues[i]); + } + else + { + /*** Normal entry ***/ + DrawText (150, (j * 20) + ypos, items[i]); + DrawText (400, (j * 20) + ypos, itemvalues[i]); + } + j++; + } + showscreen (); +} /**************************************************************************** * ROM Information Screen diff --git a/source/ngc/menudraw.h b/source/ngc/menudraw.h index 0696720..a80f866 100644 --- a/source/ngc/menudraw.h +++ b/source/ngc/menudraw.h @@ -1,24 +1,29 @@ /**************************************************************************** * Snes9x 1.50 * - * Nintendo Gamecube Screen Font Driver + * Nintendo Wii/Gamecube Port + * + * softdev July 2006 + * crunchy2 June 2007 + * Tantric August 2008 + * + * menudraw.h + * + * Menu drawing routines * * Uses libfreetype 2.2.1 compiled for GC with TTF support only. - * TTF only reduces the library by some 900kbytes! - * - * Visit - http://www.freetype.org ! + * TTF only reduces the library by some 900k bytes! * * **WARNING*** * * ONLY USE GUARANTEED PATENT FREE FONTS. - * THOSE IN YOUR WINDOWS\FONTS DIRECTORY ARE COPYRIGHT - * AND MAY NOT BE DISTRIBUTED! - * - * softdev July 2006 - * crunchy2 June 2007 ****************************************************************************/ -#ifndef _TTFFONTS_ -#define _TTFFONTS_ +#ifndef _NGCMENUDRAW_ +#define _NGCMENUDRAW_ + +#include "filesel.h" + +#define PAGESIZE 17 // max item listing on a screen int FT_Init (); void setfontsize (int pixelsize); @@ -30,6 +35,9 @@ void RomInfo (); void WaitButtonA (); int RunMenu (char items[][50], int maxitems, char *title, int fontsize = 20, int x = -1); void DrawMenu (char items[][50], char *title, int maxitems, int selected, int fontsize = 20, int x = -1); +void ShowCheats (char items[][50], char itemvalues[][50], int maxitems, int offset, int selection); +void ShowFiles (FILEENTRIES filelist[], int maxfiles, int offset, int selection); + void WaitPrompt (char *msg); int WaitPromptChoice (char *msg, char* bmsg, char* amsg); void ShowAction (char *msg); diff --git a/source/ngc/smbop.cpp b/source/ngc/smbop.cpp index 8d3b5f3..24342be 100644 --- a/source/ngc/smbop.cpp +++ b/source/ngc/smbop.cpp @@ -2,6 +2,7 @@ * Snes9x 1.50 * * Nintendo Wii/Gamecube Port + * * softdev July 2006 * crunchy2 May 2007 * Tantric August 2008 @@ -24,7 +25,6 @@ #include "unzip.h" #include "video.h" #include "menudraw.h" -#include "dvd.h" #include "filesel.h" #include "smbop.h" #include "Snes9xGx.h" @@ -234,7 +234,7 @@ LoadSMBFile (char *filename, int length) { //return UnZipBuffer(rbuffer, 0, 2, NULL); // UNZIP currently crashes - FIX ME - WaitPrompt((char*) "Zipped files are currently not supported!"); + WaitPrompt((char*) "Zipped files are currently not supported over SMB!"); return -1; } } @@ -287,8 +287,10 @@ SaveBufferToSMB (char *filepath, int datasize, bool8 silent) } /**************************************************************************** - * Load savebuffer from SMB file + * Load up a buffer from SMB file ****************************************************************************/ + +// no buffer is specified - so use savebuffer int LoadBufferFromSMB (char *filepath, bool8 silent) { diff --git a/source/ngc/unzip.cpp b/source/ngc/unzip.cpp index 72c9a68..bfd69f4 100644 --- a/source/ngc/unzip.cpp +++ b/source/ngc/unzip.cpp @@ -85,7 +85,7 @@ UnZipBuffer (unsigned char *outbuffer, u64 inoffset, short where, FILE* filehand int res; int bufferoffset = 0; int have = 0; - char readbuffer[2048]; + char readbuffer[ZIPCHUNK]; char msg[128]; /*** Read Zip Header ***/ @@ -93,15 +93,15 @@ UnZipBuffer (unsigned char *outbuffer, u64 inoffset, short where, FILE* filehand { case 0: // SD Card fseek(filehandle, 0, SEEK_SET); - fread (readbuffer, 1, 2048, filehandle); + fread (readbuffer, 1, ZIPCHUNK, filehandle); break; case 1: // DVD - dvd_read (readbuffer, 2048, inoffset); + dvd_read (readbuffer, ZIPCHUNK, inoffset); break; case 2: // From buffer - memcpy(readbuffer, outbuffer, 2048); + memcpy(readbuffer, outbuffer, ZIPCHUNK); break; } @@ -148,16 +148,16 @@ UnZipBuffer (unsigned char *outbuffer, u64 inoffset, short where, FILE* filehand if (res == Z_MEM_ERROR) { - inflateEnd (&zs); - return 0; + inflateEnd (&zs); + return 0; } have = ZIPCHUNK - zs.avail_out; if (have) { - /*** Copy to normal block buffer ***/ - memcpy (&outbuffer[bufferoffset], &out, have); - bufferoffset += have; + /*** Copy to normal block buffer ***/ + memcpy (&outbuffer[bufferoffset], &out, have); + bufferoffset += have; } } while (zs.avail_out == 0); @@ -169,17 +169,17 @@ UnZipBuffer (unsigned char *outbuffer, u64 inoffset, short where, FILE* filehand switch (where) { case 0: // SD Card - fread (readbuffer, 1, 2048, filehandle); + fread (readbuffer, 1, ZIPCHUNK, filehandle); break; case 1: // DVD - inoffset += 2048; - dvd_read (readbuffer, 2048, inoffset); + inoffset += ZIPCHUNK; + dvd_read (readbuffer, ZIPCHUNK, inoffset); break; case 2: // From buffer - inoffset += 2048; - memcpy(readbuffer, outbuffer+inoffset, 2048); + inoffset += ZIPCHUNK; + memcpy(readbuffer, outbuffer+inoffset, ZIPCHUNK); break; } }