EmberMUD-0.9.40-Pre4/
EmberMUD-0.9.40-Pre4/area/MOBProgs/
EmberMUD-0.9.40-Pre4/area/OBJProgs/
EmberMUD-0.9.40-Pre4/area/ROOMProgs/
EmberMUD-0.9.40-Pre4/clan/
EmberMUD-0.9.40-Pre4/gods/
EmberMUD-0.9.40-Pre4/log/
EmberMUD-0.9.40-Pre4/player/
EmberMUD-0.9.40-Pre4/src/MSVC/
EmberMUD-0.9.40-Pre4/src/Sleep/
EmberMUD-0.9.40-Pre4/src/StartMUD/
EmberMUD-0.9.40-Pre4/src/Win32Common/
#ifndef _OLC_H_
#define _OLC_H_

/***************************************************************************
 *  File: olc.h                                                            *
 *                                                                         *
 *  Much time and thought has gone into this software and you are          *
 *  benefitting.  We hope that you share your changes too.  What goes      *
 *  around, comes around.                                                  *
 *                                                                         *
 *  This code was freely distributed with the The Isles 1.1 source code,   *
 *  and has been used here for OLC - OLC would not be what it is without   *
 *  all the previous coders who released their source code.                *
 *                                                                         *
 ***************************************************************************/
/*
 * This is a header file for all the OLC files.  Feel free to copy it into
 * merc.h if you wish.  Many of these routines may be handy elsewhere in
 * the code.  -Jason Dinkel
 */

/**************************************************************************
 * Mudprogram's (Mobprogram, Objprogram and Roomprogram) originaly 	  *
 * by the SMAUG development team             				  *
 * Ported to EmberMUD by Thanatos and Tyrluk of ToED      		  *
 * (Temple of Eternal Death)    					  *
 * Tyrluk   - morn@telmaron.com or dajy@mindspring.com			  *
 * Thanatos - morn@telmaron.com or jonathan_w._rose@ffic.com              * 
 **************************************************************************/

/*
 * The version info.  Please use this info when reporting bugs.
 * It is displayed in the game by typing 'version' while editing.
 * Do not remove these from the code - by request of Jason Dinkel
 */

#define VERSION	"ILAB Online Creation [Beta 1.0, ROM 2.3 modified]"
#define AUTHOR	"     By Jason(jdinkel@mines.colorado.edu)\n\r" \
                "     Modified for use with ROM 2.3\n\r"        \
                "     By Hans Birkeland (hansbi@ifi.uio.no)"
#define DATE	"     (Apr. 7, 1995 - ROM mod, Apr 16, 1995)"
#define CREDITS "     Original by Surreality(cxw197@psu.edu) and Locke(locke@lm.com)"
#define ADDONS  "     Mudprogram's (Mobprogram, Objprogram and Roomprogram) originaly\n\r" \
		"     by the SMAUG development team\n\r" \
		"     Ported to EmberMUD by Thanatos and Tyrluk of ToED\n\r"  \
		"     (Temple of Eternal Death)\n\r"  \
		"     Tyrluk   - morn@telmaron.com or dajy@mindspring.com\n\r" \
		"     Thanatos - morn@telmaron.com or jonathan_w._rose@ffic.com "



/*
 * New typedefs.
 */
typedef	bool OLC_FUN		args( ( CHAR_DATA *ch, char *argument ) );
#define DECLARE_OLC_FUN( fun )	OLC_FUN    fun


/* Command procedures needed ROM OLC */
DECLARE_DO_FUN(    do_help    );
DECLARE_SPELL_FUN( spell_null );





/*
 * Connected states for editor.
 */
#define ED_AREA 	1
#define ED_ROOM 	2
#define ED_OBJECT 	3
#define ED_MOBILE 	4
#define ED_TODO 	5
#define ED_HELP 	6
#define ED_MPROG	7
#define ED_RPROG	8
#define ED_OPROG	9
#define ED_CLAN 10


