1 /*
2 ===========================================================================
3 Copyright (C) 1999-2005 Id Software, Inc.
4 
5 This file is part of Quake III Arena source code.
6 
7 Quake III Arena source code is free software; you can redistribute it
8 and/or modify it under the terms of the GNU General Public License as
9 published by the Free Software Foundation; either version 2 of the License,
10 or (at your option) any later version.
11 
12 Quake III Arena source code is distributed in the hope that it will be
13 useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 GNU General Public License for more details.
16 
17 You should have received a copy of the GNU General Public License
18 along with Quake III Arena source code; if not, write to the Free Software
19 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
20 ===========================================================================
21 */
22 //
23 // cg_syscalls.c -- this file is only included when building a dll
24 // cg_syscalls.asm is included instead when building a qvm
25 #ifdef Q3_VM
26 #error "Do not use in VM build"
27 #endif
28 
29 #include "cg_local.h"
30 
31 static intptr_t (QDECL *syscall)( intptr_t arg, ... ) = (intptr_t (QDECL *)( intptr_t, ...))-1;
32 
33 
dllEntry(intptr_t (QDECL * syscallptr)(intptr_t arg,...))34 void dllEntry( intptr_t (QDECL  *syscallptr)( intptr_t arg,... ) ) {
35 	syscall = syscallptr;
36 }
37 
38 
PASSFLOAT(float x)39 int PASSFLOAT( float x ) {
40 	float	floatTemp;
41 	floatTemp = x;
42 	return *(int *)&floatTemp;
43 }
44 
trap_Print(const char * fmt)45 void	trap_Print( const char *fmt ) {
46 	syscall( CG_PRINT, fmt );
47 }
48 
trap_Error(const char * fmt)49 void	trap_Error( const char *fmt ) {
50 	syscall( CG_ERROR, fmt );
51 }
52 
trap_Milliseconds(void)53 int		trap_Milliseconds( void ) {
54 	return syscall( CG_MILLISECONDS );
55 }
56 
trap_Cvar_Register(vmCvar_t * vmCvar,const char * varName,const char * defaultValue,int flags)57 void	trap_Cvar_Register( vmCvar_t *vmCvar, const char *varName, const char *defaultValue, int flags ) {
58 	syscall( CG_CVAR_REGISTER, vmCvar, varName, defaultValue, flags );
59 }
60 
trap_Cvar_Update(vmCvar_t * vmCvar)61 void	trap_Cvar_Update( vmCvar_t *vmCvar ) {
62 	syscall( CG_CVAR_UPDATE, vmCvar );
63 }
64 
trap_Cvar_Set(const char * var_name,const char * value)65 void	trap_Cvar_Set( const char *var_name, const char *value ) {
66 	syscall( CG_CVAR_SET, var_name, value );
67 }
68 
trap_Cvar_VariableStringBuffer(const char * var_name,char * buffer,int bufsize)69 void trap_Cvar_VariableStringBuffer( const char *var_name, char *buffer, int bufsize ) {
70 	syscall( CG_CVAR_VARIABLESTRINGBUFFER, var_name, buffer, bufsize );
71 }
72 
trap_Argc(void)73 int		trap_Argc( void ) {
74 	return syscall( CG_ARGC );
75 }
76 
trap_Argv(int n,char * buffer,int bufferLength)77 void	trap_Argv( int n, char *buffer, int bufferLength ) {
78 	syscall( CG_ARGV, n, buffer, bufferLength );
79 }
80 
trap_Args(char * buffer,int bufferLength)81 void	trap_Args( char *buffer, int bufferLength ) {
82 	syscall( CG_ARGS, buffer, bufferLength );
83 }
84 
trap_FS_FOpenFile(const char * qpath,fileHandle_t * f,fsMode_t mode)85 int		trap_FS_FOpenFile( const char *qpath, fileHandle_t *f, fsMode_t mode ) {
86 	return syscall( CG_FS_FOPENFILE, qpath, f, mode );
87 }
88 
trap_FS_Read(void * buffer,int len,fileHandle_t f)89 void	trap_FS_Read( void *buffer, int len, fileHandle_t f ) {
90 	syscall( CG_FS_READ, buffer, len, f );
91 }
92 
trap_FS_Write(const void * buffer,int len,fileHandle_t f)93 void	trap_FS_Write( const void *buffer, int len, fileHandle_t f ) {
94 	syscall( CG_FS_WRITE, buffer, len, f );
95 }
96 
trap_FS_FCloseFile(fileHandle_t f)97 void	trap_FS_FCloseFile( fileHandle_t f ) {
98 	syscall( CG_FS_FCLOSEFILE, f );
99 }
100 
trap_FS_Seek(fileHandle_t f,long offset,int origin)101 int trap_FS_Seek( fileHandle_t f, long offset, int origin ) {
102 	return syscall( CG_FS_SEEK, f, offset, origin );
103 }
104 
trap_SendConsoleCommand(const char * text)105 void	trap_SendConsoleCommand( const char *text ) {
106 	syscall( CG_SENDCONSOLECOMMAND, text );
107 }
108 
trap_AddCommand(const char * cmdName)109 void	trap_AddCommand( const char *cmdName ) {
110 	syscall( CG_ADDCOMMAND, cmdName );
111 }
112 
trap_RemoveCommand(const char * cmdName)113 void	trap_RemoveCommand( const char *cmdName ) {
114 	syscall( CG_REMOVECOMMAND, cmdName );
115 }
116 
trap_SendClientCommand(const char * s)117 void	trap_SendClientCommand( const char *s ) {
118 	syscall( CG_SENDCLIENTCOMMAND, s );
119 }
120 
trap_UpdateScreen(void)121 void	trap_UpdateScreen( void ) {
122 	syscall( CG_UPDATESCREEN );
123 }
124 
trap_CM_LoadMap(const char * mapname)125 void	trap_CM_LoadMap( const char *mapname ) {
126 	syscall( CG_CM_LOADMAP, mapname );
127 }
128 
trap_CM_NumInlineModels(void)129 int		trap_CM_NumInlineModels( void ) {
130 	return syscall( CG_CM_NUMINLINEMODELS );
131 }
132 
trap_CM_InlineModel(int index)133 clipHandle_t trap_CM_InlineModel( int index ) {
134 	return syscall( CG_CM_INLINEMODEL, index );
135 }
136 
trap_CM_TempBoxModel(const vec3_t mins,const vec3_t maxs)137 clipHandle_t trap_CM_TempBoxModel( const vec3_t mins, const vec3_t maxs ) {
138 	return syscall( CG_CM_TEMPBOXMODEL, mins, maxs );
139 }
140 
trap_CM_TempCapsuleModel(const vec3_t mins,const vec3_t maxs)141 clipHandle_t trap_CM_TempCapsuleModel( const vec3_t mins, const vec3_t maxs ) {
142 	return syscall( CG_CM_TEMPCAPSULEMODEL, mins, maxs );
143 }
144 
trap_CM_PointContents(const vec3_t p,clipHandle_t model)145 int		trap_CM_PointContents( const vec3_t p, clipHandle_t model ) {
146 	return syscall( CG_CM_POINTCONTENTS, p, model );
147 }
148 
trap_CM_TransformedPointContents(const vec3_t p,clipHandle_t model,const vec3_t origin,const vec3_t angles)149 int		trap_CM_TransformedPointContents( const vec3_t p, clipHandle_t model, const vec3_t origin, const vec3_t angles ) {
150 	return syscall( CG_CM_TRANSFORMEDPOINTCONTENTS, p, model, origin, angles );
151 }
152 
trap_CM_BoxTrace(trace_t * results,const vec3_t start,const vec3_t end,const vec3_t mins,const vec3_t maxs,clipHandle_t model,int brushmask)153 void	trap_CM_BoxTrace( trace_t *results, const vec3_t start, const vec3_t end,
154 						  const vec3_t mins, const vec3_t maxs,
155 						  clipHandle_t model, int brushmask ) {
156 	syscall( CG_CM_BOXTRACE, results, start, end, mins, maxs, model, brushmask );
157 }
158 
trap_CM_CapsuleTrace(trace_t * results,const vec3_t start,const vec3_t end,const vec3_t mins,const vec3_t maxs,clipHandle_t model,int brushmask)159 void	trap_CM_CapsuleTrace( trace_t *results, const vec3_t start, const vec3_t end,
160 						  const vec3_t mins, const vec3_t maxs,
161 						  clipHandle_t model, int brushmask ) {
162 	syscall( CG_CM_CAPSULETRACE, results, start, end, mins, maxs, model, brushmask );
163 }
164 
trap_CM_TransformedBoxTrace(trace_t * results,const vec3_t start,const vec3_t end,const vec3_t mins,const vec3_t maxs,clipHandle_t model,int brushmask,const vec3_t origin,const vec3_t angles)165 void	trap_CM_TransformedBoxTrace( trace_t *results, const vec3_t start, const vec3_t end,
166 						  const vec3_t mins, const vec3_t maxs,
167 						  clipHandle_t model, int brushmask,
168 						  const vec3_t origin, const vec3_t angles ) {
169 	syscall( CG_CM_TRANSFORMEDBOXTRACE, results, start, end, mins, maxs, model, brushmask, origin, angles );
170 }
171 
trap_CM_TransformedCapsuleTrace(trace_t * results,const vec3_t start,const vec3_t end,const vec3_t mins,const vec3_t maxs,clipHandle_t model,int brushmask,const vec3_t origin,const vec3_t angles)172 void	trap_CM_TransformedCapsuleTrace( trace_t *results, const vec3_t start, const vec3_t end,
173 						  const vec3_t mins, const vec3_t maxs,
174 						  clipHandle_t model, int brushmask,
175 						  const vec3_t origin, const vec3_t angles ) {
176 	syscall( CG_CM_TRANSFORMEDCAPSULETRACE, results, start, end, mins, maxs, model, brushmask, origin, angles );
177 }
178 
trap_CM_MarkFragments(int numPoints,const vec3_t * points,const vec3_t projection,int maxPoints,vec3_t pointBuffer,int maxFragments,markFragment_t * fragmentBuffer)179 int		trap_CM_MarkFragments( int numPoints, const vec3_t *points,
180 				const vec3_t projection,
181 				int maxPoints, vec3_t pointBuffer,
182 				int maxFragments, markFragment_t *fragmentBuffer ) {
183 	return syscall( CG_CM_MARKFRAGMENTS, numPoints, points, projection, maxPoints, pointBuffer, maxFragments, fragmentBuffer );
184 }
185 
trap_S_StartSound(vec3_t origin,int entityNum,int entchannel,sfxHandle_t sfx)186 void	trap_S_StartSound( vec3_t origin, int entityNum, int entchannel, sfxHandle_t sfx ) {
187 	syscall( CG_S_STARTSOUND, origin, entityNum, entchannel, sfx );
188 }
189 
trap_S_StartLocalSound(sfxHandle_t sfx,int channelNum)190 void	trap_S_StartLocalSound( sfxHandle_t sfx, int channelNum ) {
191 	syscall( CG_S_STARTLOCALSOUND, sfx, channelNum );
192 }
193 
trap_S_ClearLoopingSounds(qboolean killall)194 void	trap_S_ClearLoopingSounds( qboolean killall ) {
195 	syscall( CG_S_CLEARLOOPINGSOUNDS, killall );
196 }
197 
trap_S_AddLoopingSound(int entityNum,const vec3_t origin,const vec3_t velocity,sfxHandle_t sfx)198 void	trap_S_AddLoopingSound( int entityNum, const vec3_t origin, const vec3_t velocity, sfxHandle_t sfx ) {
199 	syscall( CG_S_ADDLOOPINGSOUND, entityNum, origin, velocity, sfx );
200 }
201 
trap_S_AddRealLoopingSound(int entityNum,const vec3_t origin,const vec3_t velocity,sfxHandle_t sfx)202 void	trap_S_AddRealLoopingSound( int entityNum, const vec3_t origin, const vec3_t velocity, sfxHandle_t sfx ) {
203 	syscall( CG_S_ADDREALLOOPINGSOUND, entityNum, origin, velocity, sfx );
204 }
205 
trap_S_StopLoopingSound(int entityNum)206 void	trap_S_StopLoopingSound( int entityNum ) {
207 	syscall( CG_S_STOPLOOPINGSOUND, entityNum );
208 }
209 
trap_S_UpdateEntityPosition(int entityNum,const vec3_t origin)210 void	trap_S_UpdateEntityPosition( int entityNum, const vec3_t origin ) {
211 	syscall( CG_S_UPDATEENTITYPOSITION, entityNum, origin );
212 }
213 
trap_S_Respatialize(int entityNum,const vec3_t origin,vec3_t axis[3],int inwater)214 void	trap_S_Respatialize( int entityNum, const vec3_t origin, vec3_t axis[3], int inwater ) {
215 	syscall( CG_S_RESPATIALIZE, entityNum, origin, axis, inwater );
216 }
217 
trap_S_RegisterSound(const char * sample,qboolean compressed)218 sfxHandle_t	trap_S_RegisterSound( const char *sample, qboolean compressed ) {
219 	return syscall( CG_S_REGISTERSOUND, sample, compressed );
220 }
221 
trap_S_StartBackgroundTrack(const char * intro,const char * loop)222 void	trap_S_StartBackgroundTrack( const char *intro, const char *loop ) {
223 	syscall( CG_S_STARTBACKGROUNDTRACK, intro, loop );
224 }
225 
trap_R_LoadWorldMap(const char * mapname)226 void	trap_R_LoadWorldMap( const char *mapname ) {
227 	syscall( CG_R_LOADWORLDMAP, mapname );
228 }
229 
trap_R_RegisterModel(const char * name)230 qhandle_t trap_R_RegisterModel( const char *name ) {
231 	return syscall( CG_R_REGISTERMODEL, name );
232 }
233 
trap_R_RegisterSkin(const char * name)234 qhandle_t trap_R_RegisterSkin( const char *name ) {
235 	return syscall( CG_R_REGISTERSKIN, name );
236 }
237 
trap_R_RegisterShader(const char * name)238 qhandle_t trap_R_RegisterShader( const char *name ) {
239 	return syscall( CG_R_REGISTERSHADER, name );
240 }
241 
trap_R_RegisterShaderNoMip(const char * name)242 qhandle_t trap_R_RegisterShaderNoMip( const char *name ) {
243 	return syscall( CG_R_REGISTERSHADERNOMIP, name );
244 }
245 
trap_R_RegisterFont(const char * fontName,int pointSize,fontInfo_t * font)246 void trap_R_RegisterFont(const char *fontName, int pointSize, fontInfo_t *font) {
247 	syscall(CG_R_REGISTERFONT, fontName, pointSize, font );
248 }
249 
trap_R_ClearScene(void)250 void	trap_R_ClearScene( void ) {
251 	syscall( CG_R_CLEARSCENE );
252 }
253 
trap_R_AddRefEntityToScene(const refEntity_t * re)254 void	trap_R_AddRefEntityToScene( const refEntity_t *re ) {
255 	syscall( CG_R_ADDREFENTITYTOSCENE, re );
256 }
257 
trap_R_AddPolyToScene(qhandle_t hShader,int numVerts,const polyVert_t * verts)258 void	trap_R_AddPolyToScene( qhandle_t hShader , int numVerts, const polyVert_t *verts ) {
259 	syscall( CG_R_ADDPOLYTOSCENE, hShader, numVerts, verts );
260 }
261 
trap_R_AddPolysToScene(qhandle_t hShader,int numVerts,const polyVert_t * verts,int num)262 void	trap_R_AddPolysToScene( qhandle_t hShader , int numVerts, const polyVert_t *verts, int num ) {
263 	syscall( CG_R_ADDPOLYSTOSCENE, hShader, numVerts, verts, num );
264 }
265 
trap_R_LightForPoint(vec3_t point,vec3_t ambientLight,vec3_t directedLight,vec3_t lightDir)266 int		trap_R_LightForPoint( vec3_t point, vec3_t ambientLight, vec3_t directedLight, vec3_t lightDir ) {
267 	return syscall( CG_R_LIGHTFORPOINT, point, ambientLight, directedLight, lightDir );
268 }
269 
trap_R_AddLightToScene(const vec3_t org,float intensity,float r,float g,float b)270 void	trap_R_AddLightToScene( const vec3_t org, float intensity, float r, float g, float b ) {
271 	syscall( CG_R_ADDLIGHTTOSCENE, org, PASSFLOAT(intensity), PASSFLOAT(r), PASSFLOAT(g), PASSFLOAT(b) );
272 }
273 
trap_R_AddAdditiveLightToScene(const vec3_t org,float intensity,float r,float g,float b)274 void	trap_R_AddAdditiveLightToScene( const vec3_t org, float intensity, float r, float g, float b ) {
275 	syscall( CG_R_ADDADDITIVELIGHTTOSCENE, org, PASSFLOAT(intensity), PASSFLOAT(r), PASSFLOAT(g), PASSFLOAT(b) );
276 }
277 
trap_R_RenderScene(const refdef_t * fd)278 void	trap_R_RenderScene( const refdef_t *fd ) {
279 	syscall( CG_R_RENDERSCENE, fd );
280 }
281 
trap_R_SetColor(const float * rgba)282 void	trap_R_SetColor( const float *rgba ) {
283 	syscall( CG_R_SETCOLOR, rgba );
284 }
285 
trap_R_DrawStretchPic(float x,float y,float w,float h,float s1,float t1,float s2,float t2,qhandle_t hShader)286 void	trap_R_DrawStretchPic( float x, float y, float w, float h,
287 							   float s1, float t1, float s2, float t2, qhandle_t hShader ) {
288 	syscall( CG_R_DRAWSTRETCHPIC, PASSFLOAT(x), PASSFLOAT(y), PASSFLOAT(w), PASSFLOAT(h), PASSFLOAT(s1), PASSFLOAT(t1), PASSFLOAT(s2), PASSFLOAT(t2), hShader );
289 }
290 
trap_R_ModelBounds(clipHandle_t model,vec3_t mins,vec3_t maxs)291 void	trap_R_ModelBounds( clipHandle_t model, vec3_t mins, vec3_t maxs ) {
292 	syscall( CG_R_MODELBOUNDS, model, mins, maxs );
293 }
294 
trap_R_LerpTag(orientation_t * tag,clipHandle_t mod,int startFrame,int endFrame,float frac,const char * tagName)295 int		trap_R_LerpTag( orientation_t *tag, clipHandle_t mod, int startFrame, int endFrame,
296 					   float frac, const char *tagName ) {
297 	return syscall( CG_R_LERPTAG, tag, mod, startFrame, endFrame, PASSFLOAT(frac), tagName );
298 }
299 
trap_R_RemapShader(const char * oldShader,const char * newShader,const char * timeOffset)300 void	trap_R_RemapShader( const char *oldShader, const char *newShader, const char *timeOffset ) {
301 	syscall( CG_R_REMAP_SHADER, oldShader, newShader, timeOffset );
302 }
303 
trap_GetGlconfig(glConfig_t * glconfig)304 void		trap_GetGlconfig( glConfig_t *glconfig ) {
305 	syscall( CG_GETGLCONFIG, glconfig );
306 }
307 
trap_GetGameState(gameState_t * gamestate)308 void		trap_GetGameState( gameState_t *gamestate ) {
309 	syscall( CG_GETGAMESTATE, gamestate );
310 }
311 
trap_GetCurrentSnapshotNumber(int * snapshotNumber,int * serverTime)312 void		trap_GetCurrentSnapshotNumber( int *snapshotNumber, int *serverTime ) {
313 	syscall( CG_GETCURRENTSNAPSHOTNUMBER, snapshotNumber, serverTime );
314 }
315 
trap_GetSnapshot(int snapshotNumber,snapshot_t * snapshot)316 qboolean	trap_GetSnapshot( int snapshotNumber, snapshot_t *snapshot ) {
317 	return syscall( CG_GETSNAPSHOT, snapshotNumber, snapshot );
318 }
319 
trap_GetServerCommand(int serverCommandNumber)320 qboolean	trap_GetServerCommand( int serverCommandNumber ) {
321 	return syscall( CG_GETSERVERCOMMAND, serverCommandNumber );
322 }
323 
trap_GetCurrentCmdNumber(void)324 int			trap_GetCurrentCmdNumber( void ) {
325 	return syscall( CG_GETCURRENTCMDNUMBER );
326 }
327 
trap_GetUserCmd(int cmdNumber,usercmd_t * ucmd)328 qboolean	trap_GetUserCmd( int cmdNumber, usercmd_t *ucmd ) {
329 	return syscall( CG_GETUSERCMD, cmdNumber, ucmd );
330 }
331 
trap_SetUserCmdValue(int stateValue,float sensitivityScale)332 void		trap_SetUserCmdValue( int stateValue, float sensitivityScale ) {
333 	syscall( CG_SETUSERCMDVALUE, stateValue, PASSFLOAT(sensitivityScale) );
334 }
335 
testPrintInt(char * string,int i)336 void		testPrintInt( char *string, int i ) {
337 	syscall( CG_TESTPRINTINT, string, i );
338 }
339 
testPrintFloat(char * string,float f)340 void		testPrintFloat( char *string, float f ) {
341 	syscall( CG_TESTPRINTFLOAT, string, PASSFLOAT(f) );
342 }
343 
trap_MemoryRemaining(void)344 int trap_MemoryRemaining( void ) {
345 	return syscall( CG_MEMORY_REMAINING );
346 }
347 
trap_Key_IsDown(int keynum)348 qboolean trap_Key_IsDown( int keynum ) {
349 	return syscall( CG_KEY_ISDOWN, keynum );
350 }
351 
trap_Key_GetCatcher(void)352 int trap_Key_GetCatcher( void ) {
353 	return syscall( CG_KEY_GETCATCHER );
354 }
355 
trap_Key_SetCatcher(int catcher)356 void trap_Key_SetCatcher( int catcher ) {
357 	syscall( CG_KEY_SETCATCHER, catcher );
358 }
359 
trap_Key_GetKey(const char * binding)360 int trap_Key_GetKey( const char *binding ) {
361 	return syscall( CG_KEY_GETKEY, binding );
362 }
363 
trap_PC_AddGlobalDefine(char * define)364 int trap_PC_AddGlobalDefine( char *define ) {
365 	return syscall( CG_PC_ADD_GLOBAL_DEFINE, define );
366 }
367 
trap_PC_LoadSource(const char * filename)368 int trap_PC_LoadSource( const char *filename ) {
369 	return syscall( CG_PC_LOAD_SOURCE, filename );
370 }
371 
trap_PC_FreeSource(int handle)372 int trap_PC_FreeSource( int handle ) {
373 	return syscall( CG_PC_FREE_SOURCE, handle );
374 }
375 
trap_PC_ReadToken(int handle,pc_token_t * pc_token)376 int trap_PC_ReadToken( int handle, pc_token_t *pc_token ) {
377 	return syscall( CG_PC_READ_TOKEN, handle, pc_token );
378 }
379 
trap_PC_SourceFileAndLine(int handle,char * filename,int * line)380 int trap_PC_SourceFileAndLine( int handle, char *filename, int *line ) {
381 	return syscall( CG_PC_SOURCE_FILE_AND_LINE, handle, filename, line );
382 }
383 
trap_S_StopBackgroundTrack(void)384 void	trap_S_StopBackgroundTrack( void ) {
385 	syscall( CG_S_STOPBACKGROUNDTRACK );
386 }
387 
trap_RealTime(qtime_t * qtime)388 int trap_RealTime(qtime_t *qtime) {
389 	return syscall( CG_REAL_TIME, qtime );
390 }
391 
trap_SnapVector(float * v)392 void trap_SnapVector( float *v ) {
393 	syscall( CG_SNAPVECTOR, v );
394 }
395 
396 // this returns a handle.  arg0 is the name in the format "idlogo.roq", set arg1 to NULL, alteredstates to qfalse (do not alter gamestate)
trap_CIN_PlayCinematic(const char * arg0,int xpos,int ypos,int width,int height,int bits)397 int trap_CIN_PlayCinematic( const char *arg0, int xpos, int ypos, int width, int height, int bits) {
398   return syscall(CG_CIN_PLAYCINEMATIC, arg0, xpos, ypos, width, height, bits);
399 }
400 
401 // stops playing the cinematic and ends it.  should always return FMV_EOF
402 // cinematics must be stopped in reverse order of when they are started
trap_CIN_StopCinematic(int handle)403 e_status trap_CIN_StopCinematic(int handle) {
404   return syscall(CG_CIN_STOPCINEMATIC, handle);
405 }
406 
407 
408 // will run a frame of the cinematic but will not draw it.  Will return FMV_EOF if the end of the cinematic has been reached.
trap_CIN_RunCinematic(int handle)409 e_status trap_CIN_RunCinematic (int handle) {
410   return syscall(CG_CIN_RUNCINEMATIC, handle);
411 }
412 
413 
414 // draws the current frame
trap_CIN_DrawCinematic(int handle)415 void trap_CIN_DrawCinematic (int handle) {
416   syscall(CG_CIN_DRAWCINEMATIC, handle);
417 }
418 
419 
420 // allows you to resize the animation dynamically
trap_CIN_SetExtents(int handle,int x,int y,int w,int h)421 void trap_CIN_SetExtents (int handle, int x, int y, int w, int h) {
422   syscall(CG_CIN_SETEXTENTS, handle, x, y, w, h);
423 }
424 
425 /*
426 qboolean trap_loadCamera( const char *name ) {
427 	return syscall( CG_LOADCAMERA, name );
428 }
429 
430 void trap_startCamera(int time) {
431 	syscall(CG_STARTCAMERA, time);
432 }
433 
434 qboolean trap_getCameraInfo( int time, vec3_t *origin, vec3_t *angles) {
435 	return syscall( CG_GETCAMERAINFO, time, origin, angles );
436 }
437 */
438 
trap_GetEntityToken(char * buffer,int bufferSize)439 qboolean trap_GetEntityToken( char *buffer, int bufferSize ) {
440 	return syscall( CG_GET_ENTITY_TOKEN, buffer, bufferSize );
441 }
442 
trap_R_inPVS(const vec3_t p1,const vec3_t p2)443 qboolean trap_R_inPVS( const vec3_t p1, const vec3_t p2 ) {
444 	return syscall( CG_R_INPVS, p1, p2 );
445 }
446