* Additional, better freeing.
* Position remembering when going up a level.
This commit is contained in:
parent
605580358d
commit
881f5e70ce
|
@ -293,7 +293,7 @@ size_t menudepthleft = 20;
|
||||||
|
|
||||||
char **dirmenu;
|
char **dirmenu;
|
||||||
size_t sizedirmenu;
|
size_t sizedirmenu;
|
||||||
size_t dir_on;
|
size_t dir_on[20];
|
||||||
|
|
||||||
#if defined (_XBOX) && defined (_MSC_VER)
|
#if defined (_XBOX) && defined (_MSC_VER)
|
||||||
filestatus_t filesearch(char *filename, const char *startpath, const UINT8 *wantedmd5sum,
|
filestatus_t filesearch(char *filename, const char *startpath, const UINT8 *wantedmd5sum,
|
||||||
|
@ -483,16 +483,14 @@ boolean preparefilemenu(void)
|
||||||
DIR *dirhandle;
|
DIR *dirhandle;
|
||||||
struct dirent *dent;
|
struct dirent *dent;
|
||||||
struct stat fsstat;
|
struct stat fsstat;
|
||||||
size_t pos, folderpos = 0, numfolders = 0;
|
size_t pos = 0, folderpos = 0, numfolders = 0;
|
||||||
|
|
||||||
for (pos = 0; pos < sizedirmenu; pos++)
|
for (; sizedirmenu > 0; sizedirmenu--)
|
||||||
{
|
{
|
||||||
Z_Free(dirmenu[pos]);
|
Z_Free(dirmenu[sizedirmenu-1]);
|
||||||
dirmenu[pos] = NULL;
|
dirmenu[sizedirmenu-1] = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
sizedirmenu = dir_on = pos = 0;
|
|
||||||
|
|
||||||
dirhandle = opendir(menupath);
|
dirhandle = opendir(menupath);
|
||||||
|
|
||||||
if (dirhandle == NULL)
|
if (dirhandle == NULL)
|
||||||
|
|
|
@ -31,7 +31,7 @@ extern size_t menudepthleft;
|
||||||
|
|
||||||
extern char **dirmenu;
|
extern char **dirmenu;
|
||||||
extern size_t sizedirmenu;
|
extern size_t sizedirmenu;
|
||||||
extern size_t dir_on;
|
extern size_t dir_on[20];
|
||||||
|
|
||||||
boolean preparefilemenu(void);
|
boolean preparefilemenu(void);
|
||||||
|
|
||||||
|
|
34
src/m_menu.c
34
src/m_menu.c
|
@ -4459,6 +4459,8 @@ static void M_Addons(INT32 choice)
|
||||||
M_StartMessage(M_GetText("No files/folders found.\n\n(Press a key)\n"),NULL,MM_NOTHING);
|
M_StartMessage(M_GetText("No files/folders found.\n\n(Press a key)\n"),NULL,MM_NOTHING);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
dir_on[menudepthleft] = 0;
|
||||||
|
|
||||||
MISC_AddonsDef.prevMenu = currentMenu;
|
MISC_AddonsDef.prevMenu = currentMenu;
|
||||||
M_SetupNextMenu(&MISC_AddonsDef);
|
M_SetupNextMenu(&MISC_AddonsDef);
|
||||||
|
@ -4476,7 +4478,7 @@ static void M_DrawAddons(void)
|
||||||
V_DrawString(x, y, 0, menupath);
|
V_DrawString(x, y, 0, menupath);
|
||||||
y += 2*SMALLLINEHEIGHT;
|
y += 2*SMALLLINEHEIGHT;
|
||||||
|
|
||||||
for (i = dir_on; i < sizedirmenu; i++)
|
for (i = dir_on[menudepthleft]; i < sizedirmenu; i++)
|
||||||
{
|
{
|
||||||
if (y > BASEVIDHEIGHT) break;
|
if (y > BASEVIDHEIGHT) break;
|
||||||
V_DrawString(x, y, 0, dirmenu[i]+2);
|
V_DrawString(x, y, 0, dirmenu[i]+2);
|
||||||
|
@ -4491,21 +4493,21 @@ static void M_HandleAddons(INT32 choice)
|
||||||
switch (choice)
|
switch (choice)
|
||||||
{
|
{
|
||||||
case KEY_DOWNARROW:
|
case KEY_DOWNARROW:
|
||||||
if (dir_on < sizedirmenu-1)
|
if (dir_on[menudepthleft] < sizedirmenu-1)
|
||||||
dir_on++;
|
dir_on[menudepthleft]++;
|
||||||
S_StartSound(NULL, sfx_menu1);
|
S_StartSound(NULL, sfx_menu1);
|
||||||
break;
|
break;
|
||||||
case KEY_UPARROW:
|
case KEY_UPARROW:
|
||||||
if (dir_on)
|
if (dir_on[menudepthleft])
|
||||||
dir_on--;
|
dir_on[menudepthleft]--;
|
||||||
S_StartSound(NULL, sfx_menu1);
|
S_StartSound(NULL, sfx_menu1);
|
||||||
break;
|
break;
|
||||||
case KEY_ENTER:
|
case KEY_ENTER:
|
||||||
if (dirmenu[dir_on][0] == 0) // folder
|
if (dirmenu[dir_on[menudepthleft]][0] == 0) // folder
|
||||||
{
|
{
|
||||||
S_StartSound(NULL, sfx_strpst);
|
S_StartSound(NULL, sfx_strpst);
|
||||||
strcpy(&menupath[menupathindex[menudepthleft--]],dirmenu[dir_on]+2);
|
strcpy(&menupath[menupathindex[menudepthleft]],dirmenu[dir_on[menudepthleft]]+2);
|
||||||
menupathindex[menudepthleft] = strlen(menupath);
|
menupathindex[--menudepthleft] = strlen(menupath);
|
||||||
menupath[menupathindex[menudepthleft]] = 0;
|
menupath[menupathindex[menudepthleft]] = 0;
|
||||||
|
|
||||||
if (!preparefilemenu())
|
if (!preparefilemenu())
|
||||||
|
@ -4519,11 +4521,13 @@ static void M_HandleAddons(INT32 choice)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
dir_on[menudepthleft] = 0;
|
||||||
}
|
}
|
||||||
else if (dirmenu[dir_on][0] >= 3) // wad/soc/lua
|
else if (dirmenu[dir_on[menudepthleft]][0] >= 3) // wad/soc/lua
|
||||||
{
|
{
|
||||||
S_StartSound(NULL, sfx_strpst);
|
S_StartSound(NULL, sfx_strpst);
|
||||||
COM_BufAddText(va("addfile %s%s", menupath, dirmenu[dir_on]+2));
|
COM_BufAddText(va("addfile %s%s", menupath, dirmenu[dir_on[menudepthleft]]+2));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
S_StartSound(NULL, sfx_lose);
|
S_StartSound(NULL, sfx_lose);
|
||||||
|
@ -4540,6 +4544,7 @@ static void M_HandleAddons(INT32 choice)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
// intentional fallthrough
|
||||||
case KEY_ESCAPE:
|
case KEY_ESCAPE:
|
||||||
exitmenu = true;
|
exitmenu = true;
|
||||||
break;
|
break;
|
||||||
|
@ -4549,6 +4554,15 @@ static void M_HandleAddons(INT32 choice)
|
||||||
}
|
}
|
||||||
if (exitmenu)
|
if (exitmenu)
|
||||||
{
|
{
|
||||||
|
for (; sizedirmenu > 0; sizedirmenu--)
|
||||||
|
{
|
||||||
|
Z_Free(dirmenu[sizedirmenu-1]);
|
||||||
|
dirmenu[sizedirmenu-1] = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
Z_Free(dirmenu);
|
||||||
|
dirmenu = NULL;
|
||||||
|
|
||||||
if (currentMenu->prevMenu)
|
if (currentMenu->prevMenu)
|
||||||
M_SetupNextMenu(currentMenu->prevMenu);
|
M_SetupNextMenu(currentMenu->prevMenu);
|
||||||
else
|
else
|
||||||
|
|
Loading…
Reference in a new issue