/*
 * Interpreter Prototypes
 */
void    aedit           args( ( CHAR_DATA *ch, char *argument ) );
void    redit           args( ( CHAR_DATA *ch, char *argument ) );
void    medit           args( ( CHAR_DATA *ch, char *argument ) );
void    oedit           args( ( CHAR_DATA *ch, char *argument ) );
void	tedit		args( ( CHAR_DATA *ch, char *argument ) );
void    hedit           args( ( CHAR_DATA *ch, char *argument ) );
void	mpedit		args( ( CHAR_DATA *ch, char *argument ) );
void	rpedit		args( ( CHAR_DATA *ch, char *argument ) );
void	opedit		args( ( CHAR_DATA *ch, char *argument ) );
void  cedit           args( ( CHAR_DATA *ch, char *argument ) );
void  save_clans      args( ( void ) );
void	save_area_list	args( ( void ) );
void	save_area	args( ( AREA_DATA *pArea ) );
void 	save_todos	args( ( void ) );
void    save_helps	args( ( void ) );
char *  fix_string      args( ( const char *str ) );

/*
 * OLC Constants
 */
#define MAX_MOB	1		/* Default maximum number for resetting mobs */



/*
 * Structure for an OLC editor command.
 */
struct olc_cmd_type
{
    char * const	name;
    OLC_FUN *		olc_fun;
};



/*
 * Structure for an OLC editor startup command.
 */
struct	editor_cmd_type
{
    char * const	name;
    DO_FUN *		do_fun;
};



/*
 * Utils.
 */
AREA_DATA *get_vnum_area	args ( ( int vnum ) );
AREA_DATA *get_area_data	args ( ( int vnum ) );
int flag_value			args ( ( const struct flag_type *flag_table,
				         char *argument) );
char *flag_string		args ( ( const struct flag_type *flag_table,
				         int bits ) );
void add_reset			args ( ( ROOM_INDEX_DATA *room, 
				         RESET_DATA *pReset, int index ) );



/*
 * Interpreter Table Prototypes
 */
extern const struct olc_cmd_type	aedit_table[];
extern const struct olc_cmd_type	redit_table[];
extern const struct olc_cmd_type	rpedit_table[];
extern const struct olc_cmd_type	oedit_table[];
extern const struct olc_cmd_type	opedit_table[];
extern const struct olc_cmd_type	medit_table[];
extern const struct olc_cmd_type	mpedit_table[];
extern const struct olc_cmd_type	cedit_table[];

/*
 * Editor Commands.
 */
DECLARE_DO_FUN( do_aedit        );
DECLARE_DO_FUN( do_redit        );
DECLARE_DO_FUN( do_oedit        );
DECLARE_DO_FUN( do_medit        );
DECLARE_DO_FUN( do_mpedit	);
DECLARE_DO_FUN( do_rpedit	);
DECLARE_DO_FUN( do_opedit	);
DECLARE_DO_FUN( do_cedit   );


/*
 * General Functions
 */
bool show_commands		args ( ( CHAR_DATA *ch, char *argument ) );
bool show_help			args ( ( CHAR_DATA *ch, char *argument ) );
bool edit_done			args ( ( CHAR_DATA *ch ) );
bool show_version		args ( ( CHAR_DATA *ch, char *argument ) );



/*
 * Area Editor Prototypes
 */
DECLARE_OLC_FUN( aedit_show		);
DECLARE_OLC_FUN( aedit_create		);
DECLARE_OLC_FUN( aedit_change		);
DECLARE_OLC_FUN( aedit_name		);
DECLARE_OLC_FUN( aedit_file		);
DECLARE_OLC_FUN( aedit_age		);
/* DECLARE_OLC_FUN( aedit_recall	);       ROM OLC */
DECLARE_OLC_FUN( aedit_reset		);
DECLARE_OLC_FUN( aedit_security		);
DECLARE_OLC_FUN( aedit_builder		);
DECLARE_OLC_FUN( aedit_vnum		);
DECLARE_OLC_FUN( aedit_lvnum		);
DECLARE_OLC_FUN( aedit_uvnum		);
DECLARE_OLC_FUN( aedit_rlist		);



