Replace {get,clear}filenames with fnlist functions in build.c, menus.c and osdcmds.c

git-svn-id: https://svn.eduke32.com/eduke32@2556 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
helixhorned 2012-03-28 19:42:16 +00:00
parent a7f6f3bacc
commit 0c5c58cbbb
3 changed files with 52 additions and 88 deletions

View file

@ -11,6 +11,7 @@
#include "osd.h" #include "osd.h"
#include "cache1d.h" #include "cache1d.h"
#include "editor.h" #include "editor.h"
#include "common.h"
#include "baselayer.h" #include "baselayer.h"
#ifdef RENDERTYPEWIN #ifdef RENDERTYPEWIN
@ -114,8 +115,8 @@ char *testplay_addparam = 0;
static char boardfilename[BMAX_PATH], selectedboardfilename[BMAX_PATH]; static char boardfilename[BMAX_PATH], selectedboardfilename[BMAX_PATH];
//extern char levelname[BMAX_PATH]; // in astub.c XXX: clean up this mess!!! //extern char levelname[BMAX_PATH]; // in astub.c XXX: clean up this mess!!!
static CACHE1D_FIND_REC *finddirs=NULL, *findfiles=NULL, *finddirshigh=NULL, *findfileshigh=NULL; static fnlist_t fnlist;
static int32_t numdirs=0, numfiles=0; static CACHE1D_FIND_REC *finddirshigh=NULL, *findfileshigh=NULL;
static int32_t currentlist=0; static int32_t currentlist=0;
//static int32_t repeatcountx, repeatcounty; //static int32_t repeatcountx, repeatcounty;
@ -227,7 +228,6 @@ static int32_t insert_sprite_common(int32_t sucksect, int32_t dax, int32_t day);
static void correct_ornamented_sprite(int32_t i, int32_t hitw); static void correct_ornamented_sprite(int32_t i, int32_t hitw);
static int32_t getfilenames(const char *path, const char *kind); static int32_t getfilenames(const char *path, const char *kind);
static void clearfilenames(void);
void clearkeys(void) { Bmemset(keystatus,0,sizeof(keystatus)); } void clearkeys(void) { Bmemset(keystatus,0,sizeof(keystatus)); }
@ -8847,29 +8847,16 @@ const char *getstring_simple(const char *querystr, const char *defaultstr, int32
return buf+qrylen; return buf+qrylen;
} }
static void clearfilenames(void)
{
klistfree(finddirs);
klistfree(findfiles);
finddirs = findfiles = NULL;
numfiles = numdirs = 0;
}
static int32_t getfilenames(const char *path, const char *kind) static int32_t getfilenames(const char *path, const char *kind)
{ {
CACHE1D_FIND_REC *r; const int32_t addflags = (!pathsearchmode && grponlymode ? CACHE1D_OPT_NOSTACK : 0);
clearfilenames(); fnlist_getnames(&fnlist, path, kind, addflags|CACHE1D_FIND_DRIVE, addflags);
finddirs = klistpath(path,"*",CACHE1D_FIND_DIR|CACHE1D_FIND_DRIVE|(!pathsearchmode&&grponlymode?CACHE1D_OPT_NOSTACK:0));
findfiles = klistpath(path,kind,CACHE1D_FIND_FILE|(!pathsearchmode&&grponlymode?CACHE1D_OPT_NOSTACK:0)); finddirshigh = fnlist.finddirs;
for (r = finddirs; r; r=r->next) numdirs++; findfileshigh = fnlist.findfiles;
for (r = findfiles; r; r=r->next) numfiles++; currentlist = (findfileshigh != NULL);
finddirshigh = finddirs;
findfileshigh = findfiles;
currentlist = 0;
if (findfileshigh) currentlist = 1;
//initprintf("path=%s || kind=%s || numfiles=%d, numdirs=%d\n", path, kind, numfiles, numdirs);
return(0); return(0);
} }
@ -8892,7 +8879,7 @@ static int32_t menuselect_auto(int32_t direction) // 20080104: jump to next (dir
Bcorrectfilename(selectedboardfilename, 1); Bcorrectfilename(selectedboardfilename, 1);
getfilenames(selectedboardfilename, "*.map"); getfilenames(selectedboardfilename, "*.map");
if (numfiles==0) if (fnlist.numfiles==0)
return -2; return -2;
boardbasename = Bstrrchr(boardfilename,'/'); // PK boardbasename = Bstrrchr(boardfilename,'/'); // PK
@ -8906,7 +8893,7 @@ static int32_t menuselect_auto(int32_t direction) // 20080104: jump to next (dir
break; break;
if (!findfileshigh) if (!findfileshigh)
findfileshigh=findfiles; findfileshigh = fnlist.findfiles;
if (direction) if (direction)
{ {
@ -8960,7 +8947,7 @@ static int32_t menuselect(void)
break; break;
if (!findfileshigh) if (!findfileshigh)
findfileshigh=findfiles; findfileshigh = fnlist.findfiles;
_printmessage16("Select map file with arrow keys and enter."); _printmessage16("Select map file with arrow keys and enter.");
@ -8981,7 +8968,8 @@ static int32_t menuselect(void)
printext16(halfxdim16-(8*Bstrlen(buffer)/2), 4, editorcolors[12],editorcolors[0],buffer,0); printext16(halfxdim16-(8*Bstrlen(buffer)/2), 4, editorcolors[12],editorcolors[0],buffer,0);
Bsnprintf(buffer,sizeof(buffer)-1,"(%d dirs, %d files) %s",numdirs,numfiles,selectedboardfilename); Bsnprintf(buffer,sizeof(buffer)-1,"(%d dirs, %d files) %s",
fnlist.numdirs, fnlist.numfiles, selectedboardfilename);
buffer[sizeof(buffer)-1] = 0; buffer[sizeof(buffer)-1] = 0;
printext16(8,ydim16-8-1,editorcolors[8],editorcolors[0],buffer,0); printext16(8,ydim16-8-1,editorcolors[8],editorcolors[0],buffer,0);
@ -9061,7 +9049,7 @@ static int32_t menuselect(void)
{ {
// JBF 20040208: seek to first name matching pressed character // JBF 20040208: seek to first name matching pressed character
CACHE1D_FIND_REC *seeker = currentlist ? findfiles : finddirs; CACHE1D_FIND_REC *seeker = currentlist ? fnlist.findfiles : fnlist.finddirs;
if (keystatus[0xc7]||keystatus[0xcf]) // home/end if (keystatus[0xc7]||keystatus[0xcf]) // home/end
{ {
while (keystatus[0xcf]?seeker->next:seeker->prev) while (keystatus[0xcf]?seeker->next:seeker->prev)
@ -9151,7 +9139,7 @@ static int32_t menuselect(void)
} }
else if (ch == 9) else if (ch == 9)
{ {
if ((currentlist == 0 && findfiles) || (currentlist == 1 && finddirs)) if ((currentlist == 0 && fnlist.findfiles) || (currentlist == 1 && fnlist.finddirs))
currentlist = 1-currentlist; currentlist = 1-currentlist;
} }
else if (keystatus[0xc8] /*(ch == 75) || (ch == 72)*/) else if (keystatus[0xc8] /*(ch == 75) || (ch == 72)*/)

View file

@ -32,6 +32,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "premap.h" #include "premap.h"
#include "demo.h" #include "demo.h"
#include "crc32.h" #include "crc32.h"
#include "common.h"
#include <sys/stat.h> #include <sys/stat.h>
@ -43,10 +44,20 @@ static int32_t last_zero,last_fifty,last_onehundred,last_twoohtwo,last_threehund
static char menunamecnt; static char menunamecnt;
static CACHE1D_FIND_REC *finddirs=NULL, *findfiles=NULL, *finddirshigh=NULL, *findfileshigh=NULL; static fnlist_t fnlist;
static int32_t numdirs=0, numfiles=0; static CACHE1D_FIND_REC *finddirshigh=NULL, *findfileshigh=NULL;
static int32_t currentlist=0; static int32_t currentlist=0;
static void set_findhighs(void)
{
finddirshigh = fnlist.finddirs;
findfileshigh = fnlist.findfiles;
currentlist = 0;
if (findfileshigh)
currentlist = 1;
}
static int32_t function, whichkey; static int32_t function, whichkey;
static int32_t changesmade, newvidmode, curvidmode, newfullscreen; static int32_t changesmade, newvidmode, curvidmode, newfullscreen;
static int32_t vidsets[16] = { -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 }; static int32_t vidsets[16] = { -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 };
@ -569,32 +580,6 @@ static void M_DisplaySaveGameList(void)
} }
} }
static void clearfilenames(void)
{
klistfree(finddirs);
klistfree(findfiles);
finddirs = findfiles = NULL;
numfiles = numdirs = 0;
}
static int32_t getfilenames(const char *path, char kind[])
{
CACHE1D_FIND_REC *r;
clearfilenames();
finddirs = klistpath(path,"*",CACHE1D_FIND_DIR);
findfiles = klistpath(path,kind,CACHE1D_FIND_FILE);
for (r = finddirs; r; r=r->next) numdirs++;
for (r = findfiles; r; r=r->next) numfiles++;
finddirshigh = finddirs;
findfileshigh = findfiles;
currentlist = 0;
if (findfileshigh) currentlist = 1;
return(0);
}
extern int32_t g_quitDeadline; extern int32_t g_quitDeadline;
void G_CheckPlayerColor(int32_t *color, int32_t prev_color) void G_CheckPlayerColor(int32_t *color, int32_t prev_color)
@ -2183,7 +2168,10 @@ cheat_for_port_credits:
case 101: case 101:
if (boardfilename[0] == 0) strcpy(boardfilename, "./"); if (boardfilename[0] == 0) strcpy(boardfilename, "./");
Bcorrectfilename(boardfilename,1); Bcorrectfilename(boardfilename,1);
getfilenames(boardfilename,"*.map");
fnlist_getnames(&fnlist, boardfilename, "*.map", 0, 0);
set_findhighs();
ChangeToMenu(102); ChangeToMenu(102);
KB_FlushKeyboardQueue(); KB_FlushKeyboardQueue();
case 102: case 102:
@ -2200,7 +2188,7 @@ cheat_for_port_credits:
{ {
// JBF 20040208: seek to first name matching pressed character // JBF 20040208: seek to first name matching pressed character
CACHE1D_FIND_REC *seeker = currentlist ? findfiles : finddirs; CACHE1D_FIND_REC *seeker = currentlist ? fnlist.findfiles : fnlist.finddirs;
if ((KB_KeyPressed(sc_Home)|KB_KeyPressed(sc_End)) > 0) if ((KB_KeyPressed(sc_Home)|KB_KeyPressed(sc_End)) > 0)
{ {
while (seeker && (KB_KeyPressed(sc_End)?seeker->next:seeker->prev)) while (seeker && (KB_KeyPressed(sc_End)?seeker->next:seeker->prev))
@ -2361,7 +2349,8 @@ cheat_for_port_credits:
if (x == -1) if (x == -1)
{ {
clearfilenames(); fnlist_clearnames(&fnlist);
boardfilename[0] = 0; boardfilename[0] = 0;
if ((g_netServer || ud.multimode > 1)) if ((g_netServer || ud.multimode > 1))
{ {
@ -2396,7 +2385,8 @@ cheat_for_port_credits:
} }
else ChangeToMenu(110); else ChangeToMenu(110);
} }
clearfilenames();
fnlist_clearnames(&fnlist);
} }
break; break;
@ -5164,7 +5154,9 @@ VOLUME_ALL_40x:
if (menunamecnt == 0) if (menunamecnt == 0)
{ {
// getfilenames("SUBD"); // getfilenames("SUBD");
getfilenames(".","*.MAP"); fnlist_getnames(&fnlist, ".", "*.MAP", 0, 0);
set_findhighs();
if (menunamecnt == 0) if (menunamecnt == 0)
ChangeToMenu(600); ChangeToMenu(600);
} }

View file

@ -31,6 +31,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "osd.h" #include "osd.h"
#include "osdfuncs.h" #include "osdfuncs.h"
#include "gamedef.h" #include "gamedef.h"
#include "common.h"
#include <ctype.h> #include <ctype.h>
#include <limits.h> #include <limits.h>
@ -161,47 +162,28 @@ static int32_t osdcmd_changelevel(const osdfuncparm_t *parm)
return OSDCMD_OK; return OSDCMD_OK;
} }
static CACHE1D_FIND_REC *findfiles = NULL;
static int32_t numfiles = 0;
static void clearfilenames(void)
{
klistfree(findfiles);
findfiles = NULL;
numfiles = 0;
}
static int32_t getfilenames(char *path)
{
CACHE1D_FIND_REC *r;
clearfilenames();
findfiles = klistpath(path,"*.MAP",CACHE1D_FIND_FILE);
for (r = findfiles; r; r=r->next) numfiles++;
return(0);
}
static int32_t osdcmd_map(const osdfuncparm_t *parm) static int32_t osdcmd_map(const osdfuncparm_t *parm)
{ {
int32_t i; int32_t i;
CACHE1D_FIND_REC *r; char filename[BMAX_PATH];
char filename[256];
if (parm->numparms != 1) if (parm->numparms != 1)
{ {
CACHE1D_FIND_REC *r;
fnlist_t fnlist = FNLIST_INITIALIZER;
int32_t maxwidth = 0; int32_t maxwidth = 0;
getfilenames("/"); fnlist_getnames(&fnlist, "/", "*.MAP", -1, 0);
for (r=findfiles; r!=NULL; r=r->next) for (r=fnlist.findfiles; r; r=r->next)
maxwidth = max((unsigned)maxwidth,Bstrlen(r->name)); maxwidth = max((unsigned)maxwidth, Bstrlen(r->name));
if (maxwidth > 0) if (maxwidth > 0)
{ {
int32_t x = 0, count = 0; int32_t x = 0, count = 0;
maxwidth += 3; maxwidth += 3;
OSD_Printf(OSDTEXT_RED "Map listing:\n"); OSD_Printf(OSDTEXT_RED "Map listing:\n");
for (r=findfiles; r!=NULL; r=r->next) for (r=fnlist.findfiles; r; r=r->next)
{ {
OSD_Printf("%-*s",maxwidth,r->name); OSD_Printf("%-*s",maxwidth,r->name);
x += maxwidth; x += maxwidth;
@ -213,9 +195,11 @@ static int32_t osdcmd_map(const osdfuncparm_t *parm)
} }
} }
if (x) OSD_Printf("\n"); if (x) OSD_Printf("\n");
OSD_Printf(OSDTEXT_RED "Found %d maps\n",numfiles); OSD_Printf(OSDTEXT_RED "Found %d maps\n", fnlist.numfiles);
} }
fnlist_clearnames(&fnlist);
return OSDCMD_SHOWHELP; return OSDCMD_SHOWHELP;
} }