mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2024-11-18 18:41:57 +00:00
Merge branch 'FileManagement' of http://git.magicalgirl.moe/STJr/SRB2Internal.git into FileManagement
# Conflicts: # src/w_wad.c
This commit is contained in:
commit
f22b16aa17
1 changed files with 49 additions and 43 deletions
92
src/w_wad.c
92
src/w_wad.c
|
@ -459,7 +459,6 @@ UINT16 W_LoadWadFile(const char *filename)
|
||||||
// Let's fill in the fields that we actually need.
|
// Let's fill in the fields that we actually need.
|
||||||
// (Declaring all those vars might not be the optimal way to do this, sorry.)
|
// (Declaring all those vars might not be the optimal way to do this, sorry.)
|
||||||
char *eName;
|
char *eName;
|
||||||
int namePos;
|
|
||||||
unsigned short int eNameLen = 8;
|
unsigned short int eNameLen = 8;
|
||||||
unsigned short int eXFieldLen = 0;
|
unsigned short int eXFieldLen = 0;
|
||||||
unsigned short int eCommentLen = 0;
|
unsigned short int eCommentLen = 0;
|
||||||
|
@ -484,52 +483,59 @@ UINT16 W_LoadWadFile(const char *filename)
|
||||||
|
|
||||||
eName = malloc(sizeof(char)*(eNameLen + 1));
|
eName = malloc(sizeof(char)*(eNameLen + 1));
|
||||||
fgets(eName, eNameLen + 1, handle);
|
fgets(eName, eNameLen + 1, handle);
|
||||||
CONS_Printf("File %s at: %ld\n", eName, ftell(handle));
|
if (0)//(eSize == 0) // Is this entry a folder?
|
||||||
if (numlumps == 0) // First lump? Let's allocate the first lumpinfo block.
|
|
||||||
lumpinfo = Z_Malloc(sizeof(*lumpinfo), PU_STATIC, NULL);
|
|
||||||
else // Otherwise, reallocate and increase by 1. Might not be optimal, though...
|
|
||||||
lumpinfo = (lumpinfo_t*) Z_Realloc(lumpinfo, (numlumps + 1)*sizeof(*lumpinfo), PU_STATIC, NULL);
|
|
||||||
|
|
||||||
lumpinfo[numlumps].position = eLocalHeaderOffset + 30 + eNameLen + eXFieldLen;
|
|
||||||
lumpinfo[numlumps].disksize = eCompSize;
|
|
||||||
lumpinfo[numlumps].size = eSize;
|
|
||||||
CONS_Printf("Address: %ld, Full: %ld, Comp: %ld\n", lumpinfo[numlumps].position, lumpinfo[numlumps].size, lumpinfo[numlumps].disksize);
|
|
||||||
// We will trim the file's full name so that only the filename is left.
|
|
||||||
namePos = eNameLen - 1;
|
|
||||||
while(namePos--)
|
|
||||||
{
|
{
|
||||||
if(eName[namePos] == '/')
|
CONS_Printf("Folder %s at %ld:\n", eName, ftell(handle));
|
||||||
|
}
|
||||||
|
else // If not, then it is a normal file. Let's arrange its lumpinfo structure then!
|
||||||
|
{
|
||||||
|
int namePos = eNameLen - 1;
|
||||||
|
CONS_Printf("File %s at: %ld\n", eName, ftell(handle));
|
||||||
|
if (numlumps == 0) // First lump? Let's allocate the first lumpinfo block.
|
||||||
|
lumpinfo = Z_Malloc(sizeof(*lumpinfo), PU_STATIC, NULL);
|
||||||
|
else // Otherwise, reallocate and increase by 1. Might not be optimal, though...
|
||||||
|
lumpinfo = (lumpinfo_t*) Z_Realloc(lumpinfo, (numlumps + 1)*sizeof(*lumpinfo), PU_STATIC, NULL);
|
||||||
|
|
||||||
|
lumpinfo[numlumps].position = eLocalHeaderOffset + 30 + eNameLen + eXFieldLen;
|
||||||
|
lumpinfo[numlumps].disksize = eCompSize;
|
||||||
|
lumpinfo[numlumps].size = eSize;
|
||||||
|
CONS_Printf("Address: %ld, Full: %ld, Comp: %ld\n", lumpinfo[numlumps].position, lumpinfo[numlumps].size, lumpinfo[numlumps].disksize);
|
||||||
|
// We will trim the file's full name so that only the filename is left.
|
||||||
|
while(namePos--)
|
||||||
{
|
{
|
||||||
namePos++;
|
if(eName[namePos] == '/')
|
||||||
|
{
|
||||||
|
namePos++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
memset(lumpinfo[numlumps].name, '\0', 9);
|
||||||
|
strncpy(lumpinfo[numlumps].name, eName + namePos, 8);
|
||||||
|
|
||||||
|
lumpinfo[numlumps].name2 = Z_Malloc((eNameLen+1)*sizeof(char), PU_STATIC, NULL);
|
||||||
|
strncpy(lumpinfo[numlumps].name2, eName, eNameLen);
|
||||||
|
lumpinfo[numlumps].name2[eNameLen] = '\0';
|
||||||
|
|
||||||
|
// We set the compression type from what we're supporting so far.
|
||||||
|
switch(eCompression)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
lumpinfo[numlumps].compression = CM_NONE;
|
||||||
|
break;
|
||||||
|
case 8:
|
||||||
|
lumpinfo[numlumps].compression = CM_DEFLATE;
|
||||||
|
break;
|
||||||
|
case 14:
|
||||||
|
lumpinfo[numlumps].compression = CM_LZF;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
CONS_Alert(CONS_WARNING, "Lump has an unsupported compression type!\n");
|
||||||
|
lumpinfo[numlumps].compression = CM_NONE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
fseek(handle, eXFieldLen + eCommentLen, SEEK_CUR); // We skip to where we expect the next central directory entry or end marker to be.
|
||||||
|
numlumps++;
|
||||||
}
|
}
|
||||||
memset(lumpinfo[numlumps].name, '\0', 9);
|
|
||||||
strncpy(lumpinfo[numlumps].name, eName + namePos, 8);
|
|
||||||
|
|
||||||
lumpinfo[numlumps].name2 = Z_Malloc((eNameLen+1)*sizeof(char), PU_STATIC, NULL);
|
|
||||||
strncpy(lumpinfo[numlumps].name2, eName, eNameLen);
|
|
||||||
lumpinfo[numlumps].name2[eNameLen] = '\0';
|
|
||||||
|
|
||||||
// We set the compression type from what we're supporting so far.
|
|
||||||
switch(eCompression)
|
|
||||||
{
|
|
||||||
case 0:
|
|
||||||
lumpinfo[numlumps].compression = CM_NONE;
|
|
||||||
break;
|
|
||||||
case 8:
|
|
||||||
lumpinfo[numlumps].compression = CM_DEFLATE;
|
|
||||||
break;
|
|
||||||
case 14:
|
|
||||||
lumpinfo[numlumps].compression = CM_LZF;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
CONS_Alert(CONS_WARNING, "Lump has an unsupported compression type!\n");
|
|
||||||
lumpinfo[numlumps].compression = CM_NONE;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
fseek(handle, eXFieldLen + eCommentLen, SEEK_CUR); // We skip to where we expect the next central directory entry or end marker to be.
|
|
||||||
numlumps++;
|
|
||||||
free(eName);
|
free(eName);
|
||||||
}
|
}
|
||||||
// We found the central directory end signature?
|
// We found the central directory end signature?
|
||||||
|
@ -839,7 +845,7 @@ UINT16 W_CheckNumForFolderEndPK3(const char *name, UINT16 wad, UINT16 startlump)
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
// In a PK3 type of resource file, it looks for an entry with the specified full name.
|
// In a PK3 type of resource file, it looks for
|
||||||
// Returns lump position in PK3's lumpinfo, or INT16_MAX if not found.
|
// Returns lump position in PK3's lumpinfo, or INT16_MAX if not found.
|
||||||
UINT16 W_CheckNumForFullNamePK3(const char *name, UINT16 wad, UINT16 startlump)
|
UINT16 W_CheckNumForFullNamePK3(const char *name, UINT16 wad, UINT16 startlump)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue