In -d command line arg, allow specifying demo number in addition to file name.

git-svn-id: https://svn.eduke32.com/eduke32@3045 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
helixhorned 2012-10-01 17:52:40 +00:00
parent 54167d4c7e
commit 13599f56b8
4 changed files with 22 additions and 14 deletions

View File

@ -90,7 +90,7 @@ static int32_t G_OpenDemoRead(int32_t g_whichDemo) // 0 = mine
} }
else else
{ {
Bsprintf(demofn, "edemo%03d.edm", g_whichDemo); Bsprintf(demofn, DEMOFN_FMT, g_whichDemo);
demofnptr = demofn; demofnptr = demofn;
} }
@ -175,10 +175,10 @@ void G_OpenDemoWrite(void)
do do
{ {
if (demonum == 1000) if (demonum == MAXDEMOS)
return; return;
if (G_ModDirSnprintf(demofn, sizeof(demofn), "edemo%03d.edm", demonum)) if (G_ModDirSnprintf(demofn, sizeof(demofn), DEMOFN_FMT, demonum))
{ {
initprintf("Couldn't start demo writing: INTERNAL ERROR: file name too long\n"); initprintf("Couldn't start demo writing: INTERNAL ERROR: file name too long\n");
goto error_wopen_demo; goto error_wopen_demo;
@ -238,6 +238,17 @@ void Demo_PlayFirst(int32_t prof, int32_t exitafter)
g_demo_profile = -prof; // prepare g_demo_profile = -prof; // prepare
} }
void Demo_SetFirst(const char *demostr)
{
char *tailptr;
int32_t i = Bstrtol(demostr, &tailptr, 10);
if (tailptr==demostr+Bstrlen(demostr) && (unsigned)i < MAXDEMOS) // demo number passed
Bsprintf(g_firstDemoFile, DEMOFN_FMT, i);
else // demo file name passed
maybe_append_ext(g_firstDemoFile, sizeof(g_firstDemoFile), demostr, ".edm");
}
static uint8_t g_demo_seedbuf[RECSYNCBUFSIZ]; static uint8_t g_demo_seedbuf[RECSYNCBUFSIZ];
@ -520,7 +531,7 @@ RECHECK:
ud.recstat = 2; ud.recstat = 2;
g_whichDemo++; g_whichDemo++;
if (g_whichDemo == 1000) if (g_whichDemo == MAXDEMOS)
g_whichDemo = 1; g_whichDemo = 1;
g_player[myconnectindex].ps->gm &= ~MODE_GAME; g_player[myconnectindex].ps->gm &= ~MODE_GAME;

View File

@ -23,6 +23,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#ifndef __demo_h__ #ifndef __demo_h__
#define __demo_h__ #define __demo_h__
#define DEMOFN_FMT "edemo%03d.edm"
#define MAXDEMOS 1000
extern FILE *g_demo_filePtr; extern FILE *g_demo_filePtr;
extern char g_firstDemoFile[BMAX_PATH]; extern char g_firstDemoFile[BMAX_PATH];
@ -49,6 +52,7 @@ void G_DemoRecord(void);
void G_OpenDemoWrite(void); void G_OpenDemoWrite(void);
void Demo_PlayFirst(int32_t prof, int32_t exitafter); void Demo_PlayFirst(int32_t prof, int32_t exitafter);
void Demo_SetFirst(const char *demostr);
int32_t Demo_IsProfiling(void); int32_t Demo_IsProfiling(void);

View File

@ -8075,7 +8075,7 @@ static void G_ShowParameterHelp(void)
#endif #endif
"-connect [host]\tConnect to a multiplayer game\n" "-connect [host]\tConnect to a multiplayer game\n"
"-c#\t\tUse MP mode #, 1 = Dukematch, 2 = Coop, 3 = Dukematch(no spawn)\n" "-c#\t\tUse MP mode #, 1 = Dukematch, 2 = Coop, 3 = Dukematch(no spawn)\n"
"-d[file.edm]\tPlay a demo\n" "-d[file.edm or demonum]\tPlay a demo\n"
"-g[file.grp]\tLoad additional game data\n" "-g[file.grp]\tLoad additional game data\n"
"-h[file.def]\tLoad an alternate definitions file\n" "-h[file.def]\tLoad an alternate definitions file\n"
"-j[dir]\t\tAdds a directory to EDuke32's search list\n" "-j[dir]\t\tAdds a directory to EDuke32's search list\n"
@ -8957,7 +8957,7 @@ static void G_CheckCommandLine(int32_t argc, const char **argv)
Bsscanf(colon, "%u,%u", &framespertic, &numrepeats); Bsscanf(colon, "%u,%u", &framespertic, &numrepeats);
} }
maybe_append_ext(g_firstDemoFile, sizeof(g_firstDemoFile), c, ".edm"); Demo_SetFirst(c);
if (framespertic < 0) if (framespertic < 0)
{ {

View File

@ -322,16 +322,9 @@ static int32_t osdcmd_demo(const osdfuncparm_t *parm)
return OSDCMD_SHOWHELP; return OSDCMD_SHOWHELP;
{ {
char *tailptr;
const char *demostr = parm->parms[0];
int32_t i = Bstrtol(demostr, &tailptr, 10);
int32_t prof = parm->numparms==2 ? Batoi(parm->parms[1]) : -1; int32_t prof = parm->numparms==2 ? Batoi(parm->parms[1]) : -1;
if (tailptr!=demostr && i>=0 && i<=999) // demo number passed Demo_SetFirst(parm->parms[0]);
Bsprintf(g_firstDemoFile, "edemo%03d.edm", i);
else // demo file name passed
maybe_append_ext(g_firstDemoFile, sizeof(g_firstDemoFile), parm->parms[0], ".edm");
Demo_PlayFirst(clamp(prof, -1, 8)+1, 0); Demo_PlayFirst(clamp(prof, -1, 8)+1, 0);
} }