#ifndef _lint_h_
#define _lint_h_

#include <sys/types.h>
#include <unistd.h>
#include "master.h"
/*
 * Some structure forward declarations are needed.
 */
#define DEBUG_CHK_REF	1
#define DEBUG_RESET	2
#define DEBUG_CLEAN_UP	4
#define DEBUG_SWAP	8
#define DEBUG_OUTPUT	16
#define DEBUG_CONNECT	32
#define DEBUG_TELNET	64
#define DEBUG_RESTORE	128
#define DEBUG_OB_REF	256
#define DEBUG_PROG_REF	512
#define DEBUG_LOAD	1024
#define DEBUG_DESTRUCT	2048
#define DEBUG_LIVING	4096
#define DEBUG_COMMAND	8192
#define DEBUG_ADD_ACTION 16384
#define DEBUG_SENTENCE	32768
#define DEBUG_BREAK_POINT 65536

struct program;
struct function;
struct svalue;
struct sockaddr;
struct reloc;
struct object;
struct mapping;
struct vector;

#if (!defined(HAS_MEMMOVE))
#define memmove(a, b, c) bcopy(b, a, c)
#endif

#if defined(__GNUC__) && !defined(lint)
#define INLINE inline
#else
#define INLINE
#endif

#ifdef SOLARIS
#define signal sigset
#define HAS_PREAD
#endif

#ifdef BUFSIZ
#    define PROT_STDIO(x) x
#else /* BUFSIZ */
#    define PROT_STDIO(x) ()
#endif /* BUFSIZ */

#if defined(sun) && defined(__STDC__)
#ifdef BUFSIZ
int fprintf(FILE *, const char *, ...);
int fputs(const char *, FILE *);
int fputc(int, FILE *);
size_t fwrite(const void *, size_t, size_t, FILE *);
size_t fread(void *, size_t, size_t, FILE *);
#endif
int printf(const char *, ...);
int sscanf(const char *, const char *, ...);
void perror(const char *);
#endif

#if !defined(_AIX) && !defined(__osf__) && !defined(_SEQUENT_)
char *malloc (unsigned);
char *realloc (char *, unsigned);
#endif
#if defined(__alpha)
int mkdir (char *, int);
#endif
int fclose PROT_STDIO((FILE *));
int pclose PROT_STDIO((FILE *));
#if !defined(_SEQUENT_)
int atoi (char *);
#endif
#ifndef sgi
void srandom (int);
#endif
int gethostname (char *, int);
void abort (void);
int fflush PROT_STDIO((FILE *));
int fclose PROT_STDIO((FILE *));
#ifndef M_UNIX
#if !defined(sgi) && !defined(_SEQUENT_)
int system (char *);
#endif
#endif
#if !defined(_SEQUENT_)
void qsort (char *, int, int, int (*)());
#endif
int fseek PROT_STDIO((FILE *, long, int));
#ifdef ultrix
int _flsbuf(unsigned char,FILE *);
#else
int _flsbuf();
#endif
int wait (int *);
int pipe (int *);
int dup2 (int, int);
#if !defined(_SEQUENT_)
void free (char *);
#endif
void exit (int);
/* int _exit (int); */
unsigned int alarm (unsigned int);
int close (int);
int _filbuf();
char *crypt (char *, char *);
#ifdef sun
char *_crypt (char *, char *);
#endif

#ifdef DRAND48
double drand48 (void);
void srand48 (long);
#endif
#ifdef RANDOM
long random (void);
#endif

#if !defined(_SEQUENT_)
long strtol (char *, char **, int);
#endif

#ifndef USE_SWAP
#define access_program(prog)
#define access_object(ob)
#else
void access_program(struct program *);
void access_object(struct object *);
#endif
char *get_error_file (char *);
void save_error (char *, char *, char *);
int write_file (char *, char *);
int file_size (char *);
int file_time (char *);
char *check_file_name (char *, int);
void remove_all_players (void);
void backend (void);
char *xalloc (int);
char *tmpalloc (int);
void init_string_space (void);
void error();
void fatal();
void add_message();
void trace_log();
void debug_message();
void debug_message_value (struct svalue *);
int new_call_out (struct object *, unsigned int, unsigned int,
		  int, int, struct vector *);
int add_action (struct svalue *, struct svalue *, int);

void list_files (char *),
enable_commands (int),
load_ob_from_swap (struct object *);
void register_program(struct program*);
int tail (char *);
struct object *get_interactive_object (int);
void enter_object_hash (struct object *);
void remove_object_hash (struct object *);
struct object *lookup_object_hash (char *);
int show_otable_status (int verbose);
void dumpstat (void);
struct vector;
void free_vector (struct vector *);
char *query_load_av (void);
void update_compile_av (int);
struct vector *map_array (
			       struct vector *arr,
			       char *func,
			       struct object *ob,
			       struct svalue *extra
			       );
struct vector *make_unique (struct vector *arr,char *func,
    struct svalue *skipnum);

char *describe_items (struct svalue *arr,char *func,int live);
struct vector *filter_arr (struct vector *arr,char *func,
			    struct object *ob, struct svalue *); 
