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 #include "ui_local.h"
24
25 // this file is only included when building a dll
26 // syscalls.asm is included instead when building a qvm
27 #ifdef Q3_VM
28 #error "Do not use in VM build"
29 #endif
30
31 static intptr_t (QDECL *syscall)( intptr_t arg, ... ) = (intptr_t (QDECL *)( intptr_t, ...))-1;
32
dllEntry(intptr_t (QDECL * syscallptr)(intptr_t arg,...))33 void dllEntry( intptr_t (QDECL *syscallptr)( intptr_t arg,... ) ) {
34 syscall = syscallptr;
35 }
36
PASSFLOAT(float x)37 int PASSFLOAT( float x ) {
38 floatint_t fi;
39 fi.f = x;
40 return fi.i;
41 }
42
trap_Print(const char * string)43 void trap_Print( const char *string ) {
44 syscall( UI_PRINT, string );
45 }
46
trap_Error(const char * string)47 void trap_Error( const char *string ) {
48 syscall( UI_ERROR, string );
49 }
50
trap_Milliseconds(void)51 int trap_Milliseconds( void ) {
52 return syscall( UI_MILLISECONDS );
53 }
54
trap_Cvar_Register(vmCvar_t * cvar,const char * var_name,const char * value,int flags)55 void trap_Cvar_Register( vmCvar_t *cvar, const char *var_name, const char *value, int flags ) {
56 syscall( UI_CVAR_REGISTER, cvar, var_name, value, flags );
57 }
58
trap_Cvar_Update(vmCvar_t * cvar)59 void trap_Cvar_Update( vmCvar_t *cvar ) {
60 syscall( UI_CVAR_UPDATE, cvar );
61 }
62
trap_Cvar_Set(const char * var_name,const char * value)63 void trap_Cvar_Set( const char *var_name, const char *value ) {
64 syscall( UI_CVAR_SET, var_name, value );
65 }
66
trap_Cvar_VariableValue(const char * var_name)67 float trap_Cvar_VariableValue( const char *var_name ) {
68 floatint_t fi;
69 fi.i = syscall( UI_CVAR_VARIABLEVALUE, var_name );
70 return fi.f;
71 }
72
trap_Cvar_VariableStringBuffer(const char * var_name,char * buffer,int bufsize)73 void trap_Cvar_VariableStringBuffer( const char *var_name, char *buffer, int bufsize ) {
74 syscall( UI_CVAR_VARIABLESTRINGBUFFER, var_name, buffer, bufsize );
75 }
76
trap_Cvar_SetValue(const char * var_name,float value)77 void trap_Cvar_SetValue( const char *var_name, float value ) {
78 syscall( UI_CVAR_SETVALUE, var_name, PASSFLOAT( value ) );
79 }
80
trap_Cvar_Reset(const char * name)81 void trap_Cvar_Reset( const char *name ) {
82 syscall( UI_CVAR_RESET, name );
83 }
84
trap_Cvar_Create(const char * var_name,const char * var_value,int flags)85 void trap_Cvar_Create( const char *var_name, const char *var_value, int flags ) {
86 syscall( UI_CVAR_CREATE, var_name, var_value, flags );
87 }
88
trap_Cvar_InfoStringBuffer(int bit,char * buffer,int bufsize)89 void trap_Cvar_InfoStringBuffer( int bit, char *buffer, int bufsize ) {
90 syscall( UI_CVAR_INFOSTRINGBUFFER, bit, buffer, bufsize );
91 }
92
trap_Argc(void)93 int trap_Argc( void ) {
94 return syscall( UI_ARGC );
95 }
96
trap_Argv(int n,char * buffer,int bufferLength)97 void trap_Argv( int n, char *buffer, int bufferLength ) {
98 syscall( UI_ARGV, n, buffer, bufferLength );
99 }
100
trap_Cmd_ExecuteText(int exec_when,const char * text)101 void trap_Cmd_ExecuteText( int exec_when, const char *text ) {
102 syscall( UI_CMD_EXECUTETEXT, exec_when, text );
103 }
104
trap_FS_FOpenFile(const char * qpath,fileHandle_t * f,fsMode_t mode)105 int trap_FS_FOpenFile( const char *qpath, fileHandle_t *f, fsMode_t mode ) {
106 return syscall( UI_FS_FOPENFILE, qpath, f, mode );
107 }
108
trap_FS_Read(void * buffer,int len,fileHandle_t f)109 void trap_FS_Read( void *buffer, int len, fileHandle_t f ) {
110 syscall( UI_FS_READ, buffer, len, f );
111 }
112
trap_FS_Write(const void * buffer,int len,fileHandle_t f)113 void trap_FS_Write( const void *buffer, int len, fileHandle_t f ) {
114 syscall( UI_FS_WRITE, buffer, len, f );
115 }
116
trap_FS_FCloseFile(fileHandle_t f)117 void trap_FS_FCloseFile( fileHandle_t f ) {
118 syscall( UI_FS_FCLOSEFILE, f );
119 }
120
trap_FS_GetFileList(const char * path,const char * extension,char * listbuf,int bufsize)121 int trap_FS_GetFileList( const char *path, const char *extension, char *listbuf, int bufsize ) {
122 return syscall( UI_FS_GETFILELIST, path, extension, listbuf, bufsize );
123 }
124
trap_FS_Seek(fileHandle_t f,long offset,int origin)125 int trap_FS_Seek( fileHandle_t f, long offset, int origin ) {
126 return syscall( UI_FS_SEEK, f, offset, origin );
127 }
128
trap_R_RegisterModel(const char * name)129 qhandle_t trap_R_RegisterModel( const char *name ) {
130 return syscall( UI_R_REGISTERMODEL, name );
131 }
132
trap_R_RegisterSkin(const char * name)133 qhandle_t trap_R_RegisterSkin( const char *name ) {
134 return syscall( UI_R_REGISTERSKIN, name );
135 }
136
trap_R_RegisterFont(const char * fontName,int pointSize,fontInfo_t * font)137 void trap_R_RegisterFont(const char *fontName, int pointSize, fontInfo_t *font) {
138 syscall( UI_R_REGISTERFONT, fontName, pointSize, font );
139 }
140
trap_R_RegisterShaderNoMip(const char * name)141 qhandle_t trap_R_RegisterShaderNoMip( const char *name ) {
142 return syscall( UI_R_REGISTERSHADERNOMIP, name );
143 }
144
trap_R_ClearScene(void)145 void trap_R_ClearScene( void ) {
146 syscall( UI_R_CLEARSCENE );
147 }
148
trap_R_AddRefEntityToScene(const refEntity_t * re)149 void trap_R_AddRefEntityToScene( const refEntity_t *re ) {
150 syscall( UI_R_ADDREFENTITYTOSCENE, re );
151 }
152
trap_R_AddPolyToScene(qhandle_t hShader,int numVerts,const polyVert_t * verts)153 void trap_R_AddPolyToScene( qhandle_t hShader , int numVerts, const polyVert_t *verts ) {
154 syscall( UI_R_ADDPOLYTOSCENE, hShader, numVerts, verts );
155 }
156
trap_R_AddLightToScene(const vec3_t org,float intensity,float r,float g,float b)157 void trap_R_AddLightToScene( const vec3_t org, float intensity, float r, float g, float b ) {
158 syscall( UI_R_ADDLIGHTTOSCENE, org, PASSFLOAT(intensity), PASSFLOAT(r), PASSFLOAT(g), PASSFLOAT(b) );
159 }
160
trap_R_RenderScene(const refdef_t * fd)161 void trap_R_RenderScene( const refdef_t *fd ) {
162 syscall( UI_R_RENDERSCENE, fd );
163 }
164
trap_R_SetColor(const float * rgba)165 void trap_R_SetColor( const float *rgba ) {
166 syscall( UI_R_SETCOLOR, rgba );
167 }
168
trap_R_DrawStretchPic(float x,float y,float w,float h,float s1,float t1,float s2,float t2,qhandle_t hShader)169 void trap_R_DrawStretchPic( float x, float y, float w, float h, float s1, float t1, float s2, float t2, qhandle_t hShader ) {
170 syscall( UI_R_DRAWSTRETCHPIC, PASSFLOAT(x), PASSFLOAT(y), PASSFLOAT(w), PASSFLOAT(h), PASSFLOAT(s1), PASSFLOAT(t1), PASSFLOAT(s2), PASSFLOAT(t2), hShader );
171 }
172
trap_R_ModelBounds(clipHandle_t model,vec3_t mins,vec3_t maxs)173 void trap_R_ModelBounds( clipHandle_t model, vec3_t mins, vec3_t maxs ) {
174 syscall( UI_R_MODELBOUNDS, model, mins, maxs );
175 }
176
trap_UpdateScreen(void)177 void trap_UpdateScreen( void ) {
178 syscall( UI_UPDATESCREEN );
179 }
180
trap_CM_LerpTag(orientation_t * tag,clipHandle_t mod,int startFrame,int endFrame,float frac,const char * tagName)181 int trap_CM_LerpTag( orientation_t *tag, clipHandle_t mod, int startFrame, int endFrame, float frac, const char *tagName ) {
182 return syscall( UI_CM_LERPTAG, tag, mod, startFrame, endFrame, PASSFLOAT(frac), tagName );
183 }
184
trap_S_StartLocalSound(sfxHandle_t sfx,int channelNum)185 void trap_S_StartLocalSound( sfxHandle_t sfx, int channelNum ) {
186 syscall( UI_S_STARTLOCALSOUND, sfx, channelNum );
187 }
188
trap_S_RegisterSound(const char * sample,qboolean compressed)189 sfxHandle_t trap_S_RegisterSound( const char *sample, qboolean compressed ) {
190 return syscall( UI_S_REGISTERSOUND, sample, compressed );
191 }
192
trap_Key_KeynumToStringBuf(int keynum,char * buf,int buflen)193 void trap_Key_KeynumToStringBuf( int keynum, char *buf, int buflen ) {
194 syscall( UI_KEY_KEYNUMTOSTRINGBUF, keynum, buf, buflen );
195 }
196
trap_Key_GetBindingBuf(int keynum,char * buf,int buflen)197 void trap_Key_GetBindingBuf( int keynum, char *buf, int buflen ) {
198 syscall( UI_KEY_GETBINDINGBUF, keynum, buf, buflen );
199 }
200
trap_Key_SetBinding(int keynum,const char * binding)201 void trap_Key_SetBinding( int keynum, const char *binding ) {
202 syscall( UI_KEY_SETBINDING, keynum, binding );
203 }
204
trap_Key_IsDown(int keynum)205 qboolean trap_Key_IsDown( int keynum ) {
206 return syscall( UI_KEY_ISDOWN, keynum );
207 }
208
trap_Key_GetOverstrikeMode(void)209 qboolean trap_Key_GetOverstrikeMode( void ) {
210 return syscall( UI_KEY_GETOVERSTRIKEMODE );
211 }
212
trap_Key_SetOverstrikeMode(qboolean state)213 void trap_Key_SetOverstrikeMode( qboolean state ) {
214 syscall( UI_KEY_SETOVERSTRIKEMODE, state );
215 }
216
trap_Key_ClearStates(void)217 void trap_Key_ClearStates( void ) {
218 syscall( UI_KEY_CLEARSTATES );
219 }
220
trap_Key_GetCatcher(void)221 int trap_Key_GetCatcher( void ) {
222 return syscall( UI_KEY_GETCATCHER );
223 }
224
trap_Key_SetCatcher(int catcher)225 void trap_Key_SetCatcher( int catcher ) {
226 syscall( UI_KEY_SETCATCHER, catcher );
227 }
228
trap_GetClipboardData(char * buf,int bufsize)229 void trap_GetClipboardData( char *buf, int bufsize ) {
230 syscall( UI_GETCLIPBOARDDATA, buf, bufsize );
231 }
232
trap_GetClientState(uiClientState_t * state)233 void trap_GetClientState( uiClientState_t *state ) {
234 syscall( UI_GETCLIENTSTATE, state );
235 }
236
trap_GetGlconfig(glconfig_t * glconfig)237 void trap_GetGlconfig( glconfig_t *glconfig ) {
238 syscall( UI_GETGLCONFIG, glconfig );
239 }
240
trap_GetConfigString(int index,char * buff,int buffsize)241 int trap_GetConfigString( int index, char* buff, int buffsize ) {
242 return syscall( UI_GETCONFIGSTRING, index, buff, buffsize );
243 }
244
trap_LAN_GetServerCount(int source)245 int trap_LAN_GetServerCount( int source ) {
246 return syscall( UI_LAN_GETSERVERCOUNT, source );
247 }
248
trap_LAN_GetServerAddressString(int source,int n,char * buf,int buflen)249 void trap_LAN_GetServerAddressString( int source, int n, char *buf, int buflen ) {
250 syscall( UI_LAN_GETSERVERADDRESSSTRING, source, n, buf, buflen );
251 }
252
trap_LAN_GetServerInfo(int source,int n,char * buf,int buflen)253 void trap_LAN_GetServerInfo( int source, int n, char *buf, int buflen ) {
254 syscall( UI_LAN_GETSERVERINFO, source, n, buf, buflen );
255 }
256
trap_LAN_GetServerPing(int source,int n)257 int trap_LAN_GetServerPing( int source, int n ) {
258 return syscall( UI_LAN_GETSERVERPING, source, n );
259 }
260
trap_LAN_GetPingQueueCount(void)261 int trap_LAN_GetPingQueueCount( void ) {
262 return syscall( UI_LAN_GETPINGQUEUECOUNT );
263 }
264
trap_LAN_ServerStatus(const char * serverAddress,char * serverStatus,int maxLen)265 int trap_LAN_ServerStatus( const char *serverAddress, char *serverStatus, int maxLen ) {
266 return syscall( UI_LAN_SERVERSTATUS, serverAddress, serverStatus, maxLen );
267 }
268
trap_LAN_SaveCachedServers(void)269 void trap_LAN_SaveCachedServers( void ) {
270 syscall( UI_LAN_SAVECACHEDSERVERS );
271 }
272
trap_LAN_LoadCachedServers(void)273 void trap_LAN_LoadCachedServers( void ) {
274 syscall( UI_LAN_LOADCACHEDSERVERS );
275 }
276
trap_LAN_ResetPings(int n)277 void trap_LAN_ResetPings(int n) {
278 syscall( UI_LAN_RESETPINGS, n );
279 }
280
trap_LAN_ClearPing(int n)281 void trap_LAN_ClearPing( int n ) {
282 syscall( UI_LAN_CLEARPING, n );
283 }
284
trap_LAN_GetPing(int n,char * buf,int buflen,int * pingtime)285 void trap_LAN_GetPing( int n, char *buf, int buflen, int *pingtime ) {
286 syscall( UI_LAN_GETPING, n, buf, buflen, pingtime );
287 }
288
trap_LAN_GetPingInfo(int n,char * buf,int buflen)289 void trap_LAN_GetPingInfo( int n, char *buf, int buflen ) {
290 syscall( UI_LAN_GETPINGINFO, n, buf, buflen );
291 }
292
trap_LAN_MarkServerVisible(int source,int n,qboolean visible)293 void trap_LAN_MarkServerVisible( int source, int n, qboolean visible ) {
294 syscall( UI_LAN_MARKSERVERVISIBLE, source, n, visible );
295 }
296
trap_LAN_ServerIsVisible(int source,int n)297 int trap_LAN_ServerIsVisible( int source, int n) {
298 return syscall( UI_LAN_SERVERISVISIBLE, source, n );
299 }
300
trap_LAN_UpdateVisiblePings(int source)301 qboolean trap_LAN_UpdateVisiblePings( int source ) {
302 return syscall( UI_LAN_UPDATEVISIBLEPINGS, source );
303 }
304
trap_LAN_AddServer(int source,const char * name,const char * addr)305 int trap_LAN_AddServer(int source, const char *name, const char *addr) {
306 return syscall( UI_LAN_ADDSERVER, source, name, addr );
307 }
308
trap_LAN_RemoveServer(int source,const char * addr)309 void trap_LAN_RemoveServer(int source, const char *addr) {
310 syscall( UI_LAN_REMOVESERVER, source, addr );
311 }
312
trap_LAN_CompareServers(int source,int sortKey,int sortDir,int s1,int s2)313 int trap_LAN_CompareServers( int source, int sortKey, int sortDir, int s1, int s2 ) {
314 return syscall( UI_LAN_COMPARESERVERS, source, sortKey, sortDir, s1, s2 );
315 }
316
trap_MemoryRemaining(void)317 int trap_MemoryRemaining( void ) {
318 return syscall( UI_MEMORY_REMAINING );
319 }
320
trap_GetCDKey(char * buf,int buflen)321 void trap_GetCDKey( char *buf, int buflen ) {
322 syscall( UI_GET_CDKEY, buf, buflen );
323 }
324
trap_SetCDKey(char * buf)325 void trap_SetCDKey( char *buf ) {
326 syscall( UI_SET_CDKEY, buf );
327 }
328
trap_PC_AddGlobalDefine(char * define)329 int trap_PC_AddGlobalDefine( char *define ) {
330 return syscall( UI_PC_ADD_GLOBAL_DEFINE, define );
331 }
332
trap_PC_LoadSource(const char * filename)333 int trap_PC_LoadSource( const char *filename ) {
334 return syscall( UI_PC_LOAD_SOURCE, filename );
335 }
336
trap_PC_FreeSource(int handle)337 int trap_PC_FreeSource( int handle ) {
338 return syscall( UI_PC_FREE_SOURCE, handle );
339 }
340
trap_PC_ReadToken(int handle,pc_token_t * pc_token)341 int trap_PC_ReadToken( int handle, pc_token_t *pc_token ) {
342 return syscall( UI_PC_READ_TOKEN, handle, pc_token );
343 }
344
trap_PC_SourceFileAndLine(int handle,char * filename,int * line)345 int trap_PC_SourceFileAndLine( int handle, char *filename, int *line ) {
346 return syscall( UI_PC_SOURCE_FILE_AND_LINE, handle, filename, line );
347 }
348
trap_S_StopBackgroundTrack(void)349 void trap_S_StopBackgroundTrack( void ) {
350 syscall( UI_S_STOPBACKGROUNDTRACK );
351 }
352
trap_S_StartBackgroundTrack(const char * intro,const char * loop)353 void trap_S_StartBackgroundTrack( const char *intro, const char *loop) {
354 syscall( UI_S_STARTBACKGROUNDTRACK, intro, loop );
355 }
356
trap_RealTime(qtime_t * qtime)357 int trap_RealTime(qtime_t *qtime) {
358 return syscall( UI_REAL_TIME, qtime );
359 }
360
361 // 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)362 int trap_CIN_PlayCinematic( const char *arg0, int xpos, int ypos, int width, int height, int bits) {
363 return syscall(UI_CIN_PLAYCINEMATIC, arg0, xpos, ypos, width, height, bits);
364 }
365
366 // stops playing the cinematic and ends it. should always return FMV_EOF
367 // cinematics must be stopped in reverse order of when they are started
trap_CIN_StopCinematic(int handle)368 e_status trap_CIN_StopCinematic(int handle) {
369 return syscall(UI_CIN_STOPCINEMATIC, handle);
370 }
371
372
373 // 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)374 e_status trap_CIN_RunCinematic (int handle) {
375 return syscall(UI_CIN_RUNCINEMATIC, handle);
376 }
377
378
379 // draws the current frame
trap_CIN_DrawCinematic(int handle)380 void trap_CIN_DrawCinematic (int handle) {
381 syscall(UI_CIN_DRAWCINEMATIC, handle);
382 }
383
384
385 // allows you to resize the animation dynamically
trap_CIN_SetExtents(int handle,int x,int y,int w,int h)386 void trap_CIN_SetExtents (int handle, int x, int y, int w, int h) {
387 syscall(UI_CIN_SETEXTENTS, handle, x, y, w, h);
388 }
389
390
trap_R_RemapShader(const char * oldShader,const char * newShader,const char * timeOffset)391 void trap_R_RemapShader( const char *oldShader, const char *newShader, const char *timeOffset ) {
392 syscall( UI_R_REMAP_SHADER, oldShader, newShader, timeOffset );
393 }
394
trap_VerifyCDKey(const char * key,const char * chksum)395 qboolean trap_VerifyCDKey( const char *key, const char *chksum) {
396 return syscall( UI_VERIFY_CDKEY, key, chksum);
397 }
398
trap_SetPbClStatus(int status)399 void trap_SetPbClStatus( int status ) {
400 syscall( UI_SET_PBCLSTATUS, status );
401 }
402