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