int match_string (char *, char *);
int set_heart_beat (struct object *, int);
struct object *get_empty_object ();
struct svalue;
void assign_svalue (struct svalue *, struct svalue *);
void assign_svalue_no_free (struct svalue *to, struct svalue *from);
void free_svalue (struct svalue *);
char *make_shared_string (char *);
void free_string (char *);
void add_string_status (char *);
void notify_no_command (void);
void clear_notify (void);
void throw_error (void);
void set_living_name (struct object *,char *);
void remove_living_name (struct object *);
struct object *find_living_object (char *);
int lookup_predef (char *);
void yyerror (char *);
int hashstr (char *, int, int);
int lookup_predef (char *);
char *dump_trace (int);
int parse_command (char *, struct object *);
struct svalue *apply (char *, struct object *, int, int);
INLINE void push_string (char *, int);
void push_number (int);
void push_object (struct object *);
struct object *clone_object (char *);
void init_num_args (void);
int restore_object (struct object *, char *);
int m_restore_object (struct object *, struct mapping *);
struct mapping *m_save_object(struct object *);
void tell_object (struct object *, struct svalue *);
struct vector *slice_array (struct vector *,int,int);
int query_idle (struct object *);
char *implode_string (struct vector *, char *);
struct object *query_snoop (struct object *);
struct vector *all_inventory (struct object *);
struct vector *deep_inventory (struct object *, int);
struct object *environment (struct svalue *);
struct vector *add_array (struct vector *, struct vector *);
char *get_f_name (int);
void startshutdowngame (int);
void set_notify_fail_message (char *);
int swap (struct object *);
int transfer_object (struct object *, struct object *);
struct vector *users (void);
void do_write (struct svalue *);
int remove_call_out (struct object *, char *);
char *create_wizard (char *, char *);
void destruct_object (struct object *);
int set_snoop (struct object *, struct object *);
int new_set_snoop (struct object *, struct object *);
void ed_start (char *, char *, struct object *);
void tell_room (struct object *, struct svalue *, struct vector *);
void shout_string (char *);
int command_for_object (char *, struct object *);
int remove_file (char *);
int print_file (char *, int, int);
int print_call_out_usage (int verbose);
int input_to (char *, int, struct vector *);
int parse (char *, struct svalue *, char *, struct svalue *, int);
struct object *object_present (struct svalue *, struct svalue *);
void add_light (struct object *, int);
int indent_program (char *);
void call_function (struct object *, int , unsigned int, int);
void store_line_number_info (int, int);
void push_constant_string (char *);
int find_status (struct program *, char *, int);
void free_prog (struct program *, int);
char *stat_living_objects (void);
int heart_beat_status (int verbose);
void opcdump (void);
void slow_shut_down (int);
struct vector *allocate_array (int);
void yyerror (char *);
void reset_machine (int);
void clear_state (void);
void load_first_objects (void);
void preload_objects (int);
int random_number (int, int);
void reset_object (struct object *, int);
int replace_interactive (struct object *ob, struct object *obf, char *);
char *get_wiz_name (char *);
char *get_log_file (char *);
int get_current_time (void);
char *time_string (int);
char *process_string (char *, int);
void update_ref_counts_for_players (void);
void count_ref_from_call_outs (void);
void check_a_lot_ref_counts (struct program *);
int shadow_catch_message (struct object *ob, char *str);
struct vector *get_all_call_outs (void);
char *read_file (char *file, int, int);
char *read_bytes (char *file, int, int);
int write_bytes (char *file, int, char *str);
char *add_name (char *str);
char *check_valid_path (char *, struct object *, char *, int);
int get_line_number_if_any (void);
char *get_srccode_position_if_any (void);
void logon (struct object *ob);
struct svalue *apply_master_ob (int, int num_arg);
struct vector *explode_string (char *str, char *del);
char *string_copy (char *);
int find_call_out (struct object *ob, char *fun);
void remove_object_from_stack (struct object *ob);
#if !defined(sgi) && !defined(_SEQUENT_)
int getpeername (int, struct sockaddr *, int *);
#ifndef LINUX
int  shutdown (int, int);
#endif
#endif
void compile_file (void);
void unlink_swap_file();
char *function_exists (char *, struct object *);
void set_inc_list (struct svalue *sv);
int legal_path (char *path);
struct vector *get_dir (char *path);
#if !defined(ultrix) && !defined(M_UNIX) && !defined(sgi) && !defined(NeXT) \
	&& !defined(_SEQUENT_) && !defined(LINUX)
extern int rename (const char *, const char *);
#endif
void get_simul_efun (void);
struct function *find_simul_efun (char *);
char *query_simul_efun_file_name (void);
struct vector *match_regexp (struct vector *v, char *pattern);

#ifdef MUDWHO
void sendmudwhoinfo (void);
void sendmudwhologout (struct object *ob);
int rwhocli_setup (char *server, char *serverpw, char *myname,
			char *comment);
int rwhocli_shutdown (void);
int rwhocli_pingalive (void);
int rwhocli_userlogin (char *uid, char *name, int tim);
int rwhocli_userlogout (char *uid);
#endif /* MUDWHO */
extern char *findstring(char *);
extern char *get_srccode_position(int, struct program *);
#ifdef BINARIES
extern int save_binary(struct program *);
extern int load_binary(FILE *, char *);
#endif

#endif