]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - cmd.c
Merge branch 'master' into Cloudwalk/cvar_overhaul
[xonotic/darkplaces.git] / cmd.c
diff --git a/cmd.c b/cmd.c
index 8fef16f446aa45c44d7d7c4272617a5b44d43a4d..3ff1d5f0e59e7415c83ed9421a851acd0410bd05 100644 (file)
--- a/cmd.c
+++ b/cmd.c
@@ -86,12 +86,8 @@ static void Cmd_Defer_f (cmd_state_t *cmd)
                        Con_Printf("No commands are pending.\n");
                else
                {
-                       llist_t *pos;
-               List_For_Each(pos, &cbuf->deferred)
-               {
-                               current = List_Entry(*pos, cmd_input_t, list);
+                       List_For_Each_Entry(current, &cbuf->deferred, list)
                                Con_Printf("-> In %9.2f: %s\n", current->delay, current->text);
-                       }
                }
        }
        else if(Cmd_Argc(cmd) == 2 && !strcasecmp("clear", Cmd_Argv(cmd, 1)))
@@ -183,7 +179,7 @@ static cmd_input_t *Cbuf_LinkGet(cmd_buf_t *cbuf, cmd_input_t *existing)
                ret = existing;
        else if(!List_Is_Empty(&cbuf->free))
        {
-               ret = List_Entry(*cbuf->free.next, cmd_input_t, list);
+               ret = List_Entry(cbuf->free.next, cmd_input_t, list);
                ret->length = 0;
                ret->pending = false;
        }
@@ -370,7 +366,7 @@ void Cbuf_AddText (cmd_state_t *cmd, const char *text)
                Con_Print("Cbuf_AddText: overflow\n");
        else
        {
-               Cbuf_LinkCreate(cmd, &llist, (List_Is_Empty(&cbuf->start) ? NULL : List_Entry(*cbuf->start.prev, cmd_input_t, list)), text);
+               Cbuf_LinkCreate(cmd, &llist, (List_Is_Empty(&cbuf->start) ? NULL : List_Entry(cbuf->start.prev, cmd_input_t, list)), text);
                if(!List_Is_Empty(&llist))
                        List_Splice_Tail(&llist, &cbuf->start);
        }
@@ -398,7 +394,7 @@ void Cbuf_InsertText (cmd_state_t *cmd, const char *text)
                Con_Print("Cbuf_InsertText: overflow\n");
        else
        {
-               Cbuf_LinkCreate(cmd, &llist, List_Entry(*cbuf->start.next, cmd_input_t, list), text);
+               Cbuf_LinkCreate(cmd, &llist, List_Entry(cbuf->start.next, cmd_input_t, list), text);
                if(!List_Is_Empty(&llist))
                        List_Splice(&llist, &cbuf->start);
        }
@@ -413,7 +409,6 @@ Cbuf_Execute_Deferred --blub
 */
 static void Cbuf_Execute_Deferred (cmd_buf_t *cbuf)
 {
-       llist_t *pos;
        cmd_input_t *current;
        double eat;
 
@@ -424,14 +419,13 @@ static void Cbuf_Execute_Deferred (cmd_buf_t *cbuf)
                return;
        cbuf->deferred_oldtime = host.realtime;
 
-    List_For_Each(pos, &cbuf->deferred)
+       List_For_Each_Entry(current, &cbuf->deferred, list)
        {
-               current = List_Entry(*pos, cmd_input_t, list);
                current->delay -= eat;
                if(current->delay <= 0)
                {
                        cbuf->size += current->length;
-                       List_Move(pos, &cbuf->start);
+                       List_Move(&current->list, &cbuf->start);
                        // We must return and come back next frame or the engine will freeze. Fragile... like glass :3
                        return;
                }
@@ -460,7 +454,7 @@ void Cbuf_Execute (cmd_buf_t *cbuf)
                 * commands down. This is necessary because commands (exec, alias)
                 * can insert data at the beginning of the text buffer
                 */
-               current = List_Entry(*cbuf->start.next, cmd_input_t, list);
+               current = List_Entry(cbuf->start.next, cmd_input_t, list);
                
                // Recycle memory so using WASD doesn't cause a malloc and free
                List_Move_Tail(&current->list, &cbuf->free);
@@ -931,6 +925,7 @@ static void Cmd_Toggle_f(cmd_state_t *cmd)
        { // Correct Arguments Specified
                // Acquire Potential CVar
                cvar_t* cvCVar = Cvar_FindVar(cmd->cvars, Cmd_Argv(cmd, 1), cmd->cvars_flagsmask);
+               cvCVar = cvCVar->parent ? cvCVar->parent : cvCVar;
 
                if(cvCVar != NULL)
                { // Valid CVar
@@ -1179,7 +1174,7 @@ static const char *Cmd_GetDirectCvarValue(cmd_state_t *cmd, const char *varname,
        }
 
        if((cvar = Cvar_FindVar(cmd->cvars, varname, cmd->cvars_flagsmask)) && !(cvar->flags & CF_PRIVATE))
-               return cvar->string;
+               return cvar->parent ? cvar->parent->string : cvar->string;
 
        return NULL;
 }
@@ -1585,24 +1580,15 @@ static void Cmd_Apropos_f(cmd_state_t *cmd)
                partial = va(vabuf, sizeof(vabuf), "*%s*", partial);
 
        count = 0;
-       for (cvar = cmd->cvars->vars; cvar; cvar = cvar->next)
+       List_For_Each_Entry(cvar, &cmd->cvars->vars->list, list)
        {
                if (matchpattern_with_separator(cvar->name, partial, true, "", false) ||
                    matchpattern_with_separator(cvar->description, partial, true, "", false))
                {
                        Con_Printf ("cvar ");
-                       Cvar_PrintHelp(cvar, cvar->name, true);
+                       Cvar_PrintHelp(cvar->parent ? cvar->parent : cvar, cvar->name, true);
                        count++;
                }
-               for (char **cvar_alias = cvar->aliases; cvar_alias && *cvar_alias; cvar_alias++)
-               {
-                       if (matchpattern_with_separator(*cvar_alias, partial, true, "", false))
-                       {
-                               Con_Printf ("cvar ");
-                               Cvar_PrintHelp(cvar, *cvar_alias, true);
-                               count++;
-                       }
-               }
        }
        for (func = cmd->userdefined->qc_functions; func; func = func->next)
        {
@@ -1642,6 +1628,9 @@ static cmd_state_t *Cmd_AddInterpreter(cmd_buf_t *cbuf, cvar_state_t *cvars, int
        cmd->null_string = "";
 
        cmd->cvars = cvars;
+       cmd->cvars->mempool = Mem_AllocPool("cvars", 0, NULL);
+       cmd->cvars->vars = (cvar_t *)Mem_Alloc(cmd->cvars->mempool, sizeof(cvar_t));
+       cmd->cvars->vars->list.next = cmd->cvars->vars->list.prev = &cmd->cvars->vars->list;
        cmd->cvars_flagsmask = cvars_flagsmask;
        cmd->cmd_flags = cmds_flagsmask;
        cmd->userdefined = userdefined;