/
roa/
roa/lib/boards/
roa/lib/config/
roa/lib/edits/
roa/lib/help/
roa/lib/misc/
roa/lib/plrobjs/
roa/lib/quests/
roa/lib/socials/
roa/lib/www/
roa/lib/www/LEDSign/
roa/lib/www/LEDSign/fonts/
roa/lib/www/LEDSign/scripts/
roa/src/s_inc/
roa/src/sclient/
roa/src/sclient/binary/
roa/src/sclient/text/
roa/src/util/
/************************************************************************
	Realms of Aurealis 		James Rhone aka Vall of RoA

roaolc.h				RoAOLC Header File, v2.1

		******** Heavily modified and expanded ********
		******** 100% Completely Original Code ********
		*** BE AWARE OF ALL RIGHTS AND RESERVATIONS ***
		******** Heavily modified and expanded ********
		******** 100% Completely Original Code ********
		        All rights reserved henceforth. 

    Please note that no guarantees are associated with any code from
Realms of Aurealis.  All code which has been released to the general
public has been done so with an 'as is' pretense.  RoA is based on both
Diku and CircleMUD and ALL licenses from both *MUST* be adhered to as well
as the RoA license.   *** Read, Learn, Understand, Improve ***
*************************************************************************/
#ifndef ROA_ROAOLC_H
#define ROA_ROAOLC_H

// some RoAOLC function prototypes
BOOL olc_perms(chdata *ch, int level_override, int zone);
void menu_title_send(char *menu, chdata *ch);
int do_max_string_arg(chdata *ch, char *prompt, char **return_ptr);
int do_long_string_arg(chdata *ch, char *prompt, char **return_ptr);
int do_var_string_arg(chdata *ch, char *prompt, char **return_ptr, int length);
int do_string_arg(chdata *ch, char *prompt, char **return_ptr, char *suffix);
int toggle_menu(chdata *ch, char *prompt, int *return_ptr, char **strings);
int toggle_menu_long(chdata *ch, char *prompt, long *return_ptr, char **strings);
int get_integer_arg(chdata *ch, char *prompt, void *return_ptr,
		int return_size, int min_value, int max_value);

int get_integer_list(chdata *ch, char *prompt, void *return_ptr,
		 int return_size, char **strings);

int menu_push(chdata *ch);
int menu_pop(chdata *ch);
int menu_jump(chdata *ch, void (*roaolc_menu)(struct char_data *ch, char *input_str)); 
int menu_push_jump(chdata *ch, void (*roaolc_menu)(struct char_data *ch, char *input_str)); 
int menu_back(chdata *ch);

#define ROA_MENU(menu) void menu(chdata *ch, char *input_str)

ROA_MENU(menu_long_string);
ROA_MENU(menu_string);
ROA_MENU(menu_toggle_bits);
ROA_MENU(menu_toggle_bits_long);
ROA_MENU(menu_get_integer);

// RoAOLC structure declarations
struct menu_get_integer_arg
{
  int min;
  int max;
  int size;
  void *return_ptr;
  char **strings;
  int n_strings;
  int offset;
};

struct menu_toggle_bits_arg
{
  int *bit_field;
  char **bit_strs;
  int n_bit_strs;
};

struct menu_toggle_bits_long_arg
{
  long *bit_field;
  char **bit_strs;
  int n_bit_strs;
};

struct menu_string_arg
{
  char **return_ptr;
  char *suffix;
};

// RoAOLC defines / MACROS
#define GET_INTEGER_ARG(c,p,v,l,u) get_integer_arg(c, p, &(v), sizeof(v), l, u)
#define ROOM_EDITTED(ch) 	((ch)->pc_specials->room_editted)
#define MOB_EDITTED(ch)  	((ch)->pc_specials->mob_editted)
#define OBJ_EDITTED(ch)  	((ch)->pc_specials->obj_editted)
#define ZONE_EDITTED(ch)  	((ch)->pc_specials->zone_editted)
#define SOCIAL_EDITTED(ch)  	((ch)->pc_specials->social_editted)
#define PLS_EDITTED(ch) 	((ch)->pc_specials->pl_editted)
#define MENU_HANDLER(ch) 	((ch)->desc->roaolc_menu)
#define MENU_DEPTH(ch)		((ch)->desc->menu_depth)
#define MENU_HANDLER_ARG(ch)	((ch)->desc->menu_handler_arg)
#define MENU_PROMPT(ch)		((ch)->desc->menu_prompt)
#define MENU_PROMPT_BUF(ch)	((ch)->desc->menu_prompt_buf)
#define MENU_RETURN(ch)		((ch)->desc->menu_return)

#endif /* ROA_ROAOLC_H */