
struct x_display
{
    struct Window *emacs_win; /* amiga window */
    struct Menu *emacs_menu;
    void *emacs_vi; /* visual info */
    char *emacs_menu_strings; 
};

#define EMACS_WIN(f) (FRAME_DISPLAY(f)->emacs_win)
#define EMACS_MENU(f) (FRAME_DISPLAY(f)->emacs_menu)
#define EMACS_MENU_STRINGS(f) (FRAME_DISPLAY(f)->emacs_menu_strings)
#define EMACS_VI(f) (FRAME_DISPLAY(f)->emacs_vi)

/* Symbols defined in amiga_tty.c */
extern unsigned long inputsig;

/* Prototypes for functions defined in amiga_clipboard.c */
void syms_of_amiga_clipboard(void);
void early_clipboard(void);
void init_clipboard(void);
void cleanup_clipboard(void);

/* Prototypes for functions defined in amiga_dump.c */
void map_out_data(char *fn);
void map_in_data(int load);
extern void *far first_fn, *far last_fn;

/* Prototypes for functions defined in amiga_processes.c */
/* Simulation of unix processes & signals */
int wait_for_termination(int pid);
int wait_without_blocking(void);
char *amiga_path(void);
void init_amiga_processes(void);
void cleanup_amiga_processes(void);

/* Prototypes for functions defined in amiga_rexx.c */
int check_arexx(int force, int kbd);
void init_amiga_rexx(void);
void cleanup_amiga_rexx(void);
void syms_of_amiga_rexx(void);

/* Prototypes for functions defined in amiga_serial.c */
void init_amiga_serial(void);
void cleanup_amiga_serial(void);
void check_serial(int force);
void serial_puts(char *str, int len);
unsigned long serial_baud_rate(void);

/* Prototypes for functions defined in amiga_sysdep.c */
extern int selecting;

int set_exclusive_use(int fd);
int sys_suspend(void);
char *get_system_name(void);
char *expand_path(char *path, char *buf, int len);
int syms_of_amiga(void);
void cleanup_amiga(void);
void amiga_undump_reinit(void);
void *early_xmalloc(long size);
void *early_xrealloc(void *old, long size);

/* Failure stuff */
void wbmessage(char *msg);
void fail(char *cause);
void fail_nomem(void);
void _fail_internal(char *file, int line);
#define fail_internal() _fail_internal(__FILE__, __LINE__);
enum exit_method { use_exit, use_xcexit, use_safe };
extern enum exit_method amiga_fail_exit;

#define MALLOC_HUNK_SIZE 400000 /* Default malloc hunk size */
extern long malloc_hunk_size; /* Amount of memory malloc'ed by a to-be-dumped emacs */
extern long malloc_bytes_used;	/* Amount of this hunk actually used */
extern long far pre_alloc;	/* amount of memory to reserve for emacs */
extern int puresize;		/* Size of pure hunk */

/* Various special values used to find the beginning & end of the text, data,
   bss and malloc segments. */
extern int first_data, last_data, first_bss, last_bss;
extern void first_function(), last_function();
extern char *malloc_hunk;
extern int amiga_initialized;	/* True once Emacs has been undumped or initialised */
struct mem_header		/* sizeof() must be multiple of 4 ! */
{
    struct mem_header *next, *prev;
    long size;
    /* Data follows */
};
extern struct mem_header *free_list;


/* Prototypes for functions defined in amiga_term.c */
int amiga_term_init(void);

#define AMIGASEQ 256 /* When passed to enque, insert the Amiga sequence introducer
		        C-x C-^ */

/* Prototypes for functions defined in amiga_unix.c */
void MemCleanup(void);
void *malloc(unsigned int size);
void free(void *p);
void *calloc(unsigned int, unsigned int);
void *realloc(void *p, unsigned int size);
void emacs_malloc_init(void);
