mirror of
https://github.com/ZDoom/qzdoom-gpl.git
synced 2025-01-18 21:21:36 +00:00
SVN r46 (trunk)
This commit is contained in:
parent
153d3b4681
commit
8a7ba616f4
15 changed files with 2001 additions and 86 deletions
|
@ -1,12 +1,20 @@
|
||||||
|
April 15, 2006 (Changes by Graf Zahl)
|
||||||
|
- Extended Makewad so it can write Zip files in addition to WAD files.
|
||||||
|
|
||||||
April 14, 2006 (Changes by Graf Zahl)
|
April 14, 2006 (Changes by Graf Zahl)
|
||||||
|
- Moved SC_CheckFloat into sc_man.cpp.
|
||||||
|
- Fixed several issues with the DECORATE parser:
|
||||||
|
* Floating point parameters couldn't be parsed correctly
|
||||||
|
* Some code pointers used parameters incorrectly.
|
||||||
|
* Parameters with default value 1 didn't work as expected
|
||||||
- Added GZDoom's HI_START/HI_END lump namespace. Even though it doesn't do
|
- Added GZDoom's HI_START/HI_END lump namespace. Even though it doesn't do
|
||||||
anything (yet) suppporting it allows to make WADs that use hires texture
|
anything (yet) suppporting it allows to make WADs that use hires texture
|
||||||
replacements but are able to run with ZDoom as well.
|
replacements but are able to run with ZDoom as well.
|
||||||
- Added GZDoom's Zip-support but changed it so that lumps are sorted
|
- Added GZDoom's Zip-support but changed it so that lumps are sorted
|
||||||
alphabetically.
|
alphabetically.
|
||||||
- Added the missing file 'flac/private/float.h' to the repository.
|
- Added the missing file 'flac/private/float.h' to the repository.
|
||||||
- Added: In preparation for Zip-support the sound code has to be able to
|
- Added: For Zip-support the sound code has to be able to load music data
|
||||||
load music data from memory, not just from files.
|
from memory, not just from files.
|
||||||
- Re-added I_SetMusicVolume to optionally reduce the music volume in Strife
|
- Re-added I_SetMusicVolume to optionally reduce the music volume in Strife
|
||||||
conversations.
|
conversations.
|
||||||
- Fixed: The total game time must not be restored when loading a snapshot
|
- Fixed: The total game time must not be restored when loading a snapshot
|
||||||
|
|
|
@ -1966,7 +1966,9 @@ void D_DoomMain (void)
|
||||||
C_ExecCmdLineParams (); // [RH] do all +set commands on the command line
|
C_ExecCmdLineParams (); // [RH] do all +set commands on the command line
|
||||||
|
|
||||||
DArgs *files = Args.GatherFiles ("-file", ".wad", true);
|
DArgs *files = Args.GatherFiles ("-file", ".wad", true);
|
||||||
if (files->NumArgs() > 0)
|
DArgs *files1 = Args.GatherFiles (NULL, ".zip", false);
|
||||||
|
DArgs *files2 = Args.GatherFiles (NULL, ".pk3", false);
|
||||||
|
if (files->NumArgs() > 0 || files1->NumArgs() > 0 || files2->NumArgs() > 0)
|
||||||
{
|
{
|
||||||
// Check for -file in shareware
|
// Check for -file in shareware
|
||||||
if (gameinfo.flags & GI_SHAREWARE)
|
if (gameinfo.flags & GI_SHAREWARE)
|
||||||
|
@ -1979,8 +1981,18 @@ void D_DoomMain (void)
|
||||||
{
|
{
|
||||||
D_AddWildFile (files->GetArg (i));
|
D_AddWildFile (files->GetArg (i));
|
||||||
}
|
}
|
||||||
|
for (int i = 0; i < files1->NumArgs(); i++)
|
||||||
|
{
|
||||||
|
D_AddWildFile (files1->GetArg (i));
|
||||||
|
}
|
||||||
|
for (int i = 0; i < files2->NumArgs(); i++)
|
||||||
|
{
|
||||||
|
D_AddWildFile (files2->GetArg (i));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
delete files;
|
delete files;
|
||||||
|
delete files1;
|
||||||
|
delete files2;
|
||||||
|
|
||||||
Wads.InitMultipleFiles (&wadfiles);
|
Wads.InitMultipleFiles (&wadfiles);
|
||||||
|
|
||||||
|
|
|
@ -550,6 +550,35 @@ BOOL SC_CheckNumber (void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//==========================================================================
|
||||||
|
//
|
||||||
|
// SC_CheckFloat
|
||||||
|
// [GRB] Same as SC_CheckNumber, only for floats
|
||||||
|
//
|
||||||
|
//==========================================================================
|
||||||
|
|
||||||
|
BOOL SC_CheckFloat (void)
|
||||||
|
{
|
||||||
|
char *stopper;
|
||||||
|
|
||||||
|
//CheckOpen ();
|
||||||
|
if (SC_GetString())
|
||||||
|
{
|
||||||
|
sc_Float = strtod (sc_String, &stopper);
|
||||||
|
if (*stopper != 0)
|
||||||
|
{
|
||||||
|
SC_UnGet();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
//
|
//
|
||||||
// SC_GetFloat
|
// SC_GetFloat
|
||||||
|
|
|
@ -17,6 +17,7 @@ bool SC_CheckString (const char *name);
|
||||||
BOOL SC_GetNumber (void);
|
BOOL SC_GetNumber (void);
|
||||||
void SC_MustGetNumber (void);
|
void SC_MustGetNumber (void);
|
||||||
BOOL SC_CheckNumber (void);
|
BOOL SC_CheckNumber (void);
|
||||||
|
BOOL SC_CheckFloat (void);
|
||||||
BOOL SC_GetFloat (void);
|
BOOL SC_GetFloat (void);
|
||||||
void SC_MustGetFloat (void);
|
void SC_MustGetFloat (void);
|
||||||
void SC_UnGet (void);
|
void SC_UnGet (void);
|
||||||
|
|
|
@ -65,6 +65,7 @@
|
||||||
#include "a_hexenglobal.h"
|
#include "a_hexenglobal.h"
|
||||||
#include "a_weaponpiece.h"
|
#include "a_weaponpiece.h"
|
||||||
#include "p_conversation.h"
|
#include "p_conversation.h"
|
||||||
|
#include "thingdef.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -637,7 +638,7 @@ AFuncDesc AFTable[]=
|
||||||
FUNC(A_Jump, "XL" )
|
FUNC(A_Jump, "XL" )
|
||||||
FUNC(A_CustomMissile, "MXXxxx" )
|
FUNC(A_CustomMissile, "MXXxxx" )
|
||||||
FUNC(A_CustomBulletAttack, "XXXXmx" )
|
FUNC(A_CustomBulletAttack, "XXXXmx" )
|
||||||
FUNC(A_CustomRailgun, "Xxccyyx" )
|
FUNC(A_CustomRailgun, "Xxccxxx" )
|
||||||
FUNC(A_JumpIfHealthLower, "XL" )
|
FUNC(A_JumpIfHealthLower, "XL" )
|
||||||
FUNC(A_JumpIfCloser, "XL" )
|
FUNC(A_JumpIfCloser, "XL" )
|
||||||
FUNC(A_JumpIfInventory, "MXL" )
|
FUNC(A_JumpIfInventory, "MXL" )
|
||||||
|
@ -667,7 +668,7 @@ AFuncDesc AFTable[]=
|
||||||
FUNC(A_CustomPunch, "Xxymx" )
|
FUNC(A_CustomPunch, "Xxymx" )
|
||||||
FUNC(A_FireBullets, "XXXXmyx" )
|
FUNC(A_FireBullets, "XXXXmyx" )
|
||||||
FUNC(A_FireCustomMissile, "Mxyxx" )
|
FUNC(A_FireCustomMissile, "Mxyxx" )
|
||||||
FUNC(A_RailAttack, "Xxyccyx" )
|
FUNC(A_RailAttack, "Xxyccxx" )
|
||||||
FUNC(A_Recoil, "X")
|
FUNC(A_Recoil, "X")
|
||||||
FUNC(A_JumpIfInTargetInventory, "MXL" )
|
FUNC(A_JumpIfInTargetInventory, "MXL" )
|
||||||
FUNC(A_GiveToTarget, "Mx" )
|
FUNC(A_GiveToTarget, "Mx" )
|
||||||
|
@ -1050,41 +1051,6 @@ typedef ActorProps (*ActorPropHandler) (register const char *str, register unsig
|
||||||
|
|
||||||
static const ActorProps *is_actorprop (const char *str);
|
static const ActorProps *is_actorprop (const char *str);
|
||||||
|
|
||||||
int ParseExpression (bool _not)
|
|
||||||
{
|
|
||||||
SC_MustGetNumber();
|
|
||||||
return _not? !sc_Number : sc_Number;
|
|
||||||
}
|
|
||||||
|
|
||||||
//==========================================================================
|
|
||||||
//
|
|
||||||
// SC_CheckFloat
|
|
||||||
// [GRB] Same as SC_CheckNumber, only for floats
|
|
||||||
//
|
|
||||||
//==========================================================================
|
|
||||||
|
|
||||||
BOOL SC_CheckFloat (void)
|
|
||||||
{
|
|
||||||
char *stopper;
|
|
||||||
|
|
||||||
//CheckOpen ();
|
|
||||||
if (SC_GetString())
|
|
||||||
{
|
|
||||||
sc_Float = strtod (sc_String, &stopper);
|
|
||||||
if (*stopper != 0)
|
|
||||||
{
|
|
||||||
SC_UnGet();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
//
|
//
|
||||||
// Some functions which check for simple tokens
|
// Some functions which check for simple tokens
|
||||||
|
|
10
src/thingdef.h
Normal file
10
src/thingdef.h
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
#ifndef __THINGDEF_H
|
||||||
|
#define __THINGDEF_H
|
||||||
|
|
||||||
|
int ParseExpression (bool _not);
|
||||||
|
|
||||||
|
int EvalExpressionI (int id, AActor *self);
|
||||||
|
float EvalExpressionF (int id, AActor *self);
|
||||||
|
bool EvalExpressionN (int id, AActor *self);
|
||||||
|
|
||||||
|
#endif
|
|
@ -63,6 +63,7 @@
|
||||||
#include "vectors.h"
|
#include "vectors.h"
|
||||||
#include "a_sharedglobal.h"
|
#include "a_sharedglobal.h"
|
||||||
#include "a_doomglobal.h"
|
#include "a_doomglobal.h"
|
||||||
|
#include "thingdef.h"
|
||||||
|
|
||||||
|
|
||||||
static FRandom pr_camissile ("CustomActorfire");
|
static FRandom pr_camissile ("CustomActorfire");
|
||||||
|
@ -78,10 +79,6 @@ static FRandom pr_spawndebris ("SpawnDebris");
|
||||||
static FRandom pr_jiggle ("Jiggle");
|
static FRandom pr_jiggle ("Jiggle");
|
||||||
|
|
||||||
|
|
||||||
int EvalExpressionI (int id, AActor *self) { return id; }
|
|
||||||
float EvalExpressionF (int id, AActor *self) { return id; }
|
|
||||||
|
|
||||||
|
|
||||||
// A truly awful hack to get to the state that called an action function
|
// A truly awful hack to get to the state that called an action function
|
||||||
// without knowing whether it has been called from a weapon or actor.
|
// without knowing whether it has been called from a weapon or actor.
|
||||||
FState * CallingState;
|
FState * CallingState;
|
||||||
|
@ -694,7 +691,7 @@ void A_FireBullets (AActor *self)
|
||||||
int NumberOfBullets=EvalExpressionI (StateParameters[index+2], self);
|
int NumberOfBullets=EvalExpressionI (StateParameters[index+2], self);
|
||||||
int DamagePerBullet=EvalExpressionI (StateParameters[index+3], self);
|
int DamagePerBullet=EvalExpressionI (StateParameters[index+3], self);
|
||||||
const char * PuffTypeName=(const char *)StateParameters[index+4];
|
const char * PuffTypeName=(const char *)StateParameters[index+4];
|
||||||
bool UseNoAmmo=!EvalExpressionI (StateParameters[index+5], self);
|
bool UseAmmo=EvalExpressionN (StateParameters[index+5], self);
|
||||||
fixed_t Range=fixed_t(EvalExpressionF (StateParameters[index+6], self) * FRACUNIT);
|
fixed_t Range=fixed_t(EvalExpressionF (StateParameters[index+6], self) * FRACUNIT);
|
||||||
|
|
||||||
const TypeInfo * PuffType;
|
const TypeInfo * PuffType;
|
||||||
|
@ -706,7 +703,7 @@ void A_FireBullets (AActor *self)
|
||||||
int bangle;
|
int bangle;
|
||||||
int bslope;
|
int bslope;
|
||||||
|
|
||||||
if (!UseNoAmmo && weapon)
|
if (UseAmmo && weapon)
|
||||||
{
|
{
|
||||||
if (!weapon->DepleteAmmo(weapon->bAltFire, true)) return; // out of ammo
|
if (!weapon->DepleteAmmo(weapon->bAltFire, true)) return; // out of ammo
|
||||||
}
|
}
|
||||||
|
@ -755,14 +752,14 @@ void A_FireCustomMissile (AActor * self)
|
||||||
|
|
||||||
const char * MissileName=(const char *)StateParameters[index];
|
const char * MissileName=(const char *)StateParameters[index];
|
||||||
angle_t Angle=angle_t(EvalExpressionF (StateParameters[index+1], self) * ANGLE_1);
|
angle_t Angle=angle_t(EvalExpressionF (StateParameters[index+1], self) * ANGLE_1);
|
||||||
bool UseNoAmmo=!EvalExpressionI (StateParameters[index+2], self);
|
bool UseAmmo=EvalExpressionN (StateParameters[index+2], self);
|
||||||
int SpawnOfs_XY=EvalExpressionI (StateParameters[index+3], self);
|
int SpawnOfs_XY=EvalExpressionI (StateParameters[index+3], self);
|
||||||
fixed_t SpawnHeight=fixed_t(EvalExpressionF (StateParameters[index+4], self) * FRACUNIT);
|
fixed_t SpawnHeight=fixed_t(EvalExpressionF (StateParameters[index+4], self) * FRACUNIT);
|
||||||
|
|
||||||
player_t *player=self->player;
|
player_t *player=self->player;
|
||||||
AWeapon * weapon=player->ReadyWeapon;
|
AWeapon * weapon=player->ReadyWeapon;
|
||||||
|
|
||||||
if (!UseNoAmmo && weapon)
|
if (UseAmmo && weapon)
|
||||||
{
|
{
|
||||||
if (!weapon->DepleteAmmo(weapon->bAltFire, true)) return; // out of ammo
|
if (!weapon->DepleteAmmo(weapon->bAltFire, true)) return; // out of ammo
|
||||||
}
|
}
|
||||||
|
@ -807,7 +804,7 @@ void A_CustomPunch (AActor *self)
|
||||||
|
|
||||||
int Damage=EvalExpressionI (StateParameters[index], self);
|
int Damage=EvalExpressionI (StateParameters[index], self);
|
||||||
bool norandom=!!EvalExpressionI (StateParameters[index+1], self);
|
bool norandom=!!EvalExpressionI (StateParameters[index+1], self);
|
||||||
bool UseNoAmmo=!EvalExpressionI (StateParameters[index+2], self);
|
bool UseAmmo=EvalExpressionN (StateParameters[index+2], self);
|
||||||
const char * PuffTypeName=(const char *)StateParameters[index+3];
|
const char * PuffTypeName=(const char *)StateParameters[index+3];
|
||||||
fixed_t Range=fixed_t(EvalExpressionF (StateParameters[index+4], self) * FRACUNIT);
|
fixed_t Range=fixed_t(EvalExpressionF (StateParameters[index+4], self) * FRACUNIT);
|
||||||
|
|
||||||
|
@ -827,7 +824,7 @@ void A_CustomPunch (AActor *self)
|
||||||
pitch = P_AimLineAttack (self, angle, MELEERANGE);
|
pitch = P_AimLineAttack (self, angle, MELEERANGE);
|
||||||
|
|
||||||
// only use ammo when actually hitting something!
|
// only use ammo when actually hitting something!
|
||||||
if (!UseNoAmmo && linetarget && weapon)
|
if (UseAmmo && linetarget && weapon)
|
||||||
{
|
{
|
||||||
if (!weapon->DepleteAmmo(weapon->bAltFire, true)) return; // out of ammo
|
if (!weapon->DepleteAmmo(weapon->bAltFire, true)) return; // out of ammo
|
||||||
}
|
}
|
||||||
|
@ -863,16 +860,16 @@ void A_RailAttack (AActor * self)
|
||||||
|
|
||||||
int Damage=EvalExpressionI (StateParameters[index], self);
|
int Damage=EvalExpressionI (StateParameters[index], self);
|
||||||
int Spawnofs_XY=EvalExpressionI (StateParameters[index+1], self);
|
int Spawnofs_XY=EvalExpressionI (StateParameters[index+1], self);
|
||||||
bool UseNoAmmo=!EvalExpressionI (StateParameters[index+2], self);
|
bool UseAmmo=EvalExpressionN (StateParameters[index+2], self);
|
||||||
int Color1=StateParameters[index+3];
|
int Color1=StateParameters[index+3];
|
||||||
int Color2=StateParameters[index+4];
|
int Color2=StateParameters[index+4];
|
||||||
bool Silent=!EvalExpressionI (StateParameters[index+5], self);
|
bool Silent=!!EvalExpressionI (StateParameters[index+5], self);
|
||||||
float MaxDiff=EvalExpressionF (StateParameters[index+6], self);
|
float MaxDiff=EvalExpressionF (StateParameters[index+6], self);
|
||||||
|
|
||||||
AWeapon * weapon=self->player->ReadyWeapon;
|
AWeapon * weapon=self->player->ReadyWeapon;
|
||||||
|
|
||||||
// only use ammo when actually hitting something!
|
// only use ammo when actually hitting something!
|
||||||
if (!UseNoAmmo)
|
if (UseAmmo)
|
||||||
{
|
{
|
||||||
if (!weapon->DepleteAmmo(weapon->bAltFire, true)) return; // out of ammo
|
if (!weapon->DepleteAmmo(weapon->bAltFire, true)) return; // out of ammo
|
||||||
}
|
}
|
||||||
|
@ -905,8 +902,8 @@ void A_CustomRailgun (AActor *actor)
|
||||||
int Spawnofs_XY=EvalExpressionI (StateParameters[index+1], actor);
|
int Spawnofs_XY=EvalExpressionI (StateParameters[index+1], actor);
|
||||||
int Color1=StateParameters[index+2];
|
int Color1=StateParameters[index+2];
|
||||||
int Color2=StateParameters[index+3];
|
int Color2=StateParameters[index+3];
|
||||||
bool Silent=!EvalExpressionI (StateParameters[index+4], actor);
|
bool Silent=!!EvalExpressionI (StateParameters[index+4], actor);
|
||||||
bool aim=!EvalExpressionI (StateParameters[index+5], actor);
|
bool aim=!!EvalExpressionI (StateParameters[index+5], actor);
|
||||||
float MaxDiff=EvalExpressionF (StateParameters[index+6], actor);
|
float MaxDiff=EvalExpressionF (StateParameters[index+6], actor);
|
||||||
|
|
||||||
// [RH] Andy Baker's stealth monsters
|
// [RH] Andy Baker's stealth monsters
|
||||||
|
@ -1064,7 +1061,7 @@ void A_SpawnItem(AActor * self)
|
||||||
const TypeInfo * missile= TypeInfo::FindType((const char *)StateParameters[index]);
|
const TypeInfo * missile= TypeInfo::FindType((const char *)StateParameters[index]);
|
||||||
int distance = EvalExpressionI (StateParameters[index+1], self);
|
int distance = EvalExpressionI (StateParameters[index+1], self);
|
||||||
fixed_t zheight = fixed_t(EvalExpressionF (StateParameters[index+2], self) * FRACUNIT);
|
fixed_t zheight = fixed_t(EvalExpressionF (StateParameters[index+2], self) * FRACUNIT);
|
||||||
bool useammo = !EvalExpressionI (StateParameters[index+3], self);
|
bool useammo = EvalExpressionN (StateParameters[index+3], self);
|
||||||
|
|
||||||
if (!missile)
|
if (!missile)
|
||||||
{
|
{
|
||||||
|
@ -1162,7 +1159,7 @@ void A_ThrowGrenade(AActor * self)
|
||||||
fixed_t zheight = fixed_t(EvalExpressionF (StateParameters[index+1], self) * FRACUNIT);
|
fixed_t zheight = fixed_t(EvalExpressionF (StateParameters[index+1], self) * FRACUNIT);
|
||||||
fixed_t xymom = fixed_t(EvalExpressionF (StateParameters[index+2], self) * FRACUNIT);
|
fixed_t xymom = fixed_t(EvalExpressionF (StateParameters[index+2], self) * FRACUNIT);
|
||||||
fixed_t zmom = fixed_t(EvalExpressionF (StateParameters[index+3], self) * FRACUNIT);
|
fixed_t zmom = fixed_t(EvalExpressionF (StateParameters[index+3], self) * FRACUNIT);
|
||||||
bool useammo = !EvalExpressionI (StateParameters[index+4], self);
|
bool useammo = EvalExpressionN (StateParameters[index+4], self);
|
||||||
|
|
||||||
if (self->player && CallingState != self->state && CallingState != StateCall.State)
|
if (self->player && CallingState != self->state && CallingState != StateCall.State)
|
||||||
{
|
{
|
||||||
|
@ -1394,7 +1391,7 @@ void A_ExtChase(AActor * self)
|
||||||
A_DoChase(self, false,
|
A_DoChase(self, false,
|
||||||
EvalExpressionI (StateParameters[index], self) ? self->MeleeState:NULL,
|
EvalExpressionI (StateParameters[index], self) ? self->MeleeState:NULL,
|
||||||
EvalExpressionI (StateParameters[index+1], self) ? self->MissileState:NULL,
|
EvalExpressionI (StateParameters[index+1], self) ? self->MissileState:NULL,
|
||||||
!EvalExpressionI (StateParameters[index+2], self),
|
EvalExpressionN (StateParameters[index+2], self),
|
||||||
!!EvalExpressionI (StateParameters[index+3], self));
|
!!EvalExpressionI (StateParameters[index+3], self));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
31
src/thingdef_exp.cpp
Normal file
31
src/thingdef_exp.cpp
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
#include "sc_man.h"
|
||||||
|
|
||||||
|
// A stub to simulate the interface of .96x's expression evaluator.
|
||||||
|
|
||||||
|
int ParseExpression (bool _not)
|
||||||
|
{
|
||||||
|
SC_MustGetFloat();
|
||||||
|
if (_not)
|
||||||
|
{
|
||||||
|
if (sc_Float==0.f) sc_Float=1.f;
|
||||||
|
else sc_Float=0.f;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (int)(fixed_t)(sc_Float * FRACUNIT);
|
||||||
|
}
|
||||||
|
|
||||||
|
int EvalExpressionI (int id, AActor *self)
|
||||||
|
{
|
||||||
|
return id>>FRACBITS;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool EvalExpressionN(int id, AActor * self)
|
||||||
|
{
|
||||||
|
return !EvalExpressionI(id, self);
|
||||||
|
}
|
||||||
|
|
||||||
|
float EvalExpressionF (int id, AActor *self)
|
||||||
|
{
|
||||||
|
return (float)id/FRACUNIT;
|
||||||
|
}
|
||||||
|
|
177
tools/makewad/ioapi.c
Normal file
177
tools/makewad/ioapi.c
Normal file
|
@ -0,0 +1,177 @@
|
||||||
|
/* ioapi.c -- IO base function header for compress/uncompress .zip
|
||||||
|
files using zlib + zip or unzip API
|
||||||
|
|
||||||
|
Version 1.01e, February 12th, 2005
|
||||||
|
|
||||||
|
Copyright (C) 1998-2005 Gilles Vollant
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "../../zlib/zlib.h"
|
||||||
|
#include "ioapi.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* I've found an old Unix (a SunOS 4.1.3_U1) without all SEEK_* defined.... */
|
||||||
|
|
||||||
|
#ifndef SEEK_CUR
|
||||||
|
#define SEEK_CUR 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef SEEK_END
|
||||||
|
#define SEEK_END 2
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef SEEK_SET
|
||||||
|
#define SEEK_SET 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
voidpf ZCALLBACK fopen_file_func OF((
|
||||||
|
voidpf opaque,
|
||||||
|
const char* filename,
|
||||||
|
int mode));
|
||||||
|
|
||||||
|
uLong ZCALLBACK fread_file_func OF((
|
||||||
|
voidpf opaque,
|
||||||
|
voidpf stream,
|
||||||
|
void* buf,
|
||||||
|
uLong size));
|
||||||
|
|
||||||
|
uLong ZCALLBACK fwrite_file_func OF((
|
||||||
|
voidpf opaque,
|
||||||
|
voidpf stream,
|
||||||
|
const void* buf,
|
||||||
|
uLong size));
|
||||||
|
|
||||||
|
long ZCALLBACK ftell_file_func OF((
|
||||||
|
voidpf opaque,
|
||||||
|
voidpf stream));
|
||||||
|
|
||||||
|
long ZCALLBACK fseek_file_func OF((
|
||||||
|
voidpf opaque,
|
||||||
|
voidpf stream,
|
||||||
|
uLong offset,
|
||||||
|
int origin));
|
||||||
|
|
||||||
|
int ZCALLBACK fclose_file_func OF((
|
||||||
|
voidpf opaque,
|
||||||
|
voidpf stream));
|
||||||
|
|
||||||
|
int ZCALLBACK ferror_file_func OF((
|
||||||
|
voidpf opaque,
|
||||||
|
voidpf stream));
|
||||||
|
|
||||||
|
|
||||||
|
voidpf ZCALLBACK fopen_file_func (opaque, filename, mode)
|
||||||
|
voidpf opaque;
|
||||||
|
const char* filename;
|
||||||
|
int mode;
|
||||||
|
{
|
||||||
|
FILE* file = NULL;
|
||||||
|
const char* mode_fopen = NULL;
|
||||||
|
if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ)
|
||||||
|
mode_fopen = "rb";
|
||||||
|
else
|
||||||
|
if (mode & ZLIB_FILEFUNC_MODE_EXISTING)
|
||||||
|
mode_fopen = "r+b";
|
||||||
|
else
|
||||||
|
if (mode & ZLIB_FILEFUNC_MODE_CREATE)
|
||||||
|
mode_fopen = "wb";
|
||||||
|
|
||||||
|
if ((filename!=NULL) && (mode_fopen != NULL))
|
||||||
|
file = fopen(filename, mode_fopen);
|
||||||
|
return file;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
uLong ZCALLBACK fread_file_func (opaque, stream, buf, size)
|
||||||
|
voidpf opaque;
|
||||||
|
voidpf stream;
|
||||||
|
void* buf;
|
||||||
|
uLong size;
|
||||||
|
{
|
||||||
|
uLong ret;
|
||||||
|
ret = (uLong)fread(buf, 1, (size_t)size, (FILE *)stream);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
uLong ZCALLBACK fwrite_file_func (opaque, stream, buf, size)
|
||||||
|
voidpf opaque;
|
||||||
|
voidpf stream;
|
||||||
|
const void* buf;
|
||||||
|
uLong size;
|
||||||
|
{
|
||||||
|
uLong ret;
|
||||||
|
ret = (uLong)fwrite(buf, 1, (size_t)size, (FILE *)stream);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
long ZCALLBACK ftell_file_func (opaque, stream)
|
||||||
|
voidpf opaque;
|
||||||
|
voidpf stream;
|
||||||
|
{
|
||||||
|
long ret;
|
||||||
|
ret = ftell((FILE *)stream);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
long ZCALLBACK fseek_file_func (opaque, stream, offset, origin)
|
||||||
|
voidpf opaque;
|
||||||
|
voidpf stream;
|
||||||
|
uLong offset;
|
||||||
|
int origin;
|
||||||
|
{
|
||||||
|
int fseek_origin=0;
|
||||||
|
long ret;
|
||||||
|
switch (origin)
|
||||||
|
{
|
||||||
|
case ZLIB_FILEFUNC_SEEK_CUR :
|
||||||
|
fseek_origin = SEEK_CUR;
|
||||||
|
break;
|
||||||
|
case ZLIB_FILEFUNC_SEEK_END :
|
||||||
|
fseek_origin = SEEK_END;
|
||||||
|
break;
|
||||||
|
case ZLIB_FILEFUNC_SEEK_SET :
|
||||||
|
fseek_origin = SEEK_SET;
|
||||||
|
break;
|
||||||
|
default: return -1;
|
||||||
|
}
|
||||||
|
ret = 0;
|
||||||
|
fseek((FILE *)stream, offset, fseek_origin);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ZCALLBACK fclose_file_func (opaque, stream)
|
||||||
|
voidpf opaque;
|
||||||
|
voidpf stream;
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
ret = fclose((FILE *)stream);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ZCALLBACK ferror_file_func (opaque, stream)
|
||||||
|
voidpf opaque;
|
||||||
|
voidpf stream;
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
ret = ferror((FILE *)stream);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
void fill_fopen_filefunc (pzlib_filefunc_def)
|
||||||
|
zlib_filefunc_def* pzlib_filefunc_def;
|
||||||
|
{
|
||||||
|
pzlib_filefunc_def->zopen_file = fopen_file_func;
|
||||||
|
pzlib_filefunc_def->zread_file = fread_file_func;
|
||||||
|
pzlib_filefunc_def->zwrite_file = fwrite_file_func;
|
||||||
|
pzlib_filefunc_def->ztell_file = ftell_file_func;
|
||||||
|
pzlib_filefunc_def->zseek_file = fseek_file_func;
|
||||||
|
pzlib_filefunc_def->zclose_file = fclose_file_func;
|
||||||
|
pzlib_filefunc_def->zerror_file = ferror_file_func;
|
||||||
|
pzlib_filefunc_def->opaque = NULL;
|
||||||
|
}
|
75
tools/makewad/ioapi.h
Normal file
75
tools/makewad/ioapi.h
Normal file
|
@ -0,0 +1,75 @@
|
||||||
|
/* ioapi.h -- IO base function header for compress/uncompress .zip
|
||||||
|
files using zlib + zip or unzip API
|
||||||
|
|
||||||
|
Version 1.01e, February 12th, 2005
|
||||||
|
|
||||||
|
Copyright (C) 1998-2005 Gilles Vollant
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _ZLIBIOAPI_H
|
||||||
|
#define _ZLIBIOAPI_H
|
||||||
|
|
||||||
|
|
||||||
|
#define ZLIB_FILEFUNC_SEEK_CUR (1)
|
||||||
|
#define ZLIB_FILEFUNC_SEEK_END (2)
|
||||||
|
#define ZLIB_FILEFUNC_SEEK_SET (0)
|
||||||
|
|
||||||
|
#define ZLIB_FILEFUNC_MODE_READ (1)
|
||||||
|
#define ZLIB_FILEFUNC_MODE_WRITE (2)
|
||||||
|
#define ZLIB_FILEFUNC_MODE_READWRITEFILTER (3)
|
||||||
|
|
||||||
|
#define ZLIB_FILEFUNC_MODE_EXISTING (4)
|
||||||
|
#define ZLIB_FILEFUNC_MODE_CREATE (8)
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef ZCALLBACK
|
||||||
|
|
||||||
|
#if (defined(WIN32) || defined (WINDOWS) || defined (_WINDOWS)) && defined(CALLBACK) && defined (USEWINDOWS_CALLBACK)
|
||||||
|
#define ZCALLBACK CALLBACK
|
||||||
|
#else
|
||||||
|
#define ZCALLBACK
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef voidpf (ZCALLBACK *open_file_func) OF((voidpf opaque, const char* filename, int mode));
|
||||||
|
typedef uLong (ZCALLBACK *read_file_func) OF((voidpf opaque, voidpf stream, void* buf, uLong size));
|
||||||
|
typedef uLong (ZCALLBACK *write_file_func) OF((voidpf opaque, voidpf stream, const void* buf, uLong size));
|
||||||
|
typedef long (ZCALLBACK *tell_file_func) OF((voidpf opaque, voidpf stream));
|
||||||
|
typedef long (ZCALLBACK *seek_file_func) OF((voidpf opaque, voidpf stream, uLong offset, int origin));
|
||||||
|
typedef int (ZCALLBACK *close_file_func) OF((voidpf opaque, voidpf stream));
|
||||||
|
typedef int (ZCALLBACK *testerror_file_func) OF((voidpf opaque, voidpf stream));
|
||||||
|
|
||||||
|
typedef struct zlib_filefunc_def_s
|
||||||
|
{
|
||||||
|
open_file_func zopen_file;
|
||||||
|
read_file_func zread_file;
|
||||||
|
write_file_func zwrite_file;
|
||||||
|
tell_file_func ztell_file;
|
||||||
|
seek_file_func zseek_file;
|
||||||
|
close_file_func zclose_file;
|
||||||
|
testerror_file_func zerror_file;
|
||||||
|
voidpf opaque;
|
||||||
|
} zlib_filefunc_def;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void fill_fopen_filefunc OF((zlib_filefunc_def* pzlib_filefunc_def));
|
||||||
|
|
||||||
|
#define ZREAD(filefunc,filestream,buf,size) ((*((filefunc).zread_file))((filefunc).opaque,filestream,buf,size))
|
||||||
|
#define ZWRITE(filefunc,filestream,buf,size) ((*((filefunc).zwrite_file))((filefunc).opaque,filestream,buf,size))
|
||||||
|
#define ZTELL(filefunc,filestream) ((*((filefunc).ztell_file))((filefunc).opaque,filestream))
|
||||||
|
#define ZSEEK(filefunc,filestream,pos,mode) ((*((filefunc).zseek_file))((filefunc).opaque,filestream,pos,mode))
|
||||||
|
#define ZCLOSE(filefunc,filestream) ((*((filefunc).zclose_file))((filefunc).opaque,filestream))
|
||||||
|
#define ZERROR(filefunc,filestream) ((*((filefunc).zerror_file))((filefunc).opaque,filestream))
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -7,6 +7,9 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <time.h>
|
||||||
|
#include "zip.h"
|
||||||
|
|
||||||
#define MAX_LUMPS 4096
|
#define MAX_LUMPS 4096
|
||||||
|
|
||||||
|
@ -64,8 +67,84 @@ int appendlump (FILE *wadfile, char *filename)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int appendtozip (zipFile zipfile, const char * zipname, const char *filename)
|
||||||
|
{
|
||||||
|
char *readbuf;
|
||||||
|
FILE *lumpfile;
|
||||||
|
size_t readlen;
|
||||||
|
int ret = 0;
|
||||||
|
size_t len;
|
||||||
|
zip_fileinfo zip_inf;
|
||||||
|
|
||||||
|
time_t currenttime;
|
||||||
|
tm * ltime;
|
||||||
|
|
||||||
|
time(¤ttime);
|
||||||
|
ltime = localtime(¤ttime);
|
||||||
|
memset(&zip_inf, 0, sizeof(zip_inf));
|
||||||
|
if (ltime != NULL)
|
||||||
|
{
|
||||||
|
zip_inf.tmz_date.tm_sec = ltime->tm_sec;
|
||||||
|
zip_inf.tmz_date.tm_min = ltime->tm_min;
|
||||||
|
zip_inf.tmz_date.tm_hour = ltime->tm_hour;
|
||||||
|
zip_inf.tmz_date.tm_mday = ltime->tm_mday;
|
||||||
|
zip_inf.tmz_date.tm_mon = ltime->tm_mon;
|
||||||
|
zip_inf.tmz_date.tm_year = ltime->tm_year;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
lumpfile = fopen (filename, "rb");
|
||||||
|
if (lumpfile == NULL)
|
||||||
|
{
|
||||||
|
fprintf (stderr, "Could not open %s: %s\n", filename, strerror(errno));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
fseek (lumpfile, 0, SEEK_END);
|
||||||
|
len = ftell(lumpfile);
|
||||||
|
fseek (lumpfile, 0, SEEK_SET);
|
||||||
|
readbuf = (char*)malloc(len);
|
||||||
|
if (readbuf == NULL)
|
||||||
|
{
|
||||||
|
fclose(lumpfile);
|
||||||
|
fprintf (stderr, "Could not allocate %d bytes\n", len);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
readlen = fread (readbuf, 1, len, lumpfile);
|
||||||
|
fclose(lumpfile);
|
||||||
|
if (readlen != len)
|
||||||
|
{
|
||||||
|
free (readbuf);
|
||||||
|
fprintf (stderr, "Unable to read %s\n", filename);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Z_OK != zipOpenNewFileInZip(zipfile, zipname, &zip_inf, NULL, 0, NULL, 0, NULL, Z_DEFLATED, Z_BEST_COMPRESSION))
|
||||||
|
{
|
||||||
|
free (readbuf);
|
||||||
|
fprintf (stderr, "Unable to open zip for writing %s\n", filename);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Z_OK != zipWriteInFileInZip(zipfile, readbuf, (unsigned)len))
|
||||||
|
{
|
||||||
|
free (readbuf);
|
||||||
|
fprintf (stderr, "Unable to write %s to zip\n", filename);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
free (readbuf);
|
||||||
|
|
||||||
|
if (Z_OK != zipCloseFileInZip(zipfile))
|
||||||
|
{
|
||||||
|
fprintf (stderr, "Unable to close %s in zip\n", filename);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int buildwad (FILE *listfile, char *listfilename, char *makecmd, char *makefile)
|
int buildwad (FILE *listfile, char *listfilename, char *makecmd, char *makefile)
|
||||||
{
|
{
|
||||||
|
zipFile zipfile = NULL;
|
||||||
|
|
||||||
wadinfo_t header;
|
wadinfo_t header;
|
||||||
filelump_t directory[MAX_LUMPS];
|
filelump_t directory[MAX_LUMPS];
|
||||||
char str[256];
|
char str[256];
|
||||||
|
@ -81,6 +160,8 @@ int buildwad (FILE *listfile, char *listfilename, char *makecmd, char *makefile)
|
||||||
header.numlumps = 0;
|
header.numlumps = 0;
|
||||||
memset (directory, 0, sizeof(directory));
|
memset (directory, 0, sizeof(directory));
|
||||||
|
|
||||||
|
//__asm int 3
|
||||||
|
|
||||||
while (fgets (str, sizeof(str), listfile))
|
while (fgets (str, sizeof(str), listfile))
|
||||||
{
|
{
|
||||||
lineno++;
|
lineno++;
|
||||||
|
@ -101,27 +182,53 @@ int buildwad (FILE *listfile, char *listfilename, char *makecmd, char *makefile)
|
||||||
|
|
||||||
if (*pt == '@')
|
if (*pt == '@')
|
||||||
{ // Rest of line is wadfile to create
|
{ // Rest of line is wadfile to create
|
||||||
if (wadfile != NULL)
|
if (wadfile != NULL || zipfile != NULL)
|
||||||
{
|
{
|
||||||
fprintf (stderr, "Line %d: Tried to reopen wadfile as %s.\n", lineno, pt + 1);
|
fprintf (stderr, "Line %d: Tried to reopen wadfile as %s.\n", lineno, pt + 1);
|
||||||
fclose (wadfile);
|
if (wadfile != NULL) fclose (wadfile);
|
||||||
|
if (zipfile != NULL) zipClose (zipfile, NULL);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
filename = makefile ? makefile : pt+1;
|
|
||||||
wadfile = fopen (filename, makefile ? "w" : "wb");
|
if (!makefile)
|
||||||
if (wadfile == NULL)
|
|
||||||
{
|
{
|
||||||
fprintf (stderr, "Line %d: Could not open %s: %s\n", lineno, filename, strerror(errno));
|
int ln = (int)strlen(pt+1);
|
||||||
return 1;
|
|
||||||
|
filename = pt+1;
|
||||||
|
if (ln >= 4)
|
||||||
|
{
|
||||||
|
// If the output file has an extension '.zip' or '.pk3' it will be in Zip format.
|
||||||
|
if (!stricmp(filename+ln-3, "ZIP") || !stricmp(filename+ln-3, "PK3"))
|
||||||
|
{
|
||||||
|
zipfile = zipOpen(filename, APPEND_STATUS_CREATE);
|
||||||
|
if (zipfile == NULL)
|
||||||
|
{
|
||||||
|
fprintf (stderr, "Line %d: Could not open %s: %s\n", lineno, filename, strerror(errno));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (makefile)
|
else filename = makefile;
|
||||||
{ // Write out the only rule the makefile has
|
|
||||||
fprintf (wadfile, "%s: %s", pt+1, listfilename);
|
if (!zipfile)
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
// The correct header will be written once the wad is complete
|
wadfile = fopen (filename, makefile ? "w" : "wb");
|
||||||
fwrite (&header, sizeof(header), 1, wadfile);
|
if (wadfile == NULL)
|
||||||
|
{
|
||||||
|
fprintf (stderr, "Line %d: Could not open %s: %s\n", lineno, filename, strerror(errno));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if (makefile)
|
||||||
|
{ // Write out the only rule the makefile has
|
||||||
|
fprintf (wadfile, "%s: %s", pt+1, listfilename);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// The correct header will be written once the wad is complete
|
||||||
|
fwrite (&header, sizeof(header), 1, wadfile);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -143,7 +250,7 @@ int buildwad (FILE *listfile, char *listfilename, char *makecmd, char *makefile)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (wadfile == NULL)
|
if (wadfile == NULL && zipfile == NULL)
|
||||||
{
|
{
|
||||||
fprintf (stderr, "Line %d: No wad specified before lumps.\n", lineno);
|
fprintf (stderr, "Line %d: No wad specified before lumps.\n", lineno);
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -165,17 +272,28 @@ int buildwad (FILE *listfile, char *listfilename, char *makecmd, char *makefile)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
for (i = 0; lumpname[i]; ++i)
|
if (zipfile == NULL)
|
||||||
{
|
{
|
||||||
lumpname[i] = toupper(lumpname[i]);
|
for (i = 0; lumpname[i]; ++i)
|
||||||
}
|
{
|
||||||
strncpy (directory[header.numlumps].name, lumpname, 8);
|
lumpname[i] = toupper(lumpname[i]);
|
||||||
directory[header.numlumps].filepos = ftell (wadfile);
|
}
|
||||||
if (filename != NULL)
|
strncpy (directory[header.numlumps].name, lumpname, 8);
|
||||||
{
|
directory[header.numlumps].filepos = ftell (wadfile);
|
||||||
ret |= appendlump (wadfile, filename);
|
if (filename != NULL)
|
||||||
|
{
|
||||||
|
ret |= appendlump (wadfile, filename);
|
||||||
|
}
|
||||||
directory[header.numlumps].size = ftell (wadfile) - directory[header.numlumps].filepos;
|
directory[header.numlumps].size = ftell (wadfile) - directory[header.numlumps].filepos;
|
||||||
}
|
}
|
||||||
|
else if (filename != NULL)
|
||||||
|
{
|
||||||
|
for (i = 0; lumpname[i]; ++i)
|
||||||
|
{
|
||||||
|
lumpname[i] = tolower(lumpname[i]);
|
||||||
|
}
|
||||||
|
ret |= appendtozip(zipfile, lumpname, filename);
|
||||||
|
}
|
||||||
header.numlumps++;
|
header.numlumps++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -218,10 +336,18 @@ int buildwad (FILE *listfile, char *listfilename, char *makecmd, char *makefile)
|
||||||
}
|
}
|
||||||
fclose (wadfile);
|
fclose (wadfile);
|
||||||
}
|
}
|
||||||
|
else if (zipfile != NULL)
|
||||||
|
{
|
||||||
|
zipClose(zipfile, NULL);
|
||||||
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int main (int argc, char **argv)
|
#if !defined(_MSC_VER)
|
||||||
|
#define __cdecl
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int __cdecl main (int argc, char **argv)
|
||||||
{
|
{
|
||||||
FILE *listfile = NULL;
|
FILE *listfile = NULL;
|
||||||
char *listfilename = NULL;
|
char *listfilename = NULL;
|
||||||
|
|
|
@ -23,11 +23,12 @@
|
||||||
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
|
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
|
||||||
MinimalRebuild="TRUE"
|
MinimalRebuild="TRUE"
|
||||||
BasicRuntimeChecks="3"
|
BasicRuntimeChecks="3"
|
||||||
RuntimeLibrary="5"
|
RuntimeLibrary="1"
|
||||||
UsePrecompiledHeader="0"
|
UsePrecompiledHeader="0"
|
||||||
WarningLevel="3"
|
WarningLevel="3"
|
||||||
Detect64BitPortabilityProblems="TRUE"
|
Detect64BitPortabilityProblems="TRUE"
|
||||||
DebugInformationFormat="4"/>
|
DebugInformationFormat="4"
|
||||||
|
CompileAs="0"/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCCustomBuildTool"/>
|
Name="VCCustomBuildTool"/>
|
||||||
<Tool
|
<Tool
|
||||||
|
@ -69,11 +70,13 @@
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCCLCompilerTool"
|
Name="VCCLCompilerTool"
|
||||||
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
|
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
|
||||||
RuntimeLibrary="4"
|
RuntimeLibrary="0"
|
||||||
UsePrecompiledHeader="0"
|
UsePrecompiledHeader="0"
|
||||||
WarningLevel="3"
|
WarningLevel="3"
|
||||||
Detect64BitPortabilityProblems="TRUE"
|
Detect64BitPortabilityProblems="TRUE"
|
||||||
DebugInformationFormat="3"/>
|
DebugInformationFormat="3"
|
||||||
|
CallingConvention="1"
|
||||||
|
CompileAs="0"/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCCustomBuildTool"/>
|
Name="VCCustomBuildTool"/>
|
||||||
<Tool
|
<Tool
|
||||||
|
@ -111,8 +114,32 @@
|
||||||
<References>
|
<References>
|
||||||
</References>
|
</References>
|
||||||
<Files>
|
<Files>
|
||||||
|
<File
|
||||||
|
RelativePath=".\ioapi.c">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\ioapi.h">
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\makewad.c">
|
RelativePath=".\makewad.c">
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Debug|Win32">
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
CompileAs="2"/>
|
||||||
|
</FileConfiguration>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Release|Win32">
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
CompileAs="2"/>
|
||||||
|
</FileConfiguration>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\zip.c">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\zip.h">
|
||||||
</File>
|
</File>
|
||||||
</Files>
|
</Files>
|
||||||
<Globals>
|
<Globals>
|
||||||
|
|
1220
tools/makewad/zip.c
Normal file
1220
tools/makewad/zip.c
Normal file
File diff suppressed because it is too large
Load diff
235
tools/makewad/zip.h
Normal file
235
tools/makewad/zip.h
Normal file
|
@ -0,0 +1,235 @@
|
||||||
|
/* zip.h -- IO for compress .zip files using zlib
|
||||||
|
Version 1.01e, February 12th, 2005
|
||||||
|
|
||||||
|
Copyright (C) 1998-2005 Gilles Vollant
|
||||||
|
|
||||||
|
This unzip package allow creates .ZIP file, compatible with PKZip 2.04g
|
||||||
|
WinZip, InfoZip tools and compatible.
|
||||||
|
Multi volume ZipFile (span) are not supported.
|
||||||
|
Encryption compatible with pkzip 2.04g only supported
|
||||||
|
Old compressions used by old PKZip 1.x are not supported
|
||||||
|
|
||||||
|
For uncompress .zip file, look at unzip.h
|
||||||
|
|
||||||
|
|
||||||
|
I WAIT FEEDBACK at mail info@winimage.com
|
||||||
|
Visit also http://www.winimage.com/zLibDll/unzip.html for evolution
|
||||||
|
|
||||||
|
Condition of use and distribution are the same than zlib :
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied
|
||||||
|
warranty. In no event will the authors be held liable for any damages
|
||||||
|
arising from the use of this software.
|
||||||
|
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it
|
||||||
|
freely, subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not
|
||||||
|
claim that you wrote the original software. If you use this software
|
||||||
|
in a product, an acknowledgment in the product documentation would be
|
||||||
|
appreciated but is not required.
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
misrepresented as being the original software.
|
||||||
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
|
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* for more info about .ZIP format, see
|
||||||
|
http://www.info-zip.org/pub/infozip/doc/appnote-981119-iz.zip
|
||||||
|
http://www.info-zip.org/pub/infozip/doc/
|
||||||
|
PkWare has also a specification at :
|
||||||
|
ftp://ftp.pkware.com/probdesc.zip
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _zip_H
|
||||||
|
#define _zip_H
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _ZLIB_H
|
||||||
|
#include "../../zlib/zlib.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _ZLIBIOAPI_H
|
||||||
|
#include "ioapi.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(STRICTZIP) || defined(STRICTZIPUNZIP)
|
||||||
|
/* like the STRICT of WIN32, we define a pointer that cannot be converted
|
||||||
|
from (void*) without cast */
|
||||||
|
typedef struct TagzipFile__ { int unused; } zipFile__;
|
||||||
|
typedef zipFile__ *zipFile;
|
||||||
|
#else
|
||||||
|
typedef voidp zipFile;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define ZIP_OK (0)
|
||||||
|
#define ZIP_EOF (0)
|
||||||
|
#define ZIP_ERRNO (Z_ERRNO)
|
||||||
|
#define ZIP_PARAMERROR (-102)
|
||||||
|
#define ZIP_BADZIPFILE (-103)
|
||||||
|
#define ZIP_INTERNALERROR (-104)
|
||||||
|
|
||||||
|
#ifndef DEF_MEM_LEVEL
|
||||||
|
# if MAX_MEM_LEVEL >= 8
|
||||||
|
# define DEF_MEM_LEVEL 8
|
||||||
|
# else
|
||||||
|
# define DEF_MEM_LEVEL MAX_MEM_LEVEL
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
/* default memLevel */
|
||||||
|
|
||||||
|
/* tm_zip contain date/time info */
|
||||||
|
typedef struct tm_zip_s
|
||||||
|
{
|
||||||
|
uInt tm_sec; /* seconds after the minute - [0,59] */
|
||||||
|
uInt tm_min; /* minutes after the hour - [0,59] */
|
||||||
|
uInt tm_hour; /* hours since midnight - [0,23] */
|
||||||
|
uInt tm_mday; /* day of the month - [1,31] */
|
||||||
|
uInt tm_mon; /* months since January - [0,11] */
|
||||||
|
uInt tm_year; /* years - [1980..2044] */
|
||||||
|
} tm_zip;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
tm_zip tmz_date; /* date in understandable format */
|
||||||
|
uLong dosDate; /* if dos_date == 0, tmu_date is used */
|
||||||
|
/* uLong flag; */ /* general purpose bit flag 2 bytes */
|
||||||
|
|
||||||
|
uLong internal_fa; /* internal file attributes 2 bytes */
|
||||||
|
uLong external_fa; /* external file attributes 4 bytes */
|
||||||
|
} zip_fileinfo;
|
||||||
|
|
||||||
|
typedef const char* zipcharpc;
|
||||||
|
|
||||||
|
|
||||||
|
#define APPEND_STATUS_CREATE (0)
|
||||||
|
#define APPEND_STATUS_CREATEAFTER (1)
|
||||||
|
#define APPEND_STATUS_ADDINZIP (2)
|
||||||
|
|
||||||
|
extern zipFile ZEXPORT zipOpen OF((const char *pathname, int append));
|
||||||
|
/*
|
||||||
|
Create a zipfile.
|
||||||
|
pathname contain on Windows XP a filename like "c:\\zlib\\zlib113.zip" or on
|
||||||
|
an Unix computer "zlib/zlib113.zip".
|
||||||
|
if the file pathname exist and append==APPEND_STATUS_CREATEAFTER, the zip
|
||||||
|
will be created at the end of the file.
|
||||||
|
(useful if the file contain a self extractor code)
|
||||||
|
if the file pathname exist and append==APPEND_STATUS_ADDINZIP, we will
|
||||||
|
add files in existing zip (be sure you don't add file that doesn't exist)
|
||||||
|
If the zipfile cannot be opened, the return value is NULL.
|
||||||
|
Else, the return value is a zipFile Handle, usable with other function
|
||||||
|
of this zip package.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Note : there is no delete function into a zipfile.
|
||||||
|
If you want delete file into a zipfile, you must open a zipfile, and create another
|
||||||
|
Of couse, you can use RAW reading and writing to copy the file you did not want delte
|
||||||
|
*/
|
||||||
|
|
||||||
|
extern zipFile ZEXPORT zipOpen2 OF((const char *pathname,
|
||||||
|
int append,
|
||||||
|
zipcharpc* globalcomment,
|
||||||
|
zlib_filefunc_def* pzlib_filefunc_def));
|
||||||
|
|
||||||
|
extern int ZEXPORT zipOpenNewFileInZip OF((zipFile file,
|
||||||
|
const char* filename,
|
||||||
|
const zip_fileinfo* zipfi,
|
||||||
|
const void* extrafield_local,
|
||||||
|
uInt size_extrafield_local,
|
||||||
|
const void* extrafield_global,
|
||||||
|
uInt size_extrafield_global,
|
||||||
|
const char* comment,
|
||||||
|
int method,
|
||||||
|
int level));
|
||||||
|
/*
|
||||||
|
Open a file in the ZIP for writing.
|
||||||
|
filename : the filename in zip (if NULL, '-' without quote will be used
|
||||||
|
*zipfi contain supplemental information
|
||||||
|
if extrafield_local!=NULL and size_extrafield_local>0, extrafield_local
|
||||||
|
contains the extrafield data the the local header
|
||||||
|
if extrafield_global!=NULL and size_extrafield_global>0, extrafield_global
|
||||||
|
contains the extrafield data the the local header
|
||||||
|
if comment != NULL, comment contain the comment string
|
||||||
|
method contain the compression method (0 for store, Z_DEFLATED for deflate)
|
||||||
|
level contain the level of compression (can be Z_DEFAULT_COMPRESSION)
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
extern int ZEXPORT zipOpenNewFileInZip2 OF((zipFile file,
|
||||||
|
const char* filename,
|
||||||
|
const zip_fileinfo* zipfi,
|
||||||
|
const void* extrafield_local,
|
||||||
|
uInt size_extrafield_local,
|
||||||
|
const void* extrafield_global,
|
||||||
|
uInt size_extrafield_global,
|
||||||
|
const char* comment,
|
||||||
|
int method,
|
||||||
|
int level,
|
||||||
|
int raw));
|
||||||
|
|
||||||
|
/*
|
||||||
|
Same than zipOpenNewFileInZip, except if raw=1, we write raw file
|
||||||
|
*/
|
||||||
|
|
||||||
|
extern int ZEXPORT zipOpenNewFileInZip3 OF((zipFile file,
|
||||||
|
const char* filename,
|
||||||
|
const zip_fileinfo* zipfi,
|
||||||
|
const void* extrafield_local,
|
||||||
|
uInt size_extrafield_local,
|
||||||
|
const void* extrafield_global,
|
||||||
|
uInt size_extrafield_global,
|
||||||
|
const char* comment,
|
||||||
|
int method,
|
||||||
|
int level,
|
||||||
|
int raw,
|
||||||
|
int windowBits,
|
||||||
|
int memLevel,
|
||||||
|
int strategy,
|
||||||
|
const char* password,
|
||||||
|
uLong crcForCtypting));
|
||||||
|
|
||||||
|
/*
|
||||||
|
Same than zipOpenNewFileInZip2, except
|
||||||
|
windowBits,memLevel,,strategy : see parameter strategy in deflateInit2
|
||||||
|
password : crypting password (NULL for no crypting)
|
||||||
|
crcForCtypting : crc of file to compress (needed for crypting)
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
extern int ZEXPORT zipWriteInFileInZip OF((zipFile file,
|
||||||
|
const void* buf,
|
||||||
|
unsigned len));
|
||||||
|
/*
|
||||||
|
Write data in the zipfile
|
||||||
|
*/
|
||||||
|
|
||||||
|
extern int ZEXPORT zipCloseFileInZip OF((zipFile file));
|
||||||
|
/*
|
||||||
|
Close the current file in the zipfile
|
||||||
|
*/
|
||||||
|
|
||||||
|
extern int ZEXPORT zipCloseFileInZipRaw OF((zipFile file,
|
||||||
|
uLong uncompressed_size,
|
||||||
|
uLong crc32));
|
||||||
|
/*
|
||||||
|
Close the current file in the zipfile, for fiel opened with
|
||||||
|
parameter raw=1 in zipOpenNewFileInZip2
|
||||||
|
uncompressed_size and crc32 are value for the uncompressed size
|
||||||
|
*/
|
||||||
|
|
||||||
|
extern int ZEXPORT zipClose OF((zipFile file,
|
||||||
|
const char* global_comment));
|
||||||
|
/*
|
||||||
|
Close the zipfile
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* _zip_H */
|
|
@ -30,6 +30,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wadsrc", "wadsrc\wadsrc.vcp
|
||||||
EndProject
|
EndProject
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "makewad", "tools\makewad\makewad.vcproj", "{24A19C02-F041-4AB0-A1A1-02E1E88EDBD3}"
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "makewad", "tools\makewad\makewad.vcproj", "{24A19C02-F041-4AB0-A1A1-02E1E88EDBD3}"
|
||||||
ProjectSection(ProjectDependencies) = postProject
|
ProjectSection(ProjectDependencies) = postProject
|
||||||
|
{F9D9E7D4-E1A2-4866-9E85-B1B14137EE63} = {F9D9E7D4-E1A2-4866-9E85-B1B14137EE63}
|
||||||
EndProjectSection
|
EndProjectSection
|
||||||
EndProject
|
EndProject
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xlatcc", "tools\xlatcc\xlatcc.vcproj", "{3FFA68B3-9449-4B03-ADEE-194C3638623B}"
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xlatcc", "tools\xlatcc\xlatcc.vcproj", "{3FFA68B3-9449-4B03-ADEE-194C3638623B}"
|
||||||
|
|
Loading…
Reference in a new issue