r5326 - in trunk/data/qcsrc: common menu server

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Sat Dec 27 09:36:14 EST 2008


Author: div0
Date: 2008-12-27 09:36:14 -0500 (Sat, 27 Dec 2008)
New Revision: 5326

Modified:
   trunk/data/qcsrc/common/util-pre.qh
   trunk/data/qcsrc/common/util.qc
   trunk/data/qcsrc/common/util.qh
   trunk/data/qcsrc/menu/gamecommand.qc
   trunk/data/qcsrc/server/extensions.qh
Log:
use DP_QC_TOKENIZE_CONSOLE if available


Modified: trunk/data/qcsrc/common/util-pre.qh
===================================================================
--- trunk/data/qcsrc/common/util-pre.qh	2008-12-26 21:05:07 UTC (rev 5325)
+++ trunk/data/qcsrc/common/util-pre.qh	2008-12-27 14:36:14 UTC (rev 5326)
@@ -1,3 +1,5 @@
 #define tokenize DO_NOT_DEFINE_THIS_MONSTER_tokenize
 #define tokenizebyseparator DO_NOT_DEFINE_THIS_MONSTER_tokenizebyseparator
 #define argv DO_NOT_DEFINE_THIS_MONSTER_argv
+#define argv_start_index DO_NOT_DEFINE_THIS_MONSTER_argv_start_index
+#define argv_end_index DO_NOT_DEFINE_THIS_MONSTER_argv_end_index

Modified: trunk/data/qcsrc/common/util.qc
===================================================================
--- trunk/data/qcsrc/common/util.qc	2008-12-26 21:05:07 UTC (rev 5325)
+++ trunk/data/qcsrc/common/util.qc	2008-12-27 14:36:14 UTC (rev 5326)
@@ -918,6 +918,9 @@
 string (float argnum) _argv_builtin = #442;
 float (string s, string sep) _tokenizebyseparator_builtin = #479;
 #endif
+float(string s) _tokenize_console = #514;
+float(float i) _argv_start_index_builtin = #515;
+float(float i) _argv_end_index_builtin = #516;
 
 float MAX_TOKENS = 256;
 string _argv_sane_buffer[MAX_TOKENS];
@@ -1033,32 +1036,45 @@
 
 
 
-var void(void) func_null;
-
 // "sane" tokenizer
 // matching the console 1:1
 
-float tokenize_sane(string s)
+float tokenize_sane_force_native(string s)
 {
+	argv = _argv_builtin;
+	argv_start_index = _argv_start_index_builtin;
+	argv_end_index = _argv_end_index_builtin;
+	return _tokenize_console(s);
+}
+
+float tokenize_sane_force_emulation(string s)
+{
 	argv = _argv_sane;
 	argv_start_index = _argv_start_index_sane;
 	argv_end_index = _argv_end_index_sane;
 	return _tokenize_sane(s);
 }
 
+float tokenize_sane(string s)
+{
+	if(checkextension("DP_QC_TOKENIZE_CONSOLE"))
+		return tokenize_sane_force_native(s);
+	return tokenize_sane_force_emulation(s);
+}
+
 float tokenize_insane(string s)
 {
 	argv = _argv_builtin;
-	argv_start_index = func_null;
-	argv_end_index = func_null;
+	argv_start_index = _argv_start_index_builtin;
+	argv_end_index = _argv_end_index_builtin;
 	return _tokenize_builtin(s);
 }
 
 float tokenizebyseparator(string s, string sep)
 {
 	argv = _argv_builtin;
-	argv_start_index = func_null;
-	argv_end_index = func_null;
+	argv_start_index = _argv_start_index_builtin;
+	argv_end_index = _argv_end_index_builtin;
 	return _tokenizebyseparator_builtin(s, sep);
 }
 

Modified: trunk/data/qcsrc/common/util.qh
===================================================================
--- trunk/data/qcsrc/common/util.qh	2008-12-26 21:05:07 UTC (rev 5325)
+++ trunk/data/qcsrc/common/util.qh	2008-12-27 14:36:14 UTC (rev 5326)
@@ -114,6 +114,8 @@
 var float(float) argv_start_index;
 var float(float) argv_end_index;
 float tokenize_sane(string s);
+float tokenize_sane_force_emulation(string s);
+float tokenize_sane_force_native(string s);
 float tokenize_insane(string s);
 float tokenizebyseparator(string s, string sep);
 

Modified: trunk/data/qcsrc/menu/gamecommand.qc
===================================================================
--- trunk/data/qcsrc/menu/gamecommand.qc	2008-12-26 21:05:07 UTC (rev 5325)
+++ trunk/data/qcsrc/menu/gamecommand.qc	2008-12-27 14:36:14 UTC (rev 5326)
@@ -74,5 +74,44 @@
 		return;
 	}
 
+#if 0
+	if(argv(0) == "tokentest")
+	{
+		string s;
+		float i, n;
+
+		print("SANE tokenizer:\n");
+		s = cvar_string("tokentest");
+		n = tokenize_sane_force_builtin(s);
+		for(i = -n; i < n; ++i)
+		{
+			print("token ", ftos(i), ": '", argv(i), "' = ");
+			print(ftos(argv_start_index(i)), " to ", ftos(argv_end_index(i)), "\n");
+		}
+		print(".\n");
+
+		print("INSANE tokenizer:\n");
+		s = cvar_string("tokentest");
+		n = tokenize_insane(s);
+		for(i = -n; i < n; ++i)
+		{
+			print("token ", ftos(i), ": '", argv(i), "' = ");
+			print(ftos(argv_start_index(i)), " to ", ftos(argv_end_index(i)), "\n");
+		}
+		print(".\n");
+
+		print("EMULATED tokenizer:\n");
+		s = cvar_string("tokentest");
+		n = tokenize_sane_force_emulation(s);
+		for(i = -n; i < n; ++i)
+		{
+			print("token ", ftos(i), ": '", argv(i), "' = ");
+			print(ftos(argv_start_index(i)), " to ", ftos(argv_end_index(i)), "\n");
+		}
+		print(".\n");
+		return;
+	}
+#endif
+
 	print("Invalid theCommand. For a list of supported theCommands, try menu_cmd help.\n");
 }

Modified: trunk/data/qcsrc/server/extensions.qh
===================================================================
--- trunk/data/qcsrc/server/extensions.qh	2008-12-26 21:05:07 UTC (rev 5325)
+++ trunk/data/qcsrc/server/extensions.qh	2008-12-27 14:36:14 UTC (rev 5326)
@@ -819,6 +819,18 @@
 //returns 4 and the tokens are "10" "2" "3" "4"
 //possibly useful for parsing IPv4 addresses (such as "1.2.3.4") and IPv6 addresses (such as "[1234:5678:9abc:def0:1234:5678:9abc:def0]:26000")
 
+//DP_QC_TOKENIZE_CONSOLE
+//idea: div0
+//darkplaces implementation: div0
+//builtin definitions:
+float(string s) tokenize_console = #514;
+float(float i) argv_start_index = #515;
+float(float i) argv_end_index = #516;
+//description:
+//this function returns tokens separated just like the console does
+//also, functions are provided to get the index of the first and last character of each token in the original string
+//Passing negative values to them, or to argv, will be treated as indexes from the LAST token (like lists work in Perl). So argv(-1) will return the LAST token.
+
 //DP_QC_TRACEBOX
 //idea: id Software
 //darkplaces implementation: id Software




More information about the nexuiz-commits mailing list