]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - prvm_cmds.c
Added a mempool parameter to FS_LoadFile
[xonotic/darkplaces.git] / prvm_cmds.c
index f950bd2c4a682de7bb35a11d87ff536404f72a85..f19deb65613ffa2d1f1eea3d1603b09f076daa3d 100644 (file)
@@ -57,7 +57,7 @@ float sin(float)
 float  cos(float)
 float  sqrt(float)
 vector randomvec()
-float  registercvar (string name, string value)
+float  registercvar (string name, string value, float flags)
 float  min(float a, float b, ...[float])
 float  max(float a, float b, ...[float])
 float  bound(float min, float value, float max)
@@ -129,7 +129,7 @@ menu cmd list:
 ===============
 
                setkeydest(float dest)
-float  getkeydest
+float  getkeydest()
                setmousetarget(float target)
 float  getmousetarget(void)
 
@@ -138,6 +138,10 @@ float      getmousetarget(void)
 float  isfunction(string function_name)
 vector getresolution(float number)
 string keynumtostring(float keynum)
+string findkeysforcommand(string command)
+float  gethostcachevalue(float type)
+string gethostcachestring(float type, float hostnr)
+
 
 */
 
@@ -286,11 +290,11 @@ void VM_error (void)
        char string[VM_STRINGTEMP_LENGTH];
 
        VM_VarString(0, string, sizeof(string));
-       Con_Printf ("======%S ERROR in %s:\n%s\n", PRVM_NAME, PRVM_GetString(prog->xfunction->s_name), string);
+       Con_Printf("======%S ERROR in %s:\n%s\n", PRVM_NAME, PRVM_GetString(prog->xfunction->s_name), string);
        if(prog->self)
        {
                ed = PRVM_G_EDICT(prog->self->ofs);
-               PRVM_ED_Print (ed);
+               PRVM_ED_Print(ed);
        }
 
        PRVM_ERROR ("%s: Program error", PRVM_NAME);
@@ -312,11 +316,11 @@ void VM_objerror (void)
        char string[VM_STRINGTEMP_LENGTH];
 
        VM_VarString(0, string, sizeof(string));
-       Con_Printf ("======%s OBJECT ERROR in %s:\n%s\n", PRVM_NAME, PRVM_GetString(prog->xfunction->s_name), string);
+       Con_Printf("======%s OBJECT ERROR in %s:\n%s\n", PRVM_NAME, PRVM_GetString(prog->xfunction->s_name), string);
        if(prog->self)
        {
                ed = PRVM_G_EDICT (prog->self->ofs);
-               PRVM_ED_Print (ed);
+               PRVM_ED_Print(ed);
 
                PRVM_ED_Free (ed);
        }
@@ -339,7 +343,7 @@ void VM_print (void)
        char string[VM_STRINGTEMP_LENGTH];
 
        VM_VarString(0, string, sizeof(string));
-       Con_Printf(string);
+       Con_Print(string);
 }
 
 /*
@@ -357,12 +361,12 @@ void VM_bprint (void)
 
        if(!sv.active)
        {
-               Con_Printf("VM_bprint: game is not server(%s) !", PRVM_NAME);
+               Con_Printf("VM_bprint: game is not server(%s) !\n", PRVM_NAME);
                return;
        }
 
        VM_VarString(0, string, sizeof(string));
-       SV_BroadcastPrintf("%s", string);
+       SV_BroadcastPrint(string);
 }
 
 /*
@@ -384,7 +388,7 @@ void VM_sprint (void)
        clientnum = PRVM_G_FLOAT(OFS_PARM0);
        if (!sv.active  || clientnum < 0 || clientnum >= svs.maxclients || !svs.clients[clientnum].active)
        {
-               Con_Printf("VM_sprint: %s: invalid client or server is not active !", PRVM_NAME);
+               Con_Printf("VM_sprint: %s: invalid client or server is not active !\n", PRVM_NAME);
                return;
        }
        
@@ -1486,19 +1490,25 @@ void VM_randomvec (void)
 =========
 VM_registercvar
 
-float  registercvar (string name, string value)
+float  registercvar (string name, string value, float flags)
 =========
 */
 void VM_registercvar (void)
 {
        char *name, *value;
        cvar_t *variable;
+       int     flags;  
 
-       VM_SAFEPARMCOUNT(2,VM_registercvar);
+       VM_SAFEPARMCOUNT(3,VM_registercvar);
 
        name = PRVM_G_STRING(OFS_PARM0);
        value = PRVM_G_STRING(OFS_PARM1);
+       flags = PRVM_G_FLOAT(OFS_PARM2);
        PRVM_G_FLOAT(OFS_RETURN) = 0;
+
+       if(flags > CVAR_MAXFLAGSVAL)
+               return;
+
 // first check to see if it has already been defined
        if (Cvar_FindVar (name))
                return;
@@ -1506,7 +1516,7 @@ void VM_registercvar (void)
 // check for overlap with a command
        if (Cmd_Exists (name))
        {
-               Con_Printf ("VM_registercvar: %s is a command\n", name);
+               Con_Printf("VM_registercvar: %s is a command\n", name);
                return;
        }
 
@@ -1515,6 +1525,7 @@ void VM_registercvar (void)
 
 // copy the name and value
        variable = &vm_qc_cvar[vm_currentqc_cvar++];
+       variable->flags = flags;
        variable->name = Z_Malloc (strlen(name)+1);
        strcpy (variable->name, name);
        variable->string = Z_Malloc (strlen(value)+1);
@@ -1647,7 +1658,7 @@ setcolor(clientent, value)
 
        if (entnum < 1 || entnum > svs.maxclients || !svs.clients[entnum-1].active)
        {
-               Con_Print("tried to setcolor a non-client\n");
+               Con_Print("tried to setcolor a non-client\n");
                return;
        }
 
@@ -1719,7 +1730,7 @@ void VM_fopen(void)
                modestring = "wb";
                break;
        default:
-               Con_Printf ("VM_fopen: %s no such mode %i (valid: 0 = read, 1 = append, 2 = write)\n", PRVM_NAME, mode);
+               Con_Printf("VM_fopen: %s no such mode %i (valid: 0 = read, 1 = append, 2 = write)\n", PRVM_NAME, mode);
                PRVM_G_FLOAT(OFS_RETURN) = -3;
                return;
        }
@@ -1996,7 +2007,7 @@ void VM_clcommand (void)
        i = PRVM_G_FLOAT(OFS_PARM0);
        if (!sv.active  || i < 0 || i >= svs.maxclients || !svs.clients[i].active)
        {
-               Con_Printf("VM_clientcommand: %s: invalid client/server is not active !", PRVM_NAME);
+               Con_Printf("VM_clientcommand: %s: invalid client/server is not active !\n", PRVM_NAME);
                return;
        }
 
@@ -2255,7 +2266,7 @@ void VM_loadfromfile(void)
        }
 
        // not conform with VM_fopen
-       data = FS_LoadFile(filename, false);
+       data = FS_LoadFile(filename, tempmempool, false);
        if (data == NULL)
                PRVM_G_FLOAT(OFS_RETURN) = -1;
        
@@ -2553,7 +2564,7 @@ void VM_drawcharacter(void)
        }
        
        if(pos[2] || scale[2])
-               Con_Printf("VM_drawcharacter: z value%c from %s discarded",(pos[2] && scale[2]) ? 's' : 0,((pos[2] && scale[2]) ? "pos and scale" : (pos[2] ? "pos" : "scale"))); 
+               Con_Printf("VM_drawcharacter: z value%c from %s discarded\n",(pos[2] && scale[2]) ? 's' : 0,((pos[2] && scale[2]) ? "pos and scale" : (pos[2] ? "pos" : "scale"))); 
 
        if(!scale[0] || !scale[1])
        {
@@ -2610,7 +2621,7 @@ void VM_drawstring(void)
        }
 
        if(pos[2] || scale[2])
-               Con_Printf("VM_drawstring: z value%c from %s discarded",(pos[2] && scale[2]) ? 's' : 0,((pos[2] && scale[2]) ? "pos and scale" : (pos[2] ? "pos" : "scale"))); 
+               Con_Printf("VM_drawstring: z value%c from %s discarded\n",(pos[2] && scale[2]) ? 's' : 0,((pos[2] && scale[2]) ? "pos and scale" : (pos[2] ? "pos" : "scale"))); 
        
        DrawQ_String (pos[0], pos[1], string, 0, scale[0], scale[1], rgb[0], rgb[1], rgb[2], PRVM_G_FLOAT(OFS_PARM4), flag);
        PRVM_G_FLOAT(OFS_RETURN) = 1;
@@ -2662,7 +2673,7 @@ void VM_drawpic(void)
        }
 
        if(pos[2] || size[2])
-               Con_Printf("VM_drawstring: z value%c from %s discarded",(pos[2] && size[2]) ? 's' : 0,((pos[2] && size[2]) ? "pos and size" : (pos[2] ? "pos" : "size"))); 
+               Con_Printf("VM_drawstring: z value%c from %s discarded\n",(pos[2] && size[2]) ? 's' : 0,((pos[2] && size[2]) ? "pos and size" : (pos[2] ? "pos" : "size"))); 
        
        DrawQ_Pic(pos[0], pos[1], pic, size[0], size[1], rgb[0], rgb[1], rgb[2], PRVM_G_FLOAT(OFS_PARM4), flag);
        PRVM_G_FLOAT(OFS_RETURN) = 1;
@@ -2696,7 +2707,7 @@ void VM_drawfill(void)
        }
        
        if(pos[2] || size[2])
-               Con_Printf("VM_drawstring: z value%c from %s discarded",(pos[2] && size[2]) ? 's' : 0,((pos[2] && size[2]) ? "pos and size" : (pos[2] ? "pos" : "size"))); 
+               Con_Printf("VM_drawstring: z value%c from %s discarded\n",(pos[2] && size[2]) ? 's' : 0,((pos[2] && size[2]) ? "pos and size" : (pos[2] ? "pos" : "size"))); 
        
        DrawQ_Pic(pos[0], pos[1], 0, size[0], size[1], rgb[0], rgb[1], rgb[2], PRVM_G_FLOAT(OFS_PARM3), flag);
        PRVM_G_FLOAT(OFS_RETURN) = 1;
