Big fat-off commit.
A few changes. Half-Life support is finally getting committed. Some unnecessary filesystem code changes. And there's code for nsapi - meaning we can embed FTE in a browser (firefox and opera on windows work). A couple of CSQC changes, trying to move towards a final EXT_CSQC_1. Revised ruleset format finally implemented. Doesn't compile with msvc6 due to issues with libjpeg not being a clean library. Presumably its fine in vs2005. Your mileage may vary. git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@3148 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
parent
262bc69548
commit
4974c57c2c
125 changed files with 16306 additions and 3148 deletions
|
@ -633,7 +633,16 @@ static int CG_SystemCallsEx(void *offset, unsigned int mask, int fn, const int *
|
||||||
if (!angles)
|
if (!angles)
|
||||||
angles = vec3_origin;
|
angles = vec3_origin;
|
||||||
if (mod)
|
if (mod)
|
||||||
|
#ifndef CLIENTONLY
|
||||||
TransformedNativeTrace(mod, 0, 0, start, end, mins, maxs, brushmask, &tr, origin, angles);
|
TransformedNativeTrace(mod, 0, 0, start, end, mins, maxs, brushmask, &tr, origin, angles);
|
||||||
|
#else
|
||||||
|
{
|
||||||
|
#pragma message("FIXME: G3 CGame requires TransformedNativeTrace!")
|
||||||
|
memset(&tr, 0, sizeof(tr));
|
||||||
|
tr.allsolid = tr.startsolid = true;
|
||||||
|
tr.contents = 1;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
memset(&tr, 0, sizeof(tr));
|
memset(&tr, 0, sizeof(tr));
|
||||||
|
@ -859,7 +868,7 @@ vec3_t listener_up;
|
||||||
VectorCopy(axis+3, listener_right);
|
VectorCopy(axis+3, listener_right);
|
||||||
VectorCopy(axis+6, listener_up);
|
VectorCopy(axis+6, listener_up);
|
||||||
|
|
||||||
// S_Update(origin, axis[0], axis[1], axis[2], false);
|
S_UpdateListener(org, axis[0], axis[1], axis[2], false);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "quakedef.h"
|
#include "quakedef.h"
|
||||||
|
#include "fs.h"
|
||||||
|
|
||||||
void CL_FinishTimeDemo (void);
|
void CL_FinishTimeDemo (void);
|
||||||
float demtime;
|
float demtime;
|
||||||
|
@ -883,7 +884,6 @@ void CL_Record_f (void)
|
||||||
{
|
{
|
||||||
int c;
|
int c;
|
||||||
char name[MAX_OSPATH];
|
char name[MAX_OSPATH];
|
||||||
int namelen = sizeof(name);
|
|
||||||
sizebuf_t buf;
|
sizebuf_t buf;
|
||||||
char buf_data[MAX_QWMSGLEN];
|
char buf_data[MAX_QWMSGLEN];
|
||||||
int n, i, j;
|
int n, i, j;
|
||||||
|
@ -910,7 +910,6 @@ void CL_Record_f (void)
|
||||||
if (cls.demorecording)
|
if (cls.demorecording)
|
||||||
CL_Stop_f();
|
CL_Stop_f();
|
||||||
|
|
||||||
namelen -= strlen(com_gamedir)+1;
|
|
||||||
if (c == 2) //user supplied a name
|
if (c == 2) //user supplied a name
|
||||||
{
|
{
|
||||||
fname = Cmd_Argv(1);
|
fname = Cmd_Argv(1);
|
||||||
|
@ -1651,6 +1650,8 @@ void CL_QTVPoll (void)
|
||||||
|
|
||||||
else if (!strcmp(s, "BEGIN"))
|
else if (!strcmp(s, "BEGIN"))
|
||||||
{
|
{
|
||||||
|
while (*colon && *(unsigned char*)colon <= ' ')
|
||||||
|
colon++;
|
||||||
if (*colon)
|
if (*colon)
|
||||||
Con_Printf("streaming \"%s\" from qtv\n", colon);
|
Con_Printf("streaming \"%s\" from qtv\n", colon);
|
||||||
else
|
else
|
||||||
|
@ -1737,6 +1738,171 @@ char *strchrrev(char *str, char chr)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CL_ParseQTVFile(vfsfile_t *f, const char *fname, qtvfile_t *result)
|
||||||
|
{
|
||||||
|
char buffer[2048];
|
||||||
|
char *s;
|
||||||
|
memset(result, 0, sizeof(*result));
|
||||||
|
if (!f)
|
||||||
|
{
|
||||||
|
Con_Printf("Couldn't open QTV file: %s\n", name);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!VFS_GETS(f, buffer, sizeof(buffer)-1))
|
||||||
|
{
|
||||||
|
Con_Printf("Empty QTV file: %s\n", name);
|
||||||
|
VFS_CLOSE(f);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
s = buffer;
|
||||||
|
while (*s == ' ' || *s == '\t')
|
||||||
|
s++;
|
||||||
|
if (*s != '[')
|
||||||
|
{
|
||||||
|
Con_Printf("Bad QTV file: %s\n", name);
|
||||||
|
VFS_CLOSE(f);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
s++;
|
||||||
|
while (*s == ' ' || *s == '\t')
|
||||||
|
s++;
|
||||||
|
if (strnicmp(s, "QTV", 3))
|
||||||
|
{
|
||||||
|
Con_Printf("Bad QTV file: %s\n", name);
|
||||||
|
VFS_CLOSE(f);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
s+=3;
|
||||||
|
while (*s == ' ' || *s == '\t')
|
||||||
|
s++;
|
||||||
|
if (*s != ']')
|
||||||
|
{
|
||||||
|
Con_Printf("Bad QTV file: %s\n", name);
|
||||||
|
VFS_CLOSE(f);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
s++;
|
||||||
|
while (*s == ' ' || *s == '\t' || *s == '\r')
|
||||||
|
s++;
|
||||||
|
if (*s)
|
||||||
|
{
|
||||||
|
Con_Printf("Bad QTV file: %s\n", name);
|
||||||
|
VFS_CLOSE(f);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (VFS_GETS(f, buffer, sizeof(buffer)-1))
|
||||||
|
{
|
||||||
|
s = COM_ParseToken(buffer, ":=");
|
||||||
|
if (*s != '=' && *s != ':')
|
||||||
|
s = "";
|
||||||
|
else
|
||||||
|
s++;
|
||||||
|
|
||||||
|
if (!stricmp(com_token, "stream"))
|
||||||
|
{
|
||||||
|
result->connectiontype = QTVCT_STREAM;
|
||||||
|
s = COM_ParseOut(s, result->server, sizeof(result->server));
|
||||||
|
}
|
||||||
|
else if (!stricmp(com_token, "connect"))
|
||||||
|
{
|
||||||
|
result->connectiontype = QTVCT_CONNECT;
|
||||||
|
s = COM_ParseOut(s, result->server, sizeof(result->server));
|
||||||
|
}
|
||||||
|
else if (!stricmp(com_token, "join"))
|
||||||
|
{
|
||||||
|
result->connectiontype = QTVCT_JOIN;
|
||||||
|
s = COM_ParseOut(s, result->server, sizeof(result->server));
|
||||||
|
}
|
||||||
|
else if (!stricmp(com_token, "observe"))
|
||||||
|
{
|
||||||
|
result->connectiontype = QTVCT_OBSERVE;
|
||||||
|
s = COM_ParseOut(s, result->server, sizeof(result->server));
|
||||||
|
}
|
||||||
|
else if (!stricmp(com_token, "splash"))
|
||||||
|
{
|
||||||
|
s = COM_ParseOut(s, result->splashscreen, sizeof(result->server));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
VFS_CLOSE(f);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CL_ParseQTVDescriptor(vfsfile_t *f, const char *name)
|
||||||
|
{
|
||||||
|
char buffer[1024];
|
||||||
|
char *s;
|
||||||
|
|
||||||
|
if (!f)
|
||||||
|
{
|
||||||
|
Con_Printf("Couldn't open QTV file: %s\n", name);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
while (VFS_GETS(f, buffer, sizeof(buffer)-1))
|
||||||
|
{
|
||||||
|
if (!strncmp(buffer, "Stream=", 7) || !strncmp(buffer, "Stream:", 7))
|
||||||
|
{
|
||||||
|
for (s = buffer + strlen(buffer)-1; s >= buffer; s--)
|
||||||
|
{
|
||||||
|
if (*s == '\r' || *s == '\n' || *s == ';')
|
||||||
|
*s = 0;
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
s = buffer+7;
|
||||||
|
while(*s && *s <= ' ')
|
||||||
|
s++;
|
||||||
|
Cbuf_AddText(va("qtvplay \"%s\"\n", s), Cmd_ExecLevel);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (!strncmp(buffer, "Connect=", 8) || !strncmp(buffer, "Connect:", 8))
|
||||||
|
{
|
||||||
|
for (s = buffer + strlen(buffer)-1; s >= buffer; s--)
|
||||||
|
{
|
||||||
|
if (*s == '\r' || *s == '\n' || *s == ';')
|
||||||
|
*s = 0;
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
s = buffer+8;
|
||||||
|
while(*s && *s <= ' ')
|
||||||
|
s++;
|
||||||
|
Cbuf_AddText(va("connect \"%s\"\n", s), Cmd_ExecLevel);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (!strncmp(buffer, "Join=", 5) || !strncmp(buffer, "Join:", 5))
|
||||||
|
{
|
||||||
|
for (s = buffer + strlen(buffer)-1; s >= buffer; s--)
|
||||||
|
{
|
||||||
|
if (*s == '\r' || *s == '\n' || *s == ';')
|
||||||
|
*s = 0;
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
s = buffer+5;
|
||||||
|
while(*s && *s <= ' ')
|
||||||
|
s++;
|
||||||
|
Cbuf_AddText(va("join \"%s\"\n", s), Cmd_ExecLevel);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (!strncmp(buffer, "Observe=", 8) || !strncmp(buffer, "Observe:", 8))
|
||||||
|
{
|
||||||
|
for (s = buffer + strlen(buffer)-1; s >= buffer; s--)
|
||||||
|
{
|
||||||
|
if (*s == '\r' || *s == '\n' || *s == ';')
|
||||||
|
*s = 0;
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
s = buffer+8;
|
||||||
|
while(*s && *s <= ' ')
|
||||||
|
s++;
|
||||||
|
Cbuf_AddText(va("observe \"%s\"\n", s), Cmd_ExecLevel);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
VFS_CLOSE(f);
|
||||||
|
}
|
||||||
|
|
||||||
void CL_QTVPlay_f (void)
|
void CL_QTVPlay_f (void)
|
||||||
{
|
{
|
||||||
qboolean raw=0;
|
qboolean raw=0;
|
||||||
|
@ -1754,80 +1920,8 @@ void CL_QTVPlay_f (void)
|
||||||
|
|
||||||
if (*connrequest == '#')
|
if (*connrequest == '#')
|
||||||
{
|
{
|
||||||
char buffer[1024];
|
//#FILENAME is a local system path
|
||||||
char *s;
|
CL_ParseQTVDescriptor(VFSOS_Open(connrequest+1, "rt"), connrequest+1);
|
||||||
FILE *f;
|
|
||||||
f = fopen(connrequest+1, "rt");
|
|
||||||
if (!f)
|
|
||||||
{
|
|
||||||
Con_Printf("Couldn't open QTV file: %s\n", connrequest+1);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
while (!feof(f))
|
|
||||||
{
|
|
||||||
fgets(buffer, sizeof(buffer)-1, f);
|
|
||||||
if (!strncmp(buffer, "Stream=", 7) || !strncmp(buffer, "Stream:", 7))
|
|
||||||
{
|
|
||||||
for (s = buffer + strlen(buffer)-1; s >= buffer; s--)
|
|
||||||
{
|
|
||||||
if (*s == '\r' || *s == '\n' || *s == ';')
|
|
||||||
*s = 0;
|
|
||||||
else
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
s = buffer+7;
|
|
||||||
while(*s && *s <= ' ')
|
|
||||||
s++;
|
|
||||||
Cbuf_AddText(va("qtvplay \"%s\"\n", s), Cmd_ExecLevel);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (!strncmp(buffer, "Connect=", 8) || !strncmp(buffer, "Connect:", 8))
|
|
||||||
{
|
|
||||||
for (s = buffer + strlen(buffer)-1; s >= buffer; s--)
|
|
||||||
{
|
|
||||||
if (*s == '\r' || *s == '\n' || *s == ';')
|
|
||||||
*s = 0;
|
|
||||||
else
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
s = buffer+8;
|
|
||||||
while(*s && *s <= ' ')
|
|
||||||
s++;
|
|
||||||
Cbuf_AddText(va("connect \"%s\"\n", s), Cmd_ExecLevel);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (!strncmp(buffer, "Join=", 5) || !strncmp(buffer, "Join:", 5))
|
|
||||||
{
|
|
||||||
for (s = buffer + strlen(buffer)-1; s >= buffer; s--)
|
|
||||||
{
|
|
||||||
if (*s == '\r' || *s == '\n' || *s == ';')
|
|
||||||
*s = 0;
|
|
||||||
else
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
s = buffer+5;
|
|
||||||
while(*s && *s <= ' ')
|
|
||||||
s++;
|
|
||||||
Cbuf_AddText(va("join \"%s\"\n", s), Cmd_ExecLevel);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (!strncmp(buffer, "Observe=", 8) || !strncmp(buffer, "Observe:", 8))
|
|
||||||
{
|
|
||||||
for (s = buffer + strlen(buffer)-1; s >= buffer; s--)
|
|
||||||
{
|
|
||||||
if (*s == '\r' || *s == '\n' || *s == ';')
|
|
||||||
*s = 0;
|
|
||||||
else
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
s = buffer+8;
|
|
||||||
while(*s && *s <= ' ')
|
|
||||||
s++;
|
|
||||||
Cbuf_AddText(va("observe \"%s\"\n", s), Cmd_ExecLevel);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fclose(f);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1595,6 +1595,8 @@ void CL_LinkPacketEntities (void)
|
||||||
|
|
||||||
autorotate = anglemod(100*servertime);
|
autorotate = anglemod(100*servertime);
|
||||||
|
|
||||||
|
CLCSQC_DeltaStart();
|
||||||
|
|
||||||
for (newpnum=0 ; newpnum<pack->num_entities ; newpnum++)
|
for (newpnum=0 ; newpnum<pack->num_entities ; newpnum++)
|
||||||
{
|
{
|
||||||
state = &pack->entities[newpnum];
|
state = &pack->entities[newpnum];
|
||||||
|
@ -1606,6 +1608,10 @@ void CL_LinkPacketEntities (void)
|
||||||
Con_Printf("Too many visible entities\n");
|
Con_Printf("Too many visible entities\n");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (CLCSQC_DeltaUpdate(state))
|
||||||
|
continue;
|
||||||
|
|
||||||
ent = &cl_visedicts[cl_numvisedicts];
|
ent = &cl_visedicts[cl_numvisedicts];
|
||||||
#ifdef Q3SHADERS
|
#ifdef Q3SHADERS
|
||||||
ent->forcedshader = NULL;
|
ent->forcedshader = NULL;
|
||||||
|
@ -1762,12 +1768,11 @@ void CL_LinkPacketEntities (void)
|
||||||
AngleVectors(angles, ent->axis[0], ent->axis[1], ent->axis[2]);
|
AngleVectors(angles, ent->axis[0], ent->axis[1], ent->axis[2]);
|
||||||
VectorInverse(ent->axis[1]);
|
VectorInverse(ent->axis[1]);
|
||||||
|
|
||||||
if (ent->keynum <= MAX_CLIENTS
|
if (ent->keynum <= MAX_CLIENTS)
|
||||||
#ifdef NQPROT
|
{
|
||||||
&& cls.protocol == CP_QUAKEWORLD
|
if (!cl.nolocalplayer[0])
|
||||||
#endif
|
ent->keynum += MAX_EDICTS;
|
||||||
)
|
}
|
||||||
ent->keynum += MAX_EDICTS;
|
|
||||||
|
|
||||||
if (state->tagentity)
|
if (state->tagentity)
|
||||||
{ //ent is attached to a tag, rotate this ent accordingly.
|
{ //ent is attached to a tag, rotate this ent accordingly.
|
||||||
|
@ -1869,6 +1874,7 @@ void CL_LinkPacketEntities (void)
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
CLCSQC_DeltaEnd();
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
|
||||||
|
@ -2752,6 +2758,9 @@ void CL_LinkPlayers (void)
|
||||||
vec3_t angles;
|
vec3_t angles;
|
||||||
float *org;
|
float *org;
|
||||||
|
|
||||||
|
if (!cl.worldmodel || cl.worldmodel->needload)
|
||||||
|
return;
|
||||||
|
|
||||||
playertime = realtime - cls.latency + 0.02;
|
playertime = realtime - cls.latency + 0.02;
|
||||||
if (playertime > realtime)
|
if (playertime > realtime)
|
||||||
playertime = realtime;
|
playertime = realtime;
|
||||||
|
@ -2763,7 +2772,13 @@ void CL_LinkPlayers (void)
|
||||||
; j++, info++, state++)
|
; j++, info++, state++)
|
||||||
{
|
{
|
||||||
if (state->messagenum != cl.validsequence)
|
if (state->messagenum != cl.validsequence)
|
||||||
|
{
|
||||||
|
CLCSQC_DeltaPlayer(j, NULL);
|
||||||
continue; // not present this frame
|
continue; // not present this frame
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CLCSQC_DeltaPlayer(j, state))
|
||||||
|
continue;
|
||||||
|
|
||||||
// spawn light flashes, even ones coming from invisible objects
|
// spawn light flashes, even ones coming from invisible objects
|
||||||
if (r_powerupglow.value && !(r_powerupglow.value == 2 && j == cl.playernum[0]))
|
if (r_powerupglow.value && !(r_powerupglow.value == 2 && j == cl.playernum[0]))
|
||||||
|
@ -3010,25 +3025,29 @@ void CL_LinkViewModel(void)
|
||||||
ent.shaderRGBAf[2] = 1;
|
ent.shaderRGBAf[2] = 1;
|
||||||
ent.shaderRGBAf[3] = alpha;
|
ent.shaderRGBAf[3] = alpha;
|
||||||
|
|
||||||
ent.framestate.g[FS_REG].frame[0] = cl.viewent[r_refdef.currentplayernum].framestate.g[FS_REG].frame[0];
|
#ifdef HLCLIENT
|
||||||
ent.framestate.g[FS_REG].frame[1] = oldframe[r_refdef.currentplayernum];
|
if (!CLHL_AnimateViewEntity(&ent))
|
||||||
|
#endif
|
||||||
if (ent.framestate.g[FS_REG].frame[0] != prevframe[r_refdef.currentplayernum])
|
|
||||||
{
|
{
|
||||||
oldframe[r_refdef.currentplayernum] = ent.framestate.g[FS_REG].frame[1] = prevframe[r_refdef.currentplayernum];
|
ent.framestate.g[FS_REG].frame[0] = cl.viewent[r_refdef.currentplayernum].framestate.g[FS_REG].frame[0];
|
||||||
lerptime[r_refdef.currentplayernum] = realtime;
|
ent.framestate.g[FS_REG].frame[1] = oldframe[r_refdef.currentplayernum];
|
||||||
}
|
|
||||||
prevframe[r_refdef.currentplayernum] = ent.framestate.g[FS_REG].frame[0];
|
|
||||||
|
|
||||||
if (ent.model != oldmodel[r_refdef.currentplayernum])
|
if (ent.framestate.g[FS_REG].frame[0] != prevframe[r_refdef.currentplayernum])
|
||||||
{
|
{
|
||||||
oldmodel[r_refdef.currentplayernum] = ent.model;
|
oldframe[r_refdef.currentplayernum] = ent.framestate.g[FS_REG].frame[1] = prevframe[r_refdef.currentplayernum];
|
||||||
oldframe[r_refdef.currentplayernum] = ent.framestate.g[FS_REG].frame[1] = ent.framestate.g[FS_REG].frame[0];
|
lerptime[r_refdef.currentplayernum] = realtime;
|
||||||
lerptime[r_refdef.currentplayernum] = realtime;
|
}
|
||||||
}
|
prevframe[r_refdef.currentplayernum] = ent.framestate.g[FS_REG].frame[0];
|
||||||
ent.framestate.g[FS_REG].lerpfrac = 1-(realtime-lerptime[r_refdef.currentplayernum])*10;
|
|
||||||
ent.framestate.g[FS_REG].lerpfrac = bound(0, ent.framestate.g[FS_REG].lerpfrac, 1);
|
|
||||||
|
|
||||||
|
if (ent.model != oldmodel[r_refdef.currentplayernum])
|
||||||
|
{
|
||||||
|
oldmodel[r_refdef.currentplayernum] = ent.model;
|
||||||
|
oldframe[r_refdef.currentplayernum] = ent.framestate.g[FS_REG].frame[1] = ent.framestate.g[FS_REG].frame[0];
|
||||||
|
lerptime[r_refdef.currentplayernum] = realtime;
|
||||||
|
}
|
||||||
|
ent.framestate.g[FS_REG].lerpfrac = 1-(realtime-lerptime[r_refdef.currentplayernum])*10;
|
||||||
|
ent.framestate.g[FS_REG].lerpfrac = bound(0, ent.framestate.g[FS_REG].lerpfrac, 1);
|
||||||
|
}
|
||||||
#define Q2RF_VIEWERMODEL 2 // don't draw through eyes, only mirrors
|
#define Q2RF_VIEWERMODEL 2 // don't draw through eyes, only mirrors
|
||||||
#define Q2RF_WEAPONMODEL 4 // only draw through eyes
|
#define Q2RF_WEAPONMODEL 4 // only draw through eyes
|
||||||
#define Q2RF_DEPTHHACK 16 // for view weapon Z crunching
|
#define Q2RF_DEPTHHACK 16 // for view weapon Z crunching
|
||||||
|
|
|
@ -1505,6 +1505,9 @@ void CL_SendCmd (double frametime)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef HLCLIENT
|
||||||
|
if (!CLHL_BuildUserInput(msecstouse, &independantphysics[0]))
|
||||||
|
#endif
|
||||||
for (plnum = 0; plnum < cl.splitclients; plnum++)
|
for (plnum = 0; plnum < cl.splitclients; plnum++)
|
||||||
{
|
{
|
||||||
// CL_BaseMove (&independantphysics[plnum], plnum, (msecstouse - independantphysics[plnum].msec), wantfps);
|
// CL_BaseMove (&independantphysics[plnum], plnum, (msecstouse - independantphysics[plnum].msec), wantfps);
|
||||||
|
|
|
@ -1504,7 +1504,7 @@ void CL_CheckServerInfo(void)
|
||||||
cl.ktprogametime = 0;
|
cl.ktprogametime = 0;
|
||||||
|
|
||||||
Cvar_ForceCheatVars(cls.allow_semicheats, cls.allow_cheats);
|
Cvar_ForceCheatVars(cls.allow_semicheats, cls.allow_cheats);
|
||||||
|
Validation_Apply_Ruleset();
|
||||||
|
|
||||||
if (oldallowshaders != cls.allow_shaders)
|
if (oldallowshaders != cls.allow_shaders)
|
||||||
Cache_Flush(); //this will cause all models to be reloaded.
|
Cache_Flush(); //this will cause all models to be reloaded.
|
||||||
|
@ -2774,7 +2774,7 @@ void CL_ServerInfo_f(void)
|
||||||
{
|
{
|
||||||
if (!sv.state && cls.state)
|
if (!sv.state && cls.state)
|
||||||
{
|
{
|
||||||
if (cls.demoplayback)
|
if (cls.demoplayback || cls.protocol != CP_QUAKEWORLD)
|
||||||
{
|
{
|
||||||
Info_Print (cl.serverinfo);
|
Info_Print (cl.serverinfo);
|
||||||
}
|
}
|
||||||
|
@ -3385,10 +3385,10 @@ void Host_Frame (double time)
|
||||||
if (cls.protocol == CP_QUAKE3)
|
if (cls.protocol == CP_QUAKE3)
|
||||||
S_ExtraUpdate();
|
S_ExtraUpdate();
|
||||||
else
|
else
|
||||||
S_Update (r_origin, vpn, vright, vup);
|
S_UpdateListener (r_origin, vpn, vright, vup, false);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
S_Update (vec3_origin, vec3_origin, vec3_origin, vec3_origin);
|
S_UpdateListener (vec3_origin, vec3_origin, vec3_origin, vec3_origin, false);
|
||||||
|
|
||||||
CDAudio_Update();
|
CDAudio_Update();
|
||||||
|
|
||||||
|
@ -3420,6 +3420,8 @@ void Host_Frame (double time)
|
||||||
|
|
||||||
static void simple_crypt(char *buf, int len)
|
static void simple_crypt(char *buf, int len)
|
||||||
{
|
{
|
||||||
|
if (!(*buf & 128))
|
||||||
|
return;
|
||||||
while (len--)
|
while (len--)
|
||||||
*buf++ ^= 0xff;
|
*buf++ ^= 0xff;
|
||||||
}
|
}
|
||||||
|
@ -3626,6 +3628,7 @@ void Host_Init (quakeparms_t *parms)
|
||||||
|
|
||||||
Cvar_ApplyLatches(CVAR_RENDERERLATCH);
|
Cvar_ApplyLatches(CVAR_RENDERERLATCH);
|
||||||
|
|
||||||
|
#ifndef NPQTV
|
||||||
//-1 means 'never set'
|
//-1 means 'never set'
|
||||||
if (qrenderer == -1 && *vid_renderer.string)
|
if (qrenderer == -1 && *vid_renderer.string)
|
||||||
{
|
{
|
||||||
|
@ -3641,6 +3644,7 @@ void Host_Init (quakeparms_t *parms)
|
||||||
|
|
||||||
if (qrenderer == QR_NONE)
|
if (qrenderer == QR_NONE)
|
||||||
Con_Printf("Use the setrenderer command to use a gui\n");
|
Con_Printf("Use the setrenderer command to use a gui\n");
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef VM_UI
|
#ifdef VM_UI
|
||||||
UI_Init();
|
UI_Init();
|
||||||
|
@ -3695,14 +3699,12 @@ to run quit through here before the final handoff to the sys code.
|
||||||
*/
|
*/
|
||||||
void Host_Shutdown(void)
|
void Host_Shutdown(void)
|
||||||
{
|
{
|
||||||
static qboolean isdown = false;
|
if (!host_initialized)
|
||||||
|
|
||||||
if (isdown)
|
|
||||||
{
|
{
|
||||||
Sys_Printf ("recursive shutdown\n");
|
Sys_Printf ("recursive shutdown\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
isdown = true;
|
host_initialized = false;
|
||||||
|
|
||||||
#ifdef VM_UI
|
#ifdef VM_UI
|
||||||
UI_Stop();
|
UI_Stop();
|
||||||
|
@ -3713,6 +3715,7 @@ void Host_Shutdown(void)
|
||||||
CDAudio_Shutdown ();
|
CDAudio_Shutdown ();
|
||||||
S_Shutdown();
|
S_Shutdown();
|
||||||
IN_Shutdown ();
|
IN_Shutdown ();
|
||||||
|
R_ShutdownRenderer();
|
||||||
if (VID_DeInit)
|
if (VID_DeInit)
|
||||||
VID_DeInit();
|
VID_DeInit();
|
||||||
#ifndef CLIENTONLY
|
#ifndef CLIENTONLY
|
||||||
|
@ -3720,11 +3723,16 @@ void Host_Shutdown(void)
|
||||||
#else
|
#else
|
||||||
NET_Shutdown ();
|
NET_Shutdown ();
|
||||||
#endif
|
#endif
|
||||||
|
FS_Shutdown();
|
||||||
|
|
||||||
Cvar_Shutdown();
|
Cvar_Shutdown();
|
||||||
Validation_FlushFileList();
|
Validation_FlushFileList();
|
||||||
|
|
||||||
|
Cmd_Shutdown();
|
||||||
Memory_DeInit();
|
Memory_DeInit();
|
||||||
|
|
||||||
|
memset(&sv, 0, sizeof(sv));
|
||||||
|
memset(&svs, 0, sizeof(svs));
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CLIENTONLY
|
#ifdef CLIENTONLY
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
|
|
||||||
|
#define SS_GENERICQUAKEWORLD 0
|
||||||
#define SS_FTESERVER 1 //hehehe...
|
#define SS_FTESERVER 1 //hehehe...
|
||||||
#define SS_QUAKE2 2 //useful (and cool). Could be blamed for swamping.
|
#define SS_QUAKE2 2 //useful (and cool). Could be blamed for swamping.
|
||||||
#define SS_NETQUAKE 4
|
#define SS_NETQUAKE 4
|
||||||
|
|
|
@ -452,12 +452,10 @@ void CL_DownloadFinished(char *filename, char *tempname)
|
||||||
{
|
{
|
||||||
if (strncmp(tempname,"skins/",6))
|
if (strncmp(tempname,"skins/",6))
|
||||||
{
|
{
|
||||||
FS_CreatePath(filename, FS_GAME);
|
|
||||||
FS_Rename(tempname, filename, FS_GAME);
|
FS_Rename(tempname, filename, FS_GAME);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
FS_CreatePath(filename+6, FS_SKINS);
|
|
||||||
FS_Rename(tempname+6, filename+6, FS_SKINS);
|
FS_Rename(tempname+6, filename+6, FS_SKINS);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -834,6 +832,14 @@ int CL_LoadModels(int stage)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef HLCLIENT
|
||||||
|
if (atstage())
|
||||||
|
{
|
||||||
|
CLHL_LoadClientGame();
|
||||||
|
endstage();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef PEXT_CSQC
|
#ifdef PEXT_CSQC
|
||||||
if (atstage())
|
if (atstage())
|
||||||
{
|
{
|
||||||
|
@ -890,8 +896,12 @@ int CL_LoadModels(int stage)
|
||||||
else
|
else
|
||||||
CSQC_LoadResource(cl.model_name[i], "model");
|
CSQC_LoadResource(cl.model_name[i], "model");
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef Q2CLIENT
|
||||||
cl.model_precache[i] = Mod_ForName (cl.model_name[i], false);
|
if (cls.protocol == CP_QUAKE2 && *cl.model_name[i] == '#')
|
||||||
|
cl.model_precache[i] = NULL;
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
cl.model_precache[i] = Mod_ForName (cl.model_name[i], false);
|
||||||
Hunk_Check();
|
Hunk_Check();
|
||||||
|
|
||||||
S_ExtraUpdate();
|
S_ExtraUpdate();
|
||||||
|
@ -3334,7 +3344,7 @@ void CL_NewTranslation (int slot)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
local = cl.playernum[0];
|
local = cl.playernum[0];
|
||||||
if (cl.teamplay && !strcmp(player->team, cl.players[local].team))
|
if ((cl.teamplay || cls.protocol == CP_NETQUAKE) && !strcmp(player->team, cl.players[local].team))
|
||||||
{
|
{
|
||||||
if (cl_teamtopcolor != ~0)
|
if (cl_teamtopcolor != ~0)
|
||||||
top = cl_teamtopcolor;
|
top = cl_teamtopcolor;
|
||||||
|
@ -4961,6 +4971,18 @@ void CL_ParseServerMessage (void)
|
||||||
case svcfte_pointparticles1:
|
case svcfte_pointparticles1:
|
||||||
CLDP_ParsePointParticles(true);
|
CLDP_ParsePointParticles(true);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case svcfte_cgamepacket:
|
||||||
|
#ifdef HLCLIENT
|
||||||
|
if (CLHL_ParseGamePacket());
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
#ifdef CSQC_DAT
|
||||||
|
if (CSQC_ParseGamePacket());
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
Con_Printf("Unable to parse gamecode packet\n");
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4995,7 +5017,6 @@ void CLQ2_ParseServerMessage (void)
|
||||||
{
|
{
|
||||||
if (msg_badread)
|
if (msg_badread)
|
||||||
{
|
{
|
||||||
SV_UnspawnServer();
|
|
||||||
Host_EndGame ("CLQ2_ParseServerMessage: Bad server message");
|
Host_EndGame ("CLQ2_ParseServerMessage: Bad server message");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -5490,6 +5511,8 @@ void CLNQ_ParseServerMessage (void)
|
||||||
if (cls.state == ca_active)
|
if (cls.state == ca_active)
|
||||||
Skin_Find (&cl.players[i]);
|
Skin_Find (&cl.players[i]);
|
||||||
|
|
||||||
|
if (i == cl.playernum[0])
|
||||||
|
Skin_FlushPlayers();
|
||||||
Sbar_Changed ();
|
Sbar_Changed ();
|
||||||
CL_NewTranslation (i);
|
CL_NewTranslation (i);
|
||||||
}
|
}
|
||||||
|
|
|
@ -715,6 +715,9 @@ void CL_PredictMovePNum (int pnum)
|
||||||
//these are to make svc_viewentity work better
|
//these are to make svc_viewentity work better
|
||||||
float *vel;
|
float *vel;
|
||||||
float *org;
|
float *org;
|
||||||
|
|
||||||
|
cl.nolocalplayer[pnum] = false;
|
||||||
|
|
||||||
#ifdef Q2CLIENT
|
#ifdef Q2CLIENT
|
||||||
if (cls.protocol == CP_QUAKE2)
|
if (cls.protocol == CP_QUAKE2)
|
||||||
{
|
{
|
||||||
|
@ -775,6 +778,7 @@ void CL_PredictMovePNum (int pnum)
|
||||||
{
|
{
|
||||||
if (cl.viewentity[pnum] < cl.maxlerpents)
|
if (cl.viewentity[pnum] < cl.maxlerpents)
|
||||||
{
|
{
|
||||||
|
cl.nolocalplayer[pnum] = true;
|
||||||
// Con_Printf("Using lerped pos\n");
|
// Con_Printf("Using lerped pos\n");
|
||||||
org = cl.lerpents[cl.viewentity[pnum]].origin;
|
org = cl.lerpents[cl.viewentity[pnum]].origin;
|
||||||
vel = vec3_origin;
|
vel = vec3_origin;
|
||||||
|
@ -822,6 +826,7 @@ void CL_PredictMovePNum (int pnum)
|
||||||
//no player states?? put the view on an ent
|
//no player states?? put the view on an ent
|
||||||
if (cl.playernum[pnum] < cl.maxlerpents)
|
if (cl.playernum[pnum] < cl.maxlerpents)
|
||||||
{
|
{
|
||||||
|
cl.nolocalplayer[pnum] = true;
|
||||||
// Con_Printf("Using lerped pos\n");
|
// Con_Printf("Using lerped pos\n");
|
||||||
org = cl.lerpents[cl.playernum[pnum]+1].origin;
|
org = cl.lerpents[cl.playernum[pnum]+1].origin;
|
||||||
vel = vec3_origin;
|
vel = vec3_origin;
|
||||||
|
|
|
@ -1317,6 +1317,12 @@ void SCR_DrawFPS (void)
|
||||||
lastfps = 1/host_frametime;
|
lastfps = 1/host_frametime;
|
||||||
lastframetime = t;
|
lastframetime = t;
|
||||||
break;
|
break;
|
||||||
|
#ifdef RGLQUAKE
|
||||||
|
case 5:
|
||||||
|
if (qrenderer == QR_OPENGL)
|
||||||
|
GLR_FrameTimeGraph((int)(1000.0*host_frametime));
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
if (usemsecs)
|
if (usemsecs)
|
||||||
|
@ -1742,8 +1748,6 @@ int Image_WritePNG (char *filename, int compression, qbyte *pixels, int width, i
|
||||||
#endif
|
#endif
|
||||||
void WriteBMPFile(char *filename, qbyte *in, int width, int height);
|
void WriteBMPFile(char *filename, qbyte *in, int width, int height);
|
||||||
|
|
||||||
void WritePCXfile (char *filename, qbyte *data, int width, int height, int rowbytes, qbyte *palette, qboolean upload); //data is 8bit.
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Find closest color in the palette for named color
|
Find closest color in the palette for named color
|
||||||
*/
|
*/
|
||||||
|
@ -1870,7 +1874,6 @@ SCR_ScreenShot_f
|
||||||
void SCR_ScreenShot_f (void)
|
void SCR_ScreenShot_f (void)
|
||||||
{
|
{
|
||||||
char pcxname[80];
|
char pcxname[80];
|
||||||
char checkname[MAX_OSPATH];
|
|
||||||
int i;
|
int i;
|
||||||
vfsfile_t *vfs;
|
vfsfile_t *vfs;
|
||||||
|
|
||||||
|
@ -1903,7 +1906,7 @@ void SCR_ScreenShot_f (void)
|
||||||
pcxname[17] = (i%1000)/100 + '0';
|
pcxname[17] = (i%1000)/100 + '0';
|
||||||
pcxname[18] = (i%100)/10 + '0';
|
pcxname[18] = (i%100)/10 + '0';
|
||||||
pcxname[19] = (i%10) + '0';
|
pcxname[19] = (i%10) + '0';
|
||||||
sprintf (checkname, "%s/%s", com_gamedir, pcxname);
|
|
||||||
if (!(vfs = FS_OpenVFS(pcxname, "rb", FS_GAMEONLY)))
|
if (!(vfs = FS_OpenVFS(pcxname, "rb", FS_GAMEONLY)))
|
||||||
break; // file doesn't exist
|
break; // file doesn't exist
|
||||||
VFS_CLOSE(vfs);
|
VFS_CLOSE(vfs);
|
||||||
|
|
|
@ -618,7 +618,7 @@ void UI_RegisterFont(char *fontName, int pointSize, fontInfo_t *font)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define VALIDATEPOINTER(o,l) if ((int)o + l >= mask || VM_POINTER(o) < offset) SV_Error("Call to ui trap %i passes invalid pointer\n", fn); //out of bounds.
|
#define VALIDATEPOINTER(o,l) if ((int)o + l >= mask || VM_POINTER(o) < offset) Host_EndGame("Call to ui trap %i passes invalid pointer\n", fn); //out of bounds.
|
||||||
|
|
||||||
#ifndef _DEBUG
|
#ifndef _DEBUG
|
||||||
static
|
static
|
||||||
|
|
1373
engine/client/clhl_game.c
Normal file
1373
engine/client/clhl_game.c
Normal file
File diff suppressed because it is too large
Load diff
|
@ -552,6 +552,7 @@ typedef struct
|
||||||
|
|
||||||
char levelname[40]; // for display on solo scoreboard
|
char levelname[40]; // for display on solo scoreboard
|
||||||
int playernum[MAX_SPLITS];
|
int playernum[MAX_SPLITS];
|
||||||
|
qboolean nolocalplayer[MAX_SPLITS];
|
||||||
int splitclients; //we are running this many clients split screen.
|
int splitclients; //we are running this many clients split screen.
|
||||||
|
|
||||||
// refresh related state
|
// refresh related state
|
||||||
|
@ -804,6 +805,28 @@ void CL_QTVDemos_f (void);
|
||||||
void CL_DemoJump_f(void);
|
void CL_DemoJump_f(void);
|
||||||
void CL_ProgressDemoTime(void);
|
void CL_ProgressDemoTime(void);
|
||||||
void CL_TimeDemo_f (void);
|
void CL_TimeDemo_f (void);
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
QTVCT_NONE,
|
||||||
|
QTVCT_STREAM,
|
||||||
|
QTVCT_CONNECT,
|
||||||
|
QTVCT_JOIN,
|
||||||
|
QTVCT_OBSERVE,
|
||||||
|
} connectiontype;
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
QTVCT_NETQUAKE,
|
||||||
|
QTVCT_QUAKEWORLD,
|
||||||
|
QTVCT_QUAKE2,
|
||||||
|
QTVCT_QUAKE3
|
||||||
|
} protocol;
|
||||||
|
char server[256];
|
||||||
|
char splashscreen[256];
|
||||||
|
//char *datafiles;
|
||||||
|
} qtvfile_t;
|
||||||
|
void CL_ParseQTVFile(vfsfile_t *f, const char *fname, qtvfile_t *result);
|
||||||
|
|
||||||
//
|
//
|
||||||
// cl_parse.c
|
// cl_parse.c
|
||||||
|
|
|
@ -464,8 +464,6 @@ qboolean CLQ3_SystemInfoChanged(char *str)
|
||||||
Info_SetValueForStarKey (svs.info, "*gamedir", value, MAX_SERVERINFO_STRING);
|
Info_SetValueForStarKey (svs.info, "*gamedir", value, MAX_SERVERINFO_STRING);
|
||||||
#endif
|
#endif
|
||||||
COM_FlushFSCache();
|
COM_FlushFSCache();
|
||||||
|
|
||||||
Shader_Init();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (usingpure)
|
if (usingpure)
|
||||||
|
@ -607,7 +605,7 @@ void CLQ3_ParseGameState(void)
|
||||||
{
|
{
|
||||||
char buffer[2048];
|
char buffer[2048];
|
||||||
strcpy(buffer, va("cp %i ", cl.servercount));
|
strcpy(buffer, va("cp %i ", cl.servercount));
|
||||||
FS_GenerateClientPacksList(buffer, sizeof(buffer), ccs.fs_key);
|
FSQ3_GenerateClientPacksList(buffer, sizeof(buffer), ccs.fs_key);
|
||||||
CLQ3_SendClientCommand(buffer);
|
CLQ3_SendClientCommand(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -894,6 +894,9 @@ The input line scrolls horizontally if typing goes beyond the right edge
|
||||||
*/
|
*/
|
||||||
void Con_DrawInput (void)
|
void Con_DrawInput (void)
|
||||||
{
|
{
|
||||||
|
#ifdef _WIN32
|
||||||
|
extern qboolean ActiveApp;
|
||||||
|
#endif
|
||||||
int y;
|
int y;
|
||||||
int i;
|
int i;
|
||||||
int p;
|
int p;
|
||||||
|
@ -999,6 +1002,9 @@ void Con_DrawInput (void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
if (ActiveApp)
|
||||||
|
#endif
|
||||||
if (((int)(realtime*con_cursorspeed)&1))
|
if (((int)(realtime*con_cursorspeed)&1))
|
||||||
{
|
{
|
||||||
maskedtext[key_linepos] = 11|CON_WHITEMASK; //make it blink
|
maskedtext[key_linepos] = 11|CON_WHITEMASK; //make it blink
|
||||||
|
|
|
@ -584,7 +584,7 @@ void VARGS readpngdata(png_structp png_ptr,png_bytep data,png_size_t len)
|
||||||
}
|
}
|
||||||
|
|
||||||
qbyte *png_rgba;
|
qbyte *png_rgba;
|
||||||
qbyte *ReadPNGFile(qbyte *buf, int length, int *width, int *height, char *fname)
|
qbyte *ReadPNGFile(qbyte *buf, int length, int *width, int *height, const char *fname)
|
||||||
{
|
{
|
||||||
qbyte header[8], **rowpointers = NULL, *data = NULL;
|
qbyte header[8], **rowpointers = NULL, *data = NULL;
|
||||||
png_structp png;
|
png_structp png;
|
||||||
|
@ -702,12 +702,10 @@ int Image_WritePNG (char *filename, int compression, qbyte *pixels, int width, i
|
||||||
png_structp png_ptr;
|
png_structp png_ptr;
|
||||||
png_infop info_ptr;
|
png_infop info_ptr;
|
||||||
png_byte **row_pointers;
|
png_byte **row_pointers;
|
||||||
snprintf (name, sizeof(name)-1, "%s/%s", com_gamedir, filename);
|
|
||||||
|
|
||||||
if (Sys_PathProtection(filename) )
|
if (!FS_NativePath(filename, FS_GAMEONLY, name, sizeof(name)))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
|
||||||
if (!(fp = fopen (name, "wb")))
|
if (!(fp = fopen (name, "wb")))
|
||||||
{
|
{
|
||||||
COM_CreatePath (name);
|
COM_CreatePath (name);
|
||||||
|
@ -1146,7 +1144,7 @@ void screenshotJPEG(char *filename, int compression, qbyte *screendata, int scre
|
||||||
WritePCXfile
|
WritePCXfile
|
||||||
==============
|
==============
|
||||||
*/
|
*/
|
||||||
void WritePCXfile (char *filename, qbyte *data, int width, int height,
|
void WritePCXfile (const char *filename, qbyte *data, int width, int height,
|
||||||
int rowbytes, qbyte *palette, qboolean upload) //data is 8bit.
|
int rowbytes, qbyte *palette, qboolean upload) //data is 8bit.
|
||||||
{
|
{
|
||||||
int i, j, length;
|
int i, j, length;
|
||||||
|
|
|
@ -401,7 +401,7 @@ void IN_UpdateClipCursor (void)
|
||||||
IN_ShowMouse
|
IN_ShowMouse
|
||||||
===========
|
===========
|
||||||
*/
|
*/
|
||||||
void IN_ShowMouse (void)
|
static void IN_ShowMouse (void)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (!mouseshowtoggle)
|
if (!mouseshowtoggle)
|
||||||
|
@ -417,7 +417,7 @@ void IN_ShowMouse (void)
|
||||||
IN_HideMouse
|
IN_HideMouse
|
||||||
===========
|
===========
|
||||||
*/
|
*/
|
||||||
void IN_HideMouse (void)
|
static void IN_HideMouse (void)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (mouseshowtoggle)
|
if (mouseshowtoggle)
|
||||||
|
@ -433,12 +433,12 @@ void IN_HideMouse (void)
|
||||||
IN_ActivateMouse
|
IN_ActivateMouse
|
||||||
===========
|
===========
|
||||||
*/
|
*/
|
||||||
void IN_ActivateMouse (void)
|
static void IN_ActivateMouse (void)
|
||||||
{
|
{
|
||||||
|
|
||||||
mouseactivatetoggle = true;
|
mouseactivatetoggle = true;
|
||||||
|
|
||||||
if (mouseinitialized)
|
if (mouseinitialized && !mouseactive)
|
||||||
{
|
{
|
||||||
#ifdef AVAIL_DINPUT
|
#ifdef AVAIL_DINPUT
|
||||||
#if (DIRECTINPUT_VERSION >= DINPUT_VERSION_DX7)
|
#if (DIRECTINPUT_VERSION >= DINPUT_VERSION_DX7)
|
||||||
|
@ -502,31 +502,17 @@ void IN_ActivateMouse (void)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
===========
|
|
||||||
IN_SetQuakeMouseState
|
|
||||||
===========
|
|
||||||
*/
|
|
||||||
void IN_SetQuakeMouseState (void)
|
|
||||||
{
|
|
||||||
if (mouseactivatetoggle)
|
|
||||||
IN_ActivateMouse ();
|
|
||||||
else
|
|
||||||
IN_DeactivateMouse();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
===========
|
===========
|
||||||
IN_DeactivateMouse
|
IN_DeactivateMouse
|
||||||
===========
|
===========
|
||||||
*/
|
*/
|
||||||
void IN_DeactivateMouse (void)
|
static void IN_DeactivateMouse (void)
|
||||||
{
|
{
|
||||||
|
|
||||||
mouseactivatetoggle = false;
|
mouseactivatetoggle = false;
|
||||||
|
|
||||||
if (mouseinitialized)
|
if (mouseinitialized && mouseactive)
|
||||||
{
|
{
|
||||||
#ifdef AVAIL_DINPUT
|
#ifdef AVAIL_DINPUT
|
||||||
#if (DIRECTINPUT_VERSION >= DINPUT_VERSION_DX7)
|
#if (DIRECTINPUT_VERSION >= DINPUT_VERSION_DX7)
|
||||||
|
@ -579,6 +565,18 @@ void IN_DeactivateMouse (void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
===========
|
||||||
|
IN_SetQuakeMouseState
|
||||||
|
===========
|
||||||
|
*/
|
||||||
|
void IN_SetQuakeMouseState (void)
|
||||||
|
{
|
||||||
|
if (mouseactivatetoggle)
|
||||||
|
IN_ActivateMouse ();
|
||||||
|
else
|
||||||
|
IN_DeactivateMouse();
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
===========
|
===========
|
||||||
|
@ -599,6 +597,60 @@ void IN_RestoreOriginalMouseState (void)
|
||||||
ShowCursor (FALSE);
|
ShowCursor (FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void IN_UpdateGrabs(int fullscreen, int activeapp)
|
||||||
|
{
|
||||||
|
int grabmouse;
|
||||||
|
|
||||||
|
if (fullscreen)
|
||||||
|
grabmouse = true;
|
||||||
|
else if (activeapp && _windowed_mouse.value)
|
||||||
|
{
|
||||||
|
if (!Key_MouseShouldBeFree())
|
||||||
|
grabmouse = true;
|
||||||
|
else
|
||||||
|
grabmouse = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
grabmouse = false;
|
||||||
|
|
||||||
|
//visiblity
|
||||||
|
if (grabmouse)
|
||||||
|
IN_HideMouse();
|
||||||
|
else
|
||||||
|
IN_ShowMouse();
|
||||||
|
|
||||||
|
#ifdef HLCLIENT
|
||||||
|
//halflife gamecode does its own mouse control... yes this is vile.
|
||||||
|
if (grabmouse)
|
||||||
|
{
|
||||||
|
if (CLHL_GamecodeDoesMouse())
|
||||||
|
grabmouse = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (grabmouse == 2)
|
||||||
|
{
|
||||||
|
IN_DeactivateMouse();
|
||||||
|
CLHL_SetMouseActive(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
CLHL_SetMouseActive(false);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (grabmouse)
|
||||||
|
IN_ActivateMouse();
|
||||||
|
else
|
||||||
|
IN_DeactivateMouse();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef AVAIL_DINPUT
|
#ifdef AVAIL_DINPUT
|
||||||
BOOL CALLBACK IN_EnumerateDevices(LPCDIDEVICEINSTANCE inst, LPVOID parm)
|
BOOL CALLBACK IN_EnumerateDevices(LPCDIDEVICEINSTANCE inst, LPVOID parm)
|
||||||
{
|
{
|
||||||
|
@ -1315,7 +1367,15 @@ void IN_MouseEvent (int mstate)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if ((mouseactive || (key_dest != key_game)) && !dinput)
|
if (dinput)
|
||||||
|
return;
|
||||||
|
|
||||||
|
#ifdef HLCLIENT
|
||||||
|
if (CLHL_MouseEvent(mstate))
|
||||||
|
return;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (mouseactive || (key_dest != key_game))
|
||||||
{
|
{
|
||||||
// perform button actions
|
// perform button actions
|
||||||
for (i=0 ; i<sysmouse.numbuttons ; i++)
|
for (i=0 ; i<sysmouse.numbuttons ; i++)
|
||||||
|
@ -1367,18 +1427,21 @@ static void ProcessMouse(mouse_t *mouse, usercmd_t *cmd, int pnum)
|
||||||
if (m_forcewheel.value)
|
if (m_forcewheel.value)
|
||||||
{
|
{
|
||||||
mfwt = (int)m_forcewheel_threshold.value;
|
mfwt = (int)m_forcewheel_threshold.value;
|
||||||
while(mouse->wheeldelta <= -mfwt)
|
if (mfwt)
|
||||||
{
|
{
|
||||||
Key_Event (K_MWHEELUP, true);
|
while(mouse->wheeldelta <= -mfwt)
|
||||||
Key_Event (K_MWHEELUP, false);
|
{
|
||||||
mouse->wheeldelta += mfwt;
|
Key_Event (K_MWHEELUP, true);
|
||||||
}
|
Key_Event (K_MWHEELUP, false);
|
||||||
|
mouse->wheeldelta += mfwt;
|
||||||
|
}
|
||||||
|
|
||||||
while(mouse->wheeldelta >= mfwt)
|
while(mouse->wheeldelta >= mfwt)
|
||||||
{
|
{
|
||||||
Key_Event (K_MWHEELDOWN, true);
|
Key_Event (K_MWHEELDOWN, true);
|
||||||
Key_Event (K_MWHEELDOWN, false);
|
Key_Event (K_MWHEELDOWN, false);
|
||||||
mouse->wheeldelta -= mfwt;
|
mouse->wheeldelta -= mfwt;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_forcewheel.value < 2)
|
if (m_forcewheel.value < 2)
|
||||||
|
@ -1460,10 +1523,6 @@ static void ProcessMouse(mouse_t *mouse, usercmd_t *cmd, int pnum)
|
||||||
|
|
||||||
if (!cmd)
|
if (!cmd)
|
||||||
{
|
{
|
||||||
if (mx || my)
|
|
||||||
{
|
|
||||||
SetCursorPos (window_center_x, window_center_y);
|
|
||||||
}
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -402,6 +402,7 @@ void Con_ExecuteLine(console_t *con, char *line)
|
||||||
Cbuf_AddText ("\n", RESTRICT_LOCAL);
|
Cbuf_AddText ("\n", RESTRICT_LOCAL);
|
||||||
if (!waschat || con_echochat.value)
|
if (!waschat || con_echochat.value)
|
||||||
Con_Printf ("]%s\n",line);
|
Con_Printf ("]%s\n",line);
|
||||||
|
|
||||||
if (cls.state == ca_disconnected)
|
if (cls.state == ca_disconnected)
|
||||||
SCR_UpdateScreen (); // force an update, because the command
|
SCR_UpdateScreen (); // force an update, because the command
|
||||||
// may take some time
|
// may take some time
|
||||||
|
@ -1372,7 +1373,7 @@ qboolean Key_MouseShouldBeFree(void)
|
||||||
|
|
||||||
if (key_dest == key_menu)
|
if (key_dest == key_menu)
|
||||||
{
|
{
|
||||||
if (m_state == m_complex || m_state == m_plugin)
|
if (m_state == m_complex || m_state == m_plugin || m_state == m_menu_dat)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (key_dest == key_console)
|
if (key_dest == key_console)
|
||||||
|
|
|
@ -1643,17 +1643,24 @@ void M_Menu_Main_f (void)
|
||||||
if (!p)
|
if (!p)
|
||||||
return;
|
return;
|
||||||
MC_AddPicture(mainm, 0, 173, "pics/m_main_logo");
|
MC_AddPicture(mainm, 0, 173, "pics/m_main_logo");
|
||||||
|
#ifndef CLIENTONLY
|
||||||
MC_AddSelectablePicture(mainm, 68, 13, "pics/m_main_game");
|
MC_AddSelectablePicture(mainm, 68, 13, "pics/m_main_game");
|
||||||
|
#endif
|
||||||
MC_AddSelectablePicture(mainm, 68, 53, "pics/m_main_multiplayer");
|
MC_AddSelectablePicture(mainm, 68, 53, "pics/m_main_multiplayer");
|
||||||
MC_AddSelectablePicture(mainm, 68, 93, "pics/m_main_options");
|
MC_AddSelectablePicture(mainm, 68, 93, "pics/m_main_options");
|
||||||
MC_AddSelectablePicture(mainm, 68, 133, "pics/m_main_video");
|
MC_AddSelectablePicture(mainm, 68, 133, "pics/m_main_video");
|
||||||
MC_AddSelectablePicture(mainm, 68, 173, "pics/m_main_quit");
|
MC_AddSelectablePicture(mainm, 68, 173, "pics/m_main_quit");
|
||||||
|
|
||||||
|
#ifndef CLIENTONLY
|
||||||
b = MC_AddConsoleCommand (mainm, 68, 13, "", "menu_single\n");
|
b = MC_AddConsoleCommand (mainm, 68, 13, "", "menu_single\n");
|
||||||
mainm->selecteditem = (menuoption_t *)b;
|
mainm->selecteditem = (menuoption_t *)b;
|
||||||
b->common.width = 12*20;
|
b->common.width = 12*20;
|
||||||
b->common.height = 20;
|
b->common.height = 20;
|
||||||
|
#endif
|
||||||
b = MC_AddConsoleCommand (mainm, 68, 53, "", "menu_multi\n");
|
b = MC_AddConsoleCommand (mainm, 68, 53, "", "menu_multi\n");
|
||||||
|
#ifdef CLIENTONLY
|
||||||
|
mainm->selecteditem = (menuoption_t *)b;
|
||||||
|
#endif
|
||||||
b->common.width = 12*20;
|
b->common.width = 12*20;
|
||||||
b->common.height = 20;
|
b->common.height = 20;
|
||||||
b = MC_AddConsoleCommand (mainm, 68, 93, "", "menu_options\n");
|
b = MC_AddConsoleCommand (mainm, 68, 93, "", "menu_options\n");
|
||||||
|
@ -1666,7 +1673,7 @@ void M_Menu_Main_f (void)
|
||||||
b->common.width = 12*20;
|
b->common.width = 12*20;
|
||||||
b->common.height = 20;
|
b->common.height = 20;
|
||||||
|
|
||||||
mainm->cursoritem = (menuoption_t *)MC_AddCursor(mainm, 42, 13);
|
mainm->cursoritem = (menuoption_t *)MC_AddCursor(mainm, 42, mainm->selecteditem->common.posy);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -120,7 +120,6 @@ void WinAmp_Think(void)
|
||||||
#endif
|
#endif
|
||||||
void Media_Seek (float time)
|
void Media_Seek (float time)
|
||||||
{
|
{
|
||||||
soundcardinfo_t *sc;
|
|
||||||
#ifdef WINAMP
|
#ifdef WINAMP
|
||||||
if (media_hijackwinamp.value)
|
if (media_hijackwinamp.value)
|
||||||
{
|
{
|
||||||
|
@ -135,18 +134,7 @@ void Media_Seek (float time)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
for (sc = sndcardinfo; sc; sc=sc->next)
|
S_Music_Seek(time);
|
||||||
{
|
|
||||||
sc->channel[NUM_AMBIENTS].pos += sc->sn.speed*time;
|
|
||||||
sc->channel[NUM_AMBIENTS].end += sc->sn.speed*time;
|
|
||||||
|
|
||||||
if (sc->channel[NUM_AMBIENTS].pos < 0)
|
|
||||||
{
|
|
||||||
sc->channel[NUM_AMBIENTS].end -= sc->channel[NUM_AMBIENTS].pos;
|
|
||||||
sc->channel[NUM_AMBIENTS].pos=0;
|
|
||||||
}
|
|
||||||
//if we seek over the end, ignore it. The sound playing code will spot that.
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Media_FForward_f(void)
|
void Media_FForward_f(void)
|
||||||
|
@ -226,23 +214,7 @@ qboolean Media_EvaluateNextTrack(void)
|
||||||
//flushes music channel on all soundcards, and the tracks that arn't decoded yet.
|
//flushes music channel on all soundcards, and the tracks that arn't decoded yet.
|
||||||
void Media_Clear (void)
|
void Media_Clear (void)
|
||||||
{
|
{
|
||||||
sfx_t *s;
|
S_Music_Clear(NULL);
|
||||||
soundcardinfo_t *sc;
|
|
||||||
for (sc = sndcardinfo; sc; sc=sc->next)
|
|
||||||
{
|
|
||||||
sc->channel[NUM_AMBIENTS].end = 0;
|
|
||||||
s = sc->channel[NUM_AMBIENTS].sfx;
|
|
||||||
sc->channel[NUM_AMBIENTS].sfx = NULL;
|
|
||||||
|
|
||||||
if (s)
|
|
||||||
if (s->decoder)
|
|
||||||
if (!S_IsPlayingSomewhere(s)) //if we aint playing it elsewhere, free it compleatly.
|
|
||||||
{
|
|
||||||
s->decoder->abort(s);
|
|
||||||
if (s->cache.data)
|
|
||||||
Cache_Free(&s->cache);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
qboolean fakecdactive;
|
qboolean fakecdactive;
|
||||||
|
@ -250,6 +222,12 @@ void Media_FakeTrack(int i, qboolean loop)
|
||||||
{
|
{
|
||||||
char trackname[512];
|
char trackname[512];
|
||||||
|
|
||||||
|
if (i > 999 || i < 0)
|
||||||
|
{
|
||||||
|
fakecdactive = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
sprintf(trackname, "sound/cdtracks/track%03i.ogg", i);
|
sprintf(trackname, "sound/cdtracks/track%03i.ogg", i);
|
||||||
if (COM_FCheckExists(trackname))
|
if (COM_FCheckExists(trackname))
|
||||||
{
|
{
|
||||||
|
@ -259,6 +237,8 @@ void Media_FakeTrack(int i, qboolean loop)
|
||||||
fakecdactive = true;
|
fakecdactive = true;
|
||||||
media_playing = true;
|
media_playing = true;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
fakecdactive = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
//actually, this func just flushes and states that it should be playing. the ambientsound func actually changes the track.
|
//actually, this func just flushes and states that it should be playing. the ambientsound func actually changes the track.
|
||||||
|
@ -414,11 +394,11 @@ void M_Media_Draw (void)
|
||||||
char compleatenamepath[MAX_OSPATH];
|
char compleatenamepath[MAX_OSPATH];
|
||||||
char compleatenamename[MAX_OSPATH];
|
char compleatenamename[MAX_OSPATH];
|
||||||
qboolean compleatenamemultiple;
|
qboolean compleatenamemultiple;
|
||||||
int Com_CompleatenameCallback(char *name, int size, void *data)
|
int Com_CompleatenameCallback(const char *name, int size, void *data)
|
||||||
{
|
{
|
||||||
if (*compleatenamename)
|
if (*compleatenamename)
|
||||||
compleatenamemultiple = true;
|
compleatenamemultiple = true;
|
||||||
strcpy(compleatenamename, name);
|
Q_strncpyz(compleatenamename, name, sizeof(compleatenamename));
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -727,7 +707,7 @@ void Media_LoadTrackNames (char *listname)
|
||||||
}
|
}
|
||||||
|
|
||||||
//safeprints only.
|
//safeprints only.
|
||||||
char *Media_NextTrack(void)
|
char *Media_NextTrack(int musicchannelnum)
|
||||||
{
|
{
|
||||||
#ifdef WINAMP
|
#ifdef WINAMP
|
||||||
if (media_hijackwinamp.value)
|
if (media_hijackwinamp.value)
|
||||||
|
@ -885,15 +865,6 @@ struct cin_s {
|
||||||
roq_info *roqfilm;
|
roq_info *roqfilm;
|
||||||
} roq;
|
} roq;
|
||||||
|
|
||||||
sfxcache_t *moviesoundbuffer;
|
|
||||||
sfx_t mediaaudio;
|
|
||||||
/* = {
|
|
||||||
"movieaudio",
|
|
||||||
{NULL, true},
|
|
||||||
NULL
|
|
||||||
};
|
|
||||||
*/
|
|
||||||
|
|
||||||
float filmstarttime;
|
float filmstarttime;
|
||||||
float nextframetime;
|
float nextframetime;
|
||||||
float filmlasttime;
|
float filmlasttime;
|
||||||
|
@ -1173,7 +1144,7 @@ qboolean Media_Roq_DecodeFrame (cin_t *cin, qboolean nosound)
|
||||||
cin->outdata = cin->framedata;
|
cin->outdata = cin->framedata;
|
||||||
|
|
||||||
if (!nosound)
|
if (!nosound)
|
||||||
if (cin->roq.roqfilm->audio_channels && sndcardinfo && cin->roq.roqfilm->aud_pos < cin->roq.roqfilm->vid_pos)
|
if (cin->roq.roqfilm->audio_channels && S_HaveOutput() && cin->roq.roqfilm->aud_pos < cin->roq.roqfilm->vid_pos)
|
||||||
if (roq_read_audio(cin->roq.roqfilm)>0)
|
if (roq_read_audio(cin->roq.roqfilm)>0)
|
||||||
{
|
{
|
||||||
/* FILE *f;
|
/* FILE *f;
|
||||||
|
@ -1260,10 +1231,6 @@ cin_t *Media_Static_TryLoad(char *name)
|
||||||
|
|
||||||
char fullname[MAX_QPATH];
|
char fullname[MAX_QPATH];
|
||||||
qbyte *file;
|
qbyte *file;
|
||||||
qbyte *ReadPCXFile(qbyte *buf, int length, int *width, int *height);
|
|
||||||
qbyte *ReadTargaFile(qbyte *buf, int length, int *width, int *height, int asgrey);
|
|
||||||
qbyte *ReadJPEGFile(qbyte *infile, int length, int *width, int *height);
|
|
||||||
qbyte *ReadPNGFile(qbyte *buf, int length, int *width, int *height, char *fname);
|
|
||||||
|
|
||||||
sprintf(fullname, "%s", name);
|
sprintf(fullname, "%s", name);
|
||||||
file = COM_LoadMallocFile(fullname); //read file
|
file = COM_LoadMallocFile(fullname); //read file
|
||||||
|
@ -1563,6 +1530,7 @@ void Media_Gecko_ChangeStream (struct cin_s *cin, char *streamname)
|
||||||
|
|
||||||
cin_t *Media_Gecko_TryLoad(char *name)
|
cin_t *Media_Gecko_TryLoad(char *name)
|
||||||
{
|
{
|
||||||
|
char xulprofiledir[MAX_OSPATH];
|
||||||
cin_t *cin;
|
cin_t *cin;
|
||||||
|
|
||||||
if (!strncmp(name, "http://", 7))
|
if (!strncmp(name, "http://", 7))
|
||||||
|
@ -1585,7 +1553,8 @@ cin_t *Media_Gecko_TryLoad(char *name)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
posgk_embedding_options_add_search_path(opts, "./xulrunner/");
|
posgk_embedding_options_add_search_path(opts, "./xulrunner/");
|
||||||
posgk_embedding_options_set_profile_dir(opts, va("%s/xulrunner_profile/", com_gamedir), 0);
|
if (FS_NativePath("xulrunner_profile/", FS_GAMEONLY, xulprofiledir, sizeof(xulprofiledir));
|
||||||
|
posgk_embedding_options_set_profile_dir(opts, xulprofiledir, 0);
|
||||||
|
|
||||||
gecko_embedding = posgk_embedding_create2(OSGK_API_VERSION, opts, &result);
|
gecko_embedding = posgk_embedding_create2(OSGK_API_VERSION, opts, &result);
|
||||||
posgk_release(&opts->baseobj);
|
posgk_release(&opts->baseobj);
|
||||||
|
@ -1636,23 +1605,9 @@ qboolean Media_PlayingFullScreen(void)
|
||||||
|
|
||||||
void Media_ShutdownCin(cin_t *cin)
|
void Media_ShutdownCin(cin_t *cin)
|
||||||
{
|
{
|
||||||
soundcardinfo_t *sc;
|
|
||||||
sfx_t *s;
|
|
||||||
|
|
||||||
if (!cin)
|
if (!cin)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
for (sc = sndcardinfo; sc; sc=sc->next)
|
|
||||||
{
|
|
||||||
s = sc->channel[NUM_AMBIENTS].sfx;
|
|
||||||
if (s && s == &cin->mediaaudio)
|
|
||||||
{
|
|
||||||
sc->channel[NUM_AMBIENTS].pos = 0;
|
|
||||||
sc->channel[NUM_AMBIENTS].end = 0;
|
|
||||||
sc->channel[NUM_AMBIENTS].sfx = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cin->shutdown)
|
if (cin->shutdown)
|
||||||
cin->shutdown(cin);
|
cin->shutdown(cin);
|
||||||
|
|
||||||
|
|
|
@ -112,6 +112,7 @@ typedef struct {
|
||||||
menuedit_t *nameedit;
|
menuedit_t *nameedit;
|
||||||
menuedit_t *teamedit;
|
menuedit_t *teamedit;
|
||||||
menuedit_t *skinedit;
|
menuedit_t *skinedit;
|
||||||
|
menucombo_t *modeledit;
|
||||||
int topcolour;
|
int topcolour;
|
||||||
int lowercolour;
|
int lowercolour;
|
||||||
|
|
||||||
|
@ -175,6 +176,93 @@ qboolean SetupMenuColour (union menuoption_s *option,struct menu_s *menu, int ke
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
char **names;
|
||||||
|
int entries;
|
||||||
|
int match;
|
||||||
|
} q2skinsearch_t;
|
||||||
|
|
||||||
|
int q2skin_enumerate(const char *name, int fsize, void *parm)
|
||||||
|
{
|
||||||
|
char blah[MAX_QPATH];
|
||||||
|
q2skinsearch_t *s = parm;
|
||||||
|
|
||||||
|
COM_StripExtension(name+8, blah, sizeof(blah));
|
||||||
|
if (strlen(blah) < 2)
|
||||||
|
return false; //this should never happen
|
||||||
|
blah[strlen(blah)-2] = 0;
|
||||||
|
|
||||||
|
s->names = BZ_Realloc(s->names, ((s->entries+64)&~63) * sizeof(char*));
|
||||||
|
s->names[s->entries] = BZ_Malloc(strlen(blah)+1);
|
||||||
|
strcpy(s->names[s->entries], blah);
|
||||||
|
|
||||||
|
if (!strcmp(blah, skin.string))
|
||||||
|
s->match = s->entries;
|
||||||
|
|
||||||
|
s->entries++;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
void q2skin_destroy(q2skinsearch_t *s)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < s->entries; i++)
|
||||||
|
{
|
||||||
|
BZ_Free(s->names[i]);
|
||||||
|
}
|
||||||
|
BZ_Free(s);
|
||||||
|
}
|
||||||
|
|
||||||
|
qboolean MSetupQ2_ChangeSkin (struct menucustom_s *option,struct menu_s *menu, int key)
|
||||||
|
{
|
||||||
|
setupmenu_t *info = menu->data;
|
||||||
|
q2skinsearch_t *s = Z_Malloc(sizeof(*s));
|
||||||
|
COM_EnumerateFiles(va("players/%s/*_i.*", info->modeledit->values[info->modeledit->selectedoption]), q2skin_enumerate, s);
|
||||||
|
if (key == K_ENTER || key == K_RIGHTARROW)
|
||||||
|
{
|
||||||
|
s->match ++;
|
||||||
|
if (s->match>=s->entries)
|
||||||
|
s->match=0;
|
||||||
|
}
|
||||||
|
else if (key == K_LEFTARROW)
|
||||||
|
{
|
||||||
|
s->match --;
|
||||||
|
if (s->match<=0)
|
||||||
|
s->match=s->entries-1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
q2skin_destroy(s);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (s->entries)
|
||||||
|
Cvar_Set(&skin, s->names[s->match]);
|
||||||
|
S_LocalSound ("misc/menu2.wav");
|
||||||
|
q2skin_destroy(s);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
void MSetupQ2_TransDraw (int x, int y, menucustom_t *option, menu_t *menu)
|
||||||
|
{
|
||||||
|
setupmenu_t *info = menu->data;
|
||||||
|
mpic_t *p;
|
||||||
|
|
||||||
|
|
||||||
|
p = Draw_SafeCachePic (va("players/%s_i", skin.string));
|
||||||
|
if (!p)
|
||||||
|
{
|
||||||
|
q2skinsearch_t *s = Z_Malloc(sizeof(*s));
|
||||||
|
COM_EnumerateFiles(va("players/%s/*_i.*", info->modeledit->values[info->modeledit->selectedoption]), q2skin_enumerate, s);
|
||||||
|
if (s->entries)
|
||||||
|
Cvar_Set(&skin, s->names[rand()%s->entries]);
|
||||||
|
q2skin_destroy(s);
|
||||||
|
|
||||||
|
p = Draw_SafeCachePic (va("players/%s_i", skin.string));
|
||||||
|
}
|
||||||
|
if (p)
|
||||||
|
Draw_TransPic (x-12, y-8, p);
|
||||||
|
}
|
||||||
|
|
||||||
void MSetup_TransDraw (int x, int y, menucustom_t *option, menu_t *menu)
|
void MSetup_TransDraw (int x, int y, menucustom_t *option, menu_t *menu)
|
||||||
{
|
{
|
||||||
extern qbyte translationTable[256];
|
extern qbyte translationTable[256];
|
||||||
|
@ -209,9 +297,72 @@ void MSetup_TransDraw (int x, int y, menucustom_t *option, menu_t *menu)
|
||||||
|
|
||||||
void M_Menu_Setup_f (void)
|
void M_Menu_Setup_f (void)
|
||||||
{
|
{
|
||||||
|
int mgt;
|
||||||
setupmenu_t *info;
|
setupmenu_t *info;
|
||||||
menu_t *menu;
|
menu_t *menu;
|
||||||
|
|
||||||
|
mgt = M_GameType();
|
||||||
|
if (mgt == MGT_QUAKE2) //quake2 main menu.
|
||||||
|
{
|
||||||
|
if (Draw_SafeCachePic("pics/m_banner_plauer_setup"))
|
||||||
|
{
|
||||||
|
char *modeloptions[] =
|
||||||
|
{
|
||||||
|
"male",
|
||||||
|
"female",
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
mpic_t *p;
|
||||||
|
menucustom_t *cu;
|
||||||
|
m_state = m_complex;
|
||||||
|
key_dest = key_menu;
|
||||||
|
|
||||||
|
menu = M_CreateMenu(sizeof(setupmenu_t));
|
||||||
|
info = menu->data;
|
||||||
|
// menu->key = MC_Main_Key;
|
||||||
|
|
||||||
|
MC_AddPicture(menu, 0, 4, "pics/m_main_plaque");
|
||||||
|
p = Draw_SafeCachePic("pics/m_main_logo");
|
||||||
|
if (!p)
|
||||||
|
return;
|
||||||
|
MC_AddPicture(menu, 0, 173, "pics/m_main_logo");
|
||||||
|
|
||||||
|
menu->selecteditem = (menuoption_t*)
|
||||||
|
(info->nameedit = MC_AddEdit(menu, 64, 40, "Your name", name.string));
|
||||||
|
(info->modeledit = MC_AddCvarCombo(menu, 64, 72, "model", &skin, modeloptions, modeloptions));
|
||||||
|
info->modeledit->selectedoption = !strncmp(skin.string, "female", 6);
|
||||||
|
cu = MC_AddCustom(menu, 172-16, 88+16, NULL);
|
||||||
|
cu->draw = MSetupQ2_TransDraw;
|
||||||
|
cu->key = MSetupQ2_ChangeSkin;
|
||||||
|
|
||||||
|
/* MC_AddSelectablePicture(mainm, 68, 13, "pics/m_main_game");
|
||||||
|
MC_AddSelectablePicture(mainm, 68, 53, "pics/m_main_multiplayer");
|
||||||
|
MC_AddSelectablePicture(mainm, 68, 93, "pics/m_main_options");
|
||||||
|
MC_AddSelectablePicture(mainm, 68, 133, "pics/m_main_video");
|
||||||
|
MC_AddSelectablePicture(mainm, 68, 173, "pics/m_main_quit");
|
||||||
|
|
||||||
|
b = MC_AddConsoleCommand (mainm, 68, 13, "", "menu_single\n");
|
||||||
|
mainm->selecteditem = (menuoption_t *)b;
|
||||||
|
b->common.width = 12*20;
|
||||||
|
b->common.height = 20;
|
||||||
|
b = MC_AddConsoleCommand (mainm, 68, 53, "", "menu_multi\n");
|
||||||
|
b->common.width = 12*20;
|
||||||
|
b->common.height = 20;
|
||||||
|
b = MC_AddConsoleCommand (mainm, 68, 93, "", "menu_options\n");
|
||||||
|
b->common.width = 12*20;
|
||||||
|
b->common.height = 20;
|
||||||
|
b = MC_AddConsoleCommand (mainm, 68, 133, "", "menu_video\n");
|
||||||
|
b->common.width = 12*20;
|
||||||
|
b->common.height = 20;
|
||||||
|
b = MC_AddConsoleCommand (mainm, 68, 173, "", "menu_quit\n");
|
||||||
|
b->common.width = 12*20;
|
||||||
|
b->common.height = 20;
|
||||||
|
*/
|
||||||
|
menu->cursoritem = (menuoption_t*)MC_AddWhiteText(menu, 54, 32, NULL, false);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
key_dest = key_menu;
|
key_dest = key_menu;
|
||||||
m_state = m_complex;
|
m_state = m_complex;
|
||||||
|
|
||||||
|
|
|
@ -165,6 +165,7 @@ void M_Audio_StartSound (struct menu_s *menu)
|
||||||
vec3_t org;
|
vec3_t org;
|
||||||
audiomenuinfo_t *info = menu->data;
|
audiomenuinfo_t *info = menu->data;
|
||||||
soundcardinfo_t *sc;
|
soundcardinfo_t *sc;
|
||||||
|
vec3_t mat[4];
|
||||||
|
|
||||||
static float lasttime;
|
static float lasttime;
|
||||||
|
|
||||||
|
@ -189,10 +190,12 @@ void M_Audio_StartSound (struct menu_s *menu)
|
||||||
|
|
||||||
if (lasttime+0.5 < Sys_DoubleTime())
|
if (lasttime+0.5 < Sys_DoubleTime())
|
||||||
{
|
{
|
||||||
|
S_GetListenerInfo(mat[0], mat[1], mat[2], mat[3]);
|
||||||
|
|
||||||
lasttime = Sys_DoubleTime();
|
lasttime = Sys_DoubleTime();
|
||||||
org[0] = listener_origin[0] + 2*(listener_right[0]*(info->testsoundsource->common.posx-320/2) + listener_forward[0]*(info->testsoundsource->common.posy-200/2));
|
org[0] = mat[0][0] + 2*(mat[1][0]*(info->testsoundsource->common.posx-320/2) + mat[1][0]*(info->testsoundsource->common.posy-200/2));
|
||||||
org[1] = listener_origin[1] + 2*(listener_right[1]*(info->testsoundsource->common.posx-320/2) + listener_forward[1]*(info->testsoundsource->common.posy-200/2));
|
org[1] = mat[0][1] + 2*(mat[1][1]*(info->testsoundsource->common.posx-320/2) + mat[1][1]*(info->testsoundsource->common.posy-200/2));
|
||||||
org[2] = listener_origin[2] + 2*(listener_right[2]*(info->testsoundsource->common.posx-320/2) + listener_forward[2]*(info->testsoundsource->common.posy-200/2));
|
org[2] = mat[0][2] + 2*(mat[1][2]*(info->testsoundsource->common.posx-320/2) + mat[1][2]*(info->testsoundsource->common.posy-200/2));
|
||||||
S_StartSound(-2, 0, S_PrecacheSound("player/pain3.wav"), org, 1, 4);
|
S_StartSound(-2, 0, S_PrecacheSound("player/pain3.wav"), org, 1, 4);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -223,10 +223,10 @@ void M_Menu_SinglePlayer_f (void)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
#ifdef CLIENTONLY
|
#ifdef CLIENTONLY
|
||||||
MC_AddBox (menu, 60, 10*8, 23, 4);
|
|
||||||
|
|
||||||
MC_AddWhiteText(menu, 92, 12*8, "QuakeWorld is for", false);
|
MC_AddWhiteText(menu, 92, 12*8, "QuakeWorld is for", false);
|
||||||
MC_AddWhiteText(menu, 92, 13*8, "Internet play only", false);
|
MC_AddWhiteText(menu, 92, 13*8, "Internet play only", false);
|
||||||
|
|
||||||
|
MC_AddBox (menu, 60, 10*8, 23, 4);
|
||||||
#else
|
#else
|
||||||
MC_AddPicture(menu, 72, 32, "gfx/sp_menu.lmp");
|
MC_AddPicture(menu, 72, 32, "gfx/sp_menu.lmp");
|
||||||
|
|
||||||
|
@ -384,7 +384,7 @@ static qboolean M_DemoKey(menucustom_t *control, menu_t *menu, int key)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int DemoAddItem(char *filename, int size, void *parm)
|
static int DemoAddItem(const char *filename, int size, void *parm)
|
||||||
{
|
{
|
||||||
int extnum;
|
int extnum;
|
||||||
demomenu_t *menu = parm;
|
demomenu_t *menu = parm;
|
||||||
|
|
|
@ -843,26 +843,31 @@ void M_Menu_Quit_f (void)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
if (1)
|
||||||
|
{
|
||||||
CL_Disconnect ();
|
CL_Disconnect ();
|
||||||
Sys_Quit ();
|
Sys_Quit ();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
key_dest = key_menu;
|
||||||
|
m_state = m_complex;
|
||||||
|
|
||||||
key_dest = key_menu;
|
M_RemoveMenu(&quitmenu);
|
||||||
m_state = m_complex;
|
memset(&quitmenu, 0, sizeof(quitmenu));
|
||||||
|
M_AddMenuFront(&quitmenu);
|
||||||
M_RemoveMenu(&quitmenu);
|
quitmenu.exclusive = false;
|
||||||
memset(&quitmenu, 0, sizeof(quitmenu));
|
quitmenu.key = MC_Quit_Key;
|
||||||
M_AddMenuFront(&quitmenu);
|
|
||||||
quitmenu.exclusive = false;
|
|
||||||
quitmenu.key = MC_Quit_Key;
|
|
||||||
|
|
||||||
|
|
||||||
i = rand()&7;
|
i = rand()&7;
|
||||||
|
|
||||||
MC_AddWhiteText(&quitmenu, 64, 84, quitMessage[i*4+0], false);
|
MC_AddWhiteText(&quitmenu, 64, 84, quitMessage[i*4+0], false);
|
||||||
MC_AddWhiteText(&quitmenu, 64, 92, quitMessage[i*4+1], false);
|
MC_AddWhiteText(&quitmenu, 64, 92, quitMessage[i*4+1], false);
|
||||||
MC_AddWhiteText(&quitmenu, 64, 100, quitMessage[i*4+2], false);
|
MC_AddWhiteText(&quitmenu, 64, 100, quitMessage[i*4+2], false);
|
||||||
MC_AddWhiteText(&quitmenu, 64, 108, quitMessage[i*4+3], false);
|
MC_AddWhiteText(&quitmenu, 64, 108, quitMessage[i*4+3], false);
|
||||||
MC_AddBox (&quitmenu, 56, 76, 24, 4);
|
MC_AddBox (&quitmenu, 56, 76, 24, 4);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
|
|
|
@ -133,6 +133,7 @@ extern void FNC(Mod_NowLoadExternal) (void);
|
||||||
|
|
||||||
extern void FNC(Mod_Think) (void);
|
extern void FNC(Mod_Think) (void);
|
||||||
extern int FNC(Mod_SkinForName) (struct model_s *model, char *name);
|
extern int FNC(Mod_SkinForName) (struct model_s *model, char *name);
|
||||||
|
extern int FNC(Mod_FrameForName) (struct model_s *model, char *name);
|
||||||
|
|
||||||
#undef FNC
|
#undef FNC
|
||||||
|
|
||||||
|
@ -221,6 +222,7 @@ typedef struct {
|
||||||
qboolean (*Mod_GetTag) (struct model_s *model, int tagnum, framestate_t *fstate, float *result);
|
qboolean (*Mod_GetTag) (struct model_s *model, int tagnum, framestate_t *fstate, float *result);
|
||||||
int (*Mod_TagNumForName) (struct model_s *model, char *name);
|
int (*Mod_TagNumForName) (struct model_s *model, char *name);
|
||||||
int (*Mod_SkinForName) (struct model_s *model, char *name);
|
int (*Mod_SkinForName) (struct model_s *model, char *name);
|
||||||
|
int (*Mod_FrameForName) (struct model_s *model, char *name);
|
||||||
|
|
||||||
|
|
||||||
qboolean (*VID_Init) (rendererstate_t *info, unsigned char *palette);
|
qboolean (*VID_Init) (rendererstate_t *info, unsigned char *palette);
|
||||||
|
|
|
@ -37,7 +37,7 @@ typedef int SOCKET;
|
||||||
cvar_t slist_cacheinfo = SCVAR("slist_cacheinfo", "0"); //this proves dangerous, memory wise.
|
cvar_t slist_cacheinfo = SCVAR("slist_cacheinfo", "0"); //this proves dangerous, memory wise.
|
||||||
cvar_t slist_writeserverstxt = SCVAR("slist_writeservers", "0");
|
cvar_t slist_writeserverstxt = SCVAR("slist_writeservers", "0");
|
||||||
|
|
||||||
void CL_MasterListParse(int type, qboolean slashpad);
|
void CL_MasterListParse(netadrtype_t adrtype, int type, qboolean slashpad);
|
||||||
void CL_QueryServers(void);
|
void CL_QueryServers(void);
|
||||||
int CL_ReadServerInfo(char *msg, int servertype, qboolean favorite);
|
int CL_ReadServerInfo(char *msg, int servertype, qboolean favorite);
|
||||||
|
|
||||||
|
@ -83,27 +83,34 @@ int slist_customkeys;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#define POLLUDPSOCKETS 64 //it's big so we can have lots of messages when behind a firewall. Basically if a firewall only allows replys, and only remembers 3 servers per socket, we need this big cos it can take a while for a packet to find a fast optimised route and we might be waiting for a few secs for a reply the first time around.
|
#define POLLUDP4SOCKETS 64 //it's big so we can have lots of messages when behind a firewall. Basically if a firewall only allows replys, and only remembers 3 servers per socket, we need this big cos it can take a while for a packet to find a fast optimised route and we might be waiting for a few secs for a reply the first time around.
|
||||||
SOCKET pollsocketsUDP[POLLUDPSOCKETS];
|
int lastpollsockUDP4;
|
||||||
int lastpollsockUDP;
|
|
||||||
|
#ifdef IPPROTO_IPV6
|
||||||
|
#define POLLUDP6SOCKETS 4 //it's non-zero so we can have lots of messages when behind a firewall. Basically if a firewall only allows replys, and only remembers 3 servers per socket, we need this big cos it can take a while for a packet to find a fast optimised route and we might be waiting for a few secs for a reply the first time around.
|
||||||
|
int lastpollsockUDP6;
|
||||||
|
#else
|
||||||
|
#define POLLUDP6SOCKETS 0
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef USEIPX
|
#ifdef USEIPX
|
||||||
#define POLLIPXSOCKETS 2 //ipx isn't used as much. In fact, we only expect local servers to be using it. I'm not sure why I implemented it anyway.
|
#define POLLIPXSOCKETS 2 //ipx isn't used as much. In fact, we only expect local servers to be using it. I'm not sure why I implemented it anyway. You might see a q2 server using it. Rarely.
|
||||||
SOCKET pollsocketsIPX[POLLIPXSOCKETS];
|
|
||||||
int lastpollsockIPX;
|
int lastpollsockIPX;
|
||||||
#else
|
#else
|
||||||
#define POLLIPXSOCKETS 0
|
#define POLLIPXSOCKETS 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define FIRSTIPXSOCKET (0)
|
||||||
|
#define FIRSTUDP4SOCKET (FIRSTIPXSOCKET+POLLIPXSOCKETS)
|
||||||
|
#define FIRSTUDP6SOCKET (FIRSTUDP4SOCKET+POLLUDP4SOCKETS)
|
||||||
|
#define POLLTOTALSOCKETS (FIRSTUDP6SOCKET+POLLUDP6SOCKETS)
|
||||||
|
SOCKET pollsocketsList[POLLTOTALSOCKETS];
|
||||||
|
|
||||||
void Master_SetupSockets(void)
|
void Master_SetupSockets(void)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; i < POLLUDPSOCKETS; i++)
|
for (i = 0; i < POLLTOTALSOCKETS; i++)
|
||||||
pollsocketsUDP[i] = INVALID_SOCKET;
|
pollsocketsList[i] = INVALID_SOCKET;
|
||||||
#ifdef USEIPX
|
|
||||||
for (i = 0; i < POLLIPXSOCKETS; i++)
|
|
||||||
pollsocketsIPX[i] = INVALID_SOCKET;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Master_HideServer(serverinfo_t *server)
|
void Master_HideServer(serverinfo_t *server)
|
||||||
|
@ -587,6 +594,8 @@ void Master_AddMaster (char *address, int type, char *description)
|
||||||
adr.type = NA_BROADCAST_IP;
|
adr.type = NA_BROADCAST_IP;
|
||||||
if (adr.type == NA_IPX)
|
if (adr.type == NA_IPX)
|
||||||
adr.type = NA_BROADCAST_IPX;
|
adr.type = NA_BROADCAST_IPX;
|
||||||
|
if (adr.type == NA_IPV6)
|
||||||
|
adr.type = NA_BROADCAST_IP6;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (mast = master; mast; mast = mast->next)
|
for (mast = master; mast; mast = mast->next)
|
||||||
|
@ -785,24 +794,38 @@ void NET_SendPollPacket(int len, void *data, netadr_t to)
|
||||||
lastpollsockIPX++;
|
lastpollsockIPX++;
|
||||||
if (lastpollsockIPX>=POLLIPXSOCKETS)
|
if (lastpollsockIPX>=POLLIPXSOCKETS)
|
||||||
lastpollsockIPX=0;
|
lastpollsockIPX=0;
|
||||||
if (pollsocketsIPX[lastpollsockIPX]==INVALID_SOCKET)
|
if (pollsocketsList[FIRSTIPXSOCKET+lastpollsockIPX]==INVALID_SOCKET)
|
||||||
pollsocketsIPX[lastpollsockIPX] = IPX_OpenSocket(PORT_ANY, true);
|
pollsocketsList[FIRSTIPXSOCKET+lastpollsockIPX] = IPX_OpenSocket(PORT_ANY, true);
|
||||||
if (pollsocketsIPX[lastpollsockIPX]==INVALID_SOCKET)
|
if (pollsocketsList[FIRSTIPXSOCKET+lastpollsockIPX]==INVALID_SOCKET)
|
||||||
return; //bother
|
return; //bother
|
||||||
ret = sendto (pollsocketsIPX[lastpollsockIPX], data, len, 0, (struct sockaddr *)&addr, sizeof(addr) );
|
ret = sendto (pollsocketsList[FIRSTIPXSOCKET+lastpollsockIPX], data, len, 0, (struct sockaddr *)&addr, sizeof(addr) );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
#ifdef IPPROTO_IPV6
|
||||||
|
if (((struct sockaddr*)&addr)->sa_family == AF_INET6)
|
||||||
|
{
|
||||||
|
lastpollsockUDP6++;
|
||||||
|
if (lastpollsockUDP6>=POLLUDP6SOCKETS)
|
||||||
|
lastpollsockUDP6=0;
|
||||||
|
if (pollsocketsList[FIRSTUDP6SOCKET+lastpollsockUDP6]==INVALID_SOCKET)
|
||||||
|
pollsocketsList[FIRSTUDP6SOCKET+lastpollsockUDP6] = UDP6_OpenSocket(PORT_ANY, true);
|
||||||
|
if (pollsocketsList[FIRSTUDP6SOCKET+lastpollsockUDP6]==INVALID_SOCKET)
|
||||||
|
return; //bother
|
||||||
|
ret = sendto (pollsocketsList[FIRSTUDP6SOCKET+lastpollsockUDP6], data, len, 0, (struct sockaddr *)&addr, sizeof(addr) );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
if (((struct sockaddr*)&addr)->sa_family == AF_INET)
|
if (((struct sockaddr*)&addr)->sa_family == AF_INET)
|
||||||
{
|
{
|
||||||
lastpollsockUDP++;
|
lastpollsockUDP4++;
|
||||||
if (lastpollsockUDP>=POLLUDPSOCKETS)
|
if (lastpollsockUDP4>=POLLUDP4SOCKETS)
|
||||||
lastpollsockUDP=0;
|
lastpollsockUDP4=0;
|
||||||
if (pollsocketsUDP[lastpollsockUDP]==INVALID_SOCKET)
|
if (pollsocketsList[FIRSTUDP4SOCKET+lastpollsockUDP4]==INVALID_SOCKET)
|
||||||
pollsocketsUDP[lastpollsockUDP] = UDP_OpenSocket(PORT_ANY, true);
|
pollsocketsList[FIRSTUDP4SOCKET+lastpollsockUDP4] = UDP_OpenSocket(PORT_ANY, true);
|
||||||
if (pollsocketsUDP[lastpollsockUDP]==INVALID_SOCKET)
|
if (pollsocketsList[FIRSTUDP4SOCKET+lastpollsockUDP4]==INVALID_SOCKET)
|
||||||
return; //bother
|
return; //bother
|
||||||
ret = sendto (pollsocketsUDP[lastpollsockUDP], data, len, 0, (struct sockaddr *)&addr, sizeof(struct sockaddr_in) );
|
ret = sendto (pollsocketsList[FIRSTUDP4SOCKET+lastpollsockUDP4], data, len, 0, (struct sockaddr *)&addr, sizeof(struct sockaddr_in) );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
return;
|
return;
|
||||||
|
@ -831,18 +854,13 @@ int NET_CheckPollSockets(void)
|
||||||
SOCKET usesocket;
|
SOCKET usesocket;
|
||||||
char adr[MAX_ADR_SIZE];
|
char adr[MAX_ADR_SIZE];
|
||||||
|
|
||||||
for (sock = 0; sock < POLLUDPSOCKETS+POLLIPXSOCKETS; sock++)
|
for (sock = 0; sock < POLLTOTALSOCKETS; sock++)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
struct sockaddr_qstorage from;
|
struct sockaddr_qstorage from;
|
||||||
int fromlen;
|
int fromlen;
|
||||||
|
|
||||||
#ifdef USEIPX
|
usesocket = pollsocketsList[sock];
|
||||||
if (sock >= POLLUDPSOCKETS)
|
|
||||||
usesocket = pollsocketsIPX[sock-POLLUDPSOCKETS];
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
usesocket = pollsocketsUDP[sock];
|
|
||||||
|
|
||||||
if (usesocket == INVALID_SOCKET)
|
if (usesocket == INVALID_SOCKET)
|
||||||
continue;
|
continue;
|
||||||
|
@ -900,10 +918,18 @@ int NET_CheckPollSockets(void)
|
||||||
CL_ReadServerInfo(MSG_ReadString(), MT_SINGLEQ2, false);
|
CL_ReadServerInfo(MSG_ReadString(), MT_SINGLEQ2, false);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (!strncmp(s, "servers", 6)) //parse a bit more...
|
#ifdef IPPROTO_IPV6
|
||||||
|
if (!strncmp(s, "server6", 7)) //parse a bit more...
|
||||||
{
|
{
|
||||||
msg_readcount = c+7;
|
msg_readcount = c+7;
|
||||||
CL_MasterListParse(SS_QUAKE2, false);
|
CL_MasterListParse(NA_IPV6, SS_QUAKE2, false);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
if (!strncmp(s, "servers", 7)) //parse a bit more...
|
||||||
|
{
|
||||||
|
msg_readcount = c+7;
|
||||||
|
CL_MasterListParse(NA_IP, SS_QUAKE2, false);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -915,10 +941,18 @@ int NET_CheckPollSockets(void)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef IPPROTO_IPV6
|
||||||
|
if (!strncmp(s, "getserversResponse6\\", 20)) //parse a bit more...
|
||||||
|
{
|
||||||
|
msg_readcount = c+19-1;
|
||||||
|
CL_MasterListParse(NA_IPV6, SS_DARKPLACES, true);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
if (!strncmp(s, "getserversResponse\\", 19)) //parse a bit more...
|
if (!strncmp(s, "getserversResponse\\", 19)) //parse a bit more...
|
||||||
{
|
{
|
||||||
msg_readcount = c+18-1;
|
msg_readcount = c+18-1;
|
||||||
CL_MasterListParse(SS_DARKPLACES, true);
|
CL_MasterListParse(NA_IP, SS_DARKPLACES, true);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (!strcmp(s, "infoResponse")) //parse a bit more...
|
if (!strcmp(s, "infoResponse")) //parse a bit more...
|
||||||
|
@ -926,6 +960,16 @@ int NET_CheckPollSockets(void)
|
||||||
CL_ReadServerInfo(MSG_ReadString(), MT_SINGLEDP, false);
|
CL_ReadServerInfo(MSG_ReadString(), MT_SINGLEDP, false);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef IPPROTO_IPV6
|
||||||
|
if (!strncmp(s, "qw_slist6\\", 10)) //parse a bit more...
|
||||||
|
{
|
||||||
|
msg_readcount = c+9-1;
|
||||||
|
CL_MasterListParse(NA_IPV6, SS_GENERICQUAKEWORLD, false);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
msg_readcount = c;
|
msg_readcount = c;
|
||||||
|
|
||||||
c = MSG_ReadByte ();
|
c = MSG_ReadByte ();
|
||||||
|
@ -938,7 +982,7 @@ int NET_CheckPollSockets(void)
|
||||||
|
|
||||||
if (c == M2C_MASTER_REPLY) //qw master reply.
|
if (c == M2C_MASTER_REPLY) //qw master reply.
|
||||||
{
|
{
|
||||||
CL_MasterListParse(false, false);
|
CL_MasterListParse(NA_IP, SS_GENERICQUAKEWORLD, false);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -976,7 +1020,7 @@ int NET_CheckPollSockets(void)
|
||||||
// Q_strcat(name, name);
|
// Q_strcat(name, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
CL_ReadServerInfo(va("\\hostname\\%s\\map\\%s\\maxclients\\%i", name, map, maxusers), MT_SINGLENQ, false);
|
CL_ReadServerInfo(va("\\hostname\\%s\\map\\%s\\maxclients\\%i\\clients\\%i", name, map, maxusers, users), MT_SINGLENQ, false);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
continue;
|
continue;
|
||||||
|
@ -1196,10 +1240,10 @@ void MasterInfo_WriteServers(void)
|
||||||
char *typename;
|
char *typename;
|
||||||
master_t *mast;
|
master_t *mast;
|
||||||
serverinfo_t *server;
|
serverinfo_t *server;
|
||||||
FILE *mf, *qws;
|
vfsfile_t *mf, *qws;
|
||||||
char adr[MAX_ADR_SIZE];
|
char adr[MAX_ADR_SIZE];
|
||||||
|
|
||||||
mf = fopen("masters.txt", "wt");
|
mf = FS_OpenVFS("masters.txt", "wt", FS_ROOT);
|
||||||
if (!mf)
|
if (!mf)
|
||||||
{
|
{
|
||||||
Con_Printf("Couldn't write masters.txt");
|
Con_Printf("Couldn't write masters.txt");
|
||||||
|
@ -1259,40 +1303,40 @@ void MasterInfo_WriteServers(void)
|
||||||
typename = "writeerror";
|
typename = "writeerror";
|
||||||
}
|
}
|
||||||
if (mast->address)
|
if (mast->address)
|
||||||
fprintf(mf, "%s\t%s\t%s\n", mast->address , typename, mast->name);
|
VFS_PUTS(mf, va("%s\t%s\t%s\n", mast->address , typename, mast->name));
|
||||||
else
|
else
|
||||||
fprintf(mf, "%s\t%s\t%s\n", NET_AdrToString(adr, sizeof(adr), mast->adr), typename, mast->name);
|
VFS_PUTS(mf, va("%s\t%s\t%s\n", NET_AdrToString(adr, sizeof(adr), mast->adr), typename, mast->name));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (slist_writeserverstxt.value)
|
if (slist_writeserverstxt.value)
|
||||||
qws = fopen("servers.txt", "wt");
|
qws = FS_OpenVFS("servers.txt", "wt", FS_ROOT);
|
||||||
else
|
else
|
||||||
qws = NULL;
|
qws = NULL;
|
||||||
if (qws)
|
if (qws)
|
||||||
fprintf(mf, "\n%s\t%s\t%s\n\n", "file servers.txt", "favorite:qw", "personal server list");
|
VFS_PUTS(mf, va("\n%s\t%s\t%s\n\n", "file servers.txt", "favorite:qw", "personal server list"));
|
||||||
|
|
||||||
for (server = firstserver; server; server = server->next)
|
for (server = firstserver; server; server = server->next)
|
||||||
{
|
{
|
||||||
if (server->special & SS_FAVORITE)
|
if (server->special & SS_FAVORITE)
|
||||||
{
|
{
|
||||||
if (server->special & SS_QUAKE3)
|
if (server->special & SS_QUAKE3)
|
||||||
fprintf(mf, "%s\t%s\t%s\n", NET_AdrToString(adr, sizeof(adr), server->adr), "favorite:q3", server->name);
|
VFS_PUTS(mf, va("%s\t%s\t%s\n", NET_AdrToString(adr, sizeof(adr), server->adr), "favorite:q3", server->name));
|
||||||
else if (server->special & SS_QUAKE2)
|
else if (server->special & SS_QUAKE2)
|
||||||
fprintf(mf, "%s\t%s\t%s\n", NET_AdrToString(adr, sizeof(adr), server->adr), "favorite:q2", server->name);
|
VFS_PUTS(mf, va("%s\t%s\t%s\n", NET_AdrToString(adr, sizeof(adr), server->adr), "favorite:q2", server->name));
|
||||||
else if (server->special & SS_NETQUAKE)
|
else if (server->special & SS_NETQUAKE)
|
||||||
fprintf(mf, "%s\t%s\t%s\n", NET_AdrToString(adr, sizeof(adr), server->adr), "favorite:nq", server->name);
|
VFS_PUTS(mf, va("%s\t%s\t%s\n", NET_AdrToString(adr, sizeof(adr), server->adr), "favorite:nq", server->name));
|
||||||
else if (qws) //servers.txt doesn't support the extra info.
|
else if (qws) //servers.txt doesn't support the extra info.
|
||||||
fprintf(qws, "%s\t%s\n", NET_AdrToString(adr, sizeof(adr), server->adr), server->name);
|
VFS_PUTS(qws, va("%s\t%s\n", NET_AdrToString(adr, sizeof(adr), server->adr), server->name));
|
||||||
else //read only? damn them!
|
else //read only? damn them!
|
||||||
fprintf(mf, "%s\t%s\t%s\n", NET_AdrToString(adr, sizeof(adr), server->adr), "favorite:qw", server->name);
|
VFS_PUTS(mf, va("%s\t%s\t%s\n", NET_AdrToString(adr, sizeof(adr), server->adr), "favorite:qw", server->name));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (qws)
|
if (qws)
|
||||||
fclose(qws);
|
VFS_CLOSE(qws);
|
||||||
|
|
||||||
|
|
||||||
fclose(mf);
|
VFS_CLOSE(mf);
|
||||||
}
|
}
|
||||||
|
|
||||||
//poll master servers for server lists.
|
//poll master servers for server lists.
|
||||||
|
@ -1758,19 +1802,36 @@ int CL_ReadServerInfo(char *msg, int servertype, qboolean favorite)
|
||||||
}
|
}
|
||||||
|
|
||||||
//rewrite to scan for existing server instead of wiping all.
|
//rewrite to scan for existing server instead of wiping all.
|
||||||
void CL_MasterListParse(int type, qboolean slashpad)
|
void CL_MasterListParse(netadrtype_t adrtype, int type, qboolean slashpad)
|
||||||
{
|
{
|
||||||
serverinfo_t *info;
|
serverinfo_t *info;
|
||||||
serverinfo_t *last, *old;
|
serverinfo_t *last, *old;
|
||||||
|
int adrlen;
|
||||||
|
|
||||||
int p1, p2;
|
int p1, p2;
|
||||||
char adr[MAX_ADR_SIZE];
|
char adr[MAX_ADR_SIZE];
|
||||||
|
int i;
|
||||||
|
|
||||||
|
switch(adrtype)
|
||||||
|
{
|
||||||
|
case NA_IP:
|
||||||
|
adrlen = 4;
|
||||||
|
break;
|
||||||
|
case NA_IPV6:
|
||||||
|
adrlen = 16;
|
||||||
|
break;
|
||||||
|
case NA_IPX:
|
||||||
|
adrlen = 10;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
MSG_ReadByte ();
|
MSG_ReadByte ();
|
||||||
|
|
||||||
last = firstserver;
|
last = firstserver;
|
||||||
|
|
||||||
while(msg_readcount+6 < net_message.cursize)
|
while(msg_readcount+adrlen+2 < net_message.cursize)
|
||||||
{
|
{
|
||||||
if (slashpad)
|
if (slashpad)
|
||||||
{
|
{
|
||||||
|
@ -1779,11 +1840,17 @@ void CL_MasterListParse(int type, qboolean slashpad)
|
||||||
}
|
}
|
||||||
|
|
||||||
info = Z_Malloc(sizeof(serverinfo_t));
|
info = Z_Malloc(sizeof(serverinfo_t));
|
||||||
info->adr.type = NA_IP;
|
info->adr.type = adrtype;
|
||||||
info->adr.address.ip[0] = MSG_ReadByte();
|
switch(adrtype)
|
||||||
info->adr.address.ip[1] = MSG_ReadByte();
|
{
|
||||||
info->adr.address.ip[2] = MSG_ReadByte();
|
case NA_IP:
|
||||||
info->adr.address.ip[3] = MSG_ReadByte();
|
case NA_IPV6:
|
||||||
|
case NA_IPX:
|
||||||
|
//generic fixed-length addresses
|
||||||
|
for (i = 0; i < adrlen; i++)
|
||||||
|
((qbyte *)&info->adr.address)[i] = MSG_ReadByte();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
p1 = MSG_ReadByte();
|
p1 = MSG_ReadByte();
|
||||||
p2 = MSG_ReadByte();
|
p2 = MSG_ReadByte();
|
||||||
|
|
|
@ -186,6 +186,19 @@ static void PClassic_ClearParticles (void)
|
||||||
particles[r_numparticles - 1].next = NULL;
|
particles[r_numparticles - 1].next = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define USEARRAYS
|
||||||
|
|
||||||
|
#define BUFFERVERTS 2048*3
|
||||||
|
vec3_t classicverts[BUFFERVERTS];
|
||||||
|
union c
|
||||||
|
{
|
||||||
|
byte_vec4_t b;
|
||||||
|
unsigned int i;
|
||||||
|
} classiccolours[BUFFERVERTS];
|
||||||
|
vec2_t classictexcoords[BUFFERVERTS];
|
||||||
|
int classicnumverts;
|
||||||
|
int setuptexcoords;
|
||||||
|
|
||||||
//draws all the active particles.
|
//draws all the active particles.
|
||||||
static void PClassic_DrawParticles(void)
|
static void PClassic_DrawParticles(void)
|
||||||
{
|
{
|
||||||
|
@ -198,6 +211,8 @@ static void PClassic_DrawParticles(void)
|
||||||
unsigned char *at, theAlpha;
|
unsigned char *at, theAlpha;
|
||||||
vec3_t up, right;
|
vec3_t up, right;
|
||||||
float dist, scale, r_partscale=0;
|
float dist, scale, r_partscale=0;
|
||||||
|
|
||||||
|
union c usecolours;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (!active_particles)
|
if (!active_particles)
|
||||||
|
@ -218,10 +233,32 @@ static void PClassic_DrawParticles(void)
|
||||||
if (!gl_solidparticles.value)
|
if (!gl_solidparticles.value)
|
||||||
qglDepthMask (GL_FALSE);
|
qglDepthMask (GL_FALSE);
|
||||||
qglTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
|
qglTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
|
||||||
|
|
||||||
|
#ifdef USEARRAYS
|
||||||
|
if (!setuptexcoords)
|
||||||
|
{
|
||||||
|
setuptexcoords = true;
|
||||||
|
for (i = 0; i < BUFFERVERTS; i += 3)
|
||||||
|
{
|
||||||
|
classictexcoords[i+1][0] = 1;
|
||||||
|
classictexcoords[i+2][1] = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
qglTexCoordPointer(2, GL_FLOAT, 0, classictexcoords);
|
||||||
|
qglVertexPointer(3, GL_FLOAT, 0, classicverts);
|
||||||
|
qglColorPointer(4, GL_UNSIGNED_BYTE, 0, classiccolours);
|
||||||
|
|
||||||
|
qglEnableClientState(GL_TEXTURE_COORD_ARRAY);
|
||||||
|
qglEnableClientState(GL_COLOR_ARRAY);
|
||||||
|
qglEnableClientState(GL_VERTEX_ARRAY);
|
||||||
|
#else
|
||||||
qglBegin (GL_TRIANGLES);
|
qglBegin (GL_TRIANGLES);
|
||||||
|
#endif
|
||||||
|
|
||||||
VectorScale (vup, 1.5, up);
|
VectorScale (vup, 1.5, up);
|
||||||
VectorScale (vright, 1.5, right);
|
VectorScale (vright, 1.5, right);
|
||||||
|
|
||||||
|
classicnumverts = 0;
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
#ifdef SWQUAKE
|
#ifdef SWQUAKE
|
||||||
|
@ -277,10 +314,36 @@ static void PClassic_DrawParticles(void)
|
||||||
{
|
{
|
||||||
#ifdef RGLQUAKE
|
#ifdef RGLQUAKE
|
||||||
case QR_OPENGL:
|
case QR_OPENGL:
|
||||||
|
#ifdef USEARRAYS
|
||||||
|
if (classicnumverts >= BUFFERVERTS-3)
|
||||||
|
{
|
||||||
|
qglDrawArrays(GL_TRIANGLES, 0, classicnumverts);
|
||||||
|
classicnumverts = 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// hack a scale up to keep particles from disapearing
|
// hack a scale up to keep particles from disapearing
|
||||||
dist = (p->org[0] - r_origin[0]) * vpn[0] + (p->org[1] - r_origin[1]) * vpn[1] + (p->org[2] - r_origin[2]) * vpn[2];
|
dist = (p->org[0] - r_origin[0]) * vpn[0] + (p->org[1] - r_origin[1]) * vpn[1] + (p->org[2] - r_origin[2]) * vpn[2];
|
||||||
scale = 1 + dist * r_partscale;
|
scale = 1 + dist * r_partscale;
|
||||||
|
|
||||||
|
#ifdef USEARRAYS
|
||||||
|
usecolours.i = d_8to24rgbtable[(int)p->color];
|
||||||
|
if (p->type == pt_fire)
|
||||||
|
usecolours.b[3] = 255 * (6 - p->ramp) / 6;
|
||||||
|
else
|
||||||
|
usecolours.b[3] = 255;
|
||||||
|
|
||||||
|
classiccolours[classicnumverts].i = usecolours.i;
|
||||||
|
VectorCopy(p->org, classicverts[classicnumverts]);
|
||||||
|
classicnumverts++;
|
||||||
|
classiccolours[classicnumverts].i = usecolours.i;
|
||||||
|
VectorMA(p->org, scale, up, classicverts[classicnumverts]);
|
||||||
|
classicnumverts++;
|
||||||
|
classiccolours[classicnumverts].i = usecolours.i;
|
||||||
|
VectorMA(p->org, scale, right, classicverts[classicnumverts]);
|
||||||
|
classicnumverts++;
|
||||||
|
#else
|
||||||
|
|
||||||
at = (qbyte *) &d_8to24rgbtable[(int)p->color];
|
at = (qbyte *) &d_8to24rgbtable[(int)p->color];
|
||||||
if (p->type == pt_fire)
|
if (p->type == pt_fire)
|
||||||
theAlpha = 255 * (6 - p->ramp) / 6;
|
theAlpha = 255 * (6 - p->ramp) / 6;
|
||||||
|
@ -290,6 +353,7 @@ static void PClassic_DrawParticles(void)
|
||||||
qglTexCoord2f (0, 0); qglVertex3fv (p->org);
|
qglTexCoord2f (0, 0); qglVertex3fv (p->org);
|
||||||
qglTexCoord2f (1, 0); qglVertex3f (p->org[0] + up[0] * scale, p->org[1] + up[1] * scale, p->org[2] + up[2] * scale);
|
qglTexCoord2f (1, 0); qglVertex3f (p->org[0] + up[0] * scale, p->org[1] + up[1] * scale, p->org[2] + up[2] * scale);
|
||||||
qglTexCoord2f (0, 1); qglVertex3f (p->org[0] + right[0] * scale, p->org[1] + right[1] * scale, p->org[2] + right[2] * scale);
|
qglTexCoord2f (0, 1); qglVertex3f (p->org[0] + right[0] * scale, p->org[1] + right[1] * scale, p->org[2] + right[2] * scale);
|
||||||
|
#endif
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
#ifdef SWQUAKE
|
#ifdef SWQUAKE
|
||||||
|
@ -356,7 +420,15 @@ static void PClassic_DrawParticles(void)
|
||||||
{
|
{
|
||||||
#ifdef RGLQUAKE
|
#ifdef RGLQUAKE
|
||||||
case QR_OPENGL:
|
case QR_OPENGL:
|
||||||
|
#ifdef USEARRAYS
|
||||||
|
if (classicnumverts)
|
||||||
|
{
|
||||||
|
qglDrawArrays(GL_TRIANGLES, 0, classicnumverts);
|
||||||
|
classicnumverts = 0;
|
||||||
|
}
|
||||||
|
#else
|
||||||
qglEnd ();
|
qglEnd ();
|
||||||
|
#endif
|
||||||
qglDisable (GL_BLEND);
|
qglDisable (GL_BLEND);
|
||||||
qglDepthMask (GL_TRUE);
|
qglDepthMask (GL_TRUE);
|
||||||
qglTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
|
qglTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
|
||||||
|
|
|
@ -53,6 +53,7 @@ static int num_csqc_edicts;
|
||||||
static int csqc_fakereadbyte;
|
static int csqc_fakereadbyte;
|
||||||
|
|
||||||
static int csqc_lplayernum;
|
static int csqc_lplayernum;
|
||||||
|
static qboolean csqc_isdarkplaces;
|
||||||
|
|
||||||
#define CSQCPROGSGROUP "CSQC progs control"
|
#define CSQCPROGSGROUP "CSQC progs control"
|
||||||
cvar_t pr_csmaxedicts = SCVAR("pr_csmaxedicts", "3072");
|
cvar_t pr_csmaxedicts = SCVAR("pr_csmaxedicts", "3072");
|
||||||
|
@ -140,8 +141,6 @@ typedef enum
|
||||||
\
|
\
|
||||||
globalfunction(ent_update, "CSQC_Ent_Update"); \
|
globalfunction(ent_update, "CSQC_Ent_Update"); \
|
||||||
globalfunction(ent_remove, "CSQC_Ent_Remove"); \
|
globalfunction(ent_remove, "CSQC_Ent_Remove"); \
|
||||||
globalfunction(delta_update, "CSQC_Delta_Update");/*EXT_CSQC_1*/ \
|
|
||||||
globalfunction(delta_remove, "CSQC_Delta_Remove");/*EXT_CSQC_1*/ \
|
|
||||||
\
|
\
|
||||||
globalfunction(event_sound, "CSQC_Event_Sound"); \
|
globalfunction(event_sound, "CSQC_Event_Sound"); \
|
||||||
globalfunction(serversound, "CSQC_ServerSound");/*obsolete, use event_sound*/ \
|
globalfunction(serversound, "CSQC_ServerSound");/*obsolete, use event_sound*/ \
|
||||||
|
@ -698,8 +697,11 @@ static void cs_getframestate(csqcedict_t *in, unsigned int rflags, framestate_t
|
||||||
out->g[FST_BASE].endbone = in->v->basebone;
|
out->g[FST_BASE].endbone = in->v->basebone;
|
||||||
if (out->g[FST_BASE].endbone)
|
if (out->g[FST_BASE].endbone)
|
||||||
{ //small optimisation.
|
{ //small optimisation.
|
||||||
|
out->g[FST_BASE].endbone -= 1;
|
||||||
|
|
||||||
out->g[FST_BASE].frame[0] = in->v->baseframe;
|
out->g[FST_BASE].frame[0] = in->v->baseframe;
|
||||||
out->g[FST_BASE].frame[1] = in->v->baseframe2;
|
out->g[FST_BASE].frame[1] = in->v->baseframe2;
|
||||||
|
out->g[FST_BASE].lerpfrac = in->v->baselerpfrac;
|
||||||
if (rflags & CSQCRF_FRAMETIMESARESTARTTIMES)
|
if (rflags & CSQCRF_FRAMETIMESARESTARTTIMES)
|
||||||
{
|
{
|
||||||
out->g[FST_BASE].frametime[0] = *csqcg.svtime - in->v->baseframe1time;
|
out->g[FST_BASE].frametime[0] = *csqcg.svtime - in->v->baseframe1time;
|
||||||
|
@ -710,7 +712,6 @@ static void cs_getframestate(csqcedict_t *in, unsigned int rflags, framestate_t
|
||||||
out->g[FST_BASE].frametime[0] = in->v->baseframe1time;
|
out->g[FST_BASE].frametime[0] = in->v->baseframe1time;
|
||||||
out->g[FST_BASE].frametime[1] = in->v->baseframe2time;
|
out->g[FST_BASE].frametime[1] = in->v->baseframe2time;
|
||||||
}
|
}
|
||||||
out->g[FST_BASE].lerpfrac = in->v->baselerpfrac;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//and the normal frames.
|
//and the normal frames.
|
||||||
|
@ -928,10 +929,15 @@ static qboolean CopyCSQCEdictToEntity(csqcedict_t *in, entity_t *out)
|
||||||
AngleVectors(out->angles, out->axis[0], out->axis[1], out->axis[2]);
|
AngleVectors(out->angles, out->axis[0], out->axis[1], out->axis[2]);
|
||||||
VectorInverse(out->axis[1]);
|
VectorInverse(out->axis[1]);
|
||||||
|
|
||||||
if (!in->v->scale)
|
if (!in->v->scale || in->v->scale == 1.0f)
|
||||||
out->scale = 1;
|
out->scale = 1;
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
VectorScale(out->axis[0], in->v->scale, out->axis[0]);
|
||||||
|
VectorScale(out->axis[1], in->v->scale, out->axis[1]);
|
||||||
|
VectorScale(out->axis[2], in->v->scale, out->axis[2]);
|
||||||
out->scale = in->v->scale;
|
out->scale = in->v->scale;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (in->v->colormap > 0 && in->v->colormap <= MAX_CLIENTS)
|
if (in->v->colormap > 0 && in->v->colormap <= MAX_CLIENTS)
|
||||||
|
@ -1032,6 +1038,16 @@ static void PF_R_AddEntityMask(progfuncs_t *prinst, struct globalvars_s *pr_glob
|
||||||
int e;
|
int e;
|
||||||
|
|
||||||
int oldself = *csqcg.self;
|
int oldself = *csqcg.self;
|
||||||
|
|
||||||
|
if (cl.worldmodel)
|
||||||
|
{
|
||||||
|
if (mask & MASK_DELTA)
|
||||||
|
{
|
||||||
|
CL_LinkPlayers ();
|
||||||
|
CL_LinkPacketEntities ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for (e=1; e < *prinst->parms->sv_num_edicts; e++)
|
for (e=1; e < *prinst->parms->sv_num_edicts; e++)
|
||||||
{
|
{
|
||||||
ent = (void*)EDICT_NUM(prinst, e);
|
ent = (void*)EDICT_NUM(prinst, e);
|
||||||
|
@ -1061,13 +1077,8 @@ static void PF_R_AddEntityMask(progfuncs_t *prinst, struct globalvars_s *pr_glob
|
||||||
{
|
{
|
||||||
CL_LinkViewModel ();
|
CL_LinkViewModel ();
|
||||||
}
|
}
|
||||||
if (mask & MASK_DELTA)
|
CL_LinkProjectiles ();
|
||||||
{
|
CL_UpdateTEnts ();
|
||||||
CL_LinkPlayers ();
|
|
||||||
CL_LinkPacketEntities ();
|
|
||||||
CL_LinkProjectiles ();
|
|
||||||
CL_UpdateTEnts ();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1990,11 +2001,22 @@ static void PF_cs_pointparticles (progfuncs_t *prinst, struct globalvars_s *pr_g
|
||||||
|
|
||||||
static void PF_cs_trailparticles (progfuncs_t *prinst, struct globalvars_s *pr_globals)
|
static void PF_cs_trailparticles (progfuncs_t *prinst, struct globalvars_s *pr_globals)
|
||||||
{
|
{
|
||||||
int efnum = G_FLOAT(OFS_PARM0)-1;
|
int efnum;
|
||||||
csqcedict_t *ent = (csqcedict_t*)G_EDICT(prinst, OFS_PARM1);
|
csqcedict_t *ent;
|
||||||
float *start = G_VECTOR(OFS_PARM2);
|
float *start = G_VECTOR(OFS_PARM2);
|
||||||
float *end = G_VECTOR(OFS_PARM3);
|
float *end = G_VECTOR(OFS_PARM3);
|
||||||
|
|
||||||
|
if (csqc_isdarkplaces)
|
||||||
|
{
|
||||||
|
efnum = G_FLOAT(OFS_PARM1)-1;
|
||||||
|
ent = (csqcedict_t*)G_EDICT(prinst, OFS_PARM0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
efnum = G_FLOAT(OFS_PARM0)-1;
|
||||||
|
ent = (csqcedict_t*)G_EDICT(prinst, OFS_PARM1);
|
||||||
|
}
|
||||||
|
|
||||||
if (!ent->entnum) //world trails are non-state-based.
|
if (!ent->entnum) //world trails are non-state-based.
|
||||||
pe->ParticleTrail(start, end, efnum, NULL);
|
pe->ParticleTrail(start, end, efnum, NULL);
|
||||||
else
|
else
|
||||||
|
@ -3071,7 +3093,7 @@ static void PF_cs_addprogs (progfuncs_t *prinst, struct globalvars_s *pr_globals
|
||||||
static void PF_cs_OpenPortal (progfuncs_t *prinst, struct globalvars_s *pr_globals)
|
static void PF_cs_OpenPortal (progfuncs_t *prinst, struct globalvars_s *pr_globals)
|
||||||
{
|
{
|
||||||
#ifdef Q2BSPS
|
#ifdef Q2BSPS
|
||||||
if (sv.worldmodel->fromgame == fg_quake2)
|
if (cl.worldmodel->fromgame == fg_quake2)
|
||||||
CMQ2_SetAreaPortalState(G_FLOAT(OFS_PARM0), G_FLOAT(OFS_PARM1));
|
CMQ2_SetAreaPortalState(G_FLOAT(OFS_PARM0), G_FLOAT(OFS_PARM1));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -3409,6 +3431,17 @@ static void PF_rotatevectorsbymatrix (progfuncs_t *prinst, struct globalvars_s *
|
||||||
VectorNegate(res[1], csqcg.right);
|
VectorNegate(res[1], csqcg.right);
|
||||||
VectorCopy(res[2], csqcg.up);
|
VectorCopy(res[2], csqcg.up);
|
||||||
}
|
}
|
||||||
|
static void PF_frameforname (progfuncs_t *prinst, struct globalvars_s *pr_globals)
|
||||||
|
{
|
||||||
|
int modelindex = G_FLOAT(OFS_PARM0);
|
||||||
|
char *str = PF_VarString(prinst, 1, pr_globals);
|
||||||
|
model_t *mod = CSQC_GetModelForIndex(modelindex);
|
||||||
|
|
||||||
|
if (mod && Mod_FrameForName)
|
||||||
|
G_FLOAT(OFS_RETURN) = Mod_FrameForName(mod, str);
|
||||||
|
else
|
||||||
|
G_FLOAT(OFS_RETURN) = -1;
|
||||||
|
}
|
||||||
static void PF_skinforname (progfuncs_t *prinst, struct globalvars_s *pr_globals)
|
static void PF_skinforname (progfuncs_t *prinst, struct globalvars_s *pr_globals)
|
||||||
{
|
{
|
||||||
int modelindex = G_FLOAT(OFS_PARM0);
|
int modelindex = G_FLOAT(OFS_PARM0);
|
||||||
|
@ -3416,7 +3449,7 @@ static void PF_skinforname (progfuncs_t *prinst, struct globalvars_s *pr_globals
|
||||||
model_t *mod = CSQC_GetModelForIndex(modelindex);
|
model_t *mod = CSQC_GetModelForIndex(modelindex);
|
||||||
|
|
||||||
|
|
||||||
if (Mod_SkinForName)
|
if (mod && Mod_SkinForName)
|
||||||
G_FLOAT(OFS_RETURN) = Mod_SkinForName(mod, str);
|
G_FLOAT(OFS_RETURN) = Mod_SkinForName(mod, str);
|
||||||
else
|
else
|
||||||
G_FLOAT(OFS_RETURN) = -1;
|
G_FLOAT(OFS_RETURN) = -1;
|
||||||
|
@ -4066,25 +4099,356 @@ static void PF_cs_setlistener (progfuncs_t *prinst, struct globalvars_s *pr_glob
|
||||||
float *right = G_VECTOR(OFS_PARM2);
|
float *right = G_VECTOR(OFS_PARM2);
|
||||||
float *up = G_VECTOR(OFS_PARM3);
|
float *up = G_VECTOR(OFS_PARM3);
|
||||||
csqc_usinglistener = true;
|
csqc_usinglistener = true;
|
||||||
S_Update(origin, forward, right, up);
|
S_UpdateListener(origin, forward, right, up, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef struct oldcsqcpack_s
|
|
||||||
{
|
|
||||||
unsigned int numents;
|
|
||||||
unsigned int maxents;
|
|
||||||
unsigned short *entnum;
|
|
||||||
csqcedict_t **entptr;
|
|
||||||
} oldcsqcpack_t;
|
|
||||||
static oldcsqcpack_t loadedcsqcpack[2];
|
|
||||||
static int loadedcsqcpacknum;
|
|
||||||
static csqcedict_t *deltaedplayerents[MAX_CLIENTS];
|
|
||||||
|
|
||||||
#define RSES_NOLERP 1
|
#define RSES_NOLERP 1
|
||||||
#define RSES_NOROTATE 2
|
#define RSES_NOROTATE 2
|
||||||
#define RSES_NOTRAILS 4
|
#define RSES_NOTRAILS 4
|
||||||
#define RSES_NOLIGHTS 8
|
#define RSES_NOLIGHTS 8
|
||||||
|
|
||||||
|
void CSQC_EntStateToCSQC(unsigned int flags, float lerptime, entity_state_t *src, csqcedict_t *ent)
|
||||||
|
{
|
||||||
|
model_t *model;
|
||||||
|
lerpents_t *le;
|
||||||
|
|
||||||
|
le = &cl.lerpents[src->number];
|
||||||
|
|
||||||
|
//frames needs special handling
|
||||||
|
ent->v->frame = src->frame;
|
||||||
|
ent->v->frame2 = le->frame;
|
||||||
|
if (le->framechange == le->oldframechange)
|
||||||
|
ent->v->lerpfrac = 0;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ent->v->lerpfrac = 1-(lerptime - le->framechange) / (le->framechange - le->oldframechange);
|
||||||
|
if (ent->v->lerpfrac > 1)
|
||||||
|
ent->v->lerpfrac = 1;
|
||||||
|
else if (ent->v->lerpfrac < 0)
|
||||||
|
{
|
||||||
|
ent->v->lerpfrac = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
model = cl.model_precache[src->modelindex];
|
||||||
|
if (!(flags & RSES_NOTRAILS))
|
||||||
|
{
|
||||||
|
//use entnum as a test to see if its new (if the old origin isn't usable)
|
||||||
|
if (ent->v->entnum && model->particletrail >= 0)
|
||||||
|
{
|
||||||
|
if (pe->ParticleTrail (ent->v->origin, src->origin, model->particletrail, &(le->trailstate)))
|
||||||
|
pe->ParticleTrailIndex(ent->v->origin, src->origin, model->traildefaultindex, 0, &(le->trailstate));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ent->v->entnum = src->number;
|
||||||
|
ent->v->modelindex = src->modelindex;
|
||||||
|
// ent->v->bitmask = src->bitmask;
|
||||||
|
ent->v->flags = src->flags;
|
||||||
|
// ent->v->effects = src->effects;
|
||||||
|
ent->v->origin[0] = src->origin[0];
|
||||||
|
ent->v->origin[1] = src->origin[1];
|
||||||
|
ent->v->origin[2] = src->origin[2];
|
||||||
|
ent->v->angles[0] = src->angles[0];
|
||||||
|
ent->v->angles[1] = src->angles[1];
|
||||||
|
ent->v->angles[2] = src->angles[2];
|
||||||
|
|
||||||
|
//we ignore the q2 state fields
|
||||||
|
|
||||||
|
ent->v->colormap = src->colormap;
|
||||||
|
ent->v->skin = src->skinnum;
|
||||||
|
// ent->v->glowsize = src->glowsize;
|
||||||
|
// ent->v->glowcolor = src->glowcolour;
|
||||||
|
ent->v->scale = src->scale/16.0f;
|
||||||
|
ent->v->fatness = src->fatness/16.0f;
|
||||||
|
// ent->v->hexen2flags = src->hexen2flags;
|
||||||
|
// ent->v->abslight = src->abslight;
|
||||||
|
// ent->v->dpflags = src->dpflags;
|
||||||
|
// ent->v->colormod[0] = (src->colormod[0]/255.0f)*8;
|
||||||
|
// ent->v->colormod[1] = (src->colormod[1]/255.0f)*8;
|
||||||
|
// ent->v->colormod[2] = (src->colormod[2]/255.0f)*8;
|
||||||
|
ent->v->alpha = src->trans/255.0f;
|
||||||
|
// ent->v->lightstyle = src->lightstyle;
|
||||||
|
// ent->v->lightpflags = src->lightpflags;
|
||||||
|
// ent->v->solid = src->solid;
|
||||||
|
// ent->v->light[0] = src->light[0];
|
||||||
|
// ent->v->light[1] = src->light[1];
|
||||||
|
// ent->v->light[2] = src->light[2];
|
||||||
|
// ent->v->light[3] = src->light[3];
|
||||||
|
// ent->v->tagentity = src->tagentity;
|
||||||
|
// ent->v->tagindex = src->tagindex;
|
||||||
|
|
||||||
|
if (model)
|
||||||
|
{
|
||||||
|
if (!(flags & RSES_NOROTATE) && (model->flags & EF_ROTATE))
|
||||||
|
{
|
||||||
|
ent->v->angles[0] = 0;
|
||||||
|
ent->v->angles[1] = 100*lerptime;
|
||||||
|
ent->v->angles[2] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void CSQC_PlayerStateToCSQC(int pnum, player_state_t *srcp, csqcedict_t *ent)
|
||||||
|
{
|
||||||
|
ent->v->entnum = pnum+1;
|
||||||
|
|
||||||
|
if (cl.spectator && !Cam_DrawPlayer(0, pnum))
|
||||||
|
{
|
||||||
|
ent->v->modelindex = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
ent->v->modelindex = srcp->modelindex;
|
||||||
|
ent->v->skin = srcp->skinnum;
|
||||||
|
|
||||||
|
ent->v->frame1time = cl.time - cl.lerpplayers[pnum].framechange;
|
||||||
|
ent->v->frame2time = cl.time - cl.lerpplayers[pnum].oldframechange;
|
||||||
|
|
||||||
|
if (ent->v->frame != cl.lerpplayers[pnum].frame)
|
||||||
|
{
|
||||||
|
ent->v->frame2 = ent->v->frame;
|
||||||
|
ent->v->frame = cl.lerpplayers[pnum].frame;
|
||||||
|
}
|
||||||
|
|
||||||
|
ent->v->lerpfrac = 1-(realtime - cl.lerpplayers[pnum].framechange)*10;
|
||||||
|
if (ent->v->lerpfrac > 1)
|
||||||
|
ent->v->lerpfrac = 1;
|
||||||
|
else if (ent->v->lerpfrac < 0)
|
||||||
|
{
|
||||||
|
ent->v->lerpfrac = 0;
|
||||||
|
}
|
||||||
|
VectorCopy(srcp->origin, ent->v->origin);
|
||||||
|
VectorCopy(srcp->velocity, ent->v->velocity);
|
||||||
|
VectorCopy(srcp->viewangles, ent->v->angles);
|
||||||
|
ent->v->angles[0] *= -0.333;
|
||||||
|
ent->v->colormap = pnum+1;
|
||||||
|
ent->v->scale = srcp->scale/16.0f;
|
||||||
|
//ent->v->fatness = srcp->fatness;
|
||||||
|
ent->v->alpha = srcp->alpha/255.0f;
|
||||||
|
|
||||||
|
// ent->v->colormod[0] = (srcp->colormod[0]/255.0f)*8;
|
||||||
|
// ent->v->colormod[1] = (srcp->colormod[1]/255.0f)*8;
|
||||||
|
// ent->v->colormod[2] = (srcp->colormod[2]/255.0f)*8;
|
||||||
|
// ent->v->effects = srcp->effects;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned int deltaflags[MAX_MODELS];
|
||||||
|
func_t deltafunction[MAX_MODELS];
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
unsigned int readpos; //pos
|
||||||
|
unsigned int numents; //present
|
||||||
|
unsigned int maxents; //buffer size
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
unsigned short n; //don't rely on the ent->v->entnum
|
||||||
|
csqcedict_t *e; //the csqc ent
|
||||||
|
} *e;
|
||||||
|
} csqcdelta_pack_t;
|
||||||
|
static csqcdelta_pack_t csqcdelta_pack_new;
|
||||||
|
static csqcdelta_pack_t csqcdelta_pack_old;
|
||||||
|
float csqcdelta_time;
|
||||||
|
|
||||||
|
static csqcedict_t *csqcdelta_playerents[MAX_CLIENTS];
|
||||||
|
|
||||||
|
|
||||||
|
qboolean CLCSQC_DeltaPlayer(int playernum, player_state_t *state)
|
||||||
|
{
|
||||||
|
func_t func;
|
||||||
|
|
||||||
|
if (!state || !state->modelindex)
|
||||||
|
{
|
||||||
|
if (csqcdelta_playerents[playernum])
|
||||||
|
{
|
||||||
|
*csqcg.self = EDICT_TO_PROG(csqcprogs, (void*)csqcdelta_playerents[playernum]);
|
||||||
|
PR_ExecuteProgram(csqcprogs, csqcg.ent_remove);
|
||||||
|
csqcdelta_playerents[playernum] = NULL;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
func = deltafunction[state->modelindex];
|
||||||
|
if (func)
|
||||||
|
{
|
||||||
|
void *pr_globals;
|
||||||
|
csqcedict_t *ent;
|
||||||
|
|
||||||
|
ent = csqcdelta_playerents[playernum];
|
||||||
|
if (!ent)
|
||||||
|
ent = (csqcedict_t *)ED_Alloc(csqcprogs);
|
||||||
|
|
||||||
|
CSQC_PlayerStateToCSQC(playernum, state, ent);
|
||||||
|
ent->v->drawmask = MASK_DELTA;
|
||||||
|
|
||||||
|
*csqcg.self = EDICT_TO_PROG(csqcprogs, (void*)ent);
|
||||||
|
pr_globals = PR_globals(csqcprogs, PR_CURRENT);
|
||||||
|
G_FLOAT(OFS_PARM0) = !csqcdelta_playerents[playernum];
|
||||||
|
PR_ExecuteProgram(csqcprogs, func);
|
||||||
|
|
||||||
|
csqcdelta_playerents[playernum] = ent;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if (csqcdelta_playerents[playernum])
|
||||||
|
{
|
||||||
|
*csqcg.self = EDICT_TO_PROG(csqcprogs, (void*)csqcdelta_playerents[playernum]);
|
||||||
|
PR_ExecuteProgram(csqcprogs, csqcg.ent_remove);
|
||||||
|
csqcdelta_playerents[playernum] = NULL;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CLCSQC_DeltaStart(float time)
|
||||||
|
{
|
||||||
|
csqcdelta_pack_t tmp;
|
||||||
|
csqcdelta_time = time;
|
||||||
|
|
||||||
|
tmp = csqcdelta_pack_new;
|
||||||
|
csqcdelta_pack_new = csqcdelta_pack_old;
|
||||||
|
csqcdelta_pack_old = tmp;
|
||||||
|
|
||||||
|
csqcdelta_pack_new.numents = 0;
|
||||||
|
|
||||||
|
csqcdelta_pack_new.readpos = 0;
|
||||||
|
csqcdelta_pack_old.readpos = 0;
|
||||||
|
}
|
||||||
|
qboolean CLCSQC_DeltaUpdate(entity_state_t *src)
|
||||||
|
{
|
||||||
|
//FTE ensures that this function is called with increasing ent numbers each time
|
||||||
|
func_t func;
|
||||||
|
func = deltafunction[src->modelindex];
|
||||||
|
if (func)
|
||||||
|
{
|
||||||
|
void *pr_globals;
|
||||||
|
csqcedict_t *ent, *oldent;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if (csqcdelta_pack_old.readpos == csqcdelta_pack_old.numents)
|
||||||
|
{ //reached the end of the old frame's ents
|
||||||
|
oldent = NULL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
while (csqcdelta_pack_old.readpos < csqcdelta_pack_old.numents && csqcdelta_pack_old.e[csqcdelta_pack_old.readpos].n < src->number)
|
||||||
|
{
|
||||||
|
//this entity is stale, remove it.
|
||||||
|
oldent = csqcdelta_pack_old.e[csqcdelta_pack_old.readpos].e;
|
||||||
|
*csqcg.self = EDICT_TO_PROG(csqcprogs, (void*)oldent);
|
||||||
|
PR_ExecuteProgram(csqcprogs, csqcg.ent_remove);
|
||||||
|
csqcdelta_pack_old.readpos++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (src->number < csqcdelta_pack_old.e[csqcdelta_pack_old.readpos].n)
|
||||||
|
oldent = NULL;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
oldent = csqcdelta_pack_old.e[csqcdelta_pack_old.readpos].e;
|
||||||
|
csqcdelta_pack_old.readpos++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (src->number < maxcsqcentities && csqcent[src->number])
|
||||||
|
{
|
||||||
|
//in the csqc list (don't permit in the delta list too)
|
||||||
|
if (oldent)
|
||||||
|
{
|
||||||
|
*csqcg.self = EDICT_TO_PROG(csqcprogs, (void*)oldent);
|
||||||
|
PR_ExecuteProgram(csqcprogs, csqcg.ent_remove);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if (oldent)
|
||||||
|
ent = oldent;
|
||||||
|
else
|
||||||
|
ent = (csqcedict_t *)ED_Alloc(csqcprogs);
|
||||||
|
|
||||||
|
CSQC_EntStateToCSQC(deltaflags[src->modelindex], csqcdelta_time, src, ent);
|
||||||
|
ent->v->drawmask = MASK_DELTA;
|
||||||
|
|
||||||
|
|
||||||
|
*csqcg.self = EDICT_TO_PROG(csqcprogs, (void*)ent);
|
||||||
|
pr_globals = PR_globals(csqcprogs, PR_CURRENT);
|
||||||
|
G_FLOAT(OFS_PARM0) = !oldent;
|
||||||
|
PR_ExecuteProgram(csqcprogs, func);
|
||||||
|
|
||||||
|
|
||||||
|
if (csqcdelta_pack_new.maxents <= csqcdelta_pack_new.numents)
|
||||||
|
{
|
||||||
|
csqcdelta_pack_new.maxents = csqcdelta_pack_new.numents + 64;
|
||||||
|
csqcdelta_pack_new.e = BZ_Realloc(csqcdelta_pack_new.e, sizeof(*csqcdelta_pack_new.e)*csqcdelta_pack_new.maxents);
|
||||||
|
}
|
||||||
|
csqcdelta_pack_new.e[csqcdelta_pack_new.numents].e = ent;
|
||||||
|
csqcdelta_pack_new.e[csqcdelta_pack_new.numents].n = src->number;
|
||||||
|
csqcdelta_pack_new.numents++;
|
||||||
|
|
||||||
|
return G_FLOAT(OFS_RETURN);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CLCSQC_DeltaEnd(void)
|
||||||
|
{
|
||||||
|
//remove any unreferenced ents stuck on the end
|
||||||
|
while (csqcdelta_pack_old.readpos < csqcdelta_pack_old.numents)
|
||||||
|
{
|
||||||
|
*csqcg.self = EDICT_TO_PROG(csqcprogs, (void*)csqcdelta_pack_old.e[csqcdelta_pack_old.readpos].e);
|
||||||
|
PR_ExecuteProgram(csqcprogs, csqcg.ent_remove);
|
||||||
|
csqcdelta_pack_old.readpos++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void PF_DeltaListen(progfuncs_t *prinst, struct globalvars_s *pr_globals)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
char *mname = PR_GetStringOfs(prinst, OFS_PARM0);
|
||||||
|
func_t func = G_INT(OFS_PARM1);
|
||||||
|
unsigned int flags = G_FLOAT(OFS_PARM2);
|
||||||
|
|
||||||
|
if (PR_GetFuncArgCount(prinst, func) < 0)
|
||||||
|
{
|
||||||
|
Con_Printf("PF_DeltaListen: Bad function index\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!strcmp(mname, "*"))
|
||||||
|
{
|
||||||
|
//yes, even things that are not allocated yet
|
||||||
|
for (i = 0; i < MAX_MODELS; i++)
|
||||||
|
{
|
||||||
|
deltafunction[i] = func;
|
||||||
|
deltaflags[i] = flags;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (i = 1; i < MAX_MODELS; i++)
|
||||||
|
{
|
||||||
|
if (!*cl.model_name[i])
|
||||||
|
break;
|
||||||
|
if (!strcmp(cl.model_name[i], mname))
|
||||||
|
{
|
||||||
|
deltafunction[i] = func;
|
||||||
|
deltaflags[i] = flags;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#if 1
|
||||||
|
void PF_ReadServerEntityState(progfuncs_t *prinst, struct globalvars_s *pr_globals)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
|
||||||
packet_entities_t *CL_ProcessPacketEntities(float *servertime, qboolean nolerp);
|
packet_entities_t *CL_ProcessPacketEntities(float *servertime, qboolean nolerp);
|
||||||
void PF_ReadServerEntityState(progfuncs_t *prinst, struct globalvars_s *pr_globals)
|
void PF_ReadServerEntityState(progfuncs_t *prinst, struct globalvars_s *pr_globals)
|
||||||
{
|
{
|
||||||
|
@ -4127,45 +4491,7 @@ void PF_ReadServerEntityState(progfuncs_t *prinst, struct globalvars_s *pr_globa
|
||||||
G_FLOAT(OFS_PARM0) = false;
|
G_FLOAT(OFS_PARM0) = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
ent->v->entnum = i+1;
|
CSQC_PlayerStateToCSQC(i, srcp, ent);
|
||||||
|
|
||||||
if (cl.spectator && !Cam_DrawPlayer(0, i))
|
|
||||||
{
|
|
||||||
ent->v->modelindex = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
ent->v->modelindex = srcp->modelindex;
|
|
||||||
ent->v->skin = srcp->skinnum;
|
|
||||||
|
|
||||||
ent->v->frame1time = cl.time - cl.lerpplayers[i].framechange;
|
|
||||||
ent->v->frame2time = cl.time - cl.lerpplayers[i].oldframechange;
|
|
||||||
|
|
||||||
if (ent->v->frame != cl.lerpplayers[i].frame)
|
|
||||||
{
|
|
||||||
ent->v->frame2 = ent->v->frame;
|
|
||||||
ent->v->frame = cl.lerpplayers[i].frame;
|
|
||||||
}
|
|
||||||
|
|
||||||
ent->v->lerpfrac = 1-(cl.time - cl.lerpplayers[i].framechange)*10;
|
|
||||||
if (ent->v->lerpfrac > 1)
|
|
||||||
ent->v->lerpfrac = 1;
|
|
||||||
else if (ent->v->lerpfrac < 0)
|
|
||||||
{
|
|
||||||
ent->v->lerpfrac = 0;
|
|
||||||
}
|
|
||||||
VectorCopy(srcp->origin, ent->v->origin);
|
|
||||||
VectorCopy(srcp->velocity, ent->v->velocity);
|
|
||||||
VectorCopy(srcp->viewangles, ent->v->angles);
|
|
||||||
ent->v->angles[0] *= -0.333;
|
|
||||||
ent->v->colormap = i+1;
|
|
||||||
ent->v->scale = srcp->scale/16.0f;
|
|
||||||
//ent->v->fatness = srcp->fatness;
|
|
||||||
ent->v->alpha = srcp->alpha/255.0f;
|
|
||||||
|
|
||||||
// ent->v->colormod[0] = (srcp->colormod[0]/255.0f)*8;
|
|
||||||
// ent->v->colormod[1] = (srcp->colormod[1]/255.0f)*8;
|
|
||||||
// ent->v->colormod[2] = (srcp->colormod[2]/255.0f)*8;
|
|
||||||
// ent->v->effects = srcp->effects;
|
|
||||||
|
|
||||||
if (csqcg.delta_update)
|
if (csqcg.delta_update)
|
||||||
{
|
{
|
||||||
|
@ -4240,81 +4566,8 @@ void PF_ReadServerEntityState(progfuncs_t *prinst, struct globalvars_s *pr_globa
|
||||||
else
|
else
|
||||||
ent = (csqcedict_t *)ED_Alloc(prinst);
|
ent = (csqcedict_t *)ED_Alloc(prinst);
|
||||||
|
|
||||||
le = &cl.lerpents[src->number];
|
CSQC_EntStateToCSQC(flags, servertime, src, ent);
|
||||||
|
|
||||||
//frames needs special handling
|
|
||||||
ent->v->frame = src->frame;
|
|
||||||
ent->v->frame2 = le->frame;
|
|
||||||
if (le->framechange == le->oldframechange)
|
|
||||||
ent->v->lerpfrac = 0;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ent->v->lerpfrac = 1-(servertime - le->framechange) / (le->framechange - le->oldframechange);
|
|
||||||
if (ent->v->lerpfrac > 1)
|
|
||||||
ent->v->lerpfrac = 1;
|
|
||||||
else if (ent->v->lerpfrac < 0)
|
|
||||||
{
|
|
||||||
ent->v->lerpfrac = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
model = cl.model_precache[src->modelindex];
|
|
||||||
if (!(flags & RSES_NOTRAILS))
|
|
||||||
{
|
|
||||||
if (oldent && model->particletrail >= 0)
|
|
||||||
{
|
|
||||||
if (pe->ParticleTrail (ent->v->origin, src->origin, model->particletrail, &(le->trailstate)))
|
|
||||||
pe->ParticleTrailIndex(ent->v->origin, src->origin, model->traildefaultindex, 0, &(le->trailstate));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ent->v->entnum = src->number;
|
|
||||||
ent->v->modelindex = src->modelindex;
|
|
||||||
// ent->v->bitmask = src->bitmask;
|
|
||||||
ent->v->flags = src->flags;
|
|
||||||
// ent->v->effects = src->effects;
|
|
||||||
ent->v->origin[0] = src->origin[0];
|
|
||||||
ent->v->origin[1] = src->origin[1];
|
|
||||||
ent->v->origin[2] = src->origin[2];
|
|
||||||
ent->v->angles[0] = src->angles[0];
|
|
||||||
ent->v->angles[1] = src->angles[1];
|
|
||||||
ent->v->angles[2] = src->angles[2];
|
|
||||||
|
|
||||||
//we ignore the q2 state fields
|
|
||||||
|
|
||||||
ent->v->colormap = src->colormap;
|
|
||||||
ent->v->skin = src->skinnum;
|
|
||||||
// ent->v->glowsize = src->glowsize;
|
|
||||||
// ent->v->glowcolor = src->glowcolour;
|
|
||||||
ent->v->scale = src->scale/16.0f;
|
|
||||||
ent->v->fatness = src->fatness/16.0f;
|
|
||||||
// ent->v->hexen2flags = src->hexen2flags;
|
|
||||||
// ent->v->abslight = src->abslight;
|
|
||||||
// ent->v->dpflags = src->dpflags;
|
|
||||||
// ent->v->colormod[0] = (src->colormod[0]/255.0f)*8;
|
|
||||||
// ent->v->colormod[1] = (src->colormod[1]/255.0f)*8;
|
|
||||||
// ent->v->colormod[2] = (src->colormod[2]/255.0f)*8;
|
|
||||||
ent->v->alpha = src->trans/255.0f;
|
|
||||||
// ent->v->lightstyle = src->lightstyle;
|
|
||||||
// ent->v->lightpflags = src->lightpflags;
|
|
||||||
// ent->v->solid = src->solid;
|
|
||||||
// ent->v->light[0] = src->light[0];
|
|
||||||
// ent->v->light[1] = src->light[1];
|
|
||||||
// ent->v->light[2] = src->light[2];
|
|
||||||
// ent->v->light[3] = src->light[3];
|
|
||||||
// ent->v->tagentity = src->tagentity;
|
|
||||||
// ent->v->tagindex = src->tagindex;
|
|
||||||
|
|
||||||
if (model)
|
|
||||||
{
|
|
||||||
if (!(flags & RSES_NOROTATE) && (model->flags & EF_ROTATE))
|
|
||||||
{
|
|
||||||
ent->v->angles[0] = 0;
|
|
||||||
ent->v->angles[1] = 100*servertime;
|
|
||||||
ent->v->angles[2] = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (csqcg.delta_update)
|
if (csqcg.delta_update)
|
||||||
{
|
{
|
||||||
*csqcg.self = EDICT_TO_PROG(prinst, (void*)ent);
|
*csqcg.self = EDICT_TO_PROG(prinst, (void*)ent);
|
||||||
|
@ -4345,6 +4598,7 @@ void PF_ReadServerEntityState(progfuncs_t *prinst, struct globalvars_s *pr_globa
|
||||||
|
|
||||||
newlist->numents = newidx;
|
newlist->numents = newidx;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#define PF_FixTen PF_Fixme,PF_Fixme,PF_Fixme,PF_Fixme,PF_Fixme,PF_Fixme,PF_Fixme,PF_Fixme,PF_Fixme,PF_Fixme
|
#define PF_FixTen PF_Fixme,PF_Fixme,PF_Fixme,PF_Fixme,PF_Fixme,PF_Fixme,PF_Fixme,PF_Fixme,PF_Fixme,PF_Fixme
|
||||||
|
|
||||||
|
@ -4560,6 +4814,7 @@ static struct {
|
||||||
{"skel_mul_bones", PF_skel_mul_bones, 272},//void(float skel, float startbone, float endbone, vector org) skel_mul_bone (FTE_CSQC_SKELETONOBJECTS) (reads v_forward etc)
|
{"skel_mul_bones", PF_skel_mul_bones, 272},//void(float skel, float startbone, float endbone, vector org) skel_mul_bone (FTE_CSQC_SKELETONOBJECTS) (reads v_forward etc)
|
||||||
{"skel_copybones", PF_skel_copybones, 273},//void(float skeldst, float skelsrc, float startbone, float entbone) skel_copybones (FTE_CSQC_SKELETONOBJECTS)
|
{"skel_copybones", PF_skel_copybones, 273},//void(float skeldst, float skelsrc, float startbone, float entbone) skel_copybones (FTE_CSQC_SKELETONOBJECTS)
|
||||||
{"skel_delete", PF_skel_delete, 274},//void(float skel) skel_delete (FTE_CSQC_SKELETONOBJECTS)
|
{"skel_delete", PF_skel_delete, 274},//void(float skel) skel_delete (FTE_CSQC_SKELETONOBJECTS)
|
||||||
|
{"frameforname", PF_frameforname, 275}, // #275
|
||||||
|
|
||||||
//300
|
//300
|
||||||
{"clearscene", PF_R_ClearScene, 300}, // #300 void() clearscene (EXT_CSQC)
|
{"clearscene", PF_R_ClearScene, 300}, // #300 void() clearscene (EXT_CSQC)
|
||||||
|
@ -4659,9 +4914,11 @@ static struct {
|
||||||
{"readangle", PF_ReadAngle, 365}, // #365 float() readangle (EXT_CSQC)
|
{"readangle", PF_ReadAngle, 365}, // #365 float() readangle (EXT_CSQC)
|
||||||
{"readstring", PF_ReadString, 366}, // #366 string() readstring (EXT_CSQC)
|
{"readstring", PF_ReadString, 366}, // #366 string() readstring (EXT_CSQC)
|
||||||
{"readfloat", PF_ReadFloat, 367}, // #367 string() readfloat (EXT_CSQC)
|
{"readfloat", PF_ReadFloat, 367}, // #367 string() readfloat (EXT_CSQC)
|
||||||
|
|
||||||
{"readentitynum", PF_ReadEntityNum, 368}, // #368 float() readentitynum (EXT_CSQC)
|
{"readentitynum", PF_ReadEntityNum, 368}, // #368 float() readentitynum (EXT_CSQC)
|
||||||
|
|
||||||
{"readserverentitystate", PF_ReadServerEntityState, 369}, // #369 void(float flags, float simtime) readserverentitystate (EXT_CSQC_1)
|
{"readserverentitystate", PF_ReadServerEntityState, 369}, // #369 void(float flags, float simtime) readserverentitystate (EXT_CSQC_1)
|
||||||
|
// {"readsingleentitystate", PF_ReadSingleEntityState, 370},
|
||||||
|
{"deltalisten", PF_DeltaListen, 371}, // #371 float(string modelname, float flags) deltalisten (EXT_CSQC_1)
|
||||||
|
|
||||||
//400
|
//400
|
||||||
{"copyentity", PF_cs_copyentity, 400}, // #400 void(entity from, entity to) copyentity (DP_QC_COPYENTITY)
|
{"copyentity", PF_cs_copyentity, 400}, // #400 void(entity from, entity to) copyentity (DP_QC_COPYENTITY)
|
||||||
|
@ -4901,6 +5158,8 @@ void CSQC_Shutdown(void)
|
||||||
csqcprogs = NULL;
|
csqcprogs = NULL;
|
||||||
|
|
||||||
in_sensitivityscale = 1;
|
in_sensitivityscale = 1;
|
||||||
|
|
||||||
|
csqc_usinglistener = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
//when the qclib needs a file, it calls out to this function.
|
//when the qclib needs a file, it calls out to this function.
|
||||||
|
@ -5019,6 +5278,8 @@ qboolean CSQC_Init (unsigned int checksum)
|
||||||
csqcedict_t *worldent;
|
csqcedict_t *worldent;
|
||||||
csqcchecksum = checksum;
|
csqcchecksum = checksum;
|
||||||
|
|
||||||
|
csqc_usinglistener = false;
|
||||||
|
|
||||||
//its already running...
|
//its already running...
|
||||||
if (csqcprogs)
|
if (csqcprogs)
|
||||||
return false;
|
return false;
|
||||||
|
@ -5070,7 +5331,7 @@ qboolean CSQC_Init (unsigned int checksum)
|
||||||
csqcprogparms.globalbuiltins = pr_builtin;//builtin_t *globalbuiltins; //these are available to all progs
|
csqcprogparms.globalbuiltins = pr_builtin;//builtin_t *globalbuiltins; //these are available to all progs
|
||||||
csqcprogparms.numglobalbuiltins = sizeof(pr_builtin)/sizeof(pr_builtin[0]);
|
csqcprogparms.numglobalbuiltins = sizeof(pr_builtin)/sizeof(pr_builtin[0]);
|
||||||
|
|
||||||
csqcprogparms.autocompile = PR_NOCOMPILE;//enum {PR_NOCOMPILE, PR_COMPILENEXIST, PR_COMPILECHANGED, PR_COMPILEALWAYS} autocompile;
|
csqcprogparms.autocompile = PR_COMPILEIGNORE;//enum {PR_NOCOMPILE, PR_COMPILENEXIST, PR_COMPILECHANGED, PR_COMPILEALWAYS} autocompile;
|
||||||
|
|
||||||
csqcprogparms.gametime = &csqctime;
|
csqcprogparms.gametime = &csqctime;
|
||||||
|
|
||||||
|
@ -5089,11 +5350,16 @@ qboolean CSQC_Init (unsigned int checksum)
|
||||||
|
|
||||||
CSQC_InitFields(); //let the qclib know the field order that the engine needs.
|
CSQC_InitFields(); //let the qclib know the field order that the engine needs.
|
||||||
|
|
||||||
if (PR_LoadProgs(csqcprogs, "csprogs.dat", 0, NULL, 0) < 0) //no per-progs builtins.
|
csqc_isdarkplaces = false;
|
||||||
|
if (PR_LoadProgs(csqcprogs, "csprogs.dat", 32199, NULL, 0) < 0) //no per-progs builtins.
|
||||||
{
|
{
|
||||||
CSQC_Shutdown();
|
if (PR_LoadProgs(csqcprogs, "csprogs.dat", 52195, NULL, 0) < 0) //no per-progs builtins.
|
||||||
//failed to load or something
|
{
|
||||||
return false;
|
CSQC_Shutdown();
|
||||||
|
//failed to load or something
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
csqc_isdarkplaces = true;
|
||||||
}
|
}
|
||||||
if (setjmp(csqc_abort))
|
if (setjmp(csqc_abort))
|
||||||
{
|
{
|
||||||
|
@ -5120,17 +5386,16 @@ qboolean CSQC_Init (unsigned int checksum)
|
||||||
worldent->readonly = true;
|
worldent->readonly = true;
|
||||||
worldent->isfree = false;
|
worldent->isfree = false;
|
||||||
worldent->v->model = PR_SetString(csqcprogs, cl.model_name[1]);
|
worldent->v->model = PR_SetString(csqcprogs, cl.model_name[1]);
|
||||||
for (i = 0; i < 2; i++)
|
|
||||||
{
|
|
||||||
loadedcsqcpack[i].numents = 0;
|
|
||||||
loadedcsqcpack[i].maxents = 0;
|
|
||||||
Z_Free(loadedcsqcpack[i].entptr);
|
|
||||||
loadedcsqcpack[i].entptr = NULL;
|
|
||||||
Z_Free(loadedcsqcpack[i].entnum);
|
|
||||||
loadedcsqcpack[i].entnum = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
memset(deltaedplayerents, 0, sizeof(deltaedplayerents));
|
Z_Free(csqcdelta_pack_new.e);
|
||||||
|
memset(&csqcdelta_pack_new, 0, sizeof(csqcdelta_pack_new));
|
||||||
|
Z_Free(csqcdelta_pack_old.e);
|
||||||
|
memset(&csqcdelta_pack_old, 0, sizeof(csqcdelta_pack_old));
|
||||||
|
|
||||||
|
memset(&deltafunction, 0, sizeof(deltafunction));
|
||||||
|
|
||||||
|
memset(csqcdelta_playerents, 0, sizeof(csqcdelta_playerents));
|
||||||
|
|
||||||
csqcmapentitydata = NULL;
|
csqcmapentitydata = NULL;
|
||||||
csqcmapentitydataloaded = false;
|
csqcmapentitydataloaded = false;
|
||||||
|
|
||||||
|
@ -5415,6 +5680,11 @@ qboolean CSQC_ParseTempEntity(unsigned char firstbyte)
|
||||||
return !!G_FLOAT(OFS_RETURN);
|
return !!G_FLOAT(OFS_RETURN);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
qboolean CSQC_ParseGamePacket(void)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
qboolean CSQC_LoadResource(char *resname, char *restype)
|
qboolean CSQC_LoadResource(char *resname, char *restype)
|
||||||
{
|
{
|
||||||
void *pr_globals;
|
void *pr_globals;
|
||||||
|
|
|
@ -718,6 +718,8 @@ void PF_cl_setmousetarget (progfuncs_t *prinst, struct globalvars_s *pr_globals)
|
||||||
//float getmousetarget(void) = #604;
|
//float getmousetarget(void) = #604;
|
||||||
void PF_cl_getmousetarget (progfuncs_t *prinst, struct globalvars_s *pr_globals)
|
void PF_cl_getmousetarget (progfuncs_t *prinst, struct globalvars_s *pr_globals)
|
||||||
{
|
{
|
||||||
|
extern int mouseusedforgui;
|
||||||
|
G_FLOAT(OFS_RETURN) = mouseusedforgui?1:2;
|
||||||
}
|
}
|
||||||
|
|
||||||
int MP_TranslateDPtoFTECodes(int code);
|
int MP_TranslateDPtoFTECodes(int code);
|
||||||
|
@ -760,6 +762,7 @@ void PF_cl_getmousepos (progfuncs_t *prinst, struct globalvars_s *pr_globals)
|
||||||
{
|
{
|
||||||
float *ret = G_VECTOR(OFS_RETURN);
|
float *ret = G_VECTOR(OFS_RETURN);
|
||||||
extern int mousemove_x, mousemove_y;
|
extern int mousemove_x, mousemove_y;
|
||||||
|
extern int mousecursor_x, mousecursor_y;
|
||||||
|
|
||||||
ret[0] = mousemove_x;
|
ret[0] = mousemove_x;
|
||||||
ret[1] = mousemove_y;
|
ret[1] = mousemove_y;
|
||||||
|
@ -767,8 +770,8 @@ void PF_cl_getmousepos (progfuncs_t *prinst, struct globalvars_s *pr_globals)
|
||||||
mousemove_x=0;
|
mousemove_x=0;
|
||||||
mousemove_y=0;
|
mousemove_y=0;
|
||||||
|
|
||||||
/* ret[0] = mousecursor_x;
|
ret[0] = mousecursor_x;
|
||||||
ret[1] = mousecursor_y;*/
|
ret[1] = mousecursor_y;
|
||||||
ret[2] = 0;
|
ret[2] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1637,7 +1640,7 @@ void MP_Init (void)
|
||||||
menuprogparms.globalbuiltins = menu_builtins;//builtin_t *globalbuiltins; //these are available to all progs
|
menuprogparms.globalbuiltins = menu_builtins;//builtin_t *globalbuiltins; //these are available to all progs
|
||||||
menuprogparms.numglobalbuiltins = menu_numbuiltins;
|
menuprogparms.numglobalbuiltins = menu_numbuiltins;
|
||||||
|
|
||||||
menuprogparms.autocompile = PR_COMPILEEXISTANDCHANGED;//enum {PR_NOCOMPILE, PR_COMPILENEXIST, PR_COMPILECHANGED, PR_COMPILEALWAYS} autocompile;
|
menuprogparms.autocompile = PR_COMPILEIGNORE;//PR_COMPILEEXISTANDCHANGED;//enum {PR_NOCOMPILE, PR_COMPILENEXIST, PR_COMPILECHANGED, PR_COMPILEALWAYS} autocompile;
|
||||||
|
|
||||||
menuprogparms.gametime = &menutime;
|
menuprogparms.gametime = &menutime;
|
||||||
|
|
||||||
|
|
|
@ -131,17 +131,19 @@ extern "C" {
|
||||||
#include "sys.h"
|
#include "sys.h"
|
||||||
#include "zone.h"
|
#include "zone.h"
|
||||||
#include "mathlib.h"
|
#include "mathlib.h"
|
||||||
#include "wad.h"
|
|
||||||
#include "cvar.h"
|
#include "cvar.h"
|
||||||
#include "screen.h"
|
|
||||||
#include "net.h"
|
#include "net.h"
|
||||||
#include "protocol.h"
|
#include "protocol.h"
|
||||||
#include "cmd.h"
|
#include "cmd.h"
|
||||||
|
#if 1//ndef SERVERONLY
|
||||||
|
#include "wad.h"
|
||||||
|
#include "screen.h"
|
||||||
#include "sbar.h"
|
#include "sbar.h"
|
||||||
#include "sound.h"
|
#include "sound.h"
|
||||||
#include "merged.h"
|
#include "merged.h"
|
||||||
#include "render.h"
|
#include "render.h"
|
||||||
#include "client.h"
|
#include "client.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "vm.h"
|
#include "vm.h"
|
||||||
|
|
||||||
|
@ -173,10 +175,8 @@ extern "C" {
|
||||||
#include "progs.h"
|
#include "progs.h"
|
||||||
#endif
|
#endif
|
||||||
#include "world.h"
|
#include "world.h"
|
||||||
#ifndef CLIENTONLY
|
|
||||||
//#ifdef Q2SERVER
|
|
||||||
#include "q2game.h"
|
#include "q2game.h"
|
||||||
//#endif
|
#ifndef CLIENTONLY
|
||||||
#include "server.h"
|
#include "server.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -218,7 +218,7 @@ typedef struct quakeparms_s
|
||||||
{
|
{
|
||||||
char *basedir;
|
char *basedir;
|
||||||
int argc;
|
int argc;
|
||||||
char **argv;
|
const char **argv;
|
||||||
void *membase;
|
void *membase;
|
||||||
unsigned int memsize;
|
unsigned int memsize;
|
||||||
} quakeparms_t;
|
} quakeparms_t;
|
||||||
|
@ -238,6 +238,7 @@ extern qboolean noclip_anglehack;
|
||||||
extern quakeparms_t host_parms;
|
extern quakeparms_t host_parms;
|
||||||
|
|
||||||
extern cvar_t com_gamename;
|
extern cvar_t com_gamename;
|
||||||
|
extern cvar_t com_modname;
|
||||||
extern cvar_t sys_ticrate;
|
extern cvar_t sys_ticrate;
|
||||||
extern cvar_t sys_nostdout;
|
extern cvar_t sys_nostdout;
|
||||||
extern cvar_t developer;
|
extern cvar_t developer;
|
||||||
|
|
|
@ -383,6 +383,7 @@ void GL_InfinatePerspective(double fovx, double fovy, double zNear);
|
||||||
void GLMod_Init (void);
|
void GLMod_Init (void);
|
||||||
int Mod_TagNumForName(struct model_s *model, char *name);
|
int Mod_TagNumForName(struct model_s *model, char *name);
|
||||||
int Mod_SkinNumForName(struct model_s *model, char *name);
|
int Mod_SkinNumForName(struct model_s *model, char *name);
|
||||||
|
int Mod_FrameNumForName(struct model_s *model, char *name);
|
||||||
|
|
||||||
void GLMod_ClearAll (void);
|
void GLMod_ClearAll (void);
|
||||||
struct model_s *GLMod_ForName (char *name, qboolean crash);
|
struct model_s *GLMod_ForName (char *name, qboolean crash);
|
||||||
|
@ -444,11 +445,11 @@ void CLQ2_FlyEffect(struct q2centity_s *ent, vec3_t org);
|
||||||
void CLQ2_DiminishingTrail(vec3_t oldorg, vec3_t neworg, struct q2centity_s *ent, unsigned int effects);
|
void CLQ2_DiminishingTrail(vec3_t oldorg, vec3_t neworg, struct q2centity_s *ent, unsigned int effects);
|
||||||
void CLQ2_BlasterTrail2(vec3_t oldorg, vec3_t neworg);
|
void CLQ2_BlasterTrail2(vec3_t oldorg, vec3_t neworg);
|
||||||
|
|
||||||
void WritePCXfile (char *filename, qbyte *data, int width, int height, int rowbytes, qbyte *palette, qboolean upload); //data is 8bit.
|
void WritePCXfile (const char *filename, qbyte *data, int width, int height, int rowbytes, qbyte *palette, qboolean upload); //data is 8bit.
|
||||||
qbyte *ReadPCXFile(qbyte *buf, int length, int *width, int *height);
|
qbyte *ReadPCXFile(qbyte *buf, int length, int *width, int *height);
|
||||||
qbyte *ReadTargaFile(qbyte *buf, int length, int *width, int *height, int asgrey);
|
qbyte *ReadTargaFile(qbyte *buf, int length, int *width, int *height, int asgrey);
|
||||||
qbyte *ReadJPEGFile(qbyte *infile, int length, int *width, int *height);
|
qbyte *ReadJPEGFile(qbyte *infile, int length, int *width, int *height);
|
||||||
qbyte *ReadPNGFile(qbyte *buf, int length, int *width, int *height, char *name);
|
qbyte *ReadPNGFile(qbyte *buf, int length, int *width, int *height, const char *name);
|
||||||
qbyte *ReadPCXPalette(qbyte *buf, int len, qbyte *out);
|
qbyte *ReadPCXPalette(qbyte *buf, int len, qbyte *out);
|
||||||
|
|
||||||
void BoostGamma(qbyte *rgba, int width, int height);
|
void BoostGamma(qbyte *rgba, int width, int height);
|
||||||
|
|
|
@ -179,8 +179,15 @@ static cvar_t vid_bpp = SCVARF ("vid_bpp", "32",
|
||||||
CVAR_ARCHIVE | CVAR_RENDERERLATCH);
|
CVAR_ARCHIVE | CVAR_RENDERERLATCH);
|
||||||
static cvar_t vid_desktopsettings = SCVARF ("vid_desktopsettings", "0",
|
static cvar_t vid_desktopsettings = SCVARF ("vid_desktopsettings", "0",
|
||||||
CVAR_ARCHIVE | CVAR_RENDERERLATCH);
|
CVAR_ARCHIVE | CVAR_RENDERERLATCH);
|
||||||
|
#ifdef NPQTV
|
||||||
|
static cvar_t vid_fullscreen_npqtv = SCVARF ("vid_fullscreen", "1",
|
||||||
|
CVAR_ARCHIVE | CVAR_RENDERERLATCH);
|
||||||
|
static cvar_t vid_fullscreen = SCVARF ("vid_fullscreen_embedded", "0",
|
||||||
|
CVAR_ARCHIVE | CVAR_RENDERERLATCH);
|
||||||
|
#else
|
||||||
static cvar_t vid_fullscreen = SCVARF ("vid_fullscreen", "1",
|
static cvar_t vid_fullscreen = SCVARF ("vid_fullscreen", "1",
|
||||||
CVAR_ARCHIVE | CVAR_RENDERERLATCH);
|
CVAR_ARCHIVE | CVAR_RENDERERLATCH);
|
||||||
|
#endif
|
||||||
static cvar_t vid_height = SCVARF ("vid_height", "480",
|
static cvar_t vid_height = SCVARF ("vid_height", "480",
|
||||||
CVAR_ARCHIVE | CVAR_RENDERERLATCH);
|
CVAR_ARCHIVE | CVAR_RENDERERLATCH);
|
||||||
static cvar_t vid_multisample = SCVARF ("vid_multisample", "0",
|
static cvar_t vid_multisample = SCVARF ("vid_multisample", "0",
|
||||||
|
@ -571,6 +578,7 @@ void Renderer_Init(void)
|
||||||
currentrendererstate.bpp = -1; //no previous.
|
currentrendererstate.bpp = -1; //no previous.
|
||||||
|
|
||||||
currentrendererstate.renderer = -1;
|
currentrendererstate.renderer = -1;
|
||||||
|
qrenderer = -1;
|
||||||
|
|
||||||
Cmd_AddCommand("setrenderer", R_SetRenderer_f);
|
Cmd_AddCommand("setrenderer", R_SetRenderer_f);
|
||||||
Cmd_AddCommand("vid_restart", R_RestartRenderer_f);
|
Cmd_AddCommand("vid_restart", R_RestartRenderer_f);
|
||||||
|
@ -593,6 +601,9 @@ void Renderer_Init(void)
|
||||||
Cvar_Register (&_windowed_mouse, VIDCOMMANDGROUP);
|
Cvar_Register (&_windowed_mouse, VIDCOMMANDGROUP);
|
||||||
Cvar_Register (&vid_renderer, VIDCOMMANDGROUP);
|
Cvar_Register (&vid_renderer, VIDCOMMANDGROUP);
|
||||||
|
|
||||||
|
#ifdef NPQTV
|
||||||
|
Cvar_Register (&vid_fullscreen_npqtv, VIDCOMMANDGROUP);
|
||||||
|
#endif
|
||||||
Cvar_Register (&vid_fullscreen, VIDCOMMANDGROUP);
|
Cvar_Register (&vid_fullscreen, VIDCOMMANDGROUP);
|
||||||
// Cvar_Register (&vid_stretch, VIDCOMMANDGROUP);
|
// Cvar_Register (&vid_stretch, VIDCOMMANDGROUP);
|
||||||
Cvar_Register (&vid_bpp, VIDCOMMANDGROUP);
|
Cvar_Register (&vid_bpp, VIDCOMMANDGROUP);
|
||||||
|
@ -772,6 +783,7 @@ void (*Mod_Think) (void);
|
||||||
//qboolean (*Mod_GetTag) (struct model_s *model, int tagnum, int frame, int frame2, float f2ness, float f1time, float f2time, float *transforms);
|
//qboolean (*Mod_GetTag) (struct model_s *model, int tagnum, int frame, int frame2, float f2ness, float f1time, float f2time, float *transforms);
|
||||||
//int (*Mod_TagNumForName) (struct model_s *model, char *name);
|
//int (*Mod_TagNumForName) (struct model_s *model, char *name);
|
||||||
int (*Mod_SkinForName) (struct model_s *model, char *name);
|
int (*Mod_SkinForName) (struct model_s *model, char *name);
|
||||||
|
int (*Mod_FrameForName) (struct model_s *model, char *name);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -790,7 +802,7 @@ void (*VID_SetWindowCaption) (char *msg);
|
||||||
|
|
||||||
void (*SCR_UpdateScreen) (void);
|
void (*SCR_UpdateScreen) (void);
|
||||||
|
|
||||||
r_qrenderer_t qrenderer=-1;
|
r_qrenderer_t qrenderer;
|
||||||
char *q_renderername = "Non-Selected renderer";
|
char *q_renderername = "Non-Selected renderer";
|
||||||
|
|
||||||
|
|
||||||
|
@ -883,6 +895,7 @@ rendererinfo_t dedicatedrendererinfo = {
|
||||||
NULL, //Mod_GetTag
|
NULL, //Mod_GetTag
|
||||||
NULL, //fixme: server will need this one at some point.
|
NULL, //fixme: server will need this one at some point.
|
||||||
NULL,
|
NULL,
|
||||||
|
NULL,
|
||||||
|
|
||||||
NULL, //VID_Init,
|
NULL, //VID_Init,
|
||||||
NULL, //VID_DeInit,
|
NULL, //VID_DeInit,
|
||||||
|
@ -976,6 +989,7 @@ rendererinfo_t softwarerendererinfo = {
|
||||||
NULL, //Mod_GetTag
|
NULL, //Mod_GetTag
|
||||||
NULL, //Mod_TagForName
|
NULL, //Mod_TagForName
|
||||||
NULL,
|
NULL,
|
||||||
|
NULL,
|
||||||
|
|
||||||
SWVID_Init,
|
SWVID_Init,
|
||||||
SWVID_Shutdown,
|
SWVID_Shutdown,
|
||||||
|
@ -1073,6 +1087,7 @@ rendererinfo_t openglrendererinfo = {
|
||||||
Mod_GetTag,
|
Mod_GetTag,
|
||||||
Mod_TagNumForName,
|
Mod_TagNumForName,
|
||||||
Mod_SkinNumForName,
|
Mod_SkinNumForName,
|
||||||
|
Mod_FrameNumForName,
|
||||||
|
|
||||||
GLVID_Init,
|
GLVID_Init,
|
||||||
GLVID_DeInit,
|
GLVID_DeInit,
|
||||||
|
@ -1108,7 +1123,9 @@ rendererinfo_t *pd3d9rendererinfo = &d3d9rendererinfo;
|
||||||
|
|
||||||
rendererinfo_t **rendererinfo[] =
|
rendererinfo_t **rendererinfo[] =
|
||||||
{
|
{
|
||||||
|
#ifndef NPQTV
|
||||||
&pdedicatedrendererinfo,
|
&pdedicatedrendererinfo,
|
||||||
|
#endif
|
||||||
#ifdef SWQUAKE
|
#ifdef SWQUAKE
|
||||||
&psoftwarerendererinfo,
|
&psoftwarerendererinfo,
|
||||||
#endif
|
#endif
|
||||||
|
@ -1554,10 +1571,8 @@ void D3DSucks(void)
|
||||||
Sys_Error("Failed to reload content after mode switch\n");
|
Sys_Error("Failed to reload content after mode switch\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
qboolean R_ApplyRenderer (rendererstate_t *newr)
|
void R_ShutdownRenderer(void)
|
||||||
{
|
{
|
||||||
if (newr->bpp == -1)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
CL_AllowIndependantSendCmd(false); //FIXME: figure out exactly which parts are going to affect the model loading.
|
CL_AllowIndependantSendCmd(false); //FIXME: figure out exactly which parts are going to affect the model loading.
|
||||||
|
|
||||||
|
@ -1581,6 +1596,14 @@ qboolean R_ApplyRenderer (rendererstate_t *newr)
|
||||||
COM_FlushTempoaryPacks();
|
COM_FlushTempoaryPacks();
|
||||||
|
|
||||||
S_Shutdown();
|
S_Shutdown();
|
||||||
|
}
|
||||||
|
|
||||||
|
qboolean R_ApplyRenderer (rendererstate_t *newr)
|
||||||
|
{
|
||||||
|
if (newr->bpp == -1)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
R_ShutdownRenderer();
|
||||||
|
|
||||||
if (qrenderer == QR_NONE || qrenderer==-1)
|
if (qrenderer == QR_NONE || qrenderer==-1)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1164,7 +1164,7 @@ void Sbar_FillPC (int x, int y, int w, int h, unsigned int pcolour)
|
||||||
{
|
{
|
||||||
if (pcolour >= 16)
|
if (pcolour >= 16)
|
||||||
{
|
{
|
||||||
Draw_FillRGB (x, y, w, h, (pcolour&0xff)/255.0f, ((pcolour&0xff00)>>8)/255.0f, ((pcolour&0xff0000)>>16)/255.0f);
|
Draw_FillRGB (x, y, w, h, ((pcolour&0xff0000)>>16)/255.0f, ((pcolour&0xff00)>>8)/255.0f, (pcolour&0xff)/255.0f);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -2255,6 +2255,10 @@ void Sbar_Draw (void)
|
||||||
|
|
||||||
sbar_parsingteamstatuses = false;
|
sbar_parsingteamstatuses = false;
|
||||||
|
|
||||||
|
#ifdef HLCLIENT
|
||||||
|
if (CLHL_DrawHud())
|
||||||
|
return;
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef Q2CLIENT
|
#ifdef Q2CLIENT
|
||||||
if (cls.protocol == CP_QUAKE2)
|
if (cls.protocol == CP_QUAKE2)
|
||||||
|
|
|
@ -563,6 +563,9 @@ void Skin_FlushPlayers(void)
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; i < MAX_CLIENTS; i++)
|
for (i = 0; i < MAX_CLIENTS; i++)
|
||||||
cl.players[i].skin = NULL;
|
cl.players[i].skin = NULL;
|
||||||
|
|
||||||
|
for (i = 0; i < MAX_CLIENTS; i++)
|
||||||
|
CL_NewTranslation(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -102,6 +102,11 @@ void S_AmbientOn (void)
|
||||||
snd_ambient = true;
|
snd_ambient = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
qboolean S_HaveOutput(void)
|
||||||
|
{
|
||||||
|
return sound_started && sndcardinfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void S_SoundInfo_f(void)
|
void S_SoundInfo_f(void)
|
||||||
{
|
{
|
||||||
|
@ -361,7 +366,7 @@ void S_Startup (void)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
sound_started = 1;
|
sound_started = !!sndcardinfo;
|
||||||
|
|
||||||
S_ClearRaw();
|
S_ClearRaw();
|
||||||
}
|
}
|
||||||
|
@ -540,11 +545,6 @@ void S_Init (void)
|
||||||
{
|
{
|
||||||
int p;
|
int p;
|
||||||
|
|
||||||
if (snd_initialized) //whoops
|
|
||||||
{
|
|
||||||
Con_Printf("Sound is already initialized\n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Con_DPrintf("\nSound Initialization\n");
|
Con_DPrintf("\nSound Initialization\n");
|
||||||
|
|
||||||
Cmd_AddCommand("play", S_Play);
|
Cmd_AddCommand("play", S_Play);
|
||||||
|
@ -1115,6 +1115,58 @@ void S_StaticSound (sfx_t *sfx, vec3_t origin, float vol, float attenuation)
|
||||||
|
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
|
|
||||||
|
void S_Music_Clear(sfx_t *onlyifsample)
|
||||||
|
{
|
||||||
|
//stops the current BGM music
|
||||||
|
//calling this will trigger Media_NextTrack later
|
||||||
|
sfx_t *s;
|
||||||
|
soundcardinfo_t *sc;
|
||||||
|
int i;
|
||||||
|
for (i = NUM_AMBIENTS; i < NUM_AMBIENTS + NUM_MUSICS; i++)
|
||||||
|
{
|
||||||
|
for (sc = sndcardinfo; sc; sc=sc->next)
|
||||||
|
{
|
||||||
|
s = sc->channel[i].sfx;
|
||||||
|
if (!s)
|
||||||
|
continue;
|
||||||
|
if (onlyifsample && s != onlyifsample)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
sc->channel[i].end = 0;
|
||||||
|
sc->channel[i].sfx = NULL;
|
||||||
|
|
||||||
|
if (s)
|
||||||
|
if (s->decoder)
|
||||||
|
if (!S_IsPlayingSomewhere(s)) //if we aint playing it elsewhere, free it compleatly.
|
||||||
|
{
|
||||||
|
s->decoder->abort(s);
|
||||||
|
if (s->cache.data)
|
||||||
|
Cache_Free(&s->cache);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void S_Music_Seek(float time)
|
||||||
|
{
|
||||||
|
soundcardinfo_t *sc;
|
||||||
|
int i;
|
||||||
|
for (i = NUM_AMBIENTS; i < NUM_AMBIENTS + NUM_MUSICS; i++)
|
||||||
|
{
|
||||||
|
for (sc = sndcardinfo; sc; sc=sc->next)
|
||||||
|
{
|
||||||
|
sc->channel[i].pos += sc->sn.speed*time;
|
||||||
|
sc->channel[i].end += sc->sn.speed*time;
|
||||||
|
|
||||||
|
if (sc->channel[i].pos < 0)
|
||||||
|
{ //clamp to the start of the track
|
||||||
|
sc->channel[i].end -= sc->channel[i].pos;
|
||||||
|
sc->channel[i].pos=0;
|
||||||
|
}
|
||||||
|
//if we seek over the end, ignore it. The sound playing code will spot that.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
===================
|
===================
|
||||||
S_UpdateAmbientSounds
|
S_UpdateAmbientSounds
|
||||||
|
@ -1138,7 +1190,7 @@ void S_UpdateAmbientSounds (soundcardinfo_t *sc)
|
||||||
chan = &sc->channel[i];
|
chan = &sc->channel[i];
|
||||||
if (!chan->sfx)
|
if (!chan->sfx)
|
||||||
{
|
{
|
||||||
char *nexttrack = Media_NextTrack();
|
char *nexttrack = Media_NextTrack(i-NUM_AMBIENTS);
|
||||||
sfxcache_t *scache;
|
sfxcache_t *scache;
|
||||||
sfx_t *newmusic;
|
sfx_t *newmusic;
|
||||||
|
|
||||||
|
@ -1210,7 +1262,7 @@ S_Update
|
||||||
Called once each time through the main loop
|
Called once each time through the main loop
|
||||||
============
|
============
|
||||||
*/
|
*/
|
||||||
void S_Update(vec3_t origin, vec3_t forward, vec3_t right, vec3_t up)
|
void S_UpdateListener(vec3_t origin, vec3_t forward, vec3_t right, vec3_t up, qboolean dontmix)
|
||||||
{
|
{
|
||||||
soundcardinfo_t *sc;
|
soundcardinfo_t *sc;
|
||||||
|
|
||||||
|
@ -1219,12 +1271,24 @@ void S_Update(vec3_t origin, vec3_t forward, vec3_t right, vec3_t up)
|
||||||
VectorCopy(right, listener_right);
|
VectorCopy(right, listener_right);
|
||||||
VectorCopy(up, listener_up);
|
VectorCopy(up, listener_up);
|
||||||
|
|
||||||
S_RunCapture();
|
if (dontmix)
|
||||||
|
{
|
||||||
|
S_RunCapture();
|
||||||
|
|
||||||
for (sc = sndcardinfo; sc; sc = sc->next)
|
for (sc = sndcardinfo; sc; sc = sc->next)
|
||||||
S_UpdateCard(sc);
|
S_UpdateCard(sc);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void S_GetListenerInfo(float *origin, float *forward, float *right, float *up)
|
||||||
|
{
|
||||||
|
VectorCopy(listener_origin, origin);
|
||||||
|
VectorCopy(listener_forward, forward);
|
||||||
|
VectorCopy(listener_right, right);
|
||||||
|
VectorCopy(listener_up, up);
|
||||||
|
}
|
||||||
|
|
||||||
void S_UpdateCard(soundcardinfo_t *sc)
|
void S_UpdateCard(soundcardinfo_t *sc)
|
||||||
{
|
{
|
||||||
int i, j;
|
int i, j;
|
||||||
|
|
|
@ -843,15 +843,21 @@ sfxcache_t *S_LoadSound (sfx_t *s)
|
||||||
// load it in
|
// load it in
|
||||||
|
|
||||||
data = NULL;
|
data = NULL;
|
||||||
if (*name == '*')
|
if (*name == '*') //q2 sexed sounds
|
||||||
{
|
{
|
||||||
|
//clq2_parsestartsound detects this also
|
||||||
|
//here we just precache the male sound name, which provides us with our default
|
||||||
Q_strcpy(namebuffer, "players/male/"); //q2
|
Q_strcpy(namebuffer, "players/male/"); //q2
|
||||||
Q_strcat(namebuffer, name+1); //q2
|
Q_strcat(namebuffer, name+1); //q2
|
||||||
}
|
}
|
||||||
else if (name[0] == '.' && name[1] == '.' && name[2] == '/')
|
else if (name[0] == '.' && name[1] == '.' && name[2] == '/')
|
||||||
|
{
|
||||||
|
//not relative to sound/
|
||||||
Q_strcpy(namebuffer, name+3);
|
Q_strcpy(namebuffer, name+3);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
//q1 behaviour, relative to sound/
|
||||||
Q_strcpy(namebuffer, "sound/");
|
Q_strcpy(namebuffer, "sound/");
|
||||||
Q_strcat(namebuffer, name);
|
Q_strcat(namebuffer, name);
|
||||||
data = COM_LoadStackFile(name, stackbuf, sizeof(stackbuf));
|
data = COM_LoadStackFile(name, stackbuf, sizeof(stackbuf));
|
||||||
|
@ -874,7 +880,7 @@ sfxcache_t *S_LoadSound (sfx_t *s)
|
||||||
|
|
||||||
if (!data)
|
if (!data)
|
||||||
{
|
{
|
||||||
//FIXME: check to see if qued for download.
|
//FIXME: check to see if queued for download.
|
||||||
Con_DPrintf ("Couldn't load %s\n", namebuffer);
|
Con_DPrintf ("Couldn't load %s\n", namebuffer);
|
||||||
s->failedload = true;
|
s->failedload = true;
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
1002
engine/client/sys_npqtv.c
Normal file
1002
engine/client/sys_npqtv.c
Normal file
File diff suppressed because it is too large
Load diff
|
@ -37,6 +37,11 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
#include <process.h>
|
#include <process.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if !defined(CLIENTONLY) && !defined(SERVERONLY)
|
||||||
|
qboolean isDedicated = false;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
HWND sys_hijackwindow;
|
||||||
|
|
||||||
void Sys_CloseLibrary(dllhandle_t *lib)
|
void Sys_CloseLibrary(dllhandle_t *lib)
|
||||||
{
|
{
|
||||||
|
@ -51,16 +56,19 @@ dllhandle_t *Sys_LoadLibrary(char *name, dllfunction_t *funcs)
|
||||||
if (!lib)
|
if (!lib)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
for (i = 0; funcs[i].name; i++)
|
if (funcs)
|
||||||
{
|
{
|
||||||
*funcs[i].funcptr = GetProcAddress(lib, funcs[i].name);
|
for (i = 0; funcs[i].name; i++)
|
||||||
if (!*funcs[i].funcptr)
|
{
|
||||||
break;
|
*funcs[i].funcptr = GetProcAddress(lib, funcs[i].name);
|
||||||
}
|
if (!*funcs[i].funcptr)
|
||||||
if (funcs[i].name)
|
break;
|
||||||
{
|
}
|
||||||
Sys_CloseLibrary((dllhandle_t*)lib);
|
if (funcs[i].name)
|
||||||
lib = NULL;
|
{
|
||||||
|
Sys_CloseLibrary((dllhandle_t*)lib);
|
||||||
|
lib = NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return (dllhandle_t*)lib;
|
return (dllhandle_t*)lib;
|
||||||
|
@ -462,7 +470,7 @@ qboolean Sys_remove (char *path)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
int Sys_EnumerateFiles (char *gpath, char *match, int (*func)(char *, int, void *), void *parm)
|
int Sys_EnumerateFiles (const char *gpath, const char *match, int (*func)(const char *, int, void *), void *parm)
|
||||||
{
|
{
|
||||||
HANDLE r;
|
HANDLE r;
|
||||||
WIN32_FIND_DATA fd;
|
WIN32_FIND_DATA fd;
|
||||||
|
@ -718,7 +726,14 @@ void Sys_Quit (void)
|
||||||
SV_Shutdown();
|
SV_Shutdown();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef NPQTV
|
||||||
|
{
|
||||||
|
extern jmp_buf host_abort;
|
||||||
|
longjmp (host_abort, 1);
|
||||||
|
}
|
||||||
|
#else
|
||||||
exit (0);
|
exit (0);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1076,9 +1091,9 @@ void Sys_Sleep (void)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Sys_SendKeyEvents (void)
|
void Sys_SendKeyEvents (void)
|
||||||
{
|
{
|
||||||
|
#ifndef NPQTV
|
||||||
MSG msg;
|
MSG msg;
|
||||||
|
|
||||||
if (isDedicated)
|
if (isDedicated)
|
||||||
|
@ -1100,6 +1115,7 @@ void Sys_SendKeyEvents (void)
|
||||||
TranslateMessage (&msg);
|
TranslateMessage (&msg);
|
||||||
DispatchMessage (&msg);
|
DispatchMessage (&msg);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1129,6 +1145,128 @@ void SleepUntilInput (int time)
|
||||||
MsgWaitForMultipleObjects(1, &tevent, FALSE, time, QS_ALLINPUT);
|
MsgWaitForMultipleObjects(1, &tevent, FALSE, time, QS_ALLINPUT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
qboolean Sys_Startup_CheckMem(quakeparms_t *parms)
|
||||||
|
{
|
||||||
|
int t;
|
||||||
|
MEMORYSTATUS lpBuffer;
|
||||||
|
lpBuffer.dwLength = sizeof(MEMORYSTATUS);
|
||||||
|
GlobalMemoryStatus (&lpBuffer);
|
||||||
|
|
||||||
|
// take the greater of all the available memory or half the total memory,
|
||||||
|
// but at least 8 Mb and no more than 16 Mb, unless they explicitly
|
||||||
|
// request otherwise
|
||||||
|
parms->memsize = lpBuffer.dwAvailPhys;
|
||||||
|
|
||||||
|
if (parms->memsize < MINIMUM_WIN_MEMORY)
|
||||||
|
parms->memsize = MINIMUM_WIN_MEMORY;
|
||||||
|
|
||||||
|
if (parms->memsize < (lpBuffer.dwTotalPhys >> 1))
|
||||||
|
parms->memsize = lpBuffer.dwTotalPhys >> 1;
|
||||||
|
|
||||||
|
if (parms->memsize > MAXIMUM_WIN_MEMORY)
|
||||||
|
parms->memsize = MAXIMUM_WIN_MEMORY;
|
||||||
|
|
||||||
|
if (COM_CheckParm ("-heapsize"))
|
||||||
|
{
|
||||||
|
t = COM_CheckParm("-heapsize") + 1;
|
||||||
|
|
||||||
|
if (t < com_argc)
|
||||||
|
parms->memsize = Q_atoi (com_argv[t]) * 1024;
|
||||||
|
}
|
||||||
|
else if (COM_CheckParm ("-mem"))
|
||||||
|
{
|
||||||
|
t = COM_CheckParm("-mem") + 1;
|
||||||
|
|
||||||
|
if (t < com_argc)
|
||||||
|
parms->memsize = Q_atoi (com_argv[t]) * 1024*1024;
|
||||||
|
}
|
||||||
|
|
||||||
|
parms->membase = VirtualAlloc (NULL, parms->memsize, MEM_RESERVE, PAGE_NOACCESS);
|
||||||
|
// parms->membase = malloc (parms.memsize);
|
||||||
|
|
||||||
|
if (!parms->membase)
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef NPQTV
|
||||||
|
static quakeparms_t parms;
|
||||||
|
double lastlooptime;
|
||||||
|
qboolean NPQTV_Sys_Startup(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
if (!host_initialized)
|
||||||
|
{
|
||||||
|
TL_InitLanguages();
|
||||||
|
|
||||||
|
parms.argc = argc;
|
||||||
|
parms.argv = argv;
|
||||||
|
parms.basedir = argv[0];
|
||||||
|
COM_InitArgv (parms.argc, parms.argv);
|
||||||
|
|
||||||
|
if (!Sys_Startup_CheckMem(&parms))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
Host_Init (&parms);
|
||||||
|
}
|
||||||
|
|
||||||
|
lastlooptime = Sys_DoubleTime ();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void NPQTV_Sys_MainLoop(void)
|
||||||
|
{
|
||||||
|
double duratrion, newtime;
|
||||||
|
|
||||||
|
if (isDedicated)
|
||||||
|
{
|
||||||
|
#ifndef CLIENTONLY
|
||||||
|
NET_Sleep(50, false);
|
||||||
|
|
||||||
|
// find time passed since last cycle
|
||||||
|
newtime = Sys_DoubleTime ();
|
||||||
|
duratrion = newtime - lastlooptime;
|
||||||
|
lastlooptime = newtime;
|
||||||
|
|
||||||
|
SV_Frame ();
|
||||||
|
#else
|
||||||
|
Sys_Error("wut?");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
#ifndef SERVERONLY
|
||||||
|
newtime = Sys_DoubleTime ();
|
||||||
|
duratrion = newtime - lastlooptime;
|
||||||
|
Host_Frame (duratrion);
|
||||||
|
lastlooptime = newtime;
|
||||||
|
|
||||||
|
SetHookState(sys_disableWinKeys.value);
|
||||||
|
|
||||||
|
// Sleep(0);
|
||||||
|
#else
|
||||||
|
Sys_Error("wut?");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void NPQTV_Sys_Shutdown(void)
|
||||||
|
{
|
||||||
|
//disconnect server/client/etc
|
||||||
|
CL_Disconnect_f();
|
||||||
|
R_ShutdownRenderer();
|
||||||
|
|
||||||
|
Host_Shutdown();
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
/*
|
/*
|
||||||
==================
|
==================
|
||||||
WinMain
|
WinMain
|
||||||
|
@ -1140,9 +1278,6 @@ char *argv[MAX_NUM_ARGVS];
|
||||||
static char exename[256];
|
static char exename[256];
|
||||||
HWND hwnd_dialog;
|
HWND hwnd_dialog;
|
||||||
|
|
||||||
#if !defined(CLIENTONLY) && !defined(SERVERONLY)
|
|
||||||
qboolean isDedicated = false;
|
|
||||||
#endif
|
|
||||||
/*
|
/*
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
|
@ -1160,11 +1295,9 @@ int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLin
|
||||||
// MSG msg;
|
// MSG msg;
|
||||||
quakeparms_t parms;
|
quakeparms_t parms;
|
||||||
double time, oldtime, newtime;
|
double time, oldtime, newtime;
|
||||||
MEMORYSTATUS lpBuffer;
|
|
||||||
char cwd[1024];
|
char cwd[1024];
|
||||||
int t;
|
|
||||||
RECT rect;
|
RECT rect;
|
||||||
char *qtvfile = NULL;
|
const char *qtvfile = NULL;
|
||||||
|
|
||||||
/* previous instances do not exist in Win32 */
|
/* previous instances do not exist in Win32 */
|
||||||
if (hPrevInstance)
|
if (hPrevInstance)
|
||||||
|
@ -1181,9 +1314,6 @@ int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLin
|
||||||
global_hInstance = hInstance;
|
global_hInstance = hInstance;
|
||||||
global_nCmdShow = nCmdShow;
|
global_nCmdShow = nCmdShow;
|
||||||
|
|
||||||
lpBuffer.dwLength = sizeof(MEMORYSTATUS);
|
|
||||||
GlobalMemoryStatus (&lpBuffer);
|
|
||||||
|
|
||||||
parms.argc = 1;
|
parms.argc = 1;
|
||||||
argv[0] = exename;
|
argv[0] = exename;
|
||||||
|
|
||||||
|
@ -1301,41 +1431,11 @@ int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLin
|
||||||
SetForegroundWindow (hwnd_dialog);
|
SetForegroundWindow (hwnd_dialog);
|
||||||
}
|
}
|
||||||
|
|
||||||
// take the greater of all the available memory or half the total memory,
|
|
||||||
// but at least 8 Mb and no more than 16 Mb, unless they explicitly
|
|
||||||
// request otherwise
|
|
||||||
parms.memsize = lpBuffer.dwAvailPhys;
|
|
||||||
|
|
||||||
if (parms.memsize < MINIMUM_WIN_MEMORY)
|
if (!Sys_Startup_CheckMem(&parms))
|
||||||
parms.memsize = MINIMUM_WIN_MEMORY;
|
|
||||||
|
|
||||||
if (parms.memsize < (lpBuffer.dwTotalPhys >> 1))
|
|
||||||
parms.memsize = lpBuffer.dwTotalPhys >> 1;
|
|
||||||
|
|
||||||
if (parms.memsize > MAXIMUM_WIN_MEMORY)
|
|
||||||
parms.memsize = MAXIMUM_WIN_MEMORY;
|
|
||||||
|
|
||||||
if (COM_CheckParm ("-heapsize"))
|
|
||||||
{
|
|
||||||
t = COM_CheckParm("-heapsize") + 1;
|
|
||||||
|
|
||||||
if (t < com_argc)
|
|
||||||
parms.memsize = Q_atoi (com_argv[t]) * 1024;
|
|
||||||
}
|
|
||||||
else if (COM_CheckParm ("-mem"))
|
|
||||||
{
|
|
||||||
t = COM_CheckParm("-mem") + 1;
|
|
||||||
|
|
||||||
if (t < com_argc)
|
|
||||||
parms.memsize = Q_atoi (com_argv[t]) * 1024*1024;
|
|
||||||
}
|
|
||||||
|
|
||||||
parms.membase = VirtualAlloc (NULL, parms.memsize, MEM_RESERVE, PAGE_NOACCESS);
|
|
||||||
// parms.membase = malloc (parms.memsize);
|
|
||||||
|
|
||||||
if (!parms.membase)
|
|
||||||
Sys_Error ("Not enough memory free; check disk space\n");
|
Sys_Error ("Not enough memory free; check disk space\n");
|
||||||
|
|
||||||
|
|
||||||
#ifndef CLIENTONLY
|
#ifndef CLIENTONLY
|
||||||
if (isDedicated) //compleate denial to switch to anything else - many of the client structures are not initialized.
|
if (isDedicated) //compleate denial to switch to anything else - many of the client structures are not initialized.
|
||||||
{
|
{
|
||||||
|
@ -1429,6 +1529,7 @@ int __cdecl main(void)
|
||||||
FreeConsole();
|
FreeConsole();
|
||||||
return WinMain(GetModuleHandle(NULL), NULL, GetCommandLine(), SW_NORMAL);
|
return WinMain(GetModuleHandle(NULL), NULL, GetCommandLine(), SW_NORMAL);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
qboolean Sys_GetDesktopParameters(int *width, int *height, int *bpp, int *refreshrate)
|
qboolean Sys_GetDesktopParameters(int *width, int *height, int *bpp, int *refreshrate)
|
||||||
{
|
{
|
||||||
|
|
|
@ -312,7 +312,7 @@ void EditorOpenFile(char *name)
|
||||||
memcpy(firstblock->data, line, len);
|
memcpy(firstblock->data, line, len);
|
||||||
if (editprogfuncs)
|
if (editprogfuncs)
|
||||||
{
|
{
|
||||||
if (editprogfuncs->ToggleBreak(editprogfuncs, OpenEditorFile+strlen(com_gamedir)+1, i, 3))
|
if (editprogfuncs->ToggleBreak(editprogfuncs, OpenEditorFile, i, 3))
|
||||||
{
|
{
|
||||||
firstblock->flags |= FB_BREAK;
|
firstblock->flags |= FB_BREAK;
|
||||||
}
|
}
|
||||||
|
@ -321,7 +321,7 @@ void EditorOpenFile(char *name)
|
||||||
{
|
{
|
||||||
if (svprogfuncs)
|
if (svprogfuncs)
|
||||||
{
|
{
|
||||||
if (svprogfuncs->ToggleBreak(svprogfuncs, OpenEditorFile+strlen(com_gamedir)+1, i, 3))
|
if (svprogfuncs->ToggleBreak(svprogfuncs, OpenEditorFile, i, 3))
|
||||||
{
|
{
|
||||||
firstblock->flags |= FB_BREAK;
|
firstblock->flags |= FB_BREAK;
|
||||||
}
|
}
|
||||||
|
|
|
@ -444,17 +444,13 @@ void Validation_DelatchRulesets(void)
|
||||||
Con_DPrintf("Ruleset deactivated\n");
|
Con_DPrintf("Ruleset deactivated\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
void Validation_AllChecks(void)
|
qboolean Validation_GetCurrentRulesetName(char *rsnames, int resultbuflen, qboolean enforcechosenrulesets)
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void Validation_OldRuleset(void)
|
|
||||||
{ //this code is more complex than it needs to be
|
{ //this code is more complex than it needs to be
|
||||||
//this allows for the ruleset code to print a ruleset name that is applied via the cvars, but not directly named by the user
|
//this allows for the ruleset code to print a ruleset name that is applied via the cvars, but not directly named by the user
|
||||||
cvar_t *var;
|
cvar_t *var;
|
||||||
ruleset_t *rs;
|
ruleset_t *rs;
|
||||||
int i;
|
int i;
|
||||||
char rsnames[1024];
|
|
||||||
rs = rulesets;
|
rs = rulesets;
|
||||||
*rsnames = '\0';
|
*rsnames = '\0';
|
||||||
|
|
||||||
|
@ -484,34 +480,75 @@ void Validation_OldRuleset(void)
|
||||||
{
|
{
|
||||||
if (*rsnames)
|
if (*rsnames)
|
||||||
{
|
{
|
||||||
Q_strncatz(rsnames, ", ", sizeof(rsnames));
|
Q_strncatz(rsnames, ", ", resultbuflen);
|
||||||
}
|
}
|
||||||
Q_strncatz(rsnames, rs->rulesetname, sizeof(rsnames));
|
Q_strncatz(rsnames, rs->rulesetname, resultbuflen);
|
||||||
rs->flagged = true;
|
rs->flagged = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (*rsnames)
|
if (*rsnames)
|
||||||
{
|
{
|
||||||
Cbuf_AddText(va("say Ruleset: %s\n", rsnames), RESTRICT_LOCAL);
|
//as we'll be telling the other players what rules we're playing by, we'd best stick to them
|
||||||
|
if (enforcechosenrulesets)
|
||||||
//now we've told the other players what rules we're playing by, we'd best stick to them
|
|
||||||
for (rs = rulesets; rs->rulesetname; rs++)
|
|
||||||
{
|
{
|
||||||
if (!rs->flagged)
|
for (rs = rulesets; rs->rulesetname; rs++)
|
||||||
continue;
|
|
||||||
for (i = 0; rs->rule[i].rulename; i++)
|
|
||||||
{
|
{
|
||||||
var = Cvar_FindVar(rs->rule[i].rulename);
|
if (!rs->flagged)
|
||||||
if (!var)
|
|
||||||
continue;
|
continue;
|
||||||
RulesetLatch(var); //set the latched flag
|
for (i = 0; rs->rule[i].rulename; i++)
|
||||||
|
{
|
||||||
|
var = Cvar_FindVar(rs->rule[i].rulename);
|
||||||
|
if (!var)
|
||||||
|
continue;
|
||||||
|
RulesetLatch(var); //set the latched flag
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Validation_OldRuleset(void)
|
||||||
|
{
|
||||||
|
char rsnames[1024];
|
||||||
|
|
||||||
|
if (Validation_GetCurrentRulesetName(rsnames, sizeof(rsnames), true))
|
||||||
|
Cbuf_AddText(va("say Ruleset: %s\n", rsnames), RESTRICT_LOCAL);
|
||||||
else
|
else
|
||||||
Cbuf_AddText("say No specific ruleset\n", RESTRICT_LOCAL);
|
Cbuf_AddText("say No specific ruleset\n", RESTRICT_LOCAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Validation_AllChecks(void)
|
||||||
|
{
|
||||||
|
char servername[22];
|
||||||
|
char playername[16];
|
||||||
|
char *enginebuild = va(DISTRIBUTION "%i", build_number());
|
||||||
|
char localpnamelen = strlen(cl.players[cl.playernum[0]].name);
|
||||||
|
char ruleset[1024];
|
||||||
|
|
||||||
|
//figure out the padding for the player's name.
|
||||||
|
if (localpnamelen >= 15)
|
||||||
|
playername[0] = 0;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
memset(playername, ' ', 15-localpnamelen-1);
|
||||||
|
playername[15-localpnamelen] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
//get the current server address
|
||||||
|
NET_AdrToString(servername, sizeof(servername), cls.netchan.remote_address);
|
||||||
|
|
||||||
|
//get the ruleset names
|
||||||
|
if (!Validation_GetCurrentRulesetName(ruleset, sizeof(ruleset), true))
|
||||||
|
Q_strncpyz(ruleset, "no ruleset", sizeof(ruleset));
|
||||||
|
|
||||||
|
//now send it
|
||||||
|
CL_SendClientCommand(true, "say \"%s%21s " "%16s %s\"", playername, servername, enginebuild, ruleset);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
void Validation_Apply_Ruleset(void)
|
void Validation_Apply_Ruleset(void)
|
||||||
{ //rulesets are applied when the client first gets a connection to the server
|
{ //rulesets are applied when the client first gets a connection to the server
|
||||||
ruleset_t *rs;
|
ruleset_t *rs;
|
||||||
|
|
|
@ -1198,7 +1198,10 @@ void V_CalcRefdef (int pnum)
|
||||||
view->model = NULL;
|
view->model = NULL;
|
||||||
else
|
else
|
||||||
view->model = cl.model_precache[cl.stats[pnum][STAT_WEAPON]];
|
view->model = cl.model_precache[cl.stats[pnum][STAT_WEAPON]];
|
||||||
view->framestate.g[FS_REG].frame[0] = view_message?view_message->weaponframe:0;
|
#ifdef HLCLIENT
|
||||||
|
if (!CLHL_AnimateViewEntity(view))
|
||||||
|
#endif
|
||||||
|
view->framestate.g[FS_REG].frame[0] = view_message?view_message->weaponframe:0;
|
||||||
#ifdef SWQUAKE
|
#ifdef SWQUAKE
|
||||||
view->palremap = D_IdentityRemap();
|
view->palremap = D_IdentityRemap();
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -43,6 +43,14 @@ typedef struct
|
||||||
qbyte data[4]; // variably sized
|
qbyte data[4]; // variably sized
|
||||||
} qpic_t;
|
} qpic_t;
|
||||||
|
|
||||||
|
#ifdef RGLQUAKE
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
int texnum;
|
||||||
|
float sl, tl, sh, th;
|
||||||
|
} glpic_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
//this is what's actually used.
|
//this is what's actually used.
|
||||||
#define MPIC_ALPHA 1
|
#define MPIC_ALPHA 1
|
||||||
typedef struct //use this so we don't have to go slow over pics, and don't have to shift too much data around.
|
typedef struct //use this so we don't have to go slow over pics, and don't have to shift too much data around.
|
||||||
|
@ -51,7 +59,16 @@ typedef struct //use this so we don't have to go slow over pics, and don't have
|
||||||
unsigned short height;
|
unsigned short height;
|
||||||
qbyte flags;
|
qbyte flags;
|
||||||
qbyte pad;
|
qbyte pad;
|
||||||
qbyte data[4]; // variably sized
|
|
||||||
|
union {
|
||||||
|
int dummy;
|
||||||
|
#ifdef RGLQUAKE
|
||||||
|
glpic_t gl;
|
||||||
|
#endif
|
||||||
|
#ifdef SWQUAKE
|
||||||
|
qbyte data[4]; // variably sized
|
||||||
|
#endif
|
||||||
|
} d;
|
||||||
} mpic_t;
|
} mpic_t;
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -62,6 +62,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
extern HINSTANCE global_hInstance;
|
extern HINSTANCE global_hInstance;
|
||||||
extern int global_nCmdShow;
|
extern int global_nCmdShow;
|
||||||
|
|
||||||
|
extern HWND sys_hijackwindow;
|
||||||
|
|
||||||
#ifndef SERVERONLY
|
#ifndef SERVERONLY
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
|
@ -151,10 +153,7 @@ extern qboolean ActiveApp, Minimized;
|
||||||
|
|
||||||
extern qboolean WinNT;
|
extern qboolean WinNT;
|
||||||
|
|
||||||
void IN_ShowMouse (void);
|
void IN_UpdateGrabs(int fullscreen, int activeapp);
|
||||||
void IN_DeactivateMouse (void);
|
|
||||||
void IN_HideMouse (void);
|
|
||||||
void IN_ActivateMouse (void);
|
|
||||||
void IN_RestoreOriginalMouseState (void);
|
void IN_RestoreOriginalMouseState (void);
|
||||||
void IN_SetQuakeMouseState (void);
|
void IN_SetQuakeMouseState (void);
|
||||||
void IN_MouseEvent (int mstate);
|
void IN_MouseEvent (int mstate);
|
||||||
|
|
|
@ -56,7 +56,7 @@ IDD_DIALOG1 DIALOGEX 0, 0, 67, 40
|
||||||
STYLE DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | DS_CENTER | WS_POPUP |
|
STYLE DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | DS_CENTER | WS_POPUP |
|
||||||
WS_VISIBLE
|
WS_VISIBLE
|
||||||
EXSTYLE WS_EX_TOOLWINDOW | WS_EX_CLIENTEDGE
|
EXSTYLE WS_EX_TOOLWINDOW | WS_EX_CLIENTEDGE
|
||||||
FONT 16, "Times New Roman"
|
FONT 16, "Times New Roman", 0, 0, 0x1
|
||||||
BEGIN
|
BEGIN
|
||||||
CTEXT "FTE QuakeWorld",IDC_STATIC,0,0,67,21,SS_CENTERIMAGE
|
CTEXT "FTE QuakeWorld",IDC_STATIC,0,0,67,21,SS_CENTERIMAGE
|
||||||
CTEXT "http://www.fteqw.com",IDC_STATIC,0,23,66,17,
|
CTEXT "http://www.fteqw.com",IDC_STATIC,0,23,66,17,
|
||||||
|
|
|
@ -3184,7 +3184,7 @@ qbool TP_CheckSoundTrigger (char *str)
|
||||||
// clean up the message
|
// clean up the message
|
||||||
strcpy (str + j, str + i);
|
strcpy (str + j, str + i);
|
||||||
|
|
||||||
if (!snd_initialized)
|
if (!S_HaveOutput())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
COM_DefaultExtension (soundname, ".wav", sizeof(soundname));
|
COM_DefaultExtension (soundname, ".wav", sizeof(soundname));
|
||||||
|
|
|
@ -198,11 +198,17 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
#undef USE_D3D
|
#undef USE_D3D
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef NPQTV
|
||||||
|
#undef TEXTEDITOR
|
||||||
|
#undef WEBCLIENT
|
||||||
|
#undef WEBSERVER
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef SERVERONLY //remove options that don't make sense on only a server
|
#ifdef SERVERONLY //remove options that don't make sense on only a server
|
||||||
#undef Q2CLIENT
|
#undef Q2CLIENT
|
||||||
#undef Q3CLIENT
|
#undef Q3CLIENT
|
||||||
#undef HLCLIENT
|
#undef HLCLIENT
|
||||||
|
#undef HALFLIFEMODELS
|
||||||
#undef VM_UI
|
#undef VM_UI
|
||||||
#undef VM_CG
|
#undef VM_CG
|
||||||
#undef WEBCLIENT
|
#undef WEBCLIENT
|
||||||
|
|
|
@ -74,12 +74,22 @@ static int macro_count = 0;
|
||||||
|
|
||||||
void Cmd_AddMacro(char *s, char *(*f)(void), int disputableintentions)
|
void Cmd_AddMacro(char *s, char *(*f)(void), int disputableintentions)
|
||||||
{
|
{
|
||||||
if (macro_count == MAX_MACROS)
|
int i;
|
||||||
|
for (i = 0; i < macro_count; i++)
|
||||||
|
{
|
||||||
|
if (!strcmp(macro_commands[i].name, s))
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (i == MAX_MACROS)
|
||||||
Sys_Error("Cmd_AddMacro: macro_count == MAX_MACROS");
|
Sys_Error("Cmd_AddMacro: macro_count == MAX_MACROS");
|
||||||
|
|
||||||
Q_strncpyz(macro_commands[macro_count].name, s, sizeof(macro_commands[macro_count].name));
|
Q_strncpyz(macro_commands[macro_count].name, s, sizeof(macro_commands[macro_count].name));
|
||||||
macro_commands[macro_count].func = f;
|
macro_commands[macro_count].func = f;
|
||||||
macro_commands[macro_count].disputableintentions = disputableintentions;
|
macro_commands[macro_count].disputableintentions = disputableintentions;
|
||||||
macro_count++;
|
|
||||||
|
if (i == macro_count)
|
||||||
|
macro_count++;
|
||||||
}
|
}
|
||||||
|
|
||||||
char *TP_MacroString (char *s, int *len)
|
char *TP_MacroString (char *s, int *len)
|
||||||
|
@ -1482,7 +1492,10 @@ qboolean Cmd_AddRemCommand (char *cmd_name, xcommand_t function)
|
||||||
if (cmd->function == function) //happens a lot with q3
|
if (cmd->function == function) //happens a lot with q3
|
||||||
Con_DPrintf ("Cmd_AddCommand: %s already defined\n", cmd_name);
|
Con_DPrintf ("Cmd_AddCommand: %s already defined\n", cmd_name);
|
||||||
else
|
else
|
||||||
|
{
|
||||||
Con_Printf ("Cmd_AddCommand: %s already defined\n", cmd_name);
|
Con_Printf ("Cmd_AddCommand: %s already defined\n", cmd_name);
|
||||||
|
break;
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2812,6 +2825,17 @@ void Cmd_Condump_f(void)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
void Cmd_Shutdown(void)
|
||||||
|
{
|
||||||
|
//make sure we get no other execution
|
||||||
|
int level;
|
||||||
|
for (level = 0; level < sizeof(cmd_text)/sizeof(cmd_text[0]); level++)
|
||||||
|
SZ_Clear (&cmd_text[level].buf);
|
||||||
|
|
||||||
|
cmd_functions = NULL;
|
||||||
|
cmd_alias = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
============
|
============
|
||||||
Cmd_Init
|
Cmd_Init
|
||||||
|
|
|
@ -1126,10 +1126,10 @@ void Mod_FloodFillSkin( qbyte *skin, int skinwidth, int skinheight )
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//additional skin loading
|
//additional skin loading
|
||||||
char **skinfilelist;
|
char ** skinfilelist;
|
||||||
int skinfilecount;
|
int skinfilecount;
|
||||||
|
|
||||||
static qboolean VARGS Mod_TryAddSkin(char *skinname, ...)
|
static qboolean VARGS Mod_TryAddSkin(const char *skinname, ...)
|
||||||
{
|
{
|
||||||
va_list argptr;
|
va_list argptr;
|
||||||
char string[MAX_QPATH];
|
char string[MAX_QPATH];
|
||||||
|
@ -1159,7 +1159,7 @@ static qboolean VARGS Mod_TryAddSkin(char *skinname, ...)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
int Mod_EnumerateSkins(char *name, int size, void *param)
|
int Mod_EnumerateSkins(const char *name, int size, void *param)
|
||||||
{
|
{
|
||||||
Mod_TryAddSkin(name);
|
Mod_TryAddSkin(name);
|
||||||
return true;
|
return true;
|
||||||
|
@ -2330,8 +2330,6 @@ qboolean Mod_LoadQ2Model (model_t *mod, void *buffer)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int Mod_GetNumBones(model_t *model, qboolean allowtags)
|
int Mod_GetNumBones(model_t *model, qboolean allowtags)
|
||||||
{
|
{
|
||||||
galiasinfo_t *inf;
|
galiasinfo_t *inf;
|
||||||
|
@ -2608,7 +2606,13 @@ int Mod_TagNumForName(model_t *model, char *name)
|
||||||
galiasinfo_t *inf;
|
galiasinfo_t *inf;
|
||||||
md3tag_t *t;
|
md3tag_t *t;
|
||||||
|
|
||||||
if (!model || model->type != mod_alias)
|
if (!model)
|
||||||
|
return 0;
|
||||||
|
#ifdef HALFLIFEMODELS
|
||||||
|
if (model->type == mod_halflife)
|
||||||
|
return HLMod_BoneForName(model, name);
|
||||||
|
#endif
|
||||||
|
if (model->type != mod_alias)
|
||||||
return 0;
|
return 0;
|
||||||
inf = Mod_Extradata(model);
|
inf = Mod_Extradata(model);
|
||||||
|
|
||||||
|
@ -2634,6 +2638,32 @@ int Mod_TagNumForName(model_t *model, char *name)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#ifndef SERVERONLY
|
#ifndef SERVERONLY
|
||||||
|
int Mod_FrameNumForName(model_t *model, char *name)
|
||||||
|
{
|
||||||
|
galiasgroup_t *group;
|
||||||
|
galiasinfo_t *inf;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (!model)
|
||||||
|
return -1;
|
||||||
|
#ifdef HALFLIFEMODELS
|
||||||
|
if (model->type == mod_halflife)
|
||||||
|
return HLMod_FrameForName(model, name);
|
||||||
|
#endif
|
||||||
|
if (model->type != mod_alias)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
inf = Mod_Extradata(model);
|
||||||
|
|
||||||
|
for (i = 0; i < model->numframes; i++)
|
||||||
|
{
|
||||||
|
group = (galiasgroup_t*)((char*)inf + inf->groupofs);
|
||||||
|
if (!strcmp(group->name, name))
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
int Mod_SkinNumForName(model_t *model, char *name)
|
int Mod_SkinNumForName(model_t *model, char *name)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
|
@ -38,15 +38,16 @@ usercmd_t nullcmd; // guarenteed to be zero
|
||||||
|
|
||||||
entity_state_t nullentitystate; //this is the default state
|
entity_state_t nullentitystate; //this is the default state
|
||||||
|
|
||||||
static char *largv[MAX_NUM_ARGVS + NUM_SAFE_ARGVS + 1];
|
static const char *largv[MAX_NUM_ARGVS + NUM_SAFE_ARGVS + 1];
|
||||||
static char *argvdummy = " ";
|
static char *argvdummy = " ";
|
||||||
|
|
||||||
static char *safeargvs[NUM_SAFE_ARGVS] =
|
static char *safeargvs[NUM_SAFE_ARGVS] =
|
||||||
{"-stdvid", "-nolan", "-nosound", "-nocdaudio", "-nojoy", "-nomouse"};
|
{"-stdvid", "-nolan", "-nosound", "-nocdaudio", "-nojoy", "-nomouse"};
|
||||||
|
|
||||||
cvar_t registered = SCVAR("registered","0");
|
cvar_t registered = SCVAR("registered","0");
|
||||||
cvar_t gameversion = SCVAR("gameversion","0");
|
cvar_t gameversion = SCVARF("gameversion","", CVAR_SERVERINFO);
|
||||||
cvar_t com_gamename = SCVAR("com_gamename", "");
|
cvar_t com_gamename = SCVAR("com_gamename", "");
|
||||||
|
cvar_t com_modname = SCVAR("com_modname", "");
|
||||||
|
|
||||||
qboolean com_modified; // set true if using non-id files
|
qboolean com_modified; // set true if using non-id files
|
||||||
|
|
||||||
|
@ -342,9 +343,9 @@ char *Q_strlwr(char *s)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int wildcmp(char *wild, char *string)
|
int wildcmp(const char *wild, const char *string)
|
||||||
{
|
{
|
||||||
char *cp=NULL, *mp=NULL;
|
const char *cp=NULL, *mp=NULL;
|
||||||
|
|
||||||
while ((*string) && (*wild != '*'))
|
while ((*string) && (*wild != '*'))
|
||||||
{
|
{
|
||||||
|
@ -434,7 +435,7 @@ void Q_ftoa(char *str, float in)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int Q_atoi (char *str)
|
int Q_atoi (const char *str)
|
||||||
{
|
{
|
||||||
int val;
|
int val;
|
||||||
int sign;
|
int sign;
|
||||||
|
@ -493,7 +494,7 @@ int Q_atoi (char *str)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
float Q_atof (char *str)
|
float Q_atof (const char *str)
|
||||||
{
|
{
|
||||||
double val;
|
double val;
|
||||||
int sign;
|
int sign;
|
||||||
|
@ -1429,9 +1430,9 @@ void SZ_Print (sizebuf_t *buf, const char *data)
|
||||||
COM_SkipPath
|
COM_SkipPath
|
||||||
============
|
============
|
||||||
*/
|
*/
|
||||||
char *COM_SkipPath (char *pathname)
|
char *COM_SkipPath (const char *pathname)
|
||||||
{
|
{
|
||||||
char *last;
|
const char *last;
|
||||||
|
|
||||||
last = pathname;
|
last = pathname;
|
||||||
while (*pathname)
|
while (*pathname)
|
||||||
|
@ -1440,7 +1441,7 @@ char *COM_SkipPath (char *pathname)
|
||||||
last = pathname+1;
|
last = pathname+1;
|
||||||
pathname++;
|
pathname++;
|
||||||
}
|
}
|
||||||
return last;
|
return (char *)last;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1448,11 +1449,11 @@ char *COM_SkipPath (char *pathname)
|
||||||
COM_StripExtension
|
COM_StripExtension
|
||||||
============
|
============
|
||||||
*/
|
*/
|
||||||
void COM_StripExtension (char *in, char *out, int outlen)
|
void COM_StripExtension (const char *in, char *out, int outlen)
|
||||||
{
|
{
|
||||||
char *s;
|
char *s;
|
||||||
|
|
||||||
if (out != in)
|
if (out != in) //optimisation, most calls use the same buffer
|
||||||
Q_strncpyz(out, in, outlen);
|
Q_strncpyz(out, in, outlen);
|
||||||
|
|
||||||
s = out+strlen(out);
|
s = out+strlen(out);
|
||||||
|
@ -1494,7 +1495,7 @@ void COM_StripAllExtensions (char *in, char *out, int outlen)
|
||||||
COM_FileExtension
|
COM_FileExtension
|
||||||
============
|
============
|
||||||
*/
|
*/
|
||||||
char *COM_FileExtension (char *in)
|
char *COM_FileExtension (const char *in)
|
||||||
{
|
{
|
||||||
static char exten[8];
|
static char exten[8];
|
||||||
int i;
|
int i;
|
||||||
|
@ -1565,9 +1566,9 @@ void COM_CleanUpPath(char *str)
|
||||||
COM_FileBase
|
COM_FileBase
|
||||||
============
|
============
|
||||||
*/
|
*/
|
||||||
void COM_FileBase (char *in, char *out, int outlen)
|
void COM_FileBase (const char *in, char *out, int outlen)
|
||||||
{
|
{
|
||||||
char *s, *s2;
|
const char *s, *s2;
|
||||||
|
|
||||||
s = in + strlen(in) - 1;
|
s = in + strlen(in) - 1;
|
||||||
|
|
||||||
|
@ -1901,7 +1902,7 @@ messedup:
|
||||||
#define TOKENSIZE sizeof(com_token)
|
#define TOKENSIZE sizeof(com_token)
|
||||||
char com_token[TOKENSIZE];
|
char com_token[TOKENSIZE];
|
||||||
int com_argc;
|
int com_argc;
|
||||||
char **com_argv;
|
const char **com_argv;
|
||||||
|
|
||||||
com_tokentype_t com_tokentype;
|
com_tokentype_t com_tokentype;
|
||||||
|
|
||||||
|
@ -1913,7 +1914,8 @@ COM_Parse
|
||||||
Parse a token out of a string
|
Parse a token out of a string
|
||||||
==============
|
==============
|
||||||
*/
|
*/
|
||||||
char *COM_Parse (char *data)
|
#ifndef COM_Parse
|
||||||
|
char *COM_Parse (const char *data)
|
||||||
{
|
{
|
||||||
int c;
|
int c;
|
||||||
int len;
|
int len;
|
||||||
|
@ -1952,13 +1954,13 @@ skipwhite:
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
if (len >= TOKENSIZE-1)
|
if (len >= TOKENSIZE-1)
|
||||||
return data;
|
return (char*)data;
|
||||||
|
|
||||||
c = *data++;
|
c = *data++;
|
||||||
if (c=='\"' || !c)
|
if (c=='\"' || !c)
|
||||||
{
|
{
|
||||||
com_token[len] = 0;
|
com_token[len] = 0;
|
||||||
return data;
|
return (char*)data;
|
||||||
}
|
}
|
||||||
com_token[len] = c;
|
com_token[len] = c;
|
||||||
len++;
|
len++;
|
||||||
|
@ -1969,7 +1971,7 @@ skipwhite:
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
if (len >= TOKENSIZE-1)
|
if (len >= TOKENSIZE-1)
|
||||||
return data;
|
return (char*)data;
|
||||||
|
|
||||||
com_token[len] = c;
|
com_token[len] = c;
|
||||||
data++;
|
data++;
|
||||||
|
@ -1978,10 +1980,11 @@ skipwhite:
|
||||||
} while (c>32);
|
} while (c>32);
|
||||||
|
|
||||||
com_token[len] = 0;
|
com_token[len] = 0;
|
||||||
return data;
|
return (char*)data;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
char *COM_ParseStringSet (char *data)
|
char *COM_ParseStringSet (const char *data)
|
||||||
{
|
{
|
||||||
int c;
|
int c;
|
||||||
int len;
|
int len;
|
||||||
|
@ -2004,7 +2007,10 @@ char *COM_ParseStringSet (char *data)
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
if (len >= TOKENSIZE-1)
|
if (len >= TOKENSIZE-1)
|
||||||
return data;
|
{
|
||||||
|
com_token[len] = 0;
|
||||||
|
return (char*)data;
|
||||||
|
}
|
||||||
|
|
||||||
com_token[len] = c;
|
com_token[len] = c;
|
||||||
data++;
|
data++;
|
||||||
|
@ -2013,11 +2019,11 @@ char *COM_ParseStringSet (char *data)
|
||||||
} while (c>32 && c != ';');
|
} while (c>32 && c != ';');
|
||||||
|
|
||||||
com_token[len] = 0;
|
com_token[len] = 0;
|
||||||
return data;
|
return (char*)data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
char *COM_ParseOut (char *data, char *out, int outlen)
|
char *COM_ParseOut (const char *data, char *out, int outlen)
|
||||||
{
|
{
|
||||||
int c;
|
int c;
|
||||||
int len;
|
int len;
|
||||||
|
@ -2056,13 +2062,16 @@ skipwhite:
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
if (len >= outlen-1)
|
if (len >= outlen-1)
|
||||||
return data;
|
{
|
||||||
|
out[len] = 0;
|
||||||
|
return (char*)data;
|
||||||
|
}
|
||||||
|
|
||||||
c = *data++;
|
c = *data++;
|
||||||
if (c=='\"' || !c)
|
if (c=='\"' || !c)
|
||||||
{
|
{
|
||||||
out[len] = 0;
|
out[len] = 0;
|
||||||
return data;
|
return (char*)data;
|
||||||
}
|
}
|
||||||
out[len] = c;
|
out[len] = c;
|
||||||
len++;
|
len++;
|
||||||
|
@ -2073,7 +2082,10 @@ skipwhite:
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
if (len >= outlen-1)
|
if (len >= outlen-1)
|
||||||
return data;
|
{
|
||||||
|
out[len] = 0;
|
||||||
|
return (char*)data;
|
||||||
|
}
|
||||||
|
|
||||||
out[len] = c;
|
out[len] = c;
|
||||||
data++;
|
data++;
|
||||||
|
@ -2082,11 +2094,11 @@ skipwhite:
|
||||||
} while (c>32);
|
} while (c>32);
|
||||||
|
|
||||||
out[len] = 0;
|
out[len] = 0;
|
||||||
return data;
|
return (char*)data;
|
||||||
}
|
}
|
||||||
|
|
||||||
//same as COM_Parse, but parses two quotes next to each other as a single quote as part of the string
|
//same as COM_Parse, but parses two quotes next to each other as a single quote as part of the string
|
||||||
char *COM_StringParse (char *data, qboolean expandmacros, qboolean qctokenize)
|
char *COM_StringParse (const char *data, qboolean expandmacros, qboolean qctokenize)
|
||||||
{
|
{
|
||||||
int c;
|
int c;
|
||||||
int len;
|
int len;
|
||||||
|
@ -2144,7 +2156,7 @@ skipwhite:
|
||||||
if (len >= TOKENSIZE-1)
|
if (len >= TOKENSIZE-1)
|
||||||
{
|
{
|
||||||
com_token[len] = '\0';
|
com_token[len] = '\0';
|
||||||
return data;
|
return (char*)data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -2155,7 +2167,7 @@ skipwhite:
|
||||||
if (c!='\"')
|
if (c!='\"')
|
||||||
{
|
{
|
||||||
com_token[len] = 0;
|
com_token[len] = 0;
|
||||||
return data;
|
return (char*)data;
|
||||||
}
|
}
|
||||||
while (c=='\"')
|
while (c=='\"')
|
||||||
{
|
{
|
||||||
|
@ -2168,7 +2180,7 @@ skipwhite:
|
||||||
if (!c)
|
if (!c)
|
||||||
{
|
{
|
||||||
com_token[len] = 0;
|
com_token[len] = 0;
|
||||||
return data;
|
return (char*)data;
|
||||||
}
|
}
|
||||||
com_token[len] = c;
|
com_token[len] = c;
|
||||||
len++;
|
len++;
|
||||||
|
@ -2184,7 +2196,7 @@ skipwhite:
|
||||||
if (len >= TOKENSIZE-1)
|
if (len >= TOKENSIZE-1)
|
||||||
{
|
{
|
||||||
com_token[len] = '\0';
|
com_token[len] = '\0';
|
||||||
return data;
|
return (char*)data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -2195,7 +2207,7 @@ skipwhite:
|
||||||
if (c!='\'')
|
if (c!='\'')
|
||||||
{
|
{
|
||||||
com_token[len] = 0;
|
com_token[len] = 0;
|
||||||
return data;
|
return (char*)data;
|
||||||
}
|
}
|
||||||
while (c=='\'')
|
while (c=='\'')
|
||||||
{
|
{
|
||||||
|
@ -2208,7 +2220,7 @@ skipwhite:
|
||||||
if (!c)
|
if (!c)
|
||||||
{
|
{
|
||||||
com_token[len] = 0;
|
com_token[len] = 0;
|
||||||
return data;
|
return (char*)data;
|
||||||
}
|
}
|
||||||
com_token[len] = c;
|
com_token[len] = c;
|
||||||
len++;
|
len++;
|
||||||
|
@ -2220,7 +2232,7 @@ skipwhite:
|
||||||
// single character
|
// single character
|
||||||
com_token[len++] = c;
|
com_token[len++] = c;
|
||||||
com_token[len] = 0;
|
com_token[len] = 0;
|
||||||
return data+1;
|
return (char*)data+1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// parse a regular word
|
// parse a regular word
|
||||||
|
@ -2229,7 +2241,7 @@ skipwhite:
|
||||||
if (len >= TOKENSIZE-1)
|
if (len >= TOKENSIZE-1)
|
||||||
{
|
{
|
||||||
com_token[len] = '\0';
|
com_token[len] = '\0';
|
||||||
return data;
|
return (char*)data;
|
||||||
}
|
}
|
||||||
|
|
||||||
com_token[len] = c;
|
com_token[len] = c;
|
||||||
|
@ -2241,7 +2253,7 @@ skipwhite:
|
||||||
com_token[len] = 0;
|
com_token[len] = 0;
|
||||||
|
|
||||||
if (!expandmacros)
|
if (!expandmacros)
|
||||||
return data;
|
return (char*)data;
|
||||||
|
|
||||||
//now we check for macros.
|
//now we check for macros.
|
||||||
for (s = com_token, c= 0; c < len; c++, s++) //this isn't a quoted token by the way.
|
for (s = com_token, c= 0; c < len; c++, s++) //this isn't a quoted token by the way.
|
||||||
|
@ -2267,7 +2279,7 @@ skipwhite:
|
||||||
if (len+strlen(macro->string)-(i+1) >= TOKENSIZE-1) //give up.
|
if (len+strlen(macro->string)-(i+1) >= TOKENSIZE-1) //give up.
|
||||||
{
|
{
|
||||||
com_token[len] = '\0';
|
com_token[len] = '\0';
|
||||||
return data;
|
return (char*)data;
|
||||||
}
|
}
|
||||||
memmove(s+strlen(macro->string), s+i+1, len-c-i);
|
memmove(s+strlen(macro->string), s+i+1, len-c-i);
|
||||||
memcpy(s, macro->string, strlen(macro->string));
|
memcpy(s, macro->string, strlen(macro->string));
|
||||||
|
@ -2277,7 +2289,7 @@ skipwhite:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return data;
|
return (char*)data;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define DEFAULT_PUNCTUATION "(,{})(\':;=!><&|+"
|
#define DEFAULT_PUNCTUATION "(,{})(\':;=!><&|+"
|
||||||
|
@ -2396,7 +2408,7 @@ skipwhite:
|
||||||
return (char*)data;
|
return (char*)data;
|
||||||
}
|
}
|
||||||
|
|
||||||
char *COM_ParseCString (char *data)
|
char *COM_ParseCString (const char *data)
|
||||||
{
|
{
|
||||||
int c;
|
int c;
|
||||||
int len;
|
int len;
|
||||||
|
@ -2437,14 +2449,14 @@ skipwhite:
|
||||||
if (len >= TOKENSIZE-2)
|
if (len >= TOKENSIZE-2)
|
||||||
{
|
{
|
||||||
com_token[len] = '\0';
|
com_token[len] = '\0';
|
||||||
return data;
|
return (char*)data;
|
||||||
}
|
}
|
||||||
|
|
||||||
c = *data++;
|
c = *data++;
|
||||||
if (!c)
|
if (!c)
|
||||||
{
|
{
|
||||||
com_token[len] = 0;
|
com_token[len] = 0;
|
||||||
return data;
|
return (char*)data;
|
||||||
}
|
}
|
||||||
if (c == '\\')
|
if (c == '\\')
|
||||||
{
|
{
|
||||||
|
@ -2464,13 +2476,13 @@ skipwhite:
|
||||||
continue;
|
continue;
|
||||||
default:
|
default:
|
||||||
com_token[len] = 0;
|
com_token[len] = 0;
|
||||||
return data;
|
return (char*)data;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (c=='\"' || !c)
|
if (c=='\"' || !c)
|
||||||
{
|
{
|
||||||
com_token[len] = 0;
|
com_token[len] = 0;
|
||||||
return data;
|
return (char*)data;
|
||||||
}
|
}
|
||||||
com_token[len] = c;
|
com_token[len] = c;
|
||||||
len++;
|
len++;
|
||||||
|
@ -2489,7 +2501,7 @@ skipwhite:
|
||||||
} while (c>32);
|
} while (c>32);
|
||||||
|
|
||||||
com_token[len] = 0;
|
com_token[len] = 0;
|
||||||
return data;
|
return (char*)data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -2502,7 +2514,7 @@ where the given parameter apears, or 0 if not present
|
||||||
================
|
================
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int COM_CheckNextParm (char *parm, int last)
|
int COM_CheckNextParm (const char *parm, int last)
|
||||||
{
|
{
|
||||||
int i = last+1;
|
int i = last+1;
|
||||||
|
|
||||||
|
@ -2517,7 +2529,7 @@ int COM_CheckNextParm (char *parm, int last)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int COM_CheckParm (char *parm)
|
int COM_CheckParm (const char *parm)
|
||||||
{
|
{
|
||||||
return COM_CheckNextParm(parm, 0);
|
return COM_CheckNextParm(parm, 0);
|
||||||
}
|
}
|
||||||
|
@ -2607,7 +2619,7 @@ void COM_CheckRegistered (void)
|
||||||
COM_InitArgv
|
COM_InitArgv
|
||||||
================
|
================
|
||||||
*/
|
*/
|
||||||
void COM_InitArgv (int argc, char **argv) //not allowed to tprint
|
void COM_InitArgv (int argc, const char **argv) //not allowed to tprint
|
||||||
{
|
{
|
||||||
qboolean safe;
|
qboolean safe;
|
||||||
int i;
|
int i;
|
||||||
|
@ -2685,7 +2697,7 @@ COM_AddParm
|
||||||
Adds the given string at the end of the current argument list
|
Adds the given string at the end of the current argument list
|
||||||
================
|
================
|
||||||
*/
|
*/
|
||||||
void COM_AddParm (char *parm)
|
void COM_AddParm (const char *parm)
|
||||||
{
|
{
|
||||||
largv[com_argc++] = parm;
|
largv[com_argc++] = parm;
|
||||||
}
|
}
|
||||||
|
@ -2920,7 +2932,7 @@ void COM_Effectinfo_Reload(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int COM_Effectinfo_ForName(char *efname)
|
unsigned int COM_Effectinfo_ForName(const char *efname)
|
||||||
{
|
{
|
||||||
struct effectinfo_s *e;
|
struct effectinfo_s *e;
|
||||||
|
|
||||||
|
|
|
@ -170,11 +170,11 @@ void MSG_ReadData (void *data, int len);
|
||||||
|
|
||||||
//============================================================================
|
//============================================================================
|
||||||
|
|
||||||
char *Q_strcpyline(char *out, char *in, int maxlen); //stops at '\n' (and '\r')
|
char *Q_strcpyline(char *out, const char *in, int maxlen); //stops at '\n' (and '\r')
|
||||||
|
|
||||||
void Q_ftoa(char *str, float in);
|
void Q_ftoa(char *str, float in);
|
||||||
char *Q_strlwr(char *str);
|
char *Q_strlwr(char *str);
|
||||||
int wildcmp(char *wild, char *string); //1 if match
|
int wildcmp(const char *wild, const char *string); //1 if match
|
||||||
|
|
||||||
#define Q_memset(d, f, c) memset((d), (f), (c))
|
#define Q_memset(d, f, c) memset((d), (f), (c))
|
||||||
#define Q_memcpy(d, s, c) memcpy((d), (s), (c))
|
#define Q_memcpy(d, s, c) memcpy((d), (s), (c))
|
||||||
|
@ -220,8 +220,8 @@ void Q_strncpyz(char*d, const char*s, int n);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int Q_atoi (char *str);
|
int Q_atoi (const char *str);
|
||||||
float Q_atof (char *str);
|
float Q_atof (const char *str);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -234,34 +234,37 @@ extern com_tokentype_t com_tokentype;
|
||||||
|
|
||||||
extern qboolean com_eof;
|
extern qboolean com_eof;
|
||||||
|
|
||||||
char *COM_Parse (char *data);
|
//these cast away the const for the return value.
|
||||||
char *COM_ParseStringSet (char *data);
|
//char *COM_Parse (const char *data);
|
||||||
char *COM_ParseCString (char *data);
|
#define COM_Parse(d) COM_ParseOut(d,com_token, sizeof(com_token))
|
||||||
char *COM_StringParse (char *data, qboolean expandmacros, qboolean qctokenize);
|
char *COM_ParseOut (const char *data, char *out, int outlen);
|
||||||
|
char *COM_ParseStringSet (const char *data);
|
||||||
|
char *COM_ParseCString (const char *data);
|
||||||
|
char *COM_StringParse (const char *data, qboolean expandmacros, qboolean qctokenize);
|
||||||
char *COM_ParseToken (const char *data, const char *punctuation);
|
char *COM_ParseToken (const char *data, const char *punctuation);
|
||||||
char *COM_TrimString(char *str);
|
char *COM_TrimString(char *str);
|
||||||
|
|
||||||
|
|
||||||
extern int com_argc;
|
extern int com_argc;
|
||||||
extern char **com_argv;
|
extern const char **com_argv;
|
||||||
|
|
||||||
int COM_CheckParm (char *parm);
|
int COM_CheckParm (const char *parm);
|
||||||
int COM_CheckNextParm (char *parm, int last);
|
int COM_CheckNextParm (const char *parm, int last);
|
||||||
void COM_AddParm (char *parm);
|
void COM_AddParm (const char *parm);
|
||||||
|
|
||||||
void COM_Init (void);
|
void COM_Init (void);
|
||||||
void COM_InitArgv (int argc, char **argv);
|
void COM_InitArgv (int argc, const char **argv);
|
||||||
void COM_ParsePlusSets (void);
|
void COM_ParsePlusSets (void);
|
||||||
|
|
||||||
char *COM_SkipPath (char *pathname);
|
char *COM_SkipPath (const char *pathname);
|
||||||
void COM_StripExtension (char *in, char *out, int outlen);
|
void COM_StripExtension (const char *in, char *out, int outlen);
|
||||||
void COM_FileBase (char *in, char *out, int outlen);
|
void COM_FileBase (const char *in, char *out, int outlen);
|
||||||
int COM_FileSize(char *path);
|
int COM_FileSize(const char *path);
|
||||||
void COM_DefaultExtension (char *path, char *extension, int maxlen);
|
void COM_DefaultExtension (char *path, char *extension, int maxlen);
|
||||||
void COM_DeFunString(unsigned long *str, char *out, int outsize, qboolean ignoreflags);
|
void COM_DeFunString(unsigned long *str, char *out, int outsize, qboolean ignoreflags);
|
||||||
void COM_ParseFunString(char *str, unsigned long *out, int outsize);
|
void COM_ParseFunString(char *str, unsigned long *out, int outsize);
|
||||||
int COM_FunStringLength(unsigned char *str);
|
int COM_FunStringLength(unsigned char *str);
|
||||||
char *COM_FileExtension (char *in);
|
char *COM_FileExtension (const char *in);
|
||||||
void COM_CleanUpPath(char *str);
|
void COM_CleanUpPath(char *str);
|
||||||
|
|
||||||
char *VARGS va(char *format, ...);
|
char *VARGS va(char *format, ...);
|
||||||
|
@ -273,7 +276,6 @@ extern qboolean com_file_copyprotected;
|
||||||
extern int com_filesize;
|
extern int com_filesize;
|
||||||
struct cache_user_s;
|
struct cache_user_s;
|
||||||
|
|
||||||
extern char com_gamedir[MAX_OSPATH];
|
|
||||||
extern char com_quakedir[MAX_OSPATH];
|
extern char com_quakedir[MAX_OSPATH];
|
||||||
extern char com_homedir[MAX_OSPATH];
|
extern char com_homedir[MAX_OSPATH];
|
||||||
extern char com_configdir[MAX_OSPATH]; //dir to put cfg_save configs in
|
extern char com_configdir[MAX_OSPATH]; //dir to put cfg_save configs in
|
||||||
|
@ -294,15 +296,15 @@ struct vfsfile_s;
|
||||||
typedef enum {FSLFRT_IFFOUND, FSLFRT_LENGTH, FSLFRT_DEPTH_OSONLY, FSLFRT_DEPTH_ANYPATH} FSLF_ReturnType_e;
|
typedef enum {FSLFRT_IFFOUND, FSLFRT_LENGTH, FSLFRT_DEPTH_OSONLY, FSLFRT_DEPTH_ANYPATH} FSLF_ReturnType_e;
|
||||||
//if loc is valid, loc->search is always filled in, the others are filled on success.
|
//if loc is valid, loc->search is always filled in, the others are filled on success.
|
||||||
//returns -1 if couldn't find.
|
//returns -1 if couldn't find.
|
||||||
int FS_FLocateFile(char *filename, FSLF_ReturnType_e returntype, flocation_t *loc);
|
int FS_FLocateFile(const char *filename, FSLF_ReturnType_e returntype, flocation_t *loc);
|
||||||
struct vfsfile_s *FS_OpenReadLocation(flocation_t *location);
|
struct vfsfile_s *FS_OpenReadLocation(flocation_t *location);
|
||||||
char *FS_WhichPackForLocation(flocation_t *loc);
|
char *FS_WhichPackForLocation(flocation_t *loc);
|
||||||
|
|
||||||
char *FS_GetPackHashes(char *buffer, int buffersize, qboolean referencedonly);
|
char *FS_GetPackHashes(char *buffer, int buffersize, qboolean referencedonly);
|
||||||
char *FS_GetPackNames(char *buffer, int buffersize, qboolean referencedonly);
|
char *FS_GetPackNames(char *buffer, int buffersize, qboolean referencedonly);
|
||||||
|
|
||||||
int COM_FOpenFile (char *filename, FILE **file);
|
int COM_FOpenFile (const char *filename, FILE **file);
|
||||||
int COM_FOpenWriteFile (char *filename, FILE **file);
|
int COM_FOpenWriteFile (const char *filename, FILE **file);
|
||||||
|
|
||||||
//#ifdef _MSC_VER //this is enough to annoy me, without conflicting with other (more bizzare) platforms.
|
//#ifdef _MSC_VER //this is enough to annoy me, without conflicting with other (more bizzare) platforms.
|
||||||
//#define fopen dont_use_fopen
|
//#define fopen dont_use_fopen
|
||||||
|
@ -316,7 +318,7 @@ void COM_CloseFile (FILE *h);
|
||||||
|
|
||||||
typedef struct vfsfile_s {
|
typedef struct vfsfile_s {
|
||||||
int (*ReadBytes) (struct vfsfile_s *file, void *buffer, int bytestoread);
|
int (*ReadBytes) (struct vfsfile_s *file, void *buffer, int bytestoread);
|
||||||
int (*WriteBytes) (struct vfsfile_s *file, void *buffer, int bytestoread);
|
int (*WriteBytes) (struct vfsfile_s *file, const void *buffer, int bytestoread);
|
||||||
qboolean (*Seek) (struct vfsfile_s *file, unsigned long pos); //returns false for error
|
qboolean (*Seek) (struct vfsfile_s *file, unsigned long pos); //returns false for error
|
||||||
unsigned long (*Tell) (struct vfsfile_s *file);
|
unsigned long (*Tell) (struct vfsfile_s *file);
|
||||||
unsigned long (*GetLen) (struct vfsfile_s *file); //could give some lag
|
unsigned long (*GetLen) (struct vfsfile_s *file); //could give some lag
|
||||||
|
@ -332,54 +334,58 @@ typedef struct vfsfile_s {
|
||||||
#define VFS_READ(vf,buffer,buflen) (vf->ReadBytes(vf,buffer,buflen))
|
#define VFS_READ(vf,buffer,buflen) (vf->ReadBytes(vf,buffer,buflen))
|
||||||
#define VFS_WRITE(vf,buffer,buflen) (vf->WriteBytes(vf,buffer,buflen))
|
#define VFS_WRITE(vf,buffer,buflen) (vf->WriteBytes(vf,buffer,buflen))
|
||||||
#define VFS_FLUSH(vf) do{if(vf->Flush)vf->Flush(vf);}while(0)
|
#define VFS_FLUSH(vf) do{if(vf->Flush)vf->Flush(vf);}while(0)
|
||||||
|
#define VFS_PUTS(vf,s) do{const char *t=s;vf->WriteBytes(vf,t,strlen(t));}while(0)
|
||||||
char *VFS_GETS(vfsfile_t *vf, char *buffer, int buflen);
|
char *VFS_GETS(vfsfile_t *vf, char *buffer, int buflen);
|
||||||
|
void VFS_PRINTF(vfsfile_t *vf, char *fmt, ...);
|
||||||
|
|
||||||
|
enum fs_relative{
|
||||||
|
FS_GAME, //standard search (not generally valid for save/rename/delete/etc)
|
||||||
|
FS_ROOT, //./
|
||||||
|
FS_GAMEONLY, //$gamedir/
|
||||||
|
FS_CONFIGONLY, //fte/ (should still be part of the game path)
|
||||||
|
FS_SKINS //qw/skins/
|
||||||
|
};
|
||||||
|
|
||||||
void FS_FlushFSHash(void);
|
void FS_FlushFSHash(void);
|
||||||
void FS_CreatePath(char *pname, int relativeto);
|
void FS_CreatePath(const char *pname, enum fs_relative relativeto);
|
||||||
int FS_Rename(char *oldf, char *newf, int relativeto); //0 on success, non-0 on error
|
int FS_Rename(const char *oldf, const char *newf, enum fs_relative relativeto); //0 on success, non-0 on error
|
||||||
int FS_Rename2(char *oldf, char *newf, int oldrelativeto, int newrelativeto);
|
int FS_Rename2(const char *oldf, const char *newf, enum fs_relative oldrelativeto, enum fs_relative newrelativeto);
|
||||||
int FS_Remove(char *fname, int relativeto); //0 on success, non-0 on error
|
int FS_Remove(const char *fname, int relativeto); //0 on success, non-0 on error
|
||||||
qboolean FS_WriteFile (char *filename, void *data, int len, int relativeto);
|
qboolean FS_NativePath(const char *fname, enum fs_relative relativeto, char *out, int outlen); //if you really need to fopen yourself
|
||||||
vfsfile_t *FS_OpenVFS(char *filename, char *mode, int relativeto);
|
qboolean FS_WriteFile (const char *filename, const void *data, int len, enum fs_relative relativeto);
|
||||||
|
vfsfile_t *FS_OpenVFS(const char *filename, const char *mode, enum fs_relative relativeto);
|
||||||
vfsfile_t *FS_OpenTemp(void);
|
vfsfile_t *FS_OpenTemp(void);
|
||||||
vfsfile_t *FS_OpenTCP(char *name);
|
vfsfile_t *FS_OpenTCP(const char *name);
|
||||||
void FS_UnloadPackFiles(void);
|
void FS_UnloadPackFiles(void);
|
||||||
void FS_ReloadPackFiles(void);
|
void FS_ReloadPackFiles(void);
|
||||||
char *FS_GenerateClientPacksList(char *buffer, int maxlen, int basechecksum);
|
char *FSQ3_GenerateClientPacksList(char *buffer, int maxlen, int basechecksum);
|
||||||
enum {
|
|
||||||
FS_GAME,
|
|
||||||
FS_ROOT,
|
|
||||||
FS_GAMEONLY,
|
|
||||||
FS_CONFIGONLY,
|
|
||||||
FS_SKINS
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
int COM_filelength (FILE *f);
|
int COM_filelength (FILE *f);
|
||||||
qbyte *COM_LoadStackFile (char *path, void *buffer, int bufsize);
|
qbyte *COM_LoadStackFile (const char *path, void *buffer, int bufsize);
|
||||||
qbyte *COM_LoadTempFile (char *path);
|
qbyte *COM_LoadTempFile (const char *path);
|
||||||
qbyte *COM_LoadTempFile2 (char *path); //allocates a little bit more without freeing old temp
|
qbyte *COM_LoadTempFile2 (const char *path); //allocates a little bit more without freeing old temp
|
||||||
qbyte *COM_LoadHunkFile (char *path);
|
qbyte *COM_LoadHunkFile (const char *path);
|
||||||
qbyte *COM_LoadMallocFile (char *path);
|
qbyte *COM_LoadMallocFile (const char *path);
|
||||||
void COM_LoadCacheFile (char *path, struct cache_user_s *cu);
|
void COM_LoadCacheFile (const char *path, struct cache_user_s *cu);
|
||||||
void COM_CreatePath (char *path);
|
void COM_CreatePath (char *path);
|
||||||
void COM_Gamedir (char *dir);
|
void COM_Gamedir (const char *dir);
|
||||||
void FS_ForceToPure(char *str, char *crcs, int seed);
|
void FS_ForceToPure(const char *str, const char *crcs, int seed);
|
||||||
char *COM_GetPathInfo (int i, int *crc);
|
char *COM_GetPathInfo (int i, int *crc);
|
||||||
char *COM_NextPath (char *prevpath);
|
char *COM_NextPath (char *prevpath);
|
||||||
void COM_FlushFSCache(void); //a file was written using fopen
|
void COM_FlushFSCache(void); //a file was written using fopen
|
||||||
void COM_RefreshFSCache_f(void);
|
void COM_RefreshFSCache_f(void);
|
||||||
|
|
||||||
qboolean COM_LoadMapPackFile(char *name, int offset);
|
qboolean COM_LoadMapPackFile(const char *name, int offset);
|
||||||
void COM_FlushTempoaryPacks(void);
|
void COM_FlushTempoaryPacks(void);
|
||||||
|
|
||||||
void COM_EnumerateFiles (char *match, int (*func)(char *, int, void *), void *parm);
|
void COM_EnumerateFiles (const char *match, int (*func)(const char *, int, void *), void *parm);
|
||||||
|
|
||||||
extern struct cvar_s registered;
|
extern struct cvar_s registered;
|
||||||
extern qboolean standard_quake; //fixme: remove
|
extern qboolean standard_quake; //fixme: remove
|
||||||
|
|
||||||
void COM_Effectinfo_Clear(void);
|
void COM_Effectinfo_Clear(void);
|
||||||
unsigned int COM_Effectinfo_ForName(char *efname);
|
unsigned int COM_Effectinfo_ForName(const char *efname);
|
||||||
char *COM_Effectinfo_ForNumber(unsigned int efnum);
|
char *COM_Effectinfo_ForNumber(unsigned int efnum);
|
||||||
|
|
||||||
#define MAX_INFO_KEY 64
|
#define MAX_INFO_KEY 64
|
||||||
|
|
|
@ -26,15 +26,18 @@ cvar_group_t *cvar_groups;
|
||||||
//cvar_t *cvar_vars;
|
//cvar_t *cvar_vars;
|
||||||
static char *cvar_null_string = "";
|
static char *cvar_null_string = "";
|
||||||
static char *cvar_zero_string = "0";
|
static char *cvar_zero_string = "0";
|
||||||
|
static char *cvar_one_string = "1";
|
||||||
|
|
||||||
char *Cvar_DefaultAlloc(char *str)
|
char *Cvar_DefaultAlloc(char *str)
|
||||||
{
|
{
|
||||||
char *c;
|
char *c;
|
||||||
|
|
||||||
if (str[0] == '\0')
|
if (str[0] == '\0')
|
||||||
return cvar_null_string;
|
return cvar_null_string;
|
||||||
if (str[0] == '0' && str[1] == '\0')
|
if (str[0] == '0' && str[1] == '\0')
|
||||||
return cvar_zero_string;
|
return cvar_zero_string;
|
||||||
|
if (str[0] == '1' && str[1] == '\0')
|
||||||
|
return cvar_one_string;
|
||||||
|
|
||||||
c = (char *)Z_Malloc(strlen(str)+1);
|
c = (char *)Z_Malloc(strlen(str)+1);
|
||||||
Q_strcpy(c, str);
|
Q_strcpy(c, str);
|
||||||
|
@ -48,6 +51,8 @@ void Cvar_DefaultFree(char *str)
|
||||||
return;
|
return;
|
||||||
else if (str == cvar_zero_string)
|
else if (str == cvar_zero_string)
|
||||||
return;
|
return;
|
||||||
|
else if (str == cvar_one_string)
|
||||||
|
return;
|
||||||
else
|
else
|
||||||
Z_Free(str);
|
Z_Free(str);
|
||||||
}
|
}
|
||||||
|
@ -868,7 +873,8 @@ void Cvar_Free(cvar_t *tbf)
|
||||||
}
|
}
|
||||||
unlinked:
|
unlinked:
|
||||||
Z_Free(tbf->string);
|
Z_Free(tbf->string);
|
||||||
Cvar_DefaultFree(tbf->defaultstr);
|
if (tbf->flags & CVAR_FREEDEFAULT)
|
||||||
|
Cvar_DefaultFree(tbf->defaultstr);
|
||||||
if (tbf->latched_string)
|
if (tbf->latched_string)
|
||||||
Z_Free(tbf->latched_string);
|
Z_Free(tbf->latched_string);
|
||||||
Z_Free(tbf);
|
Z_Free(tbf);
|
||||||
|
@ -886,10 +892,12 @@ qboolean Cvar_Register (cvar_t *variable, const char *groupname)
|
||||||
{
|
{
|
||||||
cvar_t *old;
|
cvar_t *old;
|
||||||
cvar_group_t *group;
|
cvar_group_t *group;
|
||||||
char value[512];
|
char *initial;
|
||||||
|
|
||||||
// copy the value off, because future sets will Z_Free it
|
if (variable->defaultstr)
|
||||||
strcpy (value, variable->string);
|
initial = variable->defaultstr;
|
||||||
|
else
|
||||||
|
initial = variable->string;
|
||||||
|
|
||||||
// check to see if it has already been defined
|
// check to see if it has already been defined
|
||||||
old = Cvar_FindVar (variable->name);
|
old = Cvar_FindVar (variable->name);
|
||||||
|
@ -900,7 +908,7 @@ qboolean Cvar_Register (cvar_t *variable, const char *groupname)
|
||||||
group = Cvar_GetGroup(groupname);
|
group = Cvar_GetGroup(groupname);
|
||||||
|
|
||||||
variable->modified = old->modified;
|
variable->modified = old->modified;
|
||||||
variable->flags |= old->flags & CVAR_ARCHIVE;
|
variable->flags |= (old->flags & CVAR_ARCHIVE);
|
||||||
|
|
||||||
// link the variable in
|
// link the variable in
|
||||||
variable->next = group->cvars;
|
variable->next = group->cvars;
|
||||||
|
@ -911,7 +919,10 @@ qboolean Cvar_Register (cvar_t *variable, const char *groupname)
|
||||||
variable->string = (char*)Z_Malloc (1);
|
variable->string = (char*)Z_Malloc (1);
|
||||||
|
|
||||||
//cheat prevention - engine set default is the one that stays.
|
//cheat prevention - engine set default is the one that stays.
|
||||||
variable->defaultstr = Cvar_DefaultAlloc(value); //give it it's default (for server controlled vars and things)
|
if (variable->flags & CVAR_FREEDEFAULT)
|
||||||
|
variable->defaultstr = Cvar_DefaultAlloc(initial);
|
||||||
|
else
|
||||||
|
variable->defaultstr = initial;
|
||||||
|
|
||||||
// set it through the function to be consistant
|
// set it through the function to be consistant
|
||||||
if (old->latched_string)
|
if (old->latched_string)
|
||||||
|
@ -943,19 +954,17 @@ qboolean Cvar_Register (cvar_t *variable, const char *groupname)
|
||||||
|
|
||||||
variable->string = (char*)Z_Malloc (1);
|
variable->string = (char*)Z_Malloc (1);
|
||||||
|
|
||||||
variable->defaultstr = Cvar_DefaultAlloc(value); //give it it's default (for server controlled vars and things)
|
if (variable->flags & CVAR_FREEDEFAULT)
|
||||||
|
variable->defaultstr = Cvar_DefaultAlloc(initial);
|
||||||
|
else
|
||||||
|
variable->defaultstr = initial;
|
||||||
|
|
||||||
// set it through the function to be consistant
|
// set it through the function to be consistant
|
||||||
Cvar_SetCore (variable, value, true);
|
Cvar_SetCore (variable, initial, true);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
void Cvar_RegisterVariable (cvar_t *variable)
|
|
||||||
{
|
|
||||||
Cvar_Register(variable, NULL);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
cvar_t *Cvar_Get(const char *name, const char *defaultvalue, int flags, const char *group)
|
cvar_t *Cvar_Get(const char *name, const char *defaultvalue, int flags, const char *group)
|
||||||
{
|
{
|
||||||
cvar_t *var;
|
cvar_t *var;
|
||||||
|
@ -979,7 +988,7 @@ cvar_t *Cvar_Get(const char *name, const char *defaultvalue, int flags, const ch
|
||||||
var->name = (char *)(var+1);
|
var->name = (char *)(var+1);
|
||||||
strcpy(var->name, name);
|
strcpy(var->name, name);
|
||||||
var->string = (char*)defaultvalue;
|
var->string = (char*)defaultvalue;
|
||||||
var->flags = flags|CVAR_POINTER|CVAR_USERCREATED;
|
var->flags = flags|CVAR_POINTER|CVAR_FREEDEFAULT|CVAR_USERCREATED;
|
||||||
|
|
||||||
if (!Cvar_Register(var, group))
|
if (!Cvar_Register(var, group))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -1203,9 +1212,16 @@ void Cvar_Shutdown(void)
|
||||||
var = cvar_groups->cvars;
|
var = cvar_groups->cvars;
|
||||||
cvar_groups->cvars = var->next;
|
cvar_groups->cvars = var->next;
|
||||||
|
|
||||||
|
if (var->flags & CVAR_FREEDEFAULT)
|
||||||
|
{
|
||||||
|
Cvar_DefaultFree(var->defaultstr);
|
||||||
|
var->defaultstr = NULL;
|
||||||
|
}
|
||||||
Z_Free(var->string);
|
Z_Free(var->string);
|
||||||
if (var->flags & CVAR_POINTER)
|
if (var->flags & CVAR_POINTER)
|
||||||
Z_Free(var);
|
Z_Free(var);
|
||||||
|
else
|
||||||
|
var->string = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
grp = cvar_groups;
|
grp = cvar_groups;
|
||||||
|
|
|
@ -103,17 +103,18 @@ typedef struct cvar_group_s
|
||||||
|
|
||||||
//freestyle
|
//freestyle
|
||||||
#define CVAR_POINTER (1<<5) // q2 style. May be converted to q1 if needed. These are often specified on the command line and then converted into q1 when registered properly.
|
#define CVAR_POINTER (1<<5) // q2 style. May be converted to q1 if needed. These are often specified on the command line and then converted into q1 when registered properly.
|
||||||
#define CVAR_NOTFROMSERVER (1<<6) // the console will ignore changes to cvars if set at from the server or any gamecode. This is to protect against security flaws - like qterm
|
#define CVAR_FREEDEFAULT (1<<6) // q2 style. May be converted to q1 if needed. These are often specified on the command line and then converted into q1 when registered properly.
|
||||||
#define CVAR_USERCREATED (1<<7) //write a 'set' or 'seta' in front of the var name.
|
#define CVAR_NOTFROMSERVER (1<<7) // the console will ignore changes to cvars if set at from the server or any gamecode. This is to protect against security flaws - like qterm
|
||||||
#define CVAR_CHEAT (1<<8) //latch to the default, unless cheats are enabled.
|
#define CVAR_USERCREATED (1<<8) //write a 'set' or 'seta' in front of the var name.
|
||||||
#define CVAR_SEMICHEAT (1<<9) //if strict ruleset, force to 0/blank.
|
#define CVAR_CHEAT (1<<9) //latch to the default, unless cheats are enabled.
|
||||||
#define CVAR_RENDERERLATCH (1<<10) //requires a vid_restart to reapply.
|
#define CVAR_SEMICHEAT (1<<10) //if strict ruleset, force to 0/blank.
|
||||||
#define CVAR_SERVEROVERRIDE (1<<11) //the server has overridden out local value - should probably be called SERVERLATCH
|
#define CVAR_RENDERERLATCH (1<<11) //requires a vid_restart to reapply.
|
||||||
#define CVAR_RENDERERCALLBACK (1<<12) //force callback for cvars on renderer change
|
#define CVAR_SERVEROVERRIDE (1<<12) //the server has overridden out local value - should probably be called SERVERLATCH
|
||||||
#define CVAR_NOUNSAFEEXPAND (1<<13) // do not expand cvar value when command is from gamecode
|
#define CVAR_RENDERERCALLBACK (1<<13) //force callback for cvars on renderer change
|
||||||
#define CVAR_RULESETLATCH (1<<14) //latched by the ruleset
|
#define CVAR_NOUNSAFEEXPAND (1<<14) // do not expand cvar value when command is from gamecode
|
||||||
|
#define CVAR_RULESETLATCH (1<<15) //latched by the ruleset
|
||||||
|
|
||||||
#define CVAR_LASTFLAG CVAR_NOUNSAFEEXPAND
|
#define CVAR_LASTFLAG CVAR_RULESETLATCH
|
||||||
|
|
||||||
#define CVAR_LATCHMASK (CVAR_LATCH|CVAR_RENDERERLATCH|CVAR_SERVEROVERRIDE|CVAR_CHEAT|CVAR_SEMICHEAT) //you're only allowed one of these.
|
#define CVAR_LATCHMASK (CVAR_LATCH|CVAR_RENDERERLATCH|CVAR_SERVEROVERRIDE|CVAR_CHEAT|CVAR_SEMICHEAT) //you're only allowed one of these.
|
||||||
#define CVAR_NEEDDEFAULT CVAR_CHEAT
|
#define CVAR_NEEDDEFAULT CVAR_CHEAT
|
||||||
|
@ -129,8 +130,6 @@ qboolean Cvar_Register (cvar_t *variable, const char *cvargroup);
|
||||||
// registers a cvar that already has the name, string, and optionally the
|
// registers a cvar that already has the name, string, and optionally the
|
||||||
// archive elements set.
|
// archive elements set.
|
||||||
|
|
||||||
//#define Cvar_RegisterVariable(x) Cvar_Register(x,__FILE__);
|
|
||||||
|
|
||||||
cvar_t *Cvar_ForceSet (cvar_t *var, const char *value);
|
cvar_t *Cvar_ForceSet (cvar_t *var, const char *value);
|
||||||
cvar_t *Cvar_Set (cvar_t *var, const char *value);
|
cvar_t *Cvar_Set (cvar_t *var, const char *value);
|
||||||
// equivelant to "<name> <variable>" typed at the console
|
// equivelant to "<name> <variable>" typed at the console
|
||||||
|
|
1902
engine/common/fs.c
1902
engine/common/fs.c
File diff suppressed because it is too large
Load diff
30
engine/common/fs.h
Normal file
30
engine/common/fs.h
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
#include "hash.h"
|
||||||
|
extern hashtable_t filesystemhash; //this table is the one to build your hash references into
|
||||||
|
extern int fs_hash_dups; //for tracking efficiency. no functional use.
|
||||||
|
extern int fs_hash_files; //for tracking efficiency. no functional use.
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
void (*PrintPath)(void *handle);
|
||||||
|
void (*ClosePath)(void *handle);
|
||||||
|
void (*BuildHash)(void *handle);
|
||||||
|
qboolean (*FindFile)(void *handle, flocation_t *loc, const char *name, void *hashedresult); //true if found (hashedresult can be NULL)
|
||||||
|
//note that if rawfile and offset are set, many Com_FileOpens will read the raw file
|
||||||
|
//otherwise ReadFile will be called instead.
|
||||||
|
void (*ReadFile)(void *handle, flocation_t *loc, char *buffer); //reads the entire file in one go (size comes from loc, so make sure the loc is valid, this is for performance with compressed archives)
|
||||||
|
int (*EnumerateFiles)(void *handle, const char *match, int (*func)(const char *, int, void *), void *parm);
|
||||||
|
|
||||||
|
void *(*OpenNew)(vfsfile_t *file, const char *desc); //returns a handle to a new pak/path
|
||||||
|
|
||||||
|
int (*GeneratePureCRC) (void *handle, int seed, int usepure);
|
||||||
|
|
||||||
|
vfsfile_t *(*OpenVFS)(void *handle, flocation_t *loc, const char *mode);
|
||||||
|
} searchpathfuncs_t;
|
||||||
|
|
||||||
|
//the stdio filesystem is special as that's the starting point of the entire filesystem
|
||||||
|
//warning: the handle is known to be a string pointer to the dir name
|
||||||
|
extern searchpathfuncs_t osfilefuncs;
|
||||||
|
vfsfile_t *VFSOS_Open(const char *osname, const char *mode);
|
||||||
|
|
||||||
|
int FS_RegisterFileSystemType(const char *extension, searchpathfuncs_t *funcs);
|
||||||
|
void FS_UnRegisterFileSystemType(int idx);
|
544
engine/common/fs_pak.c
Normal file
544
engine/common/fs_pak.c
Normal file
|
@ -0,0 +1,544 @@
|
||||||
|
#include "quakedef.h"
|
||||||
|
#include "fs.h"
|
||||||
|
|
||||||
|
//
|
||||||
|
// in memory
|
||||||
|
//
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
char name[MAX_QPATH];
|
||||||
|
int filepos, filelen;
|
||||||
|
|
||||||
|
bucket_t bucket;
|
||||||
|
} packfile_t;
|
||||||
|
|
||||||
|
typedef struct pack_s
|
||||||
|
{
|
||||||
|
char descname[MAX_OSPATH];
|
||||||
|
vfsfile_t *handle;
|
||||||
|
unsigned int filepos; //the pos the subfiles left it at (to optimize calls to vfs_seek)
|
||||||
|
int numfiles;
|
||||||
|
packfile_t *files;
|
||||||
|
int references; //seeing as all vfiles from a pak file use the parent's vfsfile, we need to keep the parent open until all subfiles are closed.
|
||||||
|
} pack_t;
|
||||||
|
|
||||||
|
//
|
||||||
|
// on disk
|
||||||
|
//
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
char name[56];
|
||||||
|
int filepos, filelen;
|
||||||
|
} dpackfile_t;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
int filepos, filelen;
|
||||||
|
char name[8];
|
||||||
|
} dwadfile_t;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
char id[4];
|
||||||
|
int dirofs;
|
||||||
|
int dirlen;
|
||||||
|
} dpackheader_t;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
char id[4];
|
||||||
|
int dirlen;
|
||||||
|
int dirofs;
|
||||||
|
} dwadheader_t;
|
||||||
|
|
||||||
|
#define MAX_FILES_IN_PACK 2048
|
||||||
|
|
||||||
|
void FSPAK_PrintPath(void *handle)
|
||||||
|
{
|
||||||
|
pack_t *pak = handle;
|
||||||
|
|
||||||
|
if (pak->references != 1)
|
||||||
|
Con_Printf("%s (%i)\n", pak->descname, pak->references-1);
|
||||||
|
else
|
||||||
|
Con_Printf("%s\n", pak->descname);
|
||||||
|
}
|
||||||
|
void FSPAK_ClosePath(void *handle)
|
||||||
|
{
|
||||||
|
pack_t *pak = handle;
|
||||||
|
|
||||||
|
pak->references--;
|
||||||
|
if (pak->references > 0)
|
||||||
|
return; //not free yet
|
||||||
|
|
||||||
|
|
||||||
|
VFS_CLOSE (pak->handle);
|
||||||
|
if (pak->files)
|
||||||
|
Z_Free(pak->files);
|
||||||
|
Z_Free(pak);
|
||||||
|
}
|
||||||
|
void FSPAK_BuildHash(void *handle)
|
||||||
|
{
|
||||||
|
pack_t *pak = handle;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < pak->numfiles; i++)
|
||||||
|
{
|
||||||
|
if (!Hash_GetInsensative(&filesystemhash, pak->files[i].name))
|
||||||
|
{
|
||||||
|
fs_hash_files++;
|
||||||
|
Hash_AddInsensative(&filesystemhash, pak->files[i].name, &pak->files[i], &pak->files[i].bucket);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
fs_hash_dups++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
qboolean FSPAK_FLocate(void *handle, flocation_t *loc, const char *filename, void *hashedresult)
|
||||||
|
{
|
||||||
|
packfile_t *pf = hashedresult;
|
||||||
|
int i, len;
|
||||||
|
pack_t *pak = handle;
|
||||||
|
|
||||||
|
// look through all the pak file elements
|
||||||
|
|
||||||
|
if (pf)
|
||||||
|
{ //is this a pointer to a file in this pak?
|
||||||
|
if (pf < pak->files || pf > pak->files + pak->numfiles)
|
||||||
|
return false; //was found in a different path
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (i=0 ; i<pak->numfiles ; i++) //look for the file
|
||||||
|
{
|
||||||
|
if (!strcmp (pak->files[i].name, filename))
|
||||||
|
{
|
||||||
|
pf = &pak->files[i];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pf)
|
||||||
|
{
|
||||||
|
len = pf->filelen;
|
||||||
|
if (loc)
|
||||||
|
{
|
||||||
|
loc->index = pf - pak->files;
|
||||||
|
snprintf(loc->rawname, sizeof(loc->rawname), "%s", pak->descname);
|
||||||
|
loc->offset = pf->filepos;
|
||||||
|
loc->len = pf->filelen;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
int FSPAK_EnumerateFiles (void *handle, const char *match, int (*func)(const char *, int, void *), void *parm)
|
||||||
|
{
|
||||||
|
pack_t *pak = handle;
|
||||||
|
int num;
|
||||||
|
|
||||||
|
for (num = 0; num<(int)pak->numfiles; num++)
|
||||||
|
{
|
||||||
|
if (wildcmp(match, pak->files[num].name))
|
||||||
|
{
|
||||||
|
if (!func(pak->files[num].name, pak->files[num].filelen, parm))
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
=================
|
||||||
|
COM_LoadPackFile
|
||||||
|
|
||||||
|
Takes an explicit (not game tree related) path to a pak file.
|
||||||
|
|
||||||
|
Loads the header and directory, adding the files at the beginning
|
||||||
|
of the list so they override previous pack files.
|
||||||
|
=================
|
||||||
|
*/
|
||||||
|
void *FSPAK_LoadPackFile (vfsfile_t *file, const char *desc)
|
||||||
|
{
|
||||||
|
dpackheader_t header;
|
||||||
|
int i;
|
||||||
|
// int j;
|
||||||
|
packfile_t *newfiles;
|
||||||
|
int numpackfiles;
|
||||||
|
pack_t *pack;
|
||||||
|
vfsfile_t *packhandle;
|
||||||
|
dpackfile_t info;
|
||||||
|
int read;
|
||||||
|
// unsigned short crc;
|
||||||
|
|
||||||
|
packhandle = file;
|
||||||
|
if (packhandle == NULL)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
VFS_READ(packhandle, &header, sizeof(header));
|
||||||
|
if (header.id[0] != 'P' || header.id[1] != 'A'
|
||||||
|
|| header.id[2] != 'C' || header.id[3] != 'K')
|
||||||
|
{
|
||||||
|
VFS_CLOSE(packhandle);
|
||||||
|
return NULL;
|
||||||
|
// Sys_Error ("%s is not a packfile", packfile);
|
||||||
|
}
|
||||||
|
header.dirofs = LittleLong (header.dirofs);
|
||||||
|
header.dirlen = LittleLong (header.dirlen);
|
||||||
|
|
||||||
|
numpackfiles = header.dirlen / sizeof(dpackfile_t);
|
||||||
|
|
||||||
|
// if (numpackfiles > MAX_FILES_IN_PACK)
|
||||||
|
// Sys_Error ("%s has %i files", packfile, numpackfiles);
|
||||||
|
|
||||||
|
// if (numpackfiles != PAK0_COUNT)
|
||||||
|
// com_modified = true; // not the original file
|
||||||
|
|
||||||
|
newfiles = (packfile_t*)Z_Malloc (numpackfiles * sizeof(packfile_t));
|
||||||
|
|
||||||
|
VFS_SEEK(packhandle, header.dirofs);
|
||||||
|
// fread (&info, 1, header.dirlen, packhandle);
|
||||||
|
|
||||||
|
// crc the directory to check for modifications
|
||||||
|
// crc = QCRC_Block((qbyte *)info, header.dirlen);
|
||||||
|
|
||||||
|
|
||||||
|
// QCRC_Init (&crc);
|
||||||
|
|
||||||
|
pack = (pack_t*)Z_Malloc (sizeof (pack_t));
|
||||||
|
// parse the directory
|
||||||
|
for (i=0 ; i<numpackfiles ; i++)
|
||||||
|
{
|
||||||
|
*info.name = '\0';
|
||||||
|
read = VFS_READ(packhandle, &info, sizeof(info));
|
||||||
|
/*
|
||||||
|
for (j=0 ; j<sizeof(info) ; j++)
|
||||||
|
CRC_ProcessByte(&crc, ((qbyte *)&info)[j]);
|
||||||
|
*/
|
||||||
|
strcpy (newfiles[i].name, info.name);
|
||||||
|
COM_CleanUpPath(newfiles[i].name); //blooming tanks.
|
||||||
|
newfiles[i].filepos = LittleLong(info.filepos);
|
||||||
|
newfiles[i].filelen = LittleLong(info.filelen);
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
if (crc != PAK0_CRC)
|
||||||
|
com_modified = true;
|
||||||
|
*/
|
||||||
|
strcpy (pack->descname, desc);
|
||||||
|
pack->handle = packhandle;
|
||||||
|
pack->numfiles = numpackfiles;
|
||||||
|
pack->files = newfiles;
|
||||||
|
pack->filepos = 0;
|
||||||
|
VFS_SEEK(packhandle, pack->filepos);
|
||||||
|
|
||||||
|
pack->references++;
|
||||||
|
|
||||||
|
Con_TPrintf (TL_ADDEDPACKFILE, desc, numpackfiles);
|
||||||
|
return pack;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
vfsfile_t funcs;
|
||||||
|
pack_t *parentpak;
|
||||||
|
unsigned long startpos;
|
||||||
|
unsigned long length;
|
||||||
|
unsigned long currentpos;
|
||||||
|
} vfspack_t;
|
||||||
|
int VFSPAK_ReadBytes (struct vfsfile_s *vfs, void *buffer, int bytestoread)
|
||||||
|
{
|
||||||
|
vfspack_t *vfsp = (vfspack_t*)vfs;
|
||||||
|
int read;
|
||||||
|
|
||||||
|
if (bytestoread == 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (vfsp->currentpos - vfsp->startpos + bytestoread > vfsp->length)
|
||||||
|
bytestoread = vfsp->length - (vfsp->currentpos - vfsp->startpos);
|
||||||
|
if (bytestoread <= 0)
|
||||||
|
{
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (vfsp->parentpak->filepos != vfsp->currentpos)
|
||||||
|
VFS_SEEK(vfsp->parentpak->handle, vfsp->currentpos);
|
||||||
|
read = VFS_READ(vfsp->parentpak->handle, buffer, bytestoread);
|
||||||
|
vfsp->currentpos += read;
|
||||||
|
vfsp->parentpak->filepos = vfsp->currentpos;
|
||||||
|
|
||||||
|
return read;
|
||||||
|
}
|
||||||
|
int VFSPAK_WriteBytes (struct vfsfile_s *vfs, const void *buffer, int bytestoread)
|
||||||
|
{ //not supported.
|
||||||
|
Sys_Error("Cannot write to pak files\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
qboolean VFSPAK_Seek (struct vfsfile_s *vfs, unsigned long pos)
|
||||||
|
{
|
||||||
|
vfspack_t *vfsp = (vfspack_t*)vfs;
|
||||||
|
if (pos < 0 || pos > vfsp->length)
|
||||||
|
return false;
|
||||||
|
vfsp->currentpos = pos + vfsp->startpos;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
unsigned long VFSPAK_Tell (struct vfsfile_s *vfs)
|
||||||
|
{
|
||||||
|
vfspack_t *vfsp = (vfspack_t*)vfs;
|
||||||
|
return vfsp->currentpos - vfsp->startpos;
|
||||||
|
}
|
||||||
|
unsigned long VFSPAK_GetLen (struct vfsfile_s *vfs)
|
||||||
|
{
|
||||||
|
vfspack_t *vfsp = (vfspack_t*)vfs;
|
||||||
|
return vfsp->length;
|
||||||
|
}
|
||||||
|
void VFSPAK_Close(vfsfile_t *vfs)
|
||||||
|
{
|
||||||
|
vfspack_t *vfsp = (vfspack_t*)vfs;
|
||||||
|
FSPAK_ClosePath(vfsp->parentpak); //tell the parent that we don't need it open any more (reference counts)
|
||||||
|
Z_Free(vfsp); //free ourselves.
|
||||||
|
}
|
||||||
|
vfsfile_t *FSPAK_OpenVFS(void *handle, flocation_t *loc, const char *mode)
|
||||||
|
{
|
||||||
|
pack_t *pack = (pack_t*)handle;
|
||||||
|
vfspack_t *vfs;
|
||||||
|
|
||||||
|
if (strcmp(mode, "rb"))
|
||||||
|
return NULL; //urm, unable to write/append
|
||||||
|
|
||||||
|
vfs = Z_Malloc(sizeof(vfspack_t));
|
||||||
|
|
||||||
|
vfs->parentpak = pack;
|
||||||
|
vfs->parentpak->references++;
|
||||||
|
|
||||||
|
vfs->startpos = loc->offset;
|
||||||
|
vfs->length = loc->len;
|
||||||
|
vfs->currentpos = vfs->startpos;
|
||||||
|
|
||||||
|
vfs->funcs.Close = VFSPAK_Close;
|
||||||
|
vfs->funcs.GetLen = VFSPAK_GetLen;
|
||||||
|
vfs->funcs.ReadBytes = VFSPAK_ReadBytes;
|
||||||
|
vfs->funcs.Seek = VFSPAK_Seek;
|
||||||
|
vfs->funcs.Tell = VFSPAK_Tell;
|
||||||
|
vfs->funcs.WriteBytes = VFSPAK_WriteBytes; //not supported
|
||||||
|
|
||||||
|
return (vfsfile_t *)vfs;
|
||||||
|
}
|
||||||
|
|
||||||
|
void FSPAK_ReadFile(void *handle, flocation_t *loc, char *buffer)
|
||||||
|
{
|
||||||
|
vfsfile_t *f;
|
||||||
|
f = FSPAK_OpenVFS(handle, loc, "rb");
|
||||||
|
if (!f) //err...
|
||||||
|
return;
|
||||||
|
VFS_READ(f, buffer, loc->len);
|
||||||
|
VFS_CLOSE(f);
|
||||||
|
/*
|
||||||
|
FILE *f;
|
||||||
|
f = fopen(loc->rawname, "rb");
|
||||||
|
if (!f) //err...
|
||||||
|
return;
|
||||||
|
fseek(f, loc->offset, SEEK_SET);
|
||||||
|
fread(buffer, 1, loc->len, f);
|
||||||
|
fclose(f);
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
searchpathfuncs_t packfilefuncs = {
|
||||||
|
FSPAK_PrintPath,
|
||||||
|
FSPAK_ClosePath,
|
||||||
|
FSPAK_BuildHash,
|
||||||
|
FSPAK_FLocate,
|
||||||
|
FSPAK_ReadFile,
|
||||||
|
FSPAK_EnumerateFiles,
|
||||||
|
FSPAK_LoadPackFile,
|
||||||
|
NULL,
|
||||||
|
FSPAK_OpenVFS
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef DOOMWADS
|
||||||
|
void *FSPAK_LoadDoomWadFile (vfsfile_t *packhandle, char *desc)
|
||||||
|
{
|
||||||
|
dwadheader_t header;
|
||||||
|
int i;
|
||||||
|
packfile_t *newfiles;
|
||||||
|
int numpackfiles;
|
||||||
|
pack_t *pack;
|
||||||
|
dwadfile_t info;
|
||||||
|
|
||||||
|
int section=0;
|
||||||
|
char sectionname[MAX_QPATH];
|
||||||
|
char filename[52];
|
||||||
|
char neatwadname[52];
|
||||||
|
|
||||||
|
if (packhandle == NULL)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
VFS_READ(packhandle, &header, sizeof(header));
|
||||||
|
if (header.id[1] != 'W' || header.id[2] != 'A' || header.id[3] != 'D')
|
||||||
|
return NULL; //not a doom wad
|
||||||
|
|
||||||
|
//doom wads come in two sorts. iwads and pwads.
|
||||||
|
//iwads are the master wads, pwads are meant to replace parts of the master wad.
|
||||||
|
//this is awkward, of course.
|
||||||
|
//we ignore the i/p bit for the most part, but with maps, pwads are given a prefixed name.
|
||||||
|
if (header.id[0] == 'I')
|
||||||
|
*neatwadname = '\0';
|
||||||
|
else if (header.id[0] == 'P')
|
||||||
|
{
|
||||||
|
COM_FileBase(desc, neatwadname, sizeof(neatwadname));
|
||||||
|
strcat(neatwadname, "#");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
header.dirofs = LittleLong (header.dirofs);
|
||||||
|
header.dirlen = LittleLong (header.dirlen);
|
||||||
|
|
||||||
|
numpackfiles = header.dirlen;
|
||||||
|
newfiles = (packfile_t*)Z_Malloc (numpackfiles * sizeof(packfile_t));
|
||||||
|
VFS_SEEK(packhandle, header.dirofs);
|
||||||
|
|
||||||
|
//doom wads are awkward.
|
||||||
|
//they have no directory structure, except for start/end 'files'.
|
||||||
|
//they follow along the lines of lumps after the parent name.
|
||||||
|
//a map is the name of that map, and then a squence of the lumps that form that map (found by next-with-that-name).
|
||||||
|
//this is a problem for a real virtual filesystem, so we add a hack to recognise special names and expand them specially.
|
||||||
|
for (i=0 ; i<numpackfiles ; i++)
|
||||||
|
{
|
||||||
|
VFS_READ (packhandle, &info, sizeof(info));
|
||||||
|
|
||||||
|
strcpy (filename, info.name);
|
||||||
|
filename[8] = '\0';
|
||||||
|
Q_strlwr(filename);
|
||||||
|
|
||||||
|
newfiles[i].filepos = LittleLong(info.filepos);
|
||||||
|
newfiles[i].filelen = LittleLong(info.filelen);
|
||||||
|
|
||||||
|
switch(section) //be prepared to remap filenames.
|
||||||
|
{
|
||||||
|
newsection:
|
||||||
|
case 0:
|
||||||
|
if (info.filelen == 0)
|
||||||
|
{ //marker for something...
|
||||||
|
|
||||||
|
if (!strcmp(filename, "s_start"))
|
||||||
|
{
|
||||||
|
section = 2;
|
||||||
|
sprintf (newfiles[i].name, "sprites/%s", filename); //the model loader has a hack to recognise .dsp
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (!strcmp(filename, "p_start"))
|
||||||
|
{
|
||||||
|
section = 3;
|
||||||
|
sprintf (newfiles[i].name, "patches/%s", filename); //the map loader will find these.
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (!strcmp(filename, "f_start"))
|
||||||
|
{
|
||||||
|
section = 4;
|
||||||
|
sprintf (newfiles[i].name, "flats/%s", filename); //the map loader will find these
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if ((filename[0] == 'e' && filename[2] == 'm') || !strncmp(filename, "map", 3))
|
||||||
|
{ //this is the start of a beutiful new map
|
||||||
|
section = 1;
|
||||||
|
strcpy(sectionname, filename);
|
||||||
|
sprintf (newfiles[i].name, "maps/%s%s.bsp", neatwadname, filename); //generate fake bsps to allow the server to find them
|
||||||
|
newfiles[i].filepos = 0;
|
||||||
|
newfiles[i].filelen = 4;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (!strncmp(filename, "gl_", 3) && ((filename[4] == 'e' && filename[5] == 'm') || !strncmp(filename+3, "map", 3)))
|
||||||
|
{ //this is the start of a beutiful new map
|
||||||
|
section = 5;
|
||||||
|
strcpy(sectionname, filename+3);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sprintf (newfiles[i].name, "wad/%s", filename); //but there are many files that we don't recognise/know about. archive them off to keep the vfs moderatly clean.
|
||||||
|
break;
|
||||||
|
case 1: //map section
|
||||||
|
if (strcmp(filename, "things") &&
|
||||||
|
strcmp(filename, "linedefs") &&
|
||||||
|
strcmp(filename, "sidedefs") &&
|
||||||
|
strcmp(filename, "vertexes") &&
|
||||||
|
strcmp(filename, "segs") &&
|
||||||
|
strcmp(filename, "ssectors") &&
|
||||||
|
strcmp(filename, "nodes") &&
|
||||||
|
strcmp(filename, "sectors") &&
|
||||||
|
strcmp(filename, "reject") &&
|
||||||
|
strcmp(filename, "blockmap"))
|
||||||
|
{
|
||||||
|
section = 0;
|
||||||
|
goto newsection;
|
||||||
|
}
|
||||||
|
sprintf (newfiles[i].name, "maps/%s%s.%s", neatwadname, sectionname, filename);
|
||||||
|
break;
|
||||||
|
case 5: //glbsp output section
|
||||||
|
if (strcmp(filename, "gl_vert") &&
|
||||||
|
strcmp(filename, "gl_segs") &&
|
||||||
|
strcmp(filename, "gl_ssect") &&
|
||||||
|
strcmp(filename, "gl_pvs") &&
|
||||||
|
strcmp(filename, "gl_nodes"))
|
||||||
|
{
|
||||||
|
section = 0;
|
||||||
|
goto newsection;
|
||||||
|
}
|
||||||
|
sprintf (newfiles[i].name, "maps/%s%s.%s", neatwadname, sectionname, filename);
|
||||||
|
break;
|
||||||
|
case 2: //sprite section
|
||||||
|
if (!strcmp(filename, "s_end"))
|
||||||
|
{
|
||||||
|
section = 0;
|
||||||
|
goto newsection;
|
||||||
|
}
|
||||||
|
sprintf (newfiles[i].name, "sprites/%s", filename);
|
||||||
|
break;
|
||||||
|
case 3: //patches section
|
||||||
|
if (!strcmp(filename, "p_end"))
|
||||||
|
{
|
||||||
|
section = 0;
|
||||||
|
goto newsection;
|
||||||
|
}
|
||||||
|
sprintf (newfiles[i].name, "patches/%s", filename);
|
||||||
|
break;
|
||||||
|
case 4: //flats section
|
||||||
|
if (!strcmp(filename, "f_end"))
|
||||||
|
{
|
||||||
|
section = 0;
|
||||||
|
goto newsection;
|
||||||
|
}
|
||||||
|
sprintf (newfiles[i].name, "flats/%s", filename);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pack = (pack_t*)Z_Malloc (sizeof (pack_t));
|
||||||
|
strcpy (pack->descname, desc);
|
||||||
|
pack->handle = packhandle;
|
||||||
|
pack->numfiles = numpackfiles;
|
||||||
|
pack->files = newfiles;
|
||||||
|
pack->filepos = 0;
|
||||||
|
VFS_SEEK(packhandle, pack->filepos);
|
||||||
|
|
||||||
|
pack->references++;
|
||||||
|
|
||||||
|
Con_TPrintf (TL_ADDEDPACKFILE, desc, numpackfiles);
|
||||||
|
return pack;
|
||||||
|
}
|
||||||
|
searchpathfuncs_t doomwadfilefuncs = {
|
||||||
|
FSPAK_PrintPath,
|
||||||
|
FSPAK_ClosePath,
|
||||||
|
FSPAK_BuildHash,
|
||||||
|
FSPAK_FLocate,
|
||||||
|
FSPAK_ReadFile,
|
||||||
|
FSPAK_EnumerateFiles,
|
||||||
|
FSPAK_LoadDoomWadFile,
|
||||||
|
NULL,
|
||||||
|
FSPAK_OpenVFS
|
||||||
|
};
|
||||||
|
#endif
|
226
engine/common/fs_stdio.c
Normal file
226
engine/common/fs_stdio.c
Normal file
|
@ -0,0 +1,226 @@
|
||||||
|
#include "quakedef.h"
|
||||||
|
#include "fs.h"
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
vfsfile_t funcs;
|
||||||
|
FILE *handle;
|
||||||
|
} vfsosfile_t;
|
||||||
|
int VFSOS_ReadBytes (struct vfsfile_s *file, void *buffer, int bytestoread)
|
||||||
|
{
|
||||||
|
vfsosfile_t *intfile = (vfsosfile_t*)file;
|
||||||
|
return fread(buffer, 1, bytestoread, intfile->handle);
|
||||||
|
}
|
||||||
|
int VFSOS_WriteBytes (struct vfsfile_s *file, const void *buffer, int bytestoread)
|
||||||
|
{
|
||||||
|
vfsosfile_t *intfile = (vfsosfile_t*)file;
|
||||||
|
return fwrite(buffer, 1, bytestoread, intfile->handle);
|
||||||
|
}
|
||||||
|
qboolean VFSOS_Seek (struct vfsfile_s *file, unsigned long pos)
|
||||||
|
{
|
||||||
|
vfsosfile_t *intfile = (vfsosfile_t*)file;
|
||||||
|
return fseek(intfile->handle, pos, SEEK_SET) == 0;
|
||||||
|
}
|
||||||
|
unsigned long VFSOS_Tell (struct vfsfile_s *file)
|
||||||
|
{
|
||||||
|
vfsosfile_t *intfile = (vfsosfile_t*)file;
|
||||||
|
return ftell(intfile->handle);
|
||||||
|
}
|
||||||
|
void VFSOS_Flush(struct vfsfile_s *file)
|
||||||
|
{
|
||||||
|
vfsosfile_t *intfile = (vfsosfile_t*)file;
|
||||||
|
fflush(intfile->handle);
|
||||||
|
}
|
||||||
|
unsigned long VFSOS_GetSize (struct vfsfile_s *file)
|
||||||
|
{
|
||||||
|
vfsosfile_t *intfile = (vfsosfile_t*)file;
|
||||||
|
|
||||||
|
unsigned int curpos;
|
||||||
|
unsigned int maxlen;
|
||||||
|
curpos = ftell(intfile->handle);
|
||||||
|
fseek(intfile->handle, 0, SEEK_END);
|
||||||
|
maxlen = ftell(intfile->handle);
|
||||||
|
fseek(intfile->handle, curpos, SEEK_SET);
|
||||||
|
|
||||||
|
return maxlen;
|
||||||
|
}
|
||||||
|
void VFSOS_Close(vfsfile_t *file)
|
||||||
|
{
|
||||||
|
vfsosfile_t *intfile = (vfsosfile_t*)file;
|
||||||
|
fclose(intfile->handle);
|
||||||
|
Z_Free(file);
|
||||||
|
}
|
||||||
|
|
||||||
|
vfsfile_t *FS_OpenTemp(void)
|
||||||
|
{
|
||||||
|
FILE *f;
|
||||||
|
vfsosfile_t *file;
|
||||||
|
|
||||||
|
f = tmpfile();
|
||||||
|
if (!f)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
file = Z_Malloc(sizeof(vfsosfile_t));
|
||||||
|
file->funcs.ReadBytes = VFSOS_ReadBytes;
|
||||||
|
file->funcs.WriteBytes = VFSOS_WriteBytes;
|
||||||
|
file->funcs.Seek = VFSOS_Seek;
|
||||||
|
file->funcs.Tell = VFSOS_Tell;
|
||||||
|
file->funcs.GetLen = VFSOS_GetSize;
|
||||||
|
file->funcs.Close = VFSOS_Close;
|
||||||
|
file->funcs.Flush = VFSOS_Flush;
|
||||||
|
file->handle = f;
|
||||||
|
|
||||||
|
return (vfsfile_t*)file;
|
||||||
|
}
|
||||||
|
|
||||||
|
vfsfile_t *VFSOS_Open(const char *osname, const char *mode)
|
||||||
|
{
|
||||||
|
FILE *f;
|
||||||
|
vfsosfile_t *file;
|
||||||
|
qboolean read = !!strchr(mode, 'r');
|
||||||
|
qboolean write = !!strchr(mode, 'w');
|
||||||
|
qboolean append = !!strchr(mode, 'a');
|
||||||
|
qboolean text = !!strchr(mode, 't');
|
||||||
|
char newmode[3];
|
||||||
|
int modec = 0;
|
||||||
|
|
||||||
|
if (read)
|
||||||
|
newmode[modec++] = 'r';
|
||||||
|
if (write)
|
||||||
|
newmode[modec++] = 'w';
|
||||||
|
if (append)
|
||||||
|
newmode[modec++] = 'a';
|
||||||
|
if (text)
|
||||||
|
newmode[modec++] = 't';
|
||||||
|
else
|
||||||
|
newmode[modec++] = 'b';
|
||||||
|
newmode[modec++] = '\0';
|
||||||
|
|
||||||
|
f = fopen(osname, newmode);
|
||||||
|
if (!f)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
file = Z_Malloc(sizeof(vfsosfile_t));
|
||||||
|
file->funcs.ReadBytes = strchr(mode, 'r')?VFSOS_ReadBytes:NULL;
|
||||||
|
file->funcs.WriteBytes = (strchr(mode, 'w')||strchr(mode, 'a'))?VFSOS_WriteBytes:NULL;
|
||||||
|
file->funcs.Seek = VFSOS_Seek;
|
||||||
|
file->funcs.Tell = VFSOS_Tell;
|
||||||
|
file->funcs.GetLen = VFSOS_GetSize;
|
||||||
|
file->funcs.Close = VFSOS_Close;
|
||||||
|
file->funcs.Flush = VFSOS_Flush;
|
||||||
|
file->handle = f;
|
||||||
|
|
||||||
|
return (vfsfile_t*)file;
|
||||||
|
}
|
||||||
|
|
||||||
|
vfsfile_t *FSOS_OpenVFS(void *handle, flocation_t *loc, const char *mode)
|
||||||
|
{
|
||||||
|
char diskname[MAX_OSPATH];
|
||||||
|
|
||||||
|
//path is already cleaned, as anything that gets a valid loc needs cleaning up first.
|
||||||
|
|
||||||
|
snprintf(diskname, sizeof(diskname), "%s/%s", (char*)handle, loc->rawname);
|
||||||
|
|
||||||
|
return VFSOS_Open(diskname, mode);
|
||||||
|
}
|
||||||
|
|
||||||
|
void FSOS_PrintPath(void *handle)
|
||||||
|
{
|
||||||
|
Con_Printf("%s\n", handle);
|
||||||
|
}
|
||||||
|
void FSOS_ClosePath(void *handle)
|
||||||
|
{
|
||||||
|
Z_Free(handle);
|
||||||
|
}
|
||||||
|
int FSOS_RebuildFSHash(const char *filename, int filesize, void *data)
|
||||||
|
{
|
||||||
|
if (filename[strlen(filename)-1] == '/')
|
||||||
|
{ //this is actually a directory
|
||||||
|
|
||||||
|
char childpath[256];
|
||||||
|
sprintf(childpath, "%s*", filename);
|
||||||
|
Sys_EnumerateFiles((char*)data, childpath, FSOS_RebuildFSHash, data);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (!Hash_GetInsensative(&filesystemhash, filename))
|
||||||
|
{
|
||||||
|
bucket_t *bucket = (bucket_t*)BZ_Malloc(sizeof(bucket_t) + strlen(filename)+1);
|
||||||
|
strcpy((char *)(bucket+1), filename);
|
||||||
|
#ifdef _WIN32
|
||||||
|
Q_strlwr((char *)(bucket+1));
|
||||||
|
#endif
|
||||||
|
Hash_AddInsensative(&filesystemhash, (char *)(bucket+1), data, bucket);
|
||||||
|
|
||||||
|
fs_hash_files++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
fs_hash_dups++;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
void FSOS_BuildHash(void *handle)
|
||||||
|
{
|
||||||
|
Sys_EnumerateFiles(handle, "*", FSOS_RebuildFSHash, handle);
|
||||||
|
}
|
||||||
|
qboolean FSOS_FLocate(void *handle, flocation_t *loc, const char *filename, void *hashedresult)
|
||||||
|
{
|
||||||
|
FILE *f;
|
||||||
|
int len;
|
||||||
|
char netpath[MAX_OSPATH];
|
||||||
|
|
||||||
|
|
||||||
|
if (hashedresult && (void *)hashedresult != handle)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
/*
|
||||||
|
if (!static_registered)
|
||||||
|
{ // if not a registered version, don't ever go beyond base
|
||||||
|
if ( strchr (filename, '/') || strchr (filename,'\\'))
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
// check a file in the directory tree
|
||||||
|
snprintf (netpath, sizeof(netpath)-1, "%s/%s",(char*)handle, filename);
|
||||||
|
|
||||||
|
f = fopen(netpath, "rb");
|
||||||
|
if (!f)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
fseek(f, 0, SEEK_END);
|
||||||
|
len = ftell(f);
|
||||||
|
fclose(f);
|
||||||
|
if (loc)
|
||||||
|
{
|
||||||
|
loc->len = len;
|
||||||
|
loc->offset = 0;
|
||||||
|
loc->index = 0;
|
||||||
|
Q_strncpyz(loc->rawname, filename, sizeof(loc->rawname));
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
void FSOS_ReadFile(void *handle, flocation_t *loc, char *buffer)
|
||||||
|
{
|
||||||
|
FILE *f;
|
||||||
|
f = fopen(loc->rawname, "rb");
|
||||||
|
if (!f) //err...
|
||||||
|
return;
|
||||||
|
fseek(f, loc->offset, SEEK_SET);
|
||||||
|
fread(buffer, 1, loc->len, f);
|
||||||
|
fclose(f);
|
||||||
|
}
|
||||||
|
int FSOS_EnumerateFiles (void *handle, const char *match, int (*func)(const char *, int, void *), void *parm)
|
||||||
|
{
|
||||||
|
return Sys_EnumerateFiles(handle, match, func, parm);
|
||||||
|
}
|
||||||
|
|
||||||
|
searchpathfuncs_t osfilefuncs = {
|
||||||
|
FSOS_PrintPath,
|
||||||
|
FSOS_ClosePath,
|
||||||
|
FSOS_BuildHash,
|
||||||
|
FSOS_FLocate,
|
||||||
|
FSOS_ReadFile,
|
||||||
|
FSOS_EnumerateFiles,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
FSOS_OpenVFS
|
||||||
|
};
|
461
engine/common/fs_zip.c
Normal file
461
engine/common/fs_zip.c
Normal file
|
@ -0,0 +1,461 @@
|
||||||
|
#include "quakedef.h"
|
||||||
|
#include "fs.h"
|
||||||
|
|
||||||
|
#ifdef AVAIL_ZLIB
|
||||||
|
|
||||||
|
#ifndef ZEXPORT
|
||||||
|
#define ZEXPORT VARGS
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <zlib.h>
|
||||||
|
#include "unzip.c"
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
#pragma comment( lib, "../libs/zlib.lib" )
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
char name[MAX_QPATH];
|
||||||
|
int filepos, filelen;
|
||||||
|
|
||||||
|
bucket_t bucket;
|
||||||
|
} zpackfile_t;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct zipfile_s
|
||||||
|
{
|
||||||
|
char filename[MAX_QPATH];
|
||||||
|
unzFile handle;
|
||||||
|
int numfiles;
|
||||||
|
zpackfile_t *files;
|
||||||
|
|
||||||
|
#ifdef HASH_FILESYSTEM
|
||||||
|
hashtable_t hash;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
vfsfile_t *raw;
|
||||||
|
vfsfile_t *currentfile; //our unzip.c can only handle one active file at any one time
|
||||||
|
//so we have to keep closing and switching.
|
||||||
|
//slow, but it works. most of the time we'll only have a single file open anyway.
|
||||||
|
int references; //and a reference count
|
||||||
|
} zipfile_t;
|
||||||
|
|
||||||
|
|
||||||
|
static void FSZIP_PrintPath(void *handle)
|
||||||
|
{
|
||||||
|
zipfile_t *zip = handle;
|
||||||
|
|
||||||
|
if (zip->references != 1)
|
||||||
|
Con_Printf("%s (%i)\n", zip->filename, zip->references-1);
|
||||||
|
else
|
||||||
|
Con_Printf("%s\n", zip->filename);
|
||||||
|
}
|
||||||
|
static void FSZIP_ClosePath(void *handle)
|
||||||
|
{
|
||||||
|
zipfile_t *zip = handle;
|
||||||
|
|
||||||
|
if (--zip->references > 0)
|
||||||
|
return; //not yet time
|
||||||
|
|
||||||
|
unzClose(zip->handle);
|
||||||
|
if (zip->files)
|
||||||
|
Z_Free(zip->files);
|
||||||
|
Z_Free(zip);
|
||||||
|
}
|
||||||
|
static void FSZIP_BuildHash(void *handle)
|
||||||
|
{
|
||||||
|
zipfile_t *zip = handle;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < zip->numfiles; i++)
|
||||||
|
{
|
||||||
|
if (!Hash_GetInsensative(&filesystemhash, zip->files[i].name))
|
||||||
|
{
|
||||||
|
fs_hash_files++;
|
||||||
|
Hash_AddInsensative(&filesystemhash, zip->files[i].name, &zip->files[i], &zip->files[i].bucket);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
fs_hash_dups++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
static qboolean FSZIP_FLocate(void *handle, flocation_t *loc, const char *filename, void *hashedresult)
|
||||||
|
{
|
||||||
|
zpackfile_t *pf = hashedresult;
|
||||||
|
int i, len;
|
||||||
|
zipfile_t *zip = handle;
|
||||||
|
|
||||||
|
// look through all the pak file elements
|
||||||
|
|
||||||
|
if (pf)
|
||||||
|
{ //is this a pointer to a file in this pak?
|
||||||
|
if (pf < zip->files || pf >= zip->files + zip->numfiles)
|
||||||
|
return false; //was found in a different path
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (i=0 ; i<zip->numfiles ; i++) //look for the file
|
||||||
|
{
|
||||||
|
if (!stricmp (zip->files[i].name, filename))
|
||||||
|
{
|
||||||
|
pf = &zip->files[i];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pf)
|
||||||
|
{
|
||||||
|
len = pf->filelen;
|
||||||
|
if (loc)
|
||||||
|
{
|
||||||
|
loc->index = pf - zip->files;
|
||||||
|
strcpy(loc->rawname, zip->filename);
|
||||||
|
loc->offset = pf->filepos;
|
||||||
|
loc->len = pf->filelen;
|
||||||
|
|
||||||
|
unzLocateFileMy (zip->handle, loc->index, zip->files[loc->index].filepos);
|
||||||
|
loc->offset = unzGetCurrentFileUncompressedPos(zip->handle);
|
||||||
|
// if (loc->offset<0)
|
||||||
|
// { //file not found, or is compressed.
|
||||||
|
// *loc->rawname = '\0';
|
||||||
|
// loc->offset=0;
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void FSZIP_ReadFile(void *handle, flocation_t *loc, char *buffer)
|
||||||
|
{
|
||||||
|
zipfile_t *zip = handle;
|
||||||
|
int err;
|
||||||
|
|
||||||
|
unzLocateFileMy (zip->handle, loc->index, zip->files[loc->index].filepos);
|
||||||
|
|
||||||
|
unzOpenCurrentFile (zip->handle);
|
||||||
|
err = unzReadCurrentFile (zip->handle, buffer, zip->files[loc->index].filelen);
|
||||||
|
unzCloseCurrentFile (zip->handle);
|
||||||
|
|
||||||
|
if (err!=zip->files[loc->index].filelen)
|
||||||
|
{
|
||||||
|
Con_Printf ("Can't extract file \"%s:%s\" (corrupt)\n", zip->filename, zip->files[loc->index].name);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int FSZIP_EnumerateFiles (void *handle, const char *match, int (*func)(const char *, int, void *), void *parm)
|
||||||
|
{
|
||||||
|
zipfile_t *zip = handle;
|
||||||
|
int num;
|
||||||
|
|
||||||
|
for (num = 0; num<(int)zip->numfiles; num++)
|
||||||
|
{
|
||||||
|
if (wildcmp(match, zip->files[num].name))
|
||||||
|
{
|
||||||
|
if (!func(zip->files[num].name, zip->files[num].filelen, parm))
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
=================
|
||||||
|
COM_LoadZipFile
|
||||||
|
|
||||||
|
Takes an explicit (not game tree related) path to a pak file.
|
||||||
|
|
||||||
|
Loads the header and directory, adding the files at the beginning
|
||||||
|
of the list so they override previous pack files.
|
||||||
|
=================
|
||||||
|
*/
|
||||||
|
static void *FSZIP_LoadZipFile (vfsfile_t *packhandle, const char *desc)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
int nextfileziphandle;
|
||||||
|
|
||||||
|
zipfile_t *zip;
|
||||||
|
zpackfile_t *newfiles;
|
||||||
|
|
||||||
|
unz_global_info globalinf = {0};
|
||||||
|
unz_file_info file_info;
|
||||||
|
|
||||||
|
zip = Z_Malloc(sizeof(zipfile_t));
|
||||||
|
Q_strncpyz(zip->filename, desc, sizeof(zip->filename));
|
||||||
|
zip->handle = unzOpen ((zip->raw = packhandle));
|
||||||
|
if (!zip->handle)
|
||||||
|
{
|
||||||
|
Z_Free(zip);
|
||||||
|
Con_TPrintf (TL_COULDNTOPENZIP, desc);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
unzGetGlobalInfo (zip->handle, &globalinf);
|
||||||
|
|
||||||
|
zip->numfiles = globalinf.number_entry;
|
||||||
|
|
||||||
|
zip->files = newfiles = Z_Malloc (zip->numfiles * sizeof(zpackfile_t));
|
||||||
|
for (i = 0; i < zip->numfiles; i++)
|
||||||
|
{
|
||||||
|
if (unzGetCurrentFileInfo (zip->handle, &file_info, newfiles[i].name, sizeof(newfiles[i].name), NULL, 0, NULL, 0) != UNZ_OK)
|
||||||
|
Con_Printf("Zip Error\n");
|
||||||
|
Q_strlwr(newfiles[i].name);
|
||||||
|
newfiles[i].filelen = file_info.uncompressed_size;
|
||||||
|
newfiles[i].filepos = file_info.c_offset;
|
||||||
|
|
||||||
|
nextfileziphandle = unzGoToNextFile (zip->handle);
|
||||||
|
if (nextfileziphandle == UNZ_END_OF_LIST_OF_FILE)
|
||||||
|
break;
|
||||||
|
else if (nextfileziphandle != UNZ_OK)
|
||||||
|
Con_Printf("Zip Error\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
zip->references = 1;
|
||||||
|
zip->currentfile = NULL;
|
||||||
|
|
||||||
|
Con_TPrintf (TL_ADDEDZIPFILE, desc, zip->numfiles);
|
||||||
|
return zip;
|
||||||
|
}
|
||||||
|
|
||||||
|
int FSZIP_GeneratePureCRC(void *handle, int seed, int crctype)
|
||||||
|
{
|
||||||
|
zipfile_t *zip = handle;
|
||||||
|
unz_file_info file_info;
|
||||||
|
|
||||||
|
int *filecrcs;
|
||||||
|
int numcrcs=0;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
filecrcs = BZ_Malloc((zip->numfiles+1)*sizeof(int));
|
||||||
|
filecrcs[numcrcs++] = seed;
|
||||||
|
|
||||||
|
unzGoToFirstFile(zip->handle);
|
||||||
|
for (i = 0; i < zip->numfiles; i++)
|
||||||
|
{
|
||||||
|
if (zip->files[i].filelen>0)
|
||||||
|
{
|
||||||
|
unzGetCurrentFileInfo (zip->handle, &file_info, NULL, 0, NULL, 0, NULL, 0);
|
||||||
|
filecrcs[numcrcs++] = file_info.crc;
|
||||||
|
}
|
||||||
|
unzGoToNextFile (zip->handle);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (crctype)
|
||||||
|
return Com_BlockChecksum(filecrcs, numcrcs*sizeof(int));
|
||||||
|
else
|
||||||
|
return Com_BlockChecksum(filecrcs+1, (numcrcs-1)*sizeof(int));
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
vfsfile_t funcs;
|
||||||
|
|
||||||
|
vfsfile_t *defer;
|
||||||
|
|
||||||
|
//in case we're forced away.
|
||||||
|
zipfile_t *parent;
|
||||||
|
qboolean iscompressed;
|
||||||
|
int pos;
|
||||||
|
int length; //try and optimise some things
|
||||||
|
int index;
|
||||||
|
int startpos;
|
||||||
|
} vfszip_t;
|
||||||
|
void VFSZIP_MakeActive(vfszip_t *vfsz)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
char buffer[8192]; //must be power of two
|
||||||
|
|
||||||
|
if ((vfszip_t*)vfsz->parent->currentfile == vfsz)
|
||||||
|
return; //already us
|
||||||
|
if (vfsz->parent->currentfile)
|
||||||
|
unzCloseCurrentFile(vfsz->parent->handle);
|
||||||
|
|
||||||
|
unzLocateFileMy(vfsz->parent->handle, vfsz->index, vfsz->startpos);
|
||||||
|
unzOpenCurrentFile(vfsz->parent->handle);
|
||||||
|
|
||||||
|
|
||||||
|
if (vfsz->pos > 0)
|
||||||
|
{
|
||||||
|
Con_DPrintf("VFSZIP_MakeActive: Shockingly inefficient\n");
|
||||||
|
|
||||||
|
//now we need to seek up to where we had previously gotten to.
|
||||||
|
for (i = 0; i < vfsz->pos-sizeof(buffer); i++)
|
||||||
|
unzReadCurrentFile(vfsz->parent->handle, buffer, sizeof(buffer));
|
||||||
|
unzReadCurrentFile(vfsz->parent->handle, buffer, vfsz->pos - i);
|
||||||
|
}
|
||||||
|
|
||||||
|
vfsz->parent->currentfile = (vfsfile_t*)vfsz;
|
||||||
|
}
|
||||||
|
|
||||||
|
int VFSZIP_ReadBytes (struct vfsfile_s *file, void *buffer, int bytestoread)
|
||||||
|
{
|
||||||
|
int read;
|
||||||
|
vfszip_t *vfsz = (vfszip_t*)file;
|
||||||
|
|
||||||
|
if (vfsz->defer)
|
||||||
|
return VFS_READ(vfsz->defer, buffer, bytestoread);
|
||||||
|
|
||||||
|
if (vfsz->iscompressed)
|
||||||
|
{
|
||||||
|
VFSZIP_MakeActive(vfsz);
|
||||||
|
read = unzReadCurrentFile(vfsz->parent->handle, buffer, bytestoread);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (vfsz->parent->currentfile != file)
|
||||||
|
{
|
||||||
|
unzCloseCurrentFile(vfsz->parent->handle);
|
||||||
|
VFS_SEEK(vfsz->parent->raw, vfsz->pos+vfsz->startpos);
|
||||||
|
vfsz->parent->currentfile = file;
|
||||||
|
}
|
||||||
|
read = VFS_READ(vfsz->parent->raw, buffer, bytestoread);
|
||||||
|
}
|
||||||
|
|
||||||
|
vfsz->pos += read;
|
||||||
|
return read;
|
||||||
|
}
|
||||||
|
int VFSZIP_WriteBytes (struct vfsfile_s *file, void *buffer, int bytestoread)
|
||||||
|
{
|
||||||
|
Sys_Error("VFSZIP_WriteBytes: Not supported\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
qboolean VFSZIP_Seek (struct vfsfile_s *file, unsigned long pos)
|
||||||
|
{
|
||||||
|
vfszip_t *vfsz = (vfszip_t*)file;
|
||||||
|
|
||||||
|
if (vfsz->defer)
|
||||||
|
return VFS_SEEK(vfsz->defer, pos);
|
||||||
|
|
||||||
|
//This is *really* inefficient
|
||||||
|
if (vfsz->parent->currentfile == file)
|
||||||
|
{
|
||||||
|
if (vfsz->iscompressed)
|
||||||
|
{ //if they're going to seek on a file in a zip, let's just copy it out
|
||||||
|
char buffer[8192];
|
||||||
|
unsigned int chunk;
|
||||||
|
unsigned int i;
|
||||||
|
unsigned int length;
|
||||||
|
|
||||||
|
vfsz->defer = FS_OpenTemp();
|
||||||
|
if (vfsz->defer)
|
||||||
|
{
|
||||||
|
unzCloseCurrentFile(vfsz->parent->handle);
|
||||||
|
vfsz->parent->currentfile = NULL; //make it not us
|
||||||
|
|
||||||
|
length = vfsz->length;
|
||||||
|
i = 0;
|
||||||
|
vfsz->pos = 0;
|
||||||
|
VFSZIP_MakeActive(vfsz);
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
chunk = length - i;
|
||||||
|
if (chunk > sizeof(buffer))
|
||||||
|
chunk = sizeof(buffer);
|
||||||
|
if (chunk == 0)
|
||||||
|
break;
|
||||||
|
unzReadCurrentFile(vfsz->parent->handle, buffer, chunk);
|
||||||
|
VFS_WRITE(vfsz->defer, buffer, chunk);
|
||||||
|
|
||||||
|
i += chunk;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
unzCloseCurrentFile(vfsz->parent->handle);
|
||||||
|
vfsz->parent->currentfile = NULL; //make it not us
|
||||||
|
|
||||||
|
if (vfsz->defer)
|
||||||
|
return VFS_SEEK(vfsz->defer, pos);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if (pos < 0 || pos > vfsz->length)
|
||||||
|
return false;
|
||||||
|
vfsz->pos = pos;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
unsigned long VFSZIP_Tell (struct vfsfile_s *file)
|
||||||
|
{
|
||||||
|
vfszip_t *vfsz = (vfszip_t*)file;
|
||||||
|
|
||||||
|
if (vfsz->defer)
|
||||||
|
return VFS_TELL(vfsz->defer);
|
||||||
|
|
||||||
|
return vfsz->pos;
|
||||||
|
}
|
||||||
|
unsigned long VFSZIP_GetLen (struct vfsfile_s *file)
|
||||||
|
{
|
||||||
|
vfszip_t *vfsz = (vfszip_t*)file;
|
||||||
|
return vfsz->length;
|
||||||
|
}
|
||||||
|
void VFSZIP_Close (struct vfsfile_s *file)
|
||||||
|
{
|
||||||
|
vfszip_t *vfsz = (vfszip_t*)file;
|
||||||
|
|
||||||
|
if (vfsz->parent->currentfile == file)
|
||||||
|
vfsz->parent->currentfile = NULL; //make it not us
|
||||||
|
|
||||||
|
if (vfsz->defer)
|
||||||
|
VFS_CLOSE(vfsz->defer);
|
||||||
|
|
||||||
|
FSZIP_ClosePath(vfsz->parent);
|
||||||
|
Z_Free(vfsz);
|
||||||
|
}
|
||||||
|
|
||||||
|
vfsfile_t *FSZIP_OpenVFS(void *handle, flocation_t *loc, const char *mode)
|
||||||
|
{
|
||||||
|
int rawofs;
|
||||||
|
zipfile_t *zip = handle;
|
||||||
|
vfszip_t *vfsz;
|
||||||
|
|
||||||
|
if (strcmp(mode, "rb"))
|
||||||
|
return NULL; //urm, unable to write/append
|
||||||
|
|
||||||
|
vfsz = Z_Malloc(sizeof(vfszip_t));
|
||||||
|
|
||||||
|
vfsz->parent = zip;
|
||||||
|
vfsz->index = loc->index;
|
||||||
|
vfsz->startpos = zip->files[loc->index].filepos;
|
||||||
|
vfsz->length = loc->len;
|
||||||
|
|
||||||
|
vfsz->funcs.Close = VFSZIP_Close;
|
||||||
|
vfsz->funcs.GetLen = VFSZIP_GetLen;
|
||||||
|
vfsz->funcs.ReadBytes = VFSZIP_ReadBytes;
|
||||||
|
vfsz->funcs.Seek = VFSZIP_Seek;
|
||||||
|
vfsz->funcs.Tell = VFSZIP_Tell;
|
||||||
|
vfsz->funcs.WriteBytes = NULL;
|
||||||
|
vfsz->funcs.seekingisabadplan = true;
|
||||||
|
|
||||||
|
unzLocateFileMy(vfsz->parent->handle, vfsz->index, vfsz->startpos);
|
||||||
|
rawofs = unzGetCurrentFileUncompressedPos(zip->handle);
|
||||||
|
vfsz->iscompressed = rawofs<0;
|
||||||
|
if (!vfsz->iscompressed)
|
||||||
|
{
|
||||||
|
vfsz->startpos = rawofs;
|
||||||
|
VFS_SEEK(zip->raw, vfsz->startpos);
|
||||||
|
vfsz->parent->currentfile = (vfsfile_t*)vfsz;
|
||||||
|
}
|
||||||
|
|
||||||
|
zip->references++;
|
||||||
|
|
||||||
|
return (vfsfile_t*)vfsz;
|
||||||
|
}
|
||||||
|
|
||||||
|
searchpathfuncs_t zipfilefuncs = {
|
||||||
|
FSZIP_PrintPath,
|
||||||
|
FSZIP_ClosePath,
|
||||||
|
FSZIP_BuildHash,
|
||||||
|
FSZIP_FLocate,
|
||||||
|
FSZIP_ReadFile,
|
||||||
|
FSZIP_EnumerateFiles,
|
||||||
|
FSZIP_LoadZipFile,
|
||||||
|
FSZIP_GeneratePureCRC,
|
||||||
|
FSZIP_OpenVFS
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -388,15 +388,24 @@ void AngleVectors (vec3_t angles, vec3_t forward, vec3_t right, vec3_t up)
|
||||||
sr = sin(angle);
|
sr = sin(angle);
|
||||||
cr = cos(angle);
|
cr = cos(angle);
|
||||||
|
|
||||||
forward[0] = cp*cy;
|
if (forward)
|
||||||
forward[1] = cp*sy;
|
{
|
||||||
forward[2] = -sp;
|
forward[0] = cp*cy;
|
||||||
right[0] = (-1*sr*sp*cy+-1*cr*-sy);
|
forward[1] = cp*sy;
|
||||||
right[1] = (-1*sr*sp*sy+-1*cr*cy);
|
forward[2] = -sp;
|
||||||
right[2] = -1*sr*cp;
|
}
|
||||||
up[0] = (cr*sp*cy+-sr*-sy);
|
if (right)
|
||||||
up[1] = (cr*sp*sy+-sr*cy);
|
{
|
||||||
up[2] = cr*cp;
|
right[0] = (-1*sr*sp*cy+-1*cr*-sy);
|
||||||
|
right[1] = (-1*sr*sp*sy+-1*cr*cy);
|
||||||
|
right[2] = -1*sr*cp;
|
||||||
|
}
|
||||||
|
if (up)
|
||||||
|
{
|
||||||
|
up[0] = (cr*sp*cy+-sr*-sy);
|
||||||
|
up[1] = (cr*sp*sy+-sr*cy);
|
||||||
|
up[2] = cr*cp;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int VectorCompare (vec3_t v1, vec3_t v2)
|
int VectorCompare (vec3_t v1, vec3_t v2)
|
||||||
|
|
|
@ -89,13 +89,13 @@ qboolean NET_CompareAdr (netadr_t a, netadr_t b);
|
||||||
qboolean NET_CompareBaseAdr (netadr_t a, netadr_t b);
|
qboolean NET_CompareBaseAdr (netadr_t a, netadr_t b);
|
||||||
char *NET_AdrToString (char *s, int len, netadr_t a);
|
char *NET_AdrToString (char *s, int len, netadr_t a);
|
||||||
char *NET_BaseAdrToString (char *s, int len, netadr_t a);
|
char *NET_BaseAdrToString (char *s, int len, netadr_t a);
|
||||||
qboolean NET_StringToSockaddr (char *s, struct sockaddr_qstorage *sadr);
|
qboolean NET_StringToSockaddr (const char *s, struct sockaddr_qstorage *sadr);
|
||||||
qboolean NET_StringToAdr (char *s, netadr_t *a);
|
qboolean NET_StringToAdr (const char *s, netadr_t *a);
|
||||||
qboolean NET_IsClientLegal(netadr_t *adr);
|
qboolean NET_IsClientLegal(netadr_t *adr);
|
||||||
|
|
||||||
qboolean NET_IsLoopBackAddress (netadr_t adr);
|
qboolean NET_IsLoopBackAddress (netadr_t adr);
|
||||||
|
|
||||||
qboolean NET_StringToAdrMasked (char *s, netadr_t *a, netadr_t *amask);
|
qboolean NET_StringToAdrMasked (const char *s, netadr_t *a, netadr_t *amask);
|
||||||
char *NET_AdrToStringMasked (char *s, int len, netadr_t a, netadr_t amask);
|
char *NET_AdrToStringMasked (char *s, int len, netadr_t a, netadr_t amask);
|
||||||
void NET_IntegerToMask (netadr_t *a, netadr_t *amask, int bits);
|
void NET_IntegerToMask (netadr_t *a, netadr_t *amask, int bits);
|
||||||
qboolean NET_CompareAdrMasked(netadr_t a, netadr_t b, netadr_t mask);
|
qboolean NET_CompareAdrMasked(netadr_t a, netadr_t b, netadr_t mask);
|
||||||
|
|
|
@ -563,7 +563,7 @@ any form of ipv6, including port number.
|
||||||
sscanf (copy, "%x", &val); \
|
sscanf (copy, "%x", &val); \
|
||||||
((struct sockaddr_ipx *)sadr)->dest = val
|
((struct sockaddr_ipx *)sadr)->dest = val
|
||||||
|
|
||||||
qboolean NET_StringToSockaddr (char *s, struct sockaddr_qstorage *sadr)
|
qboolean NET_StringToSockaddr (const char *s, struct sockaddr_qstorage *sadr)
|
||||||
{
|
{
|
||||||
struct hostent *h;
|
struct hostent *h;
|
||||||
char *colon;
|
char *colon;
|
||||||
|
@ -619,9 +619,12 @@ qboolean NET_StringToSockaddr (char *s, struct sockaddr_qstorage *sadr)
|
||||||
error = EAI_NONAME;
|
error = EAI_NONAME;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
*port = 0;
|
len = port - (s+1);
|
||||||
error = pgetaddrinfo(s+1, port+2, &udp6hint, &addrinfo);
|
if (len >= sizeof(dupbase))
|
||||||
*port = ']';
|
len = sizeof(dupbase)-1;
|
||||||
|
strncpy(dupbase, s+1, len);
|
||||||
|
dupbase[len] = '\0';
|
||||||
|
error = pgetaddrinfo(dupbase, port+2, &udp6hint, &addrinfo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -709,7 +712,7 @@ dblbreak:
|
||||||
accepts anything that NET_StringToSockaddr accepts plus certain url schemes
|
accepts anything that NET_StringToSockaddr accepts plus certain url schemes
|
||||||
including: tcp, irc
|
including: tcp, irc
|
||||||
*/
|
*/
|
||||||
qboolean NET_StringToAdr (char *s, netadr_t *a)
|
qboolean NET_StringToAdr (const char *s, netadr_t *a)
|
||||||
{
|
{
|
||||||
struct sockaddr_qstorage sadr;
|
struct sockaddr_qstorage sadr;
|
||||||
|
|
||||||
|
@ -872,9 +875,9 @@ void NET_IntegerToMask (netadr_t *a, netadr_t *amask, int bits)
|
||||||
|
|
||||||
// ParsePartialIPv4: check string to see if it is a partial IPv4 address and
|
// ParsePartialIPv4: check string to see if it is a partial IPv4 address and
|
||||||
// return bits to mask and set netadr_t or 0 if not an address
|
// return bits to mask and set netadr_t or 0 if not an address
|
||||||
int ParsePartialIPv4(char *s, netadr_t *a)
|
int ParsePartialIPv4(const char *s, netadr_t *a)
|
||||||
{
|
{
|
||||||
char *colon = NULL;
|
const char *colon = NULL;
|
||||||
char *address = a->address.ip;
|
char *address = a->address.ip;
|
||||||
int bits = 8;
|
int bits = 8;
|
||||||
|
|
||||||
|
@ -920,7 +923,7 @@ int ParsePartialIPv4(char *s, netadr_t *a)
|
||||||
|
|
||||||
// NET_StringToAdrMasked: extension to NET_StringToAdr to handle IP addresses
|
// NET_StringToAdrMasked: extension to NET_StringToAdr to handle IP addresses
|
||||||
// with masks or integers representing the bit masks
|
// with masks or integers representing the bit masks
|
||||||
qboolean NET_StringToAdrMasked (char *s, netadr_t *a, netadr_t *amask)
|
qboolean NET_StringToAdrMasked (const char *s, netadr_t *a, netadr_t *amask)
|
||||||
{
|
{
|
||||||
char t[64];
|
char t[64];
|
||||||
char *spoint;
|
char *spoint;
|
||||||
|
@ -1300,10 +1303,10 @@ void NET_SendLoopPacket (netsrc_t sock, int length, void *data, netadr_t to)
|
||||||
|
|
||||||
#define FTENET_ADDRTYPES 2
|
#define FTENET_ADDRTYPES 2
|
||||||
typedef struct ftenet_generic_connection_s {
|
typedef struct ftenet_generic_connection_s {
|
||||||
char *name;
|
const char *name;
|
||||||
|
|
||||||
int (*GetLocalAddress)(struct ftenet_generic_connection_s *con, netadr_t *local, int adridx);
|
int (*GetLocalAddress)(struct ftenet_generic_connection_s *con, netadr_t *local, int adridx);
|
||||||
qboolean (*ChangeLocalAddress)(struct ftenet_generic_connection_s *con, char *newaddress);
|
qboolean (*ChangeLocalAddress)(struct ftenet_generic_connection_s *con, const char *newaddress);
|
||||||
qboolean (*GetPacket)(struct ftenet_generic_connection_s *con);
|
qboolean (*GetPacket)(struct ftenet_generic_connection_s *con);
|
||||||
qboolean (*SendPacket)(struct ftenet_generic_connection_s *con, int length, void *data, netadr_t to);
|
qboolean (*SendPacket)(struct ftenet_generic_connection_s *con, int length, void *data, netadr_t to);
|
||||||
void (*Close)(struct ftenet_generic_connection_s *con);
|
void (*Close)(struct ftenet_generic_connection_s *con);
|
||||||
|
@ -1327,7 +1330,7 @@ ftenet_connections_t *FTENET_CreateCollection(qboolean listen)
|
||||||
return col;
|
return col;
|
||||||
}
|
}
|
||||||
|
|
||||||
qboolean FTENET_AddToCollection(ftenet_connections_t *col, char *name, char *address, ftenet_generic_connection_t *(*establish)(qboolean isserver, char *address))
|
qboolean FTENET_AddToCollection(ftenet_connections_t *col, const char *name, const char *address, ftenet_generic_connection_t *(*establish)(qboolean isserver, const char *address))
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
if (!col)
|
if (!col)
|
||||||
|
@ -1423,7 +1426,7 @@ qboolean FTENET_Loop_SendPacket(ftenet_generic_connection_t *con, int length, vo
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
ftenet_generic_connection_t *FTENET_Loop_EstablishConnection(qboolean isserver, char *address)
|
ftenet_generic_connection_t *FTENET_Loop_EstablishConnection(qboolean isserver, const char *address)
|
||||||
{
|
{
|
||||||
ftenet_generic_connection_t *newcon;
|
ftenet_generic_connection_t *newcon;
|
||||||
newcon = Z_Malloc(sizeof(*newcon));
|
newcon = Z_Malloc(sizeof(*newcon));
|
||||||
|
@ -1626,7 +1629,7 @@ qboolean FTENET_Generic_SendPacket(ftenet_generic_connection_t *con, int length,
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
qboolean NET_PortToAdr (int adrfamily, char *s, netadr_t *a)
|
qboolean NET_PortToAdr (int adrfamily, const char *s, netadr_t *a)
|
||||||
{
|
{
|
||||||
char *e;
|
char *e;
|
||||||
int port;
|
int port;
|
||||||
|
@ -1658,7 +1661,7 @@ qboolean NET_PortToAdr (int adrfamily, char *s, netadr_t *a)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
ftenet_generic_connection_t *FTENET_Generic_EstablishConnection(int adrfamily, int protocol, qboolean isserver, char *address)
|
ftenet_generic_connection_t *FTENET_Generic_EstablishConnection(int adrfamily, int protocol, qboolean isserver, const char *address)
|
||||||
{
|
{
|
||||||
//this is written to support either ipv4 or ipv6, depending on the remote addr.
|
//this is written to support either ipv4 or ipv6, depending on the remote addr.
|
||||||
ftenet_generic_connection_t *newcon;
|
ftenet_generic_connection_t *newcon;
|
||||||
|
@ -1735,17 +1738,17 @@ ftenet_generic_connection_t *FTENET_Generic_EstablishConnection(int adrfamily, i
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef IPPROTO_IPV6
|
#ifdef IPPROTO_IPV6
|
||||||
ftenet_generic_connection_t *FTENET_UDP6_EstablishConnection(qboolean isserver, char *address)
|
ftenet_generic_connection_t *FTENET_UDP6_EstablishConnection(qboolean isserver, const char *address)
|
||||||
{
|
{
|
||||||
return FTENET_Generic_EstablishConnection(AF_INET6, IPPROTO_UDP, isserver, address);
|
return FTENET_Generic_EstablishConnection(AF_INET6, IPPROTO_UDP, isserver, address);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
ftenet_generic_connection_t *FTENET_UDP4_EstablishConnection(qboolean isserver, char *address)
|
ftenet_generic_connection_t *FTENET_UDP4_EstablishConnection(qboolean isserver, const char *address)
|
||||||
{
|
{
|
||||||
return FTENET_Generic_EstablishConnection(AF_INET, IPPROTO_UDP, isserver, address);
|
return FTENET_Generic_EstablishConnection(AF_INET, IPPROTO_UDP, isserver, address);
|
||||||
}
|
}
|
||||||
#ifdef USEIPX
|
#ifdef USEIPX
|
||||||
ftenet_generic_connection_t *FTENET_IPX_EstablishConnection(qboolean isserver, char *address)
|
ftenet_generic_connection_t *FTENET_IPX_EstablishConnection(qboolean isserver, const char *address)
|
||||||
{
|
{
|
||||||
return FTENET_Generic_EstablishConnection(AF_IPX, NSPROTO_IPX, isserver, address);
|
return FTENET_Generic_EstablishConnection(AF_IPX, NSPROTO_IPX, isserver, address);
|
||||||
}
|
}
|
||||||
|
@ -1946,7 +1949,7 @@ void FTENET_TCPConnect_Close(ftenet_generic_connection_t *gcon)
|
||||||
FTENET_Generic_Close(gcon);
|
FTENET_Generic_Close(gcon);
|
||||||
}
|
}
|
||||||
|
|
||||||
ftenet_generic_connection_t *FTENET_TCPConnect_EstablishConnection(int affamily, qboolean isserver, char *address)
|
ftenet_generic_connection_t *FTENET_TCPConnect_EstablishConnection(int affamily, qboolean isserver, const char *address)
|
||||||
{
|
{
|
||||||
//this is written to support either ipv4 or ipv6, depending on the remote addr.
|
//this is written to support either ipv4 or ipv6, depending on the remote addr.
|
||||||
ftenet_tcpconnect_connection_t *newcon;
|
ftenet_tcpconnect_connection_t *newcon;
|
||||||
|
@ -2055,13 +2058,13 @@ ftenet_generic_connection_t *FTENET_TCPConnect_EstablishConnection(int affamily,
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef IPPROTO_IPV6
|
#ifdef IPPROTO_IPV6
|
||||||
ftenet_generic_connection_t *FTENET_TCP6Connect_EstablishConnection(qboolean isserver, char *address)
|
ftenet_generic_connection_t *FTENET_TCP6Connect_EstablishConnection(qboolean isserver, const char *address)
|
||||||
{
|
{
|
||||||
return FTENET_TCPConnect_EstablishConnection(AF_INET6, isserver, address);
|
return FTENET_TCPConnect_EstablishConnection(AF_INET6, isserver, address);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
ftenet_generic_connection_t *FTENET_TCP4Connect_EstablishConnection(qboolean isserver, char *address)
|
ftenet_generic_connection_t *FTENET_TCP4Connect_EstablishConnection(qboolean isserver, const char *address)
|
||||||
{
|
{
|
||||||
return FTENET_TCPConnect_EstablishConnection(AF_INET, isserver, address);
|
return FTENET_TCPConnect_EstablishConnection(AF_INET, isserver, address);
|
||||||
}
|
}
|
||||||
|
@ -2606,7 +2609,7 @@ void FTENET_IRCConnect_Close(ftenet_generic_connection_t *gcon)
|
||||||
FTENET_Generic_Close(gcon);
|
FTENET_Generic_Close(gcon);
|
||||||
}
|
}
|
||||||
|
|
||||||
ftenet_generic_connection_t *FTENET_IRCConnect_EstablishConnection(qboolean isserver, char *address)
|
ftenet_generic_connection_t *FTENET_IRCConnect_EstablishConnection(qboolean isserver, const char *address)
|
||||||
{
|
{
|
||||||
//this is written to support either ipv4 or ipv6, depending on the remote addr.
|
//this is written to support either ipv4 or ipv6, depending on the remote addr.
|
||||||
ftenet_ircconnect_connection_t *newcon;
|
ftenet_ircconnect_connection_t *newcon;
|
||||||
|
@ -3254,7 +3257,7 @@ void NET_Init (void)
|
||||||
#ifndef SERVERONLY
|
#ifndef SERVERONLY
|
||||||
void NET_InitClient(void)
|
void NET_InitClient(void)
|
||||||
{
|
{
|
||||||
char *port;
|
const char *port;
|
||||||
int p;
|
int p;
|
||||||
port = STRINGIFY(PORT_CLIENT);
|
port = STRINGIFY(PORT_CLIENT);
|
||||||
|
|
||||||
|
@ -3474,7 +3477,7 @@ int VFSTCP_ReadBytes (struct vfsfile_s *file, void *buffer, int bytestoread)
|
||||||
return 0; //signal nothing available
|
return 0; //signal nothing available
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
int VFSTCP_WriteBytes (struct vfsfile_s *file, void *buffer, int bytestoread)
|
int VFSTCP_WriteBytes (struct vfsfile_s *file, const void *buffer, int bytestoread)
|
||||||
{
|
{
|
||||||
tcpfile_t *tf = (tcpfile_t*)file;
|
tcpfile_t *tf = (tcpfile_t*)file;
|
||||||
int len;
|
int len;
|
||||||
|
@ -3510,7 +3513,7 @@ void VFSTCP_Close (struct vfsfile_s *file)
|
||||||
Z_Free(file);
|
Z_Free(file);
|
||||||
}
|
}
|
||||||
|
|
||||||
vfsfile_t *FS_OpenTCP(char *name)
|
vfsfile_t *FS_OpenTCP(const char *name)
|
||||||
{
|
{
|
||||||
tcpfile_t *newf;
|
tcpfile_t *newf;
|
||||||
int sock;
|
int sock;
|
||||||
|
|
|
@ -329,10 +329,10 @@ plugin_t *Plug_Load(char *file)
|
||||||
return newplug;
|
return newplug;
|
||||||
}
|
}
|
||||||
|
|
||||||
int Plug_Emumerated (char *name, int size, void *param)
|
int Plug_Emumerated (const char *name, int size, void *param)
|
||||||
{
|
{
|
||||||
char vmname[MAX_QPATH];
|
char vmname[MAX_QPATH];
|
||||||
strcpy(vmname, name);
|
Q_strncpyz(vmname, name, sizeof(vmname));
|
||||||
vmname[strlen(vmname) - strlen(param)] = '\0';
|
vmname[strlen(vmname) - strlen(param)] = '\0';
|
||||||
if (!Plug_Load(vmname))
|
if (!Plug_Load(vmname))
|
||||||
Con_Printf("Couldn't load plugin %s\n", vmname);
|
Con_Printf("Couldn't load plugin %s\n", vmname);
|
||||||
|
|
|
@ -123,6 +123,8 @@ int PM_PointContents (vec3_t p)
|
||||||
model_t *pm;
|
model_t *pm;
|
||||||
|
|
||||||
pm = pmove.physents[0].model;
|
pm = pmove.physents[0].model;
|
||||||
|
if (!pm)
|
||||||
|
return FTECONTENTS_EMPTY;
|
||||||
pc = pm->funcs.PointContents(pm, p);
|
pc = pm->funcs.PointContents(pm, p);
|
||||||
//we need this for e2m2 - waterjumping on to plats wouldn't work otherwise.
|
//we need this for e2m2 - waterjumping on to plats wouldn't work otherwise.
|
||||||
for (num = 1; num < pmove.numphysent; num++)
|
for (num = 1; num < pmove.numphysent; num++)
|
||||||
|
|
|
@ -469,7 +469,7 @@ void PF_registercvar (progfuncs_t *prinst, struct globalvars_s *pr_globals)
|
||||||
////////////////////////////////////////////////////
|
////////////////////////////////////////////////////
|
||||||
//File access
|
//File access
|
||||||
|
|
||||||
#define MAX_QC_FILES 8
|
#define MAX_QC_FILES 256
|
||||||
|
|
||||||
#define FIRST_QC_FILE_INDEX 1000
|
#define FIRST_QC_FILE_INDEX 1000
|
||||||
|
|
||||||
|
@ -496,6 +496,7 @@ void PF_fopen (progfuncs_t *prinst, struct globalvars_s *pr_globals)
|
||||||
|
|
||||||
if (i == MAX_QC_FILES) //too many already open
|
if (i == MAX_QC_FILES) //too many already open
|
||||||
{
|
{
|
||||||
|
Con_Printf("qcfopen: too many files open (trying %s)\n", name);
|
||||||
G_FLOAT(OFS_RETURN) = -1;
|
G_FLOAT(OFS_RETURN) = -1;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -550,6 +551,14 @@ void PF_fopen (progfuncs_t *prinst, struct globalvars_s *pr_globals)
|
||||||
G_FLOAT(OFS_RETURN) = i + FIRST_QC_FILE_INDEX;
|
G_FLOAT(OFS_RETURN) = i + FIRST_QC_FILE_INDEX;
|
||||||
pf_fopen_files[i].prinst = prinst;
|
pf_fopen_files[i].prinst = prinst;
|
||||||
break;
|
break;
|
||||||
|
case 3:
|
||||||
|
pf_fopen_files[i].bufferlen = 0;
|
||||||
|
pf_fopen_files[i].data = "";
|
||||||
|
pf_fopen_files[i].len = 0;
|
||||||
|
pf_fopen_files[i].ofs = 0;
|
||||||
|
G_FLOAT(OFS_RETURN) = i + FIRST_QC_FILE_INDEX;
|
||||||
|
pf_fopen_files[i].prinst = prinst;
|
||||||
|
break;
|
||||||
default: //bad
|
default: //bad
|
||||||
G_FLOAT(OFS_RETURN) = -1;
|
G_FLOAT(OFS_RETURN) = -1;
|
||||||
break;
|
break;
|
||||||
|
@ -580,6 +589,8 @@ void PF_fclose_i (int fnum)
|
||||||
COM_WriteFile(pf_fopen_files[fnum].name, pf_fopen_files[fnum].data, pf_fopen_files[fnum].len);
|
COM_WriteFile(pf_fopen_files[fnum].name, pf_fopen_files[fnum].data, pf_fopen_files[fnum].len);
|
||||||
BZ_Free(pf_fopen_files[fnum].data);
|
BZ_Free(pf_fopen_files[fnum].data);
|
||||||
break;
|
break;
|
||||||
|
case 3:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
pf_fopen_files[fnum].data = NULL;
|
pf_fopen_files[fnum].data = NULL;
|
||||||
pf_fopen_files[fnum].prinst = NULL;
|
pf_fopen_files[fnum].prinst = NULL;
|
||||||
|
@ -606,7 +617,7 @@ void PF_fclose (progfuncs_t *prinst, struct globalvars_s *pr_globals)
|
||||||
|
|
||||||
void PF_fgets (progfuncs_t *prinst, struct globalvars_s *pr_globals)
|
void PF_fgets (progfuncs_t *prinst, struct globalvars_s *pr_globals)
|
||||||
{
|
{
|
||||||
char c, *s, *o, *max;
|
char c, *s, *o, *max, *eof;
|
||||||
int fnum = G_FLOAT(OFS_PARM0) - FIRST_QC_FILE_INDEX;
|
int fnum = G_FLOAT(OFS_PARM0) - FIRST_QC_FILE_INDEX;
|
||||||
char pr_string_temp[4096];
|
char pr_string_temp[4096];
|
||||||
|
|
||||||
|
@ -632,9 +643,10 @@ void PF_fgets (progfuncs_t *prinst, struct globalvars_s *pr_globals)
|
||||||
|
|
||||||
//read up to the next \n, ignoring any \rs.
|
//read up to the next \n, ignoring any \rs.
|
||||||
o = pr_string_temp;
|
o = pr_string_temp;
|
||||||
max = o + MAXTEMPBUFFERLEN-1;
|
max = o + sizeof(pr_string_temp)-1;
|
||||||
s = pf_fopen_files[fnum].data+pf_fopen_files[fnum].ofs;
|
s = pf_fopen_files[fnum].data+pf_fopen_files[fnum].ofs;
|
||||||
while(*s)
|
eof = pf_fopen_files[fnum].data+pf_fopen_files[fnum].len;
|
||||||
|
while(s < eof)
|
||||||
{
|
{
|
||||||
c = *s++;
|
c = *s++;
|
||||||
if (c == '\n')
|
if (c == '\n')
|
||||||
|
@ -650,7 +662,7 @@ void PF_fgets (progfuncs_t *prinst, struct globalvars_s *pr_globals)
|
||||||
|
|
||||||
pf_fopen_files[fnum].ofs = s - pf_fopen_files[fnum].data;
|
pf_fopen_files[fnum].ofs = s - pf_fopen_files[fnum].data;
|
||||||
|
|
||||||
if (!pr_string_temp[0] && !*s)
|
if (!pr_string_temp[0] && s == eof)
|
||||||
G_INT(OFS_RETURN) = 0; //EOF
|
G_INT(OFS_RETURN) = 0; //EOF
|
||||||
else
|
else
|
||||||
RETURN_TSTRING(pr_string_temp);
|
RETURN_TSTRING(pr_string_temp);
|
||||||
|
@ -679,20 +691,28 @@ void PF_fputs (progfuncs_t *prinst, struct globalvars_s *pr_globals)
|
||||||
return; //this just isn't ours.
|
return; //this just isn't ours.
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pf_fopen_files[fnum].bufferlen < pf_fopen_files[fnum].ofs + len)
|
switch(pf_fopen_files[fnum].accessmode)
|
||||||
{
|
{
|
||||||
char *newbuf;
|
default:
|
||||||
pf_fopen_files[fnum].bufferlen = pf_fopen_files[fnum].bufferlen*2 + len;
|
break;
|
||||||
newbuf = BZF_Malloc(pf_fopen_files[fnum].bufferlen);
|
case 1:
|
||||||
memcpy(newbuf, pf_fopen_files[fnum].data, pf_fopen_files[fnum].len);
|
case 2:
|
||||||
BZ_Free(pf_fopen_files[fnum].data);
|
if (pf_fopen_files[fnum].bufferlen < pf_fopen_files[fnum].ofs + len)
|
||||||
pf_fopen_files[fnum].data = newbuf;
|
{
|
||||||
}
|
char *newbuf;
|
||||||
|
pf_fopen_files[fnum].bufferlen = pf_fopen_files[fnum].bufferlen*2 + len;
|
||||||
|
newbuf = BZF_Malloc(pf_fopen_files[fnum].bufferlen);
|
||||||
|
memcpy(newbuf, pf_fopen_files[fnum].data, pf_fopen_files[fnum].len);
|
||||||
|
BZ_Free(pf_fopen_files[fnum].data);
|
||||||
|
pf_fopen_files[fnum].data = newbuf;
|
||||||
|
}
|
||||||
|
|
||||||
memcpy(pf_fopen_files[fnum].data + pf_fopen_files[fnum].ofs, msg, len);
|
memcpy(pf_fopen_files[fnum].data + pf_fopen_files[fnum].ofs, msg, len);
|
||||||
if (pf_fopen_files[fnum].len < pf_fopen_files[fnum].ofs + len)
|
if (pf_fopen_files[fnum].len < pf_fopen_files[fnum].ofs + len)
|
||||||
pf_fopen_files[fnum].len = pf_fopen_files[fnum].ofs + len;
|
pf_fopen_files[fnum].len = pf_fopen_files[fnum].ofs + len;
|
||||||
pf_fopen_files[fnum].ofs+=len;
|
pf_fopen_files[fnum].ofs+=len;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void PF_fcloseall (progfuncs_t *prinst)
|
void PF_fcloseall (progfuncs_t *prinst)
|
||||||
|
@ -815,7 +835,7 @@ void search_close_progs(progfuncs_t *prinst, qboolean complain)
|
||||||
prvm_nextsearchhandle = 0; //might as well.
|
prvm_nextsearchhandle = 0; //might as well.
|
||||||
}
|
}
|
||||||
|
|
||||||
int search_enumerate(char *name, int fsize, void *parm)
|
int search_enumerate(const char *name, int fsize, void *parm)
|
||||||
{
|
{
|
||||||
prvmsearch_t *s = parm;
|
prvmsearch_t *s = parm;
|
||||||
|
|
||||||
|
|
|
@ -257,6 +257,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
#define svcfte_pointparticles 81 // [short] effectnum [vector] start [vector] velocity [short] count
|
#define svcfte_pointparticles 81 // [short] effectnum [vector] start [vector] velocity [short] count
|
||||||
#define svcfte_pointparticles1 82 // [short] effectnum [vector] start, same as svc_pointparticles except velocity is zero and count is 1
|
#define svcfte_pointparticles1 82 // [short] effectnum [vector] start, same as svc_pointparticles except velocity is zero and count is 1
|
||||||
|
|
||||||
|
#define svcfte_cgamepacket 83
|
||||||
|
|
||||||
|
|
||||||
//DP extended svcs
|
//DP extended svcs
|
||||||
|
|
|
@ -186,7 +186,7 @@ typedef struct {
|
||||||
int bufferleft;
|
int bufferleft;
|
||||||
int skip;
|
int skip;
|
||||||
} vmsearch_t;
|
} vmsearch_t;
|
||||||
static int VMEnum(char *match, int size, void *args)
|
static int VMEnum(const char *match, int size, void *args)
|
||||||
{
|
{
|
||||||
char *check;
|
char *check;
|
||||||
int newlen;
|
int newlen;
|
||||||
|
@ -210,13 +210,13 @@ static int VMEnum(char *match, int size, void *args)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int IfFound(char *match, int size, void *args)
|
static int IfFound(const char *match, int size, void *args)
|
||||||
{
|
{
|
||||||
*(qboolean*)args = true;
|
*(qboolean*)args = true;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int VMEnumMods(char *match, int size, void *args)
|
static int VMEnumMods(const char *match, int size, void *args)
|
||||||
{
|
{
|
||||||
char *check;
|
char *check;
|
||||||
char desc[1024];
|
char desc[1024];
|
||||||
|
@ -227,21 +227,23 @@ static int VMEnumMods(char *match, int size, void *args)
|
||||||
|
|
||||||
newlen = strlen(match)+1;
|
newlen = strlen(match)+1;
|
||||||
|
|
||||||
if (*match && match[newlen-2] != '/')
|
if (newlen <= 2)
|
||||||
return true;
|
return true;
|
||||||
match[newlen-2] = '\0';
|
|
||||||
newlen--;
|
|
||||||
|
|
||||||
if (!stricmp(match, "baseq3"))
|
//make sure match is a directory
|
||||||
|
if (match[newlen-2] != '/')
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (!stricmp(match, "baseq3/"))
|
||||||
return true; //we don't want baseq3
|
return true; //we don't want baseq3
|
||||||
|
|
||||||
foundone = false;
|
foundone = false;
|
||||||
Sys_EnumerateFiles(va("%s/%s/", ((vmsearch_t *)args)->dir, match), "*.pk3", IfFound, &foundone);
|
Sys_EnumerateFiles(va("%s%s/", ((vmsearch_t *)args)->dir, match), "*.pk3", IfFound, &foundone);
|
||||||
if (foundone == false)
|
if (foundone == false)
|
||||||
return true; //we only count directories with a pk3 file
|
return true; //we only count directories with a pk3 file
|
||||||
|
|
||||||
Q_strncpyz(desc, match, sizeof(desc));
|
Q_strncpyz(desc, match, sizeof(desc));
|
||||||
f = FS_OpenVFS(va("%s/description.txt", match), "rb", FS_ROOT);
|
f = FS_OpenVFS(va("%sdescription.txt", match), "rb", FS_ROOT);
|
||||||
if (f)
|
if (f)
|
||||||
{
|
{
|
||||||
VFS_GETS(f, desc, sizeof(desc));
|
VFS_GETS(f, desc, sizeof(desc));
|
||||||
|
|
|
@ -116,7 +116,7 @@ dllhandle_t *QVM_LoadDLL(const char *name, void **vmMain, int (EXPORT_FN *syscal
|
||||||
return NULL; // couldn't find one anywhere
|
return NULL; // couldn't find one anywhere
|
||||||
snprintf (name, sizeof(name), "%s/%s", gpath, dllname);
|
snprintf (name, sizeof(name), "%s/%s", gpath, dllname);
|
||||||
|
|
||||||
Con_Printf("Loading native: %s\n", name);
|
Con_DPrintf("Loading native: %s\n", name);
|
||||||
hVM = Sys_LoadLibrary(name, funcs);
|
hVM = Sys_LoadLibrary(name, funcs);
|
||||||
if (hVM)
|
if (hVM)
|
||||||
{
|
{
|
||||||
|
|
|
@ -21,23 +21,12 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
|
||||||
//
|
//
|
||||||
// file IO
|
// file IO
|
||||||
|
// for the most part, we use stdio.
|
||||||
|
// if your system doesn't have stdio then urm... well.
|
||||||
//
|
//
|
||||||
|
void Sys_mkdir (char *path); //not all pre-unix systems have directories (including dos 1)
|
||||||
// returns the file size
|
|
||||||
// return -1 if file is not present
|
|
||||||
// the file should be in BINARY mode for stupid OSs that care
|
|
||||||
int Sys_FileOpenRead (char *path, int *hndl);
|
|
||||||
|
|
||||||
int Sys_FileOpenWrite (char *path);
|
|
||||||
void Sys_FileClose (int handle);
|
|
||||||
void Sys_FileSeek (int handle, int position);
|
|
||||||
int Sys_FileRead (int handle, void *dest, int count);
|
|
||||||
int Sys_FileWrite (int handle, void *data, int count);
|
|
||||||
int Sys_FileTime (char *path);
|
|
||||||
void Sys_mkdir (char *path);
|
|
||||||
qboolean Sys_remove (char *path);
|
qboolean Sys_remove (char *path);
|
||||||
|
qboolean Sys_FindGameData(const char *gamename, char *basepath, int basepathlen);
|
||||||
qboolean Sys_FindGameData(char *gamename, char *basepath, int basepathlen);
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// memory protection
|
// memory protection
|
||||||
|
@ -95,7 +84,7 @@ void Sys_LowFPPrecision (void);
|
||||||
void Sys_HighFPPrecision (void);
|
void Sys_HighFPPrecision (void);
|
||||||
void VARGS Sys_SetFPCW (void);
|
void VARGS Sys_SetFPCW (void);
|
||||||
|
|
||||||
int Sys_EnumerateFiles (char *gpath, char *match, int (*func)(char *, int, void *), void *parm);
|
int Sys_EnumerateFiles (const char *gpath, const char *match, int (*func)(const char *, int, void *), void *parm);
|
||||||
|
|
||||||
qboolean Sys_GetDesktopParameters(int *width, int *height, int *bpp, int *refreshrate);
|
qboolean Sys_GetDesktopParameters(int *width, int *height, int *bpp, int *refreshrate);
|
||||||
|
|
||||||
|
|
|
@ -159,8 +159,8 @@ void *VARGS Z_TagMalloc(int size, int tag)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
zone->pvdn = zone_head;
|
zone->pvdn = zone_head;
|
||||||
if (s->next)
|
// if (s->next)
|
||||||
s->next->pvdn = zone;
|
// s->next->pvdn = zone;
|
||||||
zone_head = zone;
|
zone_head = zone;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2166,6 +2166,9 @@ void Memory_Init (void *buf, int size)
|
||||||
|
|
||||||
void Memory_DeInit(void)
|
void Memory_DeInit(void)
|
||||||
{
|
{
|
||||||
|
Hunk_TempFree();
|
||||||
|
Cache_Flush();
|
||||||
|
|
||||||
#ifdef MULTITHREAD
|
#ifdef MULTITHREAD
|
||||||
if (zonelock)
|
if (zonelock)
|
||||||
{
|
{
|
||||||
|
|
|
@ -326,7 +326,7 @@ mpic_t *(D3D7_Draw_SafePicFromWad) (char *name)
|
||||||
|
|
||||||
pic->pic.width = qpic->width;
|
pic->pic.width = qpic->width;
|
||||||
pic->pic.height = qpic->height;
|
pic->pic.height = qpic->height;
|
||||||
p = (LPDIRECTDRAWSURFACE7*)&pic->pic.data;
|
p = (LPDIRECTDRAWSURFACE7*)&pic->pic.d.data;
|
||||||
if (!strcmp(name, "conchars"))
|
if (!strcmp(name, "conchars"))
|
||||||
*p = draw_chars_tex;
|
*p = draw_chars_tex;
|
||||||
else
|
else
|
||||||
|
@ -367,7 +367,7 @@ mpic_t *(D3D7_Draw_SafeCachePic) (char *path)
|
||||||
|
|
||||||
pic->pic.width = qpic->width;
|
pic->pic.width = qpic->width;
|
||||||
pic->pic.height = qpic->height;
|
pic->pic.height = qpic->height;
|
||||||
p = (LPDIRECTDRAWSURFACE7*)&pic->pic.data;
|
p = (LPDIRECTDRAWSURFACE7*)&pic->pic.d.data;
|
||||||
*p = (LPDIRECTDRAWSURFACE7)Mod_LoadReplacementTexture(pic->name, "gfx", false, true, true);
|
*p = (LPDIRECTDRAWSURFACE7)Mod_LoadReplacementTexture(pic->name, "gfx", false, true, true);
|
||||||
if (!*p)
|
if (!*p)
|
||||||
*p = D3D7_LoadTexture_8_Pal24(path, (unsigned char*)(qpic+1), qpic->width, qpic->height, TF_NOMIPMAP|TF_ALPHA|TF_NOTBUMPMAP, host_basepal, 255);
|
*p = D3D7_LoadTexture_8_Pal24(path, (unsigned char*)(qpic+1), qpic->width, qpic->height, TF_NOMIPMAP|TF_ALPHA|TF_NOTBUMPMAP, host_basepal, 255);
|
||||||
|
@ -422,7 +422,7 @@ void (D3D7_Draw_ReInit) (void)
|
||||||
strcpy(d3dmenu_cachepics[d3dmenu_numcachepics].name, "conchars");
|
strcpy(d3dmenu_cachepics[d3dmenu_numcachepics].name, "conchars");
|
||||||
d3dmenu_cachepics[d3dmenu_numcachepics].pic.width = 128;
|
d3dmenu_cachepics[d3dmenu_numcachepics].pic.width = 128;
|
||||||
d3dmenu_cachepics[d3dmenu_numcachepics].pic.height = 128;
|
d3dmenu_cachepics[d3dmenu_numcachepics].pic.height = 128;
|
||||||
*(int *)&d3dmenu_cachepics[d3dmenu_numcachepics].pic.data = (int)draw_chars_tex;
|
*(int *)&d3dmenu_cachepics[d3dmenu_numcachepics].pic.d.data = (int)draw_chars_tex;
|
||||||
d3dmenu_numcachepics++;
|
d3dmenu_numcachepics++;
|
||||||
|
|
||||||
|
|
||||||
|
@ -713,7 +713,7 @@ void (D3D7_Draw_Image) (float x, float y, float w, float h, float s1, float t
|
||||||
d3dquadvert[3].s = s1;// - 3.0/pic->width;
|
d3dquadvert[3].s = s1;// - 3.0/pic->width;
|
||||||
d3dquadvert[3].t = t2;
|
d3dquadvert[3].t = t2;
|
||||||
|
|
||||||
p = (LPDIRECTDRAWSURFACE7*)&pic->data;
|
p = (LPDIRECTDRAWSURFACE7*)&pic->d.data;
|
||||||
pD3DDev->lpVtbl->SetTexture(pD3DDev, 0, *p);
|
pD3DDev->lpVtbl->SetTexture(pD3DDev, 0, *p);
|
||||||
|
|
||||||
pD3DDev->lpVtbl->SetTextureStageState(pD3DDev, 0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
|
pD3DDev->lpVtbl->SetTextureStageState(pD3DDev, 0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
|
||||||
|
@ -780,7 +780,7 @@ void (D3D7_Media_ShowFrameBGR_24_Flip) (qbyte *framedata, int inwidth, int inhei
|
||||||
{
|
{
|
||||||
mpic_t pic;
|
mpic_t pic;
|
||||||
LPDIRECTDRAWSURFACE7 *p;
|
LPDIRECTDRAWSURFACE7 *p;
|
||||||
p = (LPDIRECTDRAWSURFACE7*)&pic.data;
|
p = (LPDIRECTDRAWSURFACE7*)&pic.d.data;
|
||||||
*p = D3D7_LoadTexture_32("", (unsigned int*)framedata, inwidth, inheight, TF_NOMIPMAP|TF_NOALPHA|TF_NOTBUMPMAP);
|
*p = D3D7_LoadTexture_32("", (unsigned int*)framedata, inwidth, inheight, TF_NOMIPMAP|TF_NOALPHA|TF_NOTBUMPMAP);
|
||||||
|
|
||||||
D3D7_Set2D ();
|
D3D7_Set2D ();
|
||||||
|
@ -799,7 +799,7 @@ void (D3D7_Media_ShowFrameRGBA_32) (qbyte *framedata, int inwidth, int inheight
|
||||||
pic.width = inwidth;
|
pic.width = inwidth;
|
||||||
pic.height = inheight;
|
pic.height = inheight;
|
||||||
pic.flags = 0;
|
pic.flags = 0;
|
||||||
p = (LPDIRECTDRAWSURFACE7*)&pic.data;
|
p = (LPDIRECTDRAWSURFACE7*)&pic.d.data;
|
||||||
*p = D3D7_LoadTexture_32("", (unsigned int*)framedata, inwidth, inheight, TF_NOMIPMAP|TF_NOALPHA|TF_NOTBUMPMAP);
|
*p = D3D7_LoadTexture_32("", (unsigned int*)framedata, inwidth, inheight, TF_NOMIPMAP|TF_NOALPHA|TF_NOTBUMPMAP);
|
||||||
|
|
||||||
D3D7_Set2D ();
|
D3D7_Set2D ();
|
||||||
|
@ -814,7 +814,7 @@ void (D3D7_Media_ShowFrame8bit) (qbyte *framedata, int inwidth, int inheight,
|
||||||
{
|
{
|
||||||
mpic_t pic;
|
mpic_t pic;
|
||||||
LPDIRECTDRAWSURFACE7 *p;
|
LPDIRECTDRAWSURFACE7 *p;
|
||||||
p = (LPDIRECTDRAWSURFACE7*)&pic.data;
|
p = (LPDIRECTDRAWSURFACE7*)&pic.d.data;
|
||||||
*p = D3D7_LoadTexture_8_Pal24("", (unsigned char*)framedata, inwidth, inheight, TF_NOMIPMAP|TF_NOALPHA|TF_NOTBUMPMAP, palette, 256);
|
*p = D3D7_LoadTexture_8_Pal24("", (unsigned char*)framedata, inwidth, inheight, TF_NOMIPMAP|TF_NOALPHA|TF_NOTBUMPMAP, palette, 256);
|
||||||
|
|
||||||
D3D7_Set2D ();
|
D3D7_Set2D ();
|
||||||
|
|
|
@ -113,33 +113,6 @@ static galiastexnum_t *D3D7_ChooseSkin(galiasinfo_t *inf, char *modelname, int s
|
||||||
Skin_Find(e->scoreboard);
|
Skin_Find(e->scoreboard);
|
||||||
tc = e->scoreboard->ttopcolor;
|
tc = e->scoreboard->ttopcolor;
|
||||||
bc = e->scoreboard->tbottomcolor;
|
bc = e->scoreboard->tbottomcolor;
|
||||||
|
|
||||||
//colour forcing
|
|
||||||
if (cl.splitclients<2 && !(cl.fpd & FPD_NO_FORCE_COLOR)) //no colour/skin forcing in splitscreen.
|
|
||||||
{
|
|
||||||
if (cl.teamplay && cl.spectator)
|
|
||||||
{
|
|
||||||
local = Cam_TrackNum(0);
|
|
||||||
if (local < 0)
|
|
||||||
local = cl.playernum[0];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
local = cl.playernum[0];
|
|
||||||
if (cl.teamplay && !strcmp(e->scoreboard->team, cl.players[local].team))
|
|
||||||
{
|
|
||||||
if (cl_teamtopcolor>=0)
|
|
||||||
tc = cl_teamtopcolor;
|
|
||||||
if (cl_teambottomcolor>=0)
|
|
||||||
bc = cl_teambottomcolor;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (cl_enemytopcolor>=0)
|
|
||||||
tc = cl_enemytopcolor;
|
|
||||||
if (cl_enemybottomcolor>=0)
|
|
||||||
bc = cl_enemybottomcolor;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -672,7 +672,7 @@ static void D3D7_DrawSpriteModel (entity_t *e)
|
||||||
right[1]*=e->scale;
|
right[1]*=e->scale;
|
||||||
right[2]*=e->scale;
|
right[2]*=e->scale;
|
||||||
|
|
||||||
pD3DDev->lpVtbl->SetTexture(pD3DDev, 0, (LPDIRECTDRAWSURFACE7)frame->gl_texturenum);
|
pD3DDev->lpVtbl->SetTexture(pD3DDev, 0, *(LPDIRECTDRAWSURFACE7*)frame->p.d.data);
|
||||||
|
|
||||||
/* {
|
/* {
|
||||||
extern int gldepthfunc;
|
extern int gldepthfunc;
|
||||||
|
|
|
@ -255,65 +255,16 @@ qboolean D3DAppActivate(BOOL fActive, BOOL minimize)
|
||||||
sound_active = true;
|
sound_active = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
IN_UpdateGrabs(modestate != MS_WINDOWED, ActiveApp);
|
||||||
|
|
||||||
if (fActive)
|
if (fActive)
|
||||||
{
|
{
|
||||||
/* if (modestate != MS_WINDOWED)
|
|
||||||
{
|
|
||||||
IN_ActivateMouse ();
|
|
||||||
IN_HideMouse ();
|
|
||||||
// if (vid_canalttab && vid_wassuspended)
|
|
||||||
{
|
|
||||||
// vid_wassuspended = false;
|
|
||||||
// ChangeDisplaySettings (&gdevmode, CDS_FULLSCREEN);
|
|
||||||
ShowWindow(mainwindow, SW_SHOWNORMAL);
|
|
||||||
|
|
||||||
// Fix for alt-tab bug in NVidia drivers
|
|
||||||
// MoveWindow (mainwindow, 0, 0, gdevmode.dmPelsWidth, gdevmode.dmPelsHeight, false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if ((modestate == MS_WINDOWED) && _windowed_mouse.value && (key_dest == key_game || key_dest == key_menu))
|
|
||||||
{
|
|
||||||
IN_ActivateMouse ();
|
|
||||||
IN_HideMouse ();
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
Cvar_ForceCallback(&v_gamma);
|
Cvar_ForceCallback(&v_gamma);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!fActive)
|
if (!fActive)
|
||||||
{
|
{
|
||||||
/* if (modestate != MS_WINDOWED)
|
|
||||||
{
|
|
||||||
IN_DeactivateMouse ();
|
|
||||||
IN_ShowMouse ();
|
|
||||||
// if (vid_canalttab)
|
|
||||||
// {
|
|
||||||
// ChangeDisplaySettings (NULL, 0);
|
|
||||||
// vid_wassuspended = true;
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
else if ((modestate == MS_WINDOWED) && _windowed_mouse.value)
|
|
||||||
{
|
|
||||||
IN_DeactivateMouse ();
|
|
||||||
IN_ShowMouse ();
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
Cvar_ForceCallback(&v_gamma); //wham bam thanks.
|
Cvar_ForceCallback(&v_gamma); //wham bam thanks.
|
||||||
/*
|
|
||||||
if (qSetDeviceGammaRamp)
|
|
||||||
{
|
|
||||||
if (vid_desktopgamma.value)
|
|
||||||
{
|
|
||||||
HDC hDC = GetDC(GetDesktopWindow());
|
|
||||||
qSetDeviceGammaRamp (hDC, originalgammaramps);
|
|
||||||
ReleaseDC(GetDesktopWindow(), hDC);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
qSetDeviceGammaRamp(maindc, originalgammaramps);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -950,6 +901,14 @@ void (D3D7_SCR_UpdateScreen) (void)
|
||||||
extern cvar_t vid_conwidth, vid_conheight;
|
extern cvar_t vid_conwidth, vid_conheight;
|
||||||
vid.conwidth = vid_conwidth.value;
|
vid.conwidth = vid_conwidth.value;
|
||||||
vid.conheight = vid_conheight.value;
|
vid.conheight = vid_conheight.value;
|
||||||
|
{
|
||||||
|
DWORD w, h;
|
||||||
|
pD3DX->lpVtbl->GetBufferSize((void*)pD3DX, &w, &h);
|
||||||
|
if (vid.conwidth <= 0)
|
||||||
|
vid.conwidth = w;
|
||||||
|
if (vid.conheight <= 0)
|
||||||
|
vid.conheight = h;
|
||||||
|
}
|
||||||
if (vid.width != vid.conwidth || vid.height != vid.conheight)
|
if (vid.width != vid.conwidth || vid.height != vid.conheight)
|
||||||
vid.recalc_refdef = true;
|
vid.recalc_refdef = true;
|
||||||
vid.width = vid.conwidth;
|
vid.width = vid.conwidth;
|
||||||
|
@ -1067,32 +1026,7 @@ void (D3D7_SCR_UpdateScreen) (void)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (modestate == MS_WINDOWED)
|
IN_UpdateGrabs(modestate != MS_WINDOWED, ActiveApp);
|
||||||
{
|
|
||||||
extern int mouseusedforgui;
|
|
||||||
extern qboolean mouseactive;
|
|
||||||
if (!_windowed_mouse.value)
|
|
||||||
{
|
|
||||||
if (mouseactive)
|
|
||||||
{
|
|
||||||
IN_DeactivateMouse ();
|
|
||||||
IN_ShowMouse ();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if ((key_dest == key_game||mouseusedforgui) && !mouseactive && ActiveApp)
|
|
||||||
{
|
|
||||||
IN_ActivateMouse ();
|
|
||||||
IN_HideMouse ();
|
|
||||||
}
|
|
||||||
else if (mouseactive && key_dest == key_console)
|
|
||||||
{//!(key_dest == key_game || mouseusedforgui)) {
|
|
||||||
IN_DeactivateMouse ();
|
|
||||||
IN_ShowMouse ();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -343,7 +343,7 @@ mpic_t *D3D9_Draw_SafePicFromWad (char *name)
|
||||||
|
|
||||||
Q_strncpyz (pic->name, name, sizeof(pic->name));
|
Q_strncpyz (pic->name, name, sizeof(pic->name));
|
||||||
|
|
||||||
p = (LPDIRECT3DBASETEXTURE9*)&pic->pic.data;
|
p = (LPDIRECT3DBASETEXTURE9*)&pic->pic.d.data;
|
||||||
if (!strcmp(name, "conchars"))
|
if (!strcmp(name, "conchars"))
|
||||||
{
|
{
|
||||||
pic->pic.width = 256;
|
pic->pic.width = 256;
|
||||||
|
@ -396,7 +396,7 @@ mpic_t *D3D9_Draw_SafeCachePic (char *path)
|
||||||
|
|
||||||
Q_strncpyz (pic->name, path, sizeof(pic->name));
|
Q_strncpyz (pic->name, path, sizeof(pic->name));
|
||||||
|
|
||||||
p = (LPDIRECT3DBASETEXTURE9*)&pic->pic.data;
|
p = (LPDIRECT3DBASETEXTURE9*)&pic->pic.d.data;
|
||||||
|
|
||||||
if (qpic)
|
if (qpic)
|
||||||
{
|
{
|
||||||
|
@ -453,7 +453,7 @@ void D3D9_Draw_ReInit (void)
|
||||||
strcpy(d3dmenu_cachepics[d3dmenu_numcachepics].name, "conchars");
|
strcpy(d3dmenu_cachepics[d3dmenu_numcachepics].name, "conchars");
|
||||||
d3dmenu_cachepics[d3dmenu_numcachepics].pic.width = 128;
|
d3dmenu_cachepics[d3dmenu_numcachepics].pic.width = 128;
|
||||||
d3dmenu_cachepics[d3dmenu_numcachepics].pic.height = 128;
|
d3dmenu_cachepics[d3dmenu_numcachepics].pic.height = 128;
|
||||||
*(int *)&d3dmenu_cachepics[d3dmenu_numcachepics].pic.data = (int)d3d9chars_tex;
|
*(int *)&d3dmenu_cachepics[d3dmenu_numcachepics].pic.d.data = (int)d3d9chars_tex;
|
||||||
d3dmenu_numcachepics++;
|
d3dmenu_numcachepics++;
|
||||||
|
|
||||||
|
|
||||||
|
@ -751,7 +751,7 @@ void D3D9_Draw_Image (float x, float y, float w, float h, float s1, float t1
|
||||||
d3d9quadvert[3].s = s1;// - 3.0/pic->width;
|
d3d9quadvert[3].s = s1;// - 3.0/pic->width;
|
||||||
d3d9quadvert[3].t = t2;
|
d3d9quadvert[3].t = t2;
|
||||||
|
|
||||||
p = (LPDIRECT3DBASETEXTURE9*)&pic->data;
|
p = (LPDIRECT3DBASETEXTURE9*)&pic->d.data;
|
||||||
IDirect3DDevice9_SetTexture(pD3DDev9, 0, *p);
|
IDirect3DDevice9_SetTexture(pD3DDev9, 0, *p);
|
||||||
|
|
||||||
IDirect3DDevice9_SetTextureStageState(pD3DDev9, 0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
|
IDirect3DDevice9_SetTextureStageState(pD3DDev9, 0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
|
||||||
|
@ -820,7 +820,7 @@ void D3D9_Media_ShowFrameBGR_24_Flip (qbyte *framedata, int inwidth, int inheigh
|
||||||
{
|
{
|
||||||
mpic_t pic;
|
mpic_t pic;
|
||||||
LPDIRECT3DBASETEXTURE9 *p;
|
LPDIRECT3DBASETEXTURE9 *p;
|
||||||
p = (LPDIRECT3DBASETEXTURE9*)&pic.data;
|
p = (LPDIRECT3DBASETEXTURE9*)&pic.d.data;
|
||||||
*p = D3D9_LoadTexture_32("", (unsigned int*)framedata, inwidth, inheight, TF_NOMIPMAP|TF_NOALPHA|TF_NOTBUMPMAP);
|
*p = D3D9_LoadTexture_32("", (unsigned int*)framedata, inwidth, inheight, TF_NOMIPMAP|TF_NOALPHA|TF_NOTBUMPMAP);
|
||||||
|
|
||||||
D3D9_Set2D ();
|
D3D9_Set2D ();
|
||||||
|
@ -839,7 +839,7 @@ void D3D9_Media_ShowFrameRGBA_32 (qbyte *framedata, int inwidth, int inheight)
|
||||||
pic.width = inwidth;
|
pic.width = inwidth;
|
||||||
pic.height = inheight;
|
pic.height = inheight;
|
||||||
pic.flags = 0;
|
pic.flags = 0;
|
||||||
p = (LPDIRECT3DBASETEXTURE9*)&pic.data;
|
p = (LPDIRECT3DBASETEXTURE9*)&pic.d;
|
||||||
*p = D3D9_LoadTexture_32("", (unsigned int*)framedata, inwidth, inheight, TF_NOMIPMAP|TF_NOALPHA|TF_NOTBUMPMAP);
|
*p = D3D9_LoadTexture_32("", (unsigned int*)framedata, inwidth, inheight, TF_NOMIPMAP|TF_NOALPHA|TF_NOTBUMPMAP);
|
||||||
|
|
||||||
D3D9_Set2D ();
|
D3D9_Set2D ();
|
||||||
|
@ -854,7 +854,7 @@ void (D3D9_Media_ShowFrame8bit) (qbyte *framedata, int inwidth, int inheight,
|
||||||
{
|
{
|
||||||
mpic_t pic;
|
mpic_t pic;
|
||||||
LPDIRECT3DBASETEXTURE9 *p;
|
LPDIRECT3DBASETEXTURE9 *p;
|
||||||
p = (LPDIRECT3DBASETEXTURE9*)&pic.data;
|
p = (LPDIRECT3DBASETEXTURE9*)&pic.d;
|
||||||
*p = D3D9_LoadTexture_8_Pal24("", (unsigned char*)framedata, inwidth, inheight, TF_NOMIPMAP|TF_NOALPHA|TF_NOTBUMPMAP, palette, 256);
|
*p = D3D9_LoadTexture_8_Pal24("", (unsigned char*)framedata, inwidth, inheight, TF_NOMIPMAP|TF_NOALPHA|TF_NOTBUMPMAP, palette, 256);
|
||||||
|
|
||||||
D3D9_Set2D ();
|
D3D9_Set2D ();
|
||||||
|
|
|
@ -997,7 +997,7 @@ static void D3D9_DrawSpriteModel (entity_t *e)
|
||||||
IDirect3DDevice9_SetRenderState(pD3DDev9, D3DRS_ALPHABLENDENABLE, TRUE);
|
IDirect3DDevice9_SetRenderState(pD3DDev9, D3DRS_ALPHABLENDENABLE, TRUE);
|
||||||
|
|
||||||
if (pic)
|
if (pic)
|
||||||
IDirect3DDevice9_SetTexture(pD3DDev9, 0, *(LPDIRECT3DBASETEXTURE9*)&pic->data);
|
IDirect3DDevice9_SetTexture(pD3DDev9, 0, *(LPDIRECT3DBASETEXTURE9*)&pic->d);
|
||||||
else
|
else
|
||||||
IDirect3DDevice9_SetTexture(pD3DDev9, 0, NULL);
|
IDirect3DDevice9_SetTexture(pD3DDev9, 0, NULL);
|
||||||
|
|
||||||
|
@ -1085,7 +1085,7 @@ static void D3D9_DrawSpriteModel (entity_t *e)
|
||||||
right[1]*=e->scale;
|
right[1]*=e->scale;
|
||||||
right[2]*=e->scale;
|
right[2]*=e->scale;
|
||||||
|
|
||||||
IDirect3DDevice9_SetTexture(pD3DDev9, 0, (void*)frame->gl_texturenum);
|
IDirect3DDevice9_SetTexture(pD3DDev9, 0, *(void**)&frame->p.d);
|
||||||
|
|
||||||
/* {
|
/* {
|
||||||
extern int gldepthfunc;
|
extern int gldepthfunc;
|
||||||
|
|
|
@ -263,65 +263,15 @@ qboolean D3D9AppActivate(BOOL fActive, BOOL minimize)
|
||||||
sound_active = true;
|
sound_active = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
IN_UpdateGrabs(modestate != MS_WINDOWED, ActiveApp);
|
||||||
|
|
||||||
if (fActive)
|
if (fActive)
|
||||||
{
|
{
|
||||||
/* if (modestate != MS_WINDOWED)
|
|
||||||
{
|
|
||||||
IN_ActivateMouse ();
|
|
||||||
IN_HideMouse ();
|
|
||||||
// if (vid_canalttab && vid_wassuspended)
|
|
||||||
{
|
|
||||||
// vid_wassuspended = false;
|
|
||||||
// ChangeDisplaySettings (&gdevmode, CDS_FULLSCREEN);
|
|
||||||
ShowWindow(mainwindow, SW_SHOWNORMAL);
|
|
||||||
|
|
||||||
// Fix for alt-tab bug in NVidia drivers
|
|
||||||
// MoveWindow (mainwindow, 0, 0, gdevmode.dmPelsWidth, gdevmode.dmPelsHeight, false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if ((modestate == MS_WINDOWED) && _windowed_mouse.value && (key_dest == key_game || key_dest == key_menu))
|
|
||||||
{
|
|
||||||
IN_ActivateMouse ();
|
|
||||||
IN_HideMouse ();
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
Cvar_ForceCallback(&v_gamma);
|
Cvar_ForceCallback(&v_gamma);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!fActive)
|
if (!fActive)
|
||||||
{
|
{
|
||||||
/* if (modestate != MS_WINDOWED)
|
|
||||||
{
|
|
||||||
IN_DeactivateMouse ();
|
|
||||||
IN_ShowMouse ();
|
|
||||||
// if (vid_canalttab)
|
|
||||||
// {
|
|
||||||
// ChangeDisplaySettings (NULL, 0);
|
|
||||||
// vid_wassuspended = true;
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
else if ((modestate == MS_WINDOWED) && _windowed_mouse.value)
|
|
||||||
{
|
|
||||||
IN_DeactivateMouse ();
|
|
||||||
IN_ShowMouse ();
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
Cvar_ForceCallback(&v_gamma); //wham bam thanks.
|
Cvar_ForceCallback(&v_gamma); //wham bam thanks.
|
||||||
/*
|
|
||||||
if (qSetDeviceGammaRamp)
|
|
||||||
{
|
|
||||||
if (vid_desktopgamma.value)
|
|
||||||
{
|
|
||||||
HDC hDC = GetDC(GetDesktopWindow());
|
|
||||||
qSetDeviceGammaRamp (hDC, originalgammaramps);
|
|
||||||
ReleaseDC(GetDesktopWindow(), hDC);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
qSetDeviceGammaRamp(maindc, originalgammaramps);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -1335,28 +1285,7 @@ void (D3D9_SCR_UpdateScreen) (void)
|
||||||
window_center_y = (window_rect.top + window_rect.bottom)/2;
|
window_center_y = (window_rect.top + window_rect.bottom)/2;
|
||||||
|
|
||||||
|
|
||||||
|
IN_UpdateGrabs(modestate != MS_WINDOWED, ActiveApp);
|
||||||
if (modestate == MS_WINDOWED)
|
|
||||||
{
|
|
||||||
extern int mouseusedforgui;
|
|
||||||
extern qboolean mouseactive;
|
|
||||||
qboolean wantactive;
|
|
||||||
|
|
||||||
wantactive = _windowed_mouse.value && (key_dest == key_game||mouseusedforgui) && ActiveApp;
|
|
||||||
if (wantactive != mouseactive)
|
|
||||||
{
|
|
||||||
if (!mouseactive)
|
|
||||||
{
|
|
||||||
IN_ActivateMouse ();
|
|
||||||
IN_HideMouse ();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
IN_DeactivateMouse ();
|
|
||||||
IN_ShowMouse ();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
VID_ShiftPalette (NULL);
|
VID_ShiftPalette (NULL);
|
||||||
}
|
}
|
||||||
|
|
|
@ -260,7 +260,7 @@ BSC32=bscmake.exe
|
||||||
# ADD BSC32 /nologo
|
# ADD BSC32 /nologo
|
||||||
LINK32=link.exe
|
LINK32=link.exe
|
||||||
# ADD BASE LINK32 comctl32.lib wsock32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib winmm.lib /nologo /subsystem:windows /machine:I386 /out:"../../../fteglqw.exe"
|
# ADD BASE LINK32 comctl32.lib wsock32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib winmm.lib /nologo /subsystem:windows /machine:I386 /out:"../../../fteglqw.exe"
|
||||||
# ADD LINK32 wsock32.lib winmm.lib kernel32.lib user32.lib gdi32.lib /nologo /subsystem:windows /pdb:none /map /machine:I386 /nodefaultlib:"msvcrt.lib" /out:"../../fteminglqw.exe" /libpath:"../libs/dxsdk7/lib"
|
# ADD LINK32 wsock32.lib winmm.lib kernel32.lib user32.lib gdi32.lib /nologo /subsystem:windows /pdb:none /map /machine:I386 /out:"../../fteminglqw.exe" /libpath:"../libs/dxsdk7/lib"
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "ftequake - Win32 Debug Dedicated Server"
|
!ELSEIF "$(CFG)" == "ftequake - Win32 Debug Dedicated Server"
|
||||||
|
|
||||||
|
@ -363,7 +363,7 @@ LINK32=link.exe
|
||||||
# PROP Target_Dir ""
|
# PROP Target_Dir ""
|
||||||
# ADD BASE CPP /nologo /G5 /ML /W3 /GX /ZI /Od /I "..\client" /I "../common" /I "../server" /I "../gl" /I "../sw" /I "../qclib" /I "../libs" /I "../libs/dxsdk7/include" /D "_DEBUG" /D "GLQUAKE" /D "WIN32" /D "_WINDOWS" /D "AVAIL_OGGVORBIS" /D "Q3CLIENT" /FR".\GLDebug/" /Fp".\GLDebug/qwcl.pch" /YX /Fo".\GLDebug/" /Fd".\GLDebug/" /FD /c
|
# ADD BASE CPP /nologo /G5 /ML /W3 /GX /ZI /Od /I "..\client" /I "../common" /I "../server" /I "../gl" /I "../sw" /I "../qclib" /I "../libs" /I "../libs/dxsdk7/include" /D "_DEBUG" /D "GLQUAKE" /D "WIN32" /D "_WINDOWS" /D "AVAIL_OGGVORBIS" /D "Q3CLIENT" /FR".\GLDebug/" /Fp".\GLDebug/qwcl.pch" /YX /Fo".\GLDebug/" /Fd".\GLDebug/" /FD /c
|
||||||
# SUBTRACT BASE CPP /X
|
# SUBTRACT BASE CPP /X
|
||||||
# ADD CPP /nologo /G5 /W3 /GX /ZI /Od /I "..\client" /I "../common" /I "../server" /I "../gl" /I "../sw" /I "../qclib" /I "../libs" /I "../libs/dxsdk7/include" /D "_DEBUG" /D "GLQUAKE" /D "WIN32" /D "_WINDOWS" /D "Q3CLIENT" /D "Q3SERVER" /FR /Fp".\GLDebugQ3/qwcl.pch" /Yu"quakedef.h" /Fo".\GLDebugQ3/" /Fd".\GLDebugQ3/" /FD /c
|
# ADD CPP /nologo /G5 /W3 /GX /ZI /Od /I "..\client" /I "../common" /I "../server" /I "../gl" /I "../sw" /I "../qclib" /I "../libs" /I "../libs/dxsdk7/include" /D "_DEBUG" /D "GLQUAKE" /D "WIN32" /D "_WINDOWS" /FR /Fp".\GLDebugQ3/qwcl.pch" /Yu"quakedef.h" /Fo".\GLDebugQ3/" /Fd".\GLDebugQ3/" /FD /c
|
||||||
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
|
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
|
||||||
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
|
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
|
||||||
# ADD BASE RSC /l 0x809 /d "_DEBUG"
|
# ADD BASE RSC /l 0x809 /d "_DEBUG"
|
||||||
|
@ -550,6 +550,195 @@ SOURCE=..\server\sv_user.c
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\server\svhl_game.c
|
||||||
|
|
||||||
|
!IF "$(CFG)" == "ftequake - Win32 Release"
|
||||||
|
|
||||||
|
# ADD CPP /Yu"qwsvdef.h"
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "ftequake - Win32 Debug"
|
||||||
|
|
||||||
|
# ADD CPP /Yu"qwsvdef.h"
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "ftequake - Win32 GLDebug"
|
||||||
|
|
||||||
|
# ADD CPP /Yu"qwsvdef.h"
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "ftequake - Win32 GLRelease"
|
||||||
|
|
||||||
|
# ADD CPP /Yu"qwsvdef.h"
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "ftequake - Win32 MDebug"
|
||||||
|
|
||||||
|
# ADD CPP /Yu"qwsvdef.h"
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "ftequake - Win32 MRelease"
|
||||||
|
|
||||||
|
# ADD CPP /Yu"qwsvdef.h"
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "ftequake - Win32 MinGLDebug"
|
||||||
|
|
||||||
|
# ADD CPP /Yu"qwsvdef.h"
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "ftequake - Win32 MinGLRelease"
|
||||||
|
|
||||||
|
# ADD CPP /Yu"qwsvdef.h"
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "ftequake - Win32 Debug Dedicated Server"
|
||||||
|
|
||||||
|
# ADD CPP /Yu"qwsvdef.h"
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "ftequake - Win32 Release Dedicated Server"
|
||||||
|
|
||||||
|
# ADD CPP /Yu"qwsvdef.h"
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "ftequake - Win32 MinSW"
|
||||||
|
|
||||||
|
# ADD CPP /Yu"qwsvdef.h"
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "ftequake - Win32 GLDebugQ3"
|
||||||
|
|
||||||
|
# ADD CPP /Yu"qwsvdef.h"
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "ftequake - Win32 Debug Dedicated ServerQ3"
|
||||||
|
|
||||||
|
# ADD CPP /Yu"qwsvdef.h"
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "ftequake - Win32 D3DDebug"
|
||||||
|
|
||||||
|
# ADD CPP /Yu"qwsvdef.h"
|
||||||
|
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\server\svhl_phys.c
|
||||||
|
|
||||||
|
!IF "$(CFG)" == "ftequake - Win32 Release"
|
||||||
|
|
||||||
|
# ADD CPP /Yu"qwsvdef.h"
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "ftequake - Win32 Debug"
|
||||||
|
|
||||||
|
# ADD CPP /Yu"qwsvdef.h"
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "ftequake - Win32 GLDebug"
|
||||||
|
|
||||||
|
# ADD CPP /Yu"qwsvdef.h"
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "ftequake - Win32 GLRelease"
|
||||||
|
|
||||||
|
# ADD CPP /Yu"qwsvdef.h"
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "ftequake - Win32 MDebug"
|
||||||
|
|
||||||
|
# ADD CPP /Yu"qwsvdef.h"
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "ftequake - Win32 MRelease"
|
||||||
|
|
||||||
|
# ADD CPP /Yu"qwsvdef.h"
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "ftequake - Win32 MinGLDebug"
|
||||||
|
|
||||||
|
# ADD CPP /Yu"qwsvdef.h"
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "ftequake - Win32 MinGLRelease"
|
||||||
|
|
||||||
|
# ADD CPP /Yu"qwsvdef.h"
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "ftequake - Win32 Debug Dedicated Server"
|
||||||
|
|
||||||
|
# ADD CPP /Yu"qwsvdef.h"
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "ftequake - Win32 Release Dedicated Server"
|
||||||
|
|
||||||
|
# ADD CPP /Yu"qwsvdef.h"
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "ftequake - Win32 MinSW"
|
||||||
|
|
||||||
|
# ADD CPP /Yu"qwsvdef.h"
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "ftequake - Win32 GLDebugQ3"
|
||||||
|
|
||||||
|
# ADD CPP /Yu"qwsvdef.h"
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "ftequake - Win32 Debug Dedicated ServerQ3"
|
||||||
|
|
||||||
|
# ADD CPP /Yu"qwsvdef.h"
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "ftequake - Win32 D3DDebug"
|
||||||
|
|
||||||
|
# ADD CPP /Yu"qwsvdef.h"
|
||||||
|
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\server\svhl_world.c
|
||||||
|
|
||||||
|
!IF "$(CFG)" == "ftequake - Win32 Release"
|
||||||
|
|
||||||
|
# ADD CPP /Yu"qwsvdef.h"
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "ftequake - Win32 Debug"
|
||||||
|
|
||||||
|
# ADD CPP /Yu"qwsvdef.h"
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "ftequake - Win32 GLDebug"
|
||||||
|
|
||||||
|
# ADD CPP /Yu"qwsvdef.h"
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "ftequake - Win32 GLRelease"
|
||||||
|
|
||||||
|
# ADD CPP /Yu"qwsvdef.h"
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "ftequake - Win32 MDebug"
|
||||||
|
|
||||||
|
# ADD CPP /Yu"qwsvdef.h"
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "ftequake - Win32 MRelease"
|
||||||
|
|
||||||
|
# ADD CPP /Yu"qwsvdef.h"
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "ftequake - Win32 MinGLDebug"
|
||||||
|
|
||||||
|
# ADD CPP /Yu"qwsvdef.h"
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "ftequake - Win32 MinGLRelease"
|
||||||
|
|
||||||
|
# ADD CPP /Yu"qwsvdef.h"
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "ftequake - Win32 Debug Dedicated Server"
|
||||||
|
|
||||||
|
# ADD CPP /Yu"qwsvdef.h"
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "ftequake - Win32 Release Dedicated Server"
|
||||||
|
|
||||||
|
# ADD CPP /Yu"qwsvdef.h"
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "ftequake - Win32 MinSW"
|
||||||
|
|
||||||
|
# ADD CPP /Yu"qwsvdef.h"
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "ftequake - Win32 GLDebugQ3"
|
||||||
|
|
||||||
|
# ADD CPP /Yu"qwsvdef.h"
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "ftequake - Win32 Debug Dedicated ServerQ3"
|
||||||
|
|
||||||
|
# ADD CPP /Yu"qwsvdef.h"
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "ftequake - Win32 D3DDebug"
|
||||||
|
|
||||||
|
# ADD CPP /Yu"qwsvdef.h"
|
||||||
|
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=..\server\svq2_ents.c
|
SOURCE=..\server\svq2_ents.c
|
||||||
# ADD CPP /Yu"qwsvdef.h"
|
# ADD CPP /Yu"qwsvdef.h"
|
||||||
# End Source File
|
# End Source File
|
||||||
|
@ -565,45 +754,65 @@ SOURCE=..\server\svq3_game.c
|
||||||
!IF "$(CFG)" == "ftequake - Win32 Release"
|
!IF "$(CFG)" == "ftequake - Win32 Release"
|
||||||
|
|
||||||
# PROP Exclude_From_Build 1
|
# PROP Exclude_From_Build 1
|
||||||
|
# ADD CPP /Yu"qwsvdef.h"
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "ftequake - Win32 Debug"
|
!ELSEIF "$(CFG)" == "ftequake - Win32 Debug"
|
||||||
|
|
||||||
# PROP Exclude_From_Build 1
|
# PROP Exclude_From_Build 1
|
||||||
|
# ADD CPP /Yu"qwsvdef.h"
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "ftequake - Win32 GLDebug"
|
!ELSEIF "$(CFG)" == "ftequake - Win32 GLDebug"
|
||||||
|
|
||||||
|
# ADD CPP /Yu"qwsvdef.h"
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "ftequake - Win32 GLRelease"
|
!ELSEIF "$(CFG)" == "ftequake - Win32 GLRelease"
|
||||||
|
|
||||||
|
# ADD CPP /Yu"qwsvdef.h"
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "ftequake - Win32 MDebug"
|
!ELSEIF "$(CFG)" == "ftequake - Win32 MDebug"
|
||||||
|
|
||||||
|
# ADD CPP /Yu"qwsvdef.h"
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "ftequake - Win32 MRelease"
|
!ELSEIF "$(CFG)" == "ftequake - Win32 MRelease"
|
||||||
|
|
||||||
|
# ADD CPP /Yu"qwsvdef.h"
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "ftequake - Win32 MinGLDebug"
|
!ELSEIF "$(CFG)" == "ftequake - Win32 MinGLDebug"
|
||||||
|
|
||||||
# PROP Exclude_From_Build 1
|
# PROP Exclude_From_Build 1
|
||||||
|
# ADD CPP /Yu"qwsvdef.h"
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "ftequake - Win32 MinGLRelease"
|
!ELSEIF "$(CFG)" == "ftequake - Win32 MinGLRelease"
|
||||||
|
|
||||||
# PROP Exclude_From_Build 1
|
# PROP Exclude_From_Build 1
|
||||||
|
# ADD CPP /Yu"qwsvdef.h"
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "ftequake - Win32 Debug Dedicated Server"
|
!ELSEIF "$(CFG)" == "ftequake - Win32 Debug Dedicated Server"
|
||||||
|
|
||||||
|
# ADD CPP /Yu"qwsvdef.h"
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "ftequake - Win32 Release Dedicated Server"
|
!ELSEIF "$(CFG)" == "ftequake - Win32 Release Dedicated Server"
|
||||||
|
|
||||||
# PROP Exclude_From_Build 1
|
# ADD CPP /Yu"qwsvdef.h"
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "ftequake - Win32 MinSW"
|
!ELSEIF "$(CFG)" == "ftequake - Win32 MinSW"
|
||||||
|
|
||||||
# PROP Exclude_From_Build 1
|
# PROP Exclude_From_Build 1
|
||||||
|
# ADD CPP /Yu"qwsvdef.h"
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "ftequake - Win32 GLDebugQ3"
|
!ELSEIF "$(CFG)" == "ftequake - Win32 GLDebugQ3"
|
||||||
|
|
||||||
|
# ADD CPP /Yu"qwsvdef.h"
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "ftequake - Win32 Debug Dedicated ServerQ3"
|
!ELSEIF "$(CFG)" == "ftequake - Win32 Debug Dedicated ServerQ3"
|
||||||
|
|
||||||
# PROP BASE Exclude_From_Build 1
|
# PROP BASE Exclude_From_Build 1
|
||||||
|
# ADD CPP /Yu"qwsvdef.h"
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "ftequake - Win32 D3DDebug"
|
!ELSEIF "$(CFG)" == "ftequake - Win32 D3DDebug"
|
||||||
|
|
||||||
|
# ADD CPP /Yu"qwsvdef.h"
|
||||||
|
|
||||||
!ENDIF
|
!ENDIF
|
||||||
|
|
||||||
# End Source File
|
# End Source File
|
||||||
|
@ -1183,6 +1392,45 @@ SOURCE=..\client\cl_ui.c
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\client\clhl_game.c
|
||||||
|
|
||||||
|
!IF "$(CFG)" == "ftequake - Win32 Release"
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "ftequake - Win32 Debug"
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "ftequake - Win32 GLDebug"
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "ftequake - Win32 GLRelease"
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "ftequake - Win32 MDebug"
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "ftequake - Win32 MRelease"
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "ftequake - Win32 MinGLDebug"
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "ftequake - Win32 MinGLRelease"
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "ftequake - Win32 Debug Dedicated Server"
|
||||||
|
|
||||||
|
# PROP Exclude_From_Build 1
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "ftequake - Win32 Release Dedicated Server"
|
||||||
|
|
||||||
|
# PROP Exclude_From_Build 1
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "ftequake - Win32 MinSW"
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "ftequake - Win32 GLDebugQ3"
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "ftequake - Win32 Debug Dedicated ServerQ3"
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "ftequake - Win32 D3DDebug"
|
||||||
|
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=..\client\clq2_cin.c
|
SOURCE=..\client\clq2_cin.c
|
||||||
|
|
||||||
!IF "$(CFG)" == "ftequake - Win32 Release"
|
!IF "$(CFG)" == "ftequake - Win32 Release"
|
||||||
|
@ -6165,6 +6413,18 @@ SOURCE=..\common\fs.c
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\common\fs_pak.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\common\fs_stdio.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\common\fs_zip.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=..\common\huff.c
|
SOURCE=..\common\huff.c
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
@ -10457,9 +10717,6 @@ SOURCE=..\client\winquake.rc
|
||||||
|
|
||||||
!IF "$(CFG)" == "ftequake - Win32 Release"
|
!IF "$(CFG)" == "ftequake - Win32 Release"
|
||||||
|
|
||||||
# ADD BASE RSC /l 0x809 /i "\engine\client" /i "\ftetgcvs\svn\engine\client" /i "\ftesvn - Copy\engine\client" /i "\ftesvn\engine\client" /i "\ftetgcvs\svnd3d\engine\client" /i "\ftetgcvs\engine\client" /i "\Projects\fteqw\engine\client" /i "\windows\J\ftetgcvs\engine\client" /i "\ftetgcvs\source\client" /i "\ftetgcvs\temp\client" /i "\ftetgcvs\fte\QW\client"
|
|
||||||
# ADD RSC /l 0x809 /i "\engine\client" /i "\ftetgcvs\svn\engine\client" /i "\ftesvn - Copy\engine\client" /i "\ftesvn\engine\client" /i "\ftetgcvs\svnd3d\engine\client" /i "\ftetgcvs\engine\client" /i "\Projects\fteqw\engine\client" /i "\windows\J\ftetgcvs\engine\client" /i "\ftetgcvs\source\client" /i "\ftetgcvs\temp\client" /i "\ftetgcvs\fte\QW\client" /d "MINIMAL"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "ftequake - Win32 Debug"
|
!ELSEIF "$(CFG)" == "ftequake - Win32 Debug"
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "ftequake - Win32 GLDebug"
|
!ELSEIF "$(CFG)" == "ftequake - Win32 GLDebug"
|
||||||
|
@ -10537,6 +10794,10 @@ SOURCE=..\client\quakedef.h
|
||||||
|
|
||||||
SOURCE=..\client\render.h
|
SOURCE=..\client\render.h
|
||||||
# End Source File
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\server\svhl_gcapi.h
|
||||||
|
# End Source File
|
||||||
# End Group
|
# End Group
|
||||||
# Begin Group "Resource Files"
|
# Begin Group "Resource Files"
|
||||||
|
|
||||||
|
|
|
@ -45,6 +45,21 @@ Package=<4>
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
||||||
|
Project: "npqtv"=.\npqtv.dsp - Package Owner=<4>
|
||||||
|
|
||||||
|
Package=<5>
|
||||||
|
{{{
|
||||||
|
}}}
|
||||||
|
|
||||||
|
Package=<4>
|
||||||
|
{{{
|
||||||
|
Begin Project Dependency
|
||||||
|
Project_Dep_Name qcvm
|
||||||
|
End Project Dependency
|
||||||
|
}}}
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
Project: "q3asm2"=..\..\Q3ASM2\q3asm2.dsp - Package Owner=<4>
|
Project: "q3asm2"=..\..\Q3ASM2\q3asm2.dsp - Package Owner=<4>
|
||||||
|
|
||||||
Package=<5>
|
Package=<5>
|
||||||
|
@ -69,6 +84,18 @@ Package=<4>
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
||||||
|
Project: "qcvm"=..\QCLIB\qcvm\qcvm.dsp - Package Owner=<4>
|
||||||
|
|
||||||
|
Package=<5>
|
||||||
|
{{{
|
||||||
|
}}}
|
||||||
|
|
||||||
|
Package=<4>
|
||||||
|
{{{
|
||||||
|
}}}
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
Global:
|
Global:
|
||||||
|
|
||||||
Package=<5>
|
Package=<5>
|
||||||
|
|
5
engine/ftequake/npapi.def
Normal file
5
engine/ftequake/npapi.def
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
EXPORTS
|
||||||
|
NP_GetEntryPoints
|
||||||
|
NP_GetMIMEDescription
|
||||||
|
NP_Initialize
|
||||||
|
NP_Shutdown
|
111
engine/ftequake/npplug.rc
Normal file
111
engine/ftequake/npplug.rc
Normal file
|
@ -0,0 +1,111 @@
|
||||||
|
//Microsoft Developer Studio generated resource script.
|
||||||
|
//
|
||||||
|
#include "resource.h"
|
||||||
|
|
||||||
|
#define APSTUDIO_READONLY_SYMBOLS
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Generated from the TEXTINCLUDE 2 resource.
|
||||||
|
//
|
||||||
|
#include "afxres.h"
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
#undef APSTUDIO_READONLY_SYMBOLS
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// English (U.K.) resources
|
||||||
|
|
||||||
|
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENG)
|
||||||
|
#ifdef _WIN32
|
||||||
|
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_UK
|
||||||
|
#pragma code_page(1252)
|
||||||
|
#endif //_WIN32
|
||||||
|
|
||||||
|
#ifndef _MAC
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Version
|
||||||
|
//
|
||||||
|
|
||||||
|
VS_VERSION_INFO VERSIONINFO
|
||||||
|
FILEVERSION 1,0,0,1
|
||||||
|
PRODUCTVERSION 1,0,0,1
|
||||||
|
FILEFLAGSMASK 0x3fL
|
||||||
|
#ifdef _DEBUG
|
||||||
|
FILEFLAGS 0x1L
|
||||||
|
#else
|
||||||
|
FILEFLAGS 0x0L
|
||||||
|
#endif
|
||||||
|
FILEOS 0x40004L
|
||||||
|
FILETYPE 0x2L
|
||||||
|
FILESUBTYPE 0x0L
|
||||||
|
BEGIN
|
||||||
|
BLOCK "StringFileInfo"
|
||||||
|
BEGIN
|
||||||
|
BLOCK "040904e4"
|
||||||
|
BEGIN
|
||||||
|
VALUE "Comments", "\0"
|
||||||
|
VALUE "CompanyName", "Forethought Entertainment\0"
|
||||||
|
VALUE "FileDescription", "Quake in a browser\0"
|
||||||
|
VALUE "FileExtents", "qtv|mvd\0"
|
||||||
|
VALUE "FileVersion", "1, 0, 0, 1\0"
|
||||||
|
VALUE "InternalName", "npqtv\0"
|
||||||
|
VALUE "LegalCopyright", "Copyright © 2009\0"
|
||||||
|
VALUE "LegalTrademarks", "\0"
|
||||||
|
VALUE "MIMEType", "text/x-quaketvident|application/x-multiviewdemo\0"
|
||||||
|
VALUE "OriginalFilename", "npqtv.dll\0"
|
||||||
|
VALUE "PrivateBuild", "\0"
|
||||||
|
VALUE "ProductName", "QTV Viewer\0"
|
||||||
|
VALUE "ProductVersion", "1, 0, 0, 1\0"
|
||||||
|
VALUE "SpecialBuild", "\0"
|
||||||
|
END
|
||||||
|
END
|
||||||
|
BLOCK "VarFileInfo"
|
||||||
|
BEGIN
|
||||||
|
VALUE "Translation", 0x409, 1252
|
||||||
|
END
|
||||||
|
END
|
||||||
|
|
||||||
|
#endif // !_MAC
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef APSTUDIO_INVOKED
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// TEXTINCLUDE
|
||||||
|
//
|
||||||
|
|
||||||
|
1 TEXTINCLUDE DISCARDABLE
|
||||||
|
BEGIN
|
||||||
|
"resource.h\0"
|
||||||
|
END
|
||||||
|
|
||||||
|
2 TEXTINCLUDE DISCARDABLE
|
||||||
|
BEGIN
|
||||||
|
"#include ""afxres.h""\r\n"
|
||||||
|
"\0"
|
||||||
|
END
|
||||||
|
|
||||||
|
3 TEXTINCLUDE DISCARDABLE
|
||||||
|
BEGIN
|
||||||
|
"\r\n"
|
||||||
|
"\0"
|
||||||
|
END
|
||||||
|
|
||||||
|
#endif // APSTUDIO_INVOKED
|
||||||
|
|
||||||
|
#endif // English (U.K.) resources
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef APSTUDIO_INVOKED
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Generated from the TEXTINCLUDE 3 resource.
|
||||||
|
//
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
#endif // not APSTUDIO_INVOKED
|
||||||
|
|
1044
engine/ftequake/npqtv.dsp
Normal file
1044
engine/ftequake/npqtv.dsp
Normal file
File diff suppressed because it is too large
Load diff
|
@ -92,14 +92,8 @@ static unsigned cs_data[16*16];
|
||||||
static int externalhair;
|
static int externalhair;
|
||||||
int gl_anisotropy_factor;
|
int gl_anisotropy_factor;
|
||||||
|
|
||||||
typedef struct
|
qbyte conback_buffer[sizeof(mpic_t)];
|
||||||
{
|
qbyte custconback_buffer[sizeof(mpic_t)];
|
||||||
int texnum;
|
|
||||||
float sl, tl, sh, th;
|
|
||||||
} glpic_t;
|
|
||||||
|
|
||||||
qbyte conback_buffer[sizeof(mpic_t) + sizeof(glpic_t)];
|
|
||||||
qbyte custconback_buffer[sizeof(mpic_t) + sizeof(glpic_t)];
|
|
||||||
mpic_t *default_conback = (mpic_t *)&conback_buffer, *conback, *custom_conback = (mpic_t *)&custconback_buffer;
|
mpic_t *default_conback = (mpic_t *)&conback_buffer, *conback, *custom_conback = (mpic_t *)&custconback_buffer;
|
||||||
|
|
||||||
#include "hash.h"
|
#include "hash.h"
|
||||||
|
@ -245,7 +239,7 @@ qboolean Draw_RealPicFromWad (mpic_t *out, char *name)
|
||||||
in = W_SafeGetLumpName (name+4);
|
in = W_SafeGetLumpName (name+4);
|
||||||
else
|
else
|
||||||
in = W_SafeGetLumpName (name);
|
in = W_SafeGetLumpName (name);
|
||||||
gl = (glpic_t *)out->data;
|
gl = &out->d.gl;
|
||||||
|
|
||||||
if (in)
|
if (in)
|
||||||
{
|
{
|
||||||
|
@ -393,7 +387,7 @@ mpic_t *GLDraw_SafeCachePic (char *path)
|
||||||
if ((mem = ReadPCXFile(data, com_filesize, &pic->pic.width, &height)))
|
if ((mem = ReadPCXFile(data, com_filesize, &pic->pic.width, &height)))
|
||||||
{
|
{
|
||||||
pic->pic.height = height;
|
pic->pic.height = height;
|
||||||
gl = (glpic_t *)pic->pic.data;
|
gl = &pic->pic.d.gl;
|
||||||
if (!(gl->texnum = Mod_LoadReplacementTexture(alternatename, "pics", false, true, false)))
|
if (!(gl->texnum = Mod_LoadReplacementTexture(alternatename, "pics", false, true, false)))
|
||||||
gl->texnum = GL_LoadTexture32(path, pic->pic.width, pic->pic.height, (unsigned *)mem, false, false);
|
gl->texnum = GL_LoadTexture32(path, pic->pic.width, pic->pic.height, (unsigned *)mem, false, false);
|
||||||
gl->sl = 0;
|
gl->sl = 0;
|
||||||
|
@ -434,7 +428,7 @@ mpic_t *GLDraw_SafeCachePic (char *path)
|
||||||
pic->pic.height = height;
|
pic->pic.height = height;
|
||||||
if (mem)
|
if (mem)
|
||||||
{
|
{
|
||||||
gl = (glpic_t *)pic->pic.data;
|
gl = &pic->pic.d.gl;
|
||||||
if (!(gl->texnum = Mod_LoadReplacementTexture(alternatename, NULL, false, true, false)))
|
if (!(gl->texnum = Mod_LoadReplacementTexture(alternatename, NULL, false, true, false)))
|
||||||
gl->texnum = GL_LoadTexture32(path, pic->pic.width, pic->pic.height, (unsigned *)mem, false, true);
|
gl->texnum = GL_LoadTexture32(path, pic->pic.width, pic->pic.height, (unsigned *)mem, false, true);
|
||||||
gl->sl = 0;
|
gl->sl = 0;
|
||||||
|
@ -463,7 +457,7 @@ mpic_t *GLDraw_SafeCachePic (char *path)
|
||||||
if ((mem = ReadJPEGFile(data, com_filesize, &pic->pic.width, &height)))
|
if ((mem = ReadJPEGFile(data, com_filesize, &pic->pic.width, &height)))
|
||||||
{
|
{
|
||||||
pic->pic.height = height;
|
pic->pic.height = height;
|
||||||
gl = (glpic_t *)pic->pic.data;
|
gl = &pic->pic.d.gl;
|
||||||
if (!(gl->texnum = Mod_LoadReplacementTexture(alternatename, NULL, false, true, false)))
|
if (!(gl->texnum = Mod_LoadReplacementTexture(alternatename, NULL, false, true, false)))
|
||||||
gl->texnum = GL_LoadTexture32(path, pic->pic.width, pic->pic.height, (unsigned *)mem, false, false);
|
gl->texnum = GL_LoadTexture32(path, pic->pic.width, pic->pic.height, (unsigned *)mem, false, false);
|
||||||
gl->sl = 0;
|
gl->sl = 0;
|
||||||
|
@ -491,7 +485,7 @@ mpic_t *GLDraw_SafeCachePic (char *path)
|
||||||
strcpy(pic->name, path);
|
strcpy(pic->name, path);
|
||||||
if (mem = ReadTargaFile ((qbyte *)dat, com_filesize, &pic->pic.width, &pic->pic.height, false))
|
if (mem = ReadTargaFile ((qbyte *)dat, com_filesize, &pic->pic.width, &pic->pic.height, false))
|
||||||
{
|
{
|
||||||
gl = (glpic_t *)pic->pic.data;
|
gl = &pic->pic.d.gl;
|
||||||
if (!(gl->texnum = Mod_LoadReplacementTexture(alternatename, false, true)))
|
if (!(gl->texnum = Mod_LoadReplacementTexture(alternatename, false, true)))
|
||||||
gl->texnum = GL_LoadTexture32(path, pic->pic.width, pic->pic.height, (unsigned *)dat, false, true);
|
gl->texnum = GL_LoadTexture32(path, pic->pic.width, pic->pic.height, (unsigned *)dat, false, true);
|
||||||
gl->sl = 0;
|
gl->sl = 0;
|
||||||
|
@ -542,7 +536,7 @@ mpic_t *GLDraw_SafeCachePic (char *path)
|
||||||
pic->pic.width = qpic->width;
|
pic->pic.width = qpic->width;
|
||||||
pic->pic.height = qpic->height;
|
pic->pic.height = qpic->height;
|
||||||
|
|
||||||
gl = (glpic_t *)pic->pic.data;
|
gl = &pic->pic.d.gl;
|
||||||
if (!(gl->texnum = Mod_LoadReplacementTexture(path, NULL, false, true, false)))
|
if (!(gl->texnum = Mod_LoadReplacementTexture(path, NULL, false, true, false)))
|
||||||
gl->texnum = GL_LoadPicTexture (qpic);
|
gl->texnum = GL_LoadPicTexture (qpic);
|
||||||
gl->sl = 0;
|
gl->sl = 0;
|
||||||
|
@ -969,7 +963,7 @@ TRACE(("dbg: GLDraw_ReInit: Allocating upload buffers\n"));
|
||||||
strcpy(glmenu_cachepics[glmenu_numcachepics].name, "conchars");
|
strcpy(glmenu_cachepics[glmenu_numcachepics].name, "conchars");
|
||||||
glmenu_cachepics[glmenu_numcachepics].pic.width = 128;
|
glmenu_cachepics[glmenu_numcachepics].pic.width = 128;
|
||||||
glmenu_cachepics[glmenu_numcachepics].pic.height = 128;
|
glmenu_cachepics[glmenu_numcachepics].pic.height = 128;
|
||||||
gl = (glpic_t *)&glmenu_cachepics[glmenu_numcachepics].pic.data;
|
gl = &glmenu_cachepics[glmenu_numcachepics].pic.d.gl;
|
||||||
gl->texnum = char_texture;
|
gl->texnum = char_texture;
|
||||||
gl->sl = 0;
|
gl->sl = 0;
|
||||||
gl->tl = 0;
|
gl->tl = 0;
|
||||||
|
@ -988,7 +982,7 @@ TRACE(("dbg: GLDraw_ReInit: Allocating upload buffers\n"));
|
||||||
strcpy(glmenu_cachepics[glmenu_numcachepics].name, "tinyfont");
|
strcpy(glmenu_cachepics[glmenu_numcachepics].name, "tinyfont");
|
||||||
glmenu_cachepics[glmenu_numcachepics].pic.width = 128;
|
glmenu_cachepics[glmenu_numcachepics].pic.width = 128;
|
||||||
glmenu_cachepics[glmenu_numcachepics].pic.height = 32;
|
glmenu_cachepics[glmenu_numcachepics].pic.height = 32;
|
||||||
gl = (glpic_t *)&glmenu_cachepics[glmenu_numcachepics].pic.data;
|
gl = &glmenu_cachepics[glmenu_numcachepics].pic.d.gl;
|
||||||
char_texturetiny = gl->texnum = GL_LoadTexture ("tinyfont", 128, 32, tinyfont, false, true);
|
char_texturetiny = gl->texnum = GL_LoadTexture ("tinyfont", 128, 32, tinyfont, false, true);
|
||||||
gl->sl = 0;
|
gl->sl = 0;
|
||||||
gl->tl = 0;
|
gl->tl = 0;
|
||||||
|
@ -1008,7 +1002,7 @@ TRACE(("dbg: GLDraw_ReInit: Allocating upload buffers\n"));
|
||||||
strcpy(glmenu_cachepics[glmenu_numcachepics].name, "gfx/menu/bigfont.lmp");
|
strcpy(glmenu_cachepics[glmenu_numcachepics].name, "gfx/menu/bigfont.lmp");
|
||||||
glmenu_cachepics[glmenu_numcachepics].pic.width = bigfont->width;
|
glmenu_cachepics[glmenu_numcachepics].pic.width = bigfont->width;
|
||||||
glmenu_cachepics[glmenu_numcachepics].pic.height = bigfont->height;
|
glmenu_cachepics[glmenu_numcachepics].pic.height = bigfont->height;
|
||||||
gl = (glpic_t *)&glmenu_cachepics[glmenu_numcachepics].pic.data;
|
gl = &glmenu_cachepics[glmenu_numcachepics].pic.d.gl;
|
||||||
gl->texnum = GL_LoadTexture ("gfx/menu/bigfont.lmp", bigfont->width, bigfont->height, data, false, true);
|
gl->texnum = GL_LoadTexture ("gfx/menu/bigfont.lmp", bigfont->width, bigfont->height, data, false, true);
|
||||||
qglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
qglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||||
qglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
qglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||||
|
@ -1110,7 +1104,7 @@ TRACE(("dbg: GLDraw_ReInit: Allocating upload buffers\n"));
|
||||||
qglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
qglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||||
qglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
qglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
||||||
|
|
||||||
gl = (glpic_t *)conback->data;
|
gl = &conback->d.gl;
|
||||||
if (!(gl->texnum=Mod_LoadReplacementTexture("gfx/conback.lmp", NULL, false, true, false)))
|
if (!(gl->texnum=Mod_LoadReplacementTexture("gfx/conback.lmp", NULL, false, true, false)))
|
||||||
{
|
{
|
||||||
if (!ncdata) //no fallback
|
if (!ncdata) //no fallback
|
||||||
|
@ -1142,7 +1136,7 @@ TRACE(("dbg: GLDraw_ReInit: Allocating upload buffers\n"));
|
||||||
|
|
||||||
custom_conback->width = vid.conwidth;
|
custom_conback->width = vid.conwidth;
|
||||||
custom_conback->height = vid.conheight;
|
custom_conback->height = vid.conheight;
|
||||||
gl = (glpic_t *)custom_conback->data;
|
gl = &custom_conback->d.gl;
|
||||||
gl->texnum = 0;
|
gl->texnum = 0;
|
||||||
gl->sl = 0;
|
gl->sl = 0;
|
||||||
gl->sh = 1;
|
gl->sh = 1;
|
||||||
|
@ -1586,7 +1580,7 @@ void GLDraw_Pic (int x, int y, mpic_t *pic)
|
||||||
|
|
||||||
if (scrap_dirty)
|
if (scrap_dirty)
|
||||||
Scrap_Upload ();
|
Scrap_Upload ();
|
||||||
gl = (glpic_t *)pic->data;
|
gl = &pic->d.gl;
|
||||||
|
|
||||||
draw_mesh_xyz[0][0] = x;
|
draw_mesh_xyz[0][0] = x;
|
||||||
draw_mesh_xyz[0][1] = y;
|
draw_mesh_xyz[0][1] = y;
|
||||||
|
@ -1749,7 +1743,7 @@ void GLDraw_ScalePic (int x, int y, int width, int height, mpic_t *pic)
|
||||||
|
|
||||||
if (scrap_dirty)
|
if (scrap_dirty)
|
||||||
Scrap_Upload ();
|
Scrap_Upload ();
|
||||||
gl = (glpic_t *)pic->data;
|
gl = &pic->d.gl;
|
||||||
// qglColor4f (1,1,1,1);
|
// qglColor4f (1,1,1,1);
|
||||||
GL_Bind (gl->texnum);
|
GL_Bind (gl->texnum);
|
||||||
qglBegin (GL_QUADS);
|
qglBegin (GL_QUADS);
|
||||||
|
@ -1775,7 +1769,7 @@ void GLDraw_AlphaPic (int x, int y, mpic_t *pic, float alpha)
|
||||||
|
|
||||||
if (scrap_dirty)
|
if (scrap_dirty)
|
||||||
Scrap_Upload ();
|
Scrap_Upload ();
|
||||||
gl = (glpic_t *)pic->data;
|
gl = &pic->d.gl;
|
||||||
qglDisable(GL_ALPHA_TEST);
|
qglDisable(GL_ALPHA_TEST);
|
||||||
qglEnable (GL_BLEND);
|
qglEnable (GL_BLEND);
|
||||||
// qglBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
// qglBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
|
@ -1805,7 +1799,7 @@ void GLDraw_SubPic(int x, int y, mpic_t *pic, int srcx, int srcy, int width, int
|
||||||
|
|
||||||
if (scrap_dirty)
|
if (scrap_dirty)
|
||||||
Scrap_Upload ();
|
Scrap_Upload ();
|
||||||
gl = (glpic_t *)pic->data;
|
gl = &pic->d.gl;
|
||||||
|
|
||||||
oldglwidth = gl->sh - gl->sl;
|
oldglwidth = gl->sh - gl->sl;
|
||||||
oldglheight = gl->th - gl->tl;
|
oldglheight = gl->th - gl->tl;
|
||||||
|
@ -2005,7 +1999,7 @@ void GLDraw_TileClear (int x, int y, int w, int h)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
GL_Bind (*(int *)draw_backtile->data);
|
GL_Bind (draw_backtile->d.gl.texnum);
|
||||||
qglBegin (GL_QUADS);
|
qglBegin (GL_QUADS);
|
||||||
qglTexCoord2f (x/64.0, y/64.0);
|
qglTexCoord2f (x/64.0, y/64.0);
|
||||||
qglVertex2f (x, y);
|
qglVertex2f (x, y);
|
||||||
|
@ -2243,7 +2237,7 @@ void GLDraw_Image(float x, float y, float w, float h, float s1, float t1, float
|
||||||
|
|
||||||
if (scrap_dirty)
|
if (scrap_dirty)
|
||||||
Scrap_Upload ();
|
Scrap_Upload ();
|
||||||
gl = (glpic_t *)pic->data;
|
gl = &pic->d.gl;
|
||||||
/*
|
/*
|
||||||
s2 = s2
|
s2 = s2
|
||||||
|
|
||||||
|
@ -2370,7 +2364,7 @@ void GL_Font_Callback(struct cvar_s *var, char *oldvalue)
|
||||||
pic = GLDraw_IsCached("conchars");
|
pic = GLDraw_IsCached("conchars");
|
||||||
if (pic)
|
if (pic)
|
||||||
{
|
{
|
||||||
glpic_t *gl = (glpic_t *)pic->data;
|
glpic_t *gl = &pic->d.gl;
|
||||||
gl->texnum = char_texture;
|
gl->texnum = char_texture;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -2398,7 +2392,7 @@ void GL_Conback_Callback(struct cvar_s *var, char *oldvalue)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
conback = custom_conback;
|
conback = custom_conback;
|
||||||
((glpic_t *)conback->data)->texnum = newtex;
|
conback->d.gl.texnum = newtex;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -234,6 +234,50 @@ void *Mod_GetHalfLifeModelData(model_t *mod)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
int HLMod_FrameForName(model_t *mod, char *name)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
hlmdl_header_t *h;
|
||||||
|
hlmdl_sequencelist_t *seqs;
|
||||||
|
hlmodelcache_t *mc;
|
||||||
|
if (!mod || mod->type != mod_halflife)
|
||||||
|
return -1; //halflife models only, please
|
||||||
|
|
||||||
|
mc = Mod_Extradata(mod);
|
||||||
|
|
||||||
|
h = (hlmdl_header_t *)((char *)mc + mc->header);
|
||||||
|
seqs = (hlmdl_sequencelist_t*)((char*)h+h->seqindex);
|
||||||
|
|
||||||
|
for (i = 0; i < h->numseq; i++)
|
||||||
|
{
|
||||||
|
if (!strcmp(seqs[i].name, name))
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int HLMod_BoneForName(model_t *mod, char *name)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
hlmdl_header_t *h;
|
||||||
|
hlmdl_bone_t *bones;
|
||||||
|
hlmodelcache_t *mc;
|
||||||
|
if (!mod || mod->type != mod_halflife)
|
||||||
|
return -1; //halflife models only, please
|
||||||
|
|
||||||
|
mc = Mod_Extradata(mod);
|
||||||
|
|
||||||
|
h = (hlmdl_header_t *)((char *)mc + mc->header);
|
||||||
|
bones = (hlmdl_bone_t*)((char*)h+h->boneindex);
|
||||||
|
|
||||||
|
for (i = 0; i < h->numbones; i++)
|
||||||
|
{
|
||||||
|
if (!strcmp(bones[i].name, name))
|
||||||
|
return i+1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
=======================================================================================================================
|
=======================================================================================================================
|
||||||
HL_CalculateBones - calculate bone positions - quaternion+vector in one function
|
HL_CalculateBones - calculate bone positions - quaternion+vector in one function
|
||||||
|
@ -403,10 +447,10 @@ void HL_SetupBones(hlmodel_t *model, int seqnum, int firstbone, int lastbone, fl
|
||||||
return;
|
return;
|
||||||
if(frame >= sequence->numframes)
|
if(frame >= sequence->numframes)
|
||||||
{
|
{
|
||||||
if (sequence->motiontype&1)
|
if (sequence->loop)
|
||||||
frame = sequence->numframes-1;
|
|
||||||
else
|
|
||||||
frame %= sequence->numframes;
|
frame %= sequence->numframes;
|
||||||
|
else
|
||||||
|
frame = sequence->numframes-1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lastbone > model->header->numbones)
|
if (lastbone > model->header->numbones)
|
||||||
|
@ -576,6 +620,7 @@ void R_DrawHLModel(entity_t *curent)
|
||||||
if (cbone >= lastbone)
|
if (cbone >= lastbone)
|
||||||
continue;
|
continue;
|
||||||
HL_SetupBones(&model, curent->framestate.g[bgroup].frame[0], cbone, lastbone, (curent->framestate.g[bgroup].subblendfrac+1)*0.5, curent->framestate.g[bgroup].frametime[0]); /* Setup the bones */
|
HL_SetupBones(&model, curent->framestate.g[bgroup].frame[0], cbone, lastbone, (curent->framestate.g[bgroup].subblendfrac+1)*0.5, curent->framestate.g[bgroup].frametime[0]); /* Setup the bones */
|
||||||
|
cbone = lastbone;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Manipulate each mesh directly */
|
/* Manipulate each mesh directly */
|
||||||
|
|
|
@ -404,7 +404,6 @@ Mod_LoadModel
|
||||||
Loads a model into the cache
|
Loads a model into the cache
|
||||||
==================
|
==================
|
||||||
*/
|
*/
|
||||||
char *COM_FileExtension (char *in);
|
|
||||||
model_t *GLMod_LoadModel (model_t *mod, qboolean crash)
|
model_t *GLMod_LoadModel (model_t *mod, qboolean crash)
|
||||||
{
|
{
|
||||||
void *d;
|
void *d;
|
||||||
|
@ -2064,7 +2063,6 @@ void *suplementryclipnodes;
|
||||||
void *suplementryplanes;
|
void *suplementryplanes;
|
||||||
void *crouchhullfile;
|
void *crouchhullfile;
|
||||||
|
|
||||||
qbyte *COM_LoadMallocFile (char *path);
|
|
||||||
void GLMod_LoadCrouchHull(void)
|
void GLMod_LoadCrouchHull(void)
|
||||||
{
|
{
|
||||||
int i, h;
|
int i, h;
|
||||||
|
@ -2235,7 +2233,7 @@ qboolean GLMod_LoadClipnodes (lump_t *l)
|
||||||
hull->planes = loadmodel->planes;
|
hull->planes = loadmodel->planes;
|
||||||
hull->clip_mins[0] = -16;
|
hull->clip_mins[0] = -16;
|
||||||
hull->clip_mins[1] = -16;
|
hull->clip_mins[1] = -16;
|
||||||
hull->clip_mins[2] = -32;//-36 is correct here, but we'll just copy mvdsv instead.
|
hull->clip_mins[2] = -36;//-36 is correct here, but mvdsv uses -32 instead. This breaks prediction between the two
|
||||||
hull->clip_maxs[0] = 16;
|
hull->clip_maxs[0] = 16;
|
||||||
hull->clip_maxs[1] = 16;
|
hull->clip_maxs[1] = 16;
|
||||||
hull->clip_maxs[2] = hull->clip_mins[2]+72;
|
hull->clip_maxs[2] = hull->clip_mins[2]+72;
|
||||||
|
@ -3028,8 +3026,8 @@ void * GLMod_LoadSpriteFrame (void * pin, mspriteframe_t **ppframe, int framenum
|
||||||
|
|
||||||
*ppframe = pspriteframe;
|
*ppframe = pspriteframe;
|
||||||
|
|
||||||
pspriteframe->width = width;
|
pspriteframe->p.width = width;
|
||||||
pspriteframe->height = height;
|
pspriteframe->p.height = height;
|
||||||
origin[0] = LittleLong (pinframe->origin[0]);
|
origin[0] = LittleLong (pinframe->origin[0]);
|
||||||
origin[1] = LittleLong (pinframe->origin[1]);
|
origin[1] = LittleLong (pinframe->origin[1]);
|
||||||
|
|
||||||
|
@ -3038,42 +3036,46 @@ void * GLMod_LoadSpriteFrame (void * pin, mspriteframe_t **ppframe, int framenum
|
||||||
pspriteframe->left = origin[0];
|
pspriteframe->left = origin[0];
|
||||||
pspriteframe->right = width + origin[0];
|
pspriteframe->right = width + origin[0];
|
||||||
|
|
||||||
pspriteframe->gl_texturenum = 0;
|
pspriteframe->p.d.gl.texnum = 0;
|
||||||
|
pspriteframe->p.d.gl.sl = 0;
|
||||||
|
pspriteframe->p.d.gl.sh = 1;
|
||||||
|
pspriteframe->p.d.gl.tl = 0;
|
||||||
|
pspriteframe->p.d.gl.th = 1;
|
||||||
|
|
||||||
if (!pspriteframe->gl_texturenum)
|
if (!pspriteframe->p.d.gl.texnum)
|
||||||
{ //the dp way
|
{ //the dp way
|
||||||
COM_StripExtension(loadmodel->name, name, sizeof(name));
|
COM_StripExtension(loadmodel->name, name, sizeof(name));
|
||||||
Q_strncatz(name, va("_%i", framenum), sizeof(name));
|
Q_strncatz(name, va("_%i", framenum), sizeof(name));
|
||||||
pspriteframe->gl_texturenum = Mod_LoadReplacementTexture(name, "sprites", true, true, true);
|
pspriteframe->p.d.gl.texnum = Mod_LoadReplacementTexture(name, "sprites", true, true, true);
|
||||||
}
|
}
|
||||||
if (!pspriteframe->gl_texturenum)
|
if (!pspriteframe->p.d.gl.texnum)
|
||||||
{ //the older fte way.
|
{ //the older fte way.
|
||||||
COM_StripExtension(loadmodel->name, name, sizeof(name));
|
COM_StripExtension(loadmodel->name, name, sizeof(name));
|
||||||
Q_strncatz(name, va("_%i", framenum), sizeof(name));
|
Q_strncatz(name, va("_%i", framenum), sizeof(name));
|
||||||
pspriteframe->gl_texturenum = Mod_LoadReplacementTexture(name, "sprites", true, true, true);
|
pspriteframe->p.d.gl.texnum = Mod_LoadReplacementTexture(name, "sprites", true, true, true);
|
||||||
}
|
}
|
||||||
if (!pspriteframe->gl_texturenum)
|
if (!pspriteframe->p.d.gl.texnum)
|
||||||
{ //the fuhquake way
|
{ //the fuhquake way
|
||||||
COM_StripExtension(COM_SkipPath(loadmodel->name), name, sizeof(name));
|
COM_StripExtension(COM_SkipPath(loadmodel->name), name, sizeof(name));
|
||||||
Q_strncatz(name, va("_%i", framenum), sizeof(name));
|
Q_strncatz(name, va("_%i", framenum), sizeof(name));
|
||||||
pspriteframe->gl_texturenum = Mod_LoadReplacementTexture(name, "sprites", true, true, true);
|
pspriteframe->p.d.gl.texnum = Mod_LoadReplacementTexture(name, "sprites", true, true, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (version == SPRITE32_VERSION)
|
if (version == SPRITE32_VERSION)
|
||||||
{
|
{
|
||||||
size *= 4;
|
size *= 4;
|
||||||
if (!pspriteframe->gl_texturenum)
|
if (!pspriteframe->p.d.gl.texnum)
|
||||||
pspriteframe->gl_texturenum = R_LoadTexture32 (name, width, height, (unsigned *)(pinframe + 1), true, true);
|
pspriteframe->p.d.gl.texnum = R_LoadTexture32 (name, width, height, (unsigned *)(pinframe + 1), true, true);
|
||||||
}
|
}
|
||||||
else if (version == SPRITEHL_VERSION)
|
else if (version == SPRITEHL_VERSION)
|
||||||
{
|
{
|
||||||
if (!pspriteframe->gl_texturenum)
|
if (!pspriteframe->p.d.gl.texnum)
|
||||||
pspriteframe->gl_texturenum = R_LoadTexture8Pal32 (name, width, height, (qbyte *)(pinframe + 1), (qbyte*)palette, true, true);
|
pspriteframe->p.d.gl.texnum = R_LoadTexture8Pal32 (name, width, height, (qbyte *)(pinframe + 1), (qbyte*)palette, true, true);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (!pspriteframe->gl_texturenum)
|
if (!pspriteframe->p.d.gl.texnum)
|
||||||
pspriteframe->gl_texturenum = R_LoadTexture8 (name, width, height, (qbyte *)(pinframe + 1), true, true);
|
pspriteframe->p.d.gl.texnum = R_LoadTexture8 (name, width, height, (qbyte *)(pinframe + 1), true, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (void *)((qbyte *)(pinframe+1) + size);
|
return (void *)((qbyte *)(pinframe+1) + size);
|
||||||
|
@ -3330,17 +3332,17 @@ qboolean GLMod_LoadSprite2Model (model_t *mod, void *buffer)
|
||||||
|
|
||||||
frame = psprite->frames[i].frameptr = Hunk_AllocName(sizeof(mspriteframe_t), loadname);
|
frame = psprite->frames[i].frameptr = Hunk_AllocName(sizeof(mspriteframe_t), loadname);
|
||||||
|
|
||||||
frame->gl_texturenum = Mod_LoadHiResTexture(pframetype->name, NULL, true, true, true);
|
frame->p.d.gl.texnum = Mod_LoadHiResTexture(pframetype->name, NULL, true, true, true);
|
||||||
|
|
||||||
frame->width = LittleLong(pframetype->width);
|
frame->p.width = LittleLong(pframetype->width);
|
||||||
frame->height = LittleLong(pframetype->height);
|
frame->p.height = LittleLong(pframetype->height);
|
||||||
origin[0] = LittleLong (pframetype->origin_x);
|
origin[0] = LittleLong (pframetype->origin_x);
|
||||||
origin[1] = LittleLong (pframetype->origin_y);
|
origin[1] = LittleLong (pframetype->origin_y);
|
||||||
|
|
||||||
frame->up = -origin[1];
|
frame->up = -origin[1];
|
||||||
frame->down = frame->height - origin[1];
|
frame->down = frame->p.height - origin[1];
|
||||||
frame->left = -origin[0];
|
frame->left = -origin[0];
|
||||||
frame->right = frame->width - origin[0];
|
frame->right = frame->p.width - origin[0];
|
||||||
|
|
||||||
pframetype++;
|
pframetype++;
|
||||||
}
|
}
|
||||||
|
|
|
@ -416,13 +416,16 @@ SPRITE MODELS
|
||||||
// FIXME: shorten these?
|
// FIXME: shorten these?
|
||||||
typedef struct mspriteframe_s
|
typedef struct mspriteframe_s
|
||||||
{
|
{
|
||||||
|
float up, down, left, right;
|
||||||
|
/*
|
||||||
int width;
|
int width;
|
||||||
int height;
|
int height;
|
||||||
float up, down, left, right;
|
|
||||||
int gl_texturenum;
|
int gl_texturenum;
|
||||||
#ifdef SWQUAKE
|
#ifdef SWQUAKE
|
||||||
qbyte pixels[4];
|
qbyte pixels[4];
|
||||||
#endif
|
#endif
|
||||||
|
*/
|
||||||
|
mpic_t p;
|
||||||
} mspriteframe_t;
|
} mspriteframe_t;
|
||||||
|
|
||||||
mspriteframe_t *R_GetSpriteFrame (entity_t *currententity);
|
mspriteframe_t *R_GetSpriteFrame (entity_t *currententity);
|
||||||
|
|
|
@ -142,4 +142,64 @@ void GLR_NetGraph (void)
|
||||||
qglEnd ();
|
qglEnd ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GLR_FrameTimeGraph (int frametime)
|
||||||
|
{
|
||||||
|
int a, x, i, y;
|
||||||
|
int lost;
|
||||||
|
char st[80];
|
||||||
|
unsigned ngraph_pixels[NET_GRAPHHEIGHT][NET_TIMINGS];
|
||||||
|
|
||||||
|
static int timehistory[NET_TIMINGS];
|
||||||
|
static int findex;
|
||||||
|
|
||||||
|
timehistory[findex++&NET_TIMINGSMASK] = frametime;
|
||||||
|
|
||||||
|
x = 0;
|
||||||
|
lost = CL_CalcNet();
|
||||||
|
for (a=0 ; a<NET_TIMINGS ; a++)
|
||||||
|
{
|
||||||
|
i = (findex-a) & NET_TIMINGSMASK;
|
||||||
|
R_LineGraph (NET_TIMINGS-1-a, timehistory[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// now load the netgraph texture into gl and draw it
|
||||||
|
for (y = 0; y < NET_GRAPHHEIGHT; y++)
|
||||||
|
for (x = 0; x < NET_TIMINGS; x++)
|
||||||
|
ngraph_pixels[y][x] = d_8to24rgbtable[ngraph_texels[y][x]];
|
||||||
|
|
||||||
|
x = ((vid.width - 320)>>1);
|
||||||
|
x=-x;
|
||||||
|
y = vid.height - sb_lines - 24 - NET_GRAPHHEIGHT - 1;
|
||||||
|
|
||||||
|
M_DrawTextBox (x, y, NET_TIMINGS/8, NET_GRAPHHEIGHT/8 + 1);
|
||||||
|
y += 8;
|
||||||
|
|
||||||
|
sprintf(st, "%3i%% packet loss", lost);
|
||||||
|
Draw_String(8, y, st);
|
||||||
|
y += 8;
|
||||||
|
|
||||||
|
GL_Bind(netgraphtexture);
|
||||||
|
|
||||||
|
qglTexImage2D (GL_TEXTURE_2D, 0, gl_alpha_format,
|
||||||
|
NET_TIMINGS, NET_GRAPHHEIGHT, 0, GL_RGBA,
|
||||||
|
GL_UNSIGNED_BYTE, ngraph_pixels);
|
||||||
|
|
||||||
|
GL_TexEnv(GL_MODULATE);
|
||||||
|
qglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||||
|
qglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||||
|
|
||||||
|
x = 8;
|
||||||
|
qglColor3f (1,1,1);
|
||||||
|
qglBegin (GL_QUADS);
|
||||||
|
qglTexCoord2f (0, 0);
|
||||||
|
qglVertex2f (x, y);
|
||||||
|
qglTexCoord2f (1, 0);
|
||||||
|
qglVertex2f (x+NET_TIMINGS, y);
|
||||||
|
qglTexCoord2f (1, 1);
|
||||||
|
qglVertex2f (x+NET_TIMINGS, y+NET_GRAPHHEIGHT);
|
||||||
|
qglTexCoord2f (0, 1);
|
||||||
|
qglVertex2f (x, y+NET_GRAPHHEIGHT);
|
||||||
|
qglEnd ();
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -598,7 +598,7 @@ void R_DrawSpriteModel (entity_t *e)
|
||||||
|
|
||||||
GL_DisableMultitexture();
|
GL_DisableMultitexture();
|
||||||
|
|
||||||
GL_Bind(frame->gl_texturenum);
|
GL_Bind(frame->p.d.gl.texnum);
|
||||||
|
|
||||||
{
|
{
|
||||||
extern int gldepthfunc;
|
extern int gldepthfunc;
|
||||||
|
|
|
@ -2061,8 +2061,10 @@ void GLR_DrawWaterSurfaces (void)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void GLR_DrawAlphaSurface(msurface_t *s)
|
static void GLR_DrawAlphaSurface(int count, msurface_t **surfs, void *type)
|
||||||
{
|
{
|
||||||
|
msurface_t *s = (*surfs);
|
||||||
|
|
||||||
qglPushMatrix();
|
qglPushMatrix();
|
||||||
R_RotateForEntity(s->ownerent);
|
R_RotateForEntity(s->ownerent);
|
||||||
#ifdef Q3SHADERS
|
#ifdef Q3SHADERS
|
||||||
|
@ -3620,7 +3622,6 @@ void GL_CreateSurfaceLightmap (msurface_t *surf, int shift)
|
||||||
void GLSurf_DeInit(void)
|
void GLSurf_DeInit(void)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
qglDeleteTextures(numlightmaps, lightmap_textures);
|
|
||||||
for (i = 0; i < numlightmaps; i++)
|
for (i = 0; i < numlightmaps; i++)
|
||||||
{
|
{
|
||||||
if (!lightmap[i])
|
if (!lightmap[i])
|
||||||
|
@ -3630,7 +3631,10 @@ void GLSurf_DeInit(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lightmap_textures)
|
if (lightmap_textures)
|
||||||
|
{
|
||||||
|
qglDeleteTextures(numlightmaps, lightmap_textures);
|
||||||
BZ_Free(lightmap_textures);
|
BZ_Free(lightmap_textures);
|
||||||
|
}
|
||||||
if (lightmap)
|
if (lightmap)
|
||||||
BZ_Free(lightmap);
|
BZ_Free(lightmap);
|
||||||
|
|
||||||
|
@ -3650,7 +3654,7 @@ with all the surfaces from all brush models
|
||||||
*/
|
*/
|
||||||
void GL_BuildLightmaps (void)
|
void GL_BuildLightmaps (void)
|
||||||
{
|
{
|
||||||
int i, j;
|
int i, j, t;
|
||||||
model_t *m;
|
model_t *m;
|
||||||
int shift;
|
int shift;
|
||||||
|
|
||||||
|
@ -3740,13 +3744,19 @@ void GL_BuildLightmaps (void)
|
||||||
currentmodel = m;
|
currentmodel = m;
|
||||||
shift = GLR_LightmapShift(currentmodel);
|
shift = GLR_LightmapShift(currentmodel);
|
||||||
|
|
||||||
for (i=0 ; i<m->numsurfaces ; i++)
|
for (t = 0; t < m->numtextures; t++)
|
||||||
{
|
{
|
||||||
GL_CreateSurfaceLightmap (m->surfaces + i, shift);
|
for (i=0 ; i<m->numsurfaces ; i++)
|
||||||
P_EmitSkyEffectTris(m, &m->surfaces[i]);
|
{//extra surface loop so we get slightly less texture switches
|
||||||
if (m->surfaces[i].mesh) //there are some surfaces that have a display list already (the subdivided ones)
|
if (m->surfaces[i].texinfo->texture == m->textures[t])
|
||||||
continue;
|
{
|
||||||
GL_BuildSurfaceDisplayList (m->surfaces + i);
|
GL_CreateSurfaceLightmap (m->surfaces + i, shift);
|
||||||
|
P_EmitSkyEffectTris(m, &m->surfaces[i]);
|
||||||
|
if (m->surfaces[i].mesh) //there are some surfaces that have a display list already (the subdivided ones)
|
||||||
|
continue;
|
||||||
|
GL_BuildSurfaceDisplayList (m->surfaces + i);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1140,7 +1140,7 @@ static shaderkey_t shaderpasskeys[] =
|
||||||
|
|
||||||
// ===============================================================
|
// ===============================================================
|
||||||
|
|
||||||
int Shader_InitCallback (char *name, int size, void *param)
|
int Shader_InitCallback (const char *name, int size, void *param)
|
||||||
{
|
{
|
||||||
strcpy(shaderbuf+shaderbuflen, name);
|
strcpy(shaderbuf+shaderbuflen, name);
|
||||||
Shader_MakeCache(shaderbuf+shaderbuflen);
|
Shader_MakeCache(shaderbuf+shaderbuflen);
|
||||||
|
@ -2350,7 +2350,7 @@ void Shader_Default2D(char *shortname, shader_t *s)
|
||||||
{
|
{
|
||||||
mp = Draw_SafeCachePic(va("%s.lmp", shortname));
|
mp = Draw_SafeCachePic(va("%s.lmp", shortname));
|
||||||
if (mp)
|
if (mp)
|
||||||
pass->anim_frames[0] = *(int*)mp->data;
|
pass->anim_frames[0] = mp->d.gl.texnum;
|
||||||
|
|
||||||
if (!pass->anim_frames[0])
|
if (!pass->anim_frames[0])
|
||||||
pass->anim_frames[0] = missing_texture;
|
pass->anim_frames[0] = missing_texture;
|
||||||
|
|
|
@ -26,6 +26,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
#include "resource.h"
|
#include "resource.h"
|
||||||
#include <commctrl.h>
|
#include <commctrl.h>
|
||||||
|
|
||||||
|
#ifndef SetWindowLongPtr //yes its a define, for unicode support
|
||||||
|
#define SetWindowLongPtr SetWindowLong
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef CDS_FULLSCREEN
|
#ifndef CDS_FULLSCREEN
|
||||||
#define CDS_FULLSCREEN 4
|
#define CDS_FULLSCREEN 4
|
||||||
|
@ -65,7 +68,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
extern cvar_t vid_conwidth, vid_conautoscale;
|
extern cvar_t vid_conwidth, vid_conautoscale;
|
||||||
|
|
||||||
|
|
||||||
#define WINDOW_CLASS_NAME "WinQuake"
|
#define WINDOW_CLASS_NAME "FTEGLQuake"
|
||||||
|
|
||||||
#define MAX_MODE_LIST 128
|
#define MAX_MODE_LIST 128
|
||||||
#define VID_ROW_SIZE 3
|
#define VID_ROW_SIZE 3
|
||||||
|
@ -349,11 +352,20 @@ qboolean VID_SetWindowedMode (rendererstate_t *info)
|
||||||
DIBWidth = info->width;
|
DIBWidth = info->width;
|
||||||
DIBHeight = info->height;
|
DIBHeight = info->height;
|
||||||
|
|
||||||
WindowStyle = WS_OVERLAPPED | WS_BORDER | WS_CAPTION | WS_SYSMENU |
|
if (sys_hijackwindow)
|
||||||
WS_MINIMIZEBOX;
|
{
|
||||||
ExWindowStyle = 0;
|
SetWindowLong(sys_hijackwindow, GWL_STYLE, GetWindowLong(sys_hijackwindow, GWL_STYLE)|WS_OVERLAPPED);
|
||||||
|
WindowStyle = WS_CHILDWINDOW|WS_OVERLAPPED;
|
||||||
|
ExWindowStyle = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
WindowStyle = WS_OVERLAPPED | WS_BORDER | WS_CAPTION | WS_SYSMENU |
|
||||||
|
WS_MINIMIZEBOX;
|
||||||
|
ExWindowStyle = 0;
|
||||||
|
|
||||||
WindowStyle |= WS_SIZEBOX | WS_MAXIMIZEBOX;
|
WindowStyle |= WS_SIZEBOX | WS_MAXIMIZEBOX;
|
||||||
|
}
|
||||||
|
|
||||||
rect = WindowRect;
|
rect = WindowRect;
|
||||||
AdjustWindowRectEx(&rect, WindowStyle, FALSE, 0);
|
AdjustWindowRectEx(&rect, WindowStyle, FALSE, 0);
|
||||||
|
@ -370,7 +382,7 @@ qboolean VID_SetWindowedMode (rendererstate_t *info)
|
||||||
rect.left, rect.top,
|
rect.left, rect.top,
|
||||||
wwidth,
|
wwidth,
|
||||||
wheight,
|
wheight,
|
||||||
NULL,
|
sys_hijackwindow,
|
||||||
NULL,
|
NULL,
|
||||||
global_hInstance,
|
global_hInstance,
|
||||||
NULL);
|
NULL);
|
||||||
|
@ -381,9 +393,14 @@ qboolean VID_SetWindowedMode (rendererstate_t *info)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Center and show the DIB window
|
if (!sys_hijackwindow)
|
||||||
CenterWindow(dibwindow, WindowRect.right - WindowRect.left,
|
{
|
||||||
WindowRect.bottom - WindowRect.top, false);
|
// Center and show the DIB window
|
||||||
|
CenterWindow(dibwindow, WindowRect.right - WindowRect.left,
|
||||||
|
WindowRect.bottom - WindowRect.top, false);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
SetFocus(dibwindow);
|
||||||
|
|
||||||
// ShowWindow (dibwindow, SW_SHOWDEFAULT);
|
// ShowWindow (dibwindow, SW_SHOWDEFAULT);
|
||||||
// UpdateWindow (dibwindow);
|
// UpdateWindow (dibwindow);
|
||||||
|
@ -575,13 +592,9 @@ static qboolean CreateMainWindow(rendererstate_t *info)
|
||||||
{
|
{
|
||||||
TRACE(("dbg: GLVID_SetMode: VID_SetWindowedMode\n"));
|
TRACE(("dbg: GLVID_SetMode: VID_SetWindowedMode\n"));
|
||||||
stat = VID_SetWindowedMode(info);
|
stat = VID_SetWindowedMode(info);
|
||||||
IN_ActivateMouse ();
|
|
||||||
IN_HideMouse ();
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
IN_DeactivateMouse ();
|
|
||||||
IN_ShowMouse ();
|
|
||||||
TRACE(("dbg: GLVID_SetMode: VID_SetWindowedMode 2\n"));
|
TRACE(("dbg: GLVID_SetMode: VID_SetWindowedMode 2\n"));
|
||||||
stat = VID_SetWindowedMode(info);
|
stat = VID_SetWindowedMode(info);
|
||||||
}
|
}
|
||||||
|
@ -590,12 +603,10 @@ static qboolean CreateMainWindow(rendererstate_t *info)
|
||||||
{
|
{
|
||||||
TRACE(("dbg: GLVID_SetMode: VID_SetFullDIBMode\n"));
|
TRACE(("dbg: GLVID_SetMode: VID_SetFullDIBMode\n"));
|
||||||
stat = VID_SetFullDIBMode(info);
|
stat = VID_SetFullDIBMode(info);
|
||||||
if (stat)
|
|
||||||
{
|
|
||||||
IN_ActivateMouse ();
|
|
||||||
IN_HideMouse ();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
IN_UpdateGrabs(info->fullscreen, ActiveApp);
|
||||||
|
|
||||||
return stat;
|
return stat;
|
||||||
}
|
}
|
||||||
BOOL CheckForcePixelFormat(rendererstate_t *info);
|
BOOL CheckForcePixelFormat(rendererstate_t *info);
|
||||||
|
@ -604,7 +615,9 @@ int GLVID_SetMode (rendererstate_t *info, unsigned char *palette)
|
||||||
{
|
{
|
||||||
int temp;
|
int temp;
|
||||||
qboolean stat;
|
qboolean stat;
|
||||||
|
#ifndef NPQTV
|
||||||
MSG msg;
|
MSG msg;
|
||||||
|
#endif
|
||||||
// HDC hdc;
|
// HDC hdc;
|
||||||
|
|
||||||
TRACE(("dbg: GLVID_SetMode\n"));
|
TRACE(("dbg: GLVID_SetMode\n"));
|
||||||
|
@ -676,12 +689,13 @@ int GLVID_SetMode (rendererstate_t *info, unsigned char *palette)
|
||||||
SetForegroundWindow (mainwindow);
|
SetForegroundWindow (mainwindow);
|
||||||
VID_SetPalette (palette);
|
VID_SetPalette (palette);
|
||||||
|
|
||||||
while (PeekMessage (&msg, NULL, 0, 0, PM_REMOVE))
|
#ifndef NPQTV
|
||||||
|
while (PeekMessage (&msg, mainwindow, 0, 0, PM_REMOVE))
|
||||||
{
|
{
|
||||||
TranslateMessage (&msg);
|
TranslateMessage (&msg);
|
||||||
DispatchMessage (&msg);
|
DispatchMessage (&msg);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
Sleep (100);
|
Sleep (100);
|
||||||
|
|
||||||
SetWindowPos (mainwindow, HWND_TOP, 0, 0, 0, 0,
|
SetWindowPos (mainwindow, HWND_TOP, 0, 0, 0, 0,
|
||||||
|
@ -750,7 +764,9 @@ void VID_UnSetMode (void)
|
||||||
if (mainwindow)
|
if (mainwindow)
|
||||||
{
|
{
|
||||||
dibwindow=NULL;
|
dibwindow=NULL;
|
||||||
// SendMessage(mainwindow, WM_CLOSE, 0, 0);
|
// ShowWindow(mainwindow, SW_HIDE);
|
||||||
|
// SetWindowLongPtr(mainwindow, GWL_WNDPROC, DefWindowProc);
|
||||||
|
// PostMessage(mainwindow, WM_CLOSE, 0, 0);
|
||||||
DestroyWindow(mainwindow);
|
DestroyWindow(mainwindow);
|
||||||
mainwindow = NULL;
|
mainwindow = NULL;
|
||||||
}
|
}
|
||||||
|
@ -915,33 +931,8 @@ void GL_DoSwap (void)
|
||||||
qSwapBuffers(maindc);
|
qSwapBuffers(maindc);
|
||||||
|
|
||||||
// handle the mouse state when windowed if that's changed
|
// handle the mouse state when windowed if that's changed
|
||||||
if (modestate == MS_WINDOWED)
|
|
||||||
{
|
IN_UpdateGrabs(modestate != MS_WINDOWED, ActiveApp);
|
||||||
if (!_windowed_mouse.value)
|
|
||||||
{
|
|
||||||
if (mouseactive)
|
|
||||||
{
|
|
||||||
IN_DeactivateMouse ();
|
|
||||||
IN_ShowMouse ();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if ((key_dest == key_game||(mouseusedforgui && key_dest != key_console)) && ActiveApp)
|
|
||||||
{
|
|
||||||
if (!mouseactive)
|
|
||||||
{
|
|
||||||
IN_ActivateMouse ();
|
|
||||||
IN_HideMouse ();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (mouseactive && key_dest == key_console)
|
|
||||||
{//!(key_dest == key_game || mouseusedforgui)) {
|
|
||||||
IN_DeactivateMouse ();
|
|
||||||
IN_ShowMouse ();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void GL_EndRendering (void)
|
void GL_EndRendering (void)
|
||||||
|
@ -1042,13 +1033,6 @@ void GLVID_ShiftPalette (unsigned char *palette)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void VID_SetDefaultMode (void)
|
|
||||||
{
|
|
||||||
IN_DeactivateMouse ();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void GLVID_Shutdown (void)
|
void GLVID_Shutdown (void)
|
||||||
{
|
{
|
||||||
if (qSetDeviceGammaRamp)
|
if (qSetDeviceGammaRamp)
|
||||||
|
@ -1324,12 +1308,12 @@ qboolean GLAppActivate(BOOL fActive, BOOL minimize)
|
||||||
sound_active = true;
|
sound_active = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
IN_UpdateGrabs(modestate != MS_WINDOWED, ActiveApp);
|
||||||
|
|
||||||
if (fActive)
|
if (fActive)
|
||||||
{
|
{
|
||||||
if (modestate != MS_WINDOWED)
|
if (modestate != MS_WINDOWED)
|
||||||
{
|
{
|
||||||
IN_ActivateMouse ();
|
|
||||||
IN_HideMouse ();
|
|
||||||
if (vid_canalttab && vid_wassuspended) {
|
if (vid_canalttab && vid_wassuspended) {
|
||||||
vid_wassuspended = false;
|
vid_wassuspended = false;
|
||||||
ChangeDisplaySettings (&gdevmode, CDS_FULLSCREEN);
|
ChangeDisplaySettings (&gdevmode, CDS_FULLSCREEN);
|
||||||
|
@ -1339,11 +1323,6 @@ qboolean GLAppActivate(BOOL fActive, BOOL minimize)
|
||||||
MoveWindow (mainwindow, 0, 0, gdevmode.dmPelsWidth, gdevmode.dmPelsHeight, false);
|
MoveWindow (mainwindow, 0, 0, gdevmode.dmPelsWidth, gdevmode.dmPelsHeight, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if ((modestate == MS_WINDOWED) && _windowed_mouse.value && (key_dest == key_game || key_dest == key_menu))
|
|
||||||
{
|
|
||||||
IN_ActivateMouse ();
|
|
||||||
IN_HideMouse ();
|
|
||||||
}
|
|
||||||
|
|
||||||
Cvar_ForceCallback(&v_gamma);
|
Cvar_ForceCallback(&v_gamma);
|
||||||
}
|
}
|
||||||
|
@ -1352,18 +1331,11 @@ qboolean GLAppActivate(BOOL fActive, BOOL minimize)
|
||||||
{
|
{
|
||||||
if (modestate != MS_WINDOWED)
|
if (modestate != MS_WINDOWED)
|
||||||
{
|
{
|
||||||
IN_DeactivateMouse ();
|
|
||||||
IN_ShowMouse ();
|
|
||||||
if (vid_canalttab) {
|
if (vid_canalttab) {
|
||||||
ChangeDisplaySettings (NULL, 0);
|
ChangeDisplaySettings (NULL, 0);
|
||||||
vid_wassuspended = true;
|
vid_wassuspended = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if ((modestate == MS_WINDOWED) && _windowed_mouse.value)
|
|
||||||
{
|
|
||||||
IN_DeactivateMouse ();
|
|
||||||
IN_ShowMouse ();
|
|
||||||
}
|
|
||||||
|
|
||||||
Cvar_ForceCallback(&v_gamma); //wham bam thanks.
|
Cvar_ForceCallback(&v_gamma); //wham bam thanks.
|
||||||
|
|
||||||
|
@ -1405,16 +1377,33 @@ LONG WINAPI GLMainWndProc (
|
||||||
switch (uMsg)
|
switch (uMsg)
|
||||||
{
|
{
|
||||||
case WM_KILLFOCUS:
|
case WM_KILLFOCUS:
|
||||||
|
GLAppActivate(FALSE, Minimized);
|
||||||
if (modestate == MS_FULLDIB)
|
if (modestate == MS_FULLDIB)
|
||||||
ShowWindow(mainwindow, SW_SHOWMINNOACTIVE);
|
ShowWindow(mainwindow, SW_SHOWMINNOACTIVE);
|
||||||
|
ClearAllStates ();
|
||||||
|
break;
|
||||||
|
case WM_SETFOCUS:
|
||||||
|
if (!GLAppActivate(TRUE, Minimized))
|
||||||
|
break;
|
||||||
|
ClearAllStates ();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_CREATE:
|
case WM_CREATE:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_MOVE:
|
case WM_MOVE:
|
||||||
window_x = (int) LOWORD(lParam);
|
{
|
||||||
window_y = (int) HIWORD(lParam);
|
RECT r;
|
||||||
|
// window_x = (int) LOWORD(lParam);
|
||||||
|
// window_y = (int) HIWORD(lParam);
|
||||||
|
GetWindowRect(hWnd, &r);
|
||||||
|
window_x = r.left;
|
||||||
|
window_y = r.top;
|
||||||
|
window_width = r.right - r.left;
|
||||||
|
window_height = r.bottom - r.top;
|
||||||
|
glwidth = window_width;
|
||||||
|
glheight = window_height;
|
||||||
|
}
|
||||||
VID_UpdateWindowStatus ();
|
VID_UpdateWindowStatus ();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1448,7 +1437,12 @@ LONG WINAPI GLMainWndProc (
|
||||||
temp = 0;
|
temp = 0;
|
||||||
|
|
||||||
if (wParam & MK_LBUTTON)
|
if (wParam & MK_LBUTTON)
|
||||||
|
{
|
||||||
temp |= 1;
|
temp |= 1;
|
||||||
|
#ifdef NPQTV
|
||||||
|
SetFocus(hWnd);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
if (wParam & MK_RBUTTON)
|
if (wParam & MK_RBUTTON)
|
||||||
temp |= 2;
|
temp |= 2;
|
||||||
|
@ -1606,6 +1600,7 @@ void VID_Init8bitPalette()
|
||||||
void GLVID_DeInit (void)
|
void GLVID_DeInit (void)
|
||||||
{
|
{
|
||||||
GLVID_Shutdown();
|
GLVID_Shutdown();
|
||||||
|
ActiveApp = false;
|
||||||
|
|
||||||
Cvar_Unhook(&_vid_wait_override);
|
Cvar_Unhook(&_vid_wait_override);
|
||||||
|
|
||||||
|
@ -1636,11 +1631,8 @@ qboolean GLVID_Init (rendererstate_t *info, unsigned char *palette)
|
||||||
wc.lpszMenuName = 0;
|
wc.lpszMenuName = 0;
|
||||||
wc.lpszClassName = WINDOW_CLASS_NAME;
|
wc.lpszClassName = WINDOW_CLASS_NAME;
|
||||||
|
|
||||||
if (!RegisterClass (&wc) )
|
if (!RegisterClass (&wc)) //this isn't really fatal, we'll let the CreateWindow fail instead.
|
||||||
{
|
MessageBox(NULL, "RegisterClass failed", "GAH", 0);
|
||||||
Con_Printf(CON_ERROR "Couldn't register window class\n");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
hIcon = LoadIcon (global_hInstance, MAKEINTRESOURCE (IDI_ICON2));
|
hIcon = LoadIcon (global_hInstance, MAKEINTRESOURCE (IDI_ICON2));
|
||||||
|
|
||||||
|
|
|
@ -4144,6 +4144,7 @@ rendererinfo_t d3drendererinfo = {
|
||||||
Mod_GetTag,
|
Mod_GetTag,
|
||||||
Mod_TagNumForName,
|
Mod_TagNumForName,
|
||||||
NULL,
|
NULL,
|
||||||
|
NULL,
|
||||||
|
|
||||||
D3DVID_Init,
|
D3DVID_Init,
|
||||||
GLVID_DeInit,
|
GLVID_DeInit,
|
||||||
|
|
|
@ -167,7 +167,8 @@ typedef struct
|
||||||
{
|
{
|
||||||
char name[32];
|
char name[32];
|
||||||
float timing;
|
float timing;
|
||||||
int unknown1[5];
|
int loop;
|
||||||
|
int unknown1[4];
|
||||||
int numframes;
|
int numframes;
|
||||||
int unknown2[2];
|
int unknown2[2];
|
||||||
int motiontype;
|
int motiontype;
|
||||||
|
|
|
@ -14,8 +14,6 @@
|
||||||
|
|
||||||
int ftpfilelistsocket;
|
int ftpfilelistsocket;
|
||||||
|
|
||||||
char *COM_ParseOut (char *data, char *out, int outlen);
|
|
||||||
|
|
||||||
static iwboolean ftpserverinitied = false;
|
static iwboolean ftpserverinitied = false;
|
||||||
iwboolean ftpserverfailed = false;
|
iwboolean ftpserverfailed = false;
|
||||||
static int ftpserversocket;
|
static int ftpserversocket;
|
||||||
|
@ -103,22 +101,26 @@ void FTP_ServerShutdown(void)
|
||||||
IWebPrintf("FTP server is deactivated\n");
|
IWebPrintf("FTP server is deactivated\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
static int SendFileNameTo(char *fname, int size, void *param)
|
static int SendFileNameTo(const char *rawname, int size, void *param)
|
||||||
{
|
{
|
||||||
int socket = ftpfilelistsocket; //64->32... this is safe due to where it's called from. It's just not so portable.
|
int socket = ftpfilelistsocket; //64->32... this is safe due to where it's called from. It's just not so portable.
|
||||||
// int i;
|
// int i;
|
||||||
char buffer[256+1];
|
char buffer[256+1];
|
||||||
char *slash;
|
char *slash;
|
||||||
int isdir = fname[strlen(fname)-1] == '/';
|
char nondirname[MAX_QPATH];
|
||||||
|
int isdir = rawname[strlen(rawname)-1] == '/';
|
||||||
|
char *fname;
|
||||||
|
|
||||||
#ifndef WEBSVONLY //copy protection of the like that QWSV normally has.
|
#ifndef WEBSVONLY //copy protection of the like that QWSV normally has.
|
||||||
if (!isdir)
|
if (!isdir)
|
||||||
if (!SV_AllowDownload(fname)) //don't advertise if we're going to disallow it
|
if (!SV_AllowDownload(rawname)) //don't advertise if we're going to disallow it
|
||||||
return true;
|
return true;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
Q_strncpyz(nondirname, rawname, sizeof(nondirname));
|
||||||
if (isdir)
|
if (isdir)
|
||||||
fname[strlen(fname)-1] = '\0';
|
nondirname[strlen(nondirname)-1] = '\0';
|
||||||
|
fname = nondirname;
|
||||||
|
|
||||||
while((slash = strchr(fname, '/')))
|
while((slash = strchr(fname, '/')))
|
||||||
fname = slash+1;
|
fname = slash+1;
|
||||||
|
|
|
@ -71,7 +71,7 @@ struct sockaddr;
|
||||||
struct sockaddr_qstorage;
|
struct sockaddr_qstorage;
|
||||||
int NetadrToSockadr (netadr_t *a, struct sockaddr_qstorage *s);
|
int NetadrToSockadr (netadr_t *a, struct sockaddr_qstorage *s);
|
||||||
|
|
||||||
qboolean SV_AllowDownload (char *name);
|
qboolean SV_AllowDownload (const char *name);
|
||||||
|
|
||||||
|
|
||||||
typedef qboolean iwboolean;
|
typedef qboolean iwboolean;
|
||||||
|
@ -108,11 +108,11 @@ vfsfile_t *IWebGenerateFile(char *name, char *content, int contentlength);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
char *COM_ParseOut (char *data, char *out, int outlen);
|
char *COM_ParseOut (const char *data, char *out, int outlen);
|
||||||
void COM_EnumerateFiles (char *match, int (*func)(char *, int, void *), void *parm);
|
void COM_EnumerateFiles (const char *match, int (*func)(const char *, int, void *), void *parm);
|
||||||
|
|
||||||
|
|
||||||
char *Q_strcpyline(char *out, char *in, int maxlen);
|
char *Q_strcpyline(char *out, const char *in, int maxlen);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -512,7 +512,7 @@ iwboolean FTP_StringToAdr (const char *s, qbyte ip[4], qbyte port[2])
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
char *Q_strcpyline(char *out, char *in, int maxlen)
|
char *Q_strcpyline(char *out, const char *in, int maxlen)
|
||||||
{
|
{
|
||||||
char *w = out;
|
char *w = out;
|
||||||
while (*in && maxlen > 0)
|
while (*in && maxlen > 0)
|
||||||
|
|
|
@ -347,7 +347,7 @@ int VFSGen_ReadBytes(vfsfile_t *f, void *buffer, int bytes)
|
||||||
return bytes;
|
return bytes;
|
||||||
}
|
}
|
||||||
|
|
||||||
int VFSGen_WriteBytes(vfsfile_t *f, void *buffer, int bytes)
|
int VFSGen_WriteBytes(vfsfile_t *f, const void *buffer, int bytes)
|
||||||
{
|
{
|
||||||
Sys_Error("VFSGen_WriteBytes: Readonly\n");
|
Sys_Error("VFSGen_WriteBytes: Readonly\n");
|
||||||
return 0;
|
return 0;
|
||||||
|
|
766
engine/libs/npapi/npapi.h
Normal file
766
engine/libs/npapi/npapi.h
Normal file
|
@ -0,0 +1,766 @@
|
||||||
|
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
* http://www.mozilla.org/MPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||||
|
* for the specific language governing rights and limitations under the
|
||||||
|
* License.
|
||||||
|
*
|
||||||
|
* The Original Code is mozilla.org code.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* Netscape Communications Corporation.
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 1998
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* npapi.h $Revision: 3.48 $
|
||||||
|
* Netscape client plug-in API spec
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _NPAPI_H_
|
||||||
|
#define _NPAPI_H_
|
||||||
|
|
||||||
|
#ifdef __OS2__
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "prtypes.h"
|
||||||
|
/* Copied from xp_core.h */
|
||||||
|
/* removed #ifdef for hpux defined in /usr/include/model.h */
|
||||||
|
#ifndef _INT16
|
||||||
|
#define _INT16
|
||||||
|
#endif
|
||||||
|
#ifndef _INT32
|
||||||
|
#define _INT32
|
||||||
|
#endif
|
||||||
|
#ifndef _UINT16
|
||||||
|
#define _UINT16
|
||||||
|
#endif
|
||||||
|
#ifndef _UINT32
|
||||||
|
#define _UINT32
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* NO_NSPR_10_SUPPORT disables the inclusion
|
||||||
|
* of obsolete/protypes.h, whose int16, uint16,
|
||||||
|
* int32, and uint32 typedefs conflict with those
|
||||||
|
* in this file.
|
||||||
|
*/
|
||||||
|
#ifndef NO_NSPR_10_SUPPORT
|
||||||
|
#define NO_NSPR_10_SUPPORT
|
||||||
|
#endif
|
||||||
|
#ifdef OJI
|
||||||
|
#include "jri.h" /* Java Runtime Interface */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined (__OS2__ ) || defined (OS2)
|
||||||
|
# ifndef XP_OS2
|
||||||
|
# define XP_OS2 1
|
||||||
|
# endif /* XP_OS2 */
|
||||||
|
#endif /* __OS2__ */
|
||||||
|
|
||||||
|
#ifdef _WINDOWS
|
||||||
|
# include <windef.h>
|
||||||
|
# ifndef XP_WIN
|
||||||
|
# define XP_WIN 1
|
||||||
|
# endif /* XP_WIN */
|
||||||
|
#endif /* _WINDOWS */
|
||||||
|
|
||||||
|
#ifdef __MWERKS__
|
||||||
|
# define _declspec __declspec
|
||||||
|
# ifdef __INTEL__
|
||||||
|
# undef NULL
|
||||||
|
# ifndef XP_WIN
|
||||||
|
# define XP_WIN 1
|
||||||
|
# endif /* XP_WIN */
|
||||||
|
# endif /* __INTEL__ */
|
||||||
|
#endif /* __MWERKS__ */
|
||||||
|
|
||||||
|
#ifdef XP_MACOSX
|
||||||
|
#include <Carbon/Carbon.h>
|
||||||
|
#ifdef __LP64__
|
||||||
|
#define NP_NO_QUICKDRAW
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(XP_UNIX)
|
||||||
|
# include <stdio.h>
|
||||||
|
# if defined(MOZ_X11)
|
||||||
|
# include <X11/Xlib.h>
|
||||||
|
# include <X11/Xutil.h>
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------*/
|
||||||
|
/* Plugin Version Constants */
|
||||||
|
/*----------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#define NP_VERSION_MAJOR 0
|
||||||
|
#define NP_VERSION_MINOR 19
|
||||||
|
|
||||||
|
|
||||||
|
/* The OS/2 version of Netscape uses RC_DATA to define the
|
||||||
|
mime types, file extensions, etc that are required.
|
||||||
|
Use a vertical bar to separate types, end types with \0.
|
||||||
|
FileVersion and ProductVersion are 32bit ints, all other
|
||||||
|
entries are strings the MUST be terminated wwith a \0.
|
||||||
|
|
||||||
|
AN EXAMPLE:
|
||||||
|
|
||||||
|
RCDATA NP_INFO_ProductVersion { 1,0,0,1,}
|
||||||
|
|
||||||
|
RCDATA NP_INFO_MIMEType { "video/x-video|",
|
||||||
|
"video/x-flick\0" }
|
||||||
|
RCDATA NP_INFO_FileExtents { "avi|",
|
||||||
|
"flc\0" }
|
||||||
|
RCDATA NP_INFO_FileOpenName{ "MMOS2 video player(*.avi)|",
|
||||||
|
"MMOS2 Flc/Fli player(*.flc)\0" }
|
||||||
|
|
||||||
|
RCDATA NP_INFO_FileVersion { 1,0,0,1 }
|
||||||
|
RCDATA NP_INFO_CompanyName { "Netscape Communications\0" }
|
||||||
|
RCDATA NP_INFO_FileDescription { "NPAVI32 Extension DLL\0"
|
||||||
|
RCDATA NP_INFO_InternalName { "NPAVI32\0" )
|
||||||
|
RCDATA NP_INFO_LegalCopyright { "Copyright Netscape Communications \251 1996\0"
|
||||||
|
RCDATA NP_INFO_OriginalFilename { "NVAPI32.DLL" }
|
||||||
|
RCDATA NP_INFO_ProductName { "NPAVI32 Dynamic Link Library\0" }
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/* RC_DATA types for version info - required */
|
||||||
|
#define NP_INFO_ProductVersion 1
|
||||||
|
#define NP_INFO_MIMEType 2
|
||||||
|
#define NP_INFO_FileOpenName 3
|
||||||
|
#define NP_INFO_FileExtents 4
|
||||||
|
|
||||||
|
/* RC_DATA types for version info - used if found */
|
||||||
|
#define NP_INFO_FileDescription 5
|
||||||
|
#define NP_INFO_ProductName 6
|
||||||
|
|
||||||
|
/* RC_DATA types for version info - optional */
|
||||||
|
#define NP_INFO_CompanyName 7
|
||||||
|
#define NP_INFO_FileVersion 8
|
||||||
|
#define NP_INFO_InternalName 9
|
||||||
|
#define NP_INFO_LegalCopyright 10
|
||||||
|
#define NP_INFO_OriginalFilename 11
|
||||||
|
|
||||||
|
#ifndef RC_INVOKED
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------*/
|
||||||
|
/* Definition of Basic Types */
|
||||||
|
/*----------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef _UINT16
|
||||||
|
typedef unsigned short uint16;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _UINT32
|
||||||
|
# if defined(__alpha) || defined(__amd64__) || defined(__x86_64__)
|
||||||
|
typedef unsigned int uint32;
|
||||||
|
# else /* __alpha */
|
||||||
|
typedef unsigned long uint32;
|
||||||
|
# endif /* __alpha */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* AIX defines these in sys/inttypes.h included from sys/types.h
|
||||||
|
*/
|
||||||
|
#ifndef AIX
|
||||||
|
#ifndef _INT16
|
||||||
|
typedef short int16;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _INT32
|
||||||
|
# if defined(__alpha) || defined(__amd64__) || defined(__x86_64__)
|
||||||
|
typedef int int32;
|
||||||
|
# else /* __alpha */
|
||||||
|
typedef long int32;
|
||||||
|
# endif /* __alpha */
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef FALSE
|
||||||
|
#define FALSE (0)
|
||||||
|
#endif
|
||||||
|
#ifndef TRUE
|
||||||
|
#define TRUE (1)
|
||||||
|
#endif
|
||||||
|
#ifndef NULL
|
||||||
|
#define NULL (0L)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef XP_MACOSX
|
||||||
|
typedef enum {
|
||||||
|
#ifndef NP_NO_QUICKDRAW
|
||||||
|
NPDrawingModelQuickDraw = 0,
|
||||||
|
#endif
|
||||||
|
NPDrawingModelCoreGraphics = 1
|
||||||
|
} NPDrawingModel;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef unsigned char NPBool;
|
||||||
|
typedef int16 NPError;
|
||||||
|
typedef int16 NPReason;
|
||||||
|
typedef char* NPMIMEType;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------*/
|
||||||
|
/* Structures and definitions */
|
||||||
|
/*----------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* NPP is a plug-in's opaque instance handle
|
||||||
|
*/
|
||||||
|
typedef struct _NPP
|
||||||
|
{
|
||||||
|
void* pdata; /* plug-in private data */
|
||||||
|
void* ndata; /* netscape private data */
|
||||||
|
} NPP_t;
|
||||||
|
|
||||||
|
typedef NPP_t* NPP;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct _NPStream
|
||||||
|
{
|
||||||
|
void* pdata; /* plug-in private data */
|
||||||
|
void* ndata; /* netscape private data */
|
||||||
|
const char* url;
|
||||||
|
uint32 end;
|
||||||
|
uint32 lastmodified;
|
||||||
|
void* notifyData;
|
||||||
|
const char* headers; /* Response headers from host.
|
||||||
|
* Exists only for >= NPVERS_HAS_RESPONSE_HEADERS.
|
||||||
|
* Used for HTTP only; NULL for non-HTTP.
|
||||||
|
* Available from NPP_NewStream onwards.
|
||||||
|
* Plugin should copy this data before storing it.
|
||||||
|
* Includes HTTP status line and all headers,
|
||||||
|
* preferably verbatim as received from server,
|
||||||
|
* headers formatted as in HTTP ("Header: Value"),
|
||||||
|
* and newlines (\n, NOT \r\n) separating lines.
|
||||||
|
* Terminated by \n\0 (NOT \n\n\0). */
|
||||||
|
} NPStream;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct _NPByteRange
|
||||||
|
{
|
||||||
|
int32 offset; /* negative offset means from the end */
|
||||||
|
uint32 length;
|
||||||
|
struct _NPByteRange* next;
|
||||||
|
} NPByteRange;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct _NPSavedData
|
||||||
|
{
|
||||||
|
int32 len;
|
||||||
|
void* buf;
|
||||||
|
} NPSavedData;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct _NPRect
|
||||||
|
{
|
||||||
|
uint16 top;
|
||||||
|
uint16 left;
|
||||||
|
uint16 bottom;
|
||||||
|
uint16 right;
|
||||||
|
} NPRect;
|
||||||
|
|
||||||
|
typedef struct _NPSize
|
||||||
|
{
|
||||||
|
int32 width;
|
||||||
|
int32 height;
|
||||||
|
} NPSize;
|
||||||
|
|
||||||
|
#ifdef XP_UNIX
|
||||||
|
/*
|
||||||
|
* Unix specific structures and definitions
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Callback Structures.
|
||||||
|
*
|
||||||
|
* These are used to pass additional platform specific information.
|
||||||
|
*/
|
||||||
|
enum {
|
||||||
|
NP_SETWINDOW = 1,
|
||||||
|
NP_PRINT
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
int32 type;
|
||||||
|
} NPAnyCallbackStruct;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
int32 type;
|
||||||
|
#ifdef MOZ_X11
|
||||||
|
Display* display;
|
||||||
|
Visual* visual;
|
||||||
|
Colormap colormap;
|
||||||
|
unsigned int depth;
|
||||||
|
#endif
|
||||||
|
} NPSetWindowCallbackStruct;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
int32 type;
|
||||||
|
FILE* fp;
|
||||||
|
} NPPrintCallbackStruct;
|
||||||
|
|
||||||
|
#endif /* XP_UNIX */
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The following masks are applied on certain platforms to NPNV and
|
||||||
|
* NPPV selectors that pass around pointers to COM interfaces. Newer
|
||||||
|
* compilers on some platforms may generate vtables that are not
|
||||||
|
* compatible with older compilers. To prevent older plugins from
|
||||||
|
* not understanding a new browser's ABI, these masks change the
|
||||||
|
* values of those selectors on those platforms. To remain backwards
|
||||||
|
* compatible with differenet versions of the browser, plugins can
|
||||||
|
* use these masks to dynamically determine and use the correct C++
|
||||||
|
* ABI that the browser is expecting. This does not apply to Windows
|
||||||
|
* as Microsoft's COM ABI will likely not change.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define NP_ABI_GCC3_MASK 0x10000000
|
||||||
|
/*
|
||||||
|
* gcc 3.x generated vtables on UNIX and OSX are incompatible with
|
||||||
|
* previous compilers.
|
||||||
|
*/
|
||||||
|
#if (defined (XP_UNIX) && defined(__GNUC__) && (__GNUC__ >= 3))
|
||||||
|
#define _NP_ABI_MIXIN_FOR_GCC3 NP_ABI_GCC3_MASK
|
||||||
|
#else
|
||||||
|
#define _NP_ABI_MIXIN_FOR_GCC3 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#define NP_ABI_MACHO_MASK 0x01000000
|
||||||
|
/*
|
||||||
|
* On OSX, the Mach-O executable format is significantly
|
||||||
|
* different than CFM. In addition to having a different
|
||||||
|
* C++ ABI, it also has has different C calling convention.
|
||||||
|
* You must use glue code when calling between CFM and
|
||||||
|
* Mach-O C functions.
|
||||||
|
*/
|
||||||
|
#if (defined(TARGET_RT_MAC_MACHO))
|
||||||
|
#define _NP_ABI_MIXIN_FOR_MACHO NP_ABI_MACHO_MASK
|
||||||
|
#else
|
||||||
|
#define _NP_ABI_MIXIN_FOR_MACHO 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#define NP_ABI_MASK (_NP_ABI_MIXIN_FOR_GCC3 | _NP_ABI_MIXIN_FOR_MACHO)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* List of variable names for which NPP_GetValue shall be implemented
|
||||||
|
*/
|
||||||
|
typedef enum {
|
||||||
|
NPPVpluginNameString = 1,
|
||||||
|
NPPVpluginDescriptionString,
|
||||||
|
NPPVpluginWindowBool,
|
||||||
|
NPPVpluginTransparentBool,
|
||||||
|
NPPVjavaClass, /* Not implemented in Mozilla 1.0 */
|
||||||
|
NPPVpluginWindowSize,
|
||||||
|
NPPVpluginTimerInterval,
|
||||||
|
|
||||||
|
NPPVpluginScriptableInstance = (10 | NP_ABI_MASK),
|
||||||
|
NPPVpluginScriptableIID = 11,
|
||||||
|
|
||||||
|
/* Introduced in Mozilla 0.9.9 */
|
||||||
|
NPPVjavascriptPushCallerBool = 12,
|
||||||
|
|
||||||
|
/* Introduced in Mozilla 1.0 */
|
||||||
|
NPPVpluginKeepLibraryInMemory = 13,
|
||||||
|
NPPVpluginNeedsXEmbed = 14,
|
||||||
|
|
||||||
|
/* Get the NPObject for scripting the plugin. Introduced in Firefox
|
||||||
|
* 1.0 (NPAPI minor version 14).
|
||||||
|
*/
|
||||||
|
NPPVpluginScriptableNPObject = 15,
|
||||||
|
|
||||||
|
/* Get the plugin value (as \0-terminated UTF-8 string data) for
|
||||||
|
* form submission if the plugin is part of a form. Use
|
||||||
|
* NPN_MemAlloc() to allocate memory for the string data. Introduced
|
||||||
|
* in Mozilla 1.8b2 (NPAPI minor version 15).
|
||||||
|
*/
|
||||||
|
NPPVformValue = 16
|
||||||
|
#ifdef XP_MACOSX
|
||||||
|
/* Used for negotiating drawing models */
|
||||||
|
, NPPVpluginDrawingModel = 1000
|
||||||
|
#endif
|
||||||
|
} NPPVariable;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* List of variable names for which NPN_GetValue is implemented by Mozilla
|
||||||
|
*/
|
||||||
|
typedef enum {
|
||||||
|
NPNVxDisplay = 1,
|
||||||
|
NPNVxtAppContext,
|
||||||
|
NPNVnetscapeWindow,
|
||||||
|
NPNVjavascriptEnabledBool,
|
||||||
|
NPNVasdEnabledBool,
|
||||||
|
NPNVisOfflineBool,
|
||||||
|
|
||||||
|
/* 10 and over are available on Mozilla builds starting with 0.9.4 */
|
||||||
|
NPNVserviceManager = (10 | NP_ABI_MASK),
|
||||||
|
NPNVDOMElement = (11 | NP_ABI_MASK), /* available in Mozilla 1.2 */
|
||||||
|
NPNVDOMWindow = (12 | NP_ABI_MASK),
|
||||||
|
NPNVToolkit = (13 | NP_ABI_MASK),
|
||||||
|
NPNVSupportsXEmbedBool = 14,
|
||||||
|
|
||||||
|
/* Get the NPObject wrapper for the browser window. */
|
||||||
|
NPNVWindowNPObject = 15,
|
||||||
|
|
||||||
|
/* Get the NPObject wrapper for the plugins DOM element. */
|
||||||
|
NPNVPluginElementNPObject = 16,
|
||||||
|
|
||||||
|
NPNVSupportsWindowless = 17
|
||||||
|
|
||||||
|
#ifdef XP_MACOSX
|
||||||
|
/* Used for negotiating drawing models */
|
||||||
|
, NPNVpluginDrawingModel = 1000
|
||||||
|
#ifndef NP_NO_QUICKDRAW
|
||||||
|
, NPNVsupportsQuickDrawBool = 2000
|
||||||
|
#endif
|
||||||
|
, NPNVsupportsCoreGraphicsBool = 2001
|
||||||
|
#endif
|
||||||
|
} NPNVariable;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The type of Tookkit the widgets use
|
||||||
|
*/
|
||||||
|
typedef enum {
|
||||||
|
NPNVGtk12 = 1,
|
||||||
|
NPNVGtk2
|
||||||
|
} NPNToolkitType;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The type of a NPWindow - it specifies the type of the data structure
|
||||||
|
* returned in the window field.
|
||||||
|
*/
|
||||||
|
typedef enum {
|
||||||
|
NPWindowTypeWindow = 1,
|
||||||
|
NPWindowTypeDrawable
|
||||||
|
} NPWindowType;
|
||||||
|
|
||||||
|
typedef struct _NPWindow
|
||||||
|
{
|
||||||
|
void* window; /* Platform specific window handle */
|
||||||
|
/* OS/2: x - Position of bottom left corner */
|
||||||
|
/* OS/2: y - relative to visible netscape window */
|
||||||
|
int32 x; /* Position of top left corner relative */
|
||||||
|
int32 y; /* to a netscape page. */
|
||||||
|
uint32 width; /* Maximum window size */
|
||||||
|
uint32 height;
|
||||||
|
NPRect clipRect; /* Clipping rectangle in port coordinates */
|
||||||
|
/* Used by MAC only. */
|
||||||
|
#if defined(XP_UNIX) && !defined(XP_MACOSX)
|
||||||
|
void * ws_info; /* Platform-dependent additonal data */
|
||||||
|
#endif /* XP_UNIX */
|
||||||
|
NPWindowType type; /* Is this a window or a drawable? */
|
||||||
|
} NPWindow;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct _NPFullPrint
|
||||||
|
{
|
||||||
|
NPBool pluginPrinted;/* Set TRUE if plugin handled fullscreen printing */
|
||||||
|
NPBool printOne; /* TRUE if plugin should print one copy to default printer */
|
||||||
|
void* platformPrint; /* Platform-specific printing info */
|
||||||
|
} NPFullPrint;
|
||||||
|
|
||||||
|
typedef struct _NPEmbedPrint
|
||||||
|
{
|
||||||
|
NPWindow window;
|
||||||
|
void* platformPrint; /* Platform-specific printing info */
|
||||||
|
} NPEmbedPrint;
|
||||||
|
|
||||||
|
typedef struct _NPPrint
|
||||||
|
{
|
||||||
|
uint16 mode; /* NP_FULL or NP_EMBED */
|
||||||
|
union
|
||||||
|
{
|
||||||
|
NPFullPrint fullPrint; /* if mode is NP_FULL */
|
||||||
|
NPEmbedPrint embedPrint; /* if mode is NP_EMBED */
|
||||||
|
} print;
|
||||||
|
} NPPrint;
|
||||||
|
|
||||||
|
#ifdef XP_MACOSX
|
||||||
|
typedef EventRecord NPEvent;
|
||||||
|
#elif defined(XP_WIN)
|
||||||
|
typedef struct _NPEvent
|
||||||
|
{
|
||||||
|
uint16 event;
|
||||||
|
uint32 wParam;
|
||||||
|
uint32 lParam;
|
||||||
|
} NPEvent;
|
||||||
|
#elif defined(XP_OS2)
|
||||||
|
typedef struct _NPEvent
|
||||||
|
{
|
||||||
|
uint32 event;
|
||||||
|
uint32 wParam;
|
||||||
|
uint32 lParam;
|
||||||
|
} NPEvent;
|
||||||
|
#elif defined (XP_UNIX) && defined(MOZ_X11)
|
||||||
|
typedef XEvent NPEvent;
|
||||||
|
#else
|
||||||
|
typedef void* NPEvent;
|
||||||
|
#endif /* XP_MACOSX */
|
||||||
|
|
||||||
|
#ifdef XP_MACOSX
|
||||||
|
typedef void* NPRegion;
|
||||||
|
#ifndef NP_NO_QUICKDRAW
|
||||||
|
typedef RgnHandle NPQDRegion;
|
||||||
|
#endif
|
||||||
|
typedef CGPathRef NPCGRegion;
|
||||||
|
#elif defined(XP_WIN)
|
||||||
|
typedef HRGN NPRegion;
|
||||||
|
#elif defined(XP_UNIX) && defined(MOZ_X11)
|
||||||
|
typedef Region NPRegion;
|
||||||
|
#else
|
||||||
|
typedef void *NPRegion;
|
||||||
|
#endif /* XP_MACOSX */
|
||||||
|
|
||||||
|
#ifdef XP_MACOSX
|
||||||
|
/*
|
||||||
|
* Mac-specific structures and definitions.
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef struct NP_Port
|
||||||
|
{
|
||||||
|
CGrafPtr port; /* Grafport */
|
||||||
|
int32 portx; /* position inside the topmost window */
|
||||||
|
int32 porty;
|
||||||
|
} NP_Port;
|
||||||
|
|
||||||
|
typedef struct NP_CGContext
|
||||||
|
{
|
||||||
|
CGContextRef context;
|
||||||
|
WindowRef window;
|
||||||
|
} NP_CGContext;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Non-standard event types that can be passed to HandleEvent
|
||||||
|
*/
|
||||||
|
|
||||||
|
enum NPEventType {
|
||||||
|
NPEventType_GetFocusEvent = (osEvt + 16),
|
||||||
|
NPEventType_LoseFocusEvent,
|
||||||
|
NPEventType_AdjustCursorEvent,
|
||||||
|
NPEventType_MenuCommandEvent,
|
||||||
|
NPEventType_ClippingChangedEvent,
|
||||||
|
NPEventType_ScrollingBeginsEvent = 1000,
|
||||||
|
NPEventType_ScrollingEndsEvent
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifdef OBSOLETE
|
||||||
|
#define getFocusEvent (osEvt + 16)
|
||||||
|
#define loseFocusEvent (osEvt + 17)
|
||||||
|
#define adjustCursorEvent (osEvt + 18)
|
||||||
|
#endif
|
||||||
|
#endif /* XP_MACOSX */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Values for mode passed to NPP_New:
|
||||||
|
*/
|
||||||
|
#define NP_EMBED 1
|
||||||
|
#define NP_FULL 2
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Values for stream type passed to NPP_NewStream:
|
||||||
|
*/
|
||||||
|
#define NP_NORMAL 1
|
||||||
|
#define NP_SEEK 2
|
||||||
|
#define NP_ASFILE 3
|
||||||
|
#define NP_ASFILEONLY 4
|
||||||
|
|
||||||
|
#define NP_MAXREADY (((unsigned)(~0)<<1)>>1)
|
||||||
|
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------*/
|
||||||
|
/* Error and Reason Code definitions */
|
||||||
|
/*----------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Values of type NPError:
|
||||||
|
*/
|
||||||
|
#define NPERR_BASE 0
|
||||||
|
#define NPERR_NO_ERROR (NPERR_BASE + 0)
|
||||||
|
#define NPERR_GENERIC_ERROR (NPERR_BASE + 1)
|
||||||
|
#define NPERR_INVALID_INSTANCE_ERROR (NPERR_BASE + 2)
|
||||||
|
#define NPERR_INVALID_FUNCTABLE_ERROR (NPERR_BASE + 3)
|
||||||
|
#define NPERR_MODULE_LOAD_FAILED_ERROR (NPERR_BASE + 4)
|
||||||
|
#define NPERR_OUT_OF_MEMORY_ERROR (NPERR_BASE + 5)
|
||||||
|
#define NPERR_INVALID_PLUGIN_ERROR (NPERR_BASE + 6)
|
||||||
|
#define NPERR_INVALID_PLUGIN_DIR_ERROR (NPERR_BASE + 7)
|
||||||
|
#define NPERR_INCOMPATIBLE_VERSION_ERROR (NPERR_BASE + 8)
|
||||||
|
#define NPERR_INVALID_PARAM (NPERR_BASE + 9)
|
||||||
|
#define NPERR_INVALID_URL (NPERR_BASE + 10)
|
||||||
|
#define NPERR_FILE_NOT_FOUND (NPERR_BASE + 11)
|
||||||
|
#define NPERR_NO_DATA (NPERR_BASE + 12)
|
||||||
|
#define NPERR_STREAM_NOT_SEEKABLE (NPERR_BASE + 13)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Values of type NPReason:
|
||||||
|
*/
|
||||||
|
#define NPRES_BASE 0
|
||||||
|
#define NPRES_DONE (NPRES_BASE + 0)
|
||||||
|
#define NPRES_NETWORK_ERR (NPRES_BASE + 1)
|
||||||
|
#define NPRES_USER_BREAK (NPRES_BASE + 2)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Don't use these obsolete error codes any more.
|
||||||
|
*/
|
||||||
|
#define NP_NOERR NP_NOERR_is_obsolete_use_NPERR_NO_ERROR
|
||||||
|
#define NP_EINVAL NP_EINVAL_is_obsolete_use_NPERR_GENERIC_ERROR
|
||||||
|
#define NP_EABORT NP_EABORT_is_obsolete_use_NPRES_USER_BREAK
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Version feature information
|
||||||
|
*/
|
||||||
|
#define NPVERS_HAS_STREAMOUTPUT 8
|
||||||
|
#define NPVERS_HAS_NOTIFICATION 9
|
||||||
|
#define NPVERS_HAS_LIVECONNECT 9
|
||||||
|
#define NPVERS_WIN16_HAS_LIVECONNECT 9
|
||||||
|
#define NPVERS_68K_HAS_LIVECONNECT 11
|
||||||
|
#define NPVERS_HAS_WINDOWLESS 11
|
||||||
|
#define NPVERS_HAS_XPCONNECT_SCRIPTING 13
|
||||||
|
#define NPVERS_HAS_NPRUNTIME_SCRIPTING 14
|
||||||
|
#define NPVERS_HAS_FORM_VALUES 15
|
||||||
|
#define NPVERS_HAS_POPUPS_ENABLED_STATE 16
|
||||||
|
#define NPVERS_HAS_RESPONSE_HEADERS 17
|
||||||
|
#define NPVERS_HAS_NPOBJECT_ENUM 18
|
||||||
|
#define NPVERS_HAS_PLUGIN_THREAD_ASYNC_CALL 19
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------*/
|
||||||
|
/* Function Prototypes */
|
||||||
|
/*----------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#if defined(_WINDOWS) && !defined(WIN32)
|
||||||
|
#define NP_LOADDS _loadds
|
||||||
|
#else
|
||||||
|
#if defined(__OS2__)
|
||||||
|
#define NP_LOADDS _System
|
||||||
|
#else
|
||||||
|
#define NP_LOADDS
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* NPP_* functions are provided by the plugin and called by the navigator.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef XP_UNIX
|
||||||
|
char* NPP_GetMIMEDescription(void);
|
||||||
|
#endif /* XP_UNIX */
|
||||||
|
|
||||||
|
NPError NP_LOADDS NPP_Initialize(void);
|
||||||
|
void NP_LOADDS NPP_Shutdown(void);
|
||||||
|
NPError NP_LOADDS NPP_New(NPMIMEType pluginType, NPP instance,
|
||||||
|
uint16 mode, int16 argc, char* argn[],
|
||||||
|
char* argv[], NPSavedData* saved);
|
||||||
|
NPError NP_LOADDS NPP_Destroy(NPP instance, NPSavedData** save);
|
||||||
|
NPError NP_LOADDS NPP_SetWindow(NPP instance, NPWindow* window);
|
||||||
|
NPError NP_LOADDS NPP_NewStream(NPP instance, NPMIMEType type,
|
||||||
|
NPStream* stream, NPBool seekable,
|
||||||
|
uint16* stype);
|
||||||
|
NPError NP_LOADDS NPP_DestroyStream(NPP instance, NPStream* stream,
|
||||||
|
NPReason reason);
|
||||||
|
int32 NP_LOADDS NPP_WriteReady(NPP instance, NPStream* stream);
|
||||||
|
int32 NP_LOADDS NPP_Write(NPP instance, NPStream* stream, int32 offset,
|
||||||
|
int32 len, void* buffer);
|
||||||
|
void NP_LOADDS NPP_StreamAsFile(NPP instance, NPStream* stream,
|
||||||
|
const char* fname);
|
||||||
|
void NP_LOADDS NPP_Print(NPP instance, NPPrint* platformPrint);
|
||||||
|
int16 NP_LOADDS NPP_HandleEvent(NPP instance, void* event);
|
||||||
|
void NP_LOADDS NPP_URLNotify(NPP instance, const char* url,
|
||||||
|
NPReason reason, void* notifyData);
|
||||||
|
#ifdef OJI
|
||||||
|
jref NP_LOADDS NPP_GetJavaClass(void);
|
||||||
|
#endif
|
||||||
|
NPError NP_LOADDS NPP_GetValue(NPP instance, NPPVariable variable, void *value);
|
||||||
|
NPError NP_LOADDS NPP_SetValue(NPP instance, NPNVariable variable, void *value);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* NPN_* functions are provided by the navigator and called by the plugin.
|
||||||
|
*/
|
||||||
|
void NP_LOADDS NPN_Version(int* plugin_major, int* plugin_minor,
|
||||||
|
int* netscape_major, int* netscape_minor);
|
||||||
|
NPError NP_LOADDS NPN_GetURLNotify(NPP instance, const char* url,
|
||||||
|
const char* target, void* notifyData);
|
||||||
|
NPError NP_LOADDS NPN_GetURL(NPP instance, const char* url,
|
||||||
|
const char* target);
|
||||||
|
NPError NP_LOADDS NPN_PostURLNotify(NPP instance, const char* url,
|
||||||
|
const char* target, uint32 len,
|
||||||
|
const char* buf, NPBool file,
|
||||||
|
void* notifyData);
|
||||||
|
NPError NP_LOADDS NPN_PostURL(NPP instance, const char* url,
|
||||||
|
const char* target, uint32 len,
|
||||||
|
const char* buf, NPBool file);
|
||||||
|
NPError NP_LOADDS NPN_RequestRead(NPStream* stream, NPByteRange* rangeList);
|
||||||
|
NPError NP_LOADDS NPN_NewStream(NPP instance, NPMIMEType type,
|
||||||
|
const char* target, NPStream** stream);
|
||||||
|
int32 NP_LOADDS NPN_Write(NPP instance, NPStream* stream, int32 len, void* buffer);
|
||||||
|
NPError NP_LOADDS NPN_DestroyStream(NPP instance, NPStream* stream, NPReason reason);
|
||||||
|
void NP_LOADDS NPN_Status(NPP instance, const char* message);
|
||||||
|
const char* NP_LOADDS NPN_UserAgent(NPP instance);
|
||||||
|
void* NP_LOADDS NPN_MemAlloc(uint32 size);
|
||||||
|
void NP_LOADDS NPN_MemFree(void* ptr);
|
||||||
|
uint32 NP_LOADDS NPN_MemFlush(uint32 size);
|
||||||
|
void NP_LOADDS NPN_ReloadPlugins(NPBool reloadPages);
|
||||||
|
#ifdef OJI
|
||||||
|
JRIEnv* NP_LOADDS NPN_GetJavaEnv(void);
|
||||||
|
jref NP_LOADDS NPN_GetJavaPeer(NPP instance);
|
||||||
|
#endif
|
||||||
|
NPError NP_LOADDS NPN_GetValue(NPP instance, NPNVariable variable, void *value);
|
||||||
|
NPError NP_LOADDS NPN_SetValue(NPP instance, NPPVariable variable, void *value);
|
||||||
|
void NP_LOADDS NPN_InvalidateRect(NPP instance, NPRect *invalidRect);
|
||||||
|
void NP_LOADDS NPN_InvalidateRegion(NPP instance, NPRegion invalidRegion);
|
||||||
|
void NP_LOADDS NPN_ForceRedraw(NPP instance);
|
||||||
|
void NP_LOADDS NPN_PushPopupsEnabledState(NPP instance, NPBool enabled);
|
||||||
|
void NP_LOADDS NPN_PopPopupsEnabledState(NPP instance);
|
||||||
|
void NP_LOADDS NPN_PluginThreadAsyncCall(NPP instance,
|
||||||
|
void (*func) (void *),
|
||||||
|
void *userData);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* end extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* RC_INVOKED */
|
||||||
|
#ifdef __OS2__
|
||||||
|
#pragma pack()
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* _NPAPI_H_ */
|
423
engine/libs/npapi/npruntime.h
Normal file
423
engine/libs/npapi/npruntime.h
Normal file
|
@ -0,0 +1,423 @@
|
||||||
|
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||||
|
/*
|
||||||
|
* Copyright © 2004, Apple Computer, Inc. and The Mozilla Foundation.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are
|
||||||
|
* met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
* 3. Neither the names of Apple Computer, Inc. ("Apple") or The Mozilla
|
||||||
|
* Foundation ("Mozilla") nor the names of their contributors may be used
|
||||||
|
* to endorse or promote products derived from this software without
|
||||||
|
* specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY APPLE, MOZILLA AND THEIR CONTRIBUTORS "AS
|
||||||
|
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||||
|
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
||||||
|
* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE, MOZILLA OR
|
||||||
|
* THEIR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
||||||
|
* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* Revision 1 (March 4, 2004):
|
||||||
|
* Initial proposal.
|
||||||
|
*
|
||||||
|
* Revision 2 (March 10, 2004):
|
||||||
|
* All calls into script were made asynchronous. Results are
|
||||||
|
* provided via the NPScriptResultFunctionPtr callback.
|
||||||
|
*
|
||||||
|
* Revision 3 (March 10, 2004):
|
||||||
|
* Corrected comments to not refer to class retain/release FunctionPtrs.
|
||||||
|
*
|
||||||
|
* Revision 4 (March 11, 2004):
|
||||||
|
* Added additional convenience NPN_SetExceptionWithUTF8().
|
||||||
|
* Changed NPHasPropertyFunctionPtr and NPHasMethodFunctionPtr to take NPClass
|
||||||
|
* pointers instead of NPObject pointers.
|
||||||
|
* Added NPIsValidIdentifier().
|
||||||
|
*
|
||||||
|
* Revision 5 (March 17, 2004):
|
||||||
|
* Added context parameter to result callbacks from ScriptObject functions.
|
||||||
|
*
|
||||||
|
* Revision 6 (March 29, 2004):
|
||||||
|
* Renamed functions implemented by user agent to NPN_*. Removed _ from
|
||||||
|
* type names.
|
||||||
|
* Renamed "JavaScript" types to "Script".
|
||||||
|
*
|
||||||
|
* Revision 7 (April 21, 2004):
|
||||||
|
* NPIdentifier becomes a void*, was int32_t
|
||||||
|
* Remove NP_IsValidIdentifier, renamed NP_IdentifierFromUTF8 to NP_GetIdentifier
|
||||||
|
* Added NPVariant and modified functions to use this new type.
|
||||||
|
*
|
||||||
|
* Revision 8 (July 9, 2004):
|
||||||
|
* Updated to joint Apple-Mozilla license.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#ifndef _NP_RUNTIME_H_
|
||||||
|
#define _NP_RUNTIME_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "nptypes.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
This API is used to facilitate binding code written in C to script
|
||||||
|
objects. The API in this header does not assume the presence of a
|
||||||
|
user agent. That is, it can be used to bind C code to scripting
|
||||||
|
environments outside of the context of a user agent.
|
||||||
|
|
||||||
|
However, the normal use of the this API is in the context of a
|
||||||
|
scripting environment running in a browser or other user agent.
|
||||||
|
In particular it is used to support the extended Netscape
|
||||||
|
script-ability API for plugins (NP-SAP). NP-SAP is an extension
|
||||||
|
of the Netscape plugin API. As such we have adopted the use of
|
||||||
|
the "NP" prefix for this API.
|
||||||
|
|
||||||
|
The following NP{N|P}Variables were added to the Netscape plugin
|
||||||
|
API (in npapi.h):
|
||||||
|
|
||||||
|
NPNVWindowNPObject
|
||||||
|
NPNVPluginElementNPObject
|
||||||
|
NPPVpluginScriptableNPObject
|
||||||
|
|
||||||
|
These variables are exposed through NPN_GetValue() and
|
||||||
|
NPP_GetValue() (respectively) and are used to establish the
|
||||||
|
initial binding between the user agent and native code. The DOM
|
||||||
|
objects in the user agent can be examined and manipulated using
|
||||||
|
the NPN_ functions that operate on NPObjects described in this
|
||||||
|
header.
|
||||||
|
|
||||||
|
To the extent possible the assumptions about the scripting
|
||||||
|
language used by the scripting environment have been minimized.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define NP_BEGIN_MACRO do {
|
||||||
|
#define NP_END_MACRO } while (0)
|
||||||
|
|
||||||
|
/*
|
||||||
|
Objects (non-primitive data) passed between 'C' and script is
|
||||||
|
always wrapped in an NPObject. The 'interface' of an NPObject is
|
||||||
|
described by an NPClass.
|
||||||
|
*/
|
||||||
|
typedef struct NPObject NPObject;
|
||||||
|
typedef struct NPClass NPClass;
|
||||||
|
|
||||||
|
typedef char NPUTF8;
|
||||||
|
typedef struct _NPString {
|
||||||
|
const NPUTF8 *utf8characters;
|
||||||
|
uint32_t utf8length;
|
||||||
|
} NPString;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
NPVariantType_Void,
|
||||||
|
NPVariantType_Null,
|
||||||
|
NPVariantType_Bool,
|
||||||
|
NPVariantType_Int32,
|
||||||
|
NPVariantType_Double,
|
||||||
|
NPVariantType_String,
|
||||||
|
NPVariantType_Object
|
||||||
|
} NPVariantType;
|
||||||
|
|
||||||
|
typedef struct _NPVariant {
|
||||||
|
NPVariantType type;
|
||||||
|
union {
|
||||||
|
bool boolValue;
|
||||||
|
int32_t intValue;
|
||||||
|
double doubleValue;
|
||||||
|
NPString stringValue;
|
||||||
|
NPObject *objectValue;
|
||||||
|
} value;
|
||||||
|
} NPVariant;
|
||||||
|
|
||||||
|
/*
|
||||||
|
NPN_ReleaseVariantValue is called on all 'out' parameters
|
||||||
|
references. Specifically it is to be called on variants that own
|
||||||
|
their value, as is the case with all non-const NPVariant*
|
||||||
|
arguments after a successful call to any methods (except this one)
|
||||||
|
in this API.
|
||||||
|
|
||||||
|
After calling NPN_ReleaseVariantValue, the type of the variant
|
||||||
|
will be NPVariantType_Void.
|
||||||
|
*/
|
||||||
|
void NPN_ReleaseVariantValue(NPVariant *variant);
|
||||||
|
|
||||||
|
#define NPVARIANT_IS_VOID(_v) ((_v).type == NPVariantType_Void)
|
||||||
|
#define NPVARIANT_IS_NULL(_v) ((_v).type == NPVariantType_Null)
|
||||||
|
#define NPVARIANT_IS_BOOLEAN(_v) ((_v).type == NPVariantType_Bool)
|
||||||
|
#define NPVARIANT_IS_INT32(_v) ((_v).type == NPVariantType_Int32)
|
||||||
|
#define NPVARIANT_IS_DOUBLE(_v) ((_v).type == NPVariantType_Double)
|
||||||
|
#define NPVARIANT_IS_STRING(_v) ((_v).type == NPVariantType_String)
|
||||||
|
#define NPVARIANT_IS_OBJECT(_v) ((_v).type == NPVariantType_Object)
|
||||||
|
|
||||||
|
#define NPVARIANT_TO_BOOLEAN(_v) ((_v).value.boolValue)
|
||||||
|
#define NPVARIANT_TO_INT32(_v) ((_v).value.intValue)
|
||||||
|
#define NPVARIANT_TO_DOUBLE(_v) ((_v).value.doubleValue)
|
||||||
|
#define NPVARIANT_TO_STRING(_v) ((_v).value.stringValue)
|
||||||
|
#define NPVARIANT_TO_OBJECT(_v) ((_v).value.objectValue)
|
||||||
|
|
||||||
|
#define VOID_TO_NPVARIANT(_v) \
|
||||||
|
NP_BEGIN_MACRO \
|
||||||
|
(_v).type = NPVariantType_Void; \
|
||||||
|
(_v).value.objectValue = NULL; \
|
||||||
|
NP_END_MACRO
|
||||||
|
|
||||||
|
#define NULL_TO_NPVARIANT(_v) \
|
||||||
|
NP_BEGIN_MACRO \
|
||||||
|
(_v).type = NPVariantType_Null; \
|
||||||
|
(_v).value.objectValue = NULL; \
|
||||||
|
NP_END_MACRO
|
||||||
|
|
||||||
|
#define BOOLEAN_TO_NPVARIANT(_val, _v) \
|
||||||
|
NP_BEGIN_MACRO \
|
||||||
|
(_v).type = NPVariantType_Bool; \
|
||||||
|
(_v).value.boolValue = !!(_val); \
|
||||||
|
NP_END_MACRO
|
||||||
|
|
||||||
|
#define INT32_TO_NPVARIANT(_val, _v) \
|
||||||
|
NP_BEGIN_MACRO \
|
||||||
|
(_v).type = NPVariantType_Int32; \
|
||||||
|
(_v).value.intValue = _val; \
|
||||||
|
NP_END_MACRO
|
||||||
|
|
||||||
|
#define DOUBLE_TO_NPVARIANT(_val, _v) \
|
||||||
|
NP_BEGIN_MACRO \
|
||||||
|
(_v).type = NPVariantType_Double; \
|
||||||
|
(_v).value.doubleValue = _val; \
|
||||||
|
NP_END_MACRO
|
||||||
|
|
||||||
|
#define STRINGZ_TO_NPVARIANT(_val, _v) \
|
||||||
|
NP_BEGIN_MACRO \
|
||||||
|
(_v).type = NPVariantType_String; \
|
||||||
|
NPString str = { _val, strlen(_val) }; \
|
||||||
|
(_v).value.stringValue = str; \
|
||||||
|
NP_END_MACRO
|
||||||
|
|
||||||
|
#define STRINGN_TO_NPVARIANT(_val, _len, _v) \
|
||||||
|
NP_BEGIN_MACRO \
|
||||||
|
(_v).type = NPVariantType_String; \
|
||||||
|
NPString str = { _val, _len }; \
|
||||||
|
(_v).value.stringValue = str; \
|
||||||
|
NP_END_MACRO
|
||||||
|
|
||||||
|
#define OBJECT_TO_NPVARIANT(_val, _v) \
|
||||||
|
NP_BEGIN_MACRO \
|
||||||
|
(_v).type = NPVariantType_Object; \
|
||||||
|
(_v).value.objectValue = _val; \
|
||||||
|
NP_END_MACRO
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
Type mappings (JavaScript types have been used for illustration
|
||||||
|
purposes):
|
||||||
|
|
||||||
|
JavaScript to C (NPVariant with type:)
|
||||||
|
undefined NPVariantType_Void
|
||||||
|
null NPVariantType_Null
|
||||||
|
Boolean NPVariantType_Bool
|
||||||
|
Number NPVariantType_Double or NPVariantType_Int32
|
||||||
|
String NPVariantType_String
|
||||||
|
Object NPVariantType_Object
|
||||||
|
|
||||||
|
C (NPVariant with type:) to JavaScript
|
||||||
|
NPVariantType_Void undefined
|
||||||
|
NPVariantType_Null null
|
||||||
|
NPVariantType_Bool Boolean
|
||||||
|
NPVariantType_Int32 Number
|
||||||
|
NPVariantType_Double Number
|
||||||
|
NPVariantType_String String
|
||||||
|
NPVariantType_Object Object
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef void *NPIdentifier;
|
||||||
|
|
||||||
|
/*
|
||||||
|
NPObjects have methods and properties. Methods and properties are
|
||||||
|
identified with NPIdentifiers. These identifiers may be reflected
|
||||||
|
in script. NPIdentifiers can be either strings or integers, IOW,
|
||||||
|
methods and properties can be identified by either strings or
|
||||||
|
integers (i.e. foo["bar"] vs foo[1]). NPIdentifiers can be
|
||||||
|
compared using ==. In case of any errors, the requested
|
||||||
|
NPIdentifier(s) will be NULL.
|
||||||
|
*/
|
||||||
|
NPIdentifier NPN_GetStringIdentifier(const NPUTF8 *name);
|
||||||
|
void NPN_GetStringIdentifiers(const NPUTF8 **names, int32_t nameCount,
|
||||||
|
NPIdentifier *identifiers);
|
||||||
|
NPIdentifier NPN_GetIntIdentifier(int32_t intid);
|
||||||
|
bool NPN_IdentifierIsString(NPIdentifier identifier);
|
||||||
|
|
||||||
|
/*
|
||||||
|
The NPUTF8 returned from NPN_UTF8FromIdentifier SHOULD be freed.
|
||||||
|
*/
|
||||||
|
NPUTF8 *NPN_UTF8FromIdentifier(NPIdentifier identifier);
|
||||||
|
|
||||||
|
/*
|
||||||
|
Get the integer represented by identifier. If identifier is not an
|
||||||
|
integer identifier, the behaviour is undefined.
|
||||||
|
*/
|
||||||
|
int32_t NPN_IntFromIdentifier(NPIdentifier identifier);
|
||||||
|
|
||||||
|
/*
|
||||||
|
NPObject behavior is implemented using the following set of
|
||||||
|
callback functions.
|
||||||
|
|
||||||
|
The NPVariant *result argument of these functions (where
|
||||||
|
applicable) should be released using NPN_ReleaseVariantValue().
|
||||||
|
*/
|
||||||
|
typedef NPObject *(*NPAllocateFunctionPtr)(NPP npp, NPClass *aClass);
|
||||||
|
typedef void (*NPDeallocateFunctionPtr)(NPObject *npobj);
|
||||||
|
typedef void (*NPInvalidateFunctionPtr)(NPObject *npobj);
|
||||||
|
typedef bool (*NPHasMethodFunctionPtr)(NPObject *npobj, NPIdentifier name);
|
||||||
|
typedef bool (*NPInvokeFunctionPtr)(NPObject *npobj, NPIdentifier name,
|
||||||
|
const NPVariant *args, uint32_t argCount,
|
||||||
|
NPVariant *result);
|
||||||
|
typedef bool (*NPInvokeDefaultFunctionPtr)(NPObject *npobj,
|
||||||
|
const NPVariant *args,
|
||||||
|
uint32_t argCount,
|
||||||
|
NPVariant *result);
|
||||||
|
typedef bool (*NPHasPropertyFunctionPtr)(NPObject *npobj, NPIdentifier name);
|
||||||
|
typedef bool (*NPGetPropertyFunctionPtr)(NPObject *npobj, NPIdentifier name,
|
||||||
|
NPVariant *result);
|
||||||
|
typedef bool (*NPSetPropertyFunctionPtr)(NPObject *npobj, NPIdentifier name,
|
||||||
|
const NPVariant *value);
|
||||||
|
typedef bool (*NPRemovePropertyFunctionPtr)(NPObject *npobj,
|
||||||
|
NPIdentifier name);
|
||||||
|
typedef bool (*NPEnumerationFunctionPtr)(NPObject *npobj, NPIdentifier **value,
|
||||||
|
uint32_t *count);
|
||||||
|
typedef bool (*NPConstructFunctionPtr)(NPObject *npobj,
|
||||||
|
const NPVariant *args,
|
||||||
|
uint32_t argCount,
|
||||||
|
NPVariant *result);
|
||||||
|
|
||||||
|
/*
|
||||||
|
NPObjects returned by create, retain, invoke, and getProperty pass
|
||||||
|
a reference count to the caller. That is, the callee adds a
|
||||||
|
reference count which passes to the caller. It is the caller's
|
||||||
|
responsibility to release the returned object.
|
||||||
|
|
||||||
|
NPInvokeFunctionPtr function may return 0 to indicate a void
|
||||||
|
result.
|
||||||
|
|
||||||
|
NPInvalidateFunctionPtr is called by the scripting environment
|
||||||
|
when the native code is shutdown. Any attempt to message a
|
||||||
|
NPObject instance after the invalidate callback has been
|
||||||
|
called will result in undefined behavior, even if the native code
|
||||||
|
is still retaining those NPObject instances. (The runtime
|
||||||
|
will typically return immediately, with 0 or NULL, from an attempt
|
||||||
|
to dispatch to a NPObject, but this behavior should not be
|
||||||
|
depended upon.)
|
||||||
|
|
||||||
|
The NPEnumerationFunctionPtr function may pass an array of
|
||||||
|
NPIdentifiers back to the caller. The callee allocs the memory of
|
||||||
|
the array using NPN_MemAlloc(), and it's the caller's responsibility
|
||||||
|
to release it using NPN_MemFree().
|
||||||
|
*/
|
||||||
|
struct NPClass
|
||||||
|
{
|
||||||
|
uint32_t structVersion;
|
||||||
|
NPAllocateFunctionPtr allocate;
|
||||||
|
NPDeallocateFunctionPtr deallocate;
|
||||||
|
NPInvalidateFunctionPtr invalidate;
|
||||||
|
NPHasMethodFunctionPtr hasMethod;
|
||||||
|
NPInvokeFunctionPtr invoke;
|
||||||
|
NPInvokeDefaultFunctionPtr invokeDefault;
|
||||||
|
NPHasPropertyFunctionPtr hasProperty;
|
||||||
|
NPGetPropertyFunctionPtr getProperty;
|
||||||
|
NPSetPropertyFunctionPtr setProperty;
|
||||||
|
NPRemovePropertyFunctionPtr removeProperty;
|
||||||
|
NPEnumerationFunctionPtr enumerate;
|
||||||
|
NPConstructFunctionPtr construct;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define NP_CLASS_STRUCT_VERSION 3
|
||||||
|
|
||||||
|
#define NP_CLASS_STRUCT_VERSION_ENUM 2
|
||||||
|
#define NP_CLASS_STRUCT_VERSION_CTOR 3
|
||||||
|
|
||||||
|
#define NP_CLASS_STRUCT_VERSION_HAS_ENUM(npclass) \
|
||||||
|
((npclass)->structVersion >= NP_CLASS_STRUCT_VERSION_ENUM)
|
||||||
|
|
||||||
|
#define NP_CLASS_STRUCT_VERSION_HAS_CTOR(npclass) \
|
||||||
|
((npclass)->structVersion >= NP_CLASS_STRUCT_VERSION_CTOR)
|
||||||
|
|
||||||
|
struct NPObject {
|
||||||
|
NPClass *_class;
|
||||||
|
uint32_t referenceCount;
|
||||||
|
/*
|
||||||
|
* Additional space may be allocated here by types of NPObjects
|
||||||
|
*/
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
If the class has an allocate function, NPN_CreateObject invokes
|
||||||
|
that function, otherwise a NPObject is allocated and
|
||||||
|
returned. This method will initialize the referenceCount member of
|
||||||
|
the NPObject to 1.
|
||||||
|
*/
|
||||||
|
NPObject *NPN_CreateObject(NPP npp, NPClass *aClass);
|
||||||
|
|
||||||
|
/*
|
||||||
|
Increment the NPObject's reference count.
|
||||||
|
*/
|
||||||
|
NPObject *NPN_RetainObject(NPObject *npobj);
|
||||||
|
|
||||||
|
/*
|
||||||
|
Decremented the NPObject's reference count. If the reference
|
||||||
|
count goes to zero, the class's destroy function is invoke if
|
||||||
|
specified, otherwise the object is freed directly.
|
||||||
|
*/
|
||||||
|
void NPN_ReleaseObject(NPObject *npobj);
|
||||||
|
|
||||||
|
/*
|
||||||
|
Functions to access script objects represented by NPObject.
|
||||||
|
|
||||||
|
Calls to script objects are synchronous. If a function returns a
|
||||||
|
value, it will be supplied via the result NPVariant
|
||||||
|
argument. Successful calls will return true, false will be
|
||||||
|
returned in case of an error.
|
||||||
|
|
||||||
|
Calls made from plugin code to script must be made from the thread
|
||||||
|
on which the plugin was initialized.
|
||||||
|
*/
|
||||||
|
|
||||||
|
bool NPN_Invoke(NPP npp, NPObject *npobj, NPIdentifier methodName,
|
||||||
|
const NPVariant *args, uint32_t argCount, NPVariant *result);
|
||||||
|
bool NPN_InvokeDefault(NPP npp, NPObject *npobj, const NPVariant *args,
|
||||||
|
uint32_t argCount, NPVariant *result);
|
||||||
|
bool NPN_Evaluate(NPP npp, NPObject *npobj, NPString *script,
|
||||||
|
NPVariant *result);
|
||||||
|
bool NPN_GetProperty(NPP npp, NPObject *npobj, NPIdentifier propertyName,
|
||||||
|
NPVariant *result);
|
||||||
|
bool NPN_SetProperty(NPP npp, NPObject *npobj, NPIdentifier propertyName,
|
||||||
|
const NPVariant *value);
|
||||||
|
bool NPN_RemoveProperty(NPP npp, NPObject *npobj, NPIdentifier propertyName);
|
||||||
|
bool NPN_HasProperty(NPP npp, NPObject *npobj, NPIdentifier propertyName);
|
||||||
|
bool NPN_HasMethod(NPP npp, NPObject *npobj, NPIdentifier methodName);
|
||||||
|
bool NPN_Enumerate(NPP npp, NPObject *npobj, NPIdentifier **identifier,
|
||||||
|
uint32_t *count);
|
||||||
|
bool NPN_Construct(NPP npp, NPObject *npobj, const NPVariant *args,
|
||||||
|
uint32_t argCount, NPVariant *result);
|
||||||
|
|
||||||
|
/*
|
||||||
|
NPN_SetException may be called to trigger a script exception upon
|
||||||
|
return from entry points into NPObjects. Typical usage:
|
||||||
|
|
||||||
|
NPN_SetException (npobj, message);
|
||||||
|
*/
|
||||||
|
void NPN_SetException(NPObject *npobj, const NPUTF8 *message);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
105
engine/libs/npapi/nptypes.h
Normal file
105
engine/libs/npapi/nptypes.h
Normal file
|
@ -0,0 +1,105 @@
|
||||||
|
/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
* http://www.mozilla.org/MPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||||
|
* for the specific language governing rights and limitations under the
|
||||||
|
* License.
|
||||||
|
*
|
||||||
|
* The Original Code is mozilla.org code.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* mozilla.org.
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 2004
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
* Johnny Stenback <jst@mozilla.org> (Original author)
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Header file for ensuring that C99 types ([u]int32_t and bool) are
|
||||||
|
* available.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(WIN32) || defined(OS2)
|
||||||
|
/*
|
||||||
|
* Win32 and OS/2 don't know C99, so define [u]int_32 here. The bool
|
||||||
|
* is predefined tho, both in C and C++.
|
||||||
|
*/
|
||||||
|
typedef int int32_t;
|
||||||
|
typedef unsigned int uint32_t;
|
||||||
|
#elif defined(_AIX) || defined(__sun) || defined(__osf__) || defined(IRIX) || defined(HPUX)
|
||||||
|
/*
|
||||||
|
* AIX and SunOS ship a inttypes.h header that defines [u]int32_t,
|
||||||
|
* but not bool for C.
|
||||||
|
*/
|
||||||
|
#include <inttypes.h>
|
||||||
|
|
||||||
|
#ifndef __cplusplus
|
||||||
|
typedef int bool;
|
||||||
|
#endif
|
||||||
|
#elif defined(bsdi) || defined(FREEBSD) || defined(OPENBSD)
|
||||||
|
/*
|
||||||
|
* BSD/OS, FreeBSD, and OpenBSD ship sys/types.h that define int32_t and
|
||||||
|
* u_int32_t.
|
||||||
|
*/
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
/*
|
||||||
|
* BSD/OS ships no header that defines uint32_t, nor bool (for C)
|
||||||
|
*/
|
||||||
|
#if defined(bsdi)
|
||||||
|
typedef u_int32_t uint32_t;
|
||||||
|
|
||||||
|
#if !defined(__cplusplus)
|
||||||
|
typedef int bool;
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
/*
|
||||||
|
* FreeBSD and OpenBSD define uint32_t and bool.
|
||||||
|
*/
|
||||||
|
#include <inttypes.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
#endif
|
||||||
|
#elif defined(BEOS)
|
||||||
|
#include <inttypes.h>
|
||||||
|
#else
|
||||||
|
/*
|
||||||
|
* For those that ship a standard C99 stdint.h header file, include
|
||||||
|
* it. Can't do the same for stdbool.h tho, since some systems ship
|
||||||
|
* with a stdbool.h file that doesn't compile!
|
||||||
|
*/
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#ifndef __cplusplus
|
||||||
|
#if !defined(__GNUC__) || (__GNUC__ > 2 || __GNUC_MINOR__ > 95)
|
||||||
|
#include <stdbool.h>
|
||||||
|
#else
|
||||||
|
/*
|
||||||
|
* GCC 2.91 can't deal with a typedef for bool, but a #define
|
||||||
|
* works.
|
||||||
|
*/
|
||||||
|
#define bool int
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#endif
|
721
engine/libs/npapi/npupp.h
Normal file
721
engine/libs/npapi/npupp.h
Normal file
|
@ -0,0 +1,721 @@
|
||||||
|
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
* http://www.mozilla.org/MPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||||
|
* for the specific language governing rights and limitations under the
|
||||||
|
* License.
|
||||||
|
*
|
||||||
|
* The Original Code is mozilla.org code.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* Netscape Communications Corporation.
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 1998
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* npupp.h $Revision: 3.26 $
|
||||||
|
* function call mecahnics needed by platform specific glue code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef _NPUPP_H_
|
||||||
|
#define _NPUPP_H_
|
||||||
|
|
||||||
|
#if defined(__OS2__)
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef GENERATINGCFM
|
||||||
|
#define GENERATINGCFM 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _NPAPI_H_
|
||||||
|
#include "npapi.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "npruntime.h"
|
||||||
|
|
||||||
|
#ifdef DOJRI
|
||||||
|
#include "jri.h"
|
||||||
|
#else
|
||||||
|
typedef struct JRIGlobal* JRIGlobalRef;
|
||||||
|
typedef void *JRIEnv;
|
||||||
|
typedef void *jref;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/******************************************************************************************
|
||||||
|
plug-in function table macros
|
||||||
|
for each function in and out of the plugin API we define
|
||||||
|
typedef NPP_FooUPP
|
||||||
|
#define NewNPP_FooProc
|
||||||
|
#define CallNPP_FooProc
|
||||||
|
*******************************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
/* NPP_Initialize */
|
||||||
|
typedef void (* NP_LOADDS NPP_InitializeUPP)(void);
|
||||||
|
#define NewNPP_InitializeProc(FUNC) \
|
||||||
|
((NPP_InitializeUPP) (FUNC))
|
||||||
|
#define CallNPP_InitializeProc(FUNC) \
|
||||||
|
(*(FUNC))()
|
||||||
|
|
||||||
|
/* NPP_Shutdown */
|
||||||
|
typedef void (* NP_LOADDS NPP_ShutdownUPP)(void);
|
||||||
|
#define NewNPP_ShutdownProc(FUNC) \
|
||||||
|
((NPP_ShutdownUPP) (FUNC))
|
||||||
|
#define CallNPP_ShutdownProc(FUNC) \
|
||||||
|
(*(FUNC))()
|
||||||
|
|
||||||
|
/* NPP_New */
|
||||||
|
typedef NPError (* NP_LOADDS NPP_NewUPP)(NPMIMEType pluginType, NPP instance, uint16 mode, int16 argc, char* argn[], char* argv[], NPSavedData* saved);
|
||||||
|
#define NewNPP_NewProc(FUNC) \
|
||||||
|
((NPP_NewUPP) (FUNC))
|
||||||
|
#define CallNPP_NewProc(FUNC, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7) \
|
||||||
|
(*(FUNC))((ARG1), (ARG2), (ARG3), (ARG4), (ARG5), (ARG6), (ARG7))
|
||||||
|
|
||||||
|
/* NPP_Destroy */
|
||||||
|
typedef NPError (* NP_LOADDS NPP_DestroyUPP)(NPP instance, NPSavedData** save);
|
||||||
|
#define NewNPP_DestroyProc(FUNC) \
|
||||||
|
((NPP_DestroyUPP) (FUNC))
|
||||||
|
#define CallNPP_DestroyProc(FUNC, ARG1, ARG2) \
|
||||||
|
(*(FUNC))((ARG1), (ARG2))
|
||||||
|
|
||||||
|
/* NPP_SetWindow */
|
||||||
|
typedef NPError (* NP_LOADDS NPP_SetWindowUPP)(NPP instance, NPWindow* window);
|
||||||
|
#define NewNPP_SetWindowProc(FUNC) \
|
||||||
|
((NPP_SetWindowUPP) (FUNC))
|
||||||
|
#define CallNPP_SetWindowProc(FUNC, ARG1, ARG2) \
|
||||||
|
(*(FUNC))((ARG1), (ARG2))
|
||||||
|
|
||||||
|
/* NPP_NewStream */
|
||||||
|
typedef NPError (* NP_LOADDS NPP_NewStreamUPP)(NPP instance, NPMIMEType type, NPStream* stream, NPBool seekable, uint16* stype);
|
||||||
|
#define NewNPP_NewStreamProc(FUNC) \
|
||||||
|
((NPP_NewStreamUPP) (FUNC))
|
||||||
|
#define CallNPP_NewStreamProc(FUNC, ARG1, ARG2, ARG3, ARG4, ARG5) \
|
||||||
|
(*(FUNC))((ARG1), (ARG2), (ARG3), (ARG4), (ARG5))
|
||||||
|
|
||||||
|
/* NPP_DestroyStream */
|
||||||
|
typedef NPError (* NP_LOADDS NPP_DestroyStreamUPP)(NPP instance, NPStream* stream, NPReason reason);
|
||||||
|
#define NewNPP_DestroyStreamProc(FUNC) \
|
||||||
|
((NPP_DestroyStreamUPP) (FUNC))
|
||||||
|
#define CallNPP_DestroyStreamProc(FUNC, NPParg, NPStreamPtr, NPReasonArg) \
|
||||||
|
(*(FUNC))((NPParg), (NPStreamPtr), (NPReasonArg))
|
||||||
|
|
||||||
|
/* NPP_WriteReady */
|
||||||
|
typedef int32 (* NP_LOADDS NPP_WriteReadyUPP)(NPP instance, NPStream* stream);
|
||||||
|
#define NewNPP_WriteReadyProc(FUNC) \
|
||||||
|
((NPP_WriteReadyUPP) (FUNC))
|
||||||
|
#define CallNPP_WriteReadyProc(FUNC, NPParg, NPStreamPtr) \
|
||||||
|
(*(FUNC))((NPParg), (NPStreamPtr))
|
||||||
|
|
||||||
|
/* NPP_Write */
|
||||||
|
typedef int32 (* NP_LOADDS NPP_WriteUPP)(NPP instance, NPStream* stream, int32 offset, int32 len, void* buffer);
|
||||||
|
#define NewNPP_WriteProc(FUNC) \
|
||||||
|
((NPP_WriteUPP) (FUNC))
|
||||||
|
#define CallNPP_WriteProc(FUNC, NPParg, NPStreamPtr, offsetArg, lenArg, bufferPtr) \
|
||||||
|
(*(FUNC))((NPParg), (NPStreamPtr), (offsetArg), (lenArg), (bufferPtr))
|
||||||
|
|
||||||
|
/* NPP_StreamAsFile */
|
||||||
|
typedef void (* NP_LOADDS NPP_StreamAsFileUPP)(NPP instance, NPStream* stream, const char* fname);
|
||||||
|
#define NewNPP_StreamAsFileProc(FUNC) \
|
||||||
|
((NPP_StreamAsFileUPP) (FUNC))
|
||||||
|
#define CallNPP_StreamAsFileProc(FUNC, ARG1, ARG2, ARG3) \
|
||||||
|
(*(FUNC))((ARG1), (ARG2), (ARG3))
|
||||||
|
|
||||||
|
/* NPP_Print */
|
||||||
|
typedef void (* NP_LOADDS NPP_PrintUPP)(NPP instance, NPPrint* platformPrint);
|
||||||
|
#define NewNPP_PrintProc(FUNC) \
|
||||||
|
((NPP_PrintUPP) (FUNC))
|
||||||
|
#define CallNPP_PrintProc(FUNC, NPParg, NPPrintArg) \
|
||||||
|
(*(FUNC))((NPParg), (NPPrintArg))
|
||||||
|
|
||||||
|
/* NPP_HandleEvent */
|
||||||
|
typedef int16 (* NP_LOADDS NPP_HandleEventUPP)(NPP instance, void* event);
|
||||||
|
#define NewNPP_HandleEventProc(FUNC) \
|
||||||
|
((NPP_HandleEventUPP) (FUNC))
|
||||||
|
#define CallNPP_HandleEventProc(FUNC, NPParg, voidPtr) \
|
||||||
|
(*(FUNC))((NPParg), (voidPtr))
|
||||||
|
|
||||||
|
/* NPP_URLNotify */
|
||||||
|
typedef void (* NP_LOADDS NPP_URLNotifyUPP)(NPP instance, const char* url, NPReason reason, void* notifyData);
|
||||||
|
#define NewNPP_URLNotifyProc(FUNC) \
|
||||||
|
((NPP_URLNotifyUPP) (FUNC))
|
||||||
|
#define CallNPP_URLNotifyProc(FUNC, ARG1, ARG2, ARG3, ARG4) \
|
||||||
|
(*(FUNC))((ARG1), (ARG2), (ARG3), (ARG4))
|
||||||
|
|
||||||
|
/* NPP_GetValue */
|
||||||
|
typedef NPError (* NP_LOADDS NPP_GetValueUPP)(NPP instance, NPPVariable variable, void *ret_alue);
|
||||||
|
#define NewNPP_GetValueProc(FUNC) \
|
||||||
|
((NPP_GetValueUPP) (FUNC))
|
||||||
|
#define CallNPP_GetValueProc(FUNC, ARG1, ARG2, ARG3) \
|
||||||
|
(*(FUNC))((ARG1), (ARG2), (ARG3))
|
||||||
|
|
||||||
|
/* NPP_SetValue */
|
||||||
|
typedef NPError (* NP_LOADDS NPP_SetValueUPP)(NPP instance, NPNVariable variable, void *ret_alue);
|
||||||
|
#define NewNPP_SetValueProc(FUNC) \
|
||||||
|
((NPP_SetValueUPP) (FUNC))
|
||||||
|
#define CallNPP_SetValueProc(FUNC, ARG1, ARG2, ARG3) \
|
||||||
|
(*(FUNC))((ARG1), (ARG2), (ARG3))
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Netscape entry points
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/* NPN_GetValue */
|
||||||
|
typedef NPError (* NP_LOADDS NPN_GetValueUPP)(NPP instance, NPNVariable variable, void *ret_alue);
|
||||||
|
#define NewNPN_GetValueProc(FUNC) \
|
||||||
|
((NPN_GetValueUPP) (FUNC))
|
||||||
|
#define CallNPN_GetValueProc(FUNC, ARG1, ARG2, ARG3) \
|
||||||
|
(*(FUNC))((ARG1), (ARG2), (ARG3))
|
||||||
|
|
||||||
|
/* NPN_SetValue */
|
||||||
|
typedef NPError (* NP_LOADDS NPN_SetValueUPP)(NPP instance, NPPVariable variable, void *ret_alue);
|
||||||
|
#define NewNPN_SetValueProc(FUNC) \
|
||||||
|
((NPN_SetValueUPP) (FUNC))
|
||||||
|
#define CallNPN_SetValueProc(FUNC, ARG1, ARG2, ARG3) \
|
||||||
|
(*(FUNC))((ARG1), (ARG2), (ARG3))
|
||||||
|
|
||||||
|
/* NPN_GetUrlNotify */
|
||||||
|
typedef NPError (* NP_LOADDS NPN_GetURLNotifyUPP)(NPP instance, const char* url, const char* window, void* notifyData);
|
||||||
|
#define NewNPN_GetURLNotifyProc(FUNC) \
|
||||||
|
((NPN_GetURLNotifyUPP) (FUNC))
|
||||||
|
#define CallNPN_GetURLNotifyProc(FUNC, ARG1, ARG2, ARG3, ARG4) \
|
||||||
|
(*(FUNC))((ARG1), (ARG2), (ARG3), (ARG4))
|
||||||
|
|
||||||
|
/* NPN_PostUrlNotify */
|
||||||
|
typedef NPError (* NP_LOADDS NPN_PostURLNotifyUPP)(NPP instance, const char* url, const char* window, uint32 len, const char* buf, NPBool file, void* notifyData);
|
||||||
|
#define NewNPN_PostURLNotifyProc(FUNC) \
|
||||||
|
((NPN_PostURLNotifyUPP) (FUNC))
|
||||||
|
#define CallNPN_PostURLNotifyProc(FUNC, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7) \
|
||||||
|
(*(FUNC))((ARG1), (ARG2), (ARG3), (ARG4), (ARG5), (ARG6), (ARG7))
|
||||||
|
|
||||||
|
/* NPN_GetUrl */
|
||||||
|
typedef NPError (* NP_LOADDS NPN_GetURLUPP)(NPP instance, const char* url, const char* window);
|
||||||
|
#define NewNPN_GetURLProc(FUNC) \
|
||||||
|
((NPN_GetURLUPP) (FUNC))
|
||||||
|
#define CallNPN_GetURLProc(FUNC, ARG1, ARG2, ARG3) \
|
||||||
|
(*(FUNC))((ARG1), (ARG2), (ARG3))
|
||||||
|
|
||||||
|
/* NPN_PostUrl */
|
||||||
|
typedef NPError (* NP_LOADDS NPN_PostURLUPP)(NPP instance, const char* url, const char* window, uint32 len, const char* buf, NPBool file);
|
||||||
|
#define NewNPN_PostURLProc(FUNC) \
|
||||||
|
((NPN_PostURLUPP) (FUNC))
|
||||||
|
#define CallNPN_PostURLProc(FUNC, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6) \
|
||||||
|
(*(FUNC))((ARG1), (ARG2), (ARG3), (ARG4), (ARG5), (ARG6))
|
||||||
|
|
||||||
|
/* NPN_RequestRead */
|
||||||
|
typedef NPError (* NP_LOADDS NPN_RequestReadUPP)(NPStream* stream, NPByteRange* rangeList);
|
||||||
|
#define NewNPN_RequestReadProc(FUNC) \
|
||||||
|
((NPN_RequestReadUPP) (FUNC))
|
||||||
|
#define CallNPN_RequestReadProc(FUNC, stream, range) \
|
||||||
|
(*(FUNC))((stream), (range))
|
||||||
|
|
||||||
|
/* NPN_NewStream */
|
||||||
|
typedef NPError (* NP_LOADDS NPN_NewStreamUPP)(NPP instance, NPMIMEType type, const char* window, NPStream** stream);
|
||||||
|
#define NewNPN_NewStreamProc(FUNC) \
|
||||||
|
((NPN_NewStreamUPP) (FUNC))
|
||||||
|
#define CallNPN_NewStreamProc(FUNC, npp, type, window, stream) \
|
||||||
|
(*(FUNC))((npp), (type), (window), (stream))
|
||||||
|
|
||||||
|
/* NPN_Write */
|
||||||
|
typedef int32 (* NP_LOADDS NPN_WriteUPP)(NPP instance, NPStream* stream, int32 len, void* buffer);
|
||||||
|
#define NewNPN_WriteProc(FUNC) \
|
||||||
|
((NPN_WriteUPP) (FUNC))
|
||||||
|
#define CallNPN_WriteProc(FUNC, npp, stream, len, buffer) \
|
||||||
|
(*(FUNC))((npp), (stream), (len), (buffer))
|
||||||
|
|
||||||
|
/* NPN_DestroyStream */
|
||||||
|
typedef NPError (* NP_LOADDS NPN_DestroyStreamUPP)(NPP instance, NPStream* stream, NPReason reason);
|
||||||
|
#define NewNPN_DestroyStreamProc(FUNC) \
|
||||||
|
((NPN_DestroyStreamUPP) (FUNC))
|
||||||
|
#define CallNPN_DestroyStreamProc(FUNC, npp, stream, reason) \
|
||||||
|
(*(FUNC))((npp), (stream), (reason))
|
||||||
|
|
||||||
|
/* NPN_Status */
|
||||||
|
typedef void (* NP_LOADDS NPN_StatusUPP)(NPP instance, const char* message);
|
||||||
|
#define NewNPN_StatusProc(FUNC) \
|
||||||
|
((NPN_StatusUPP) (FUNC))
|
||||||
|
#define CallNPN_StatusProc(FUNC, npp, msg) \
|
||||||
|
(*(FUNC))((npp), (msg))
|
||||||
|
|
||||||
|
/* NPN_UserAgent */
|
||||||
|
typedef const char* (* NP_LOADDS NPN_UserAgentUPP)(NPP instance);
|
||||||
|
#define NewNPN_UserAgentProc(FUNC) \
|
||||||
|
((NPN_UserAgentUPP) (FUNC))
|
||||||
|
#define CallNPN_UserAgentProc(FUNC, ARG1) \
|
||||||
|
(*(FUNC))((ARG1))
|
||||||
|
|
||||||
|
/* NPN_MemAlloc */
|
||||||
|
typedef void* (* NP_LOADDS NPN_MemAllocUPP)(uint32 size);
|
||||||
|
#define NewNPN_MemAllocProc(FUNC) \
|
||||||
|
((NPN_MemAllocUPP) (FUNC))
|
||||||
|
#define CallNPN_MemAllocProc(FUNC, ARG1) \
|
||||||
|
(*(FUNC))((ARG1))
|
||||||
|
|
||||||
|
/* NPN__MemFree */
|
||||||
|
typedef void (* NP_LOADDS NPN_MemFreeUPP)(void* ptr);
|
||||||
|
#define NewNPN_MemFreeProc(FUNC) \
|
||||||
|
((NPN_MemFreeUPP) (FUNC))
|
||||||
|
#define CallNPN_MemFreeProc(FUNC, ARG1) \
|
||||||
|
(*(FUNC))((ARG1))
|
||||||
|
|
||||||
|
/* NPN_MemFlush */
|
||||||
|
typedef uint32 (* NP_LOADDS NPN_MemFlushUPP)(uint32 size);
|
||||||
|
#define NewNPN_MemFlushProc(FUNC) \
|
||||||
|
((NPN_MemFlushUPP) (FUNC))
|
||||||
|
#define CallNPN_MemFlushProc(FUNC, ARG1) \
|
||||||
|
(*(FUNC))((ARG1))
|
||||||
|
|
||||||
|
/* NPN_ReloadPlugins */
|
||||||
|
typedef void (* NP_LOADDS NPN_ReloadPluginsUPP)(NPBool reloadPages);
|
||||||
|
#define NewNPN_ReloadPluginsProc(FUNC) \
|
||||||
|
((NPN_ReloadPluginsUPP) (FUNC))
|
||||||
|
#define CallNPN_ReloadPluginsProc(FUNC, ARG1) \
|
||||||
|
(*(FUNC))((ARG1))
|
||||||
|
|
||||||
|
/* NPN_GetJavaEnv */
|
||||||
|
typedef JRIEnv* (* NP_LOADDS NPN_GetJavaEnvUPP)(void);
|
||||||
|
#define NewNPN_GetJavaEnvProc(FUNC) \
|
||||||
|
((NPN_GetJavaEnvUPP) (FUNC))
|
||||||
|
#define CallNPN_GetJavaEnvProc(FUNC) \
|
||||||
|
(*(FUNC))()
|
||||||
|
|
||||||
|
/* NPN_GetJavaPeer */
|
||||||
|
typedef jref (* NP_LOADDS NPN_GetJavaPeerUPP)(NPP instance);
|
||||||
|
#define NewNPN_GetJavaPeerProc(FUNC) \
|
||||||
|
((NPN_GetJavaPeerUPP) (FUNC))
|
||||||
|
#define CallNPN_GetJavaPeerProc(FUNC, ARG1) \
|
||||||
|
(*(FUNC))((ARG1))
|
||||||
|
|
||||||
|
/* NPN_InvalidateRect */
|
||||||
|
typedef void (* NP_LOADDS NPN_InvalidateRectUPP)(NPP instance, NPRect *rect);
|
||||||
|
#define NewNPN_InvalidateRectProc(FUNC) \
|
||||||
|
((NPN_InvalidateRectUPP) (FUNC))
|
||||||
|
#define CallNPN_InvalidateRectProc(FUNC, ARG1, ARG2) \
|
||||||
|
(*(FUNC))((ARG1), (ARG2))
|
||||||
|
|
||||||
|
/* NPN_InvalidateRegion */
|
||||||
|
typedef void (* NP_LOADDS NPN_InvalidateRegionUPP)(NPP instance, NPRegion region);
|
||||||
|
#define NewNPN_InvalidateRegionProc(FUNC) \
|
||||||
|
((NPN_InvalidateRegionUPP) (FUNC))
|
||||||
|
#define CallNPN_InvalidateRegionProc(FUNC, ARG1, ARG2) \
|
||||||
|
(*(FUNC))((ARG1), (ARG2))
|
||||||
|
|
||||||
|
/* NPN_ForceRedraw */
|
||||||
|
typedef void (* NP_LOADDS NPN_ForceRedrawUPP)(NPP instance);
|
||||||
|
#define NewNPN_ForceRedrawProc(FUNC) \
|
||||||
|
((NPN_ForceRedrawUPP) (FUNC))
|
||||||
|
#define CallNPN_ForceRedrawProc(FUNC, ARG1) \
|
||||||
|
(*(FUNC))((ARG1))
|
||||||
|
|
||||||
|
/* NPN_GetStringIdentifier */
|
||||||
|
typedef NPIdentifier (* NP_LOADDS NPN_GetStringIdentifierUPP)(const NPUTF8* name);
|
||||||
|
#define NewNPN_GetStringIdentifierProc(FUNC) \
|
||||||
|
((NPN_GetStringIdentifierUPP) (FUNC))
|
||||||
|
#define CallNPN_GetStringIdentifierProc(FUNC, ARG1) \
|
||||||
|
(*(FUNC))((ARG1))
|
||||||
|
|
||||||
|
/* NPN_GetStringIdentifiers */
|
||||||
|
typedef void (* NP_LOADDS NPN_GetStringIdentifiersUPP)(const NPUTF8** names,
|
||||||
|
int32_t nameCount,
|
||||||
|
NPIdentifier* identifiers);
|
||||||
|
#define NewNPN_GetStringIdentifiersProc(FUNC) \
|
||||||
|
((NPN_GetStringIdentifiersUPP) (FUNC))
|
||||||
|
#define CallNPN_GetStringIdentifiersProc(FUNC, ARG1, ARG2, ARG3) \
|
||||||
|
(*(FUNC))((ARG1), (ARG2), (ARG3))
|
||||||
|
|
||||||
|
/* NPN_GetIntIdentifier */
|
||||||
|
typedef NPIdentifier (* NP_LOADDS NPN_GetIntIdentifierUPP)(int32_t intid);
|
||||||
|
#define NewNPN_GetIntIdentifierProc(FUNC) \
|
||||||
|
((NPN_GetIntIdentifierUPP) (FUNC))
|
||||||
|
#define CallNPN_GetIntIdentifierProc(FUNC, ARG1) \
|
||||||
|
(*(FUNC))((ARG1))
|
||||||
|
|
||||||
|
/* NPN_IdentifierIsString */
|
||||||
|
typedef bool (* NP_LOADDS NPN_IdentifierIsStringUPP)(NPIdentifier identifier);
|
||||||
|
#define NewNPN_IdentifierIsStringProc(FUNC) \
|
||||||
|
((NPN_IdentifierIsStringUPP) (FUNC))
|
||||||
|
#define CallNPN_IdentifierIsStringProc(FUNC, ARG1) \
|
||||||
|
(*(FUNC))((ARG1))
|
||||||
|
|
||||||
|
/* NPN_UTF8FromIdentifier */
|
||||||
|
typedef NPUTF8* (* NP_LOADDS NPN_UTF8FromIdentifierUPP)(NPIdentifier identifier);
|
||||||
|
#define NewNPN_UTF8FromIdentifierProc(FUNC) \
|
||||||
|
((NPN_UTF8FromIdentifierUPP) (FUNC))
|
||||||
|
#define CallNPN_UTF8FromIdentifierProc(FUNC, ARG1) \
|
||||||
|
(*(FUNC))((ARG1))
|
||||||
|
|
||||||
|
/* NPN_IntFromIdentifier */
|
||||||
|
typedef int32_t (* NP_LOADDS NPN_IntFromIdentifierUPP)(NPIdentifier identifier);
|
||||||
|
#define NewNPN_IntFromIdentifierProc(FUNC) \
|
||||||
|
((NPN_IntFromIdentifierUPP) (FUNC))
|
||||||
|
#define CallNPN_IntFromIdentifierProc(FUNC, ARG1) \
|
||||||
|
(*(FUNC))((ARG1))
|
||||||
|
|
||||||
|
/* NPN_CreateObject */
|
||||||
|
typedef NPObject* (* NP_LOADDS NPN_CreateObjectUPP)(NPP npp, NPClass *aClass);
|
||||||
|
#define NewNPN_CreateObjectProc(FUNC) \
|
||||||
|
((NPN_CreateObjectUPP) (FUNC))
|
||||||
|
#define CallNPN_CreateObjectProc(FUNC, ARG1, ARG2) \
|
||||||
|
(*(FUNC))((ARG1), (ARG2))
|
||||||
|
|
||||||
|
/* NPN_RetainObject */
|
||||||
|
typedef NPObject* (* NP_LOADDS NPN_RetainObjectUPP)(NPObject *obj);
|
||||||
|
#define NewNPN_RetainObjectProc(FUNC) \
|
||||||
|
((NPN_RetainObjectUPP) (FUNC))
|
||||||
|
#define CallNPN_RetainObjectProc(FUNC, ARG1) \
|
||||||
|
(*(FUNC))((ARG1))
|
||||||
|
|
||||||
|
/* NPN_ReleaseObject */
|
||||||
|
typedef void (* NP_LOADDS NPN_ReleaseObjectUPP)(NPObject *obj);
|
||||||
|
#define NewNPN_ReleaseObjectProc(FUNC) \
|
||||||
|
((NPN_ReleaseObjectUPP) (FUNC))
|
||||||
|
#define CallNPN_ReleaseObjectProc(FUNC, ARG1) \
|
||||||
|
(*(FUNC))((ARG1))
|
||||||
|
|
||||||
|
/* NPN_Invoke */
|
||||||
|
typedef bool (* NP_LOADDS NPN_InvokeUPP)(NPP npp, NPObject* obj, NPIdentifier methodName, const NPVariant *args, uint32_t argCount, NPVariant *result);
|
||||||
|
#define NewNPN_InvokeProc(FUNC) \
|
||||||
|
((NPN_InvokeUPP) (FUNC))
|
||||||
|
#define CallNPN_InvokeProc(FUNC, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6) \
|
||||||
|
(*(FUNC))((ARG1), (ARG2), (ARG3), (ARG4), (ARG5), (ARG6))
|
||||||
|
|
||||||
|
/* NPN_InvokeDefault */
|
||||||
|
typedef bool (* NP_LOADDS NPN_InvokeDefaultUPP)(NPP npp, NPObject* obj, const NPVariant *args, uint32_t argCount, NPVariant *result);
|
||||||
|
#define NewNPN_InvokeDefaultProc(FUNC) \
|
||||||
|
((NPN_InvokeDefaultUPP) (FUNC))
|
||||||
|
#define CallNPN_InvokeDefaultProc(FUNC, ARG1, ARG2, ARG3, ARG4, ARG5) \
|
||||||
|
(*(FUNC))((ARG1), (ARG2), (ARG3), (ARG4), (ARG5))
|
||||||
|
|
||||||
|
/* NPN_Evaluate */
|
||||||
|
typedef bool (* NP_LOADDS NPN_EvaluateUPP)(NPP npp, NPObject *obj, NPString *script, NPVariant *result);
|
||||||
|
#define NewNPN_EvaluateProc(FUNC) \
|
||||||
|
((NPN_EvaluateUPP) (FUNC))
|
||||||
|
#define CallNPN_EvaluateProc(FUNC, ARG1, ARG2, ARG3, ARG4) \
|
||||||
|
(*(FUNC))((ARG1), (ARG2), (ARG3), (ARG4))
|
||||||
|
|
||||||
|
/* NPN_GetProperty */
|
||||||
|
typedef bool (* NP_LOADDS NPN_GetPropertyUPP)(NPP npp, NPObject *obj, NPIdentifier propertyName, NPVariant *result);
|
||||||
|
#define NewNPN_GetPropertyProc(FUNC) \
|
||||||
|
((NPN_GetPropertyUPP) (FUNC))
|
||||||
|
#define CallNPN_GetPropertyProc(FUNC, ARG1, ARG2, ARG3, ARG4) \
|
||||||
|
(*(FUNC))((ARG1), (ARG2), (ARG3), (ARG4))
|
||||||
|
|
||||||
|
/* NPN_SetProperty */
|
||||||
|
typedef bool (* NP_LOADDS NPN_SetPropertyUPP)(NPP npp, NPObject *obj, NPIdentifier propertyName, const NPVariant *value);
|
||||||
|
#define NewNPN_SetPropertyProc(FUNC) \
|
||||||
|
((NPN_SetPropertyUPP) (FUNC))
|
||||||
|
#define CallNPN_SetPropertyProc(FUNC, ARG1, ARG2, ARG3, ARG4) \
|
||||||
|
(*(FUNC))((ARG1), (ARG2), (ARG3), (ARG4))
|
||||||
|
|
||||||
|
/* NPN_RemoveProperty */
|
||||||
|
typedef bool (* NP_LOADDS NPN_RemovePropertyUPP)(NPP npp, NPObject *obj, NPIdentifier propertyName);
|
||||||
|
#define NewNPN_RemovePropertyProc(FUNC) \
|
||||||
|
((NPN_RemovePropertyUPP) (FUNC))
|
||||||
|
#define CallNPN_RemovePropertyProc(FUNC, ARG1, ARG2, ARG3) \
|
||||||
|
(*(FUNC))((ARG1), (ARG2), (ARG3))
|
||||||
|
|
||||||
|
/* NPN_HasProperty */
|
||||||
|
typedef bool (* NP_LOADDS NPN_HasPropertyUPP)(NPP npp, NPObject *obj, NPIdentifier propertyName);
|
||||||
|
#define NewNPN_HasPropertyProc(FUNC) \
|
||||||
|
((NPN_HasPropertyUPP) (FUNC))
|
||||||
|
#define CallNPN_HasPropertyProc(FUNC, ARG1, ARG2, ARG3) \
|
||||||
|
(*(FUNC))((ARG1), (ARG2), (ARG3))
|
||||||
|
|
||||||
|
/* NPN_HasMethod */
|
||||||
|
typedef bool (* NP_LOADDS NPN_HasMethodUPP)(NPP npp, NPObject *obj, NPIdentifier propertyName);
|
||||||
|
#define NewNPN_HasMethodProc(FUNC) \
|
||||||
|
((NPN_HasMethodUPP) (FUNC))
|
||||||
|
#define CallNPN_HasMethodProc(FUNC, ARG1, ARG2, ARG3) \
|
||||||
|
(*(FUNC))((ARG1), (ARG2), (ARG3))
|
||||||
|
|
||||||
|
/* NPN_ReleaseVariantValue */
|
||||||
|
typedef void (* NP_LOADDS NPN_ReleaseVariantValueUPP)(NPVariant *variant);
|
||||||
|
#define NewNPN_ReleaseVariantValueProc(FUNC) \
|
||||||
|
((NPN_ReleaseVariantValueUPP) (FUNC))
|
||||||
|
#define CallNPN_ReleaseVariantValueProc(FUNC, ARG1) \
|
||||||
|
(*(FUNC))((ARG1))
|
||||||
|
|
||||||
|
/* NPN_SetException */
|
||||||
|
typedef void (* NP_LOADDS NPN_SetExceptionUPP)(NPObject *obj, const NPUTF8 *message);
|
||||||
|
#define NewNPN_SetExceptionProc(FUNC) \
|
||||||
|
((NPN_SetExceptionUPP) (FUNC))
|
||||||
|
#define CallNPN_SetExceptionProc(FUNC, ARG1, ARG2) \
|
||||||
|
(*(FUNC))((ARG1), (ARG2))
|
||||||
|
|
||||||
|
/* NPN_PushPopupsEnabledStateUPP */
|
||||||
|
typedef bool (* NP_LOADDS NPN_PushPopupsEnabledStateUPP)(NPP npp, NPBool enabled);
|
||||||
|
#define NewNPN_PushPopupsEnabledStateProc(FUNC) \
|
||||||
|
((NPN_PushPopupsEnabledStateUPP) (FUNC))
|
||||||
|
#define CallNPN_PushPopupsEnabledStateProc(FUNC, ARG1, ARG2) \
|
||||||
|
(*(FUNC))((ARG1), (ARG2))
|
||||||
|
|
||||||
|
/* NPN_PopPopupsEnabledState */
|
||||||
|
typedef bool (* NP_LOADDS NPN_PopPopupsEnabledStateUPP)(NPP npp);
|
||||||
|
#define NewNPN_PopPopupsEnabledStateProc(FUNC) \
|
||||||
|
((NPN_PopPopupsEnabledStateUPP) (FUNC))
|
||||||
|
#define CallNPN_PopPopupsEnabledStateProc(FUNC, ARG1) \
|
||||||
|
(*(FUNC))((ARG1))
|
||||||
|
|
||||||
|
/* NPN_Enumerate */
|
||||||
|
typedef bool (* NP_LOADDS NPN_EnumerateUPP)(NPP npp, NPObject *obj, NPIdentifier **identifier, uint32_t *count);
|
||||||
|
#define NewNPN_EnumerateProc(FUNC) \
|
||||||
|
((NPN_EnumerateUPP) (FUNC))
|
||||||
|
#define CallNPN_EnumerateProc(FUNC, ARG1, ARG2, ARG3, ARG4) \
|
||||||
|
(*(FUNC))((ARG1), (ARG2), (ARG3), (ARG4))
|
||||||
|
|
||||||
|
/* NPN_PluginThreadAsyncCall */
|
||||||
|
typedef void (* NP_LOADDS NPN_PluginThreadAsyncCallUPP)(NPP instance, void (*func)(void *), void *userData);
|
||||||
|
#define NewNPN_PluginThreadAsyncCallProc(FUNC) \
|
||||||
|
((NPN_PluginThreadAsyncCallUPP) (FUNC))
|
||||||
|
#define CallNPN_PluginThreadAsyncCallProc(FUNC, ARG1, ARG2, ARG3) \
|
||||||
|
(*(FUNC))((ARG1), (ARG2), (ARG3))
|
||||||
|
|
||||||
|
/* NPN_Construct */
|
||||||
|
typedef bool (* NP_LOADDS NPN_ConstructUPP)(NPP npp, NPObject* obj, const NPVariant *args, uint32_t argCount, NPVariant *result);
|
||||||
|
#define NewNPN_ConstructProc(FUNC) \
|
||||||
|
((NPN_ConstructUPP) (FUNC))
|
||||||
|
#define CallNPN_ConstructProc(FUNC, ARG1, ARG2, ARG3, ARG4, ARG5) \
|
||||||
|
(*(FUNC))((ARG1), (ARG2), (ARG3), (ARG4), (ARG5))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/******************************************************************************************
|
||||||
|
* The actual plugin function table definitions
|
||||||
|
*******************************************************************************************/
|
||||||
|
|
||||||
|
typedef struct _NPPluginFuncs {
|
||||||
|
uint16 size;
|
||||||
|
uint16 version;
|
||||||
|
NPP_NewUPP newp;
|
||||||
|
NPP_DestroyUPP destroy;
|
||||||
|
NPP_SetWindowUPP setwindow;
|
||||||
|
NPP_NewStreamUPP newstream;
|
||||||
|
NPP_DestroyStreamUPP destroystream;
|
||||||
|
NPP_StreamAsFileUPP asfile;
|
||||||
|
NPP_WriteReadyUPP writeready;
|
||||||
|
NPP_WriteUPP write;
|
||||||
|
NPP_PrintUPP print;
|
||||||
|
NPP_HandleEventUPP event;
|
||||||
|
NPP_URLNotifyUPP urlnotify;
|
||||||
|
JRIGlobalRef javaClass;
|
||||||
|
NPP_GetValueUPP getvalue;
|
||||||
|
NPP_SetValueUPP setvalue;
|
||||||
|
} NPPluginFuncs;
|
||||||
|
|
||||||
|
typedef struct _NPNetscapeFuncs {
|
||||||
|
uint16 size;
|
||||||
|
uint16 version;
|
||||||
|
NPN_GetURLUPP geturl;
|
||||||
|
NPN_PostURLUPP posturl;
|
||||||
|
NPN_RequestReadUPP requestread;
|
||||||
|
NPN_NewStreamUPP newstream;
|
||||||
|
NPN_WriteUPP write;
|
||||||
|
NPN_DestroyStreamUPP destroystream;
|
||||||
|
NPN_StatusUPP status;
|
||||||
|
NPN_UserAgentUPP uagent;
|
||||||
|
NPN_MemAllocUPP memalloc;
|
||||||
|
NPN_MemFreeUPP memfree;
|
||||||
|
NPN_MemFlushUPP memflush;
|
||||||
|
NPN_ReloadPluginsUPP reloadplugins;
|
||||||
|
NPN_GetJavaEnvUPP getJavaEnv;
|
||||||
|
NPN_GetJavaPeerUPP getJavaPeer;
|
||||||
|
NPN_GetURLNotifyUPP geturlnotify;
|
||||||
|
NPN_PostURLNotifyUPP posturlnotify;
|
||||||
|
NPN_GetValueUPP getvalue;
|
||||||
|
NPN_SetValueUPP setvalue;
|
||||||
|
NPN_InvalidateRectUPP invalidaterect;
|
||||||
|
NPN_InvalidateRegionUPP invalidateregion;
|
||||||
|
NPN_ForceRedrawUPP forceredraw;
|
||||||
|
NPN_GetStringIdentifierUPP getstringidentifier;
|
||||||
|
NPN_GetStringIdentifiersUPP getstringidentifiers;
|
||||||
|
NPN_GetIntIdentifierUPP getintidentifier;
|
||||||
|
NPN_IdentifierIsStringUPP identifierisstring;
|
||||||
|
NPN_UTF8FromIdentifierUPP utf8fromidentifier;
|
||||||
|
NPN_IntFromIdentifierUPP intfromidentifier;
|
||||||
|
NPN_CreateObjectUPP createobject;
|
||||||
|
NPN_RetainObjectUPP retainobject;
|
||||||
|
NPN_ReleaseObjectUPP releaseobject;
|
||||||
|
NPN_InvokeUPP invoke;
|
||||||
|
NPN_InvokeDefaultUPP invokeDefault;
|
||||||
|
NPN_EvaluateUPP evaluate;
|
||||||
|
NPN_GetPropertyUPP getproperty;
|
||||||
|
NPN_SetPropertyUPP setproperty;
|
||||||
|
NPN_RemovePropertyUPP removeproperty;
|
||||||
|
NPN_HasPropertyUPP hasproperty;
|
||||||
|
NPN_HasMethodUPP hasmethod;
|
||||||
|
NPN_ReleaseVariantValueUPP releasevariantvalue;
|
||||||
|
NPN_SetExceptionUPP setexception;
|
||||||
|
NPN_PushPopupsEnabledStateUPP pushpopupsenabledstate;
|
||||||
|
NPN_PopPopupsEnabledStateUPP poppopupsenabledstate;
|
||||||
|
NPN_EnumerateUPP enumerate;
|
||||||
|
NPN_PluginThreadAsyncCallUPP pluginthreadasynccall;
|
||||||
|
NPN_ConstructUPP construct;
|
||||||
|
} NPNetscapeFuncs;
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef XP_MACOSX
|
||||||
|
/******************************************************************************************
|
||||||
|
* Mac platform-specific plugin glue stuff
|
||||||
|
*******************************************************************************************/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Main entry point of the plugin.
|
||||||
|
* This routine will be called when the plugin is loaded. The function
|
||||||
|
* tables are passed in and the plugin fills in the NPPluginFuncs table
|
||||||
|
* and NPPShutdownUPP for Netscape's use.
|
||||||
|
*/
|
||||||
|
typedef NPError (* NP_LOADDS NPP_MainEntryUPP)(NPNetscapeFuncs*, NPPluginFuncs*, NPP_ShutdownUPP*);
|
||||||
|
#define NewNPP_MainEntryProc(FUNC) \
|
||||||
|
((NPP_MainEntryUPP) (FUNC))
|
||||||
|
#define CallNPP_MainEntryProc(FUNC, netscapeFunc, pluginFunc, shutdownUPP) \
|
||||||
|
(*(FUNC))((netscapeFunc), (pluginFunc), (shutdownUPP))
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Mac OS X version(s) of NP_GetMIMEDescription(const char *)
|
||||||
|
* These can be called to retreive MIME information from the plugin dynamically
|
||||||
|
*
|
||||||
|
* Note: For compatibility with Quicktime, BPSupportedMIMEtypes is another way
|
||||||
|
* to get mime info from the plugin only on OSX and may not be supported
|
||||||
|
* in furture version -- use NP_GetMIMEDescription instead
|
||||||
|
*/
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
kBPSupportedMIMETypesStructVers_1 = 1
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct _BPSupportedMIMETypes
|
||||||
|
{
|
||||||
|
SInt32 structVersion; /* struct version */
|
||||||
|
Handle typeStrings; /* STR# formated handle, allocated by plug-in */
|
||||||
|
Handle infoStrings; /* STR# formated handle, allocated by plug-in */
|
||||||
|
} BPSupportedMIMETypes;
|
||||||
|
OSErr BP_GetSupportedMIMETypes(BPSupportedMIMETypes *mimeInfo, UInt32 flags);
|
||||||
|
|
||||||
|
/* NP_GetMIMEDescription */
|
||||||
|
#define NP_GETMIMEDESCRIPTION_NAME "NP_GetMIMEDescription"
|
||||||
|
typedef const char* (* NP_LOADDS NP_GetMIMEDescriptionUPP)();
|
||||||
|
#define NewNP_GetMIMEDescEntryProc(FUNC) \
|
||||||
|
((NP_GetMIMEDescriptionUPP) (FUNC))
|
||||||
|
#define CallNP_GetMIMEDescEntryProc(FUNC) \
|
||||||
|
(*(FUNC))()
|
||||||
|
|
||||||
|
/* BP_GetSupportedMIMETypes */
|
||||||
|
typedef OSErr (* NP_LOADDS BP_GetSupportedMIMETypesUPP)(BPSupportedMIMETypes*, UInt32);
|
||||||
|
#define NewBP_GetSupportedMIMETypesEntryProc(FUNC) \
|
||||||
|
((BP_GetSupportedMIMETypesUPP) (FUNC))
|
||||||
|
#define CallBP_GetMIMEDescEntryProc(FUNC, mimeInfo, flags) \
|
||||||
|
(*(FUNC))((mimeInfo), (flags))
|
||||||
|
|
||||||
|
#endif /* XP_MACOSX */
|
||||||
|
|
||||||
|
#if defined(_WINDOWS)
|
||||||
|
#define OSCALL WINAPI
|
||||||
|
#else
|
||||||
|
#if defined(__OS2__)
|
||||||
|
#define OSCALL _System
|
||||||
|
#else
|
||||||
|
#define OSCALL
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(XP_UNIX)
|
||||||
|
/* GCC 3.3 and later support the visibility attribute. */
|
||||||
|
#if defined(__GNUC__) && \
|
||||||
|
((__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3))
|
||||||
|
#define NP_VISIBILITY_DEFAULT __attribute__((visibility("default")))
|
||||||
|
#else
|
||||||
|
#define NP_VISIBILITY_DEFAULT
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define NP_EXPORT(__type) NP_VISIBILITY_DEFAULT __type
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined( _WINDOWS ) || defined (__OS2__)
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* plugin meta member functions */
|
||||||
|
#if defined(__OS2__)
|
||||||
|
|
||||||
|
typedef struct _NPPluginData { /* Alternate OS2 Plugin interface */
|
||||||
|
char *pMimeTypes;
|
||||||
|
char *pFileExtents;
|
||||||
|
char *pFileOpenTemplate;
|
||||||
|
char *pProductName;
|
||||||
|
char *pProductDescription;
|
||||||
|
unsigned long dwProductVersionMS;
|
||||||
|
unsigned long dwProductVersionLS;
|
||||||
|
} NPPluginData;
|
||||||
|
|
||||||
|
NPError OSCALL NP_GetPluginData(NPPluginData * pPluginData);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
NPError OSCALL NP_GetEntryPoints(NPPluginFuncs* pFuncs);
|
||||||
|
|
||||||
|
NPError OSCALL NP_Initialize(NPNetscapeFuncs* pFuncs);
|
||||||
|
|
||||||
|
NPError OSCALL NP_Shutdown();
|
||||||
|
|
||||||
|
char* NP_GetMIMEDescription();
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* _WINDOWS || __OS2__ */
|
||||||
|
|
||||||
|
#if defined(__OS2__)
|
||||||
|
#pragma pack()
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef XP_UNIX
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* plugin meta member functions */
|
||||||
|
|
||||||
|
NP_EXPORT(char*) NP_GetMIMEDescription(void);
|
||||||
|
NP_EXPORT(NPError) NP_Initialize(NPNetscapeFuncs*, NPPluginFuncs*);
|
||||||
|
NP_EXPORT(NPError) NP_Shutdown(void);
|
||||||
|
NP_EXPORT(NPError) NP_GetValue(void *future, NPPVariable aVariable, void *aValue);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* XP_UNIX */
|
||||||
|
|
||||||
|
#endif /* _NPUPP_H_ */
|
252
engine/libs/npapi/obsolete/protypes.h
Normal file
252
engine/libs/npapi/obsolete/protypes.h
Normal file
|
@ -0,0 +1,252 @@
|
||||||
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
* http://www.mozilla.org/MPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||||
|
* for the specific language governing rights and limitations under the
|
||||||
|
* License.
|
||||||
|
*
|
||||||
|
* The Original Code is the Netscape Portable Runtime (NSPR).
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* Netscape Communications Corporation.
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 1998-2000
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This header typedefs the old 'native' types to the new PR<type>s.
|
||||||
|
* These definitions are scheduled to be eliminated at the earliest
|
||||||
|
* possible time. The NSPR API is implemented and documented using
|
||||||
|
* the new definitions.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if !defined(PROTYPES_H)
|
||||||
|
#define PROTYPES_H
|
||||||
|
|
||||||
|
typedef PRUintn uintn;
|
||||||
|
#ifndef _XP_Core_
|
||||||
|
typedef PRIntn intn;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* It is trickier to define uint, int8, uint8, int16, uint16,
|
||||||
|
* int32, uint32, int64, and uint64 because some of these int
|
||||||
|
* types are defined by standard header files on some platforms.
|
||||||
|
* Our strategy here is to include all such standard headers
|
||||||
|
* first, and then define these int types only if they are not
|
||||||
|
* defined by those standard headers.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* BeOS defines all the int types below in its standard header
|
||||||
|
* file SupportDefs.h.
|
||||||
|
*/
|
||||||
|
#ifdef XP_BEOS
|
||||||
|
#include <support/SupportDefs.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* OpenVMS defines all the int types below in its standard
|
||||||
|
* header files ints.h and types.h.
|
||||||
|
*/
|
||||||
|
#ifdef VMS
|
||||||
|
#include <ints.h>
|
||||||
|
#include <types.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* SVR4 typedef of uint is commonly found on UNIX machines.
|
||||||
|
*
|
||||||
|
* On AIX 4.3, sys/inttypes.h (which is included by sys/types.h)
|
||||||
|
* defines the types int8, int16, int32, and int64.
|
||||||
|
*/
|
||||||
|
#ifdef XP_UNIX
|
||||||
|
#include <sys/types.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* model.h on HP-UX defines int8, int16, and int32. */
|
||||||
|
#ifdef HPUX
|
||||||
|
#include <model.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* uint
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if !defined(XP_BEOS) && !defined(VMS) \
|
||||||
|
&& !defined(XP_UNIX) || defined(NTO)
|
||||||
|
typedef PRUintn uint;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* uint64
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if !defined(XP_BEOS) && !defined(VMS)
|
||||||
|
typedef PRUint64 uint64;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* uint32
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if !defined(XP_BEOS) && !defined(VMS)
|
||||||
|
#if !defined(XP_MAC) && !defined(_WIN32) && !defined(XP_OS2) && !defined(NTO)
|
||||||
|
typedef PRUint32 uint32;
|
||||||
|
#else
|
||||||
|
typedef unsigned long uint32;
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* uint16
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if !defined(XP_BEOS) && !defined(VMS)
|
||||||
|
typedef PRUint16 uint16;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* uint8
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if !defined(XP_BEOS) && !defined(VMS)
|
||||||
|
typedef PRUint8 uint8;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* int64
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if !defined(XP_BEOS) && !defined(VMS) \
|
||||||
|
&& !defined(_PR_AIX_HAVE_BSD_INT_TYPES)
|
||||||
|
typedef PRInt64 int64;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* int32
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if !defined(XP_BEOS) && !defined(VMS) \
|
||||||
|
&& !defined(_PR_AIX_HAVE_BSD_INT_TYPES) \
|
||||||
|
&& !defined(HPUX)
|
||||||
|
#if !defined(XP_MAC) && !defined(_WIN32) && !defined(XP_OS2) && !defined(NTO)
|
||||||
|
typedef PRInt32 int32;
|
||||||
|
#else
|
||||||
|
typedef long int32;
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* int16
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if !defined(XP_BEOS) && !defined(VMS) \
|
||||||
|
&& !defined(_PR_AIX_HAVE_BSD_INT_TYPES) \
|
||||||
|
&& !defined(HPUX)
|
||||||
|
typedef PRInt16 int16;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* int8
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if !defined(XP_BEOS) && !defined(VMS) \
|
||||||
|
&& !defined(_PR_AIX_HAVE_BSD_INT_TYPES) \
|
||||||
|
&& !defined(HPUX)
|
||||||
|
typedef PRInt8 int8;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef PRFloat64 float64;
|
||||||
|
typedef PRUptrdiff uptrdiff_t;
|
||||||
|
typedef PRUword uprword_t;
|
||||||
|
typedef PRWord prword_t;
|
||||||
|
|
||||||
|
|
||||||
|
/* Re: prbit.h */
|
||||||
|
#define TEST_BIT PR_TEST_BIT
|
||||||
|
#define SET_BIT PR_SET_BIT
|
||||||
|
#define CLEAR_BIT PR_CLEAR_BIT
|
||||||
|
|
||||||
|
/* Re: prarena.h->plarena.h */
|
||||||
|
#define PRArena PLArena
|
||||||
|
#define PRArenaPool PLArenaPool
|
||||||
|
#define PRArenaStats PLArenaStats
|
||||||
|
#define PR_ARENA_ALIGN PL_ARENA_ALIGN
|
||||||
|
#define PR_INIT_ARENA_POOL PL_INIT_ARENA_POOL
|
||||||
|
#define PR_ARENA_ALLOCATE PL_ARENA_ALLOCATE
|
||||||
|
#define PR_ARENA_GROW PL_ARENA_GROW
|
||||||
|
#define PR_ARENA_MARK PL_ARENA_MARK
|
||||||
|
#define PR_CLEAR_UNUSED PL_CLEAR_UNUSED
|
||||||
|
#define PR_CLEAR_ARENA PL_CLEAR_ARENA
|
||||||
|
#define PR_ARENA_RELEASE PL_ARENA_RELEASE
|
||||||
|
#define PR_COUNT_ARENA PL_COUNT_ARENA
|
||||||
|
#define PR_ARENA_DESTROY PL_ARENA_DESTROY
|
||||||
|
#define PR_InitArenaPool PL_InitArenaPool
|
||||||
|
#define PR_FreeArenaPool PL_FreeArenaPool
|
||||||
|
#define PR_FinishArenaPool PL_FinishArenaPool
|
||||||
|
#define PR_CompactArenaPool PL_CompactArenaPool
|
||||||
|
#define PR_ArenaFinish PL_ArenaFinish
|
||||||
|
#define PR_ArenaAllocate PL_ArenaAllocate
|
||||||
|
#define PR_ArenaGrow PL_ArenaGrow
|
||||||
|
#define PR_ArenaRelease PL_ArenaRelease
|
||||||
|
#define PR_ArenaCountAllocation PL_ArenaCountAllocation
|
||||||
|
#define PR_ArenaCountInplaceGrowth PL_ArenaCountInplaceGrowth
|
||||||
|
#define PR_ArenaCountGrowth PL_ArenaCountGrowth
|
||||||
|
#define PR_ArenaCountRelease PL_ArenaCountRelease
|
||||||
|
#define PR_ArenaCountRetract PL_ArenaCountRetract
|
||||||
|
|
||||||
|
/* Re: prhash.h->plhash.h */
|
||||||
|
#define PRHashEntry PLHashEntry
|
||||||
|
#define PRHashTable PLHashTable
|
||||||
|
#define PRHashNumber PLHashNumber
|
||||||
|
#define PRHashFunction PLHashFunction
|
||||||
|
#define PRHashComparator PLHashComparator
|
||||||
|
#define PRHashEnumerator PLHashEnumerator
|
||||||
|
#define PRHashAllocOps PLHashAllocOps
|
||||||
|
#define PR_NewHashTable PL_NewHashTable
|
||||||
|
#define PR_HashTableDestroy PL_HashTableDestroy
|
||||||
|
#define PR_HashTableRawLookup PL_HashTableRawLookup
|
||||||
|
#define PR_HashTableRawAdd PL_HashTableRawAdd
|
||||||
|
#define PR_HashTableRawRemove PL_HashTableRawRemove
|
||||||
|
#define PR_HashTableAdd PL_HashTableAdd
|
||||||
|
#define PR_HashTableRemove PL_HashTableRemove
|
||||||
|
#define PR_HashTableEnumerateEntries PL_HashTableEnumerateEntries
|
||||||
|
#define PR_HashTableLookup PL_HashTableLookup
|
||||||
|
#define PR_HashTableDump PL_HashTableDump
|
||||||
|
#define PR_HashString PL_HashString
|
||||||
|
#define PR_CompareStrings PL_CompareStrings
|
||||||
|
#define PR_CompareValues PL_CompareValues
|
||||||
|
|
||||||
|
#if defined(XP_MAC)
|
||||||
|
#ifndef TRUE /* Mac standard is lower case true */
|
||||||
|
#define TRUE 1
|
||||||
|
#endif
|
||||||
|
#ifndef FALSE /* Mac standard is lower case false */
|
||||||
|
#define FALSE 0
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* !defined(PROTYPES_H) */
|
300
engine/libs/npapi/prcpucfg.h
Normal file
300
engine/libs/npapi/prcpucfg.h
Normal file
|
@ -0,0 +1,300 @@
|
||||||
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
* http://www.mozilla.org/MPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||||
|
* for the specific language governing rights and limitations under the
|
||||||
|
* License.
|
||||||
|
*
|
||||||
|
* The Original Code is the Netscape Portable Runtime (NSPR).
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* Netscape Communications Corporation.
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 1998-2000
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
#ifndef nspr_cpucfg___
|
||||||
|
#define nspr_cpucfg___
|
||||||
|
|
||||||
|
#ifndef XP_PC
|
||||||
|
#define XP_PC
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WIN32
|
||||||
|
#define WIN32
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WIN95
|
||||||
|
#define WIN95
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define PR_AF_INET6 23 /* same as AF_INET6 */
|
||||||
|
|
||||||
|
#if defined(_M_IX86) || defined(_X86_)
|
||||||
|
|
||||||
|
#define IS_LITTLE_ENDIAN 1
|
||||||
|
#undef IS_BIG_ENDIAN
|
||||||
|
|
||||||
|
#define PR_BYTES_PER_BYTE 1
|
||||||
|
#define PR_BYTES_PER_SHORT 2
|
||||||
|
#define PR_BYTES_PER_INT 4
|
||||||
|
#define PR_BYTES_PER_INT64 8
|
||||||
|
#define PR_BYTES_PER_LONG 4
|
||||||
|
#define PR_BYTES_PER_FLOAT 4
|
||||||
|
#define PR_BYTES_PER_WORD 4
|
||||||
|
#define PR_BYTES_PER_DWORD 8
|
||||||
|
#define PR_BYTES_PER_DOUBLE 8
|
||||||
|
|
||||||
|
#define PR_BITS_PER_BYTE 8
|
||||||
|
#define PR_BITS_PER_SHORT 16
|
||||||
|
#define PR_BITS_PER_INT 32
|
||||||
|
#define PR_BITS_PER_INT64 64
|
||||||
|
#define PR_BITS_PER_LONG 32
|
||||||
|
#define PR_BITS_PER_FLOAT 32
|
||||||
|
#define PR_BITS_PER_WORD 32
|
||||||
|
#define PR_BITS_PER_DWORD 64
|
||||||
|
#define PR_BITS_PER_DOUBLE 64
|
||||||
|
|
||||||
|
#define PR_BITS_PER_BYTE_LOG2 3
|
||||||
|
#define PR_BITS_PER_SHORT_LOG2 4
|
||||||
|
#define PR_BITS_PER_INT_LOG2 5
|
||||||
|
#define PR_BITS_PER_INT64_LOG2 6
|
||||||
|
#define PR_BITS_PER_LONG_LOG2 5
|
||||||
|
#define PR_BITS_PER_FLOAT_LOG2 5
|
||||||
|
#define PR_BITS_PER_WORD_LOG2 5
|
||||||
|
#define PR_BITS_PER_DWORD_LOG2 6
|
||||||
|
#define PR_BITS_PER_DOUBLE_LOG2 6
|
||||||
|
|
||||||
|
#define PR_ALIGN_OF_SHORT 2
|
||||||
|
#define PR_ALIGN_OF_INT 4
|
||||||
|
#define PR_ALIGN_OF_LONG 4
|
||||||
|
#define PR_ALIGN_OF_INT64 8
|
||||||
|
#define PR_ALIGN_OF_FLOAT 4
|
||||||
|
#define PR_ALIGN_OF_WORD 4
|
||||||
|
#define PR_ALIGN_OF_DWORD 8
|
||||||
|
#define PR_ALIGN_OF_DOUBLE 4
|
||||||
|
#define PR_ALIGN_OF_POINTER 4
|
||||||
|
|
||||||
|
#define PR_BYTES_PER_WORD_LOG2 2
|
||||||
|
#define PR_BYTES_PER_DWORD_LOG2 2
|
||||||
|
|
||||||
|
#elif defined(_ALPHA_)
|
||||||
|
|
||||||
|
#define IS_LITTLE_ENDIAN 1
|
||||||
|
#undef IS_BIG_ENDIAN
|
||||||
|
|
||||||
|
#define PR_BYTES_PER_BYTE 1
|
||||||
|
#define PR_BYTES_PER_SHORT 2
|
||||||
|
#define PR_BYTES_PER_INT 4
|
||||||
|
#define PR_BYTES_PER_INT64 8
|
||||||
|
#define PR_BYTES_PER_LONG 4
|
||||||
|
#define PR_BYTES_PER_FLOAT 4
|
||||||
|
#define PR_BYTES_PER_DOUBLE 8
|
||||||
|
#define PR_BYTES_PER_WORD 4
|
||||||
|
#define PR_BYTES_PER_DWORD 8
|
||||||
|
|
||||||
|
#define PR_BITS_PER_BYTE 8
|
||||||
|
#define PR_BITS_PER_SHORT 16
|
||||||
|
#define PR_BITS_PER_INT 32
|
||||||
|
#define PR_BITS_PER_INT64 64
|
||||||
|
#define PR_BITS_PER_LONG 32
|
||||||
|
#define PR_BITS_PER_FLOAT 32
|
||||||
|
#define PR_BITS_PER_DOUBLE 64
|
||||||
|
#define PR_BITS_PER_WORD 32
|
||||||
|
|
||||||
|
#define PR_BITS_PER_BYTE_LOG2 3
|
||||||
|
#define PR_BITS_PER_SHORT_LOG2 4
|
||||||
|
#define PR_BITS_PER_INT_LOG2 5
|
||||||
|
#define PR_BITS_PER_INT64_LOG2 6
|
||||||
|
#define PR_BITS_PER_LONG_LOG2 5
|
||||||
|
#define PR_BITS_PER_FLOAT_LOG2 5
|
||||||
|
#define PR_BITS_PER_DOUBLE_LOG2 6
|
||||||
|
#define PR_BITS_PER_WORD_LOG2 5
|
||||||
|
|
||||||
|
#define PR_BYTES_PER_WORD_LOG2 2
|
||||||
|
#define PR_BYTES_PER_DWORD_LOG2 3
|
||||||
|
|
||||||
|
#define PR_ALIGN_OF_SHORT 2
|
||||||
|
#define PR_ALIGN_OF_INT 4
|
||||||
|
#define PR_ALIGN_OF_LONG 4
|
||||||
|
#define PR_ALIGN_OF_INT64 8
|
||||||
|
#define PR_ALIGN_OF_FLOAT 4
|
||||||
|
#define PR_ALIGN_OF_DOUBLE 8
|
||||||
|
#define PR_ALIGN_OF_POINTER 4
|
||||||
|
|
||||||
|
#elif defined(_AMD64_)
|
||||||
|
|
||||||
|
#define IS_LITTLE_ENDIAN 1
|
||||||
|
#undef IS_BIG_ENDIAN
|
||||||
|
#define IS_64
|
||||||
|
|
||||||
|
#define PR_BYTES_PER_BYTE 1
|
||||||
|
#define PR_BYTES_PER_SHORT 2
|
||||||
|
#define PR_BYTES_PER_INT 4
|
||||||
|
#define PR_BYTES_PER_INT64 8
|
||||||
|
#define PR_BYTES_PER_LONG 4
|
||||||
|
#define PR_BYTES_PER_FLOAT 4
|
||||||
|
#define PR_BYTES_PER_WORD 8
|
||||||
|
#define PR_BYTES_PER_DWORD 8
|
||||||
|
#define PR_BYTES_PER_DOUBLE 8
|
||||||
|
|
||||||
|
#define PR_BITS_PER_BYTE 8
|
||||||
|
#define PR_BITS_PER_SHORT 16
|
||||||
|
#define PR_BITS_PER_INT 32
|
||||||
|
#define PR_BITS_PER_INT64 64
|
||||||
|
#define PR_BITS_PER_LONG 32
|
||||||
|
#define PR_BITS_PER_FLOAT 32
|
||||||
|
#define PR_BITS_PER_WORD 64
|
||||||
|
#define PR_BITS_PER_DWORD 64
|
||||||
|
#define PR_BITS_PER_DOUBLE 64
|
||||||
|
|
||||||
|
#define PR_BITS_PER_BYTE_LOG2 3
|
||||||
|
#define PR_BITS_PER_SHORT_LOG2 4
|
||||||
|
#define PR_BITS_PER_INT_LOG2 5
|
||||||
|
#define PR_BITS_PER_INT64_LOG2 6
|
||||||
|
#define PR_BITS_PER_LONG_LOG2 5
|
||||||
|
#define PR_BITS_PER_FLOAT_LOG2 5
|
||||||
|
#define PR_BITS_PER_WORD_LOG2 6
|
||||||
|
#define PR_BITS_PER_DWORD_LOG2 6
|
||||||
|
#define PR_BITS_PER_DOUBLE_LOG2 6
|
||||||
|
|
||||||
|
#define PR_ALIGN_OF_SHORT 2
|
||||||
|
#define PR_ALIGN_OF_INT 4
|
||||||
|
#define PR_ALIGN_OF_LONG 4
|
||||||
|
#define PR_ALIGN_OF_INT64 8
|
||||||
|
#define PR_ALIGN_OF_FLOAT 4
|
||||||
|
#define PR_ALIGN_OF_WORD 8
|
||||||
|
#define PR_ALIGN_OF_DWORD 8
|
||||||
|
#define PR_ALIGN_OF_DOUBLE 8
|
||||||
|
#define PR_ALIGN_OF_POINTER 8
|
||||||
|
|
||||||
|
#define PR_BYTES_PER_WORD_LOG2 3
|
||||||
|
#define PR_BYTES_PER_DWORD_LOG2 3
|
||||||
|
|
||||||
|
#elif defined(_IA64_)
|
||||||
|
|
||||||
|
#define IS_LITTLE_ENDIAN 1
|
||||||
|
#undef IS_BIG_ENDIAN
|
||||||
|
#define IS_64
|
||||||
|
|
||||||
|
#define PR_BYTES_PER_BYTE 1
|
||||||
|
#define PR_BYTES_PER_SHORT 2
|
||||||
|
#define PR_BYTES_PER_INT 4
|
||||||
|
#define PR_BYTES_PER_INT64 8
|
||||||
|
#define PR_BYTES_PER_LONG 4
|
||||||
|
#define PR_BYTES_PER_FLOAT 4
|
||||||
|
#define PR_BYTES_PER_WORD 8
|
||||||
|
#define PR_BYTES_PER_DWORD 8
|
||||||
|
#define PR_BYTES_PER_DOUBLE 8
|
||||||
|
|
||||||
|
#define PR_BITS_PER_BYTE 8
|
||||||
|
#define PR_BITS_PER_SHORT 16
|
||||||
|
#define PR_BITS_PER_INT 32
|
||||||
|
#define PR_BITS_PER_INT64 64
|
||||||
|
#define PR_BITS_PER_LONG 32
|
||||||
|
#define PR_BITS_PER_FLOAT 32
|
||||||
|
#define PR_BITS_PER_WORD 64
|
||||||
|
#define PR_BITS_PER_DWORD 64
|
||||||
|
#define PR_BITS_PER_DOUBLE 64
|
||||||
|
|
||||||
|
#define PR_BITS_PER_BYTE_LOG2 3
|
||||||
|
#define PR_BITS_PER_SHORT_LOG2 4
|
||||||
|
#define PR_BITS_PER_INT_LOG2 5
|
||||||
|
#define PR_BITS_PER_INT64_LOG2 6
|
||||||
|
#define PR_BITS_PER_LONG_LOG2 5
|
||||||
|
#define PR_BITS_PER_FLOAT_LOG2 5
|
||||||
|
#define PR_BITS_PER_WORD_LOG2 6
|
||||||
|
#define PR_BITS_PER_DWORD_LOG2 6
|
||||||
|
#define PR_BITS_PER_DOUBLE_LOG2 6
|
||||||
|
|
||||||
|
#define PR_ALIGN_OF_SHORT 2
|
||||||
|
#define PR_ALIGN_OF_INT 4
|
||||||
|
#define PR_ALIGN_OF_LONG 4
|
||||||
|
#define PR_ALIGN_OF_INT64 8
|
||||||
|
#define PR_ALIGN_OF_FLOAT 4
|
||||||
|
#define PR_ALIGN_OF_WORD 8
|
||||||
|
#define PR_ALIGN_OF_DWORD 8
|
||||||
|
#define PR_ALIGN_OF_DOUBLE 8
|
||||||
|
#define PR_ALIGN_OF_POINTER 8
|
||||||
|
|
||||||
|
#define PR_BYTES_PER_WORD_LOG2 3
|
||||||
|
#define PR_BYTES_PER_DWORD_LOG2 3
|
||||||
|
|
||||||
|
#else /* defined(_M_IX86) || defined(_X86_) */
|
||||||
|
|
||||||
|
#error unknown processor architecture
|
||||||
|
|
||||||
|
#endif /* defined(_M_IX86) || defined(_X86_) */
|
||||||
|
|
||||||
|
#ifndef HAVE_LONG_LONG
|
||||||
|
#define HAVE_LONG_LONG
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef NO_NSPR_10_SUPPORT
|
||||||
|
|
||||||
|
#define BYTES_PER_BYTE PR_BYTES_PER_BYTE
|
||||||
|
#define BYTES_PER_SHORT PR_BYTES_PER_SHORT
|
||||||
|
#define BYTES_PER_INT PR_BYTES_PER_INT
|
||||||
|
#define BYTES_PER_INT64 PR_BYTES_PER_INT64
|
||||||
|
#define BYTES_PER_LONG PR_BYTES_PER_LONG
|
||||||
|
#define BYTES_PER_FLOAT PR_BYTES_PER_FLOAT
|
||||||
|
#define BYTES_PER_DOUBLE PR_BYTES_PER_DOUBLE
|
||||||
|
#define BYTES_PER_WORD PR_BYTES_PER_WORD
|
||||||
|
#define BYTES_PER_DWORD PR_BYTES_PER_DWORD
|
||||||
|
|
||||||
|
#define BITS_PER_BYTE PR_BITS_PER_BYTE
|
||||||
|
#define BITS_PER_SHORT PR_BITS_PER_SHORT
|
||||||
|
#define BITS_PER_INT PR_BITS_PER_INT
|
||||||
|
#define BITS_PER_INT64 PR_BITS_PER_INT64
|
||||||
|
#define BITS_PER_LONG PR_BITS_PER_LONG
|
||||||
|
#define BITS_PER_FLOAT PR_BITS_PER_FLOAT
|
||||||
|
#define BITS_PER_DOUBLE PR_BITS_PER_DOUBLE
|
||||||
|
#define BITS_PER_WORD PR_BITS_PER_WORD
|
||||||
|
|
||||||
|
#define BITS_PER_BYTE_LOG2 PR_BITS_PER_BYTE_LOG2
|
||||||
|
#define BITS_PER_SHORT_LOG2 PR_BITS_PER_SHORT_LOG2
|
||||||
|
#define BITS_PER_INT_LOG2 PR_BITS_PER_INT_LOG2
|
||||||
|
#define BITS_PER_INT64_LOG2 PR_BITS_PER_INT64_LOG2
|
||||||
|
#define BITS_PER_LONG_LOG2 PR_BITS_PER_LONG_LOG2
|
||||||
|
#define BITS_PER_FLOAT_LOG2 PR_BITS_PER_FLOAT_LOG2
|
||||||
|
#define BITS_PER_DOUBLE_LOG2 PR_BITS_PER_DOUBLE_LOG2
|
||||||
|
#define BITS_PER_WORD_LOG2 PR_BITS_PER_WORD_LOG2
|
||||||
|
|
||||||
|
#define ALIGN_OF_SHORT PR_ALIGN_OF_SHORT
|
||||||
|
#define ALIGN_OF_INT PR_ALIGN_OF_INT
|
||||||
|
#define ALIGN_OF_LONG PR_ALIGN_OF_LONG
|
||||||
|
#define ALIGN_OF_INT64 PR_ALIGN_OF_INT64
|
||||||
|
#define ALIGN_OF_FLOAT PR_ALIGN_OF_FLOAT
|
||||||
|
#define ALIGN_OF_DOUBLE PR_ALIGN_OF_DOUBLE
|
||||||
|
#define ALIGN_OF_POINTER PR_ALIGN_OF_POINTER
|
||||||
|
#define ALIGN_OF_WORD PR_ALIGN_OF_WORD
|
||||||
|
|
||||||
|
#define BYTES_PER_WORD_LOG2 PR_BYTES_PER_WORD_LOG2
|
||||||
|
#define BYTES_PER_DWORD_LOG2 PR_BYTES_PER_DWORD_LOG2
|
||||||
|
#define WORDS_PER_DWORD_LOG2 PR_WORDS_PER_DWORD_LOG2
|
||||||
|
|
||||||
|
#endif /* NO_NSPR_10_SUPPORT */
|
||||||
|
|
||||||
|
#endif /* nspr_cpucfg___ */
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue