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)
|
||||
angles = vec3_origin;
|
||||
if (mod)
|
||||
#ifndef CLIENTONLY
|
||||
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
|
||||
{
|
||||
memset(&tr, 0, sizeof(tr));
|
||||
|
@ -859,7 +868,7 @@ vec3_t listener_up;
|
|||
VectorCopy(axis+3, listener_right);
|
||||
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;
|
||||
|
||||
|
|
|
@ -19,6 +19,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|||
*/
|
||||
|
||||
#include "quakedef.h"
|
||||
#include "fs.h"
|
||||
|
||||
void CL_FinishTimeDemo (void);
|
||||
float demtime;
|
||||
|
@ -883,7 +884,6 @@ void CL_Record_f (void)
|
|||
{
|
||||
int c;
|
||||
char name[MAX_OSPATH];
|
||||
int namelen = sizeof(name);
|
||||
sizebuf_t buf;
|
||||
char buf_data[MAX_QWMSGLEN];
|
||||
int n, i, j;
|
||||
|
@ -910,7 +910,6 @@ void CL_Record_f (void)
|
|||
if (cls.demorecording)
|
||||
CL_Stop_f();
|
||||
|
||||
namelen -= strlen(com_gamedir)+1;
|
||||
if (c == 2) //user supplied a name
|
||||
{
|
||||
fname = Cmd_Argv(1);
|
||||
|
@ -1651,6 +1650,8 @@ void CL_QTVPoll (void)
|
|||
|
||||
else if (!strcmp(s, "BEGIN"))
|
||||
{
|
||||
while (*colon && *(unsigned char*)colon <= ' ')
|
||||
colon++;
|
||||
if (*colon)
|
||||
Con_Printf("streaming \"%s\" from qtv\n", colon);
|
||||
else
|
||||
|
@ -1737,6 +1738,171 @@ char *strchrrev(char *str, char chr)
|
|||
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)
|
||||
{
|
||||
qboolean raw=0;
|
||||
|
@ -1754,80 +1920,8 @@ void CL_QTVPlay_f (void)
|
|||
|
||||
if (*connrequest == '#')
|
||||
{
|
||||
char buffer[1024];
|
||||
char *s;
|
||||
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);
|
||||
//#FILENAME is a local system path
|
||||
CL_ParseQTVDescriptor(VFSOS_Open(connrequest+1, "rt"), connrequest+1);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -1595,6 +1595,8 @@ void CL_LinkPacketEntities (void)
|
|||
|
||||
autorotate = anglemod(100*servertime);
|
||||
|
||||
CLCSQC_DeltaStart();
|
||||
|
||||
for (newpnum=0 ; newpnum<pack->num_entities ; newpnum++)
|
||||
{
|
||||
state = &pack->entities[newpnum];
|
||||
|
@ -1606,6 +1608,10 @@ void CL_LinkPacketEntities (void)
|
|||
Con_Printf("Too many visible entities\n");
|
||||
break;
|
||||
}
|
||||
|
||||
if (CLCSQC_DeltaUpdate(state))
|
||||
continue;
|
||||
|
||||
ent = &cl_visedicts[cl_numvisedicts];
|
||||
#ifdef Q3SHADERS
|
||||
ent->forcedshader = NULL;
|
||||
|
@ -1762,12 +1768,11 @@ void CL_LinkPacketEntities (void)
|
|||
AngleVectors(angles, ent->axis[0], ent->axis[1], ent->axis[2]);
|
||||
VectorInverse(ent->axis[1]);
|
||||
|
||||
if (ent->keynum <= MAX_CLIENTS
|
||||
#ifdef NQPROT
|
||||
&& cls.protocol == CP_QUAKEWORLD
|
||||
#endif
|
||||
)
|
||||
ent->keynum += MAX_EDICTS;
|
||||
if (ent->keynum <= MAX_CLIENTS)
|
||||
{
|
||||
if (!cl.nolocalplayer[0])
|
||||
ent->keynum += MAX_EDICTS;
|
||||
}
|
||||
|
||||
if (state->tagentity)
|
||||
{ //ent is attached to a tag, rotate this ent accordingly.
|
||||
|
@ -1869,6 +1874,7 @@ void CL_LinkPacketEntities (void)
|
|||
|
||||
}
|
||||
}
|
||||
CLCSQC_DeltaEnd();
|
||||
}
|
||||
#else
|
||||
|
||||
|
@ -2752,6 +2758,9 @@ void CL_LinkPlayers (void)
|
|||
vec3_t angles;
|
||||
float *org;
|
||||
|
||||
if (!cl.worldmodel || cl.worldmodel->needload)
|
||||
return;
|
||||
|
||||
playertime = realtime - cls.latency + 0.02;
|
||||
if (playertime > realtime)
|
||||
playertime = realtime;
|
||||
|
@ -2763,7 +2772,13 @@ void CL_LinkPlayers (void)
|
|||
; j++, info++, state++)
|
||||
{
|
||||
if (state->messagenum != cl.validsequence)
|
||||
{
|
||||
CLCSQC_DeltaPlayer(j, NULL);
|
||||
continue; // not present this frame
|
||||
}
|
||||
|
||||
if (CLCSQC_DeltaPlayer(j, state))
|
||||
continue;
|
||||
|
||||
// spawn light flashes, even ones coming from invisible objects
|
||||
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[3] = alpha;
|
||||
|
||||
ent.framestate.g[FS_REG].frame[0] = cl.viewent[r_refdef.currentplayernum].framestate.g[FS_REG].frame[0];
|
||||
ent.framestate.g[FS_REG].frame[1] = oldframe[r_refdef.currentplayernum];
|
||||
|
||||
if (ent.framestate.g[FS_REG].frame[0] != prevframe[r_refdef.currentplayernum])
|
||||
#ifdef HLCLIENT
|
||||
if (!CLHL_AnimateViewEntity(&ent))
|
||||
#endif
|
||||
{
|
||||
oldframe[r_refdef.currentplayernum] = ent.framestate.g[FS_REG].frame[1] = prevframe[r_refdef.currentplayernum];
|
||||
lerptime[r_refdef.currentplayernum] = realtime;
|
||||
}
|
||||
prevframe[r_refdef.currentplayernum] = ent.framestate.g[FS_REG].frame[0];
|
||||
ent.framestate.g[FS_REG].frame[0] = cl.viewent[r_refdef.currentplayernum].framestate.g[FS_REG].frame[0];
|
||||
ent.framestate.g[FS_REG].frame[1] = oldframe[r_refdef.currentplayernum];
|
||||
|
||||
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);
|
||||
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];
|
||||
lerptime[r_refdef.currentplayernum] = realtime;
|
||||
}
|
||||
prevframe[r_refdef.currentplayernum] = ent.framestate.g[FS_REG].frame[0];
|
||||
|
||||
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_WEAPONMODEL 4 // only draw through eyes
|
||||
#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++)
|
||||
{
|
||||
// CL_BaseMove (&independantphysics[plnum], plnum, (msecstouse - independantphysics[plnum].msec), wantfps);
|
||||
|
|
|
@ -1504,7 +1504,7 @@ void CL_CheckServerInfo(void)
|
|||
cl.ktprogametime = 0;
|
||||
|
||||
Cvar_ForceCheatVars(cls.allow_semicheats, cls.allow_cheats);
|
||||
|
||||
Validation_Apply_Ruleset();
|
||||
|
||||
if (oldallowshaders != cls.allow_shaders)
|
||||
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 (cls.demoplayback)
|
||||
if (cls.demoplayback || cls.protocol != CP_QUAKEWORLD)
|
||||
{
|
||||
Info_Print (cl.serverinfo);
|
||||
}
|
||||
|
@ -3385,10 +3385,10 @@ void Host_Frame (double time)
|
|||
if (cls.protocol == CP_QUAKE3)
|
||||
S_ExtraUpdate();
|
||||
else
|
||||
S_Update (r_origin, vpn, vright, vup);
|
||||
S_UpdateListener (r_origin, vpn, vright, vup, false);
|
||||
}
|
||||
else
|
||||
S_Update (vec3_origin, vec3_origin, vec3_origin, vec3_origin);
|
||||
S_UpdateListener (vec3_origin, vec3_origin, vec3_origin, vec3_origin, false);
|
||||
|
||||
CDAudio_Update();
|
||||
|
||||
|
@ -3420,6 +3420,8 @@ void Host_Frame (double time)
|
|||
|
||||
static void simple_crypt(char *buf, int len)
|
||||
{
|
||||
if (!(*buf & 128))
|
||||
return;
|
||||
while (len--)
|
||||
*buf++ ^= 0xff;
|
||||
}
|
||||
|
@ -3626,6 +3628,7 @@ void Host_Init (quakeparms_t *parms)
|
|||
|
||||
Cvar_ApplyLatches(CVAR_RENDERERLATCH);
|
||||
|
||||
#ifndef NPQTV
|
||||
//-1 means 'never set'
|
||||
if (qrenderer == -1 && *vid_renderer.string)
|
||||
{
|
||||
|
@ -3641,6 +3644,7 @@ void Host_Init (quakeparms_t *parms)
|
|||
|
||||
if (qrenderer == QR_NONE)
|
||||
Con_Printf("Use the setrenderer command to use a gui\n");
|
||||
#endif
|
||||
|
||||
#ifdef VM_UI
|
||||
UI_Init();
|
||||
|
@ -3695,14 +3699,12 @@ to run quit through here before the final handoff to the sys code.
|
|||
*/
|
||||
void Host_Shutdown(void)
|
||||
{
|
||||
static qboolean isdown = false;
|
||||
|
||||
if (isdown)
|
||||
if (!host_initialized)
|
||||
{
|
||||
Sys_Printf ("recursive shutdown\n");
|
||||
return;
|
||||
}
|
||||
isdown = true;
|
||||
host_initialized = false;
|
||||
|
||||
#ifdef VM_UI
|
||||
UI_Stop();
|
||||
|
@ -3713,6 +3715,7 @@ void Host_Shutdown(void)
|
|||
CDAudio_Shutdown ();
|
||||
S_Shutdown();
|
||||
IN_Shutdown ();
|
||||
R_ShutdownRenderer();
|
||||
if (VID_DeInit)
|
||||
VID_DeInit();
|
||||
#ifndef CLIENTONLY
|
||||
|
@ -3720,11 +3723,16 @@ void Host_Shutdown(void)
|
|||
#else
|
||||
NET_Shutdown ();
|
||||
#endif
|
||||
FS_Shutdown();
|
||||
|
||||
Cvar_Shutdown();
|
||||
Validation_FlushFileList();
|
||||
|
||||
Cmd_Shutdown();
|
||||
Memory_DeInit();
|
||||
|
||||
memset(&sv, 0, sizeof(sv));
|
||||
memset(&svs, 0, sizeof(svs));
|
||||
}
|
||||
|
||||
#ifdef CLIENTONLY
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
|
||||
#define SS_GENERICQUAKEWORLD 0
|
||||
#define SS_FTESERVER 1 //hehehe...
|
||||
#define SS_QUAKE2 2 //useful (and cool). Could be blamed for swamping.
|
||||
#define SS_NETQUAKE 4
|
||||
|
|
|
@ -452,12 +452,10 @@ void CL_DownloadFinished(char *filename, char *tempname)
|
|||
{
|
||||
if (strncmp(tempname,"skins/",6))
|
||||
{
|
||||
FS_CreatePath(filename, FS_GAME);
|
||||
FS_Rename(tempname, filename, FS_GAME);
|
||||
}
|
||||
else
|
||||
{
|
||||
FS_CreatePath(filename+6, FS_SKINS);
|
||||
FS_Rename(tempname+6, filename+6, FS_SKINS);
|
||||
}
|
||||
}
|
||||
|
@ -834,6 +832,14 @@ int CL_LoadModels(int stage)
|
|||
}
|
||||
#endif
|
||||
|
||||
#ifdef HLCLIENT
|
||||
if (atstage())
|
||||
{
|
||||
CLHL_LoadClientGame();
|
||||
endstage();
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef PEXT_CSQC
|
||||
if (atstage())
|
||||
{
|
||||
|
@ -890,8 +896,12 @@ int CL_LoadModels(int stage)
|
|||
else
|
||||
CSQC_LoadResource(cl.model_name[i], "model");
|
||||
#endif
|
||||
|
||||
cl.model_precache[i] = Mod_ForName (cl.model_name[i], false);
|
||||
#ifdef Q2CLIENT
|
||||
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();
|
||||
|
||||
S_ExtraUpdate();
|
||||
|
@ -3334,7 +3344,7 @@ void CL_NewTranslation (int slot)
|
|||
}
|
||||
else
|
||||
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)
|
||||
top = cl_teamtopcolor;
|
||||
|
@ -4961,6 +4971,18 @@ void CL_ParseServerMessage (void)
|
|||
case svcfte_pointparticles1:
|
||||
CLDP_ParsePointParticles(true);
|
||||
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)
|
||||
{
|
||||
SV_UnspawnServer();
|
||||
Host_EndGame ("CLQ2_ParseServerMessage: Bad server message");
|
||||
break;
|
||||
}
|
||||
|
@ -5490,6 +5511,8 @@ void CLNQ_ParseServerMessage (void)
|
|||
if (cls.state == ca_active)
|
||||
Skin_Find (&cl.players[i]);
|
||||
|
||||
if (i == cl.playernum[0])
|
||||
Skin_FlushPlayers();
|
||||
Sbar_Changed ();
|
||||
CL_NewTranslation (i);
|
||||
}
|
||||
|
|
|
@ -715,6 +715,9 @@ void CL_PredictMovePNum (int pnum)
|
|||
//these are to make svc_viewentity work better
|
||||
float *vel;
|
||||
float *org;
|
||||
|
||||
cl.nolocalplayer[pnum] = false;
|
||||
|
||||
#ifdef Q2CLIENT
|
||||
if (cls.protocol == CP_QUAKE2)
|
||||
{
|
||||
|
@ -775,6 +778,7 @@ void CL_PredictMovePNum (int pnum)
|
|||
{
|
||||
if (cl.viewentity[pnum] < cl.maxlerpents)
|
||||
{
|
||||
cl.nolocalplayer[pnum] = true;
|
||||
// Con_Printf("Using lerped pos\n");
|
||||
org = cl.lerpents[cl.viewentity[pnum]].origin;
|
||||
vel = vec3_origin;
|
||||
|
@ -822,6 +826,7 @@ void CL_PredictMovePNum (int pnum)
|
|||
//no player states?? put the view on an ent
|
||||
if (cl.playernum[pnum] < cl.maxlerpents)
|
||||
{
|
||||
cl.nolocalplayer[pnum] = true;
|
||||
// Con_Printf("Using lerped pos\n");
|
||||
org = cl.lerpents[cl.playernum[pnum]+1].origin;
|
||||
vel = vec3_origin;
|
||||
|
|
|
@ -1317,6 +1317,12 @@ void SCR_DrawFPS (void)
|
|||
lastfps = 1/host_frametime;
|
||||
lastframetime = t;
|
||||
break;
|
||||
#ifdef RGLQUAKE
|
||||
case 5:
|
||||
if (qrenderer == QR_OPENGL)
|
||||
GLR_FrameTimeGraph((int)(1000.0*host_frametime));
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
|
||||
if (usemsecs)
|
||||
|
@ -1742,8 +1748,6 @@ int Image_WritePNG (char *filename, int compression, qbyte *pixels, int width, i
|
|||
#endif
|
||||
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
|
||||
*/
|
||||
|
@ -1870,7 +1874,6 @@ SCR_ScreenShot_f
|
|||
void SCR_ScreenShot_f (void)
|
||||
{
|
||||
char pcxname[80];
|
||||
char checkname[MAX_OSPATH];
|
||||
int i;
|
||||
vfsfile_t *vfs;
|
||||
|
||||
|
@ -1903,7 +1906,7 @@ void SCR_ScreenShot_f (void)
|
|||
pcxname[17] = (i%1000)/100 + '0';
|
||||
pcxname[18] = (i%100)/10 + '0';
|
||||
pcxname[19] = (i%10) + '0';
|
||||
sprintf (checkname, "%s/%s", com_gamedir, pcxname);
|
||||
|
||||
if (!(vfs = FS_OpenVFS(pcxname, "rb", FS_GAMEONLY)))
|
||||
break; // file doesn't exist
|
||||
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
|
||||
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
|
||||
int playernum[MAX_SPLITS];
|
||||
qboolean nolocalplayer[MAX_SPLITS];
|
||||
int splitclients; //we are running this many clients split screen.
|
||||
|
||||
// refresh related state
|
||||
|
@ -804,6 +805,28 @@ void CL_QTVDemos_f (void);
|
|||
void CL_DemoJump_f(void);
|
||||
void CL_ProgressDemoTime(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
|
||||
|
|
|
@ -464,8 +464,6 @@ qboolean CLQ3_SystemInfoChanged(char *str)
|
|||
Info_SetValueForStarKey (svs.info, "*gamedir", value, MAX_SERVERINFO_STRING);
|
||||
#endif
|
||||
COM_FlushFSCache();
|
||||
|
||||
Shader_Init();
|
||||
}
|
||||
|
||||
if (usingpure)
|
||||
|
@ -607,7 +605,7 @@ void CLQ3_ParseGameState(void)
|
|||
{
|
||||
char buffer[2048];
|
||||
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);
|
||||
}
|
||||
|
||||
|
|
|
@ -894,6 +894,9 @@ The input line scrolls horizontally if typing goes beyond the right edge
|
|||
*/
|
||||
void Con_DrawInput (void)
|
||||
{
|
||||
#ifdef _WIN32
|
||||
extern qboolean ActiveApp;
|
||||
#endif
|
||||
int y;
|
||||
int i;
|
||||
int p;
|
||||
|
@ -999,6 +1002,9 @@ void Con_DrawInput (void)
|
|||
}
|
||||
}
|
||||
|
||||
#ifdef _WIN32
|
||||
if (ActiveApp)
|
||||
#endif
|
||||
if (((int)(realtime*con_cursorspeed)&1))
|
||||
{
|
||||
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 *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;
|
||||
png_structp png;
|
||||
|
@ -702,12 +702,10 @@ int Image_WritePNG (char *filename, int compression, qbyte *pixels, int width, i
|
|||
png_structp png_ptr;
|
||||
png_infop info_ptr;
|
||||
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;
|
||||
|
||||
|
||||
if (!(fp = fopen (name, "wb")))
|
||||
{
|
||||
COM_CreatePath (name);
|
||||
|
@ -1146,7 +1144,7 @@ void screenshotJPEG(char *filename, int compression, qbyte *screendata, int scre
|
|||
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 i, j, length;
|
||||
|
|
|
@ -401,7 +401,7 @@ void IN_UpdateClipCursor (void)
|
|||
IN_ShowMouse
|
||||
===========
|
||||
*/
|
||||
void IN_ShowMouse (void)
|
||||
static void IN_ShowMouse (void)
|
||||
{
|
||||
|
||||
if (!mouseshowtoggle)
|
||||
|
@ -417,7 +417,7 @@ void IN_ShowMouse (void)
|
|||
IN_HideMouse
|
||||
===========
|
||||
*/
|
||||
void IN_HideMouse (void)
|
||||
static void IN_HideMouse (void)
|
||||
{
|
||||
|
||||
if (mouseshowtoggle)
|
||||
|
@ -433,12 +433,12 @@ void IN_HideMouse (void)
|
|||
IN_ActivateMouse
|
||||
===========
|
||||
*/
|
||||
void IN_ActivateMouse (void)
|
||||
static void IN_ActivateMouse (void)
|
||||
{
|
||||
|
||||
mouseactivatetoggle = true;
|
||||
|
||||
if (mouseinitialized)
|
||||
if (mouseinitialized && !mouseactive)
|
||||
{
|
||||
#ifdef AVAIL_DINPUT
|
||||
#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
|
||||
===========
|
||||
*/
|
||||
void IN_DeactivateMouse (void)
|
||||
static void IN_DeactivateMouse (void)
|
||||
{
|
||||
|
||||
mouseactivatetoggle = false;
|
||||
|
||||
if (mouseinitialized)
|
||||
if (mouseinitialized && mouseactive)
|
||||
{
|
||||
#ifdef AVAIL_DINPUT
|
||||
#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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
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
|
||||
BOOL CALLBACK IN_EnumerateDevices(LPCDIDEVICEINSTANCE inst, LPVOID parm)
|
||||
{
|
||||
|
@ -1315,7 +1367,15 @@ void IN_MouseEvent (int mstate)
|
|||
{
|
||||
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
|
||||
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)
|
||||
{
|
||||
mfwt = (int)m_forcewheel_threshold.value;
|
||||
while(mouse->wheeldelta <= -mfwt)
|
||||
if (mfwt)
|
||||
{
|
||||
Key_Event (K_MWHEELUP, true);
|
||||
Key_Event (K_MWHEELUP, false);
|
||||
mouse->wheeldelta += mfwt;
|
||||
}
|
||||
while(mouse->wheeldelta <= -mfwt)
|
||||
{
|
||||
Key_Event (K_MWHEELUP, true);
|
||||
Key_Event (K_MWHEELUP, false);
|
||||
mouse->wheeldelta += mfwt;
|
||||
}
|
||||
|
||||
while(mouse->wheeldelta >= mfwt)
|
||||
{
|
||||
Key_Event (K_MWHEELDOWN, true);
|
||||
Key_Event (K_MWHEELDOWN, false);
|
||||
mouse->wheeldelta -= mfwt;
|
||||
while(mouse->wheeldelta >= mfwt)
|
||||
{
|
||||
Key_Event (K_MWHEELDOWN, true);
|
||||
Key_Event (K_MWHEELDOWN, false);
|
||||
mouse->wheeldelta -= mfwt;
|
||||
}
|
||||
}
|
||||
|
||||
if (m_forcewheel.value < 2)
|
||||
|
@ -1460,10 +1523,6 @@ static void ProcessMouse(mouse_t *mouse, usercmd_t *cmd, int pnum)
|
|||
|
||||
if (!cmd)
|
||||
{
|
||||
if (mx || my)
|
||||
{
|
||||
SetCursorPos (window_center_x, window_center_y);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -402,6 +402,7 @@ void Con_ExecuteLine(console_t *con, char *line)
|
|||
Cbuf_AddText ("\n", RESTRICT_LOCAL);
|
||||
if (!waschat || con_echochat.value)
|
||||
Con_Printf ("]%s\n",line);
|
||||
|
||||
if (cls.state == ca_disconnected)
|
||||
SCR_UpdateScreen (); // force an update, because the command
|
||||
// may take some time
|
||||
|
@ -1372,7 +1373,7 @@ qboolean Key_MouseShouldBeFree(void)
|
|||
|
||||
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;
|
||||
}
|
||||
if (key_dest == key_console)
|
||||
|
|
|
@ -1643,17 +1643,24 @@ void M_Menu_Main_f (void)
|
|||
if (!p)
|
||||
return;
|
||||
MC_AddPicture(mainm, 0, 173, "pics/m_main_logo");
|
||||
#ifndef CLIENTONLY
|
||||
MC_AddSelectablePicture(mainm, 68, 13, "pics/m_main_game");
|
||||
#endif
|
||||
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");
|
||||
|
||||
#ifndef CLIENTONLY
|
||||
b = MC_AddConsoleCommand (mainm, 68, 13, "", "menu_single\n");
|
||||
mainm->selecteditem = (menuoption_t *)b;
|
||||
b->common.width = 12*20;
|
||||
b->common.height = 20;
|
||||
#endif
|
||||
b = MC_AddConsoleCommand (mainm, 68, 53, "", "menu_multi\n");
|
||||
#ifdef CLIENTONLY
|
||||
mainm->selecteditem = (menuoption_t *)b;
|
||||
#endif
|
||||
b->common.width = 12*20;
|
||||
b->common.height = 20;
|
||||
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.height = 20;
|
||||
|
||||
mainm->cursoritem = (menuoption_t *)MC_AddCursor(mainm, 42, 13);
|
||||
mainm->cursoritem = (menuoption_t *)MC_AddCursor(mainm, 42, mainm->selecteditem->common.posy);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -120,7 +120,6 @@ void WinAmp_Think(void)
|
|||
#endif
|
||||
void Media_Seek (float time)
|
||||
{
|
||||
soundcardinfo_t *sc;
|
||||
#ifdef WINAMP
|
||||
if (media_hijackwinamp.value)
|
||||
{
|
||||
|
@ -135,18 +134,7 @@ void Media_Seek (float time)
|
|||
}
|
||||
}
|
||||
#endif
|
||||
for (sc = sndcardinfo; sc; sc=sc->next)
|
||||
{
|
||||
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.
|
||||
}
|
||||
S_Music_Seek(time);
|
||||
}
|
||||
|
||||
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.
|
||||
void Media_Clear (void)
|
||||
{
|
||||
sfx_t *s;
|
||||
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);
|
||||
}
|
||||
}
|
||||
S_Music_Clear(NULL);
|
||||
}
|
||||
|
||||
qboolean fakecdactive;
|
||||
|
@ -250,6 +222,12 @@ void Media_FakeTrack(int i, qboolean loop)
|
|||
{
|
||||
char trackname[512];
|
||||
|
||||
if (i > 999 || i < 0)
|
||||
{
|
||||
fakecdactive = false;
|
||||
return;
|
||||
}
|
||||
|
||||
sprintf(trackname, "sound/cdtracks/track%03i.ogg", i);
|
||||
if (COM_FCheckExists(trackname))
|
||||
{
|
||||
|
@ -259,6 +237,8 @@ void Media_FakeTrack(int i, qboolean loop)
|
|||
fakecdactive = 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.
|
||||
|
@ -414,11 +394,11 @@ void M_Media_Draw (void)
|
|||
char compleatenamepath[MAX_OSPATH];
|
||||
char compleatenamename[MAX_OSPATH];
|
||||
qboolean compleatenamemultiple;
|
||||
int Com_CompleatenameCallback(char *name, int size, void *data)
|
||||
int Com_CompleatenameCallback(const char *name, int size, void *data)
|
||||
{
|
||||
if (*compleatenamename)
|
||||
compleatenamemultiple = true;
|
||||
strcpy(compleatenamename, name);
|
||||
Q_strncpyz(compleatenamename, name, sizeof(compleatenamename));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -727,7 +707,7 @@ void Media_LoadTrackNames (char *listname)
|
|||
}
|
||||
|
||||
//safeprints only.
|
||||
char *Media_NextTrack(void)
|
||||
char *Media_NextTrack(int musicchannelnum)
|
||||
{
|
||||
#ifdef WINAMP
|
||||
if (media_hijackwinamp.value)
|
||||
|
@ -885,15 +865,6 @@ struct cin_s {
|
|||
roq_info *roqfilm;
|
||||
} roq;
|
||||
|
||||
sfxcache_t *moviesoundbuffer;
|
||||
sfx_t mediaaudio;
|
||||
/* = {
|
||||
"movieaudio",
|
||||
{NULL, true},
|
||||
NULL
|
||||
};
|
||||
*/
|
||||
|
||||
float filmstarttime;
|
||||
float nextframetime;
|
||||
float filmlasttime;
|
||||
|
@ -1173,7 +1144,7 @@ qboolean Media_Roq_DecodeFrame (cin_t *cin, qboolean nosound)
|
|||
cin->outdata = cin->framedata;
|
||||
|
||||
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)
|
||||
{
|
||||
/* FILE *f;
|
||||
|
@ -1260,10 +1231,6 @@ cin_t *Media_Static_TryLoad(char *name)
|
|||
|
||||
char fullname[MAX_QPATH];
|
||||
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);
|
||||
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)
|
||||
{
|
||||
char xulprofiledir[MAX_OSPATH];
|
||||
cin_t *cin;
|
||||
|
||||
if (!strncmp(name, "http://", 7))
|
||||
|
@ -1585,7 +1553,8 @@ cin_t *Media_Gecko_TryLoad(char *name)
|
|||
return NULL;
|
||||
|
||||
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);
|
||||
posgk_release(&opts->baseobj);
|
||||
|
@ -1636,23 +1605,9 @@ qboolean Media_PlayingFullScreen(void)
|
|||
|
||||
void Media_ShutdownCin(cin_t *cin)
|
||||
{
|
||||
soundcardinfo_t *sc;
|
||||
sfx_t *s;
|
||||
|
||||
if (!cin)
|
||||
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)
|
||||
cin->shutdown(cin);
|
||||
|
||||
|
|
|
@ -112,6 +112,7 @@ typedef struct {
|
|||
menuedit_t *nameedit;
|
||||
menuedit_t *teamedit;
|
||||
menuedit_t *skinedit;
|
||||
menucombo_t *modeledit;
|
||||
int topcolour;
|
||||
int lowercolour;
|
||||
|
||||
|
@ -175,6 +176,93 @@ qboolean SetupMenuColour (union menuoption_s *option,struct menu_s *menu, int ke
|
|||
}
|
||||
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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
int mgt;
|
||||
setupmenu_t *info;
|
||||
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;
|
||||
m_state = m_complex;
|
||||
|
||||
|
|
|
@ -165,6 +165,7 @@ void M_Audio_StartSound (struct menu_s *menu)
|
|||
vec3_t org;
|
||||
audiomenuinfo_t *info = menu->data;
|
||||
soundcardinfo_t *sc;
|
||||
vec3_t mat[4];
|
||||
|
||||
static float lasttime;
|
||||
|
||||
|
@ -189,10 +190,12 @@ void M_Audio_StartSound (struct menu_s *menu)
|
|||
|
||||
if (lasttime+0.5 < Sys_DoubleTime())
|
||||
{
|
||||
S_GetListenerInfo(mat[0], mat[1], mat[2], mat[3]);
|
||||
|
||||
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[1] = listener_origin[1] + 2*(listener_right[1]*(info->testsoundsource->common.posx-320/2) + listener_forward[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[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] = mat[0][1] + 2*(mat[1][1]*(info->testsoundsource->common.posx-320/2) + mat[1][1]*(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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -223,10 +223,10 @@ void M_Menu_SinglePlayer_f (void)
|
|||
else
|
||||
{
|
||||
#ifdef CLIENTONLY
|
||||
MC_AddBox (menu, 60, 10*8, 23, 4);
|
||||
|
||||
MC_AddWhiteText(menu, 92, 12*8, "QuakeWorld is for", false);
|
||||
MC_AddWhiteText(menu, 92, 13*8, "Internet play only", false);
|
||||
|
||||
MC_AddBox (menu, 60, 10*8, 23, 4);
|
||||
#else
|
||||
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;
|
||||
}
|
||||
|
||||
static int DemoAddItem(char *filename, int size, void *parm)
|
||||
static int DemoAddItem(const char *filename, int size, void *parm)
|
||||
{
|
||||
int extnum;
|
||||
demomenu_t *menu = parm;
|
||||
|
|
|
@ -843,26 +843,31 @@ void M_Menu_Quit_f (void)
|
|||
{
|
||||
int i;
|
||||
|
||||
if (1)
|
||||
{
|
||||
CL_Disconnect ();
|
||||
Sys_Quit ();
|
||||
}
|
||||
else
|
||||
{
|
||||
key_dest = key_menu;
|
||||
m_state = m_complex;
|
||||
|
||||
key_dest = key_menu;
|
||||
m_state = m_complex;
|
||||
|
||||
M_RemoveMenu(&quitmenu);
|
||||
memset(&quitmenu, 0, sizeof(quitmenu));
|
||||
M_AddMenuFront(&quitmenu);
|
||||
quitmenu.exclusive = false;
|
||||
quitmenu.key = MC_Quit_Key;
|
||||
M_RemoveMenu(&quitmenu);
|
||||
memset(&quitmenu, 0, sizeof(quitmenu));
|
||||
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, 92, quitMessage[i*4+1], false);
|
||||
MC_AddWhiteText(&quitmenu, 64, 100, quitMessage[i*4+2], false);
|
||||
MC_AddWhiteText(&quitmenu, 64, 108, quitMessage[i*4+3], false);
|
||||
MC_AddBox (&quitmenu, 56, 76, 24, 4);
|
||||
MC_AddWhiteText(&quitmenu, 64, 84, quitMessage[i*4+0], 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, 108, quitMessage[i*4+3], false);
|
||||
MC_AddBox (&quitmenu, 56, 76, 24, 4);
|
||||
}
|
||||
}
|
||||
|
||||
//=============================================================================
|
||||
|
|
|
@ -133,6 +133,7 @@ extern void FNC(Mod_NowLoadExternal) (void);
|
|||
|
||||
extern void FNC(Mod_Think) (void);
|
||||
extern int FNC(Mod_SkinForName) (struct model_s *model, char *name);
|
||||
extern int FNC(Mod_FrameForName) (struct model_s *model, char *name);
|
||||
|
||||
#undef FNC
|
||||
|
||||
|
@ -221,6 +222,7 @@ typedef struct {
|
|||
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_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);
|
||||
|
|
|
@ -37,7 +37,7 @@ typedef int SOCKET;
|
|||
cvar_t slist_cacheinfo = SCVAR("slist_cacheinfo", "0"); //this proves dangerous, memory wise.
|
||||
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);
|
||||
int CL_ReadServerInfo(char *msg, int servertype, qboolean favorite);
|
||||
|
||||
|
@ -83,27 +83,34 @@ int slist_customkeys;
|
|||
#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.
|
||||
SOCKET pollsocketsUDP[POLLUDPSOCKETS];
|
||||
int lastpollsockUDP;
|
||||
#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.
|
||||
int lastpollsockUDP4;
|
||||
|
||||
#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
|
||||
#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.
|
||||
SOCKET pollsocketsIPX[POLLIPXSOCKETS];
|
||||
#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.
|
||||
int lastpollsockIPX;
|
||||
#else
|
||||
#define POLLIPXSOCKETS 0
|
||||
#endif
|
||||
|
||||
#define FIRSTIPXSOCKET (0)
|
||||
#define FIRSTUDP4SOCKET (FIRSTIPXSOCKET+POLLIPXSOCKETS)
|
||||
#define FIRSTUDP6SOCKET (FIRSTUDP4SOCKET+POLLUDP4SOCKETS)
|
||||
#define POLLTOTALSOCKETS (FIRSTUDP6SOCKET+POLLUDP6SOCKETS)
|
||||
SOCKET pollsocketsList[POLLTOTALSOCKETS];
|
||||
|
||||
void Master_SetupSockets(void)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < POLLUDPSOCKETS; i++)
|
||||
pollsocketsUDP[i] = INVALID_SOCKET;
|
||||
#ifdef USEIPX
|
||||
for (i = 0; i < POLLIPXSOCKETS; i++)
|
||||
pollsocketsIPX[i] = INVALID_SOCKET;
|
||||
#endif
|
||||
for (i = 0; i < POLLTOTALSOCKETS; i++)
|
||||
pollsocketsList[i] = INVALID_SOCKET;
|
||||
}
|
||||
|
||||
void Master_HideServer(serverinfo_t *server)
|
||||
|
@ -587,6 +594,8 @@ void Master_AddMaster (char *address, int type, char *description)
|
|||
adr.type = NA_BROADCAST_IP;
|
||||
if (adr.type == NA_IPX)
|
||||
adr.type = NA_BROADCAST_IPX;
|
||||
if (adr.type == NA_IPV6)
|
||||
adr.type = NA_BROADCAST_IP6;
|
||||
}
|
||||
|
||||
for (mast = master; mast; mast = mast->next)
|
||||
|
@ -785,24 +794,38 @@ void NET_SendPollPacket(int len, void *data, netadr_t to)
|
|||
lastpollsockIPX++;
|
||||
if (lastpollsockIPX>=POLLIPXSOCKETS)
|
||||
lastpollsockIPX=0;
|
||||
if (pollsocketsIPX[lastpollsockIPX]==INVALID_SOCKET)
|
||||
pollsocketsIPX[lastpollsockIPX] = IPX_OpenSocket(PORT_ANY, true);
|
||||
if (pollsocketsIPX[lastpollsockIPX]==INVALID_SOCKET)
|
||||
if (pollsocketsList[FIRSTIPXSOCKET+lastpollsockIPX]==INVALID_SOCKET)
|
||||
pollsocketsList[FIRSTIPXSOCKET+lastpollsockIPX] = IPX_OpenSocket(PORT_ANY, true);
|
||||
if (pollsocketsList[FIRSTIPXSOCKET+lastpollsockIPX]==INVALID_SOCKET)
|
||||
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
|
||||
#endif
|
||||
if (((struct sockaddr*)&addr)->sa_family == AF_INET)
|
||||
{
|
||||
lastpollsockUDP++;
|
||||
if (lastpollsockUDP>=POLLUDPSOCKETS)
|
||||
lastpollsockUDP=0;
|
||||
if (pollsocketsUDP[lastpollsockUDP]==INVALID_SOCKET)
|
||||
pollsocketsUDP[lastpollsockUDP] = UDP_OpenSocket(PORT_ANY, true);
|
||||
if (pollsocketsUDP[lastpollsockUDP]==INVALID_SOCKET)
|
||||
lastpollsockUDP4++;
|
||||
if (lastpollsockUDP4>=POLLUDP4SOCKETS)
|
||||
lastpollsockUDP4=0;
|
||||
if (pollsocketsList[FIRSTUDP4SOCKET+lastpollsockUDP4]==INVALID_SOCKET)
|
||||
pollsocketsList[FIRSTUDP4SOCKET+lastpollsockUDP4] = UDP_OpenSocket(PORT_ANY, true);
|
||||
if (pollsocketsList[FIRSTUDP4SOCKET+lastpollsockUDP4]==INVALID_SOCKET)
|
||||
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
|
||||
return;
|
||||
|
@ -831,18 +854,13 @@ int NET_CheckPollSockets(void)
|
|||
SOCKET usesocket;
|
||||
char adr[MAX_ADR_SIZE];
|
||||
|
||||
for (sock = 0; sock < POLLUDPSOCKETS+POLLIPXSOCKETS; sock++)
|
||||
for (sock = 0; sock < POLLTOTALSOCKETS; sock++)
|
||||
{
|
||||
int ret;
|
||||
struct sockaddr_qstorage from;
|
||||
int fromlen;
|
||||
|
||||
#ifdef USEIPX
|
||||
if (sock >= POLLUDPSOCKETS)
|
||||
usesocket = pollsocketsIPX[sock-POLLUDPSOCKETS];
|
||||
else
|
||||
#endif
|
||||
usesocket = pollsocketsUDP[sock];
|
||||
usesocket = pollsocketsList[sock];
|
||||
|
||||
if (usesocket == INVALID_SOCKET)
|
||||
continue;
|
||||
|
@ -900,10 +918,18 @@ int NET_CheckPollSockets(void)
|
|||
CL_ReadServerInfo(MSG_ReadString(), MT_SINGLEQ2, false);
|
||||
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;
|
||||
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;
|
||||
}
|
||||
#endif
|
||||
|
@ -915,10 +941,18 @@ int NET_CheckPollSockets(void)
|
|||
}
|
||||
#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...
|
||||
{
|
||||
msg_readcount = c+18-1;
|
||||
CL_MasterListParse(SS_DARKPLACES, true);
|
||||
CL_MasterListParse(NA_IP, SS_DARKPLACES, true);
|
||||
continue;
|
||||
}
|
||||
if (!strcmp(s, "infoResponse")) //parse a bit more...
|
||||
|
@ -926,6 +960,16 @@ int NET_CheckPollSockets(void)
|
|||
CL_ReadServerInfo(MSG_ReadString(), MT_SINGLEDP, false);
|
||||
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;
|
||||
|
||||
c = MSG_ReadByte ();
|
||||
|
@ -938,7 +982,7 @@ int NET_CheckPollSockets(void)
|
|||
|
||||
if (c == M2C_MASTER_REPLY) //qw master reply.
|
||||
{
|
||||
CL_MasterListParse(false, false);
|
||||
CL_MasterListParse(NA_IP, SS_GENERICQUAKEWORLD, false);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
@ -976,7 +1020,7 @@ int NET_CheckPollSockets(void)
|
|||
// 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
|
||||
continue;
|
||||
|
@ -1196,10 +1240,10 @@ void MasterInfo_WriteServers(void)
|
|||
char *typename;
|
||||
master_t *mast;
|
||||
serverinfo_t *server;
|
||||
FILE *mf, *qws;
|
||||
vfsfile_t *mf, *qws;
|
||||
char adr[MAX_ADR_SIZE];
|
||||
|
||||
mf = fopen("masters.txt", "wt");
|
||||
mf = FS_OpenVFS("masters.txt", "wt", FS_ROOT);
|
||||
if (!mf)
|
||||
{
|
||||
Con_Printf("Couldn't write masters.txt");
|
||||
|
@ -1259,40 +1303,40 @@ void MasterInfo_WriteServers(void)
|
|||
typename = "writeerror";
|
||||
}
|
||||
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
|
||||
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)
|
||||
qws = fopen("servers.txt", "wt");
|
||||
qws = FS_OpenVFS("servers.txt", "wt", FS_ROOT);
|
||||
else
|
||||
qws = NULL;
|
||||
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)
|
||||
{
|
||||
if (server->special & SS_FAVORITE)
|
||||
{
|
||||
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)
|
||||
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)
|
||||
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.
|
||||
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!
|
||||
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)
|
||||
fclose(qws);
|
||||
VFS_CLOSE(qws);
|
||||
|
||||
|
||||
fclose(mf);
|
||||
VFS_CLOSE(mf);
|
||||
}
|
||||
|
||||
//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.
|
||||
void CL_MasterListParse(int type, qboolean slashpad)
|
||||
void CL_MasterListParse(netadrtype_t adrtype, int type, qboolean slashpad)
|
||||
{
|
||||
serverinfo_t *info;
|
||||
serverinfo_t *last, *old;
|
||||
int adrlen;
|
||||
|
||||
int p1, p2;
|
||||
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 ();
|
||||
|
||||
last = firstserver;
|
||||
|
||||
while(msg_readcount+6 < net_message.cursize)
|
||||
while(msg_readcount+adrlen+2 < net_message.cursize)
|
||||
{
|
||||
if (slashpad)
|
||||
{
|
||||
|
@ -1779,11 +1840,17 @@ void CL_MasterListParse(int type, qboolean slashpad)
|
|||
}
|
||||
|
||||
info = Z_Malloc(sizeof(serverinfo_t));
|
||||
info->adr.type = NA_IP;
|
||||
info->adr.address.ip[0] = MSG_ReadByte();
|
||||
info->adr.address.ip[1] = MSG_ReadByte();
|
||||
info->adr.address.ip[2] = MSG_ReadByte();
|
||||
info->adr.address.ip[3] = MSG_ReadByte();
|
||||
info->adr.type = adrtype;
|
||||
switch(adrtype)
|
||||
{
|
||||
case NA_IP:
|
||||
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();
|
||||
p2 = MSG_ReadByte();
|
||||
|
|
|
@ -186,6 +186,19 @@ static void PClassic_ClearParticles (void)
|
|||
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.
|
||||
static void PClassic_DrawParticles(void)
|
||||
{
|
||||
|
@ -198,6 +211,8 @@ static void PClassic_DrawParticles(void)
|
|||
unsigned char *at, theAlpha;
|
||||
vec3_t up, right;
|
||||
float dist, scale, r_partscale=0;
|
||||
|
||||
union c usecolours;
|
||||
#endif
|
||||
|
||||
if (!active_particles)
|
||||
|
@ -218,10 +233,32 @@ static void PClassic_DrawParticles(void)
|
|||
if (!gl_solidparticles.value)
|
||||
qglDepthMask (GL_FALSE);
|
||||
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);
|
||||
#endif
|
||||
|
||||
VectorScale (vup, 1.5, up);
|
||||
VectorScale (vright, 1.5, right);
|
||||
|
||||
classicnumverts = 0;
|
||||
break;
|
||||
#endif
|
||||
#ifdef SWQUAKE
|
||||
|
@ -277,10 +314,36 @@ static void PClassic_DrawParticles(void)
|
|||
{
|
||||
#ifdef RGLQUAKE
|
||||
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
|
||||
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;
|
||||
|
||||
#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];
|
||||
if (p->type == pt_fire)
|
||||
theAlpha = 255 * (6 - p->ramp) / 6;
|
||||
|
@ -290,6 +353,7 @@ static void PClassic_DrawParticles(void)
|
|||
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 (0, 1); qglVertex3f (p->org[0] + right[0] * scale, p->org[1] + right[1] * scale, p->org[2] + right[2] * scale);
|
||||
#endif
|
||||
break;
|
||||
#endif
|
||||
#ifdef SWQUAKE
|
||||
|
@ -356,7 +420,15 @@ static void PClassic_DrawParticles(void)
|
|||
{
|
||||
#ifdef RGLQUAKE
|
||||
case QR_OPENGL:
|
||||
#ifdef USEARRAYS
|
||||
if (classicnumverts)
|
||||
{
|
||||
qglDrawArrays(GL_TRIANGLES, 0, classicnumverts);
|
||||
classicnumverts = 0;
|
||||
}
|
||||
#else
|
||||
qglEnd ();
|
||||
#endif
|
||||
qglDisable (GL_BLEND);
|
||||
qglDepthMask (GL_TRUE);
|
||||
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_lplayernum;
|
||||
static qboolean csqc_isdarkplaces;
|
||||
|
||||
#define CSQCPROGSGROUP "CSQC progs control"
|
||||
cvar_t pr_csmaxedicts = SCVAR("pr_csmaxedicts", "3072");
|
||||
|
@ -140,8 +141,6 @@ typedef enum
|
|||
\
|
||||
globalfunction(ent_update, "CSQC_Ent_Update"); \
|
||||
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(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;
|
||||
if (out->g[FST_BASE].endbone)
|
||||
{ //small optimisation.
|
||||
out->g[FST_BASE].endbone -= 1;
|
||||
|
||||
out->g[FST_BASE].frame[0] = in->v->baseframe;
|
||||
out->g[FST_BASE].frame[1] = in->v->baseframe2;
|
||||
out->g[FST_BASE].lerpfrac = in->v->baselerpfrac;
|
||||
if (rflags & CSQCRF_FRAMETIMESARESTARTTIMES)
|
||||
{
|
||||
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[1] = in->v->baseframe2time;
|
||||
}
|
||||
out->g[FST_BASE].lerpfrac = in->v->baselerpfrac;
|
||||
}
|
||||
|
||||
//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]);
|
||||
VectorInverse(out->axis[1]);
|
||||
|
||||
if (!in->v->scale)
|
||||
if (!in->v->scale || in->v->scale == 1.0f)
|
||||
out->scale = 1;
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
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 oldself = *csqcg.self;
|
||||
|
||||
if (cl.worldmodel)
|
||||
{
|
||||
if (mask & MASK_DELTA)
|
||||
{
|
||||
CL_LinkPlayers ();
|
||||
CL_LinkPacketEntities ();
|
||||
}
|
||||
}
|
||||
|
||||
for (e=1; e < *prinst->parms->sv_num_edicts; 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 ();
|
||||
}
|
||||
if (mask & MASK_DELTA)
|
||||
{
|
||||
CL_LinkPlayers ();
|
||||
CL_LinkPacketEntities ();
|
||||
CL_LinkProjectiles ();
|
||||
CL_UpdateTEnts ();
|
||||
}
|
||||
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)
|
||||
{
|
||||
int efnum = G_FLOAT(OFS_PARM0)-1;
|
||||
csqcedict_t *ent = (csqcedict_t*)G_EDICT(prinst, OFS_PARM1);
|
||||
int efnum;
|
||||
csqcedict_t *ent;
|
||||
float *start = G_VECTOR(OFS_PARM2);
|
||||
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.
|
||||
pe->ParticleTrail(start, end, efnum, NULL);
|
||||
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)
|
||||
{
|
||||
#ifdef Q2BSPS
|
||||
if (sv.worldmodel->fromgame == fg_quake2)
|
||||
if (cl.worldmodel->fromgame == fg_quake2)
|
||||
CMQ2_SetAreaPortalState(G_FLOAT(OFS_PARM0), G_FLOAT(OFS_PARM1));
|
||||
#endif
|
||||
}
|
||||
|
@ -3409,6 +3431,17 @@ static void PF_rotatevectorsbymatrix (progfuncs_t *prinst, struct globalvars_s *
|
|||
VectorNegate(res[1], csqcg.right);
|
||||
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)
|
||||
{
|
||||
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);
|
||||
|
||||
|
||||
if (Mod_SkinForName)
|
||||
if (mod && Mod_SkinForName)
|
||||
G_FLOAT(OFS_RETURN) = Mod_SkinForName(mod, str);
|
||||
else
|
||||
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 *up = G_VECTOR(OFS_PARM3);
|
||||
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_NOROTATE 2
|
||||
#define RSES_NOTRAILS 4
|
||||
#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);
|
||||
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;
|
||||
}
|
||||
|
||||
ent->v->entnum = i+1;
|
||||
|
||||
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;
|
||||
CSQC_PlayerStateToCSQC(i, srcp, ent);
|
||||
|
||||
if (csqcg.delta_update)
|
||||
{
|
||||
|
@ -4240,81 +4566,8 @@ void PF_ReadServerEntityState(progfuncs_t *prinst, struct globalvars_s *pr_globa
|
|||
else
|
||||
ent = (csqcedict_t *)ED_Alloc(prinst);
|
||||
|
||||
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-(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;
|
||||
}
|
||||
}
|
||||
|
||||
CSQC_EntStateToCSQC(flags, servertime, src, ent);
|
||||
|
||||
if (csqcg.delta_update)
|
||||
{
|
||||
*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;
|
||||
}
|
||||
#endif
|
||||
|
||||
#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_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)
|
||||
{"frameforname", PF_frameforname, 275}, // #275
|
||||
|
||||
//300
|
||||
{"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)
|
||||
{"readstring", PF_ReadString, 366}, // #366 string() readstring (EXT_CSQC)
|
||||
{"readfloat", PF_ReadFloat, 367}, // #367 string() readfloat (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)
|
||||
// {"readsingleentitystate", PF_ReadSingleEntityState, 370},
|
||||
{"deltalisten", PF_DeltaListen, 371}, // #371 float(string modelname, float flags) deltalisten (EXT_CSQC_1)
|
||||
|
||||
//400
|
||||
{"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;
|
||||
|
||||
in_sensitivityscale = 1;
|
||||
|
||||
csqc_usinglistener = false;
|
||||
}
|
||||
|
||||
//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;
|
||||
csqcchecksum = checksum;
|
||||
|
||||
csqc_usinglistener = false;
|
||||
|
||||
//its already running...
|
||||
if (csqcprogs)
|
||||
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.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;
|
||||
|
||||
|
@ -5089,11 +5350,16 @@ qboolean CSQC_Init (unsigned int checksum)
|
|||
|
||||
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();
|
||||
//failed to load or something
|
||||
return false;
|
||||
if (PR_LoadProgs(csqcprogs, "csprogs.dat", 52195, NULL, 0) < 0) //no per-progs builtins.
|
||||
{
|
||||
CSQC_Shutdown();
|
||||
//failed to load or something
|
||||
return false;
|
||||
}
|
||||
csqc_isdarkplaces = true;
|
||||
}
|
||||
if (setjmp(csqc_abort))
|
||||
{
|
||||
|
@ -5120,17 +5386,16 @@ qboolean CSQC_Init (unsigned int checksum)
|
|||
worldent->readonly = true;
|
||||
worldent->isfree = false;
|
||||
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;
|
||||
csqcmapentitydataloaded = false;
|
||||
|
||||
|
@ -5415,6 +5680,11 @@ qboolean CSQC_ParseTempEntity(unsigned char firstbyte)
|
|||
return !!G_FLOAT(OFS_RETURN);
|
||||
}
|
||||
|
||||
qboolean CSQC_ParseGamePacket(void)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
qboolean CSQC_LoadResource(char *resname, char *restype)
|
||||
{
|
||||
void *pr_globals;
|
||||
|
|
|
@ -718,6 +718,8 @@ void PF_cl_setmousetarget (progfuncs_t *prinst, struct globalvars_s *pr_globals)
|
|||
//float getmousetarget(void) = #604;
|
||||
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);
|
||||
|
@ -760,6 +762,7 @@ void PF_cl_getmousepos (progfuncs_t *prinst, struct globalvars_s *pr_globals)
|
|||
{
|
||||
float *ret = G_VECTOR(OFS_RETURN);
|
||||
extern int mousemove_x, mousemove_y;
|
||||
extern int mousecursor_x, mousecursor_y;
|
||||
|
||||
ret[0] = mousemove_x;
|
||||
ret[1] = mousemove_y;
|
||||
|
@ -767,8 +770,8 @@ void PF_cl_getmousepos (progfuncs_t *prinst, struct globalvars_s *pr_globals)
|
|||
mousemove_x=0;
|
||||
mousemove_y=0;
|
||||
|
||||
/* ret[0] = mousecursor_x;
|
||||
ret[1] = mousecursor_y;*/
|
||||
ret[0] = mousecursor_x;
|
||||
ret[1] = mousecursor_y;
|
||||
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.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;
|
||||
|
||||
|
|
|
@ -131,17 +131,19 @@ extern "C" {
|
|||
#include "sys.h"
|
||||
#include "zone.h"
|
||||
#include "mathlib.h"
|
||||
#include "wad.h"
|
||||
#include "cvar.h"
|
||||
#include "screen.h"
|
||||
#include "net.h"
|
||||
#include "protocol.h"
|
||||
#include "cmd.h"
|
||||
#if 1//ndef SERVERONLY
|
||||
#include "wad.h"
|
||||
#include "screen.h"
|
||||
#include "sbar.h"
|
||||
#include "sound.h"
|
||||
#include "merged.h"
|
||||
#include "render.h"
|
||||
#include "client.h"
|
||||
#endif
|
||||
|
||||
#include "vm.h"
|
||||
|
||||
|
@ -173,10 +175,8 @@ extern "C" {
|
|||
#include "progs.h"
|
||||
#endif
|
||||
#include "world.h"
|
||||
#ifndef CLIENTONLY
|
||||
//#ifdef Q2SERVER
|
||||
#include "q2game.h"
|
||||
//#endif
|
||||
#ifndef CLIENTONLY
|
||||
#include "server.h"
|
||||
#endif
|
||||
|
||||
|
@ -218,7 +218,7 @@ typedef struct quakeparms_s
|
|||
{
|
||||
char *basedir;
|
||||
int argc;
|
||||
char **argv;
|
||||
const char **argv;
|
||||
void *membase;
|
||||
unsigned int memsize;
|
||||
} quakeparms_t;
|
||||
|
@ -238,6 +238,7 @@ extern qboolean noclip_anglehack;
|
|||
extern quakeparms_t host_parms;
|
||||
|
||||
extern cvar_t com_gamename;
|
||||
extern cvar_t com_modname;
|
||||
extern cvar_t sys_ticrate;
|
||||
extern cvar_t sys_nostdout;
|
||||
extern cvar_t developer;
|
||||
|
|
|
@ -383,6 +383,7 @@ void GL_InfinatePerspective(double fovx, double fovy, double zNear);
|
|||
void GLMod_Init (void);
|
||||
int Mod_TagNumForName(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);
|
||||
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_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 *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 *name);
|
||||
qbyte *ReadPNGFile(qbyte *buf, int length, int *width, int *height, const char *name);
|
||||
qbyte *ReadPCXPalette(qbyte *buf, int len, qbyte *out);
|
||||
|
||||
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);
|
||||
static cvar_t vid_desktopsettings = SCVARF ("vid_desktopsettings", "0",
|
||||
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",
|
||||
CVAR_ARCHIVE | CVAR_RENDERERLATCH);
|
||||
#endif
|
||||
static cvar_t vid_height = SCVARF ("vid_height", "480",
|
||||
CVAR_ARCHIVE | CVAR_RENDERERLATCH);
|
||||
static cvar_t vid_multisample = SCVARF ("vid_multisample", "0",
|
||||
|
@ -571,6 +578,7 @@ void Renderer_Init(void)
|
|||
currentrendererstate.bpp = -1; //no previous.
|
||||
|
||||
currentrendererstate.renderer = -1;
|
||||
qrenderer = -1;
|
||||
|
||||
Cmd_AddCommand("setrenderer", R_SetRenderer_f);
|
||||
Cmd_AddCommand("vid_restart", R_RestartRenderer_f);
|
||||
|
@ -593,6 +601,9 @@ void Renderer_Init(void)
|
|||
Cvar_Register (&_windowed_mouse, VIDCOMMANDGROUP);
|
||||
Cvar_Register (&vid_renderer, VIDCOMMANDGROUP);
|
||||
|
||||
#ifdef NPQTV
|
||||
Cvar_Register (&vid_fullscreen_npqtv, VIDCOMMANDGROUP);
|
||||
#endif
|
||||
Cvar_Register (&vid_fullscreen, VIDCOMMANDGROUP);
|
||||
// Cvar_Register (&vid_stretch, 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);
|
||||
//int (*Mod_TagNumForName) (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);
|
||||
|
||||
r_qrenderer_t qrenderer=-1;
|
||||
r_qrenderer_t qrenderer;
|
||||
char *q_renderername = "Non-Selected renderer";
|
||||
|
||||
|
||||
|
@ -883,6 +895,7 @@ rendererinfo_t dedicatedrendererinfo = {
|
|||
NULL, //Mod_GetTag
|
||||
NULL, //fixme: server will need this one at some point.
|
||||
NULL,
|
||||
NULL,
|
||||
|
||||
NULL, //VID_Init,
|
||||
NULL, //VID_DeInit,
|
||||
|
@ -976,6 +989,7 @@ rendererinfo_t softwarerendererinfo = {
|
|||
NULL, //Mod_GetTag
|
||||
NULL, //Mod_TagForName
|
||||
NULL,
|
||||
NULL,
|
||||
|
||||
SWVID_Init,
|
||||
SWVID_Shutdown,
|
||||
|
@ -1073,6 +1087,7 @@ rendererinfo_t openglrendererinfo = {
|
|||
Mod_GetTag,
|
||||
Mod_TagNumForName,
|
||||
Mod_SkinNumForName,
|
||||
Mod_FrameNumForName,
|
||||
|
||||
GLVID_Init,
|
||||
GLVID_DeInit,
|
||||
|
@ -1108,7 +1123,9 @@ rendererinfo_t *pd3d9rendererinfo = &d3d9rendererinfo;
|
|||
|
||||
rendererinfo_t **rendererinfo[] =
|
||||
{
|
||||
#ifndef NPQTV
|
||||
&pdedicatedrendererinfo,
|
||||
#endif
|
||||
#ifdef SWQUAKE
|
||||
&psoftwarerendererinfo,
|
||||
#endif
|
||||
|
@ -1554,10 +1571,8 @@ void D3DSucks(void)
|
|||
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.
|
||||
|
||||
|
@ -1581,6 +1596,14 @@ qboolean R_ApplyRenderer (rendererstate_t *newr)
|
|||
COM_FlushTempoaryPacks();
|
||||
|
||||
S_Shutdown();
|
||||
}
|
||||
|
||||
qboolean R_ApplyRenderer (rendererstate_t *newr)
|
||||
{
|
||||
if (newr->bpp == -1)
|
||||
return false;
|
||||
|
||||
R_ShutdownRenderer();
|
||||
|
||||
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)
|
||||
{
|
||||
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
|
||||
{
|
||||
|
@ -2255,6 +2255,10 @@ void Sbar_Draw (void)
|
|||
|
||||
sbar_parsingteamstatuses = false;
|
||||
|
||||
#ifdef HLCLIENT
|
||||
if (CLHL_DrawHud())
|
||||
return;
|
||||
#endif
|
||||
|
||||
#ifdef Q2CLIENT
|
||||
if (cls.protocol == CP_QUAKE2)
|
||||
|
|
|
@ -563,6 +563,9 @@ void Skin_FlushPlayers(void)
|
|||
int i;
|
||||
for (i = 0; i < MAX_CLIENTS; i++)
|
||||
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;
|
||||
}
|
||||
|
||||
qboolean S_HaveOutput(void)
|
||||
{
|
||||
return sound_started && sndcardinfo;
|
||||
}
|
||||
|
||||
|
||||
void S_SoundInfo_f(void)
|
||||
{
|
||||
|
@ -361,7 +366,7 @@ void S_Startup (void)
|
|||
break;
|
||||
}
|
||||
|
||||
sound_started = 1;
|
||||
sound_started = !!sndcardinfo;
|
||||
|
||||
S_ClearRaw();
|
||||
}
|
||||
|
@ -540,11 +545,6 @@ void S_Init (void)
|
|||
{
|
||||
int p;
|
||||
|
||||
if (snd_initialized) //whoops
|
||||
{
|
||||
Con_Printf("Sound is already initialized\n");
|
||||
return;
|
||||
}
|
||||
Con_DPrintf("\nSound Initialization\n");
|
||||
|
||||
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
|
||||
|
@ -1138,7 +1190,7 @@ void S_UpdateAmbientSounds (soundcardinfo_t *sc)
|
|||
chan = &sc->channel[i];
|
||||
if (!chan->sfx)
|
||||
{
|
||||
char *nexttrack = Media_NextTrack();
|
||||
char *nexttrack = Media_NextTrack(i-NUM_AMBIENTS);
|
||||
sfxcache_t *scache;
|
||||
sfx_t *newmusic;
|
||||
|
||||
|
@ -1210,7 +1262,7 @@ S_Update
|
|||
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;
|
||||
|
||||
|
@ -1219,12 +1271,24 @@ void S_Update(vec3_t origin, vec3_t forward, vec3_t right, vec3_t up)
|
|||
VectorCopy(right, listener_right);
|
||||
VectorCopy(up, listener_up);
|
||||
|
||||
S_RunCapture();
|
||||
if (dontmix)
|
||||
{
|
||||
S_RunCapture();
|
||||
|
||||
for (sc = sndcardinfo; sc; sc = sc->next)
|
||||
S_UpdateCard(sc);
|
||||
for (sc = sndcardinfo; sc; sc = sc->next)
|
||||
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)
|
||||
{
|
||||
int i, j;
|
||||
|
|
|
@ -843,15 +843,21 @@ sfxcache_t *S_LoadSound (sfx_t *s)
|
|||
// load it in
|
||||
|
||||
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_strcat(namebuffer, name+1); //q2
|
||||
}
|
||||
else if (name[0] == '.' && name[1] == '.' && name[2] == '/')
|
||||
{
|
||||
//not relative to sound/
|
||||
Q_strcpy(namebuffer, name+3);
|
||||
}
|
||||
else
|
||||
{
|
||||
//q1 behaviour, relative to sound/
|
||||
Q_strcpy(namebuffer, "sound/");
|
||||
Q_strcat(namebuffer, name);
|
||||
data = COM_LoadStackFile(name, stackbuf, sizeof(stackbuf));
|
||||
|
@ -874,7 +880,7 @@ sfxcache_t *S_LoadSound (sfx_t *s)
|
|||
|
||||
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);
|
||||
s->failedload = true;
|
||||
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>
|
||||
#endif
|
||||
|
||||
#if !defined(CLIENTONLY) && !defined(SERVERONLY)
|
||||
qboolean isDedicated = false;
|
||||
#endif
|
||||
|
||||
HWND sys_hijackwindow;
|
||||
|
||||
void Sys_CloseLibrary(dllhandle_t *lib)
|
||||
{
|
||||
|
@ -51,16 +56,19 @@ dllhandle_t *Sys_LoadLibrary(char *name, dllfunction_t *funcs)
|
|||
if (!lib)
|
||||
return NULL;
|
||||
|
||||
for (i = 0; funcs[i].name; i++)
|
||||
if (funcs)
|
||||
{
|
||||
*funcs[i].funcptr = GetProcAddress(lib, funcs[i].name);
|
||||
if (!*funcs[i].funcptr)
|
||||
break;
|
||||
}
|
||||
if (funcs[i].name)
|
||||
{
|
||||
Sys_CloseLibrary((dllhandle_t*)lib);
|
||||
lib = NULL;
|
||||
for (i = 0; funcs[i].name; i++)
|
||||
{
|
||||
*funcs[i].funcptr = GetProcAddress(lib, funcs[i].name);
|
||||
if (!*funcs[i].funcptr)
|
||||
break;
|
||||
}
|
||||
if (funcs[i].name)
|
||||
{
|
||||
Sys_CloseLibrary((dllhandle_t*)lib);
|
||||
lib = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
return (dllhandle_t*)lib;
|
||||
|
@ -462,7 +470,7 @@ qboolean Sys_remove (char *path)
|
|||
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;
|
||||
WIN32_FIND_DATA fd;
|
||||
|
@ -718,7 +726,14 @@ void Sys_Quit (void)
|
|||
SV_Shutdown();
|
||||
#endif
|
||||
|
||||
#ifdef NPQTV
|
||||
{
|
||||
extern jmp_buf host_abort;
|
||||
longjmp (host_abort, 1);
|
||||
}
|
||||
#else
|
||||
exit (0);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
@ -1076,9 +1091,9 @@ void Sys_Sleep (void)
|
|||
{
|
||||
}
|
||||
|
||||
|
||||
void Sys_SendKeyEvents (void)
|
||||
{
|
||||
#ifndef NPQTV
|
||||
MSG msg;
|
||||
|
||||
if (isDedicated)
|
||||
|
@ -1100,6 +1115,7 @@ void Sys_SendKeyEvents (void)
|
|||
TranslateMessage (&msg);
|
||||
DispatchMessage (&msg);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
@ -1129,6 +1145,128 @@ void SleepUntilInput (int time)
|
|||
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
|
||||
|
@ -1140,9 +1278,6 @@ char *argv[MAX_NUM_ARGVS];
|
|||
static char exename[256];
|
||||
HWND hwnd_dialog;
|
||||
|
||||
#if !defined(CLIENTONLY) && !defined(SERVERONLY)
|
||||
qboolean isDedicated = false;
|
||||
#endif
|
||||
/*
|
||||
#ifdef _MSC_VER
|
||||
#include <signal.h>
|
||||
|
@ -1160,11 +1295,9 @@ int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLin
|
|||
// MSG msg;
|
||||
quakeparms_t parms;
|
||||
double time, oldtime, newtime;
|
||||
MEMORYSTATUS lpBuffer;
|
||||
char cwd[1024];
|
||||
int t;
|
||||
RECT rect;
|
||||
char *qtvfile = NULL;
|
||||
const char *qtvfile = NULL;
|
||||
|
||||
/* previous instances do not exist in Win32 */
|
||||
if (hPrevInstance)
|
||||
|
@ -1181,9 +1314,6 @@ int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLin
|
|||
global_hInstance = hInstance;
|
||||
global_nCmdShow = nCmdShow;
|
||||
|
||||
lpBuffer.dwLength = sizeof(MEMORYSTATUS);
|
||||
GlobalMemoryStatus (&lpBuffer);
|
||||
|
||||
parms.argc = 1;
|
||||
argv[0] = exename;
|
||||
|
||||
|
@ -1301,41 +1431,11 @@ int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLin
|
|||
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)
|
||||
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)
|
||||
if (!Sys_Startup_CheckMem(&parms))
|
||||
Sys_Error ("Not enough memory free; check disk space\n");
|
||||
|
||||
|
||||
#ifndef CLIENTONLY
|
||||
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();
|
||||
return WinMain(GetModuleHandle(NULL), NULL, GetCommandLine(), SW_NORMAL);
|
||||
}
|
||||
#endif
|
||||
|
||||
qboolean Sys_GetDesktopParameters(int *width, int *height, int *bpp, int *refreshrate)
|
||||
{
|
||||
|
|
|
@ -312,7 +312,7 @@ void EditorOpenFile(char *name)
|
|||
memcpy(firstblock->data, line, len);
|
||||
if (editprogfuncs)
|
||||
{
|
||||
if (editprogfuncs->ToggleBreak(editprogfuncs, OpenEditorFile+strlen(com_gamedir)+1, i, 3))
|
||||
if (editprogfuncs->ToggleBreak(editprogfuncs, OpenEditorFile, i, 3))
|
||||
{
|
||||
firstblock->flags |= FB_BREAK;
|
||||
}
|
||||
|
@ -321,7 +321,7 @@ void EditorOpenFile(char *name)
|
|||
{
|
||||
if (svprogfuncs)
|
||||
{
|
||||
if (svprogfuncs->ToggleBreak(svprogfuncs, OpenEditorFile+strlen(com_gamedir)+1, i, 3))
|
||||
if (svprogfuncs->ToggleBreak(svprogfuncs, OpenEditorFile, i, 3))
|
||||
{
|
||||
firstblock->flags |= FB_BREAK;
|
||||
}
|
||||
|
|
|
@ -444,17 +444,13 @@ void Validation_DelatchRulesets(void)
|
|||
Con_DPrintf("Ruleset deactivated\n");
|
||||
}
|
||||
|
||||
void Validation_AllChecks(void)
|
||||
{
|
||||
}
|
||||
|
||||
void Validation_OldRuleset(void)
|
||||
qboolean Validation_GetCurrentRulesetName(char *rsnames, int resultbuflen, qboolean enforcechosenrulesets)
|
||||
{ //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
|
||||
cvar_t *var;
|
||||
ruleset_t *rs;
|
||||
int i;
|
||||
char rsnames[1024];
|
||||
|
||||
rs = rulesets;
|
||||
*rsnames = '\0';
|
||||
|
||||
|
@ -484,34 +480,75 @@ void Validation_OldRuleset(void)
|
|||
{
|
||||
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;
|
||||
}
|
||||
}
|
||||
if (*rsnames)
|
||||
{
|
||||
Cbuf_AddText(va("say Ruleset: %s\n", rsnames), RESTRICT_LOCAL);
|
||||
|
||||
//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++)
|
||||
//as we'll be telling the other players what rules we're playing by, we'd best stick to them
|
||||
if (enforcechosenrulesets)
|
||||
{
|
||||
if (!rs->flagged)
|
||||
continue;
|
||||
for (i = 0; rs->rule[i].rulename; i++)
|
||||
for (rs = rulesets; rs->rulesetname; rs++)
|
||||
{
|
||||
var = Cvar_FindVar(rs->rule[i].rulename);
|
||||
if (!var)
|
||||
if (!rs->flagged)
|
||||
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
|
||||
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)
|
||||
{ //rulesets are applied when the client first gets a connection to the server
|
||||
ruleset_t *rs;
|
||||
|
|
|
@ -1198,7 +1198,10 @@ void V_CalcRefdef (int pnum)
|
|||
view->model = NULL;
|
||||
else
|
||||
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
|
||||
view->palremap = D_IdentityRemap();
|
||||
#endif
|
||||
|
|
|
@ -43,6 +43,14 @@ typedef struct
|
|||
qbyte data[4]; // variably sized
|
||||
} qpic_t;
|
||||
|
||||
#ifdef RGLQUAKE
|
||||
typedef struct
|
||||
{
|
||||
int texnum;
|
||||
float sl, tl, sh, th;
|
||||
} glpic_t;
|
||||
#endif
|
||||
|
||||
//this is what's actually used.
|
||||
#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.
|
||||
|
@ -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;
|
||||
qbyte flags;
|
||||
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;
|
||||
|
||||
|
||||
|
|
|
@ -62,6 +62,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|||
extern HINSTANCE global_hInstance;
|
||||
extern int global_nCmdShow;
|
||||
|
||||
extern HWND sys_hijackwindow;
|
||||
|
||||
#ifndef SERVERONLY
|
||||
|
||||
#ifdef _WIN32
|
||||
|
@ -151,10 +153,7 @@ extern qboolean ActiveApp, Minimized;
|
|||
|
||||
extern qboolean WinNT;
|
||||
|
||||
void IN_ShowMouse (void);
|
||||
void IN_DeactivateMouse (void);
|
||||
void IN_HideMouse (void);
|
||||
void IN_ActivateMouse (void);
|
||||
void IN_UpdateGrabs(int fullscreen, int activeapp);
|
||||
void IN_RestoreOriginalMouseState (void);
|
||||
void IN_SetQuakeMouseState (void);
|
||||
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 |
|
||||
WS_VISIBLE
|
||||
EXSTYLE WS_EX_TOOLWINDOW | WS_EX_CLIENTEDGE
|
||||
FONT 16, "Times New Roman"
|
||||
FONT 16, "Times New Roman", 0, 0, 0x1
|
||||
BEGIN
|
||||
CTEXT "FTE QuakeWorld",IDC_STATIC,0,0,67,21,SS_CENTERIMAGE
|
||||
CTEXT "http://www.fteqw.com",IDC_STATIC,0,23,66,17,
|
||||
|
|
|
@ -3184,7 +3184,7 @@ qbool TP_CheckSoundTrigger (char *str)
|
|||
// clean up the message
|
||||
strcpy (str + j, str + i);
|
||||
|
||||
if (!snd_initialized)
|
||||
if (!S_HaveOutput())
|
||||
return false;
|
||||
|
||||
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
|
||||
#endif
|
||||
|
||||
#ifdef NPQTV
|
||||
#undef TEXTEDITOR
|
||||
#undef WEBCLIENT
|
||||
#undef WEBSERVER
|
||||
#endif
|
||||
|
||||
#ifdef SERVERONLY //remove options that don't make sense on only a server
|
||||
#undef Q2CLIENT
|
||||
#undef Q3CLIENT
|
||||
#undef HLCLIENT
|
||||
#undef HALFLIFEMODELS
|
||||
#undef VM_UI
|
||||
#undef VM_CG
|
||||
#undef WEBCLIENT
|
||||
|
|
|
@ -74,12 +74,22 @@ static int macro_count = 0;
|
|||
|
||||
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");
|
||||
|
||||
Q_strncpyz(macro_commands[macro_count].name, s, sizeof(macro_commands[macro_count].name));
|
||||
macro_commands[macro_count].func = f;
|
||||
macro_commands[macro_count].disputableintentions = disputableintentions;
|
||||
macro_count++;
|
||||
|
||||
if (i == macro_count)
|
||||
macro_count++;
|
||||
}
|
||||
|
||||
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
|
||||
Con_DPrintf ("Cmd_AddCommand: %s already defined\n", cmd_name);
|
||||
else
|
||||
{
|
||||
Con_Printf ("Cmd_AddCommand: %s already defined\n", cmd_name);
|
||||
break;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -2812,6 +2825,17 @@ void Cmd_Condump_f(void)
|
|||
}
|
||||
#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
|
||||
|
|
|
@ -1126,10 +1126,10 @@ void Mod_FloodFillSkin( qbyte *skin, int skinwidth, int skinheight )
|
|||
#endif
|
||||
|
||||
//additional skin loading
|
||||
char **skinfilelist;
|
||||
char ** skinfilelist;
|
||||
int skinfilecount;
|
||||
|
||||
static qboolean VARGS Mod_TryAddSkin(char *skinname, ...)
|
||||
static qboolean VARGS Mod_TryAddSkin(const char *skinname, ...)
|
||||
{
|
||||
va_list argptr;
|
||||
char string[MAX_QPATH];
|
||||
|
@ -1159,7 +1159,7 @@ static qboolean VARGS Mod_TryAddSkin(char *skinname, ...)
|
|||
return true;
|
||||
}
|
||||
|
||||
int Mod_EnumerateSkins(char *name, int size, void *param)
|
||||
int Mod_EnumerateSkins(const char *name, int size, void *param)
|
||||
{
|
||||
Mod_TryAddSkin(name);
|
||||
return true;
|
||||
|
@ -2330,8 +2330,6 @@ qboolean Mod_LoadQ2Model (model_t *mod, void *buffer)
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
int Mod_GetNumBones(model_t *model, qboolean allowtags)
|
||||
{
|
||||
galiasinfo_t *inf;
|
||||
|
@ -2608,7 +2606,13 @@ int Mod_TagNumForName(model_t *model, char *name)
|
|||
galiasinfo_t *inf;
|
||||
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;
|
||||
inf = Mod_Extradata(model);
|
||||
|
||||
|
@ -2634,6 +2638,32 @@ int Mod_TagNumForName(model_t *model, char *name)
|
|||
return 0;
|
||||
}
|
||||
#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 i;
|
||||
|
|
|
@ -38,15 +38,16 @@ usercmd_t nullcmd; // guarenteed to be zero
|
|||
|
||||
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 *safeargvs[NUM_SAFE_ARGVS] =
|
||||
{"-stdvid", "-nolan", "-nosound", "-nocdaudio", "-nojoy", "-nomouse"};
|
||||
|
||||
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_modname = SCVAR("com_modname", "");
|
||||
|
||||
qboolean com_modified; // set true if using non-id files
|
||||
|
||||
|
@ -342,9 +343,9 @@ char *Q_strlwr(char *s)
|
|||
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 != '*'))
|
||||
{
|
||||
|
@ -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 sign;
|
||||
|
@ -493,7 +494,7 @@ int Q_atoi (char *str)
|
|||
}
|
||||
|
||||
|
||||
float Q_atof (char *str)
|
||||
float Q_atof (const char *str)
|
||||
{
|
||||
double val;
|
||||
int sign;
|
||||
|
@ -1429,9 +1430,9 @@ void SZ_Print (sizebuf_t *buf, const char *data)
|
|||
COM_SkipPath
|
||||
============
|
||||
*/
|
||||
char *COM_SkipPath (char *pathname)
|
||||
char *COM_SkipPath (const char *pathname)
|
||||
{
|
||||
char *last;
|
||||
const char *last;
|
||||
|
||||
last = pathname;
|
||||
while (*pathname)
|
||||
|
@ -1440,7 +1441,7 @@ char *COM_SkipPath (char *pathname)
|
|||
last = pathname+1;
|
||||
pathname++;
|
||||
}
|
||||
return last;
|
||||
return (char *)last;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1448,11 +1449,11 @@ char *COM_SkipPath (char *pathname)
|
|||
COM_StripExtension
|
||||
============
|
||||
*/
|
||||
void COM_StripExtension (char *in, char *out, int outlen)
|
||||
void COM_StripExtension (const char *in, char *out, int outlen)
|
||||
{
|
||||
char *s;
|
||||
|
||||
if (out != in)
|
||||
if (out != in) //optimisation, most calls use the same buffer
|
||||
Q_strncpyz(out, in, outlen);
|
||||
|
||||
s = out+strlen(out);
|
||||
|
@ -1494,7 +1495,7 @@ void COM_StripAllExtensions (char *in, char *out, int outlen)
|
|||
COM_FileExtension
|
||||
============
|
||||
*/
|
||||
char *COM_FileExtension (char *in)
|
||||
char *COM_FileExtension (const char *in)
|
||||
{
|
||||
static char exten[8];
|
||||
int i;
|
||||
|
@ -1565,9 +1566,9 @@ void COM_CleanUpPath(char *str)
|
|||
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;
|
||||
|
||||
|
@ -1901,7 +1902,7 @@ messedup:
|
|||
#define TOKENSIZE sizeof(com_token)
|
||||
char com_token[TOKENSIZE];
|
||||
int com_argc;
|
||||
char **com_argv;
|
||||
const char **com_argv;
|
||||
|
||||
com_tokentype_t com_tokentype;
|
||||
|
||||
|
@ -1913,7 +1914,8 @@ COM_Parse
|
|||
Parse a token out of a string
|
||||
==============
|
||||
*/
|
||||
char *COM_Parse (char *data)
|
||||
#ifndef COM_Parse
|
||||
char *COM_Parse (const char *data)
|
||||
{
|
||||
int c;
|
||||
int len;
|
||||
|
@ -1952,13 +1954,13 @@ skipwhite:
|
|||
while (1)
|
||||
{
|
||||
if (len >= TOKENSIZE-1)
|
||||
return data;
|
||||
return (char*)data;
|
||||
|
||||
c = *data++;
|
||||
if (c=='\"' || !c)
|
||||
{
|
||||
com_token[len] = 0;
|
||||
return data;
|
||||
return (char*)data;
|
||||
}
|
||||
com_token[len] = c;
|
||||
len++;
|
||||
|
@ -1969,7 +1971,7 @@ skipwhite:
|
|||
do
|
||||
{
|
||||
if (len >= TOKENSIZE-1)
|
||||
return data;
|
||||
return (char*)data;
|
||||
|
||||
com_token[len] = c;
|
||||
data++;
|
||||
|
@ -1978,10 +1980,11 @@ skipwhite:
|
|||
} while (c>32);
|
||||
|
||||
com_token[len] = 0;
|
||||
return data;
|
||||
return (char*)data;
|
||||
}
|
||||
#endif
|
||||
|
||||
char *COM_ParseStringSet (char *data)
|
||||
char *COM_ParseStringSet (const char *data)
|
||||
{
|
||||
int c;
|
||||
int len;
|
||||
|
@ -2004,7 +2007,10 @@ char *COM_ParseStringSet (char *data)
|
|||
do
|
||||
{
|
||||
if (len >= TOKENSIZE-1)
|
||||
return data;
|
||||
{
|
||||
com_token[len] = 0;
|
||||
return (char*)data;
|
||||
}
|
||||
|
||||
com_token[len] = c;
|
||||
data++;
|
||||
|
@ -2013,11 +2019,11 @@ char *COM_ParseStringSet (char *data)
|
|||
} while (c>32 && c != ';');
|
||||
|
||||
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 len;
|
||||
|
@ -2056,13 +2062,16 @@ skipwhite:
|
|||
while (1)
|
||||
{
|
||||
if (len >= outlen-1)
|
||||
return data;
|
||||
{
|
||||
out[len] = 0;
|
||||
return (char*)data;
|
||||
}
|
||||
|
||||
c = *data++;
|
||||
if (c=='\"' || !c)
|
||||
{
|
||||
out[len] = 0;
|
||||
return data;
|
||||
return (char*)data;
|
||||
}
|
||||
out[len] = c;
|
||||
len++;
|
||||
|
@ -2073,7 +2082,10 @@ skipwhite:
|
|||
do
|
||||
{
|
||||
if (len >= outlen-1)
|
||||
return data;
|
||||
{
|
||||
out[len] = 0;
|
||||
return (char*)data;
|
||||
}
|
||||
|
||||
out[len] = c;
|
||||
data++;
|
||||
|
@ -2082,11 +2094,11 @@ skipwhite:
|
|||
} while (c>32);
|
||||
|
||||
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
|
||||
char *COM_StringParse (char *data, qboolean expandmacros, qboolean qctokenize)
|
||||
char *COM_StringParse (const char *data, qboolean expandmacros, qboolean qctokenize)
|
||||
{
|
||||
int c;
|
||||
int len;
|
||||
|
@ -2144,7 +2156,7 @@ skipwhite:
|
|||
if (len >= TOKENSIZE-1)
|
||||
{
|
||||
com_token[len] = '\0';
|
||||
return data;
|
||||
return (char*)data;
|
||||
}
|
||||
|
||||
|
||||
|
@ -2155,7 +2167,7 @@ skipwhite:
|
|||
if (c!='\"')
|
||||
{
|
||||
com_token[len] = 0;
|
||||
return data;
|
||||
return (char*)data;
|
||||
}
|
||||
while (c=='\"')
|
||||
{
|
||||
|
@ -2168,7 +2180,7 @@ skipwhite:
|
|||
if (!c)
|
||||
{
|
||||
com_token[len] = 0;
|
||||
return data;
|
||||
return (char*)data;
|
||||
}
|
||||
com_token[len] = c;
|
||||
len++;
|
||||
|
@ -2184,7 +2196,7 @@ skipwhite:
|
|||
if (len >= TOKENSIZE-1)
|
||||
{
|
||||
com_token[len] = '\0';
|
||||
return data;
|
||||
return (char*)data;
|
||||
}
|
||||
|
||||
|
||||
|
@ -2195,7 +2207,7 @@ skipwhite:
|
|||
if (c!='\'')
|
||||
{
|
||||
com_token[len] = 0;
|
||||
return data;
|
||||
return (char*)data;
|
||||
}
|
||||
while (c=='\'')
|
||||
{
|
||||
|
@ -2208,7 +2220,7 @@ skipwhite:
|
|||
if (!c)
|
||||
{
|
||||
com_token[len] = 0;
|
||||
return data;
|
||||
return (char*)data;
|
||||
}
|
||||
com_token[len] = c;
|
||||
len++;
|
||||
|
@ -2220,7 +2232,7 @@ skipwhite:
|
|||
// single character
|
||||
com_token[len++] = c;
|
||||
com_token[len] = 0;
|
||||
return data+1;
|
||||
return (char*)data+1;
|
||||
}
|
||||
|
||||
// parse a regular word
|
||||
|
@ -2229,7 +2241,7 @@ skipwhite:
|
|||
if (len >= TOKENSIZE-1)
|
||||
{
|
||||
com_token[len] = '\0';
|
||||
return data;
|
||||
return (char*)data;
|
||||
}
|
||||
|
||||
com_token[len] = c;
|
||||
|
@ -2241,7 +2253,7 @@ skipwhite:
|
|||
com_token[len] = 0;
|
||||
|
||||
if (!expandmacros)
|
||||
return data;
|
||||
return (char*)data;
|
||||
|
||||
//now we check for macros.
|
||||
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.
|
||||
{
|
||||
com_token[len] = '\0';
|
||||
return data;
|
||||
return (char*)data;
|
||||
}
|
||||
memmove(s+strlen(macro->string), s+i+1, len-c-i);
|
||||
memcpy(s, macro->string, strlen(macro->string));
|
||||
|
@ -2277,7 +2289,7 @@ skipwhite:
|
|||
}
|
||||
}
|
||||
|
||||
return data;
|
||||
return (char*)data;
|
||||
}
|
||||
|
||||
#define DEFAULT_PUNCTUATION "(,{})(\':;=!><&|+"
|
||||
|
@ -2396,7 +2408,7 @@ skipwhite:
|
|||
return (char*)data;
|
||||
}
|
||||
|
||||
char *COM_ParseCString (char *data)
|
||||
char *COM_ParseCString (const char *data)
|
||||
{
|
||||
int c;
|
||||
int len;
|
||||
|
@ -2437,14 +2449,14 @@ skipwhite:
|
|||
if (len >= TOKENSIZE-2)
|
||||
{
|
||||
com_token[len] = '\0';
|
||||
return data;
|
||||
return (char*)data;
|
||||
}
|
||||
|
||||
c = *data++;
|
||||
if (!c)
|
||||
{
|
||||
com_token[len] = 0;
|
||||
return data;
|
||||
return (char*)data;
|
||||
}
|
||||
if (c == '\\')
|
||||
{
|
||||
|
@ -2464,13 +2476,13 @@ skipwhite:
|
|||
continue;
|
||||
default:
|
||||
com_token[len] = 0;
|
||||
return data;
|
||||
return (char*)data;
|
||||
}
|
||||
}
|
||||
if (c=='\"' || !c)
|
||||
{
|
||||
com_token[len] = 0;
|
||||
return data;
|
||||
return (char*)data;
|
||||
}
|
||||
com_token[len] = c;
|
||||
len++;
|
||||
|
@ -2489,7 +2501,7 @@ skipwhite:
|
|||
} while (c>32);
|
||||
|
||||
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;
|
||||
|
||||
|
@ -2517,7 +2529,7 @@ int COM_CheckNextParm (char *parm, int last)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int COM_CheckParm (char *parm)
|
||||
int COM_CheckParm (const char *parm)
|
||||
{
|
||||
return COM_CheckNextParm(parm, 0);
|
||||
}
|
||||
|
@ -2607,7 +2619,7 @@ void COM_CheckRegistered (void)
|
|||
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;
|
||||
int i;
|
||||
|
@ -2685,7 +2697,7 @@ COM_AddParm
|
|||
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;
|
||||
}
|
||||
|
@ -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;
|
||||
|
||||
|
|
|
@ -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);
|
||||
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_memcpy(d, s, c) memcpy((d), (s), (c))
|
||||
|
@ -220,8 +220,8 @@ void Q_strncpyz(char*d, const char*s, int n);
|
|||
|
||||
#endif
|
||||
|
||||
int Q_atoi (char *str);
|
||||
float Q_atof (char *str);
|
||||
int Q_atoi (const char *str);
|
||||
float Q_atof (const char *str);
|
||||
|
||||
|
||||
|
||||
|
@ -234,34 +234,37 @@ extern com_tokentype_t com_tokentype;
|
|||
|
||||
extern qboolean com_eof;
|
||||
|
||||
char *COM_Parse (char *data);
|
||||
char *COM_ParseStringSet (char *data);
|
||||
char *COM_ParseCString (char *data);
|
||||
char *COM_StringParse (char *data, qboolean expandmacros, qboolean qctokenize);
|
||||
//these cast away the const for the return value.
|
||||
//char *COM_Parse (const char *data);
|
||||
#define COM_Parse(d) COM_ParseOut(d,com_token, sizeof(com_token))
|
||||
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_TrimString(char *str);
|
||||
|
||||
|
||||
extern int com_argc;
|
||||
extern char **com_argv;
|
||||
extern const char **com_argv;
|
||||
|
||||
int COM_CheckParm (char *parm);
|
||||
int COM_CheckNextParm (char *parm, int last);
|
||||
void COM_AddParm (char *parm);
|
||||
int COM_CheckParm (const char *parm);
|
||||
int COM_CheckNextParm (const char *parm, int last);
|
||||
void COM_AddParm (const char *parm);
|
||||
|
||||
void COM_Init (void);
|
||||
void COM_InitArgv (int argc, char **argv);
|
||||
void COM_InitArgv (int argc, const char **argv);
|
||||
void COM_ParsePlusSets (void);
|
||||
|
||||
char *COM_SkipPath (char *pathname);
|
||||
void COM_StripExtension (char *in, char *out, int outlen);
|
||||
void COM_FileBase (char *in, char *out, int outlen);
|
||||
int COM_FileSize(char *path);
|
||||
char *COM_SkipPath (const char *pathname);
|
||||
void COM_StripExtension (const char *in, char *out, int outlen);
|
||||
void COM_FileBase (const char *in, char *out, int outlen);
|
||||
int COM_FileSize(const char *path);
|
||||
void COM_DefaultExtension (char *path, char *extension, int maxlen);
|
||||
void COM_DeFunString(unsigned long *str, char *out, int outsize, qboolean ignoreflags);
|
||||
void COM_ParseFunString(char *str, unsigned long *out, int outsize);
|
||||
int COM_FunStringLength(unsigned char *str);
|
||||
char *COM_FileExtension (char *in);
|
||||
char *COM_FileExtension (const char *in);
|
||||
void COM_CleanUpPath(char *str);
|
||||
|
||||
char *VARGS va(char *format, ...);
|
||||
|
@ -273,7 +276,6 @@ extern qboolean com_file_copyprotected;
|
|||
extern int com_filesize;
|
||||
struct cache_user_s;
|
||||
|
||||
extern char com_gamedir[MAX_OSPATH];
|
||||
extern char com_quakedir[MAX_OSPATH];
|
||||
extern char com_homedir[MAX_OSPATH];
|
||||
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;
|
||||
//if loc is valid, loc->search is always filled in, the others are filled on success.
|
||||
//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);
|
||||
char *FS_WhichPackForLocation(flocation_t *loc);
|
||||
|
||||
char *FS_GetPackHashes(char *buffer, int buffersize, qboolean referencedonly);
|
||||
char *FS_GetPackNames(char *buffer, int buffersize, qboolean referencedonly);
|
||||
|
||||
int COM_FOpenFile (char *filename, FILE **file);
|
||||
int COM_FOpenWriteFile (char *filename, FILE **file);
|
||||
int COM_FOpenFile (const 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.
|
||||
//#define fopen dont_use_fopen
|
||||
|
@ -316,7 +318,7 @@ void COM_CloseFile (FILE *h);
|
|||
|
||||
typedef struct vfsfile_s {
|
||||
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
|
||||
unsigned long (*Tell) (struct vfsfile_s *file);
|
||||
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_WRITE(vf,buffer,buflen) (vf->WriteBytes(vf,buffer,buflen))
|
||||
#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);
|
||||
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_CreatePath(char *pname, int relativeto);
|
||||
int FS_Rename(char *oldf, char *newf, int relativeto); //0 on success, non-0 on error
|
||||
int FS_Rename2(char *oldf, char *newf, int oldrelativeto, int newrelativeto);
|
||||
int FS_Remove(char *fname, int relativeto); //0 on success, non-0 on error
|
||||
qboolean FS_WriteFile (char *filename, void *data, int len, int relativeto);
|
||||
vfsfile_t *FS_OpenVFS(char *filename, char *mode, int relativeto);
|
||||
void FS_CreatePath(const char *pname, enum fs_relative relativeto);
|
||||
int FS_Rename(const char *oldf, const char *newf, enum fs_relative relativeto); //0 on success, non-0 on error
|
||||
int FS_Rename2(const char *oldf, const char *newf, enum fs_relative oldrelativeto, enum fs_relative newrelativeto);
|
||||
int FS_Remove(const char *fname, int relativeto); //0 on success, non-0 on error
|
||||
qboolean FS_NativePath(const char *fname, enum fs_relative relativeto, char *out, int outlen); //if you really need to fopen yourself
|
||||
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_OpenTCP(char *name);
|
||||
vfsfile_t *FS_OpenTCP(const char *name);
|
||||
void FS_UnloadPackFiles(void);
|
||||
void FS_ReloadPackFiles(void);
|
||||
char *FS_GenerateClientPacksList(char *buffer, int maxlen, int basechecksum);
|
||||
enum {
|
||||
FS_GAME,
|
||||
FS_ROOT,
|
||||
FS_GAMEONLY,
|
||||
FS_CONFIGONLY,
|
||||
FS_SKINS
|
||||
};
|
||||
char *FSQ3_GenerateClientPacksList(char *buffer, int maxlen, int basechecksum);
|
||||
|
||||
|
||||
int COM_filelength (FILE *f);
|
||||
qbyte *COM_LoadStackFile (char *path, void *buffer, int bufsize);
|
||||
qbyte *COM_LoadTempFile (char *path);
|
||||
qbyte *COM_LoadTempFile2 (char *path); //allocates a little bit more without freeing old temp
|
||||
qbyte *COM_LoadHunkFile (char *path);
|
||||
qbyte *COM_LoadMallocFile (char *path);
|
||||
void COM_LoadCacheFile (char *path, struct cache_user_s *cu);
|
||||
qbyte *COM_LoadStackFile (const char *path, void *buffer, int bufsize);
|
||||
qbyte *COM_LoadTempFile (const char *path);
|
||||
qbyte *COM_LoadTempFile2 (const char *path); //allocates a little bit more without freeing old temp
|
||||
qbyte *COM_LoadHunkFile (const char *path);
|
||||
qbyte *COM_LoadMallocFile (const char *path);
|
||||
void COM_LoadCacheFile (const char *path, struct cache_user_s *cu);
|
||||
void COM_CreatePath (char *path);
|
||||
void COM_Gamedir (char *dir);
|
||||
void FS_ForceToPure(char *str, char *crcs, int seed);
|
||||
void COM_Gamedir (const char *dir);
|
||||
void FS_ForceToPure(const char *str, const char *crcs, int seed);
|
||||
char *COM_GetPathInfo (int i, int *crc);
|
||||
char *COM_NextPath (char *prevpath);
|
||||
void COM_FlushFSCache(void); //a file was written using fopen
|
||||
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_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 qboolean standard_quake; //fixme: remove
|
||||
|
||||
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);
|
||||
|
||||
#define MAX_INFO_KEY 64
|
||||
|
|
|
@ -26,15 +26,18 @@ cvar_group_t *cvar_groups;
|
|||
//cvar_t *cvar_vars;
|
||||
static char *cvar_null_string = "";
|
||||
static char *cvar_zero_string = "0";
|
||||
static char *cvar_one_string = "1";
|
||||
|
||||
char *Cvar_DefaultAlloc(char *str)
|
||||
{
|
||||
char *c;
|
||||
|
||||
|
||||
if (str[0] == '\0')
|
||||
return cvar_null_string;
|
||||
if (str[0] == '0' && str[1] == '\0')
|
||||
return cvar_zero_string;
|
||||
if (str[0] == '1' && str[1] == '\0')
|
||||
return cvar_one_string;
|
||||
|
||||
c = (char *)Z_Malloc(strlen(str)+1);
|
||||
Q_strcpy(c, str);
|
||||
|
@ -48,6 +51,8 @@ void Cvar_DefaultFree(char *str)
|
|||
return;
|
||||
else if (str == cvar_zero_string)
|
||||
return;
|
||||
else if (str == cvar_one_string)
|
||||
return;
|
||||
else
|
||||
Z_Free(str);
|
||||
}
|
||||
|
@ -868,7 +873,8 @@ void Cvar_Free(cvar_t *tbf)
|
|||
}
|
||||
unlinked:
|
||||
Z_Free(tbf->string);
|
||||
Cvar_DefaultFree(tbf->defaultstr);
|
||||
if (tbf->flags & CVAR_FREEDEFAULT)
|
||||
Cvar_DefaultFree(tbf->defaultstr);
|
||||
if (tbf->latched_string)
|
||||
Z_Free(tbf->latched_string);
|
||||
Z_Free(tbf);
|
||||
|
@ -886,10 +892,12 @@ qboolean Cvar_Register (cvar_t *variable, const char *groupname)
|
|||
{
|
||||
cvar_t *old;
|
||||
cvar_group_t *group;
|
||||
char value[512];
|
||||
char *initial;
|
||||
|
||||
// copy the value off, because future sets will Z_Free it
|
||||
strcpy (value, variable->string);
|
||||
if (variable->defaultstr)
|
||||
initial = variable->defaultstr;
|
||||
else
|
||||
initial = variable->string;
|
||||
|
||||
// check to see if it has already been defined
|
||||
old = Cvar_FindVar (variable->name);
|
||||
|
@ -900,7 +908,7 @@ qboolean Cvar_Register (cvar_t *variable, const char *groupname)
|
|||
group = Cvar_GetGroup(groupname);
|
||||
|
||||
variable->modified = old->modified;
|
||||
variable->flags |= old->flags & CVAR_ARCHIVE;
|
||||
variable->flags |= (old->flags & CVAR_ARCHIVE);
|
||||
|
||||
// link the variable in
|
||||
variable->next = group->cvars;
|
||||
|
@ -911,7 +919,10 @@ qboolean Cvar_Register (cvar_t *variable, const char *groupname)
|
|||
variable->string = (char*)Z_Malloc (1);
|
||||
|
||||
//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
|
||||
if (old->latched_string)
|
||||
|
@ -943,19 +954,17 @@ qboolean Cvar_Register (cvar_t *variable, const char *groupname)
|
|||
|
||||
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
|
||||
Cvar_SetCore (variable, value, true);
|
||||
Cvar_SetCore (variable, initial, 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 *var;
|
||||
|
@ -979,7 +988,7 @@ cvar_t *Cvar_Get(const char *name, const char *defaultvalue, int flags, const ch
|
|||
var->name = (char *)(var+1);
|
||||
strcpy(var->name, name);
|
||||
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))
|
||||
return NULL;
|
||||
|
@ -1203,9 +1212,16 @@ void Cvar_Shutdown(void)
|
|||
var = cvar_groups->cvars;
|
||||
cvar_groups->cvars = var->next;
|
||||
|
||||
if (var->flags & CVAR_FREEDEFAULT)
|
||||
{
|
||||
Cvar_DefaultFree(var->defaultstr);
|
||||
var->defaultstr = NULL;
|
||||
}
|
||||
Z_Free(var->string);
|
||||
if (var->flags & CVAR_POINTER)
|
||||
Z_Free(var);
|
||||
else
|
||||
var->string = NULL;
|
||||
}
|
||||
|
||||
grp = cvar_groups;
|
||||
|
|
|
@ -103,17 +103,18 @@ typedef struct cvar_group_s
|
|||
|
||||
//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_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_USERCREATED (1<<7) //write a 'set' or 'seta' in front of the var name.
|
||||
#define CVAR_CHEAT (1<<8) //latch to the default, unless cheats are enabled.
|
||||
#define CVAR_SEMICHEAT (1<<9) //if strict ruleset, force to 0/blank.
|
||||
#define CVAR_RENDERERLATCH (1<<10) //requires a vid_restart to reapply.
|
||||
#define CVAR_SERVEROVERRIDE (1<<11) //the server has overridden out local value - should probably be called SERVERLATCH
|
||||
#define CVAR_RENDERERCALLBACK (1<<12) //force callback for cvars on renderer change
|
||||
#define CVAR_NOUNSAFEEXPAND (1<<13) // do not expand cvar value when command is from gamecode
|
||||
#define CVAR_RULESETLATCH (1<<14) //latched by the ruleset
|
||||
#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_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_USERCREATED (1<<8) //write a 'set' or 'seta' in front of the var name.
|
||||
#define CVAR_CHEAT (1<<9) //latch to the default, unless cheats are enabled.
|
||||
#define CVAR_SEMICHEAT (1<<10) //if strict ruleset, force to 0/blank.
|
||||
#define CVAR_RENDERERLATCH (1<<11) //requires a vid_restart to reapply.
|
||||
#define CVAR_SERVEROVERRIDE (1<<12) //the server has overridden out local value - should probably be called SERVERLATCH
|
||||
#define CVAR_RENDERERCALLBACK (1<<13) //force callback for cvars on renderer change
|
||||
#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_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
|
||||
// archive elements set.
|
||||
|
||||
//#define Cvar_RegisterVariable(x) Cvar_Register(x,__FILE__);
|
||||
|
||||
cvar_t *Cvar_ForceSet (cvar_t *var, const char *value);
|
||||
cvar_t *Cvar_Set (cvar_t *var, const char *value);
|
||||
// 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);
|
||||
cr = cos(angle);
|
||||
|
||||
forward[0] = cp*cy;
|
||||
forward[1] = cp*sy;
|
||||
forward[2] = -sp;
|
||||
right[0] = (-1*sr*sp*cy+-1*cr*-sy);
|
||||
right[1] = (-1*sr*sp*sy+-1*cr*cy);
|
||||
right[2] = -1*sr*cp;
|
||||
up[0] = (cr*sp*cy+-sr*-sy);
|
||||
up[1] = (cr*sp*sy+-sr*cy);
|
||||
up[2] = cr*cp;
|
||||
if (forward)
|
||||
{
|
||||
forward[0] = cp*cy;
|
||||
forward[1] = cp*sy;
|
||||
forward[2] = -sp;
|
||||
}
|
||||
if (right)
|
||||
{
|
||||
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)
|
||||
|
|
|
@ -89,13 +89,13 @@ qboolean NET_CompareAdr (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_BaseAdrToString (char *s, int len, netadr_t a);
|
||||
qboolean NET_StringToSockaddr (char *s, struct sockaddr_qstorage *sadr);
|
||||
qboolean NET_StringToAdr (char *s, netadr_t *a);
|
||||
qboolean NET_StringToSockaddr (const char *s, struct sockaddr_qstorage *sadr);
|
||||
qboolean NET_StringToAdr (const char *s, netadr_t *a);
|
||||
qboolean NET_IsClientLegal(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);
|
||||
void NET_IntegerToMask (netadr_t *a, netadr_t *amask, int bits);
|
||||
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); \
|
||||
((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;
|
||||
char *colon;
|
||||
|
@ -619,9 +619,12 @@ qboolean NET_StringToSockaddr (char *s, struct sockaddr_qstorage *sadr)
|
|||
error = EAI_NONAME;
|
||||
else
|
||||
{
|
||||
*port = 0;
|
||||
error = pgetaddrinfo(s+1, port+2, &udp6hint, &addrinfo);
|
||||
*port = ']';
|
||||
len = port - (s+1);
|
||||
if (len >= sizeof(dupbase))
|
||||
len = sizeof(dupbase)-1;
|
||||
strncpy(dupbase, s+1, len);
|
||||
dupbase[len] = '\0';
|
||||
error = pgetaddrinfo(dupbase, port+2, &udp6hint, &addrinfo);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -709,7 +712,7 @@ dblbreak:
|
|||
accepts anything that NET_StringToSockaddr accepts plus certain url schemes
|
||||
including: tcp, irc
|
||||
*/
|
||||
qboolean NET_StringToAdr (char *s, netadr_t *a)
|
||||
qboolean NET_StringToAdr (const char *s, netadr_t *a)
|
||||
{
|
||||
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
|
||||
// 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;
|
||||
int bits = 8;
|
||||
|
||||
|
@ -920,7 +923,7 @@ int ParsePartialIPv4(char *s, netadr_t *a)
|
|||
|
||||
// NET_StringToAdrMasked: extension to NET_StringToAdr to handle IP addresses
|
||||
// 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 *spoint;
|
||||
|
@ -1300,10 +1303,10 @@ void NET_SendLoopPacket (netsrc_t sock, int length, void *data, netadr_t to)
|
|||
|
||||
#define FTENET_ADDRTYPES 2
|
||||
typedef struct ftenet_generic_connection_s {
|
||||
char *name;
|
||||
const char *name;
|
||||
|
||||
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 (*SendPacket)(struct ftenet_generic_connection_s *con, int length, void *data, netadr_t to);
|
||||
void (*Close)(struct ftenet_generic_connection_s *con);
|
||||
|
@ -1327,7 +1330,7 @@ ftenet_connections_t *FTENET_CreateCollection(qboolean listen)
|
|||
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;
|
||||
if (!col)
|
||||
|
@ -1423,7 +1426,7 @@ qboolean FTENET_Loop_SendPacket(ftenet_generic_connection_t *con, int length, vo
|
|||
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;
|
||||
newcon = Z_Malloc(sizeof(*newcon));
|
||||
|
@ -1626,7 +1629,7 @@ qboolean FTENET_Generic_SendPacket(ftenet_generic_connection_t *con, int length,
|
|||
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;
|
||||
int port;
|
||||
|
@ -1658,7 +1661,7 @@ qboolean NET_PortToAdr (int adrfamily, char *s, netadr_t *a)
|
|||
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.
|
||||
ftenet_generic_connection_t *newcon;
|
||||
|
@ -1735,17 +1738,17 @@ ftenet_generic_connection_t *FTENET_Generic_EstablishConnection(int adrfamily, i
|
|||
}
|
||||
|
||||
#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);
|
||||
}
|
||||
#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);
|
||||
}
|
||||
#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);
|
||||
}
|
||||
|
@ -1946,7 +1949,7 @@ void FTENET_TCPConnect_Close(ftenet_generic_connection_t *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.
|
||||
ftenet_tcpconnect_connection_t *newcon;
|
||||
|
@ -2055,13 +2058,13 @@ ftenet_generic_connection_t *FTENET_TCPConnect_EstablishConnection(int affamily,
|
|||
}
|
||||
|
||||
#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);
|
||||
}
|
||||
#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);
|
||||
}
|
||||
|
@ -2606,7 +2609,7 @@ void FTENET_IRCConnect_Close(ftenet_generic_connection_t *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.
|
||||
ftenet_ircconnect_connection_t *newcon;
|
||||
|
@ -3254,7 +3257,7 @@ void NET_Init (void)
|
|||
#ifndef SERVERONLY
|
||||
void NET_InitClient(void)
|
||||
{
|
||||
char *port;
|
||||
const char *port;
|
||||
int p;
|
||||
port = STRINGIFY(PORT_CLIENT);
|
||||
|
||||
|
@ -3474,7 +3477,7 @@ int VFSTCP_ReadBytes (struct vfsfile_s *file, void *buffer, int bytestoread)
|
|||
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;
|
||||
int len;
|
||||
|
@ -3510,7 +3513,7 @@ void VFSTCP_Close (struct vfsfile_s *file)
|
|||
Z_Free(file);
|
||||
}
|
||||
|
||||
vfsfile_t *FS_OpenTCP(char *name)
|
||||
vfsfile_t *FS_OpenTCP(const char *name)
|
||||
{
|
||||
tcpfile_t *newf;
|
||||
int sock;
|
||||
|
|
|
@ -329,10 +329,10 @@ plugin_t *Plug_Load(char *file)
|
|||
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];
|
||||
strcpy(vmname, name);
|
||||
Q_strncpyz(vmname, name, sizeof(vmname));
|
||||
vmname[strlen(vmname) - strlen(param)] = '\0';
|
||||
if (!Plug_Load(vmname))
|
||||
Con_Printf("Couldn't load plugin %s\n", vmname);
|
||||
|
|
|
@ -123,6 +123,8 @@ int PM_PointContents (vec3_t p)
|
|||
model_t *pm;
|
||||
|
||||
pm = pmove.physents[0].model;
|
||||
if (!pm)
|
||||
return FTECONTENTS_EMPTY;
|
||||
pc = pm->funcs.PointContents(pm, p);
|
||||
//we need this for e2m2 - waterjumping on to plats wouldn't work otherwise.
|
||||
for (num = 1; num < pmove.numphysent; num++)
|
||||
|
|
|
@ -469,7 +469,7 @@ void PF_registercvar (progfuncs_t *prinst, struct globalvars_s *pr_globals)
|
|||
////////////////////////////////////////////////////
|
||||
//File access
|
||||
|
||||
#define MAX_QC_FILES 8
|
||||
#define MAX_QC_FILES 256
|
||||
|
||||
#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
|
||||
{
|
||||
Con_Printf("qcfopen: too many files open (trying %s)\n", name);
|
||||
G_FLOAT(OFS_RETURN) = -1;
|
||||
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;
|
||||
pf_fopen_files[i].prinst = prinst;
|
||||
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
|
||||
G_FLOAT(OFS_RETURN) = -1;
|
||||
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);
|
||||
BZ_Free(pf_fopen_files[fnum].data);
|
||||
break;
|
||||
case 3:
|
||||
break;
|
||||
}
|
||||
pf_fopen_files[fnum].data = 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)
|
||||
{
|
||||
char c, *s, *o, *max;
|
||||
char c, *s, *o, *max, *eof;
|
||||
int fnum = G_FLOAT(OFS_PARM0) - FIRST_QC_FILE_INDEX;
|
||||
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.
|
||||
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;
|
||||
while(*s)
|
||||
eof = pf_fopen_files[fnum].data+pf_fopen_files[fnum].len;
|
||||
while(s < eof)
|
||||
{
|
||||
c = *s++;
|
||||
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;
|
||||
|
||||
if (!pr_string_temp[0] && !*s)
|
||||
if (!pr_string_temp[0] && s == eof)
|
||||
G_INT(OFS_RETURN) = 0; //EOF
|
||||
else
|
||||
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.
|
||||
}
|
||||
|
||||
if (pf_fopen_files[fnum].bufferlen < pf_fopen_files[fnum].ofs + len)
|
||||
switch(pf_fopen_files[fnum].accessmode)
|
||||
{
|
||||
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;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
case 1:
|
||||
case 2:
|
||||
if (pf_fopen_files[fnum].bufferlen < pf_fopen_files[fnum].ofs + len)
|
||||
{
|
||||
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);
|
||||
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].ofs+=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)
|
||||
pf_fopen_files[fnum].len = pf_fopen_files[fnum].ofs + len;
|
||||
pf_fopen_files[fnum].ofs+=len;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
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.
|
||||
}
|
||||
|
||||
int search_enumerate(char *name, int fsize, void *parm)
|
||||
int search_enumerate(const char *name, int fsize, void *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_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
|
||||
|
|
|
@ -186,7 +186,7 @@ typedef struct {
|
|||
int bufferleft;
|
||||
int skip;
|
||||
} vmsearch_t;
|
||||
static int VMEnum(char *match, int size, void *args)
|
||||
static int VMEnum(const char *match, int size, void *args)
|
||||
{
|
||||
char *check;
|
||||
int newlen;
|
||||
|
@ -210,13 +210,13 @@ static int VMEnum(char *match, int size, void *args)
|
|||
return true;
|
||||
}
|
||||
|
||||
static int IfFound(char *match, int size, void *args)
|
||||
static int IfFound(const char *match, int size, void *args)
|
||||
{
|
||||
*(qboolean*)args = 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 desc[1024];
|
||||
|
@ -227,21 +227,23 @@ static int VMEnumMods(char *match, int size, void *args)
|
|||
|
||||
newlen = strlen(match)+1;
|
||||
|
||||
if (*match && match[newlen-2] != '/')
|
||||
if (newlen <= 2)
|
||||
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
|
||||
|
||||
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)
|
||||
return true; //we only count directories with a pk3 file
|
||||
|
||||
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)
|
||||
{
|
||||
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
|
||||
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);
|
||||
if (hVM)
|
||||
{
|
||||
|
|
|
@ -21,23 +21,12 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|||
|
||||
//
|
||||
// file IO
|
||||
// for the most part, we use stdio.
|
||||
// if your system doesn't have stdio then urm... well.
|
||||
//
|
||||
|
||||
// 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);
|
||||
void Sys_mkdir (char *path); //not all pre-unix systems have directories (including dos 1)
|
||||
qboolean Sys_remove (char *path);
|
||||
|
||||
qboolean Sys_FindGameData(char *gamename, char *basepath, int basepathlen);
|
||||
qboolean Sys_FindGameData(const char *gamename, char *basepath, int basepathlen);
|
||||
|
||||
//
|
||||
// memory protection
|
||||
|
@ -95,7 +84,7 @@ void Sys_LowFPPrecision (void);
|
|||
void Sys_HighFPPrecision (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);
|
||||
|
||||
|
|
|
@ -159,8 +159,8 @@ void *VARGS Z_TagMalloc(int size, int tag)
|
|||
else
|
||||
{
|
||||
zone->pvdn = zone_head;
|
||||
if (s->next)
|
||||
s->next->pvdn = zone;
|
||||
// if (s->next)
|
||||
// s->next->pvdn = zone;
|
||||
zone_head = zone;
|
||||
}
|
||||
}
|
||||
|
@ -2166,6 +2166,9 @@ void Memory_Init (void *buf, int size)
|
|||
|
||||
void Memory_DeInit(void)
|
||||
{
|
||||
Hunk_TempFree();
|
||||
Cache_Flush();
|
||||
|
||||
#ifdef MULTITHREAD
|
||||
if (zonelock)
|
||||
{
|
||||
|
|
|
@ -326,7 +326,7 @@ mpic_t *(D3D7_Draw_SafePicFromWad) (char *name)
|
|||
|
||||
pic->pic.width = qpic->width;
|
||||
pic->pic.height = qpic->height;
|
||||
p = (LPDIRECTDRAWSURFACE7*)&pic->pic.data;
|
||||
p = (LPDIRECTDRAWSURFACE7*)&pic->pic.d.data;
|
||||
if (!strcmp(name, "conchars"))
|
||||
*p = draw_chars_tex;
|
||||
else
|
||||
|
@ -367,7 +367,7 @@ mpic_t *(D3D7_Draw_SafeCachePic) (char *path)
|
|||
|
||||
pic->pic.width = qpic->width;
|
||||
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);
|
||||
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);
|
||||
|
@ -422,7 +422,7 @@ void (D3D7_Draw_ReInit) (void)
|
|||
strcpy(d3dmenu_cachepics[d3dmenu_numcachepics].name, "conchars");
|
||||
d3dmenu_cachepics[d3dmenu_numcachepics].pic.width = 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++;
|
||||
|
||||
|
||||
|
@ -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].t = t2;
|
||||
|
||||
p = (LPDIRECTDRAWSURFACE7*)&pic->data;
|
||||
p = (LPDIRECTDRAWSURFACE7*)&pic->d.data;
|
||||
pD3DDev->lpVtbl->SetTexture(pD3DDev, 0, *p);
|
||||
|
||||
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;
|
||||
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);
|
||||
|
||||
D3D7_Set2D ();
|
||||
|
@ -799,7 +799,7 @@ void (D3D7_Media_ShowFrameRGBA_32) (qbyte *framedata, int inwidth, int inheight
|
|||
pic.width = inwidth;
|
||||
pic.height = inheight;
|
||||
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);
|
||||
|
||||
D3D7_Set2D ();
|
||||
|
@ -814,7 +814,7 @@ void (D3D7_Media_ShowFrame8bit) (qbyte *framedata, int inwidth, int inheight,
|
|||
{
|
||||
mpic_t pic;
|
||||
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);
|
||||
|
||||
D3D7_Set2D ();
|
||||
|
|
|
@ -113,33 +113,6 @@ static galiastexnum_t *D3D7_ChooseSkin(galiasinfo_t *inf, char *modelname, int s
|
|||
Skin_Find(e->scoreboard);
|
||||
tc = e->scoreboard->ttopcolor;
|
||||
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
|
||||
{
|
||||
|
|
|
@ -672,7 +672,7 @@ static void D3D7_DrawSpriteModel (entity_t *e)
|
|||
right[1]*=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;
|
||||
|
|
|
@ -255,65 +255,16 @@ qboolean D3DAppActivate(BOOL fActive, BOOL minimize)
|
|||
sound_active = true;
|
||||
}
|
||||
|
||||
IN_UpdateGrabs(modestate != MS_WINDOWED, ActiveApp);
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
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.
|
||||
/*
|
||||
if (qSetDeviceGammaRamp)
|
||||
{
|
||||
if (vid_desktopgamma.value)
|
||||
{
|
||||
HDC hDC = GetDC(GetDesktopWindow());
|
||||
qSetDeviceGammaRamp (hDC, originalgammaramps);
|
||||
ReleaseDC(GetDesktopWindow(), hDC);
|
||||
}
|
||||
else
|
||||
{
|
||||
qSetDeviceGammaRamp(maindc, originalgammaramps);
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
return true;
|
||||
|
@ -950,6 +901,14 @@ void (D3D7_SCR_UpdateScreen) (void)
|
|||
extern cvar_t vid_conwidth, vid_conheight;
|
||||
vid.conwidth = vid_conwidth.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)
|
||||
vid.recalc_refdef = true;
|
||||
vid.width = vid.conwidth;
|
||||
|
@ -1067,32 +1026,7 @@ void (D3D7_SCR_UpdateScreen) (void)
|
|||
|
||||
|
||||
|
||||
if (modestate == MS_WINDOWED)
|
||||
{
|
||||
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 ();
|
||||
}
|
||||
}
|
||||
}
|
||||
IN_UpdateGrabs(modestate != MS_WINDOWED, ActiveApp);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -343,7 +343,7 @@ mpic_t *D3D9_Draw_SafePicFromWad (char *name)
|
|||
|
||||
Q_strncpyz (pic->name, name, sizeof(pic->name));
|
||||
|
||||
p = (LPDIRECT3DBASETEXTURE9*)&pic->pic.data;
|
||||
p = (LPDIRECT3DBASETEXTURE9*)&pic->pic.d.data;
|
||||
if (!strcmp(name, "conchars"))
|
||||
{
|
||||
pic->pic.width = 256;
|
||||
|
@ -396,7 +396,7 @@ mpic_t *D3D9_Draw_SafeCachePic (char *path)
|
|||
|
||||
Q_strncpyz (pic->name, path, sizeof(pic->name));
|
||||
|
||||
p = (LPDIRECT3DBASETEXTURE9*)&pic->pic.data;
|
||||
p = (LPDIRECT3DBASETEXTURE9*)&pic->pic.d.data;
|
||||
|
||||
if (qpic)
|
||||
{
|
||||
|
@ -453,7 +453,7 @@ void D3D9_Draw_ReInit (void)
|
|||
strcpy(d3dmenu_cachepics[d3dmenu_numcachepics].name, "conchars");
|
||||
d3dmenu_cachepics[d3dmenu_numcachepics].pic.width = 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++;
|
||||
|
||||
|
||||
|
@ -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].t = t2;
|
||||
|
||||
p = (LPDIRECT3DBASETEXTURE9*)&pic->data;
|
||||
p = (LPDIRECT3DBASETEXTURE9*)&pic->d.data;
|
||||
IDirect3DDevice9_SetTexture(pD3DDev9, 0, *p);
|
||||
|
||||
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;
|
||||
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);
|
||||
|
||||
D3D9_Set2D ();
|
||||
|
@ -839,7 +839,7 @@ void D3D9_Media_ShowFrameRGBA_32 (qbyte *framedata, int inwidth, int inheight)
|
|||
pic.width = inwidth;
|
||||
pic.height = inheight;
|
||||
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);
|
||||
|
||||
D3D9_Set2D ();
|
||||
|
@ -854,7 +854,7 @@ void (D3D9_Media_ShowFrame8bit) (qbyte *framedata, int inwidth, int inheight,
|
|||
{
|
||||
mpic_t pic;
|
||||
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);
|
||||
|
||||
D3D9_Set2D ();
|
||||
|
|
|
@ -997,7 +997,7 @@ static void D3D9_DrawSpriteModel (entity_t *e)
|
|||
IDirect3DDevice9_SetRenderState(pD3DDev9, D3DRS_ALPHABLENDENABLE, TRUE);
|
||||
|
||||
if (pic)
|
||||
IDirect3DDevice9_SetTexture(pD3DDev9, 0, *(LPDIRECT3DBASETEXTURE9*)&pic->data);
|
||||
IDirect3DDevice9_SetTexture(pD3DDev9, 0, *(LPDIRECT3DBASETEXTURE9*)&pic->d);
|
||||
else
|
||||
IDirect3DDevice9_SetTexture(pD3DDev9, 0, NULL);
|
||||
|
||||
|
@ -1085,7 +1085,7 @@ static void D3D9_DrawSpriteModel (entity_t *e)
|
|||
right[1]*=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;
|
||||
|
|
|
@ -263,65 +263,15 @@ qboolean D3D9AppActivate(BOOL fActive, BOOL minimize)
|
|||
sound_active = true;
|
||||
}
|
||||
|
||||
IN_UpdateGrabs(modestate != MS_WINDOWED, ActiveApp);
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
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.
|
||||
/*
|
||||
if (qSetDeviceGammaRamp)
|
||||
{
|
||||
if (vid_desktopgamma.value)
|
||||
{
|
||||
HDC hDC = GetDC(GetDesktopWindow());
|
||||
qSetDeviceGammaRamp (hDC, originalgammaramps);
|
||||
ReleaseDC(GetDesktopWindow(), hDC);
|
||||
}
|
||||
else
|
||||
{
|
||||
qSetDeviceGammaRamp(maindc, originalgammaramps);
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
return true;
|
||||
|
@ -1335,28 +1285,7 @@ void (D3D9_SCR_UpdateScreen) (void)
|
|||
window_center_y = (window_rect.top + window_rect.bottom)/2;
|
||||
|
||||
|
||||
|
||||
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 ();
|
||||
}
|
||||
}
|
||||
}
|
||||
IN_UpdateGrabs(modestate != MS_WINDOWED, ActiveApp);
|
||||
|
||||
VID_ShiftPalette (NULL);
|
||||
}
|
||||
|
|
|
@ -260,7 +260,7 @@ BSC32=bscmake.exe
|
|||
# ADD BSC32 /nologo
|
||||
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 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"
|
||||
|
||||
|
@ -363,7 +363,7 @@ LINK32=link.exe
|
|||
# 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
|
||||
# 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 MTL /nologo /D "_DEBUG" /mktyplib203 /win32
|
||||
# ADD BASE RSC /l 0x809 /d "_DEBUG"
|
||||
|
@ -550,6 +550,195 @@ SOURCE=..\server\sv_user.c
|
|||
# End 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
|
||||
# ADD CPP /Yu"qwsvdef.h"
|
||||
# End Source File
|
||||
|
@ -565,45 +754,65 @@ SOURCE=..\server\svq3_game.c
|
|||
!IF "$(CFG)" == "ftequake - Win32 Release"
|
||||
|
||||
# PROP Exclude_From_Build 1
|
||||
# ADD CPP /Yu"qwsvdef.h"
|
||||
|
||||
!ELSEIF "$(CFG)" == "ftequake - Win32 Debug"
|
||||
|
||||
# PROP Exclude_From_Build 1
|
||||
# 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"
|
||||
|
||||
# PROP Exclude_From_Build 1
|
||||
# ADD CPP /Yu"qwsvdef.h"
|
||||
|
||||
!ELSEIF "$(CFG)" == "ftequake - Win32 MinGLRelease"
|
||||
|
||||
# PROP Exclude_From_Build 1
|
||||
# ADD CPP /Yu"qwsvdef.h"
|
||||
|
||||
!ELSEIF "$(CFG)" == "ftequake - Win32 Debug Dedicated Server"
|
||||
|
||||
# ADD CPP /Yu"qwsvdef.h"
|
||||
|
||||
!ELSEIF "$(CFG)" == "ftequake - Win32 Release Dedicated Server"
|
||||
|
||||
# PROP Exclude_From_Build 1
|
||||
# ADD CPP /Yu"qwsvdef.h"
|
||||
|
||||
!ELSEIF "$(CFG)" == "ftequake - Win32 MinSW"
|
||||
|
||||
# PROP Exclude_From_Build 1
|
||||
# ADD CPP /Yu"qwsvdef.h"
|
||||
|
||||
!ELSEIF "$(CFG)" == "ftequake - Win32 GLDebugQ3"
|
||||
|
||||
# ADD CPP /Yu"qwsvdef.h"
|
||||
|
||||
!ELSEIF "$(CFG)" == "ftequake - Win32 Debug Dedicated ServerQ3"
|
||||
|
||||
# PROP BASE Exclude_From_Build 1
|
||||
# ADD CPP /Yu"qwsvdef.h"
|
||||
|
||||
!ELSEIF "$(CFG)" == "ftequake - Win32 D3DDebug"
|
||||
|
||||
# ADD CPP /Yu"qwsvdef.h"
|
||||
|
||||
!ENDIF
|
||||
|
||||
# End Source File
|
||||
|
@ -1183,6 +1392,45 @@ SOURCE=..\client\cl_ui.c
|
|||
# End 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
|
||||
|
||||
!IF "$(CFG)" == "ftequake - Win32 Release"
|
||||
|
@ -6165,6 +6413,18 @@ SOURCE=..\common\fs.c
|
|||
# End 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
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
@ -10457,9 +10717,6 @@ SOURCE=..\client\winquake.rc
|
|||
|
||||
!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 GLDebug"
|
||||
|
@ -10537,6 +10794,10 @@ SOURCE=..\client\quakedef.h
|
|||
|
||||
SOURCE=..\client\render.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\server\svhl_gcapi.h
|
||||
# End Source File
|
||||
# End Group
|
||||
# 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>
|
||||
|
||||
Package=<5>
|
||||
|
@ -69,6 +84,18 @@ Package=<4>
|
|||
|
||||
###############################################################################
|
||||
|
||||
Project: "qcvm"=..\QCLIB\qcvm\qcvm.dsp - Package Owner=<4>
|
||||
|
||||
Package=<5>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
Package=<4>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
###############################################################################
|
||||
|
||||
Global:
|
||||
|
||||
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;
|
||||
int gl_anisotropy_factor;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
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)];
|
||||
qbyte conback_buffer[sizeof(mpic_t)];
|
||||
qbyte custconback_buffer[sizeof(mpic_t)];
|
||||
mpic_t *default_conback = (mpic_t *)&conback_buffer, *conback, *custom_conback = (mpic_t *)&custconback_buffer;
|
||||
|
||||
#include "hash.h"
|
||||
|
@ -245,7 +239,7 @@ qboolean Draw_RealPicFromWad (mpic_t *out, char *name)
|
|||
in = W_SafeGetLumpName (name+4);
|
||||
else
|
||||
in = W_SafeGetLumpName (name);
|
||||
gl = (glpic_t *)out->data;
|
||||
gl = &out->d.gl;
|
||||
|
||||
if (in)
|
||||
{
|
||||
|
@ -393,7 +387,7 @@ mpic_t *GLDraw_SafeCachePic (char *path)
|
|||
if ((mem = ReadPCXFile(data, com_filesize, &pic->pic.width, &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)))
|
||||
gl->texnum = GL_LoadTexture32(path, pic->pic.width, pic->pic.height, (unsigned *)mem, false, false);
|
||||
gl->sl = 0;
|
||||
|
@ -434,7 +428,7 @@ mpic_t *GLDraw_SafeCachePic (char *path)
|
|||
pic->pic.height = height;
|
||||
if (mem)
|
||||
{
|
||||
gl = (glpic_t *)pic->pic.data;
|
||||
gl = &pic->pic.d.gl;
|
||||
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->sl = 0;
|
||||
|
@ -463,7 +457,7 @@ mpic_t *GLDraw_SafeCachePic (char *path)
|
|||
if ((mem = ReadJPEGFile(data, com_filesize, &pic->pic.width, &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)))
|
||||
gl->texnum = GL_LoadTexture32(path, pic->pic.width, pic->pic.height, (unsigned *)mem, false, false);
|
||||
gl->sl = 0;
|
||||
|
@ -491,7 +485,7 @@ mpic_t *GLDraw_SafeCachePic (char *path)
|
|||
strcpy(pic->name, path);
|
||||
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)))
|
||||
gl->texnum = GL_LoadTexture32(path, pic->pic.width, pic->pic.height, (unsigned *)dat, false, true);
|
||||
gl->sl = 0;
|
||||
|
@ -542,7 +536,7 @@ mpic_t *GLDraw_SafeCachePic (char *path)
|
|||
pic->pic.width = qpic->width;
|
||||
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)))
|
||||
gl->texnum = GL_LoadPicTexture (qpic);
|
||||
gl->sl = 0;
|
||||
|
@ -969,7 +963,7 @@ TRACE(("dbg: GLDraw_ReInit: Allocating upload buffers\n"));
|
|||
strcpy(glmenu_cachepics[glmenu_numcachepics].name, "conchars");
|
||||
glmenu_cachepics[glmenu_numcachepics].pic.width = 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->sl = 0;
|
||||
gl->tl = 0;
|
||||
|
@ -988,7 +982,7 @@ TRACE(("dbg: GLDraw_ReInit: Allocating upload buffers\n"));
|
|||
strcpy(glmenu_cachepics[glmenu_numcachepics].name, "tinyfont");
|
||||
glmenu_cachepics[glmenu_numcachepics].pic.width = 128;
|
||||
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);
|
||||
gl->sl = 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");
|
||||
glmenu_cachepics[glmenu_numcachepics].pic.width = bigfont->width;
|
||||
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);
|
||||
qglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_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_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 (!ncdata) //no fallback
|
||||
|
@ -1142,7 +1136,7 @@ TRACE(("dbg: GLDraw_ReInit: Allocating upload buffers\n"));
|
|||
|
||||
custom_conback->width = vid.conwidth;
|
||||
custom_conback->height = vid.conheight;
|
||||
gl = (glpic_t *)custom_conback->data;
|
||||
gl = &custom_conback->d.gl;
|
||||
gl->texnum = 0;
|
||||
gl->sl = 0;
|
||||
gl->sh = 1;
|
||||
|
@ -1586,7 +1580,7 @@ void GLDraw_Pic (int x, int y, mpic_t *pic)
|
|||
|
||||
if (scrap_dirty)
|
||||
Scrap_Upload ();
|
||||
gl = (glpic_t *)pic->data;
|
||||
gl = &pic->d.gl;
|
||||
|
||||
draw_mesh_xyz[0][0] = x;
|
||||
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)
|
||||
Scrap_Upload ();
|
||||
gl = (glpic_t *)pic->data;
|
||||
gl = &pic->d.gl;
|
||||
// qglColor4f (1,1,1,1);
|
||||
GL_Bind (gl->texnum);
|
||||
qglBegin (GL_QUADS);
|
||||
|
@ -1775,7 +1769,7 @@ void GLDraw_AlphaPic (int x, int y, mpic_t *pic, float alpha)
|
|||
|
||||
if (scrap_dirty)
|
||||
Scrap_Upload ();
|
||||
gl = (glpic_t *)pic->data;
|
||||
gl = &pic->d.gl;
|
||||
qglDisable(GL_ALPHA_TEST);
|
||||
qglEnable (GL_BLEND);
|
||||
// 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)
|
||||
Scrap_Upload ();
|
||||
gl = (glpic_t *)pic->data;
|
||||
gl = &pic->d.gl;
|
||||
|
||||
oldglwidth = gl->sh - gl->sl;
|
||||
oldglheight = gl->th - gl->tl;
|
||||
|
@ -2005,7 +1999,7 @@ void GLDraw_TileClear (int x, int y, int w, int h)
|
|||
}
|
||||
else
|
||||
{
|
||||
GL_Bind (*(int *)draw_backtile->data);
|
||||
GL_Bind (draw_backtile->d.gl.texnum);
|
||||
qglBegin (GL_QUADS);
|
||||
qglTexCoord2f (x/64.0, y/64.0);
|
||||
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)
|
||||
Scrap_Upload ();
|
||||
gl = (glpic_t *)pic->data;
|
||||
gl = &pic->d.gl;
|
||||
/*
|
||||
s2 = s2
|
||||
|
||||
|
@ -2370,7 +2364,7 @@ void GL_Font_Callback(struct cvar_s *var, char *oldvalue)
|
|||
pic = GLDraw_IsCached("conchars");
|
||||
if (pic)
|
||||
{
|
||||
glpic_t *gl = (glpic_t *)pic->data;
|
||||
glpic_t *gl = &pic->d.gl;
|
||||
gl->texnum = char_texture;
|
||||
}
|
||||
else
|
||||
|
@ -2398,7 +2392,7 @@ void GL_Conback_Callback(struct cvar_s *var, char *oldvalue)
|
|||
else
|
||||
{
|
||||
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
|
||||
|
||||
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
|
||||
|
@ -403,10 +447,10 @@ void HL_SetupBones(hlmodel_t *model, int seqnum, int firstbone, int lastbone, fl
|
|||
return;
|
||||
if(frame >= sequence->numframes)
|
||||
{
|
||||
if (sequence->motiontype&1)
|
||||
frame = sequence->numframes-1;
|
||||
else
|
||||
if (sequence->loop)
|
||||
frame %= sequence->numframes;
|
||||
else
|
||||
frame = sequence->numframes-1;
|
||||
}
|
||||
|
||||
if (lastbone > model->header->numbones)
|
||||
|
@ -576,6 +620,7 @@ void R_DrawHLModel(entity_t *curent)
|
|||
if (cbone >= lastbone)
|
||||
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 */
|
||||
cbone = lastbone;
|
||||
}
|
||||
|
||||
/* Manipulate each mesh directly */
|
||||
|
|
|
@ -404,7 +404,6 @@ Mod_LoadModel
|
|||
Loads a model into the cache
|
||||
==================
|
||||
*/
|
||||
char *COM_FileExtension (char *in);
|
||||
model_t *GLMod_LoadModel (model_t *mod, qboolean crash)
|
||||
{
|
||||
void *d;
|
||||
|
@ -2064,7 +2063,6 @@ void *suplementryclipnodes;
|
|||
void *suplementryplanes;
|
||||
void *crouchhullfile;
|
||||
|
||||
qbyte *COM_LoadMallocFile (char *path);
|
||||
void GLMod_LoadCrouchHull(void)
|
||||
{
|
||||
int i, h;
|
||||
|
@ -2235,7 +2233,7 @@ qboolean GLMod_LoadClipnodes (lump_t *l)
|
|||
hull->planes = loadmodel->planes;
|
||||
hull->clip_mins[0] = -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[1] = 16;
|
||||
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;
|
||||
|
||||
pspriteframe->width = width;
|
||||
pspriteframe->height = height;
|
||||
pspriteframe->p.width = width;
|
||||
pspriteframe->p.height = height;
|
||||
origin[0] = LittleLong (pinframe->origin[0]);
|
||||
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->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
|
||||
COM_StripExtension(loadmodel->name, name, 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.
|
||||
COM_StripExtension(loadmodel->name, name, 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
|
||||
COM_StripExtension(COM_SkipPath(loadmodel->name), name, 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)
|
||||
{
|
||||
size *= 4;
|
||||
if (!pspriteframe->gl_texturenum)
|
||||
pspriteframe->gl_texturenum = R_LoadTexture32 (name, width, height, (unsigned *)(pinframe + 1), true, true);
|
||||
if (!pspriteframe->p.d.gl.texnum)
|
||||
pspriteframe->p.d.gl.texnum = R_LoadTexture32 (name, width, height, (unsigned *)(pinframe + 1), true, true);
|
||||
}
|
||||
else if (version == SPRITEHL_VERSION)
|
||||
{
|
||||
if (!pspriteframe->gl_texturenum)
|
||||
pspriteframe->gl_texturenum = R_LoadTexture8Pal32 (name, width, height, (qbyte *)(pinframe + 1), (qbyte*)palette, true, true);
|
||||
if (!pspriteframe->p.d.gl.texnum)
|
||||
pspriteframe->p.d.gl.texnum = R_LoadTexture8Pal32 (name, width, height, (qbyte *)(pinframe + 1), (qbyte*)palette, true, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!pspriteframe->gl_texturenum)
|
||||
pspriteframe->gl_texturenum = R_LoadTexture8 (name, width, height, (qbyte *)(pinframe + 1), true, true);
|
||||
if (!pspriteframe->p.d.gl.texnum)
|
||||
pspriteframe->p.d.gl.texnum = R_LoadTexture8 (name, width, height, (qbyte *)(pinframe + 1), true, true);
|
||||
}
|
||||
|
||||
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->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->height = LittleLong(pframetype->height);
|
||||
frame->p.width = LittleLong(pframetype->width);
|
||||
frame->p.height = LittleLong(pframetype->height);
|
||||
origin[0] = LittleLong (pframetype->origin_x);
|
||||
origin[1] = LittleLong (pframetype->origin_y);
|
||||
|
||||
frame->up = -origin[1];
|
||||
frame->down = frame->height - origin[1];
|
||||
frame->down = frame->p.height - origin[1];
|
||||
frame->left = -origin[0];
|
||||
frame->right = frame->width - origin[0];
|
||||
frame->right = frame->p.width - origin[0];
|
||||
|
||||
pframetype++;
|
||||
}
|
||||
|
|
|
@ -416,13 +416,16 @@ SPRITE MODELS
|
|||
// FIXME: shorten these?
|
||||
typedef struct mspriteframe_s
|
||||
{
|
||||
float up, down, left, right;
|
||||
/*
|
||||
int width;
|
||||
int height;
|
||||
float up, down, left, right;
|
||||
int gl_texturenum;
|
||||
#ifdef SWQUAKE
|
||||
qbyte pixels[4];
|
||||
#endif
|
||||
*/
|
||||
mpic_t p;
|
||||
} mspriteframe_t;
|
||||
|
||||
mspriteframe_t *R_GetSpriteFrame (entity_t *currententity);
|
||||
|
|
|
@ -142,4 +142,64 @@ void GLR_NetGraph (void)
|
|||
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
|
||||
|
|
|
@ -598,7 +598,7 @@ void R_DrawSpriteModel (entity_t *e)
|
|||
|
||||
GL_DisableMultitexture();
|
||||
|
||||
GL_Bind(frame->gl_texturenum);
|
||||
GL_Bind(frame->p.d.gl.texnum);
|
||||
|
||||
{
|
||||
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();
|
||||
R_RotateForEntity(s->ownerent);
|
||||
#ifdef Q3SHADERS
|
||||
|
@ -3620,7 +3622,6 @@ void GL_CreateSurfaceLightmap (msurface_t *surf, int shift)
|
|||
void GLSurf_DeInit(void)
|
||||
{
|
||||
int i;
|
||||
qglDeleteTextures(numlightmaps, lightmap_textures);
|
||||
for (i = 0; i < numlightmaps; i++)
|
||||
{
|
||||
if (!lightmap[i])
|
||||
|
@ -3630,7 +3631,10 @@ void GLSurf_DeInit(void)
|
|||
}
|
||||
|
||||
if (lightmap_textures)
|
||||
{
|
||||
qglDeleteTextures(numlightmaps, lightmap_textures);
|
||||
BZ_Free(lightmap_textures);
|
||||
}
|
||||
if (lightmap)
|
||||
BZ_Free(lightmap);
|
||||
|
||||
|
@ -3650,7 +3654,7 @@ with all the surfaces from all brush models
|
|||
*/
|
||||
void GL_BuildLightmaps (void)
|
||||
{
|
||||
int i, j;
|
||||
int i, j, t;
|
||||
model_t *m;
|
||||
int shift;
|
||||
|
||||
|
@ -3740,13 +3744,19 @@ void GL_BuildLightmaps (void)
|
|||
currentmodel = m;
|
||||
shift = GLR_LightmapShift(currentmodel);
|
||||
|
||||
for (i=0 ; i<m->numsurfaces ; i++)
|
||||
for (t = 0; t < m->numtextures; t++)
|
||||
{
|
||||
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);
|
||||
for (i=0 ; i<m->numsurfaces ; i++)
|
||||
{//extra surface loop so we get slightly less texture switches
|
||||
if (m->surfaces[i].texinfo->texture == m->textures[t])
|
||||
{
|
||||
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);
|
||||
Shader_MakeCache(shaderbuf+shaderbuflen);
|
||||
|
@ -2350,7 +2350,7 @@ void Shader_Default2D(char *shortname, shader_t *s)
|
|||
{
|
||||
mp = Draw_SafeCachePic(va("%s.lmp", shortname));
|
||||
if (mp)
|
||||
pass->anim_frames[0] = *(int*)mp->data;
|
||||
pass->anim_frames[0] = mp->d.gl.texnum;
|
||||
|
||||
if (!pass->anim_frames[0])
|
||||
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 <commctrl.h>
|
||||
|
||||
#ifndef SetWindowLongPtr //yes its a define, for unicode support
|
||||
#define SetWindowLongPtr SetWindowLong
|
||||
#endif
|
||||
|
||||
#ifndef CDS_FULLSCREEN
|
||||
#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;
|
||||
|
||||
|
||||
#define WINDOW_CLASS_NAME "WinQuake"
|
||||
#define WINDOW_CLASS_NAME "FTEGLQuake"
|
||||
|
||||
#define MAX_MODE_LIST 128
|
||||
#define VID_ROW_SIZE 3
|
||||
|
@ -349,11 +352,20 @@ qboolean VID_SetWindowedMode (rendererstate_t *info)
|
|||
DIBWidth = info->width;
|
||||
DIBHeight = info->height;
|
||||
|
||||
WindowStyle = WS_OVERLAPPED | WS_BORDER | WS_CAPTION | WS_SYSMENU |
|
||||
WS_MINIMIZEBOX;
|
||||
ExWindowStyle = 0;
|
||||
if (sys_hijackwindow)
|
||||
{
|
||||
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;
|
||||
AdjustWindowRectEx(&rect, WindowStyle, FALSE, 0);
|
||||
|
@ -370,7 +382,7 @@ qboolean VID_SetWindowedMode (rendererstate_t *info)
|
|||
rect.left, rect.top,
|
||||
wwidth,
|
||||
wheight,
|
||||
NULL,
|
||||
sys_hijackwindow,
|
||||
NULL,
|
||||
global_hInstance,
|
||||
NULL);
|
||||
|
@ -381,9 +393,14 @@ qboolean VID_SetWindowedMode (rendererstate_t *info)
|
|||
return false;
|
||||
}
|
||||
|
||||
// Center and show the DIB window
|
||||
CenterWindow(dibwindow, WindowRect.right - WindowRect.left,
|
||||
WindowRect.bottom - WindowRect.top, false);
|
||||
if (!sys_hijackwindow)
|
||||
{
|
||||
// Center and show the DIB window
|
||||
CenterWindow(dibwindow, WindowRect.right - WindowRect.left,
|
||||
WindowRect.bottom - WindowRect.top, false);
|
||||
}
|
||||
else
|
||||
SetFocus(dibwindow);
|
||||
|
||||
// ShowWindow (dibwindow, SW_SHOWDEFAULT);
|
||||
// UpdateWindow (dibwindow);
|
||||
|
@ -575,13 +592,9 @@ static qboolean CreateMainWindow(rendererstate_t *info)
|
|||
{
|
||||
TRACE(("dbg: GLVID_SetMode: VID_SetWindowedMode\n"));
|
||||
stat = VID_SetWindowedMode(info);
|
||||
IN_ActivateMouse ();
|
||||
IN_HideMouse ();
|
||||
}
|
||||
else
|
||||
{
|
||||
IN_DeactivateMouse ();
|
||||
IN_ShowMouse ();
|
||||
TRACE(("dbg: GLVID_SetMode: VID_SetWindowedMode 2\n"));
|
||||
stat = VID_SetWindowedMode(info);
|
||||
}
|
||||
|
@ -590,12 +603,10 @@ static qboolean CreateMainWindow(rendererstate_t *info)
|
|||
{
|
||||
TRACE(("dbg: GLVID_SetMode: VID_SetFullDIBMode\n"));
|
||||
stat = VID_SetFullDIBMode(info);
|
||||
if (stat)
|
||||
{
|
||||
IN_ActivateMouse ();
|
||||
IN_HideMouse ();
|
||||
}
|
||||
}
|
||||
|
||||
IN_UpdateGrabs(info->fullscreen, ActiveApp);
|
||||
|
||||
return stat;
|
||||
}
|
||||
BOOL CheckForcePixelFormat(rendererstate_t *info);
|
||||
|
@ -604,7 +615,9 @@ int GLVID_SetMode (rendererstate_t *info, unsigned char *palette)
|
|||
{
|
||||
int temp;
|
||||
qboolean stat;
|
||||
#ifndef NPQTV
|
||||
MSG msg;
|
||||
#endif
|
||||
// HDC hdc;
|
||||
|
||||
TRACE(("dbg: GLVID_SetMode\n"));
|
||||
|
@ -676,12 +689,13 @@ int GLVID_SetMode (rendererstate_t *info, unsigned char *palette)
|
|||
SetForegroundWindow (mainwindow);
|
||||
VID_SetPalette (palette);
|
||||
|
||||
while (PeekMessage (&msg, NULL, 0, 0, PM_REMOVE))
|
||||
#ifndef NPQTV
|
||||
while (PeekMessage (&msg, mainwindow, 0, 0, PM_REMOVE))
|
||||
{
|
||||
TranslateMessage (&msg);
|
||||
DispatchMessage (&msg);
|
||||
}
|
||||
|
||||
#endif
|
||||
Sleep (100);
|
||||
|
||||
SetWindowPos (mainwindow, HWND_TOP, 0, 0, 0, 0,
|
||||
|
@ -750,7 +764,9 @@ void VID_UnSetMode (void)
|
|||
if (mainwindow)
|
||||
{
|
||||
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);
|
||||
mainwindow = NULL;
|
||||
}
|
||||
|
@ -915,33 +931,8 @@ void GL_DoSwap (void)
|
|||
qSwapBuffers(maindc);
|
||||
|
||||
// handle the mouse state when windowed if that's changed
|
||||
if (modestate == MS_WINDOWED)
|
||||
{
|
||||
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 ();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
IN_UpdateGrabs(modestate != MS_WINDOWED, ActiveApp);
|
||||
}
|
||||
|
||||
void GL_EndRendering (void)
|
||||
|
@ -1042,13 +1033,6 @@ void GLVID_ShiftPalette (unsigned char *palette)
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
void VID_SetDefaultMode (void)
|
||||
{
|
||||
IN_DeactivateMouse ();
|
||||
}
|
||||
|
||||
|
||||
void GLVID_Shutdown (void)
|
||||
{
|
||||
if (qSetDeviceGammaRamp)
|
||||
|
@ -1324,12 +1308,12 @@ qboolean GLAppActivate(BOOL fActive, BOOL minimize)
|
|||
sound_active = true;
|
||||
}
|
||||
|
||||
IN_UpdateGrabs(modestate != MS_WINDOWED, ActiveApp);
|
||||
|
||||
if (fActive)
|
||||
{
|
||||
if (modestate != MS_WINDOWED)
|
||||
{
|
||||
IN_ActivateMouse ();
|
||||
IN_HideMouse ();
|
||||
if (vid_canalttab && vid_wassuspended) {
|
||||
vid_wassuspended = false;
|
||||
ChangeDisplaySettings (&gdevmode, CDS_FULLSCREEN);
|
||||
|
@ -1339,11 +1323,6 @@ qboolean GLAppActivate(BOOL fActive, BOOL minimize)
|
|||
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);
|
||||
}
|
||||
|
@ -1352,18 +1331,11 @@ qboolean GLAppActivate(BOOL fActive, BOOL minimize)
|
|||
{
|
||||
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.
|
||||
|
||||
|
@ -1405,16 +1377,33 @@ LONG WINAPI GLMainWndProc (
|
|||
switch (uMsg)
|
||||
{
|
||||
case WM_KILLFOCUS:
|
||||
GLAppActivate(FALSE, Minimized);
|
||||
if (modestate == MS_FULLDIB)
|
||||
ShowWindow(mainwindow, SW_SHOWMINNOACTIVE);
|
||||
ClearAllStates ();
|
||||
break;
|
||||
case WM_SETFOCUS:
|
||||
if (!GLAppActivate(TRUE, Minimized))
|
||||
break;
|
||||
ClearAllStates ();
|
||||
break;
|
||||
|
||||
case WM_CREATE:
|
||||
break;
|
||||
|
||||
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 ();
|
||||
break;
|
||||
|
||||
|
@ -1448,7 +1437,12 @@ LONG WINAPI GLMainWndProc (
|
|||
temp = 0;
|
||||
|
||||
if (wParam & MK_LBUTTON)
|
||||
{
|
||||
temp |= 1;
|
||||
#ifdef NPQTV
|
||||
SetFocus(hWnd);
|
||||
#endif
|
||||
}
|
||||
|
||||
if (wParam & MK_RBUTTON)
|
||||
temp |= 2;
|
||||
|
@ -1606,6 +1600,7 @@ void VID_Init8bitPalette()
|
|||
void GLVID_DeInit (void)
|
||||
{
|
||||
GLVID_Shutdown();
|
||||
ActiveApp = false;
|
||||
|
||||
Cvar_Unhook(&_vid_wait_override);
|
||||
|
||||
|
@ -1636,11 +1631,8 @@ qboolean GLVID_Init (rendererstate_t *info, unsigned char *palette)
|
|||
wc.lpszMenuName = 0;
|
||||
wc.lpszClassName = WINDOW_CLASS_NAME;
|
||||
|
||||
if (!RegisterClass (&wc) )
|
||||
{
|
||||
Con_Printf(CON_ERROR "Couldn't register window class\n");
|
||||
return false;
|
||||
}
|
||||
if (!RegisterClass (&wc)) //this isn't really fatal, we'll let the CreateWindow fail instead.
|
||||
MessageBox(NULL, "RegisterClass failed", "GAH", 0);
|
||||
|
||||
hIcon = LoadIcon (global_hInstance, MAKEINTRESOURCE (IDI_ICON2));
|
||||
|
||||
|
|
|
@ -4144,6 +4144,7 @@ rendererinfo_t d3drendererinfo = {
|
|||
Mod_GetTag,
|
||||
Mod_TagNumForName,
|
||||
NULL,
|
||||
NULL,
|
||||
|
||||
D3DVID_Init,
|
||||
GLVID_DeInit,
|
||||
|
|
|
@ -167,7 +167,8 @@ typedef struct
|
|||
{
|
||||
char name[32];
|
||||
float timing;
|
||||
int unknown1[5];
|
||||
int loop;
|
||||
int unknown1[4];
|
||||
int numframes;
|
||||
int unknown2[2];
|
||||
int motiontype;
|
||||
|
|
|
@ -14,8 +14,6 @@
|
|||
|
||||
int ftpfilelistsocket;
|
||||
|
||||
char *COM_ParseOut (char *data, char *out, int outlen);
|
||||
|
||||
static iwboolean ftpserverinitied = false;
|
||||
iwboolean ftpserverfailed = false;
|
||||
static int ftpserversocket;
|
||||
|
@ -103,22 +101,26 @@ void FTP_ServerShutdown(void)
|
|||
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 i;
|
||||
char buffer[256+1];
|
||||
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.
|
||||
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;
|
||||
#endif
|
||||
|
||||
Q_strncpyz(nondirname, rawname, sizeof(nondirname));
|
||||
if (isdir)
|
||||
fname[strlen(fname)-1] = '\0';
|
||||
nondirname[strlen(nondirname)-1] = '\0';
|
||||
fname = nondirname;
|
||||
|
||||
while((slash = strchr(fname, '/')))
|
||||
fname = slash+1;
|
||||
|
|
|
@ -71,7 +71,7 @@ struct sockaddr;
|
|||
struct sockaddr_qstorage;
|
||||
int NetadrToSockadr (netadr_t *a, struct sockaddr_qstorage *s);
|
||||
|
||||
qboolean SV_AllowDownload (char *name);
|
||||
qboolean SV_AllowDownload (const char *name);
|
||||
|
||||
|
||||
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);
|
||||
void COM_EnumerateFiles (char *match, int (*func)(char *, int, void *), void *parm);
|
||||
char *COM_ParseOut (const char *data, char *out, int outlen);
|
||||
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;
|
||||
}
|
||||
|
||||
char *Q_strcpyline(char *out, char *in, int maxlen)
|
||||
char *Q_strcpyline(char *out, const char *in, int maxlen)
|
||||
{
|
||||
char *w = out;
|
||||
while (*in && maxlen > 0)
|
||||
|
|
|
@ -347,7 +347,7 @@ int VFSGen_ReadBytes(vfsfile_t *f, void *buffer, int 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");
|
||||
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