MudOSa4DGD/
MudOSa4DGD/bin/
MudOSa4DGD/data/
MudOSa4DGD/doc/
MudOSa4DGD/doc/driver/
MudOSa4DGD/doc/efun/bitstrings/
MudOSa4DGD/doc/efun/command/
MudOSa4DGD/doc/efun/communication/
MudOSa4DGD/doc/efun/heart_beat/
MudOSa4DGD/doc/efun/interactive/
MudOSa4DGD/doc/efun/inventory/
MudOSa4DGD/doc/efun/living/
MudOSa4DGD/doc/efun/mappings/
MudOSa4DGD/doc/efun/strings/
MudOSa4DGD/doc/efun/uid/
MudOSa4DGD/doc/funs/
MudOSa4DGD/doc/language/
MudOSa4DGD/mudlib/dgd/doc/
MudOSa4DGD/mudlib/dgd/lib/include/dgd/
MudOSa4DGD/mudlib/dgd/lib/std/
MudOSa4DGD/mudlib/dgd/lib/sys/
MudOSa4DGD/mudlib/dgd/log/
MudOSa4DGD/mudlib/log/
MudOSa4DGD/mudlib/std/include/
MudOSa4DGD/mudlib/std/obj/
/*
 * 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