@@ -3082,6 +3093,130 @@ void VM_M_keynumtostring(void)
        PRVM_G_INT(OFS_RETURN) = PRVM_SetString(tmp);
 }
 
+/*
+=========
+VM_M_findkeysforcommand
+
+string findkeysforcommand(string command)
+
+the returned string is an altstring
+=========
+*/
+#define NUMKEYS 5 // TODO: merge the constant in keys.c with this one somewhen
+
+void M_FindKeysForCommand(char *command, int *keys);
+void VM_M_findkeysforcommand(void)
+{
+       char *cmd, *ret;
+       int keys[NUMKEYS];
+       int i;
+
+       VM_SAFEPARMCOUNT(1, VM_M_findkeysforcommand);
+
+       cmd = PRVM_G_STRING(OFS_PARM0);
+       
+       VM_CheckEmptyString(cmd);
+
+       (ret = VM_GetTempString())[0] = 0;
+       
+       M_FindKeysForCommand(cmd, keys);
+
+       for(i = 0; i < NUMKEYS; i++)
+               ret = strcat(ret, va(" \'%i\'", keys[i]));
+
+       PRVM_G_INT(OFS_RETURN) = PRVM_SetString(ret);
+}
+
+/*
+=========
+VM_M_gethostcachecount
+
+float  gethostcachevalue(float type)
+=========
+*/
+/*
+       type:
+0      hostcachecount
+1      masterquerycount
+2      masterreplycount
+3      serverquerycount
+4      serverreplycount
+*/
+void VM_M_gethostcachevalue( void )
+{
+       int type;
+       VM_SAFEPARMCOUNT ( 1, VM_M_gethostcachevalue );
+
+       PRVM_G_FLOAT( OFS_RETURN ) = 0;
+
+       type = PRVM_G_FLOAT( OFS_PARM0 );
+       if( type < 0 || type > 4 )
+               Con_Printf( "VM_M_gethostcachevalue: bad type %i!\n", type );
+       else switch(type)
+       {
+       case 0:
+               PRVM_G_FLOAT ( OFS_RETURN ) = hostCacheCount;
+               return;
+       case 1:
+               PRVM_G_FLOAT ( OFS_RETURN ) = masterquerycount;
+               return;
+       case 2:
+               PRVM_G_FLOAT ( OFS_RETURN ) = masterreplycount;
+               return;
+       case 3:
+               PRVM_G_FLOAT ( OFS_RETURN ) = serverquerycount;
+               return;
+       case 4:
+               PRVM_G_FLOAT ( OFS_RETURN ) = serverreplycount;
+               return;
+       }
+}
+
+/*
+=========
+VM_M_gethostcachestring
+
+string gethostcachestring(float type, float hostnr)
+=========
+*/
+/*
+0      Get CName
+1      Get line1
+2      Get line2 
+*/
+void VM_M_gethostcachestring(void)
+{
+       int type;
+       int hostnr;
+
+       VM_SAFEPARMCOUNT(2, VM_M_gethostcachestring);
+
+       PRVM_G_INT(OFS_RETURN) = 0;
+
+       type = PRVM_G_FLOAT(OFS_PARM0);
+       
+       if(type < 0 || type > 2)
+       {
+               Con_Print("VM_M_gethostcachestring: bad string type requested!\n");
+               return;
+       }
+
+       hostnr = PRVM_G_FLOAT(OFS_PARM1);
+
+       if(hostnr < 0 || hostnr >= hostCacheCount)
+       {
+               Con_Print("VM_M_gethostcachestring: bad hostnr passed!\n");
+               return;
+       }
+
+       if( type == 0 )
+               PRVM_G_INT( OFS_RETURN ) = PRVM_SetString( hostcache[hostnr].cname );
+       else if( type == 1 )
+               PRVM_G_INT( OFS_RETURN ) = PRVM_SetString( hostcache[hostnr].line1 );
+       else
+               PRVM_G_INT( OFS_RETURN ) = PRVM_SetString( hostcache[hostnr].line2 );
+}
+
 prvm_builtin_t vm_m_builtins[] = {
        0, // to be consistent with the old vm
        // common builtings (mostly)
@@ -3209,7 +3344,10 @@ prvm_builtin_t vm_m_builtins[] = {
        VM_M_writetofile,
        VM_M_isfunction,
        VM_M_getresolution,
-       VM_M_keynumtostring // 609
+       VM_M_keynumtostring,
+       VM_M_findkeysforcommand,// 610
+       VM_M_gethostcachevalue,
+       VM_M_gethostcachestring // 612 
 };
 
 const int vm_m_numbuiltins = sizeof(vm_m_builtins) / sizeof(prvm_builtin_t);