--- /dev/null
+# Doxyfile 1.5.9
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project
+#
+# All text after a hash (#) is considered a comment and will be ignored
+# The format is:
+# TAG = value [value, ...]
+# For lists items can also be appended using:
+# TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ")
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file
+# that follow. The default is UTF-8 which is also the encoding used for all
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the
+# iconv built into libc) for the transcoding. See
+# http://www.gnu.org/software/libiconv for the list of possible encodings.
+
+DOXYFILE_ENCODING = UTF-8
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
+# by quotes) that should identify the project.
+
+PROJECT_NAME = darkplaces
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number.
+# This could be handy for archiving the generated documentation or
+# if some version control system is used.
+
+PROJECT_NUMBER =
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
+# base path where the generated documentation will be put.
+# If a relative path is entered, it will be relative to the location
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY = docs
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
+# 4096 sub-directories (in 2 levels) under the output directory of each output
+# format and will distribute the generated files over these directories.
+# Enabling this option can be useful when feeding doxygen a huge amount of
+# source files, where putting all generated files in the same directory would
+# otherwise cause performance problems for the file system.
+
+CREATE_SUBDIRS = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# The default language is English, other supported languages are:
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
+# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German,
+# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English
+# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian,
+# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak,
+# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.
+
+OUTPUT_LANGUAGE = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
+# include brief member descriptions after the members that are listed in
+# the file and class documentation (similar to JavaDoc).
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
+# the brief description of a member or function before the detailed description.
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator
+# that is used to form the text in various listings. Each string
+# in this list, if found as the leading text of the brief description, will be
+# stripped from the text and the result after processing the whole list, is
+# used as the annotated text. Otherwise, the brief description is used as-is.
+# If left blank, the following values are used ("$name" is automatically
+# replaced with the name of the entity): "The $name class" "The $name widget"
+# "The $name file" "is" "provides" "specifies" "contains"
+# "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF =
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# Doxygen will generate a detailed section even if there is only a brief
+# description.
+
+ALWAYS_DETAILED_SEC = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
+# operators of the base classes will not be shown.
+
+INLINE_INHERITED_MEMB = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
+# path before files name in the file list and in the header files. If set
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES = YES
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
+# can be used to strip a user-defined part of the path. Stripping is
+# only done if one of the specified strings matches the left-hand part of
+# the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the
+# path to strip.
+
+STRIP_FROM_PATH =
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
+# the path mentioned in the documentation of a class, which tells
+# the reader which header file to include in order to use a class.
+# If left blank only the name of the header file containing the class
+# definition is used. Otherwise one should specify the include paths that
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH =
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
+# (but less readable) file names. This can be useful is your file systems
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
+# will interpret the first line (until the first dot) of a JavaDoc-style
+# comment as the brief description. If set to NO, the JavaDoc
+# comments will behave just like regular Qt-style comments
+# (thus requiring an explicit @brief command for a brief description.)
+
+JAVADOC_AUTOBRIEF = NO
+
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will
+# interpret the first line (until the first dot) of a Qt-style
+# comment as the brief description. If set to NO, the comments
+# will behave just like regular Qt-style comments (thus requiring
+# an explicit \brief command for a brief description.)
+
+QT_AUTOBRIEF = YES
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
+# treat a multi-line C++ special comment block (i.e. a block of //! or ///
+# comments) as a brief description. This used to be the default behaviour.
+# The new default is to treat a multi-line C++ comment block as a detailed
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
+# member inherits the documentation from any documented member that it
+# re-implements.
+
+INHERIT_DOCS = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
+# a new page for each member. If set to NO, the documentation of a member will
+# be part of the file/class/namespace that contains it.
+
+SEPARATE_MEMBER_PAGES = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab.
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE = 8
+
+# This tag can be used to specify a number of aliases that acts
+# as commands in the documentation. An alias has the form "name=value".
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to
+# put the command \sideeffect (or @sideeffect) in the documentation, which
+# will result in a user-defined paragraph with heading "Side Effects:".
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES =
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
+# sources only. Doxygen will then generate output that is more tailored for C.
+# For instance, some of the names that are used will be different. The list
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C = YES
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
+# sources only. Doxygen will then generate output that is more tailored for
+# Java. For instance, namespaces will be presented as packages, qualified
+# scopes will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
+# sources only. Doxygen will then generate output that is more tailored for
+# Fortran.
+
+OPTIMIZE_FOR_FORTRAN = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
+# sources. Doxygen will then generate output that is tailored for
+# VHDL.
+
+OPTIMIZE_OUTPUT_VHDL = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it parses.
+# With this tag you can assign which parser to use for a given extension.
+# Doxygen has a built-in mapping, but you can override or extend it using this tag.
+# The format is ext=language, where ext is a file extension, and language is one of
+# the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP,
+# Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat
+# .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran),
+# use: inc=Fortran f=C. Note that for custom extensions you also need to set
+# FILE_PATTERNS otherwise the files are not read by doxygen.
+
+EXTENSION_MAPPING =
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
+# to include (a tag file for) the STL sources as input, then you should
+# set this tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
+# func(std::string) {}). This also make the inheritance and collaboration
+# diagrams that involve STL classes more complete and accurate.
+
+BUILTIN_STL_SUPPORT = NO
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+
+CPP_CLI_SUPPORT = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only.
+# Doxygen will parse them like normal C++ but will assume all classes use public
+# instead of private inheritance when no explicit protection keyword is present.
+
+SIP_SUPPORT = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate getter
+# and setter methods for a property. Setting this option to YES (the default)
+# will make doxygen to replace the get and set methods by a property in the
+# documentation. This will only work if the methods are indeed getting or
+# setting a simple type. If this is not the case, or you want to show the
+# methods anyway, you should set this option to NO.
+
+IDL_PROPERTY_SUPPORT = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
+# the same type (for instance a group of public functions) to be put as a
+# subgroup of that type (e.g. under the Public Functions section). Set it to
+# NO to prevent subgrouping. Alternatively, this can be done per class using
+# the \nosubgrouping command.
+
+SUBGROUPING = YES
+
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum
+# is documented as struct, union, or enum with the name of the typedef. So
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
+# with name TypeT. When disabled the typedef will appear as a member of a file,
+# namespace, or class. And the struct will be named TypeS. This can typically
+# be useful for C code in case the coding convention dictates that all compound
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+
+TYPEDEF_HIDES_STRUCT = NO
+
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to
+# determine which symbols to keep in memory and which to flush to disk.
+# When the cache is full, less often used symbols will be written to disk.
+# For small to medium size projects (<1000 input files) the default value is
+# probably good enough. For larger projects a too small cache size can cause
+# doxygen to be busy swapping symbols to and from disk most of the time
+# causing a significant performance penality.
+# If the system has enough physical memory increasing the cache will improve the
+# performance by keeping more symbols in memory. Note that the value works on
+# a logarithmic scale so increasing the size by one will rougly double the
+# memory usage. The cache size is given by this formula:
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,
+# corresponding to a cache size of 2^16 = 65536 symbols
+
+SYMBOL_CACHE_SIZE = 0
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# documentation are documented, even if no documentation was available.
+# Private class members and static file members will be hidden unless
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL = YES
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
+# will be included in the documentation.
+
+EXTRACT_PRIVATE = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file
+# will be included in the documentation.
+
+EXTRACT_STATIC = NO
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
+# defined locally in source files will be included in the documentation.
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES = YES
+
+# This flag is only useful for Objective-C code. When set to YES local
+# methods, which are defined in the implementation section but not in
+# the interface are included in the documentation.
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS = NO
+
+# If this flag is set to YES, the members of anonymous namespaces will be
+# extracted and appear in the documentation as a namespace called
+# 'anonymous_namespace{file}', where file will be replaced with the base
+# name of the file that contains the anonymous namespace. By default
+# anonymous namespace are hidden.
+
+EXTRACT_ANON_NSPACES = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
+# undocumented members of documented classes, files or namespaces.
+# If set to NO (the default) these members will be included in the
+# various overviews, but no documentation section is generated.
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy.
+# If set to NO (the default) these classes will be included in the various
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
+# friend (class|struct|union) declarations.
+# If set to NO (the default) these declarations will be included in the
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
+# documentation blocks found inside the body of a function.
+# If set to NO (the default) these blocks will be appended to the
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS = NO
+
+# The INTERNAL_DOCS tag determines if documentation
+# that is typed after a \internal command is included. If the tag is set
+# to NO (the default) then the documentation will be excluded.
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
+# file names in lower-case letters. If set to YES upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# and Mac users are advised to set this option to NO.
+
+CASE_SENSE_NAMES = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
+# will show members with their full class and namespace scopes in the
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES = YES
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
+# will put a list of the files that are included by a file in the documentation
+# of that file.
+
+SHOW_INCLUDE_FILES = YES
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
+# is inserted in the documentation for inline members.
+
+INLINE_INFO = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
+# will sort the (detailed) documentation of file and class members
+# alphabetically by member name. If set to NO the members will appear in
+# declaration order.
+
+SORT_MEMBER_DOCS = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
+# brief documentation of file, namespace and class members alphabetically
+# by member name. If set to NO (the default) the members will appear in
+# declaration order.
+
+SORT_BRIEF_DOCS = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the
+# hierarchy of group names into alphabetical order. If set to NO (the default)
+# the group names will appear in their defined order.
+
+SORT_GROUP_NAMES = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
+# sorted by fully-qualified names, including namespaces. If set to
+# NO (the default), the class list will be sorted only by class name,
+# not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or
+# disable (NO) the todo list. This list is created by putting \todo
+# commands in the documentation.
+
+GENERATE_TODOLIST = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or
+# disable (NO) the test list. This list is created by putting \test
+# commands in the documentation.
+
+GENERATE_TESTLIST = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or
+# disable (NO) the bug list. This list is created by putting \bug
+# commands in the documentation.
+
+GENERATE_BUGLIST = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
+# disable (NO) the deprecated list. This list is created by putting
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
+# the initial value of a variable or define consists of for it to appear in
+# the documentation. If the initializer consists of more lines than specified
+# here it will be hidden. Use a value of 0 to hide initializers completely.
+# The appearance of the initializer of individual variables and defines in the
+# documentation can be controlled using \showinitializer or \hideinitializer
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES = 30
+
+# If the sources in your project are distributed over multiple directories
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy
+# in the documentation. The default is NO.
+
+SHOW_DIRECTORIES = NO
+
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.
+# This will remove the Files entry from the Quick Index and from the
+# Folder Tree View (if specified). The default is YES.
+
+SHOW_FILES = YES
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the
+# Namespaces page. This will remove the Namespaces entry from the Quick Index
+# and from the Folder Tree View (if specified). The default is YES.
+
+SHOW_NAMESPACES = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from
+# the version control system). Doxygen will invoke the program by executing (via
+# popen()) the command <command> <input-file>, where <command> is the value of
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
+# provided by doxygen. Whatever the program writes to standard output
+# is used as the file version. See the manual for examples.
+
+FILE_VERSION_FILTER =
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by
+# doxygen. The layout file controls the global structure of the generated output files
+# in an output format independent way. The create the layout file that represents
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name
+# of the layout file.
+
+LAYOUT_FILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated by doxygen. Possible values are YES and NO. If left blank
+# NO is used.
+
+WARNINGS = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED = YES
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some
+# parameters in a documented function, or documenting parameters that
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR = YES
+
+# This WARN_NO_PARAMDOC option can be abled to get warnings for
+# functions that are documented, but have no documentation for their parameters
+# or return value. If set to NO (the default) doxygen will only warn about
+# wrong or incomplete parameter documentation, but not about the absence of
+# documentation.
+
+WARN_NO_PARAMDOC = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that
+# doxygen can produce. The string should contain the $file, $line, and $text
+# tags, which will be replaced by the file and line number from which the
+# warning originated and the warning text. Optionally the format may contain
+# $version, which will be replaced by the version of the file (if it could
+# be obtained via FILE_VERSION_FILTER)
+
+WARN_FORMAT = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning
+# and error messages should be written. If left blank the output is written
+# to stderr.
+
+WARN_LOGFILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain
+# documented source files. You may enter file names like "myfile.cpp" or
+# directories like "/usr/src/myproject". Separate the files or directories
+# with spaces.
+
+INPUT = .
+
+# This tag can be used to specify the character encoding of the source files
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
+# also the default input encoding. Doxygen uses libiconv (or the iconv built
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for
+# the list of possible encodings.
+
+INPUT_ENCODING = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank the following patterns are tested:
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90
+
+FILE_PATTERNS =
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories
+# should be searched for input files as well. Possible values are YES and NO.
+# If left blank NO is used.
+
+RECURSIVE = YES
+
+# The EXCLUDE tag can be used to specify files and/or directories that should
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+
+EXCLUDE =
+
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or
+# directories that are symbolic links (a Unix filesystem feature) are excluded
+# from the input.
+
+EXCLUDE_SYMLINKS = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories. Note that the wildcards are matched
+# against the file with absolute path, so to exclude all test directories
+# for example use the pattern */test/*
+
+EXCLUDE_PATTERNS =
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
+# (namespaces, classes, functions, etc.) that should be excluded from the
+# output. The symbol name can be a fully qualified name, a word, or if the
+# wildcard * is used, a substring. Examples: ANamespace, AClass,
+# AClass::ANamespace, ANamespace::*Test
+
+EXCLUDE_SYMBOLS =
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or
+# directories that contain example code fragments that are included (see
+# the \include command).
+
+EXAMPLE_PATH =
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank all files are included.
+
+EXAMPLE_PATTERNS =
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude
+# commands irrespective of the value of the RECURSIVE tag.
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or
+# directories that contain image that are included in the documentation (see
+# the \image command).
+
+IMAGE_PATH =
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command <filter> <input-file>, where <filter>
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
+# input file. Doxygen will then use the output that the filter program writes
+# to standard output. If FILTER_PATTERNS is specified, this tag will be
+# ignored.
+
+INPUT_FILTER =
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis. Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match. The filters are a list of the form:
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER
+# is applied to all files.
+
+FILTER_PATTERNS =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will be used to filter the input files when producing source
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will
+# be generated. Documented entities will be cross-referenced with these sources.
+# Note: To get rid of all source code in the generated output, make sure also
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER = YES
+
+# Setting the INLINE_SOURCES tag to YES will include the body
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
+# doxygen to hide any special comment blocks from generated source code
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES
+# then for each documented function all documented
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = NO
+
+# If the REFERENCES_RELATION tag is set to YES
+# then for each documented function all documented entities
+# called/used by that function will be listed.
+
+REFERENCES_RELATION = NO
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
+# link to the source code. Otherwise they will link to the documentation.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code
+# will point to the HTML generated by the htags(1) tool instead of doxygen
+# built-in source browser. The htags tool is part of GNU's global source
+# tagging system (see http://www.gnu.org/software/global/global.html). You
+# will need version 4.8.6 or higher.
+
+USE_HTAGS = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
+# will generate a verbatim copy of the header file for each class for
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
+# of all compounds will be generated. Enable this if the project
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX = NO
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX = 5
+
+# In case all classes in a project start with a common prefix, all
+# classes will be put under the same header in the alphabetical index.
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX =
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
+# generate HTML output.
+
+GENERATE_HTML = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard header.
+
+HTML_HEADER =
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard footer.
+
+HTML_FOOTER =
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
+# style sheet that is used by each HTML page. It can be used to
+# fine-tune the look of the HTML output. If the tag is left blank doxygen
+# will generate a default style sheet. Note that doxygen will try to copy
+# the style sheet file to the HTML output directory, so don't put your own
+# stylesheet in the HTML output directory as well, or it will be erased!
+
+HTML_STYLESHEET =
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
+# files or namespaces will be aligned in HTML using tables. If set to
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS = YES
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
+# documentation will contain sections that can be hidden and shown after the
+# page has loaded. For this to work a browser that supports
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).
+
+HTML_DYNAMIC_SECTIONS = NO
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files
+# will be generated that can be used as input for Apple's Xcode 3
+# integrated development environment, introduced with OSX 10.5 (Leopard).
+# To create a documentation set, doxygen will generate a Makefile in the
+# HTML output directory. Running make will produce the docset in that
+# directory and running "make install" will install the docset in
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find
+# it at startup.
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.
+
+GENERATE_DOCSET = NO
+
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the
+# feed. A documentation feed provides an umbrella under which multiple
+# documentation sets from a single provider (such as a company or product suite)
+# can be grouped.
+
+DOCSET_FEEDNAME = "Doxygen generated docs"
+
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that
+# should uniquely identify the documentation set bundle. This should be a
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen
+# will append .docset to the name.
+
+DOCSET_BUNDLE_ID = org.doxygen.Project
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files
+# will be generated that can be used as input for tools like the
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm)
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
+# be used to specify the file name of the resulting .chm file. You
+# can add a path in front of the file if the result should not be
+# written to the html output directory.
+
+CHM_FILE =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
+# be used to specify the location (absolute path including file name) of
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
+# controls if a separate .chi index file is generated (YES) or that
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file
+# content.
+
+CHM_INDEX_ENCODING =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
+# controls whether a binary table of contents is generated (YES) or a
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND = NO
+
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER
+# are set, an additional index file will be generated that can be used as input for
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated
+# HTML documentation.
+
+GENERATE_QHP = NO
+
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can
+# be used to specify the file name of the resulting .qch file.
+# The path specified is relative to the HTML output folder.
+
+QCH_FILE =
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating
+# Qt Help Project output. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#namespace
+
+QHP_NAMESPACE =
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating
+# Qt Help Project output. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#virtual-folders
+
+QHP_VIRTUAL_FOLDER = doc
+
+# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add.
+# For more information please see
+# http://doc.trolltech.com/qthelpproject.html#custom-filters
+
+QHP_CUST_FILTER_NAME =
+
+# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see
+# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">Qt Help Project / Custom Filters</a>.
+
+QHP_CUST_FILTER_ATTRS =
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's
+# filter section matches.
+# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">Qt Help Project / Filter Attributes</a>.
+
+QHP_SECT_FILTER_ATTRS =
+
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can
+# be used to specify the location of Qt's qhelpgenerator.
+# If non-empty doxygen will try to run qhelpgenerator on the generated
+# .qhp file.
+
+QHG_LOCATION =
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
+# top of each HTML page. The value NO (the default) enables the index and
+# the value YES disables it.
+
+DISABLE_INDEX = NO
+
+# This tag can be used to set the number of enum values (range [1..20])
+# that doxygen will group on one line in the generated HTML documentation.
+
+ENUM_VALUES_PER_LINE = 4
+
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
+# structure should be generated to display hierarchical information.
+# If the tag value is set to FRAME, a side panel will be generated
+# containing a tree-like index structure (just like the one that
+# is generated for HTML Help). For this to work a browser that supports
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+,
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are
+# probably better off using the HTML help feature. Other possible values
+# for this tag are: HIERARCHIES, which will generate the Groups, Directories,
+# and Class Hierarchy pages using a tree view instead of an ordered list;
+# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which
+# disables this behavior completely. For backwards compatibility with previous
+# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE
+# respectively.
+
+GENERATE_TREEVIEW = NO
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
+# used to set the initial width (in pixels) of the frame in which the tree
+# is shown.
+
+TREEVIEW_WIDTH = 250
+
+# Use this tag to change the font size of Latex formulas included
+# as images in the HTML documentation. The default is 10. Note that
+# when you change the font size after a successful doxygen run you need
+# to manually remove any form_*.png images from the HTML output directory
+# to force them to be regenerated.
+
+FORMULA_FONTSIZE = 10
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
+# generate Latex output.
+
+GENERATE_LATEX = NO
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked. If left blank `latex' will be used as the default command name.
+
+LATEX_CMD_NAME = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
+# generate index for LaTeX. If left blank `makeindex' will be used as the
+# default command name.
+
+MAKEINDEX_CMD_NAME = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
+# LaTeX documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_LATEX = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used
+# by the printer. Possible values are: a4, a4wide, letter, legal and
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE = a4wide
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
+# the generated latex document. The header should contain everything until
+# the first chapter. If it is left blank doxygen will generate a
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will
+# contain links (just like the HTML output) instead of page references
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS = YES
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
+# plain latex in the generated Makefile. Set this option to YES to get a
+# higher quality PDF documentation.
+
+USE_PDFLATEX = YES
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
+# command to the generated LaTeX files. This will instruct LaTeX to keep
+# running if errors occur, instead of asking the user for help.
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not
+# include the index chapters (such as File Index, Compound Index, etc.)
+# in the output.
+
+LATEX_HIDE_INDICES = NO
+
+# If LATEX_SOURCE_CODE is set to YES then doxygen will include
+# source code with syntax highlighting in the LaTeX output.
+# Note that which sources are shown also depends on other settings
+# such as SOURCE_BROWSER.
+
+LATEX_SOURCE_CODE = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
+# The RTF output is optimized for Word 97 and may not look very pretty with
+# other RTF readers or editors.
+
+GENERATE_RTF = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
+# RTF documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_RTF = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
+# will contain hyperlink fields. The RTF file will
+# contain links (just like the HTML output) instead of page references.
+# This makes the output suitable for online browsing using WORD or other
+# programs which support those fields.
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's
+# config file, i.e. a series of assignments. You only have to provide
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE =
+
+# Set optional variables used in the generation of an rtf document.
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
+# generate man pages
+
+GENERATE_MAN = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT = man
+
+# The MAN_EXTENSION tag determines the extension that is added to
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
+# then it will generate one additional man file for each entity
+# documented in the real man page(s). These additional files
+# only source the real man page, but without them the man command
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will
+# generate an XML file that captures the structure of
+# the code including all documentation.
+
+GENERATE_XML = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_SCHEMA =
+
+# The XML_DTD tag can be used to specify an XML DTD,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_DTD =
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
+# dump the program listings (including syntax highlighting
+# and cross-referencing information) to the XML output. Note that
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
+# generate an AutoGen Definitions (see autogen.sf.net) file
+# that captures the structure of the code including all
+# documentation. Note that this feature is still experimental
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will
+# generate a Perl module file that captures the structure of
+# the code including all documentation. Note that this
+# feature is still experimental and incomplete at the
+# moment.
+
+GENERATE_PERLMOD = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
+# nicely formatted so it can be parsed by a human reader. This is useful
+# if you want to understand what is going on. On the other hand, if this
+# tag is set to NO the size of the Perl module output will be much smaller
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY = YES
+
+# The names of the make variables in the generated doxyrules.make file
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
+# This is useful so different doxyrules.make files included by the same
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
+# evaluate all C-preprocessor directives found in the sources and include
+# files.
+
+ENABLE_PREPROCESSING = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
+# names in the source code. If set to NO (the default) only conditional
+# compilation will be performed. Macro expansion can be done in a controlled
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
+# then the macro expansion is limited to the macros specified with the
+# PREDEFINED and EXPAND_AS_DEFINED tags.
+
+EXPAND_ONLY_PREDEF = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
+# in the INCLUDE_PATH (see below) will be search if a #include is found.
+
+SEARCH_INCLUDES = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by
+# the preprocessor.
+
+INCLUDE_PATH =
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will
+# be used.
+
+INCLUDE_FILE_PATTERNS =
+
+# The PREDEFINED tag can be used to specify one or more macro names that
+# are defined before the preprocessor is started (similar to the -D option of
+# gcc). The argument of the tag is a list of macros of the form: name
+# or name=definition (no spaces). If the definition and the = are
+# omitted =1 is assumed. To prevent a macro definition from being
+# undefined via #undef or recursively expanded use the := operator
+# instead of the = operator.
+
+PREDEFINED =
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
+# this tag can be used to specify a list of macro names that should be expanded.
+# The macro definition that is found in the sources will be used.
+# Use the PREDEFINED tag if you want to use a different macro definition.
+
+EXPAND_AS_DEFINED =
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
+# doxygen's preprocessor will remove all function-like macros that are alone
+# on a line, have an all uppercase name, and do not end with a semicolon. Such
+# function macros are typically used for boiler-plate code, and will confuse
+# the parser if not removed.
+
+SKIP_FUNCTION_MACROS = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles.
+# Optionally an initial location of the external documentation
+# can be added for each tagfile. The format of a tag file without
+# this location is as follows:
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where "loc1" and "loc2" can be relative or absolute paths or
+# URLs. If a location is present for each tag, the installdox tool
+# does not have to be run to correct the links.
+# Note that each tag file must have a unique name
+# (where the name does NOT include the path)
+# If a tag file is not located in the directory in which doxygen
+# is run, you must also specify the path to the tagfile here.
+
+TAGFILES =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE =
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed
+# in the class index. If set to NO only the inherited external classes
+# will be listed.
+
+ALLEXTERNALS = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will
+# be listed.
+
+EXTERNAL_GROUPS = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
+# or super classes. Setting the tag to NO turns the diagrams off. Note that
+# this option is superseded by the HAVE_DOT option below. This is only a
+# fallback. It is recommended to install and use dot, since it yields more
+# powerful graphs.
+
+CLASS_DIAGRAMS = YES
+
+# You can define message sequence charts within doxygen comments using the \msc
+# command. Doxygen will then run the mscgen tool (see
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where
+# the mscgen tool resides. If left empty the tool is assumed to be found in the
+# default search path.
+
+MSCGEN_PATH =
+
+# If set to YES, the inheritance and collaboration graphs will hide
+# inheritance and usage relations if the target is undocumented
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz, a graph visualization
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT = NO
+
+# By default doxygen will write a font called FreeSans.ttf to the output
+# directory and reference it in all dot files that doxygen generates. This
+# font does not include all possible unicode characters however, so when you need
+# these (or just want a differently looking font) you can specify the font name
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font,
+# which can be done by putting it in a standard location or by setting the
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory
+# containing the font.
+
+DOT_FONTNAME = FreeSans
+
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs.
+# The default size is 10pt.
+
+DOT_FONTSIZE = 10
+
+# By default doxygen will tell dot to use the output directory to look for the
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a
+# different font using DOT_FONTNAME you can set the path where dot
+# can find it using this tag.
+
+DOT_FONTPATH =
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect inheritance relations. Setting this tag to YES will force the
+# the CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect implementation dependencies (inheritance, containment, and
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH = YES
+
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for groups, showing the direct groups dependencies
+
+GROUP_GRAPHS = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# Language.
+
+UML_LOOK = NO
+
+# If set to YES, the inheritance and collaboration graphs will show the
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS = NO
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
+# tags are set to YES then doxygen will generate a graph for each documented
+# file showing the direct and indirect include dependencies of the file with
+# other documented files.
+
+INCLUDE_GRAPH = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
+# documented header file showing the documented files that directly or
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH = YES
+
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then
+# doxygen will generate a call dependency graph for every global function
+# or class method. Note that enabling this option will significantly increase
+# the time of a run. So in most cases it will be better to enable call graphs
+# for selected functions only using the \callgraph command.
+
+CALL_GRAPH = NO
+
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then
+# doxygen will generate a caller dependency graph for every global function
+# or class method. Note that enabling this option will significantly increase
+# the time of a run. So in most cases it will be better to enable caller
+# graphs for selected functions only using the \callergraph command.
+
+CALLER_GRAPH = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
+# will graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY = YES
+
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES
+# then doxygen will show the dependencies a directory has on other directories
+# in a graphical way. The dependency relations are determined by the #include
+# relations between the files in the directories.
+
+DIRECTORY_GRAPH = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot. Possible values are png, jpg, or gif
+# If left blank png will be used.
+
+DOT_IMAGE_FORMAT = png
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found in the path.
+
+DOT_PATH =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the
+# \dotfile command).
+
+DOTFILE_DIRS =
+
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
+# nodes that will be shown in the graph. If the number of nodes in a graph
+# becomes larger than this value, doxygen will truncate the graph, which is
+# visualized by representing a node as a red box. Note that doxygen if the
+# number of direct children of the root node in a graph is already larger than
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+
+DOT_GRAPH_MAX_NODES = 50
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
+# graphs generated by dot. A depth value of 3 means that only nodes reachable
+# from the root by following a path via at most 3 edges will be shown. Nodes
+# that lay further from the root node will be omitted. Note that setting this
+# option to 1 or 2 may greatly reduce the computation time needed for large
+# code bases. Also note that the size of a graph can be further restricted by
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+
+MAX_DOT_GRAPH_DEPTH = 0
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
+# background. This is disabled by default, because dot on Windows does not
+# seem to support this out of the box. Warning: Depending on the platform used,
+# enabling this option may lead to badly anti-aliased labels on the edges of
+# a graph (i.e. they become hard to read).
+
+DOT_TRANSPARENT = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
+# files in one run (i.e. multiple -o and -T options on the command line). This
+# makes dot run faster, but since only newer versions of dot (>1.8.10)
+# support this, this feature is disabled by default.
+
+DOT_MULTI_TARGETS = NO
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
+# generate a legend page explaining the meaning of the various boxes and
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
+# remove the intermediate dot files that are used to generate
+# the various graphs.
+
+DOT_CLEANUP = YES
+
+#---------------------------------------------------------------------------
+# Options related to the search engine
+#---------------------------------------------------------------------------
+
+# The SEARCHENGINE tag specifies whether or not a search engine should be
+# used. If set to NO the values of all tags below this one will be ignored.
+
+SEARCHENGINE = NO
// LordHavoc: 256 dynamic lights
#define MAX_DLIGHTS 256
-// this is the maximum number of input packets that can be predicted
+/// this is the maximum number of input packets that can be predicted
#define CL_MAX_USERCMDS 256
// flags for rtlight rendering
// note that the world to light matrices are inversely scaled (divided) by lightradius
// core properties
- // matrix for transforming light filter coordinates to world coordinates
+ /// matrix for transforming light filter coordinates to world coordinates
matrix4x4_t matrix_lighttoworld;
- // matrix for transforming world coordinates to light filter coordinates
+ /// matrix for transforming world coordinates to light filter coordinates
matrix4x4_t matrix_worldtolight;
- // typically 1 1 1, can be lower (dim) or higher (overbright)
+ /// typically 1 1 1, can be lower (dim) or higher (overbright)
vec3_t color;
- // size of the light (remove?)
+ /// size of the light (remove?)
vec_t radius;
- // light filter
+ /// light filter
char cubemapname[64];
- // light style to monitor for brightness
+ /// light style to monitor for brightness
int style;
- // whether light should render shadows
+ /// whether light should render shadows
int shadow;
- // intensity of corona to render
+ /// intensity of corona to render
vec_t corona;
- // radius scale of corona to render (1.0 means same as light radius)
+ /// radius scale of corona to render (1.0 means same as light radius)
vec_t coronasizescale;
- // ambient intensity to render
+ /// ambient intensity to render
vec_t ambientscale;
- // diffuse intensity to render
+ /// diffuse intensity to render
vec_t diffusescale;
- // specular intensity to render
+ /// specular intensity to render
vec_t specularscale;
- // LIGHTFLAG_* flags
+ /// LIGHTFLAG_* flags
int flags;
// generated properties
- // used only for shadow volumes
+ /// used only for shadow volumes
vec3_t shadoworigin;
- // culling
+ /// culling
vec3_t cullmins;
vec3_t cullmaxs;
// culling
// rendering properties, updated each time a light is rendered
// this is rtlight->color * d_lightstylevalue
vec3_t currentcolor;
- // used by corona updates, due to occlusion query
+ /// used by corona updates, due to occlusion query
float corona_visibility;
unsigned int corona_queryindex_visiblepixels;
unsigned int corona_queryindex_allpixels;
- // this is R_Shadow_Cubemap(rtlight->cubemapname)
+ /// this is R_Shadow_Cubemap(rtlight->cubemapname)
rtexture_t *currentcubemap;
- // static light info
- // true if this light should be compiled as a static light
+ /// static light info
+ /// true if this light should be compiled as a static light
int isstatic;
- // true if this is a compiled world light, cleared if the light changes
+ /// true if this is a compiled world light, cleared if the light changes
int compiled;
- // premade shadow volumes to render for world entity
+ /// premade shadow volumes to render for world entity
shadowmesh_t *static_meshchain_shadow_zpass;
shadowmesh_t *static_meshchain_shadow_zfail;
- // used for visibility testing (more exact than bbox)
+ /// used for visibility testing (more exact than bbox)
int static_numleafs;
int static_numleafpvsbytes;
int *static_leaflist;
unsigned char *static_leafpvs;
- // surfaces seen by light
+ /// surfaces seen by light
int static_numsurfaces;
int *static_surfacelist;
- // flag bits indicating which triangles of the world model should cast
- // shadows, and which ones should be lit
- //
- // this avoids redundantly scanning the triangles in each surface twice
- // for whether they should cast shadows, once in culling and once in the
- // actual shadowmarklist production.
+ /// flag bits indicating which triangles of the world model should cast
+ /// shadows, and which ones should be lit
+ ///
+ /// this avoids redundantly scanning the triangles in each surface twice
+ /// for whether they should cast shadows, once in culling and once in the
+ /// actual shadowmarklist production.
int static_numshadowtrispvsbytes;
unsigned char *static_shadowtrispvs;
- // this allows the lighting batch code to skip backfaces andother culled
- // triangles not relevant for lighting
- // (important on big surfaces such as terrain)
+ /// this allows the lighting batch code to skip backfaces andother culled
+ /// triangles not relevant for lighting
+ /// (important on big surfaces such as terrain)
int static_numlighttrispvsbytes;
unsigned char *static_lighttrispvs;
}
#ifndef CMD_H
#define CMD_H
+/// allocates an initial text buffer that will grow as needed
void Cbuf_Init (void);
-// allocates an initial text buffer that will grow as needed
void Cmd_Init_Commands (void);
void Cbuf_Shutdown (void);
+/*! as new commands are generated from the console or keybindings,
+ * the text is added to the end of the command buffer.
+ */
void Cbuf_AddText (const char *text);
-// as new commands are generated from the console or keybindings,
-// the text is added to the end of the command buffer.
+/*! when a command wants to issue other commands immediately, the text is
+ * inserted at the beginning of the buffer, before any remaining unexecuted
+ * commands.
+ */
void Cbuf_InsertText (const char *text);
-// when a command wants to issue other commands immediately, the text is
-// inserted at the beginning of the buffer, before any remaining unexecuted
-// commands.
+/*! Pulls off terminated lines of text from the command buffer and sends
+ * them through Cmd_ExecuteString. Stops when the buffer is empty.
+ * Normally called once per frame, but may be explicitly invoked.
+ * \note Do not call inside a command function!
+ */
void Cbuf_Execute (void);
-// Pulls off \n terminated lines of text from the command buffer and sends
-// them through Cmd_ExecuteString. Stops when the buffer is empty.
-// Normally called once per frame, but may be explicitly invoked.
-// Do not call inside a command function!
//===========================================================================
typedef enum
{
- src_client, // came in over a net connection as a clc_stringcmd
- // host_client will be valid during this state.
- src_command // from the command buffer
+ src_client, ///< came in over a net connection as a clc_stringcmd
+ ///< host_client will be valid during this state.
+ src_command ///< from the command buffer
} cmd_source_t;
extern cmd_source_t cmd_source;
// register commands and functions to call for them.
// The cmd_name is referenced later, so it should not be in temp memory
+/// used by the cvar code to check for cvar / command name overlap
qboolean Cmd_Exists (const char *cmd_name);
-// used by the cvar code to check for cvar / command name overlap
+/// attempts to match a partial command for automatic command line completion
+/// returns NULL if nothing fits
const char *Cmd_CompleteCommand (const char *partial);
-// attempts to match a partial command for automatic command line completion
-// returns NULL if nothing fits
int Cmd_CompleteAliasCountPossible (const char *partial);
// functions. Cmd_Argv () will return an empty string, not a NULL
// if arg > argc, so string operations are always safe.
+/// Returns the position (1 to argc-1) in the command's argument list
+/// where the given parameter apears, or 0 if not present
int Cmd_CheckParm (const char *parm);
-// Returns the position (1 to argc-1) in the command's argument list
-// where the given parameter apears, or 0 if not present
//void Cmd_TokenizeString (char *text);
// Takes a null terminated string. Does not need to be /n terminated.
// breaks the string up into arg tokens.
+/// Parses a single line of text into arguments and tries to execute it.
+/// The text can come from the command buffer, a remote client, or stdin.
void Cmd_ExecuteString (const char *text, cmd_source_t src);
-// Parses a single line of text into arguments and tries to execute it.
-// The text can come from the command buffer, a remote client, or stdin.
+/// adds the string as a clc_stringcmd to the client message.
+/// (used when there is no reason to generate a local command to do it)
void Cmd_ForwardStringToServer (const char *s);
-// adds the string as a clc_stringcmd to the client message.
-// (used when there is no reason to generate a local command to do it)
+/// adds the current command line as a clc_stringcmd to the client message.
+/// things like godmode, noclip, etc, are commands directed to the server,
+/// so when they are typed in at the console, they will need to be forwarded.
void Cmd_ForwardToServer (void);
-// adds the current command line as a clc_stringcmd to the client message.
-// things like godmode, noclip, etc, are commands directed to the server,
-// so when they are typed in at the console, they will need to be forwarded.
+/// used by command functions to send output to either the graphics console or
+/// passed as a print message to the client
void Cmd_Print(const char *text);
-// used by command functions to send output to either the graphics console or
-// passed as a print message to the client
+/// quotes a string so that it can be used as a command argument again;
+/// quoteset is a string that contains one or more of ", \, $ and specifies
+/// the characters to be quoted (you usually want to either pass "\"\\" or
+/// "\"\\$"). Returns true on success, and false on overrun (in which case out
+/// will contain a part of the quoted string).
qboolean Cmd_QuoteString(char *out, size_t outlen, const char *in, const char *quoteset);
-// quotes a string so that it can be used as a command argument again;
-// quoteset is a string that contains one or more of ", \, $ and specifies
-// the characters to be quoted (you usually want to either pass "\"\\" or
-// "\"\\$"). Returns true on success, and false on overrun (in which case out
-// will contain a part of the quoted string).
#endif
#ifndef COMMON_H
#define COMMON_H
-// many buffers use this size
+/// many buffers use this size
#define MAX_INPUTLINE 16384
-// MSVC has a different name for several standard functions
+/// MSVC has a different name for several standard functions
#ifdef WIN32
# define strcasecmp _stricmp
# define strncasecmp _strnicmp
#endif
#ifdef SUNOS
-#include <sys/file.h> // Needed for FNDELAY
+#include <sys/file.h> ///< Needed for FNDELAY
#endif
//============================================================================
typedef struct sizebuf_s
{
- qboolean allowoverflow; // if false, do a Sys_Error
- qboolean overflowed; // set to true if the buffer size failed
+ qboolean allowoverflow; ///< if false, do a Sys_Error
+ qboolean overflowed; ///< set to true if the buffer size failed
unsigned char *data;
int maxsize;
int cursize;
# endif
#endif
+/*! \name Byte order functions.
+ * @{
+ */
+/// Swaps the byte order of the given short \p l.
short ShortSwap (short l);
+
+/// Swaps the byte order of the given long \p l.
int LongSwap (int l);
+
+/// Swaps the byte order of the given float \p f.
float FloatSwap (float f);
#if BYTE_ORDER == LITTLE_ENDIAN
#define LittleFloat(l) FloatSwap(l)
#endif
+/// Extract a big endian long from the given \p buffer.
unsigned int BuffBigLong (const unsigned char *buffer);
+
+/// Extract a big endian short from the given \p buffer.
unsigned short BuffBigShort (const unsigned char *buffer);
+
+/// Extract a little endian long from the given \p buffer.
unsigned int BuffLittleLong (const unsigned char *buffer);
-unsigned short BuffLittleShort (const unsigned char *buffer);
+/// Extract a little endian short from the given \p buffer.
+unsigned short BuffLittleShort (const unsigned char *buffer);
+//@}
//============================================================================
typedef enum protocolversion_e
{
PROTOCOL_UNKNOWN,
- PROTOCOL_DARKPLACES7, // added QuakeWorld-style movement protocol to allow more consistent prediction
- PROTOCOL_DARKPLACES6, // various changes
- PROTOCOL_DARKPLACES5, // uses EntityFrame5 entity snapshot encoder/decoder which is based on a Tribes networking article at http://www.garagegames.com/articles/networking1/
- PROTOCOL_DARKPLACES4, // various changes
- PROTOCOL_DARKPLACES3, // uses EntityFrame4 entity snapshot encoder/decoder which is broken, this attempted to do partial snapshot updates on a QuakeWorld-like protocol, but it is broken and impossible to fix
- PROTOCOL_DARKPLACES2, // various changes
- PROTOCOL_DARKPLACES1, // uses EntityFrame entity snapshot encoder/decoder which is a QuakeWorld-like entity snapshot delta compression method
- PROTOCOL_QUAKEDP, // darkplaces extended quake protocol (used by TomazQuake and others), backwards compatible as long as no extended features are used
- PROTOCOL_NEHAHRAMOVIE, // Nehahra movie protocol, a big nasty hack dating back to early days of the Quake Standards Group (but only ever used by neh_gl.exe), this is potentially backwards compatible with quake protocol as long as no extended features are used (but in actuality the neh_gl.exe which wrote this protocol ALWAYS wrote the extended information)
- PROTOCOL_QUAKE, // quake (aka netquake/normalquake/nq) protocol
- PROTOCOL_QUAKEWORLD, // quakeworld protocol
- PROTOCOL_NEHAHRABJP, // same as QUAKEDP but with 16bit modelindex
- PROTOCOL_NEHAHRABJP2, // same as NEHAHRABJP but with 16bit soundindex
- PROTOCOL_NEHAHRABJP3, // same as NEHAHRABJP2 but with some changes
+ PROTOCOL_DARKPLACES7, ///< added QuakeWorld-style movement protocol to allow more consistent prediction
+ PROTOCOL_DARKPLACES6, ///< various changes
+ PROTOCOL_DARKPLACES5, ///< uses EntityFrame5 entity snapshot encoder/decoder which is based on a Tribes networking article at http://www.garagegames.com/articles/networking1/
+ PROTOCOL_DARKPLACES4, ///< various changes
+ PROTOCOL_DARKPLACES3, ///< uses EntityFrame4 entity snapshot encoder/decoder which is broken, this attempted to do partial snapshot updates on a QuakeWorld-like protocol, but it is broken and impossible to fix
+ PROTOCOL_DARKPLACES2, ///< various changes
+ PROTOCOL_DARKPLACES1, ///< uses EntityFrame entity snapshot encoder/decoder which is a QuakeWorld-like entity snapshot delta compression method
+ PROTOCOL_QUAKEDP, ///< darkplaces extended quake protocol (used by TomazQuake and others), backwards compatible as long as no extended features are used
+ PROTOCOL_NEHAHRAMOVIE, ///< Nehahra movie protocol, a big nasty hack dating back to early days of the Quake Standards Group (but only ever used by neh_gl.exe), this is potentially backwards compatible with quake protocol as long as no extended features are used (but in actuality the neh_gl.exe which wrote this protocol ALWAYS wrote the extended information)
+ PROTOCOL_QUAKE, ///< quake (aka netquake/normalquake/nq) protocol
+ PROTOCOL_QUAKEWORLD, ///< quakeworld protocol
+ PROTOCOL_NEHAHRABJP, ///< same as QUAKEDP but with 16bit modelindex
+ PROTOCOL_NEHAHRABJP2, ///< same as NEHAHRABJP but with 16bit soundindex
+ PROTOCOL_NEHAHRABJP3, ///< same as NEHAHRABJP2 but with some changes
}
protocolversion_t;
+/*! \name Message IO functions.
+ * Handles byte ordering and avoids alignment errors
+ * @{
+ */
+
void MSG_WriteChar (sizebuf_t *sb, int c);
void MSG_WriteByte (sizebuf_t *sb, int c);
void MSG_WriteShort (sizebuf_t *sb, int c);
float MSG_ReadCoord (protocolversion_t protocol);
void MSG_ReadVector (float *v, protocolversion_t protocol);
float MSG_ReadAngle (protocolversion_t protocol);
-
+//@}
//============================================================================
typedef float (*COM_WordWidthFunc_t) (void *passthrough, const char *w, size_t *length, float maxWidth); // length is updated to the longest fitting string into maxWidth; if maxWidth < 0, all characters are used and length is used as is
typedef struct stringlist_s
{
- // maxstrings changes as needed, causing reallocation of strings[] array
+ /// maxstrings changes as needed, causing reallocation of strings[] array
int maxstrings;
int numstrings;
char **strings;
#endif
#ifndef HAVE_STRLCAT
-/*
+/*!
* Appends src to string dst of size siz (unlike strncat, siz is the
* full size of dst, not space left). At most siz-1 characters
* will be copied. Always NUL terminates (unless siz <= strlen(dst)).
#endif // #ifndef HAVE_STRLCAT
#ifndef HAVE_STRLCPY
-/*
+/*!
* Copy src to string dst of size siz. At most siz-1 characters
* will be copied. Always NUL terminates (unless siz == 0).
* Returns strlen(src); if retval >= siz, truncation occurred.
==============================================================================
*/
+/// \name Logging
+//@{
cvar_t log_file = {0, "log_file","", "filename to log messages to"};
cvar_t log_dest_udp = {0, "log_dest_udp","", "UDP address to log messages to (in QW rcon compatible format); multiple destinations can be separated by spaces; DO NOT SPECIFY DNS NAMES HERE"};
char log_dest_buffer[1400]; // UDP packet
size_t logq_size = 0;
void Log_ConPrint (const char *msg);
-
+//@}
/*
====================
Log_DestBuffer_Init
/*
================
Con_ClearNotify
-
-Clear all notify lines.
================
*/
void Con_ClearNotify (void)
/*
================
Con_CheckResize
-
-If the line width has changed, reformat the buffer.
================
*/
void Con_CheckResize (void)
}
}
-/* The translation table between the graphical font and plain ASCII --KB */
+/*! The translation table between the graphical font and plain ASCII --KB */
static char qfont_table[256] = {
'\0', '#', '#', '#', '#', '.', '#', '#',
'#', 9, 10, '#', ' ', 13, '.', '.',
/*
================
Con_Rcon_AddChar
-
-Adds a character to the rcon buffer
================
*/
+/// Adds a character to the rcon buffer.
void Con_Rcon_AddChar(int c)
{
if(log_dest_buffer_appending)
/*
================
Con_Print
-
-Prints to all appropriate console targets, and adds timestamps
================
*/
extern cvar_t timestamps;
/*
================
Con_Printf
-
-Prints to all appropriate console targets
================
*/
void Con_Printf(const char *fmt, ...)
/*
================
Con_DPrint
-
-A Con_Print that only shows up if the "developer" cvar is set
================
*/
void Con_DPrint(const char *msg)
/*
================
Con_DPrintf
-
-A Con_Printf that only shows up if the "developer" cvar is set
================
*/
void Con_DPrintf(const char *fmt, ...)
void Con_Rcon_Redirect_End();
void Con_Rcon_Redirect_Abort();
+/// If the line width has changed, reformat the buffer.
void Con_CheckResize (void);
void Con_Init (void);
void Con_Init_Commands (void);
void Con_Shutdown (void);
void Con_DrawConsole (int lines);
+
+/// Prints to all appropriate console targets, and adds timestamps
void Con_Print(const char *txt);
+
+/// Prints to all appropriate console targets.
void Con_Printf(const char *fmt, ...) DP_FUNC_PRINTF(1);
+
+/// A Con_Print that only shows up if the "developer" cvar is set.
void Con_DPrint(const char *msg);
+
+/// A Con_Printf that only shows up if the "developer" cvar is set
void Con_DPrintf(const char *fmt, ...) DP_FUNC_PRINTF(1);
void Con_Clear_f (void);
void Con_DrawNotify (void);
+
+/// Clear all notify lines.
void Con_ClearNotify (void);
void Con_ToggleConsole_f (void);
qboolean GetMapList (const char *s, char *completedname, int completednamebufferlength);
-// wrapper function to attempt to either complete the command line
-// or to list possible matches grouped by type
-// (i.e. will display possible variables, aliases, commands
-// that match what they've typed so far)
+/// wrapper function to attempt to either complete the command line
+/// or to list possible matches grouped by type
+/// (i.e. will display possible variables, aliases, commands
+/// that match what they've typed so far)
void Con_CompleteCommandLine(void);
-// Generic libs/util/console.c function to display a list
-// formatted in columns on the console
+/// Generic libs/util/console.c function to display a list
+/// formatted in columns on the console
void Con_DisplayList(const char **list);
-//
-// log
-//
+/*! \name log
+ * @{
+ */
void Log_Init (void);
void Log_Close (void);
void Log_Start (void);
-void Log_DestBuffer_Flush (void); // call this once per frame to send out replies to rcon streaming clients
+void Log_DestBuffer_Flush (void); ///< call this once per frame to send out replies to rcon streaming clients
void Log_Printf(const char *logfilename, const char *fmt, ...) DP_FUNC_PRINTF(2);
+//@}
#define CON_MASK_HIDENOTIFY 128
#define CON_MASK_CHAT 1
size_t len;
int mask;
- // used only by console.c
+ /// used only by console.c
double addtime;
- int height; // recalculated line height when needed (-1 to unset)
+ int height; ///< recalculated line height when needed (-1 to unset)
}
con_lineinfo_t;
int maxlines;
con_lineinfo_t *lines;
int lines_first;
- int lines_count; // cyclic buffer
+ int lines_count; ///< cyclic buffer
}
conbuffer_t;
void ConBuffer_Init(conbuffer_t *buf, int textsize, int maxlines, mempool_t *mempool);
void ConBuffer_Clear (conbuffer_t *buf);
void ConBuffer_Shutdown(conbuffer_t *buf);
+
+/*! Notifies the console code about the current time
+ * (and shifts back times of other entries when the time
+ * went backwards)
+ */
void ConBuffer_FixTimes(conbuffer_t *buf);
+
+/// Deletes the first line from the console history.
void ConBuffer_DeleteLine(conbuffer_t *buf);
+
+/// Deletes the last line from the console history.
void ConBuffer_DeleteLastLine(conbuffer_t *buf);
+
+/// Appends a given string as a new line to the console.
void ConBuffer_AddLine(conbuffer_t *buf, const char *line, int len, int mask);
int ConBuffer_FindPrevLine(conbuffer_t *buf, int mask_must, int mask_mustnot, int start);
int ConBuffer_FindNextLine(conbuffer_t *buf, int mask_must, int mask_mustnot, int start);
void Cvar_MenuOption(cvar_t *variable, int menu, int value[16], const char *name[16]);
*/
+/// registers a cvar that already has the name, string, and optionally the
+/// archive elements set.
void Cvar_RegisterVariable (cvar_t *variable);
-// registers a cvar that already has the name, string, and optionally the
-// archive elements set.
+/// equivelant to "<name> <variable>" typed at the console
void Cvar_Set (const char *var_name, const char *value);
-// equivelant to "<name> <variable>" typed at the console
+/// expands value to a string and calls Cvar_Set
void Cvar_SetValue (const char *var_name, float value);
-// expands value to a string and calls Cvar_Set
void Cvar_SetQuick (cvar_t *var, const char *value);
void Cvar_SetValueQuick (cvar_t *var, float value);
// Thanks to Fett erich@heintz.com
// Thanks to taniwha
+/// Prints a list of Cvars including a count of them to the user console
+/// Referenced in cmd.c in Cmd_Init hence it's inclusion here.
+/// Added by EvilTypeGuy eviltypeguy@qeradiant.com
+/// Thanks to Matthias "Maddes" Buecher, http://www.inside3d.com/qip/
void Cvar_List_f (void);
-// Prints a list of Cvars including a count of them to the user console
-// Referenced in cmd.c in Cmd_Init hence it's inclusion here
-// Added by EvilTypeGuy eviltypeguy@qeradiant.com
-// Thanks to Matthias "Maddes" Buecher, http://www.inside3d.com/qip/
void Cvar_Set_f (void);
void Cvar_SetA_f (void);
// commands to create new cvars (or set existing ones)
// seta creates an archived cvar (saved to config)
+/// allocates a cvar by name and returns its address,
+/// or merely sets its value if it already exists.
cvar_t *Cvar_Get (const char *name, const char *value, int flags, const char *newdescription);
-// allocates a cvar by name and returns its address,
-// or merely sets its value if it already exists.
extern char *cvar_dummy_description; // ALWAYS the same pointer
extern cvar_t *cvar_vars; // used to list all cvars
# define dup _dup
#endif
-/*
+/** \page fs File System
All of Quake's data access is through a hierchal file system, but the contents
of the file system can be transparently merged from several sources.
=============================================================================
*/
-// Zlib stream (from zlib.h)
-// Warning: some pointers we don't use directly have
-// been cast to "void*" for a matter of simplicity
+/*! Zlib stream (from zlib.h)
+ * \warning: some pointers we don't use directly have
+ * been cast to "void*" for a matter of simplicity
+ */
typedef struct
{
- unsigned char *next_in; // next input byte
- unsigned int avail_in; // number of bytes available at next_in
- unsigned long total_in; // total nb of input bytes read so far
+ unsigned char *next_in; ///< next input byte
+ unsigned int avail_in; ///< number of bytes available at next_in
+ unsigned long total_in; ///< total nb of input bytes read so far
- unsigned char *next_out; // next output byte should be put there
- unsigned int avail_out; // remaining free space at next_out
- unsigned long total_out; // total nb of bytes output so far
+ unsigned char *next_out; ///< next output byte should be put there
+ unsigned int avail_out; ///< remaining free space at next_out
+ unsigned long total_out; ///< total nb of bytes output so far
- char *msg; // last error message, NULL if no error
- void *state; // not visible by applications
+ char *msg; ///< last error message, NULL if no error
+ void *state; ///< not visible by applications
- void *zalloc; // used to allocate the internal state
- void *zfree; // used to free the internal state
- void *opaque; // private data object passed to zalloc and zfree
+ void *zalloc; ///< used to allocate the internal state
+ void *zfree; ///< used to free the internal state
+ void *opaque; ///< private data object passed to zalloc and zfree
- int data_type; // best guess about the data type: ascii or binary
- unsigned long adler; // adler32 value of the uncompressed data
- unsigned long reserved; // reserved for future use
+ int data_type; ///< best guess about the data type: ascii or binary
+ unsigned long adler; ///< adler32 value of the uncompressed data
+ unsigned long reserved; ///< reserved for future use
} z_stream;
-// inside a package (PAK or PK3)
+/// inside a package (PAK or PK3)
#define QFILE_FLAG_PACKED (1 << 0)
-// file is compressed using the deflate algorithm (PK3 only)
+/// file is compressed using the deflate algorithm (PK3 only)
#define QFILE_FLAG_DEFLATED (1 << 1)
-// file is actually already loaded data
+/// file is actually already loaded data
#define QFILE_FLAG_DATA (1 << 2)
#define FILE_BUFF_SIZE 2048
typedef struct
{
z_stream zstream;
- size_t comp_length; // length of the compressed file
- size_t in_ind, in_len; // input buffer current index and length
- size_t in_position; // position in the compressed file
+ size_t comp_length; ///< length of the compressed file
+ size_t in_ind, in_len; ///< input buffer current index and length
+ size_t in_position; ///< position in the compressed file
unsigned char input [FILE_BUFF_SIZE];
} ztoolkit_t;
struct qfile_s
{
int flags;
- int handle; // file descriptor
- fs_offset_t real_length; // uncompressed file size (for files opened in "read" mode)
- fs_offset_t position; // current position in the file
- fs_offset_t offset; // offset into the package (0 if external file)
- int ungetc; // single stored character from ungetc, cleared to EOF when read
+ int handle; ///< file descriptor
+ fs_offset_t real_length; ///< uncompressed file size (for files opened in "read" mode)
+ fs_offset_t position; ///< current position in the file
+ fs_offset_t offset; ///< offset into the package (0 if external file)
+ int ungetc; ///< single stored character from ungetc, cleared to EOF when read
// Contents buffer
- fs_offset_t buff_ind, buff_len; // buffer current index and length
+ fs_offset_t buff_ind, buff_len; ///< buffer current index and length
unsigned char buff [FILE_BUFF_SIZE];
- // For zipped files
- ztoolkit_t* ztk;
+ ztoolkit_t* ztk; ///< For zipped files.
- // for data files
- const unsigned char *data;
+ const unsigned char *data; ///< For data files.
};
{
unsigned int signature;
unsigned short disknum;
- unsigned short cdir_disknum; // number of the disk with the start of the central directory
- unsigned short localentries; // number of entries in the central directory on this disk
- unsigned short nbentries; // total number of entries in the central directory on this disk
- unsigned int cdir_size; // size of the central directory
- unsigned int cdir_offset; // with respect to the starting disk number
+ unsigned short cdir_disknum; ///< number of the disk with the start of the central directory
+ unsigned short localentries; ///< number of entries in the central directory on this disk
+ unsigned short nbentries; ///< total number of entries in the central directory on this disk
+ unsigned int cdir_size; ///< size of the central directory
+ unsigned int cdir_offset; ///< with respect to the starting disk number
unsigned short comment_size;
} pk3_endOfCentralDir_t;
} dpackheader_t;
-// Packages in memory
-// the offset in packfile_t is the true contents offset
+/*! \name Packages in memory
+ * @{
+ */
+/// the offset in packfile_t is the true contents offset
#define PACKFILE_FLAG_TRUEOFFS (1 << 0)
-// file compressed using the deflate algorithm
+/// file compressed using the deflate algorithm
#define PACKFILE_FLAG_DEFLATED (1 << 1)
-// file is a symbolic link
+/// file is a symbolic link
#define PACKFILE_FLAG_SYMLINK (1 << 2)
typedef struct packfile_s
char name [MAX_QPATH];
int flags;
fs_offset_t offset;
- fs_offset_t packsize; // size in the package
- fs_offset_t realsize; // real file size (uncompressed)
+ fs_offset_t packsize; ///< size in the package
+ fs_offset_t realsize; ///< real file size (uncompressed)
} packfile_t;
typedef struct pack_s
char filename [MAX_OSPATH];
char shortname [MAX_QPATH];
int handle;
- int ignorecase; // PK3 ignores case
+ int ignorecase; ///< PK3 ignores case
int numfiles;
packfile_t *files;
} pack_t;
+//@}
-
-// Search paths for files (including packages)
+/// Search paths for files (including packages)
typedef struct searchpath_s
{
// only one of filename / pack will be used
{NULL, NULL}
};
-// Handle for Zlib DLL
+/// Handle for Zlib DLL
static dllhandle_t zlib_dll = NULL;
#ifdef WIN32
/*
=================
FS_LoadPackPAK
-
-Takes an explicit (not game tree related) path to a pak file.
-
-Loads the header and directory, adding the files at the beginning
-of the list so they override previous pack files.
=================
*/
+/*! Takes an explicit (not game tree related) path to a pak file.
+ *Loads the header and directory, adding the files at the beginning
+ *of the list so they override previous pack files.
+ */
pack_t *FS_LoadPackPAK (const char *packfile)
{
dpackheader_t header;
/*
================
FS_AddPack_Fullpath
-
-Adds the given pack to the search path.
-The pack type is autodetected by the file extension.
-
-Returns true if the file was successfully added to the
-search path or if it was already included.
-
-If keep_plain_dirs is set, the pack will be added AFTER the first sequence of
-plain directories.
================
*/
+/*! Adds the given pack to the search path.
+ * The pack type is autodetected by the file extension.
+ *
+ * Returns true if the file was successfully added to the
+ * search path or if it was already included.
+ *
+ * If keep_plain_dirs is set, the pack will be added AFTER the first sequence of
+ * plain directories.
+ *
+ */
static qboolean FS_AddPack_Fullpath(const char *pakfile, const char *shortname, qboolean *already_loaded, qboolean keep_plain_dirs)
{
searchpath_t *search;
/*
================
FS_AddPack
-
-Adds the given pack to the search path and searches for it in the game path.
-The pack type is autodetected by the file extension.
-
-Returns true if the file was successfully added to the
-search path or if it was already included.
-
-If keep_plain_dirs is set, the pack will be added AFTER the first sequence of
-plain directories.
================
*/
+/*! Adds the given pack to the search path and searches for it in the game path.
+ * The pack type is autodetected by the file extension.
+ *
+ * Returns true if the file was successfully added to the
+ * search path or if it was already included.
+ *
+ * If keep_plain_dirs is set, the pack will be added AFTER the first sequence of
+ * plain directories.
+ */
qboolean FS_AddPack(const char *pakfile, qboolean *already_loaded, qboolean keep_plain_dirs)
{
char fullpath[MAX_QPATH];
#ifdef WIN32
//typedef long fs_offset_t; // 32bit
-typedef __int64 fs_offset_t; // 64bit (lots of warnings, and read/write still don't take 64bit on win64)
+typedef __int64 fs_offset_t; ///< 64bit (lots of warnings, and read/write still don't take 64bit on win64)
#else
typedef long long fs_offset_t;
#endif
R_Mesh_Draw(0, 4, 0, 2, NULL, polygonelements, 0, 0);
}
-// color tag printing
+/// color tag printing
static const vec4_t string_colors[] =
{
// Quake3 colors
mempool_t *r_main_mempool;
rtexturepool_t *r_main_texturepool;
-static int r_frame = 0; // used only by R_GetCurrentTexture
+static int r_frame = 0; ///< used only by R_GetCurrentTexture
//
// screen size info
int bloomwidth, bloomheight;
int screentexturewidth, screentextureheight;
- rtexture_t *texture_screen; // also used for motion blur if enabled!
+ rtexture_t *texture_screen; /// \note also used for motion blur if enabled!
int bloomtexturewidth, bloomtextureheight;
rtexture_t *texture_bloom;
r_waterstate_t r_waterstate;
-// shadow volume bsp struct with automatically growing nodes buffer
+/// shadow volume bsp struct with automatically growing nodes buffer
svbsp_t r_svbsp;
rtexture_t *r_texture_blanknormalmap;
char r_qwskincache[MAX_SCOREBOARD][MAX_QPATH];
skinframe_t *r_qwskincache_skinframe[MAX_SCOREBOARD];
-// vertex coordinates for a quad that covers the screen exactly
+/// vertex coordinates for a quad that covers the screen exactly
const static float r_screenvertex3f[12] =
{
0, 0, 0,
typedef enum shaderpermutation_e
{
- SHADERPERMUTATION_DIFFUSE = 1<<0, // (lightsource) whether to use directional shading
- SHADERPERMUTATION_VERTEXTEXTUREBLEND = 1<<1, // indicates this is a two-layer material blend based on vertex alpha (q3bsp)
- SHADERPERMUTATION_COLORMAPPING = 1<<2, // indicates this is a colormapped skin
- SHADERPERMUTATION_CONTRASTBOOST = 1<<3, // r_glsl_contrastboost boosts the contrast at low color levels (similar to gamma)
- SHADERPERMUTATION_FOG = 1<<4, // tint the color by fog color or black if using additive blend mode
- SHADERPERMUTATION_CUBEFILTER = 1<<5, // (lightsource) use cubemap light filter
- SHADERPERMUTATION_GLOW = 1<<6, // (lightmap) blend in an additive glow texture
- SHADERPERMUTATION_SPECULAR = 1<<7, // (lightsource or deluxemapping) render specular effects
- SHADERPERMUTATION_EXACTSPECULARMATH = 1<<8, // (lightsource or deluxemapping) use exact reflection map for specular effects, as opposed to the usual OpenGL approximation
- SHADERPERMUTATION_REFLECTION = 1<<9, // normalmap-perturbed reflection of the scene infront of the surface, preformed as an overlay on the surface
- SHADERPERMUTATION_OFFSETMAPPING = 1<<10, // adjust texcoords to roughly simulate a displacement mapped surface
- SHADERPERMUTATION_OFFSETMAPPING_RELIEFMAPPING = 1<<11, // adjust texcoords to accurately simulate a displacement mapped surface (requires OFFSETMAPPING to also be set!)
- SHADERPERMUTATION_GAMMARAMPS = 1<<12, // gamma (postprocessing only)
- SHADERPERMUTATION_POSTPROCESSING = 1<<13, // user defined postprocessing
- SHADERPERMUTATION_SATURATION = 1<<14, // user defined postprocessing
- SHADERPERMUTATION_LIMIT = 1<<15, // size of permutations array
- SHADERPERMUTATION_COUNT = 15 // size of shaderpermutationinfo array
+ SHADERPERMUTATION_DIFFUSE = 1<<0, ///< (lightsource) whether to use directional shading
+ SHADERPERMUTATION_VERTEXTEXTUREBLEND = 1<<1, ///< indicates this is a two-layer material blend based on vertex alpha (q3bsp)
+ SHADERPERMUTATION_COLORMAPPING = 1<<2, ///< indicates this is a colormapped skin
+ SHADERPERMUTATION_CONTRASTBOOST = 1<<3, ///< r_glsl_contrastboost boosts the contrast at low color levels (similar to gamma)
+ SHADERPERMUTATION_FOG = 1<<4, ///< tint the color by fog color or black if using additive blend mode
+ SHADERPERMUTATION_CUBEFILTER = 1<<5, ///< (lightsource) use cubemap light filter
+ SHADERPERMUTATION_GLOW = 1<<6, ///< (lightmap) blend in an additive glow texture
+ SHADERPERMUTATION_SPECULAR = 1<<7, ///< (lightsource or deluxemapping) render specular effects
+ SHADERPERMUTATION_EXACTSPECULARMATH = 1<<8, ///< (lightsource or deluxemapping) use exact reflection map for specular effects, as opposed to the usual OpenGL approximation
+ SHADERPERMUTATION_REFLECTION = 1<<9, ///< normalmap-perturbed reflection of the scene infront of the surface, preformed as an overlay on the surface
+ SHADERPERMUTATION_OFFSETMAPPING = 1<<10, ///< adjust texcoords to roughly simulate a displacement mapped surface
+ SHADERPERMUTATION_OFFSETMAPPING_RELIEFMAPPING = 1<<11, ///< adjust texcoords to accurately simulate a displacement mapped surface (requires OFFSETMAPPING to also be set!)
+ SHADERPERMUTATION_GAMMARAMPS = 1<<12, ///< gamma (postprocessing only)
+ SHADERPERMUTATION_POSTPROCESSING = 1<<13, ///< user defined postprocessing
+ SHADERPERMUTATION_SATURATION = 1<<14, ///< user defined postprocessing
+ SHADERPERMUTATION_LIMIT = 1<<15, ///< size of permutations array
+ SHADERPERMUTATION_COUNT = 15 ///< size of shaderpermutationinfo array
}
shaderpermutation_t;
{"#define USESATURATION\n", " saturation"},
};
-// this enum is multiplied by SHADERPERMUTATION_MODEBASE
+/// this enum is multiplied by SHADERPERMUTATION_MODEBASE
typedef enum shadermode_e
{
- SHADERMODE_GENERIC, // (particles/HUD/etc) vertex color, optionally multiplied by one texture
- SHADERMODE_POSTPROCESS, // postprocessing shader (r_glsl_postprocess)
- SHADERMODE_DEPTH_OR_SHADOW, // (depthfirst/shadows) vertex shader only
- SHADERMODE_FLATCOLOR, // (lightmap) modulate texture by uniform color (q1bsp, q3bsp)
- SHADERMODE_VERTEXCOLOR, // (lightmap) modulate texture by vertex colors (q3bsp)
- SHADERMODE_LIGHTMAP, // (lightmap) modulate texture by lightmap texture (q1bsp, q3bsp)
- SHADERMODE_LIGHTDIRECTIONMAP_MODELSPACE, // (lightmap) use directional pixel shading from texture containing modelspace light directions (q3bsp deluxemap)
- SHADERMODE_LIGHTDIRECTIONMAP_TANGENTSPACE, // (lightmap) use directional pixel shading from texture containing tangentspace light directions (q1bsp deluxemap)
- SHADERMODE_LIGHTDIRECTION, // (lightmap) use directional pixel shading from fixed light direction (q3bsp)
- SHADERMODE_LIGHTSOURCE, // (lightsource) use directional pixel shading from light source (rtlight)
- SHADERMODE_REFRACTION, // refract background (the material is rendered normally after this pass)
- SHADERMODE_WATER, // refract background and reflection (the material is rendered normally after this pass)
+ SHADERMODE_GENERIC, ///< (particles/HUD/etc) vertex color, optionally multiplied by one texture
+ SHADERMODE_POSTPROCESS, ///< postprocessing shader (r_glsl_postprocess)
+ SHADERMODE_DEPTH_OR_SHADOW, ///< (depthfirst/shadows) vertex shader only
+ SHADERMODE_FLATCOLOR, ///< (lightmap) modulate texture by uniform color (q1bsp, q3bsp)
+ SHADERMODE_VERTEXCOLOR, ///< (lightmap) modulate texture by vertex colors (q3bsp)
+ SHADERMODE_LIGHTMAP, ///< (lightmap) modulate texture by lightmap texture (q1bsp, q3bsp)
+ SHADERMODE_LIGHTDIRECTIONMAP_MODELSPACE, ///< (lightmap) use directional pixel shading from texture containing modelspace light directions (q3bsp deluxemap)
+ SHADERMODE_LIGHTDIRECTIONMAP_TANGENTSPACE, ///< (lightmap) use directional pixel shading from texture containing tangentspace light directions (q1bsp deluxemap)
+ SHADERMODE_LIGHTDIRECTION, ///< (lightmap) use directional pixel shading from fixed light direction (q3bsp)
+ SHADERMODE_LIGHTSOURCE, ///< (lightsource) use directional pixel shading from light source (rtlight)
+ SHADERMODE_REFRACTION, ///< refract background (the material is rendered normally after this pass)
+ SHADERMODE_WATER, ///< refract background and reflection (the material is rendered normally after this pass)
SHADERMODE_COUNT
}
shadermode_t;
typedef struct r_glsl_permutation_s
{
- // indicates if we have tried compiling this permutation already
+ /// indicates if we have tried compiling this permutation already
qboolean compiled;
- // 0 if compilation failed
+ /// 0 if compilation failed
int program;
- // locations of detected uniforms in program object, or -1 if not found
+ /// locations of detected uniforms in program object, or -1 if not found
int loc_Texture_First;
int loc_Texture_Second;
int loc_Texture_GammaRamps;
int loc_DiffuseColor;
int loc_SpecularColor;
int loc_LightDir;
- int loc_ContrastBoostCoeff; // 1 - 1/ContrastBoost
- int loc_GammaCoeff; // 1 / gamma
+ int loc_ContrastBoostCoeff; ///< 1 - 1/ContrastBoost
+ int loc_GammaCoeff; ///< 1 / gamma
int loc_DistortScaleRefractReflect;
int loc_ScreenScaleRefractReflect;
int loc_ScreenCenterRefractReflect;
}
r_glsl_permutation_t;
-// information about each possible shader permutation
+/// information about each possible shader permutation
r_glsl_permutation_t r_glsl_permutations[SHADERMODE_COUNT][SHADERPERMUTATION_LIMIT];
-// currently selected permutation
+/// currently selected permutation
r_glsl_permutation_t *r_glsl_permutation;
static char *R_GLSL_GetText(const char *filename, qboolean printfromdisknotice)
}
}
-// only used if skyrendermasked, and normally returns false
+/// only used if skyrendermasked, and normally returns false
int R_DrawBrushModelsSky (void)
{
int i, sky;
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-// input.h -- external (non-keyboard) input devices
+/// \file input.h -- external (non-keyboard) input devices
#ifndef INPUT_H
#define INPUT_H
int weaponbit;
int ammostat;
int ammomin;
- // TODO add a parameter for the picture to be used by the sbar, and use it there
+ /// \TODO add a parameter for the picture to be used by the sbar, and use it there
}
in_bestweapon_info_t;
extern in_bestweapon_info_t in_bestweapon_info[IN_BESTWEAPON_MAX];
-void IN_BestWeapon_ResetData(void); // call before each map so QC can start from a clean state
+void IN_BestWeapon_ResetData(void); ///< call before each map so QC can start from a clean state
#endif
void JPEG_CloseLibrary (void);
unsigned char* JPEG_LoadImage_BGRA (const unsigned char *f, int filesize);
qboolean JPEG_SaveImage_preflipped (const char *filename, int width, int height, unsigned char *data);
-size_t JPEG_SaveImage_to_Buffer (char *jpegbuf, size_t jpegsize, int width, int height, unsigned char *data); // returns 0 if failed, or the size actually used
+
+/*! \returns 0 if failed, or the size actually used.
+ */
+size_t JPEG_SaveImage_to_Buffer (char *jpegbuf, size_t jpegsize, int width, int height, unsigned char *data);
qboolean Image_Compress(const char *imagename, size_t maxsize, void **buf, size_t *size);
#define max(A,B) ((A) > (B) ? (A) : (B))
#endif
-// LordHavoc: this function never returns exactly MIN or exactly MAX, because
-// of a QuakeC bug in id1 where the line
-// self.nextthink = self.nexthink + random() * 0.5;
-// can result in 0 (self.nextthink is 0 at this point in the code to begin
-// with), causing "stone monsters" that never spawned properly, also MAX is
-// avoided because some people use random() as an index into arrays or for
-// loop conditions, where hitting exactly MAX may be a fatal error
+/// LordHavoc: this function never returns exactly MIN or exactly MAX, because
+/// of a QuakeC bug in id1 where the line
+/// self.nextthink = self.nexthink + random() * 0.5;
+/// can result in 0 (self.nextthink is 0 at this point in the code to begin
+/// with), causing "stone monsters" that never spawned properly, also MAX is
+/// avoided because some people use random() as an index into arrays or for
+/// loop conditions, where hitting exactly MAX may be a fatal error
#define lhrandom(MIN,MAX) (((double)(rand() + 0.5) / ((double)RAND_MAX + 1)) * ((MAX)-(MIN)) + (MIN))
#define invpow(base,number) (log(number) / log(base))
-// returns log base 2 of "n" (WARNING: "n" MUST be a power of 2!)
+/// returns log base 2 of "n"
+/// \WARNING: "n" MUST be a power of 2!
#define log2i(n) ((((n) & 0xAAAAAAAA) != 0 ? 1 : 0) | (((n) & 0xCCCCCCCC) != 0 ? 2 : 0) | (((n) & 0xF0F0F0F0) != 0 ? 4 : 0) | (((n) & 0xFF00FF00) != 0 ? 8 : 0) | (((n) & 0xFFFF0000) != 0 ? 16 : 0))
-// TOCHECK: what is this function supposed to do?
+/// \TODO: what is this function supposed to do?
#define bit2i(n) log2i((n) << 1)
-// boolean XOR (why doesn't C have the ^^ operator for this purpose?)
+/// boolean XOR (why doesn't C have the ^^ operator for this purpose?)
#define boolxor(a,b) (!(a) != !(b))
-// returns the smallest integer greater than or equal to "value", or 0 if "value" is too big
+/// returns the smallest integer greater than or equal to "value", or 0 if "value" is too big
unsigned int CeilPowerOf2(unsigned int value);
#define DEG2RAD(a) ((a) * ((float) M_PI / 180.0f))
(n)[2] = ((a)[0] - (b)[0]) * ((c)[1] - (b)[1]) - ((a)[1] - (b)[1]) * ((c)[0] - (b)[0]) \
)
-// fast PointInfrontOfTriangle
-// subtracts v1 from v0 and v2, combined into a crossproduct, combined with a
-// dotproduct of the light location relative to the first point of the
-// triangle (any point works, since any triangle is obviously flat), and
-// finally a comparison to determine if the light is infront of the triangle
-// (the goal of this statement) we do not need to normalize the surface
-// normal because both sides of the comparison use it, therefore they are
-// both multiplied the same amount... furthermore a subtract can be done on
-// the point to eliminate one dotproduct
-// this is ((p - a) * cross(a-b,c-b))
+/*! Fast PointInfrontOfTriangle.
+ * subtracts v1 from v0 and v2, combined into a crossproduct, combined with a
+ * dotproduct of the light location relative to the first point of the
+ * triangle (any point works, since any triangle is obviously flat), and
+ * finally a comparison to determine if the light is infront of the triangle
+ * (the goal of this statement) we do not need to normalize the surface
+ * normal because both sides of the comparison use it, therefore they are
+ * both multiplied the same amount... furthermore a subtract can be done on
+ * the point to eliminate one dotproduct
+ * this is ((p - a) * cross(a-b,c-b))
+ */
#define PointInfrontOfTriangle(p,a,b,c) \
( ((p)[0] - (a)[0]) * (((a)[1] - (b)[1]) * ((c)[2] - (b)[2]) - ((a)[2] - (b)[2]) * ((c)[1] - (b)[1])) \
+ ((p)[1] - (a)[1]) * (((a)[2] - (b)[2]) * ((c)[0] - (b)[0]) - ((a)[0] - (b)[0]) * ((c)[2] - (b)[2])) \
#define VectorCopy4(a,b) {(b)[0]=(a)[0];(b)[1]=(a)[1];(b)[2]=(a)[2];(b)[3]=(a)[3];}
vec_t Length (vec3_t v);
-float VectorNormalizeLength (vec3_t v); // returns vector length
-float VectorNormalizeLength2 (vec3_t v, vec3_t dest); // returns vector length
+
+/// returns vector length
+float VectorNormalizeLength (vec3_t v);
+
+/// returns vector length
+float VectorNormalizeLength2 (vec3_t v, vec3_t dest);
#define NUMVERTEXNORMALS 162
extern float m_bytenormals[NUMVERTEXNORMALS][3];
void R_ConcatTransforms (const float in1[3*4], const float in2[3*4], float out[3*4]);
void AngleVectors (const vec3_t angles, vec3_t forward, vec3_t right, vec3_t up);
-// LordHavoc: proper matrix version of AngleVectors
+/// LordHavoc: proper matrix version of AngleVectors
void AngleVectorsFLU (const vec3_t angles, vec3_t forward, vec3_t left, vec3_t up);
-// LordHavoc: builds a [3][4] matrix
+/// LordHavoc: builds a [3][4] matrix
void AngleMatrix (const vec3_t angles, const vec3_t translate, vec_t matrix[][4]);
-// LordHavoc: calculates pitch/yaw/roll angles from forward and up vectors
+/// LordHavoc: calculates pitch/yaw/roll angles from forward and up vectors
void AnglesFromVectors (vec3_t angles, const vec3_t forward, const vec3_t up, qboolean flippitch);
-// LordHavoc: like AngleVectors, but taking a forward vector instead of angles, useful!
+/// LordHavoc: like AngleVectors, but taking a forward vector instead of angles, useful!
void VectorVectors(const vec3_t forward, vec3_t right, vec3_t up);
void VectorVectorsDouble(const double *forward, double *right, double *up);
#define PlaneDist(point,plane) ((plane)->type < 3 ? (point)[(plane)->type] : DotProduct((point), (plane)->normal))
#define PlaneDiff(point,plane) (((plane)->type < 3 ? (point)[(plane)->type] : DotProduct((point), (plane)->normal)) - (plane)->dist)
-// LordHavoc: minimal plane structure
+/// LordHavoc: minimal plane structure
typedef struct tinyplane_s
{
float normal[3], dist;
float RadiusFromBounds (const vec3_t mins, const vec3_t maxs);
float RadiusFromBoundsAndOrigin (const vec3_t mins, const vec3_t maxs, const vec3_t origin);
-// print a matrix to the console
struct matrix4x4_s;
+/// print a matrix to the console
void Matrix4x4_Print(const struct matrix4x4_s *in);
int Math_atov(const char *s, vec3_t out);
static void M_ServerList_Key (int key, int ascii);
static void M_ModList_Key (int key, int ascii);
-static qboolean m_entersound; // play after drawing a frame, so caching won't disrupt the sound
+static qboolean m_entersound; ///< play after drawing a frame, so caching won't disrupt the sound
void M_Update_Return_Reason(char *s)
{
//=============================================================================
/* LOAD/SAVE MENU */
-static int load_cursor; // 0 < load_cursor < MAX_SAVEGAMES
+static int load_cursor; ///< 0 < load_cursor < MAX_SAVEGAMES
#define MAX_SAVEGAMES 12
static char m_filenames[MAX_SAVEGAMES][SAVEGAME_COMMENT_LENGTH+1];
const char *type;
int width, height;
int conwidth, conheight;
- double pixelheight; // pixel aspect
+ double pixelheight; ///< pixel aspect
}
video_resolution_t;
extern video_resolution_t video_resolutions[];
int serverquerycount = 0;
int serverreplycount = 0;
-// this is only false if there are still servers left to query
+/// this is only false if there are still servers left to query
static qboolean serverlist_querysleep = true;
static qboolean serverlist_paused = false;
-// this is pushed a second or two ahead of realtime whenever a master server
-// reply is received, to avoid issuing queries while master replies are still
-// flooding in (which would make a mess of the ping times)
+/// this is pushed a second or two ahead of realtime whenever a master server
+/// reply is received, to avoid issuing queries while master replies are still
+/// flooding in (which would make a mess of the ping times)
static double serverlist_querywaittime = 0;
static unsigned char sendbuffer[NET_HEADERSIZE+NET_MAXMESSAGE];
}
}
-// helper function to insert a value into the viewset
-// spare entries will be removed
+/// helper function to insert a value into the viewset
+/// spare entries will be removed
static void _ServerList_ViewList_Helper_InsertBefore( int index, serverlist_entry_t *entry )
{
int i;
serverlist_viewlist[index] = entry;
}
-// we suppose serverlist_viewcount to be valid, ie > 0
+/// we suppose serverlist_viewcount to be valid, ie > 0
static void _ServerList_ViewList_Helper_Remove( int index )
{
serverlist_viewcount--;
serverlist_viewlist[index] = serverlist_viewlist[index + 1];
}
-// returns true if A should be inserted before B
+/// \returns true if A should be inserted before B
static qboolean _ServerList_Entry_Compare( serverlist_entry_t *A, serverlist_entry_t *B )
{
int result = 0; // > 0 if for numbers A > B and for text if A < B
{
const char *ifname;
- // TODO: make some basic checks of the IP address (broadcast, ...)
+ /// \TODO: make some basic checks of the IP address (broadcast, ...)
ifname = LHNETADDRESS_GetInterfaceName(senderaddress);
if (ifname != NULL)
buffer[i] = 0;
}
-// (div0) build the full response only if possible; better a getinfo response than no response at all if getstatus won't fit
+/// (div0) build the full response only if possible; better a getinfo response than no response at all if getstatus won't fit
static qboolean NetConn_BuildStatusResponse(const char* challenge, char* out_msg, size_t out_size, qboolean fullstatus)
{
char qcstatus[256];
}
}
- // TODO: we should add more information for the full status string
+ /// \TODO: we should add more information for the full status string
length = dpsnprintf(out_msg, out_size,
"\377\377\377\377%s\x0A"
"\\gamename\\%s\\modname\\%s\\gameversion\\%d\\sv_maxclients\\%d"
return !strcmp(password, hash);
}
-// returns a string describing the user level, or NULL for auth failure
+/// returns a string describing the user level, or NULL for auth failure
const char *RCon_Authenticate(const char *password, const char *s, const char *endpos, rcon_matchfunc_t comparator, const char *cs, int cslen)
{
const char *text;
#define NET_PROTOCOL_VERSION 3
#define NET_EXTRESPONSE_MAX 16
-// This is the network info/connection protocol. It is used to find Quake
-// servers, get info about them, and connect to them. Once connected, the
-// Quake game protocol (documented elsewhere) is used.
-//
-//
-// General notes:
-// game_name is currently always "QUAKE", but is there so this same protocol
-// can be used for future games as well; can you say Quake2?
-//
-// CCREQ_CONNECT
-// string game_name "QUAKE"
-// byte net_protocol_version NET_PROTOCOL_VERSION
-//
-// CCREQ_SERVER_INFO
-// string game_name "QUAKE"
-// byte net_protocol_version NET_PROTOCOL_VERSION
-//
-// CCREQ_PLAYER_INFO
-// byte player_number
-//
-// CCREQ_RULE_INFO
-// string rule
-//
-// CCREQ_RCON
-// string password
-// string command
-//
-//
-//
-// CCREP_ACCEPT
-// long port
-//
-// CCREP_REJECT
-// string reason
-//
-// CCREP_SERVER_INFO
-// string server_address
-// string host_name
-// string level_name
-// byte current_players
-// byte max_players
-// byte protocol_version NET_PROTOCOL_VERSION
-//
-// CCREP_PLAYER_INFO
-// byte player_number
-// string name
-// long colors
-// long frags
-// long connect_time
-// string address
-//
-// CCREP_RULE_INFO
-// string rule
-// string value
-//
-// CCREP_RCON
-// string reply
-
-// note:
-// There are two address forms used above. The short form is just a
-// port number. The address that goes along with the port is defined as
-// "whatever address you receive this reponse from". This lets us use
-// the host OS to solve the problem of multiple host addresses (possibly
-// with no routing between them); the host will use the right address
-// when we reply to the inbound connection request. The long from is
-// a full address and port in a string. It is used for returning the
-// address of a server that is not running locally.
+/// \page netconn The network info/connection protocol.
+/// It is used to find Quake
+/// servers, get info about them, and connect to them. Once connected, the
+/// Quake game protocol (documented elsewhere) is used.
+///
+///
+/// General notes:\code
+/// game_name is currently always "QUAKE", but is there so this same protocol
+/// can be used for future games as well; can you say Quake2?
+///
+/// CCREQ_CONNECT
+/// string game_name "QUAKE"
+/// byte net_protocol_version NET_PROTOCOL_VERSION
+///
+/// CCREQ_SERVER_INFO
+/// string game_name "QUAKE"
+/// byte net_protocol_version NET_PROTOCOL_VERSION
+///
+/// CCREQ_PLAYER_INFO
+/// byte player_number
+///
+/// CCREQ_RULE_INFO
+/// string rule
+///
+/// CCREQ_RCON
+/// string password
+/// string command
+///
+///
+///
+/// CCREP_ACCEPT
+/// long port
+///
+/// CCREP_REJECT
+/// string reason
+///
+/// CCREP_SERVER_INFO
+/// string server_address
+/// string host_name
+/// string level_name
+/// byte current_players
+/// byte max_players
+/// byte protocol_version NET_PROTOCOL_VERSION
+///
+/// CCREP_PLAYER_INFO
+/// byte player_number
+/// string name
+/// long colors
+/// long frags
+/// long connect_time
+/// string address
+///
+/// CCREP_RULE_INFO
+/// string rule
+/// string value
+///
+/// CCREP_RCON
+/// string reply
+/// \endcode
+/// \note
+/// There are two address forms used above. The short form is just a
+/// port number. The address that goes along with the port is defined as
+/// "whatever address you receive this reponse from". This lets us use
+/// the host OS to solve the problem of multiple host addresses (possibly
+/// with no routing between them); the host will use the right address
+/// when we reply to the inbound connection request. The long from is
+/// a full address and port in a string. It is used for returning the
+/// address of a server that is not running locally.
#define CCREQ_CONNECT 0x01
#define CCREQ_SERVER_INFO 0x02
// this is mostly identical to qsocket_t from quake
- // if this time is reached, kick off peer
+ /// if this time is reached, kick off peer
double connecttime;
double timeout;
double lastMessageTime;
double lastSendTime;
- // writing buffer to send to peer as the next reliable message
- // can be added to at any time, copied into sendMessage buffer when it is
- // possible to send a reliable message and then cleared
+ /// writing buffer to send to peer as the next reliable message
+ /// can be added to at any time, copied into sendMessage buffer when it is
+ /// possible to send a reliable message and then cleared
+ /// @{
sizebuf_t message;
unsigned char messagedata[NET_MAXMESSAGE];
+ /// @}
- // reliable message that is currently sending
- // (for building fragments)
+ /// reliable message that is currently sending
+ /// (for building fragments)
int sendMessageLength;
unsigned char sendMessage[NET_MAXMESSAGE];
- // reliable message that is currently being received
- // (for putting together fragments)
+ /// reliable message that is currently being received
+ /// (for putting together fragments)
int receiveMessageLength;
unsigned char receiveMessage[NET_MAXMESSAGE];
- // used by both NQ and QW protocols
+ /// used by both NQ and QW protocols
unsigned int outgoing_unreliable_sequence;
struct netconn_nq_s
float frame_latency; // rolling average
float frame_rate;
- int drop_count; // dropped packets, cleared each level
- int good_count; // cleared each level
+ int drop_count; ///< dropped packets, cleared each level
+ int good_count; ///< cleared each level
int qport;
// sequencing variables
int incoming_sequence;
int incoming_acknowledged;
- int incoming_reliable_acknowledged; // single bit
+ int incoming_reliable_acknowledged; ///< single bit
- int incoming_reliable_sequence; // single bit, maintained local
+ int incoming_reliable_sequence; ///< single bit, maintained local
- int reliable_sequence; // single bit
- int last_reliable_sequence; // sequence number of last send
+ int reliable_sequence; ///< single bit
+ int last_reliable_sequence; ///< sequence number of last send
}
qw;
SLMO_NOTSTARTSWITH
} serverlist_maskop_t;
-// struct with all fields that you can search for or sort by
+/// struct with all fields that you can search for or sort by
typedef struct serverlist_info_s
{
- // address for connecting
+ /// address for connecting
char cname[128];
- // ping time for sorting servers
+ /// ping time for sorting servers
int ping;
- // name of the game
+ /// name of the game
char game[32];
- // name of the mod
+ /// name of the mod
char mod[32];
- // name of the map
+ /// name of the map
char map[32];
- // name of the session
+ /// name of the session
char name[128];
- // qc-defined short status string
+ /// qc-defined short status string
char qcstatus[128];
- // frags/ping/name list (if they fit in the packet)
+ /// frags/ping/name list (if they fit in the packet)
char players[1400];
- // max client number
+ /// max client number
int maxplayers;
- // number of currently connected players (including bots)
+ /// number of currently connected players (including bots)
int numplayers;
- // number of currently connected players that are bots
+ /// number of currently connected players that are bots
int numbots;
- // number of currently connected players that are not bots
+ /// number of currently connected players that are not bots
int numhumans;
- // number of free slots
+ /// number of free slots
int freeslots;
- // protocol version
+ /// protocol version
int protocol;
- // game data version
- // (an integer that is used for filtering incompatible servers,
- // not filterable by QC)
+ /// game data version
+ /// (an integer that is used for filtering incompatible servers,
+ /// not filterable by QC)
int gameversion;
- // favorite server flag
+ /// favorite server flag
qboolean isfavorite;
} serverlist_info_t;
typedef struct serverlist_entry_s
{
- // used to determine whether this entry should be included into the final view
+ /// used to determine whether this entry should be included into the final view
serverlist_query_state query;
- // used to count the number of times the host has tried to query this server already
+ /// used to count the number of times the host has tried to query this server already
unsigned querycounter;
- // used to calculate ping when update comes in
+ /// used to calculate ping when update comes in
double querytime;
- // query protocol to use on this server
- int protocol; // may be PROTOCOL_QUAKEWORLD or PROTOCOL_DARKPLACES7
+ /// query protocol to use on this server, may be PROTOCOL_QUAKEWORLD or PROTOCOL_DARKPLACES7
+ int protocol;
serverlist_info_t info;
void Net_SlistQW_f(void);
void Net_Refresh_f(void);
-// ServerList interface (public)
-// manually refresh the view set, do this after having changed the mask or any other flag
+/// ServerList interface (public)
+/// manually refresh the view set, do this after having changed the mask or any other flag
void ServerList_RebuildViewList(void);
void ServerList_ResetMasks(void);
void ServerList_QueryList(qboolean resetcache, qboolean querydp, qboolean queryqw, qboolean consoleoutput);
-// called whenever net_slist_favorites changes
+/// called whenever net_slist_favorites changes
void NetConn_UpdateFavorites();
#endif
#ifndef QUAKEDEF_H
#define QUAKEDEF_H
-// on UNIX platforms we need to define this so that video saving does not cause a SIGFSZ (file size) signal when a video clip exceeds 2GB
+/// on UNIX platforms we need to define this so that video saving does not cause a SIGFSZ (file size) signal when a video clip exceeds 2GB
#define _FILE_OFFSET_BITS 64
// for cd_linux.c
#define MAX_NUM_ARGVS 50
-#define MAX_QPATH 128 // max length of a quake game pathname
-#define MAX_OSPATH 1024 // max length of a filesystem pathname
+#define MAX_QPATH 128 ///< max length of a quake game pathname
+#define MAX_OSPATH 1024 ///< max length of a filesystem pathname
-#define ON_EPSILON 0.1 // point on plane side epsilon
+#define ON_EPSILON 0.1 ///< point on plane side epsilon
-#define MAX_PACKETFRAGMENT 1024 // max length of packet fragment
+#define MAX_PACKETFRAGMENT 1024 ///< max length of packet fragment
#define NET_MAXMESSAGE 65536
-#define NET_MINRATE 1000 // limits "rate" and "sv_maxrate" cvars
+#define NET_MINRATE 1000 ///< limits "rate" and "sv_maxrate" cvars
//
// per-level limits
#define STAT_ACTIVEWEAPON 10
#define STAT_TOTALSECRETS 11
#define STAT_TOTALMONSTERS 12
-#define STAT_SECRETS 13 // bumped on client side by svc_foundsecret
-#define STAT_MONSTERS 14 // bumped by svc_killedmonster
-#define STAT_ITEMS 15 // FTE, DP
-#define STAT_VIEWHEIGHT 16 // FTE, DP
-//#define STAT_TIME 17 // FTE
-//#define STAT_VIEW2 20 // FTE
-#define STAT_VIEWZOOM 21 // DP
-#define STAT_MOVEVARS_WARSOWBUNNY_AIRFORWARDACCEL 226 // DP
-#define STAT_MOVEVARS_WARSOWBUNNY_ACCEL 227 // DP
-#define STAT_MOVEVARS_WARSOWBUNNY_TOPSPEED 228 // DP
-#define STAT_MOVEVARS_WARSOWBUNNY_TURNACCEL 229 // DP
-#define STAT_MOVEVARS_WARSOWBUNNY_BACKTOSIDERATIO 230 // DP
-#define STAT_MOVEVARS_AIRSTOPACCELERATE 231 // DP
-#define STAT_MOVEVARS_AIRSTRAFEACCELERATE 232 // DP
-#define STAT_MOVEVARS_MAXAIRSTRAFESPEED 233 // DP
-#define STAT_MOVEVARS_AIRCONTROL 234 // DP
-#define STAT_FRAGLIMIT 235 // DP
-#define STAT_TIMELIMIT 236 // DP
-#define STAT_MOVEVARS_WALLFRICTION 237 // DP
-#define STAT_MOVEVARS_FRICTION 238 // DP
-#define STAT_MOVEVARS_WATERFRICTION 239 // DP
-#define STAT_MOVEVARS_TICRATE 240 // DP
-#define STAT_MOVEVARS_TIMESCALE 241 // DP
-#define STAT_MOVEVARS_GRAVITY 242 // DP
-#define STAT_MOVEVARS_STOPSPEED 243 // DP
-#define STAT_MOVEVARS_MAXSPEED 244 // DP
-#define STAT_MOVEVARS_SPECTATORMAXSPEED 245 // DP
-#define STAT_MOVEVARS_ACCELERATE 246 // DP
-#define STAT_MOVEVARS_AIRACCELERATE 247 // DP
-#define STAT_MOVEVARS_WATERACCELERATE 248 // DP
-#define STAT_MOVEVARS_ENTGRAVITY 249 // DP
-#define STAT_MOVEVARS_JUMPVELOCITY 250 // DP
-#define STAT_MOVEVARS_EDGEFRICTION 251 // DP
-#define STAT_MOVEVARS_MAXAIRSPEED 252 // DP
-#define STAT_MOVEVARS_STEPHEIGHT 253 // DP
-#define STAT_MOVEVARS_AIRACCEL_QW 254 // DP
-#define STAT_MOVEVARS_AIRACCEL_SIDEWAYS_FRICTION 255 // DP
+#define STAT_SECRETS 13 ///< bumped on client side by svc_foundsecret
+#define STAT_MONSTERS 14 ///< bumped by svc_killedmonster
+#define STAT_ITEMS 15 ///< FTE, DP
+#define STAT_VIEWHEIGHT 16 ///< FTE, DP
+//#define STAT_TIME 17 ///< FTE
+//#define STAT_VIEW2 20 ///< FTE
+#define STAT_VIEWZOOM 21 ///< DP
+#define STAT_MOVEVARS_WARSOWBUNNY_AIRFORWARDACCEL 226 ///< DP
+#define STAT_MOVEVARS_WARSOWBUNNY_ACCEL 227 ///< DP
+#define STAT_MOVEVARS_WARSOWBUNNY_TOPSPEED 228 ///< DP
+#define STAT_MOVEVARS_WARSOWBUNNY_TURNACCEL 229 ///< DP
+#define STAT_MOVEVARS_WARSOWBUNNY_BACKTOSIDERATIO 230 ///< DP
+#define STAT_MOVEVARS_AIRSTOPACCELERATE 231 ///< DP
+#define STAT_MOVEVARS_AIRSTRAFEACCELERATE 232 ///< DP
+#define STAT_MOVEVARS_MAXAIRSTRAFESPEED 233 ///< DP
+#define STAT_MOVEVARS_AIRCONTROL 234 ///< DP
+#define STAT_FRAGLIMIT 235 ///< DP
+#define STAT_TIMELIMIT 236 ///< DP
+#define STAT_MOVEVARS_WALLFRICTION 237 ///< DP
+#define STAT_MOVEVARS_FRICTION 238 ///< DP
+#define STAT_MOVEVARS_WATERFRICTION 239 ///< DP
+#define STAT_MOVEVARS_TICRATE 240 ///< DP
+#define STAT_MOVEVARS_TIMESCALE 241 ///< DP
+#define STAT_MOVEVARS_GRAVITY 242 ///< DP
+#define STAT_MOVEVARS_STOPSPEED 243 ///< DP
+#define STAT_MOVEVARS_MAXSPEED 244 ///< DP
+#define STAT_MOVEVARS_SPECTATORMAXSPEED 245 ///< DP
+#define STAT_MOVEVARS_ACCELERATE 246 ///< DP
+#define STAT_MOVEVARS_AIRACCELERATE 247 ///< DP
+#define STAT_MOVEVARS_WATERACCELERATE 248 ///< DP
+#define STAT_MOVEVARS_ENTGRAVITY 249 ///< DP
+#define STAT_MOVEVARS_JUMPVELOCITY 250 ///< DP
+#define STAT_MOVEVARS_EDGEFRICTION 251 ///< DP
+#define STAT_MOVEVARS_MAXAIRSPEED 252 ///< DP
+#define STAT_MOVEVARS_STEPHEIGHT 253 ///< DP
+#define STAT_MOVEVARS_AIRACCEL_QW 254 ///< DP
+#define STAT_MOVEVARS_AIRACCEL_SIDEWAYS_FRICTION 255 ///< DP
// stock defines
# define DP_ARCH_STR "x86"
#endif
-// incremented every frame, never reset
+/// incremented every frame, never reset
extern int host_framecount;
-// not bounded in any way, changed at start of every frame, never reset
+/// not bounded in any way, changed at start of every frame, never reset
extern double realtime;
void Host_InitCommands(void);
void Host_AbortCurrentFrame(void);
-// skill level for currently loaded level (in case the user changes the cvar while the level is running, this reflects the level actually in use)
+/// skill level for currently loaded level (in case the user changes the cvar while the level is running, this reflects the level actually in use)
extern int current_skill;
//
#define SBAR_HEIGHT 24
-extern int sb_lines; // scan lines to draw
+extern int sb_lines; ///< scan lines to draw
extern cvar_t sbar_alpha_bg;
extern cvar_t sbar_alpha_fg;
void Sbar_Init (void);
+/// called every frame by screen
void Sbar_Draw (void);
-// called every frame by screen
#endif
typedef struct server_static_s
{
- // number of svs.clients slots (updated by maxplayers command)
+ /// number of svs.clients slots (updated by maxplayers command)
int maxclients, maxclients_next;
- // client slots
+ /// client slots
struct client_s *clients;
- // episode completion information
+ /// episode completion information
int serverflags;
- // cleared when at SV_SpawnServer
+ /// cleared when at SV_SpawnServer
qboolean changelevel_issued;
- // server infostring
+ /// server infostring
char serverinfo[MAX_SERVERINFO_STRING];
// performance data
float perf_cpuload;
typedef struct server_s
{
- // false if only a net client
+ /// false if only a net client
qboolean active;
qboolean paused;
double pausedstart;
- // handle connections specially
+ /// handle connections specially
qboolean loadgame;
- // one of the PROTOCOL_ values
+ /// one of the PROTOCOL_ values
protocolversion_t protocol;
double time;
int csqc_progsize; // -1 = no progs
char csqc_progname[MAX_QPATH]; // copied from csqc_progname at level start
- // collision culling data
+ /// collision culling data
world_t world;
- // map name
+ /// map name
char name[64];
- // maps/<name>.bsp, for model_precache[0]
+ /// maps/<name>.bsp, for model_precache[0]
char modelname[64];
struct model_s *worldmodel;
// NULL terminated
// updated by SV_SoundIndex
char sound_precache[MAX_SOUNDS][MAX_QPATH];
char lightstyles[MAX_LIGHTSTYLES][64];
- // some actions are only valid during load
+ /// some actions are only valid during load
server_state_t state;
sizebuf_t datagram;
unsigned char reliable_datagram_buf[NET_MAXMESSAGE];
sizebuf_t signon;
- // LordHavoc: increased signon message buffer from 8192
+ /// LordHavoc: increased signon message buffer from 8192
unsigned char signon_buf[NET_MAXMESSAGE];
- // connection flood blocking
- // note this is in server_t rather than server_static_t so that it is
- // reset on each map command (such as New Game in singleplayer)
+ /// connection flood blocking
+ /// note this is in server_t rather than server_static_t so that it is
+ /// reset on each map command (such as New Game in singleplayer)
server_connectfloodaddress_t connectfloodaddresses[MAX_CONNECTFLOODADDRESSES];
#define SV_MAX_PARTICLEEFFECTNAME 256
int sententities[MAX_EDICTS];
int sententitiesconsideration[MAX_EDICTS];
- // legacy support for self.Version based csqc entity networking
+ /// legacy support for self.Version based csqc entity networking
unsigned char csqcentityversion[MAX_EDICTS]; // legacy
} server_t;
typedef struct client_s
{
- // false = empty client slot
+ /// false = empty client slot
qboolean active;
- // false = don't do ClientDisconnect on drop
+ /// false = don't do ClientDisconnect on drop
qboolean clientconnectcalled;
- // false = don't send datagrams
+ /// false = don't send datagrams
qboolean spawned;
- // 1 = send svc_serverinfo and advance to 2, 2 doesn't send, then advances to 0 (allowing unlimited sending) when prespawn is received
+ /// 1 = send svc_serverinfo and advance to 2, 2 doesn't send, then advances to 0 (allowing unlimited sending) when prespawn is received
int sendsignon;
- // requested rate in bytes per second
+ /// requested rate in bytes per second
int rate;
- // realtime this client connected
+ /// realtime this client connected
double connecttime;
- // keepalive messages must be sent periodically during signon
+ /// keepalive messages must be sent periodically during signon
double keepalivetime;
- // communications handle
+ /// communications handle
netconn_t *netconnection;
int movesequence;
- // movement
+ /// movement
usercmd_t cmd;
- // intended motion calced from cmd
+ /// intended motion calced from cmd
vec3_t wishdir;
- // PRVM_EDICT_NUM(clientnum+1)
+ /// PRVM_EDICT_NUM(clientnum+1)
prvm_edict_t *edict;
#ifdef NUM_PING_TIMES
float ping_times[NUM_PING_TIMES];
- // ping_times[num_pings%NUM_PING_TIMES]
+ /// ping_times[num_pings%NUM_PING_TIMES]
int num_pings;
#endif
- // LordHavoc: can be used for prediction or whatever...
+ /// LordHavoc: can be used for prediction or whatever...
float ping;
- // this is used by sv_clmovement_minping code
+ /// this is used by sv_clmovement_minping code
double clmovement_disabletimeout;
- // this is used by sv_clmovement_inputtimeout code
+ /// this is used by sv_clmovement_inputtimeout code
float clmovement_inputtimeout;
-// spawn parms are carried from level to level
+/// spawn parms are carried from level to level
float spawn_parms[NUM_SPAWN_PARMS];
// properties that are sent across the network only when changed
char playermodel[MAX_QPATH], old_model[MAX_QPATH];
char playerskin[MAX_QPATH], old_skin[MAX_QPATH];
- // netaddress support
+ /// netaddress support
char netaddress[MAX_QPATH];
- // visibility state
+ /// visibility state
float visibletime[MAX_EDICTS];
// scope is whether an entity is currently being networked to this client
csqcentityframedb_t csqcentityframehistory[NUM_CSQCENTITYDB_FRAMES];
int csqcentityframehistory_next;
- // prevent animated names
+ /// prevent animated names
float nametime;
- // latest received clc_ackframe (used to detect packet loss)
+ /// latest received clc_ackframe (used to detect packet loss)
int latestframenum;
- // cache weaponmodel name lookups
+ /// cache weaponmodel name lookups
char weaponmodel[MAX_QPATH];
int weaponmodelindex;
- // clientcamera (entity to use as camera)
+ /// clientcamera (entity to use as camera)
int clientcamera;
entityframe_database_t *entitydatabase;
// information on an active download if any
qfile_t *download_file;
- int download_expectedposition; // next position the client should ack
+ int download_expectedposition; ///< next position the client should ack
qboolean download_started;
char download_name[MAX_QPATH];
qboolean download_deflate;
qboolean fixangle_angles_set;
vec3_t fixangle_angles;
- // demo recording
+ /// demo recording
qfile_t *sv_demo_file;
} client_t;
//=============================================================================
// edict->movetype values
-#define MOVETYPE_NONE 0 // never moves
+#define MOVETYPE_NONE 0 ///< never moves
#define MOVETYPE_ANGLENOCLIP 1
#define MOVETYPE_ANGLECLIP 2
-#define MOVETYPE_WALK 3 // gravity
-#define MOVETYPE_STEP 4 // gravity, special edge handling
+#define MOVETYPE_WALK 3 ///< gravity
+#define MOVETYPE_STEP 4 ///< gravity, special edge handling
#define MOVETYPE_FLY 5
-#define MOVETYPE_TOSS 6 // gravity
-#define MOVETYPE_PUSH 7 // no clip to world, push and crush
+#define MOVETYPE_TOSS 6 ///< gravity
+#define MOVETYPE_PUSH 7 ///< no clip to world, push and crush
#define MOVETYPE_NOCLIP 8
-#define MOVETYPE_FLYMISSILE 9 // extra size to monsters
+#define MOVETYPE_FLYMISSILE 9 ///< extra size to monsters
#define MOVETYPE_BOUNCE 10
-#define MOVETYPE_BOUNCEMISSILE 11 // bounce w/o gravity
-#define MOVETYPE_FOLLOW 12 // track movement of aiment
-#define MOVETYPE_FAKEPUSH 13 // tenebrae's push that doesn't push
+#define MOVETYPE_BOUNCEMISSILE 11 ///< bounce w/o gravity
+#define MOVETYPE_FOLLOW 12 ///< track movement of aiment
+#define MOVETYPE_FAKEPUSH 13 ///< tenebrae's push that doesn't push
// edict->solid values
-#define SOLID_NOT 0 // no interaction with other objects
-#define SOLID_TRIGGER 1 // touch on edge, but not blocking
-#define SOLID_BBOX 2 // touch on edge, block
-#define SOLID_SLIDEBOX 3 // touch on edge, but not an onground
-#define SOLID_BSP 4 // bsp clip, touch on edge, block
+#define SOLID_NOT 0 ///< no interaction with other objects
+#define SOLID_TRIGGER 1 ///< touch on edge, but not blocking
+#define SOLID_BBOX 2 ///< touch on edge, block
+#define SOLID_SLIDEBOX 3 ///< touch on edge, but not an onground
+#define SOLID_BSP 4 ///< bsp clip, touch on edge, block
// LordHavoc: corpse code
-#define SOLID_CORPSE 5 // same as SOLID_BBOX, except it behaves as SOLID_NOT against SOLID_SLIDEBOX objects (players/monsters)
+#define SOLID_CORPSE 5 ///< same as SOLID_BBOX, except it behaves as SOLID_NOT against SOLID_SLIDEBOX objects (players/monsters)
// edict->deadflag values
#define DEAD_NO 0
#define FL_NOTARGET 128
#define FL_ITEM 256
#define FL_ONGROUND 512
-#define FL_PARTIALGROUND 1024 // not all corners are valid
-#define FL_WATERJUMP 2048 // player jumping out of water
-#define FL_JUMPRELEASED 4096 // for jump debouncing
+#define FL_PARTIALGROUND 1024 ///< not all corners are valid
+#define FL_WATERJUMP 2048 ///< player jumping out of water
+#define FL_JUMPRELEASED 4096 ///< for jump debouncing
#define SPAWNFLAG_NOT_EASY 256
#define SPAWNFLAG_NOT_MEDIUM 512
extern mempool_t *sv_mempool;
-// persistant server info
+/// persistant server info
extern server_static_t svs;
-// local server
+/// local server
extern server_t sv;
extern client_t *host_client;
qboolean SV_CheckBottom (prvm_edict_t *ent);
qboolean SV_movestep (prvm_edict_t *ent, vec3_t move, qboolean relink, qboolean noenemy, qboolean settrace);
-// Needs to be called any time an entity changes origin, mins, maxs, or solid
-// sets ent->v.absmin and ent->v.absmax
-// if touchtriggers, calls prog functions for the intersected triggers
+/*! Needs to be called any time an entity changes origin, mins, maxs, or solid
+ * sets ent->v.absmin and ent->v.absmax
+ * if touchtriggers, calls prog functions for the intersected triggers
+ */
void SV_LinkEdict (prvm_edict_t *ent, qboolean touch_triggers);
-// move an entity that is stuck by small amounts in various directions to try to nudge it back into the collision hull
-// returns true if it found a better place
+/*! move an entity that is stuck by small amounts in various directions to try to nudge it back into the collision hull
+ * returns true if it found a better place
+ */
qboolean SV_UnstickEntity (prvm_edict_t *ent);
-// calculates hitsupercontentsmask for a generic qc entity
+/// calculates hitsupercontentsmask for a generic qc entity
int SV_GenericHitSuperContentsMask(const prvm_edict_t *edict);
-// traces a box move against worldmodel and all entities in the specified area
+/// traces a box move against worldmodel and all entities in the specified area
trace_t SV_Move(const vec3_t start, const vec3_t mins, const vec3_t maxs, const vec3_t end, int type, prvm_edict_t *passedict, int hitsupercontentsmask);
int SV_PointSuperContents(const vec3_t point);
void SV_VM_Begin(void);
void SV_VM_End(void);
-const char *Host_TimingReport(); // for output in Host_Status_f
+const char *Host_TimingReport(); ///< for output in Host_Status_f
#endif
}
dllfunction_t;
-// "dllnames" is an NULL terminated array of possible names for the DLL you want to load
+/*! Loads a library.
+ * \param dllnames a NULL terminated array of possible names for the DLL you want to load.
+ * \param handle
+ * \param fcts
+ */
qboolean Sys_LoadLibrary (const char** dllnames, dllhandle_t* handle, const dllfunction_t *fcts);
void Sys_UnloadLibrary (dllhandle_t* handle);
void* Sys_GetProcAddress (dllhandle_t handle, const char* name);
-// called early in Host_Init
+/// called early in Host_Init
void Sys_InitConsole (void);
-// called after command system is initialized but before first Con_Print
+/// called after command system is initialized but before first Con_Print
void Sys_Init_Commands (void);
-// returns current timestamp
+/// \returns current timestamp
char *Sys_TimeString(const char *timeformat);
//
// system IO interface (these are the sys functions that need to be implemented in a new driver atm)
//
+
+/// an error will cause the entire program to exit
void Sys_Error (const char *error, ...) DP_FUNC_PRINTF(1);
-// an error will cause the entire program to exit
+/// (may) output text to terminal which launched program
void Sys_PrintToTerminal(const char *text);
-// (may) output text to terminal which launched program
-void Sys_Shutdown (void); //INFO: This is only called by Host_Shutdown so we dont need testing for recursion
+/// INFO: This is only called by Host_Shutdown so we dont need testing for recursion
+void Sys_Shutdown (void);
void Sys_Quit (int returnvalue);
-// on some build/platform combinations (such as Linux gcc with the -pg
-// profiling option) this can turn on/off profiling, used primarily to limit
-// profiling to certain areas of the code, such as ingame performance without
-// regard for loading/shutdown performance (-profilegameonly on commandline)
+/*! on some build/platform combinations (such as Linux gcc with the -pg
+ * profiling option) this can turn on/off profiling, used primarily to limit
+ * profiling to certain areas of the code, such as ingame performance without
+ * regard for loading/shutdown performance (-profilegameonly on commandline)
+ */
void Sys_AllowProfiling (qboolean enable);
double Sys_DoubleTime (void);
char *Sys_ConsoleInput (void);
+/// called to yield for a little bit so as not to hog cpu when paused or debugging
void Sys_Sleep(int microseconds);
-// called to yield for a little bit so as
-// not to hog cpu when paused or debugging
+/// Perform Key_Event () callbacks until the input que is empty
void Sys_SendKeyEvents (void);
-// Perform Key_Event () callbacks until the input que is empty
char *Sys_GetClipboardData (void);
//============================================================================
-// World_ClearLink is used for new headnodes
+/// World_ClearLink is used for new headnodes
void World_ClearLink (link_t *l)
{
l->entitynumber = 0;
void World_Init(void);
-// called after the world model has been loaded, before linking any entities
+/// called after the world model has been loaded, before linking any entities
void World_SetSize(world_t *world, const char *filename, const vec3_t mins, const vec3_t maxs);
-// unlinks all entities (used before reallocation of edicts)
+/// unlinks all entities (used before reallocation of edicts)
void World_UnlinkAll(world_t *world);
void World_PrintAreaStats(world_t *world, const char *worldname);
-// call before removing an entity, and before trying to move one,
-// so it doesn't clip against itself
+/// call before removing an entity, and before trying to move one,
+/// so it doesn't clip against itself
void World_UnlinkEdict(struct prvm_edict_s *ent);
-// Needs to be called any time an entity changes origin, mins, maxs
+/// Needs to be called any time an entity changes origin, mins, maxs
void World_LinkEdict(world_t *world, struct prvm_edict_s *ent, const vec3_t mins, const vec3_t maxs);
-// returns list of entities touching a box
+/// \returns list of entities touching a box
int World_EntitiesInBox(world_t *world, const vec3_t mins, const vec3_t maxs, int maxlist, struct prvm_edict_s **list);
#endif