Skip to content

Instantly share code, notes, and snippets.

@justinm
Created September 12, 2019 15:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save justinm/a9bf5725e940ba793e5fccb4fdbfb2f9 to your computer and use it in GitHub Desktop.
Save justinm/a9bf5725e940ba793e5fccb4fdbfb2f9 to your computer and use it in GitHub Desktop.
FluffOS Local Options
// This file contains detailed readme for each local_options option.
/****************************************************************************
* EVERY time you change ANYTHING in this file, RECOMPILE from scratch. *
* (type "make clean" then "make" on a UNIX system) Failure to do so may *
* cause the driver to behave oddly. *
****************************************************************************/
#ifndef _LOCAL_OPTIONS_H_
#define _LOCAL_OPTIONS_H_
/* NOTES:
* Many of the configurable options are now set via the configuration file
* that is specified as the first argument to the driver.
* See port.h for those #defines related to portability (compatibility) if
* you have problems compiling on your system.
* Removing an efun from func_spec.c usually removes most, if not all,
* of the code associated with it.
* Note that anything defined in this file is also visible to LPC files
* surrounded by __. So #define FOO in this file defines __FOO__ for
* all LPC files. This allows code like:
*
* #ifdef __SENSIBLE_MODIFIERS__
* ...
*/
/****************************************************************************
* COMPATIBILITY *
* --------------- *
* The MudOS driver and following this the extensions making up the FluffOS *
* driver has evolved quite a bit over the years. These defines are mainly *
* to preserve old behavior in case people didn't want to rewrite the *
* relevant portions of their code. *
* *
* In most cases, code which needs these defines should be rewritten when *
* possible. The 'Compat status' field is designed to give an idea how *
* likely it is that support for that option will be removed in the near *
* future. Certain options are fairly easy to work around, and double *
* the size of the associated code, as well as the maintenance workload, *
* and can make the code significantly more complex or harder to read, so *
* supporting them indefinitely is impractical. *
* *
* WARNING: If you are using software designed to run with the MudOS driver *
* it may assume certain settings of these options. Check the *
* instructions for details. *
****************************************************************************/
/* NO_ADD_ACTION: define this to remove add_action, commands, livings, etc.
* process_input() then becomes the only way to deal with player input.
*
* Compat status: next to impossible to simulate, hard to replace, and
* very, very widely used.
*/
#undef NO_ADD_ACTION
/* NO_SNOOP: disables the snoop() efun and all related functionality.
*/
#undef NO_SNOOP
/* NO_ENVIRONMENT: define this to remove the handling of object containment
* relationships by the driver
*
* Compat status: hard to simulate efficiently, and very widely used.
*/
#undef NO_ENVIRONMENT
/* NO_WIZARDS: for historical reasons, MudOS used to keep track of who
* is and isn't a wizard. Defining this removes that completely.
* If this is defined, the wizardp() and related efuns don't exist.
*
* Also note that if it is not defined, then non-wizards are always put
* in restricted mode when ed() is used, regardless of the setting of
* the restrict parameter.
*
* Compat status: easy to simulate and dated.
*/
#undef NO_WIZARDS
/* NO_LIGHT: define this to disable the set_light() and driver maintenance
* of light levels in objects. You can simulate it via LPC if you want...
*
* Compat status: Very dated, easy to simulate, and gross.
*/
#undef NO_LIGHT
/* OLD_ED: ed() efun backwards compatible with the old version. The new
* version requires/allows a mudlib front end.
*
* Compat status: Easily simulated.
*/
#define OLD_ED
/* In ed auto-indent,
* 1) does the case line get indented after the switch() ?
* 2) How far do we indent? (this can also be set in the mudlib)
*/
#undef ED_INDENT_CASE
#define ED_INDENT_SPACES 4
/* use tab's for auto-indent? */
#undef ED_USE_TABS
/* every which column is a tab stop? */
#define ED_TAB_WIDTH 8
/* RECEIVE_ED: define this if you want normal ed output to go to a
* receive_ed() apply in the player ob. Some errors still go directly
* to output. Useful for post-processing (perhaps colorizing?) ed
* output. Prototype: mixed receive_ed(string txt, string fname);
* If fname, return a string that ed will output, 0 to let ed handle
* the output in the default way, or 1 to handle the output yourself.
* If fname == 0, output is help text and you may return any of the above
* or an array of strings that will be more'ed.
* This works wirh OLD_ED enabled only!!!
*/
#undef RECEIVE_ED
/* RESTRICTED_ED: define this if you want restricted ed mode enabled.
*/
#define RESTRICTED_ED
/* SENSIBLE_MODIFIERS:
* Turning this on changes a few things, which may break old code:
*
* (1) 'static' is not recognized; either 'nosave' or 'protected' must
* be used instead.
* (2) The old meaning of 'public' is no longer allowed. Explicit
* functions must be defined at each level to allow access to
* privately inherited functions.
* (3) 'public' now means the default visibility. Previously there was
* no keyword that meant this (before you ask, 'public' meant something
* else, and if you don't know that, you probably don't have any reason
* to care about the old meaning).
*/
#undef SENSIBLE_MODIFIERS
/****************************************************************************
* MISCELLANEOUS *
* --------------- *
* Various options that affect the way the driver behaves. *
* *
* WARNING: If you are using software designed to run with the MudOS driver *
* it may assume certain settings of these options. Check the *
* instructions for details. *
****************************************************************************/
/*
* Define this in order to use Fermat@Equilibria's MD5 based crypt() instead
* of the operating system's. It has the advantage of giving the same value
* on all architectures, and being stronger than the standard UNIX crypt().
*
* Consider use PACKAGE_CRYPTO instead.
*/
#define CUSTOM_CRYPT
/*
* Some minor tweaks that make it a bit easier to run code designed to run
* on LPmud 3.2/3.2.1. Currently has the following effects:
*
* . m_indices() and m_values() are synonyms for keys() and values(),
* respectively
* . map_delete() returns it's first argument
* . inherit_list() means deep_inherit_list(), not shallow_inherit_list()
* . heart_beat_info() is a synonym for heart_beats()
*/
#undef COMPAT_32
/* DEFAULT_PRAGMAS: This should be a sum of pragmas you want to always
* be on, i.e.
*
* #define DEFAULT_PRAGMAS PRAGMA_STRICT_TYPES + PRAGMA_SAVE_TYPES
*
* will make every LPC file behave as if it had the lines:
* #pragma strict_types
* #pragma save_types
*
* for no default pragmas:
* #define DEFAULT_PRAGMAS 0
*
* If you don't know what these are, 0 is a good choice.
*
* Supported pragmas:
* PRAGMA_STRICT_TYPES: enforces strict type checking
* PRAGMA_WARNINGS: issues warnings about various dangerous things in
* your code
* PRAGMA_SAVE_TYPES: save the types of function arguments for checking
* calls to functions in this object by objects that
* inherit it.
* PRAGMA_OPTIMIZE: make a second pass over the generated code to
* optimize it further.
* PRAGMA_ERROR_CONTEXT:include some text telling where on the line a
* compilation error occured.
*/
#define DEFAULT_PRAGMAS PRAGMA_SAVE_TYPES + PRAGMA_ERROR_CONTEXT + PRAGMA_OPTIMIZE
/* SAVE_EXTENSION: defines the file extension used by save_object().
* and restore_object(). Some sysadmins run scripts that periodically
* scan for and remove files ending in .o (but many mudlibs are already
* set up to use .o thus we leave .o as the default).
* If you are changing this and using the builtin compression via
* PACKAGE_COMPRESS you might want to change SAVE_GZ_EXTENSION below too.
*/
#define SAVE_EXTENSION ".o"
/* PRIVS: define this if you want object privileges. Your mudlib must
* explicitly make use of this functionality to be useful. Defining this
* this will increase the size of the object structure by 4 bytes (8 bytes
* on the DEC Alpha) and will add a new master apply during object creation
* to "privs_file". In general, privileges can be used to increase the
* granularity of security beyond the current root uid mechanism.
*
* [NOTE: for those who'd rather do such things at the mudlib level, look at
* the inherits() efun and the 'valid_object' apply to master.]
*/
#undef PRIVS
/* NO_SHADOWS: define this if you want to disable shadows in your driver.
*/
#undef NO_SHADOWS
/* USE_ICONV: Use iconv to translate input and output from/to the users char
* encoding
*/
#undef USE_ICONV
/* IPV6: Use IP version 6 instead of 4, for most people the only difference
* will be that numerical IP addresses get ::ffff: added in front.*/
#undef IPV6
/* static user space dtrace probes, try them if you have dtrace! */
#undef DTRACE
/****************************************************************************
* PACKAGES *
* -------- *
* Defining some/all of the following add certain efuns, and sometimes *
* add/remove code from the driver. *
* *
* if PACKAGE_XYZZY is defined here, then the code in packages/xyzzy.c *
* and the efuns in packages/xyzzy_spec.c will be added to the driver. *
****************************************************************************/
/* base packages, you don't want to undef these two */
#define PACKAGE_OPS
#define PACKAGE_CORE
/* various miscellaneous efuns */
#define PACKAGE_CONTRIB
/* efuns that are only of use to those that know something about driver
internals */
#define PACKAGE_DEVELOP
/* PACKAGE_MATH: determines whether or not the math efuns (for floats) are
included.
*/
#define PACKAGE_MATH
/* PACKAGE_MATRIX: determines whether or not the 3d graphics efuns (for floats)
* are included - see packages/matrix.spec for a list.
*/
#undef PACKAGE_MATRIX
/* PACKAGE_MUDLIB_STATS: define this to enable domain and author stats
* maintenance by the driver. These mudlib stats are more domain
* based than user based, and replaces the traditional wiz_list stats.
*/
#define PACKAGE_MUDLIB_STATS
/* PACKAGE_SOCKETS: define this to enable the socket efunctions. This
* causes HAS_SOCKETS to be defined for all LPC objects.
*/
#define PACKAGE_SOCKETS
/* PACKAGE_PARSER: Natural language parsing efuns for interactive fiction
* type applications
*/
#undef PACKAGE_PARSER
/* PACKAGE_EXTERNAL: Allows the driver to exec() commands specified in the
* config file.
*/
#define PACKAGE_EXTERNAL
/* PACKAGE_DB: efuns for external database access using msql */
#undef PACKAGE_DB
/* If PACKAGE_DB is defined above, you must pick at least one of the following supported
* databases
*
* ATTENTION:
* no two choices must use the same number and if more then one type is
* choosen the mudlib should provide a corresponding headerfile for use with
* efun::db_connect()
*/
#ifdef PACKAGE_DB
#define USE_MYSQL 1
#undef USE_MSQL
#undef USE_POSTGRES
#undef USE_SQLITE3
#define DEFAULT_DB USE_MYSQL
#endif
/*PACKAGE_ASYNC: adds some efuns for asyncronous IO */
#define PACKAGE_ASYNC
/*PACKAGE_SHA1: adds a function to calculate the sha1 hash of a string
* sha1(string). Use PACKAGE_CRYPTO instead if possible. */
#define PACKAGE_SHA1
/*PACKAGE_CRYPTO: adds a function that does multiple hash types hash(hash,
* string), needs openssl lib and includes and -lssl in system_libs*/
#undef PACKAGE_CRYPTO
/*
PACKAGE_TRIM: efuns for remove leading / trailing whitepsaces (or chars in
provided charset)
Functions:
- trim: Remove leading and trailing whitespaces (or in provided charset).
Example:
- " my test " : "my test"
- ltrim: Remove leading whitespaces (and others).
Example:
- " my test " : "my test "
- rtrim: Remove trailing whitespaces (and others).
Example:
- " my test " : " my test"
Characters that remove by default: isspace() == 1, which is:
' ' (0x20) space (SPC)
'\t' (0x09) horizontal tab (TAB)
'\n' (0x0a) newline (LF)
'\v' (0x0b) vertical tab (VT)
'\f' (0x0c) feed (FF)
'\r' (0x0d) carriage return (CR)
*/
#define PACKAGE_TRIM
/*
PACKAGE PCRE:
efuns for perl compatible regular expressionsi
*/
#define PACKAGE_PCRE
/*PACKAGE DWLIB: some discworld mudlib simuls coded in C (well just one right
now) */
#undef PACKAGE_DWLIB
/****************************************************************************
* UID PACKAGE *
* ----------- *
* UIDS are the basis for some mudlib security systems. Basically, they're *
* preserved for backwards compatibility, as several ways of breaking *
* almost any system which relies on them are known. (No, it's not a flaw *
* of uids; only that b/c of the ease with which LPC objects can call *
* each other, it's far too easy to leave holes) *
* *
* If you don't care about security, the first option is probably what you *
* want. *
****************************************************************************/
/*
* PACKAGE_UIDS: define this if you want a driver that does use uids.
*
*/
#define PACKAGE_UIDS
#ifdef PACKAGE_UIDS
/* AUTO_SETEUID: when an object is created it's euid is automatically set to
* the equivalent of seteuid(getuid(this_object())). undef AUTO_SETEUID
* if you would rather have the euid of the created object be set to 0.
*/
#define AUTO_SETEUID
/* AUTO_TRUST_BACKBONE: define this if you want objects with the backbone
* uid to automatically be trusted and to have their euid set to the uid of
* the object that forced the object's creation.
*/
#define AUTO_TRUST_BACKBONE
#endif
/* PACKAGE_COMPRESS: Enable MCCP support and compressed save files
SAVE_GZ_EXTENSION: save extension for compressed files
*/
#define PACKAGE_COMPRESS
#define SAVE_GZ_EXTENSION ".o.gz"
#undef PACKAGE_THREAD
#define PACKAGE_MATRIX
#define HAS_STATUS_TYPE
#endif /* _LOCAL_OPTIONS_H_ */
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment