summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKarl Kurbjun <kkurbjun@gmail.com>2007-06-03 22:03:36 +0000
committerKarl Kurbjun <kkurbjun@gmail.com>2007-06-03 22:03:36 +0000
commitaec5814d436f6307dc3e6a1a09aa1ffec5709c27 (patch)
tree9d553317483ec7ef53dca7db931bd9f99ca7a5b8
parent7428b79de328dca03274ccfe08d59636eb6f8d51 (diff)
downloadrockbox-aec5814d436f6307dc3e6a1a09aa1ffec5709c27.zip
rockbox-aec5814d436f6307dc3e6a1a09aa1ffec5709c27.tar.gz
rockbox-aec5814d436f6307dc3e6a1a09aa1ffec5709c27.tar.bz2
rockbox-aec5814d436f6307dc3e6a1a09aa1ffec5709c27.tar.xz
Some fixes to doom dehacked loading - make embedded dehacked files actually load, fix end of file detection in the string loader, fix ammo changes, fix bex code pointers. Also added the * flag to sscanf - still only tested against rockdoom sscanf calls.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@13547 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/plugins/doom/d_deh.c9
-rw-r--r--apps/plugins/doom/d_main.c4
-rw-r--r--apps/plugins/doom/rockdoom.c2
-rw-r--r--firmware/common/sscanf.c74
4 files changed, 63 insertions, 26 deletions
diff --git a/apps/plugins/doom/d_deh.c b/apps/plugins/doom/d_deh.c
index c1e136f..d3f7496 100644
--- a/apps/plugins/doom/d_deh.c
+++ b/apps/plugins/doom/d_deh.c
@@ -85,7 +85,7 @@ char *dehfgets(char *buf, size_t n, DEHFILE *fp)
p = buf;
- while (--n > 0)
+ while (n-- > 0)
{
unsigned char c = *fp->inp++;
fp->size--;
@@ -111,7 +111,7 @@ int dehfeof(DEHFILE *fp)
return (size <= 0 || offset < 0 || offset >= size) ? 1 : 0;
}
- return (fp->size == 0 || *fp->inp == '\0') ? 1 : 0;
+ return (fp->size <= 0 || *fp->inp == '\0') ? 1 : 0;
}
int dehfgetc(DEHFILE *fp)
@@ -1509,6 +1509,7 @@ void ProcessDehFile(const char *filename, const char *outfilename, int lumpnum)
int size = W_LumpLength(lumpnum);
infile.size = (size < 0) ? 0 : (ssize_t)size;
infile.inp = W_CacheLumpNum(lumpnum);
+ infile.fd=-1;
filename = "(WAD)";
}
@@ -1983,7 +1984,7 @@ void deh_procPointer(DEHFILE *fpin, int fpout, char *line) // done
// NOTE: different format from normal
// killough 8/98: allow hex numbers in input, fix error case:
- if (sscanf(inbuffer,"%*s %*i (%s %i)",key, &indexnum) != 2)
+ if (sscanf(inbuffer,"%*s %*d (%s %d)",key, &indexnum) != 2)
{
if (fpout) fdprintf(fpout,"Bad data pair in '%s'\n",inbuffer);
return;
@@ -2122,7 +2123,7 @@ void deh_procAmmo(DEHFILE *fpin, int fpout, char *line)
strncpy(inbuffer,line,DEH_BUFFERMAX);
// killough 8/98: allow hex numbers in input:
- sscanf(inbuffer,"%s %i",key, &indexnum);
+ sscanf(inbuffer,"%s %d",key, &indexnum);
if (fpout) fdprintf(fpout,"Processing Ammo at index %d: %s\n",
indexnum, key);
if (indexnum < 0 || indexnum >= NUMAMMO)
diff --git a/apps/plugins/doom/d_main.c b/apps/plugins/doom/d_main.c
index 3dc6487..32e3809 100644
--- a/apps/plugins/doom/d_main.c
+++ b/apps/plugins/doom/d_main.c
@@ -82,7 +82,7 @@ boolean clfastparm; // checkparm of -fast
boolean nomonsters; // working -nomonsters
boolean respawnparm; // working -respawn
boolean fastparm; // working -fast
-boolean dehout=false;
+boolean dehout=true;
boolean singletics = false; // debug flag to cancel adaptiveness
@@ -731,7 +731,7 @@ void D_DoomMainSetup(void)
W_Init();
if ((p = W_CheckNumForName("DEHACKED")) != -1) // cph - add dehacked-in-a-wad support
- ProcessDehFile(NULL, dehout ? NULL : "/dehlog.txt", p);
+ ProcessDehFile(NULL, dehout ? "/dehlog.txt" : NULL, p);
V_InitColorTranslation(); //jff 4/24/98 load color translation lumps
diff --git a/apps/plugins/doom/rockdoom.c b/apps/plugins/doom/rockdoom.c
index 82daadb..90c446b 100644
--- a/apps/plugins/doom/rockdoom.c
+++ b/apps/plugins/doom/rockdoom.c
@@ -103,6 +103,7 @@ struct plugin_api* rb;
bool noprintf=0; // Variable disables printf lcd updates to protect grayscale lib/direct lcd updates
+#ifndef SIMULATOR
// Here is a hacked up printf command to get the output from the game.
int printf(const char *fmt, ...)
{
@@ -129,6 +130,7 @@ int printf(const char *fmt, ...)
}
return 1;
}
+#endif
char *my_strtok( char * s, const char * delim )
{
diff --git a/firmware/common/sscanf.c b/firmware/common/sscanf.c
index 66bf0dd..5fbe81f 100644
--- a/firmware/common/sscanf.c
+++ b/firmware/common/sscanf.c
@@ -27,7 +27,7 @@ static int parse_dec(int (*peek)(void *userp),
int n = 0;
int minus = 0;
char ch;
-
+
if ((*peek)(userp) == '-')
{
(*pop)(userp);
@@ -54,19 +54,24 @@ static int parse_dec(int (*peek)(void *userp),
static int parse_chars(int (*peek)(void *userp),
void (*pop)(void *userp),
void *userp,
- char *vp)
+ char *vp,
+ bool fake)
{
int n = 0;
+
char *pt=vp;
while (!isspace((*peek)(userp)))
{
- *(pt++) = (*peek)(userp);
+ if(fake==false)
+ *(pt++) = (*peek)(userp);
+
n++;
(*pop)(userp);
}
- (*pt)='\0';
+ if(fake==false)
+ (*pt)='\0';
return n;
}
@@ -125,24 +130,38 @@ static int scan(int (*peek)(void *userp),
int n_chars = 0;
int r;
long lval;
+ bool skip=false;
unsigned long ulval;
while ((ch = *fmt++) != '\0')
{
bool literal = false;
-
+
if (ch == '%')
{
ch = *fmt++;
+ if(ch== '*') /* We should process this, but not store it in an arguement */
+ {
+ ch=*fmt++;
+ skip=true;
+ }
+ else
+ {
+ skip=false;
+ }
+
switch (ch)
{
case 'x':
n_chars += skip_spaces(peek, pop, userp);
if ((r = parse_hex(peek, pop, userp, &ulval)) >= 0)
{
- *(va_arg(ap, unsigned int *)) = ulval;
- n++;
+ if(skip==false)
+ {
+ *(va_arg(ap, unsigned int *)) = ulval;
+ n++;
+ }
n_chars += r;
}
else
@@ -152,16 +171,22 @@ static int scan(int (*peek)(void *userp),
n_chars += skip_spaces(peek, pop, userp);
if ((r = parse_dec(peek, pop, userp, &lval)) >= 0)
{
- *(va_arg(ap, int *)) = lval;
- n++;
+ if(skip==false)
+ {
+ *(va_arg(ap, int *)) = lval;
+ n++;
+ }
n_chars += r;
}
else
return n;
break;
case 'n':
- *(va_arg(ap, int *)) = n_chars;
- n++;
+ if(skip==false)
+ {
+ *(va_arg(ap, int *)) = n_chars;
+ n++;
+ }
break;
case 'l':
n_chars += skip_spaces(peek, pop, userp);
@@ -171,8 +196,11 @@ static int scan(int (*peek)(void *userp),
case 'x':
if ((r = parse_hex(peek, pop, userp, &ulval)) >= 0)
{
- *(va_arg(ap, unsigned long *)) = ulval;
- n++;
+ if(skip==false)
+ {
+ *(va_arg(ap, unsigned long *)) = ulval;
+ n++;
+ }
n_chars += r;
}
else
@@ -181,8 +209,11 @@ static int scan(int (*peek)(void *userp),
case 'd':
if ((r = parse_dec(peek, pop, userp, &lval)) >= 0)
{
- *(va_arg(ap, long *)) = lval;
- n++;
+ if(skip==false)
+ {
+ *(va_arg(ap, long *)) = lval;
+ n++;
+ }
n_chars += r;
}
else
@@ -195,10 +226,13 @@ static int scan(int (*peek)(void *userp),
break;
}
break;
- case 's':
- n_chars += skip_spaces(peek, pop, userp);
- n_chars += parse_chars(peek,pop, userp,va_arg(ap, char *) );
- n++;
+ case 's':
+ n_chars += skip_spaces(peek, pop, userp);
+ n_chars += parse_chars(peek,pop, userp,skip?0:va_arg(ap, char *), skip );
+ if(skip==false)
+ {
+ n++;
+ }
break;
case '\0':
return n;
@@ -239,7 +273,7 @@ int sscanf(const char *s, const char *fmt, ...)
int r;
va_list ap;
const char *p;
-
+
p = s;
va_start(ap, fmt);
r = scan(sspeek, sspop, &p, fmt, ap);