<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">[PATCH] Argument completion for playdemo and timedemo commands

diff -urN b/NQ/cl_demo.c head/NQ/cl_demo.c
--- b/NQ/cl_demo.c	2004-07-25 15:59:53.000000000 +0930
+++ head/NQ/cl_demo.c	2006-02-18 13:11:21.000000000 +1030
@@ -26,6 +26,7 @@
 #include "protocol.h"
 #include "quakedef.h"
 #include "sys.h"
+#include "zone.h"
 
 static void CL_FinishTimeDemo(void);
 
@@ -313,6 +314,21 @@
 //      fscanf (cls.demofile, "%i\n", &amp;cls.forcetrack);
 }
 
+struct rb_string_root *
+CL_Demo_Arg_f(const char *arg)
+{
+    struct rb_string_root *root;
+
+    root = Z_Malloc(sizeof(struct rb_string_root));
+    if (root) {
+	*root = RB_STRING_ROOT;
+	ST_AllocInit();
+	COM_ScanDir(root, "", arg, ".dem", true);
+    }
+
+    return root;
+}
+
 /*
 ====================
 CL_FinishTimeDemo
diff -urN b/NQ/cl_main.c head/NQ/cl_main.c
--- b/NQ/cl_main.c	2005-11-27 18:36:48.000000000 +1030
+++ head/NQ/cl_main.c	2006-02-18 13:17:46.000000000 +1030
@@ -760,5 +760,7 @@
     Cmd_AddCommand("record", CL_Record_f);
     Cmd_AddCommand("stop", CL_Stop_f);
     Cmd_AddCommand("playdemo", CL_PlayDemo_f);
+    Cmd_SetCompletion("playdemo", CL_Demo_Arg_f);
     Cmd_AddCommand("timedemo", CL_TimeDemo_f);
+    Cmd_SetCompletion("timedemo", CL_Demo_Arg_f);
 }
diff -urN b/NQ/client.h head/NQ/client.h
--- b/NQ/client.h	2005-11-27 18:36:48.000000000 +1030
+++ head/NQ/client.h	2006-02-18 13:06:12.000000000 +1030
@@ -340,8 +340,10 @@
 
 void CL_Stop_f(void);
 void CL_Record_f(void);
-void CL_PlayDemo_f(void);
+
 void CL_TimeDemo_f(void);
+void CL_PlayDemo_f(void);
+struct rb_string_root *CL_Demo_Arg_f(const char *arg);
 
 //
 // cl_parse.c
diff -urN b/QW/client/cl_demo.c head/QW/client/cl_demo.c
--- b/QW/client/cl_demo.c	2005-11-27 19:13:02.000000000 +1030
+++ head/QW/client/cl_demo.c	2006-02-18 13:19:05.000000000 +1030
@@ -25,6 +25,7 @@
 #include "pmove.h"
 #include "quakedef.h"
 #include "sys.h"
+#include "zone.h"
 
 static void CL_FinishTimeDemo(void);
 
@@ -750,6 +751,21 @@
     realtime = 0;
 }
 
+struct rb_string_root *
+CL_Demo_Arg_f(const char *arg)
+{
+    struct rb_string_root *root;
+
+    root = Z_Malloc(sizeof(struct rb_string_root));
+    if (root) {
+	*root = RB_STRING_ROOT;
+	ST_AllocInit();
+	COM_ScanDir(root, "", arg, ".qwd", true);
+    }
+
+    return root;
+}
+
 /*
 ====================
 CL_FinishTimeDemo
diff -urN b/QW/client/cl_main.c head/QW/client/cl_main.c
--- b/QW/client/cl_main.c	2005-12-28 13:18:27.000000000 +1030
+++ head/QW/client/cl_main.c	2006-02-18 13:07:43.000000000 +1030
@@ -1154,7 +1154,9 @@
     Cmd_AddCommand("rerecord", CL_ReRecord_f);
     Cmd_AddCommand("stop", CL_Stop_f);
     Cmd_AddCommand("playdemo", CL_PlayDemo_f);
+    Cmd_SetCompletion("playdemo", CL_Demo_Arg_f);
     Cmd_AddCommand("timedemo", CL_TimeDemo_f);
+    Cmd_SetCompletion("timedemo", CL_Demo_Arg_f);
 
     Cmd_AddCommand("skins", Skin_Skins_f);
     Cmd_AddCommand("allskins", Skin_AllSkins_f);
diff -urN b/QW/client/client.h head/QW/client/client.h
--- b/QW/client/client.h	2005-11-27 18:36:48.000000000 +1030
+++ head/QW/client/client.h	2006-02-18 13:19:52.000000000 +1030
@@ -432,8 +432,10 @@
 void CL_Stop_f(void);
 void CL_Record_f(void);
 void CL_ReRecord_f(void);
+
 void CL_PlayDemo_f(void);
 void CL_TimeDemo_f(void);
+struct rb_string_root *CL_Demo_Arg_f(const char *arg);
 
 //
 // cl_parse.c
</pre></body></html>