+ #Add some additional characters to the string table in order to
+ #compensate for a wrong boundcheck in some specific version of the
+ #darkplaces engine.
+
+ DARKPLACES_STRING_TABLE_BUG = true
+
+
+ #When assigning to field pointers of type .vector the common be‐
+ #haviour in compilers like fteqcc is to only assign the x-compo‐
+ #nent of the pointer. This means that you can use the vector as
+ #such, but you cannot use its y and z components directly. This
+ #flag fixes this behaviour. Before using it make sure your code
+ #does not depend on the buggy behaviour.
+
+ ADJUST_VECTOR_FIELDS = true
+
+
+ #Enable a partially fteqcc-compatible preprocessor. It supports
+ #all the features used in the Xonotic codebase. If you need more,
+ #write a ticket.
+
+ FTEPP = true
+
+
+ #Enable some predefined macros. This only works in combination
+ #with '-fftepp' and is currently not included by '-std=fteqcc'.
+ #The following macros will be added:
+ #
+ # __LINE__
+ # __FILE__
+ # __COUNTER__
+ # __COUNTER_LAST__
+ # __RANDOM__
+ # __RANDOM_LAST__
+ # __DATE__
+ # __TIME__
+ # __FUNC__
+ #
+ #Note that __FUNC__ is not actually a preprocessor macro, but is
+ #recognized by the parser even with the preprocessor disabled.
+ #
+ #Note that fteqcc also defines __NULL__ which becomes the first
+ #global. Assigning it to a vector does not yield the same result
+ #as in gmqcc where __NULL__ is defined to nil (See -funtyped-nil
+ #), which will cause the vector to be zero in all components. With
+ #fteqcc only the first component will be 0, while the other two
+ #will become the first to of the global return value. This behav‐
+ #ior is odd and relying on it should be discouraged, and thus is
+ #not supported by gmqcc.
+
+ FTEPP_PREDEFS = false
+
+
+ #Enable math constant definitions. This only works in combination
+ #with '-fftepp' and is currently not included by '-std=fteqcc'.
+ #The following macros will be added:
+ #
+ # M_E
+ # M_LOG2E
+ # M_LOG10E
+ # M_LN2
+ # M_LN10
+ # M_PI
+ # M_PI_2
+ # M_PI_4
+ # M_1_PI
+ # M_2_PI
+ # M_2_SQRTPI
+ # M_SQRT2
+ # M_SQRT1_2
+ # M_TAU
+
+ FTEPP_MATHDEFS = false
+
+
+ #Enable indirect macro expansion. This only works in combination
+ #with '-fftepp' and is currently not included by '-std=fteqcc'.
+ #Enabling this behavior will allow the preprocessor to operate more
+ #like the standard C preprocessor in that it will allow arguments
+ #of macros which are macro-expanded to be substituted into the
+ #definition of the macro. As an example:
+ #
+ # #define STR1(x) #x
+ # #define STR2(x) STR1(x)
+ # #define THE_ANSWER 42
+ # #define THE_ANSWER_STR STR2(THE_ANSWER) /* "42" */
+ #
+ #With this enabled, an expansion of THE_ANSWER_STR will yield
+ #the string "42". With this disabled an expansion of THE_ANSWER_STR
+ #will yield "THE_ANSWER"
+
+ FTEPP_INDIRECT_EXPANSION = false
+
+
+ #Allow switch cases to use non constant variables.
+
+ RELAXED_SWITCH = true
+
+
+ #Perform early out in logical AND and OR expressions. The final
+ #result will be either a 0 or a 1, see the next flag for more pos‐
+ #sibilities.
+
+ SHORT_LOGIC = true
+
+
+ #In many languages, logical expressions perform early out in a
+ #special way: If the left operand of an AND yeilds true, or the
+ #one of an OR yields false, the complete expression evaluates to
+ #the right side. Thus ‘true && 5’ evaluates to 5 rather than 1.
+
+ PERL_LOGIC = false
+
+
+ #Enable the underscore intrinsic: Using ‘_("A string constant")’
+ #will cause the string immediate to get a name with a "dotrans‐
+ #late_" prefix. The darkplaces engine recognizes these and trans‐
+ #lates them in a way similar to how gettext works.
+
+ TRANSLATABLE_STRINGS = true
+
+
+ #Don't implicitly convert initialized variables to constants. With
+ #this flag, the const keyword is required to make a constant.
+
+ INITIALIZED_NONCONSTANTS = false
+
+
+ #If this flag is not set, (and it is set by default in the qcc and
+ #fteqcc standards), assigning function pointers of mismatching
+ #signatures will result in an error rather than a warning.
+
+ ASSIGN_FUNCTION_TYPES = true
+
+
+ #Produce a linenumber file along with the output .dat file.
+
+ LNO = false
+
+
+ #Use C's operator precedence for ternary expressions. Unless your
+ #code depends on fteqcc-compatible behaviour, you'll want to use
+ #this option.
+
+ CORRECT_TERNARY = true
+
+
+ #Normally vectors generate 4 defs, once for the vector, and once
+ #for its components with _x, _y, _z suffixes. This option prevents
+ #components from being listed.
+
+
+ SINGLE_VECTOR_DEFS = true
+
+
+ #Most QC compilers translate ‘if(a_vector)’ directly as an IF on
+ #the vector, which means only the x-component is checked. This
+ #option causes vectors to be cast to actual booleans via a NOT_V
+ #and, if necessary, a NOT_F chained to it.
+ #
+ # if (a_vector) // becomes
+ # if not(!a_vector)
+ # // likewise
+ # a = a_vector && a_float // becomes
+ # a = !!a_vector && a_float
+
+ CORRECT_LOGIC = true
+
+
+ #An empty string is considered to be true everywhere. The NOT_S
+ #instruction usually considers an empty string to be false, this
+ #option effectively causes the unary not in strings to use NOT_F
+ #instead.
+
+ TRUE_EMPTY_STRINGS = false
+
+
+ #An empty string is considered to be false everywhere. This means
+ #loops and if statements which depend on a string will perform a
+ #NOT_S instruction on the string before using it.
+
+ FALSE_EMPTY_STRINGS = true
+
+
+ #Enable utf8 characters. This allows utf-8 encoded character con‐
+ #stants, and escape sequence codepoints in the valid utf-8 range.
+ #Effectively enabling escape sequences like '\{x2211}'.
+
+ UTF8 = true