/*
* mudos.h
*
* Defines wanted MudOS functions and features through macros
*
* (C) Frank Schmidt, Jesus@NorseMUD
*
*/
#ifndef _MUDOS_H
#define _MUDOS_H
/* retrieve wanted configuration for current mudlib */
#include "../../config.h"
/* MudOS types */
#ifdef MUDOS_EXTRA_TYPES
# define public
# define array mixed*
#endif
/* typechecking */
#ifdef MUDOS_TYPEFUNCS
# if 0 /* undefinedp() and nullp() NOT supported */
# define undefinedp(var) (!(var))
# define nullp(var) (!(var))
# endif
# define intp(var) (typeof(var) == T_INT)
# define floatp(var) (typeof(var) == T_FLOAT)
# define stringp(var) (typeof(var) == T_STRING)
# define objectp(var) (typeof(var) == T_OBJECT)
# define arrayp(var) (typeof(var) == T_ARRAY)
# define mapp(var) (typeof(var) == T_MAPPING)
# ifdef MUDOS_EXTRA_TYPEFUNCS
# define pointerp(var) (typeof(var) == T_ARRAY)
# define mappingp(var) (typeof(var) == T_MAPPING)
# endif
#endif /* MUDOS_TYPEFUNCS */
/* type-converters */
#ifdef MUDOS_TYPE_CONV_FUNCS
# define to_int(val) ((int)(val))
# define to_float(val) ((float)(val))
# define atoi(str) ((int)(str))
# define atof(str) ((float)(str))
#endif
/* dimensional type funcs */
#ifdef MUDOS_MAPPING_FUNCS
# define keys(m) (map_indices(m))
# define values(m) (map_values(m))
# define m_sizeof(a) (map_sizeof(a))
#endif
#define map_delete(m,s) ((m)[s]=0)
#define array_delete(a,n) ((a)=(a)[..(n)-1]+(a)[(n)+1..])
#ifndef MUDOS_LIBERAL_SIZEOF /* a_sizeof() will be defined later if not here */
# define a_sizeof(a) sizeof(a)
#endif
/* misc short functions */
#ifdef MUDOS_CLONEP
# define clonep(o) (strsrch(object_name(o),"#") >= 0)
#endif
#ifdef MUDOS_CREATOR
# define creator(o) getuid(o)
#endif
#ifdef MUDOS_DESTRUCT
# define destruct(o) destruct_object(o)
#endif
#ifdef MUDOS_DISABLE_COMMANDS
# define disable_commands() {}
#endif
#ifdef MUDOS_ENABLE_COMMANDS
# define enable_commands() {}
#endif
#ifdef MUDOS_EVAL_COST
# define eval_cost() status()[ST_TICKS]
#endif
#ifdef MUDOS_EXTRACT
# define extract(s,f,t) extract_string((s), (f), (t))
#endif
#ifdef MUDOS_LOWER_CASE
# define lower_case(s) tolower(s)
#endif
#ifdef MUDOS_NEW
# define new(src) clone_object(src)
#endif
#ifdef MUDOS_SLICE_ARRAY
# define slice_array(a,f,t) extract_array((a), (f), (t))
#endif
#ifdef MUDOS_THROW
# define throw(err) error(err)
#endif
/* Master object */
#define master() (MASTER)
/* add_action() and remove_action() */
#ifdef MUDOS_TRIGGER
#define add_action(a, b) { add_trigger((b), (a)); }
#define remove_action(a, b) { remove_trigger((b), (a)); }
#endif
/* file functions */
#ifdef MUDOS_FILEFUNCS
#define cp(f,t) copy_file((f),(t))
#define mkdir(d) make_dir(d)
#define rm(f) remove_file(f)
#define rmdir(d) remove_dir(d)
#define rename(f,t) rename_file((f),(t))
#endif
/* if this_player1() is not defined, it will be now */
#ifdef MUDOS_THIS_PLAYER_1
# define this_player1() this_player(1)
#endif
/* make efun:: to compile properly? (maybe) */
#if 0
# define efun auto
#endif
/*
* function pointers, simulated by macros:
*/
#ifdef MUDOS_FUNCTIONP
/* declare a functionpointer */
#ifndef _FP /* far */
# define _FP(o,f) ({ (o), (f) })
#endif
#ifndef _LFP /* local */
# define _LFP(f) ({ this_object(), (f) })
#endif
/* retrieve object- and function parts from function pointer */
#ifndef _OB
# define _OB(fp) ((fp)[0])
#endif
#ifndef _FUNC
# define _FUNC(fp) ((fp)[1])
#endif
/* the function type */
#ifdef MUDOS_EXTRA_TYPES
# define function mixed*
#endif
#endif /* function pointers */
/* more mudlib specific, userdefined. May contain anything! */
#include "../../userdefined.h"
#endif