diff --git a/apps/plugins/doom/d_deh.c b/apps/plugins/doom/d_deh.c index c1e136f467..d3f7496885 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 3dc64875fd..32e3809dee 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 82daadb24e..90c446b9eb 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 66bf0dd354..5fbe81f3e0 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);