// a dummy macro that prevents the "hanging ;" warning
#define ENDS_WITH_CURLY_BRACE
-// return the actual code name of a var as a string
-#define VAR_TO_TEXT(var) #var
-
#ifdef HAVE_YO_DAWG_CPP
// TODO make ascii art pic of xzibit
// YO DAWG!
// used for simplifying ACCUMULATE_FUNCTIONs
#define SET_FIRST_OR_LAST(input,first,count) if(!input) { input = (first + count); }
#define SET_FIELD_COUNT(field,first,count) if(!field) { field = (first + count); ++count; }
-#define CHECK_MAX_COUNT(name,max,count,type) if(count == max) { error(strcat("Maximum ", type, " hit: ", VAR_TO_TEXT(name), ": ", ftos(count), ".\n")); }
+#define CHECK_MAX_COUNT(name,max,count,type) if(count == max) { error(strcat("Maximum ", type, " hit: ", #name, ": ", ftos(count), ".\n")); }
// this returns a tempstring containing a copy of s with additional \n newlines added, it also replaces \n in the text with a real newline
// NOTE: s IS allowed to be a tempstring
// for marking written-to values as unused where it's a good idea to do this
noref float unused_float;
-
-
// a function f with:
// f(0) = 0
// f(1) = 1
// expand multiple arguments into one argument by stripping parenthesis
#define XPD(...) __VA_ARGS__
-float Count_Proper_Strings(string improper, string...count);
-float Count_Proper_Floats(float improper, float...count);
-
#ifndef MENUQC
void backtrace(string msg);
#endif
#ifndef MENUQC
vector animfixfps(entity e, vector a, vector b);
#endif
+
+#ifdef SVQC
+void dedicated_print(string input);
+#endif
+
+// todo: better way to do this?
+#ifdef MENUQC
+#define PROGNAME "MENUQC"
+#else
+#ifdef SVQC
+#define PROGNAME "SVQC"
+#else
+#define PROGNAME "CSQC"
+#endif
+#endif
+
+#ifndef MENUQC
+float Announcer_PickNumber(float num);
+#endif