ui_syscalls.c (11704B)
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 Foobar; 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 int (QDECL *syscall)( int arg, ... ) = (int (QDECL *)( int, ...))-1; 32 33 void dllEntry( int (QDECL *syscallptr)( int arg,... ) ) { 34 syscall = syscallptr; 35 } 36 37 int PASSFLOAT( float x ) { 38 float floatTemp; 39 floatTemp = x; 40 return *(int *)&floatTemp; 41 } 42 43 void trap_Print( const char *string ) { 44 syscall( UI_PRINT, string ); 45 } 46 47 void trap_Error( const char *string ) { 48 syscall( UI_ERROR, string ); 49 } 50 51 int trap_Milliseconds( void ) { 52 return syscall( UI_MILLISECONDS ); 53 } 54 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 59 void trap_Cvar_Update( vmCvar_t *cvar ) { 60 syscall( UI_CVAR_UPDATE, cvar ); 61 } 62 63 void trap_Cvar_Set( const char *var_name, const char *value ) { 64 syscall( UI_CVAR_SET, var_name, value ); 65 } 66 67 float trap_Cvar_VariableValue( const char *var_name ) { 68 int temp; 69 temp = syscall( UI_CVAR_VARIABLEVALUE, var_name ); 70 return (*(float*)&temp); 71 } 72 73 void trap_Cvar_VariableStringBuffer( const char *var_name, char *buffer, int bufsize ) { 74 syscall( UI_CVAR_VARIABLESTRINGBUFFER, var_name, buffer, bufsize ); 75 } 76 77 void trap_Cvar_SetValue( const char *var_name, float value ) { 78 syscall( UI_CVAR_SETVALUE, var_name, PASSFLOAT( value ) ); 79 } 80 81 void trap_Cvar_Reset( const char *name ) { 82 syscall( UI_CVAR_RESET, name ); 83 } 84 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 89 void trap_Cvar_InfoStringBuffer( int bit, char *buffer, int bufsize ) { 90 syscall( UI_CVAR_INFOSTRINGBUFFER, bit, buffer, bufsize ); 91 } 92 93 int trap_Argc( void ) { 94 return syscall( UI_ARGC ); 95 } 96 97 void trap_Argv( int n, char *buffer, int bufferLength ) { 98 syscall( UI_ARGV, n, buffer, bufferLength ); 99 } 100 101 void trap_Cmd_ExecuteText( int exec_when, const char *text ) { 102 syscall( UI_CMD_EXECUTETEXT, exec_when, text ); 103 } 104 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 109 void trap_FS_Read( void *buffer, int len, fileHandle_t f ) { 110 syscall( UI_FS_READ, buffer, len, f ); 111 } 112 113 void trap_FS_Write( const void *buffer, int len, fileHandle_t f ) { 114 syscall( UI_FS_WRITE, buffer, len, f ); 115 } 116 117 void trap_FS_FCloseFile( fileHandle_t f ) { 118 syscall( UI_FS_FCLOSEFILE, f ); 119 } 120 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 125 int trap_FS_Seek( fileHandle_t f, long offset, int origin ) { 126 return syscall( UI_FS_SEEK, f, offset, origin ); 127 } 128 129 qhandle_t trap_R_RegisterModel( const char *name ) { 130 return syscall( UI_R_REGISTERMODEL, name ); 131 } 132 133 qhandle_t trap_R_RegisterSkin( const char *name ) { 134 return syscall( UI_R_REGISTERSKIN, name ); 135 } 136 137 void trap_R_RegisterFont(const char *fontName, int pointSize, fontInfo_t *font) { 138 syscall( UI_R_REGISTERFONT, fontName, pointSize, font ); 139 } 140 141 qhandle_t trap_R_RegisterShaderNoMip( const char *name ) { 142 return syscall( UI_R_REGISTERSHADERNOMIP, name ); 143 } 144 145 void trap_R_ClearScene( void ) { 146 syscall( UI_R_CLEARSCENE ); 147 } 148 149 void trap_R_AddRefEntityToScene( const refEntity_t *re ) { 150 syscall( UI_R_ADDREFENTITYTOSCENE, re ); 151 } 152 153 void trap_R_AddPolyToScene( qhandle_t hShader , int numVerts, const polyVert_t *verts ) { 154 syscall( UI_R_ADDPOLYTOSCENE, hShader, numVerts, verts ); 155 } 156 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 161 void trap_R_RenderScene( const refdef_t *fd ) { 162 syscall( UI_R_RENDERSCENE, fd ); 163 } 164 165 void trap_R_SetColor( const float *rgba ) { 166 syscall( UI_R_SETCOLOR, rgba ); 167 } 168 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 173 void trap_R_ModelBounds( clipHandle_t model, vec3_t mins, vec3_t maxs ) { 174 syscall( UI_R_MODELBOUNDS, model, mins, maxs ); 175 } 176 177 void trap_UpdateScreen( void ) { 178 syscall( UI_UPDATESCREEN ); 179 } 180 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 185 void trap_S_StartLocalSound( sfxHandle_t sfx, int channelNum ) { 186 syscall( UI_S_STARTLOCALSOUND, sfx, channelNum ); 187 } 188 189 sfxHandle_t trap_S_RegisterSound( const char *sample, qboolean compressed ) { 190 return syscall( UI_S_REGISTERSOUND, sample, compressed ); 191 } 192 193 void trap_Key_KeynumToStringBuf( int keynum, char *buf, int buflen ) { 194 syscall( UI_KEY_KEYNUMTOSTRINGBUF, keynum, buf, buflen ); 195 } 196 197 void trap_Key_GetBindingBuf( int keynum, char *buf, int buflen ) { 198 syscall( UI_KEY_GETBINDINGBUF, keynum, buf, buflen ); 199 } 200 201 void trap_Key_SetBinding( int keynum, const char *binding ) { 202 syscall( UI_KEY_SETBINDING, keynum, binding ); 203 } 204 205 qboolean trap_Key_IsDown( int keynum ) { 206 return syscall( UI_KEY_ISDOWN, keynum ); 207 } 208 209 qboolean trap_Key_GetOverstrikeMode( void ) { 210 return syscall( UI_KEY_GETOVERSTRIKEMODE ); 211 } 212 213 void trap_Key_SetOverstrikeMode( qboolean state ) { 214 syscall( UI_KEY_SETOVERSTRIKEMODE, state ); 215 } 216 217 void trap_Key_ClearStates( void ) { 218 syscall( UI_KEY_CLEARSTATES ); 219 } 220 221 int trap_Key_GetCatcher( void ) { 222 return syscall( UI_KEY_GETCATCHER ); 223 } 224 225 void trap_Key_SetCatcher( int catcher ) { 226 syscall( UI_KEY_SETCATCHER, catcher ); 227 } 228 229 void trap_GetClipboardData( char *buf, int bufsize ) { 230 syscall( UI_GETCLIPBOARDDATA, buf, bufsize ); 231 } 232 233 void trap_GetClientState( uiClientState_t *state ) { 234 syscall( UI_GETCLIENTSTATE, state ); 235 } 236 237 void trap_GetGlconfig( glconfig_t *glconfig ) { 238 syscall( UI_GETGLCONFIG, glconfig ); 239 } 240 241 int trap_GetConfigString( int index, char* buff, int buffsize ) { 242 return syscall( UI_GETCONFIGSTRING, index, buff, buffsize ); 243 } 244 245 int trap_LAN_GetServerCount( int source ) { 246 return syscall( UI_LAN_GETSERVERCOUNT, source ); 247 } 248 249 void trap_LAN_GetServerAddressString( int source, int n, char *buf, int buflen ) { 250 syscall( UI_LAN_GETSERVERADDRESSSTRING, source, n, buf, buflen ); 251 } 252 253 void trap_LAN_GetServerInfo( int source, int n, char *buf, int buflen ) { 254 syscall( UI_LAN_GETSERVERINFO, source, n, buf, buflen ); 255 } 256 257 int trap_LAN_GetServerPing( int source, int n ) { 258 return syscall( UI_LAN_GETSERVERPING, source, n ); 259 } 260 261 int trap_LAN_GetPingQueueCount( void ) { 262 return syscall( UI_LAN_GETPINGQUEUECOUNT ); 263 } 264 265 int trap_LAN_ServerStatus( const char *serverAddress, char *serverStatus, int maxLen ) { 266 return syscall( UI_LAN_SERVERSTATUS, serverAddress, serverStatus, maxLen ); 267 } 268 269 void trap_LAN_SaveCachedServers() { 270 syscall( UI_LAN_SAVECACHEDSERVERS ); 271 } 272 273 void trap_LAN_LoadCachedServers() { 274 syscall( UI_LAN_LOADCACHEDSERVERS ); 275 } 276 277 void trap_LAN_ResetPings(int n) { 278 syscall( UI_LAN_RESETPINGS, n ); 279 } 280 281 void trap_LAN_ClearPing( int n ) { 282 syscall( UI_LAN_CLEARPING, n ); 283 } 284 285 void trap_LAN_GetPing( int n, char *buf, int buflen, int *pingtime ) { 286 syscall( UI_LAN_GETPING, n, buf, buflen, pingtime ); 287 } 288 289 void trap_LAN_GetPingInfo( int n, char *buf, int buflen ) { 290 syscall( UI_LAN_GETPINGINFO, n, buf, buflen ); 291 } 292 293 void trap_LAN_MarkServerVisible( int source, int n, qboolean visible ) { 294 syscall( UI_LAN_MARKSERVERVISIBLE, source, n, visible ); 295 } 296 297 int trap_LAN_ServerIsVisible( int source, int n) { 298 return syscall( UI_LAN_SERVERISVISIBLE, source, n ); 299 } 300 301 qboolean trap_LAN_UpdateVisiblePings( int source ) { 302 return syscall( UI_LAN_UPDATEVISIBLEPINGS, source ); 303 } 304 305 int trap_LAN_AddServer(int source, const char *name, const char *addr) { 306 return syscall( UI_LAN_ADDSERVER, source, name, addr ); 307 } 308 309 void trap_LAN_RemoveServer(int source, const char *addr) { 310 syscall( UI_LAN_REMOVESERVER, source, addr ); 311 } 312 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 317 int trap_MemoryRemaining( void ) { 318 return syscall( UI_MEMORY_REMAINING ); 319 } 320 321 void trap_GetCDKey( char *buf, int buflen ) { 322 syscall( UI_GET_CDKEY, buf, buflen ); 323 } 324 325 void trap_SetCDKey( char *buf ) { 326 syscall( UI_SET_CDKEY, buf ); 327 } 328 329 int trap_PC_AddGlobalDefine( char *define ) { 330 return syscall( UI_PC_ADD_GLOBAL_DEFINE, define ); 331 } 332 333 int trap_PC_LoadSource( const char *filename ) { 334 return syscall( UI_PC_LOAD_SOURCE, filename ); 335 } 336 337 int trap_PC_FreeSource( int handle ) { 338 return syscall( UI_PC_FREE_SOURCE, handle ); 339 } 340 341 int trap_PC_ReadToken( int handle, pc_token_t *pc_token ) { 342 return syscall( UI_PC_READ_TOKEN, handle, pc_token ); 343 } 344 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 349 void trap_S_StopBackgroundTrack( void ) { 350 syscall( UI_S_STOPBACKGROUNDTRACK ); 351 } 352 353 void trap_S_StartBackgroundTrack( const char *intro, const char *loop) { 354 syscall( UI_S_STARTBACKGROUNDTRACK, intro, loop ); 355 } 356 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) 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 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. 374 e_status trap_CIN_RunCinematic (int handle) { 375 return syscall(UI_CIN_RUNCINEMATIC, handle); 376 } 377 378 379 // draws the current frame 380 void trap_CIN_DrawCinematic (int handle) { 381 syscall(UI_CIN_DRAWCINEMATIC, handle); 382 } 383 384 385 // allows you to resize the animation dynamically 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 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 395 qboolean trap_VerifyCDKey( const char *key, const char *chksum) { 396 return syscall( UI_VERIFY_CDKEY, key, chksum); 397 } 398 399 void trap_SetPbClStatus( int status ) { 400 syscall( UI_SET_PBCLSTATUS, status ); 401 }