/*
 * Room Editor Prototypes
 */
DECLARE_OLC_FUN( redit_show		);
DECLARE_OLC_FUN( redit_create		);
DECLARE_OLC_FUN( redit_name		);
DECLARE_OLC_FUN( redit_desc		);
DECLARE_OLC_FUN( redit_ed		);
DECLARE_OLC_FUN( redit_format		);
DECLARE_OLC_FUN( redit_north		);
DECLARE_OLC_FUN( redit_south		);
DECLARE_OLC_FUN( redit_east		);
DECLARE_OLC_FUN( redit_west		);
DECLARE_OLC_FUN( redit_up		);
DECLARE_OLC_FUN( redit_down		);
DECLARE_OLC_FUN( redit_mreset		);
DECLARE_OLC_FUN( redit_oreset		);
DECLARE_OLC_FUN( redit_mlist		);
DECLARE_OLC_FUN( redit_olist		);
DECLARE_OLC_FUN( redit_mshow		);
DECLARE_OLC_FUN( redit_oshow		);


/*
 * Roomprog Editor Prototypes
 */
DECLARE_OLC_FUN( rpedit_show		);
DECLARE_OLC_FUN( rpedit_add		);
DECLARE_OLC_FUN( rpedit_delete		);
DECLARE_OLC_FUN( rpedit_create		);
DECLARE_OLC_FUN( rpedit_copy		);
DECLARE_OLC_FUN( rpedit_trigger		);
DECLARE_OLC_FUN( rpedit_program		);



/*
 * Object Editor Prototypes
 */
DECLARE_OLC_FUN( oedit_show		);
DECLARE_OLC_FUN( oedit_create		);
DECLARE_OLC_FUN( oedit_name		);
DECLARE_OLC_FUN( oedit_short		);
DECLARE_OLC_FUN( oedit_long		);
DECLARE_OLC_FUN( oedit_addaffect	);
DECLARE_OLC_FUN( oedit_delaffect	);
DECLARE_OLC_FUN( oedit_value0		);
DECLARE_OLC_FUN( oedit_value1		);
DECLARE_OLC_FUN( oedit_value2		);
DECLARE_OLC_FUN( oedit_value3		);
DECLARE_OLC_FUN( oedit_value4		);  /* ROM */
DECLARE_OLC_FUN( oedit_weight		);
DECLARE_OLC_FUN( oedit_cost		);
DECLARE_OLC_FUN( oedit_ed		);
DECLARE_OLC_FUN( oedit_clan		);
DECLARE_OLC_FUN( oedit_extra            );  /* ROM */
DECLARE_OLC_FUN( oedit_wear             );  /* ROM */
DECLARE_OLC_FUN( oedit_type             );  /* ROM */
DECLARE_OLC_FUN( oedit_affect           );  /* ROM */
DECLARE_OLC_FUN( oedit_material		);  /* ROM */
DECLARE_OLC_FUN( oedit_level            );  /* ROM */
DECLARE_OLC_FUN( oedit_condition        );  /* ROM */


/*
 * OBJProg Editor Prototypes
 */
DECLARE_OLC_FUN( opedit_show		);
DECLARE_OLC_FUN( opedit_add		);
DECLARE_OLC_FUN( opedit_delete		);
DECLARE_OLC_FUN( opedit_create		);
DECLARE_OLC_FUN( opedit_copy		);
DECLARE_OLC_FUN( opedit_trigger		);
DECLARE_OLC_FUN( opedit_program		);



/*
 * Mobile Editor Prototypes
 */
