NAME
        predefined - predefined #defines by the parser

DESCRIPTION
        Several preprocessor macros are pre#defined by the parser,
        to provide information about parser version, compile time
        options and parser invocation options:

        LPC3                       : always defined.
        __LDMUD__                  : always defined.
        __EUIDS__                  : always (for compatibility).
        COMPAT_FLAG                : defined if the driver runs in compat mode.
        __COMPAT_MODE__            : ditto
        __STRICT_EUIDS__           : defined if strict euid usage is enforced.
        __FILENAME_SPACES__        : defined if filenames may contain spaces.

        __MASTER_OBJECT__          : the name of the master object (in compat
                                     mode without leading '/').
        __FILE__                   : the name of the compiled file (in compat
                                     mode without leading '/').
        __LINE__                   : the current line number.
        __FUNCTION__               : the current function name.
        __DIR__                    : the directory path of the compiled file
                                     (in compat mode without leading '/').
        __PATH__(n)                : the directory path of the compiled file
                                     without the <n> trailing elements (in
                                     compat mode without leading '/').
        __VERSION__                : the version string of the driver.
        __VERSION_MAJOR__          : the major version number of the driver.
        __VERSION_MINOR__          : the minor version number of the driver.
        __VERSION_MICRO__          : the micro version number of the driver.
        __VERSION_PATCH__          : the patchlevel of the driver; a 0 here
                                     means 'no patchlevel'.
        __VERSION_COMMITID__       : the commit ID of the source of the driver
                                     (attention: it might be <unknown>, if the
                                     driver was not compiled from a git
                                     repository)
        __VERSION_LOCAL__          : the (optional) LOCAL_LEVEL, the user has
                                     defined.

        __DOMAIN_NAME__            : the domain the host is part of.
        __HOST_IP_NUMBER__         : the hosts IP number (as a string).
        __HOST_NAME__              : the full hostname.
        __MAX_RECURSION__          : the max count of nested function calls
                                     (this is config.h:MAX_USER_TRACE).
        __MAX_EVAL_COST__          : the max evaluation cost.
        __RESET_TIME__             : default interval time between object
                                     resets.
        __CLEANUP_TIME__           : default interval time between object
                                     cleanups.
        __ALARM_TIME__             : the configured timing granularity.
        __HEART_BEAT_INTERVAL__    : the configured heartbeat time.
        __SYNCHRONOUS_HEART_BEAT__ : defined if synchronous heartbeats are
                                     enabled.
        __MAX_COMMAND_LENGTH__     : the maximum length a command can have.
        __EFUN_DEFINED__(name)     : if the efun 'name' exists, this
                                     macro evaluates to " 1 ", else to " 0 ".
        __DRIVER_LOG__             : the name of the default debug.log file
                                     (within the mudlib); undefined if a
                                     different name has been specified on the
                                     commandline.
        __WIZLIST__                : the name of the (mudlib) file from where
                                     the driver read the initial WIZLIST
                                     information. It is undefined if the driver
                                     was configured to not read the
                                     information.

        __MAX_MALLOC__             : the internal upper limit for total memory
                                     usage.
        __INT_MAX__                : the largest integer number.
        __INT_MIN__                : the smallest integer number.
        __FLOAT_MAX__              : the largest (positive) float number.
        __FLOAT_MIN__              : the smallest (positive) float number.

        __LPC_NOSAVE__             : always defined.
        __LPC_STRUCTS__            : always defined.
        __LPC_INLINE_CLOSURES__    : always defined.
        __LPC_ARRAY_CALLS__        : always defined.
        __BOOT_TIME__              : the time() the driver was started.

        If the ERQ is supported, the following macros are defined:

        __ERQ_MAX_SEND__           : the max size of the send buffer.
        __ERQ_MAX_REPLY__          : the max size of the reply buffer.

        The following macros are defined if their associated package
        has been compiled into the driver:

        __IDNA__                   : support for IDNA.
        __IPV6__                   : support for IP v.6.
        __MYSQL__                  : support for mySQL.
        __PGSQL__                  : support for PostgreSQL.
        __SQLITE__                 : support for SQLite 3.
        __XML_DOM__                : support for XML parsing.
        __MCCP__                   : support for MCCP.
                                     http://www.randomly.org/projects/MCCP
        __ALISTS__                 : support for alists.
        __PCRE__                   : support for PCRE (always defined).
        __TLS__                    : support for TLS (internal).
        __GNUTLS__                 : if __TLS__: TLS support provided by
                                     GnuTLS.
        __OPENSSL__                : if __TLS__: TLS support provided by
                                     OpenSSL.
        __GCRYPT__                 : cryptographic routines provided by
                                     libgcrypt.
        __DEPRECATED__             : support for obsolete and deprecated efuns.

HISTORY
        3.2.1 added __DOMAIN_NAME__, __HOST_IP_NUMBER__, __HOST_NAME__,
            __MAX_RECURSION__, __EFUN_DEFINED__().
        3.2.5 added __COMPAT_MODE__, __NATIVE_MODE__, __EUIDS__,
            __ERQ_MAX_SEND__ and __ERQ_MAX_REPLY__.
        3.2.6 added __MAX_EVAL_COST__.
        3.2.7 added __STRICT_EUIDS__ and made __EUIDS__ standard.
        3.2.8 added __IPV6__, __LPC_NOSAVE__, __DIR__, __PATH__().
        3.2.9 added __LDMUD__, __MYSQL__, __DEPRECATED__, __VERSION_MAJOR__,
            __VERSION_MINOR__, __VERSION_MICRO__, __VERSION_PATCH__,
            __INT_MAX__, __INT_MIN__, __FLOAT_MIN__, __FLOAT_MAX__,
            __CATCH_EVAL_COST__, __MASTER_EVAL_COST__, __RESET_TIME__,
            __CLEANUP_TIME__, __DRIVER_LOG__, and __WIZLIST__.
        3.2.10 added __MAX_MALLOC__, __MSDOS_FS__, __LPC_ARRAY_CALLS__
            and __FILENAME_SPACES__.
        3.3 made __LPC_NOSAVE__ always defined and added __ALISTS__,
            __MCCP__, __LPC_STRUCTS__, __LPC_INLINE_CLOSURES__, __PGSQL__,
            __PTHREADS__, __TLS__, __BOOT_TIME__, __ALARM_TIME__,
            __HEART_BEAT_INTERVAL__, __SYNCHRONOUS_HEART_BEAT__, and __PCRE__.
        3.3.713 added __IDNA__, __SQLITE__.
        3.3.714 added __OPENSSL__, __GNUTLS__.
        3.3.718 added __XML_DOM__.
        3.3.719 removed __PTHREADS__, AMIGA, MSDOS_FS, __BEOS__
            and added __GCRYPT__.
        3.3.721 added __FUNCTION__.
        3.5.0 changed __LPC_STRUCTS__, __LPC_INLINE_CLOSURES__,
            __LPC_ARRAY_CALLS__ to be always on.
            removed __ALISTS__

SEE ALSO
        pragma(LPC), preprocessor(LPC)
