- Added a Gets function to the FileReader class which I planned to use

to enable Timidity to read its config from Zips. 
  I put this on hold though after finding out that the sound quality 
  isn't even near that of Timidity++.
- GCC-Fixes (FString::GetChars() for Printf calls)
- Added a dummy Weapon.NOLMS flag so that Skulltag weapons using this flag
  can be loaded


SVN r901 (trunk)
This commit is contained in:
Christoph Oelckers 2008-04-11 10:16:29 +00:00
parent 10c0d67b78
commit 4cba91a936
7 changed files with 77 additions and 10 deletions

View file

@ -1861,7 +1861,7 @@ static const char *BaseFileSearch (const char *file, const char *ext, bool lookf
if (lookfirstinprogdir)
{
sprintf (wad, "%s%s%s", progdir, progdir[strlen (progdir) - 1] != '/' ? "/" : "", file);
sprintf (wad, "%s%s%s", progdir.GetChars(), progdir[progdir.Len() - 1] != '/' ? "/" : "", file);
if (FileExists (wad))
{
return wad;

View file

@ -132,6 +132,38 @@ long FileReader::Read (void *buffer, long len)
return len;
}
char *FileReader::Gets(char *strbuf, int len)
{
if (FilePos + len > StartPos + Length)
{
len = Length - FilePos + StartPos;
}
if (len <= 0) return 0;
char *p = fgets(strbuf, len, File);
FilePos += len;
return p;
}
char *FileReader::GetsFromBuffer(const char * bufptr, char *strbuf, int len)
{
if (len>Length-FilePos) len=Length-FilePos;
if (len <= 0) return NULL;
char *p = strbuf;
while (len > 1 && bufptr[FilePos] != 0)
{
if (bufptr[FilePos] != '\r')
{
*p++ = bufptr[FilePos];
len--;
if (bufptr[FilePos] == '\n') break;
}
FilePos++;
}
*p++=0;
return strbuf;
}
long FileReader::CalcFileLen() const
{
long endpos;
@ -265,3 +297,9 @@ long MemoryReader::Read (void *buffer, long len)
FilePos+=len;
return len;
}
char *MemoryReader::Gets(char *strbuf, int len)
{
return GetsFromBuffer(bufptr, strbuf, len);
}

View file

@ -17,6 +17,7 @@ public:
virtual long Tell () const;
virtual long Seek (long offset, int origin);
virtual long Read (void *buffer, long len);
virtual char *Gets(char *strbuf, int len);
long GetLength () const { return Length; }
// If you use the underlying FILE without going through this class,
@ -58,10 +59,13 @@ public:
return *this;
}
protected:
FileReader (const FileReader &other, long length);
FileReader ();
char *GetsFromBuffer(const char * bufptr, char *strbuf, int len);
FILE *File;
long Length;
long StartPos;
@ -145,6 +149,7 @@ public:
virtual long Tell () const;
virtual long Seek (long offset, int origin);
virtual long Read (void *buffer, long len);
virtual char *Gets(char *strbuf, int len);
protected:
const char * bufptr;

View file

@ -167,8 +167,6 @@ typedef struct
} d;
} intercept_t;
extern TArray<intercept_t> intercepts;
typedef bool (*traverser_t) (intercept_t *in);
fixed_t P_AproxDistance (fixed_t dx, fixed_t dy);

View file

@ -80,7 +80,8 @@
// [RH] Keep GCC quiet by not using offsetof on Actor types.
#define DEFINE_FLAG(prefix, name, type, variable) { prefix##_##name, #name, (int)(size_t)&((type*)1)->variable - 1 }
#define DEFINE_FLAG2(symbol, name, type, variable) { symbol, #name, (int)(size_t)&((type*)1)->variable - 1 }
#define DEFINE_DEPRECATED_FLAG(name, type) { DEPF_##name, #name, -1 }
#define DEFINE_DEPRECATED_FLAG(name) { DEPF_##name, #name, -1 }
#define DEFINE_DUMMY_FLAG(name) { DEPF_UNUSED, #name, -1 }
struct flagdef
{
@ -91,6 +92,7 @@ struct flagdef
enum
{
DEPF_UNUSED,
DEPF_FIREDAMAGE,
DEPF_ICEDAMAGE,
DEPF_LOWGRAVITY,
@ -248,11 +250,11 @@ static flagdef ActorFlags[]=
DEFINE_FLAG(RF, FORCEXYBILLBOARD, AActor, renderflags),
// Deprecated flags. Handling must be performed in HandleDeprecatedFlags
DEFINE_DEPRECATED_FLAG(FIREDAMAGE, AActor),
DEFINE_DEPRECATED_FLAG(ICEDAMAGE, AActor),
DEFINE_DEPRECATED_FLAG(LOWGRAVITY, AActor),
DEFINE_DEPRECATED_FLAG(SHORTMISSILERANGE, AActor),
DEFINE_DEPRECATED_FLAG(LONGMELEERANGE, AActor),
DEFINE_DEPRECATED_FLAG(FIREDAMAGE),
DEFINE_DEPRECATED_FLAG(ICEDAMAGE),
DEFINE_DEPRECATED_FLAG(LOWGRAVITY),
DEFINE_DEPRECATED_FLAG(SHORTMISSILERANGE),
DEFINE_DEPRECATED_FLAG(LONGMELEERANGE),
};
static flagdef InventoryFlags[] =
@ -271,7 +273,7 @@ static flagdef InventoryFlags[] =
DEFINE_FLAG(IF, IGNORESKILL, AInventory, ItemFlags),
DEFINE_FLAG(IF, ADDITIVETIME, AInventory, ItemFlags),
DEFINE_DEPRECATED_FLAG(PICKUPFLASH, AInventory),
DEFINE_DEPRECATED_FLAG(PICKUPFLASH),
};
@ -296,6 +298,8 @@ static flagdef WeaponFlags[] =
DEFINE_FLAG(WIF, CHEATNOTWEAPON, AWeapon, WeaponFlags),
DEFINE_FLAG(WIF, NO_AUTO_SWITCH, AWeapon, WeaponFlags),
//WIF_BOT_REACTION_SKILL_THING = 1<<31, // I don't understand this
DEFINE_DUMMY_FLAG(NOLMS),
};
static const struct { const PClass *Type; flagdef *Defs; int NumDefs; } FlagLists[] =

View file

@ -2274,6 +2274,27 @@ long FWadLump::Read (void *buffer, long len)
return numread;
}
char *FWadLump::Gets(char *strbuf, int len)
{
// Blood, you are so mean to me with your encryption.
// ... and since this function will never read from Blood
// files let's just return an error here.
if (Encrypted && FilePos - StartPos < 256)
{
return NULL;
}
if (SourceData != NULL)
{
return GetsFromBuffer(SourceData, strbuf, len);
}
else
{
return FileReader::Gets(strbuf, len);
}
return strbuf;
}
// FMemLump -----------------------------------------------------------------
FMemLump::FMemLump ()

View file

@ -119,6 +119,7 @@ public:
long Seek (long offset, int origin);
long Read (void *buffer, long len);
char *Gets(char *strbuf, int len);
private:
FWadLump (const FileReader &reader, long length, bool encrypted);