DECLARE_OLC_FUN( medit_show		);
DECLARE_OLC_FUN( medit_create		);
DECLARE_OLC_FUN( medit_name		);
DECLARE_OLC_FUN( medit_short		);
DECLARE_OLC_FUN( medit_long		);
DECLARE_OLC_FUN( medit_shop		);
DECLARE_OLC_FUN( medit_desc		);
DECLARE_OLC_FUN( medit_level		);
DECLARE_OLC_FUN( medit_align		);
DECLARE_OLC_FUN( medit_spec		);
DECLARE_OLC_FUN( medit_sex		);  /* ROM */
DECLARE_OLC_FUN( medit_ac		);  /* ROM */
DECLARE_OLC_FUN( medit_act		);  /* ROM */
DECLARE_OLC_FUN( medit_affect		);  /* ROM */
DECLARE_OLC_FUN( medit_form		);  /* ROM */
DECLARE_OLC_FUN( medit_part		);  /* ROM */
DECLARE_OLC_FUN( medit_imm		);  /* ROM */
DECLARE_OLC_FUN( medit_res		);  /* ROM */
DECLARE_OLC_FUN( medit_vuln		);  /* ROM */
DECLARE_OLC_FUN( medit_material		);  /* ROM */
DECLARE_OLC_FUN( medit_off		);  /* ROM */
DECLARE_OLC_FUN( medit_size		);  /* ROM */
DECLARE_OLC_FUN( medit_hitdice		);  /* ROM */
DECLARE_OLC_FUN( medit_manadice		);  /* ROM */
DECLARE_OLC_FUN( medit_damdice		);  /* ROM */
DECLARE_OLC_FUN( medit_damtype		);  /* ROM */
DECLARE_OLC_FUN( medit_race		);  /* ROM */
DECLARE_OLC_FUN( medit_position		);  /* ROM */
DECLARE_OLC_FUN( medit_gold		);  /* ROM */
DECLARE_OLC_FUN( medit_hitroll		);  /* ROM */


/*
 * Mobprog Editor Prototypes
 */
DECLARE_OLC_FUN( mpedit_show		);
DECLARE_OLC_FUN( mpedit_add		);
DECLARE_OLC_FUN( mpedit_delete		);
DECLARE_OLC_FUN( mpedit_create		);
DECLARE_OLC_FUN( mpedit_copy		);
DECLARE_OLC_FUN( mpedit_trigger		);
DECLARE_OLC_FUN( mpedit_program		);

/*
 * Clan stuff!
 */
DECLARE_OLC_FUN( cedit_show 		);
DECLARE_OLC_FUN( cedit_create 	);
DECLARE_OLC_FUN( cedit_name 		);
DECLARE_OLC_FUN( cedit_whoname 	);
DECLARE_OLC_FUN( cedit_rank 		);
DECLARE_OLC_FUN( cedit_cost 		);
DECLARE_OLC_FUN( cedit_members 	);
DECLARE_OLC_FUN( cedit_minlevel 	);
DECLARE_OLC_FUN( cedit_recall 	);
DECLARE_OLC_FUN( cedit_leader 	);
DECLARE_OLC_FUN( cedit_sponsor 	);
DECLARE_OLC_FUN( cedit_joinflags 	);
DECLARE_OLC_FUN( cedit_clanflags 	);

 
/*
 * Macros
 */

#define IS_SWITCHED( ch )       ( ch->desc->original )    /* ROM OLC */

#define IS_BUILDER(ch, Area)	( ( ch->pcdata->security >= Area->security  \
				|| strstr( Area->builders, ch->name )	    \
				|| strstr( Area->builders, "All" ) )	    \
				&& !IS_SWITCHED( ch ) )

#define TOGGLE_BIT(var, bit)    ((var) ^= (bit))

/* Return pointers to what is being edited. */
#define EDIT_MOB(Ch, Mob)	( Mob   = ( MOB_INDEX_DATA *)Ch->desc->pEdit 	)
#define EDIT_OBJ(Ch, Obj)	( Obj   = ( OBJ_INDEX_DATA *)Ch->desc->pEdit 	)
#define EDIT_ROOM(Ch, Room)	( Room  = ( ROOM_INDEX_DATA *)Ch->in_room 	)
#define EDIT_AREA(Ch, Area)	( Area  = ( AREA_DATA *)Ch->desc->pEdit 	)
#define EDIT_MPROG(Ch, Mprog)	( Mprog = ( MOB_INDEX_DATA *)Ch->desc->pEdit 	)
#define EDIT_RPROG(Ch, Rprog)   ( Rprog = ( ROOM_INDEX_DATA *)Ch->in_room 	)	
#define EDIT_OPROG(Ch, Oprog)   ( Oprog = ( OBJ_INDEX_DATA *)Ch->desc->pEdit 	)	
#define EDIT_CLAN(Ch, Clan)	( Clan  = ( CLAN_DATA *)Ch->desc->pEdit )


/*
 * Prototypes
 */
/* mem.c - memory prototypes. */
#define ED	EXTRA_DESCR_DATA
RESET_DATA	*new_reset_data		args ( ( void ) );
void		free_reset_data		args ( ( RESET_DATA *pReset ) );
AREA_DATA	*new_area		args ( ( void ) );
void		free_area		args ( ( AREA_DATA *pArea ) );
EXIT_DATA	*new_exit		args ( ( void ) );
void		free_exit		args ( ( EXIT_DATA *pExit ) );
ED 		*new_extra_descr	args ( ( void ) );
void		free_extra_descr	args ( ( ED *pExtra ) );
ROOM_INDEX_DATA *new_room_index		args ( ( void ) );
void		free_room_index		args ( ( ROOM_INDEX_DATA *pRoom ) );
AFFECT_DATA	*new_affect		args ( ( void ) );
void		free_affect		args ( ( AFFECT_DATA* pAf ) );
SHOP_DATA	*new_shop		args ( ( void ) );
void		free_shop		args ( ( SHOP_DATA *pShop ) );
OBJ_INDEX_DATA	*new_obj_index		args ( ( void ) );
void		free_obj_index		args ( ( OBJ_INDEX_DATA *pObj ) );
MOB_INDEX_DATA	*new_mob_index		args ( ( void ) );
void		free_mob_index		args ( ( MOB_INDEX_DATA *pMob ) );
/* Olc.c */
int		mprog_count		args ( ( MOB_INDEX_DATA *pMob ) );
MPROG_DATA *	edit_mprog		args ( ( CHAR_DATA * ch,
						MOB_INDEX_DATA * pMobProg ) );
void 		show_mprog		args ( ( CHAR_DATA * ch,
						MPROG_DATA * pMobProg ) );
void		delete_mprog		args ( ( CHAR_DATA * ch, int pnum ) );

int		rprog_count		args ( ( ROOM_INDEX_DATA *pRoom ) );
MPROG_DATA *	edit_rprog		args ( ( CHAR_DATA * ch,
						ROOM_INDEX_DATA *pRoomProg ) );
void		delete_rprog		args ( ( CHAR_DATA *ch, int pnum ) ); 
void 		show_rprog		args ( ( CHAR_DATA * ch,
						MPROG_DATA * pRoomProg ) );
int		oprog_count		args ( ( OBJ_INDEX_DATA *pObj ) );
MPROG_DATA *	edit_oprog		args ( ( CHAR_DATA * ch,
						OBJ_INDEX_DATA *pObjProg ) );
void		delete_oprog		args ( ( CHAR_DATA *ch, int pnum ) ); 
void 		show_oprog		args ( ( CHAR_DATA * ch,
						MPROG_DATA * pObjProg ) );	
/* Clan.c */
CLAN_DATA  * new_clan		args ( ( void ) );											
CLAN_DATA  * get_clan		args ( ( int clannum ) );
char *fwrite_flag               args ( ( long flags, char buf[] ) );
void clan_log		args ( ( CLAN_DATA *clan, char *str, ... ) );
					
#undef	ED

#endif