#include <sys/types.h>
#include <sys/mman.h>
#include <fcntl.h>
#ifndef SUN3
#include <osfcn.h>
#endif
#include <stdlib.h>
#include <errno.h>
#include <stdio.h>

#include "arun.h"
#define PAGE 2048

#if defined(SUN3) && !defined(amiga)

extern int sys_nerr;
extern char *sys_errlist[];

char *strerror(error)
     int error;
{
  if (error >= 0 && error < sys_nerr) {
    return (sys_errlist[error]);
  }
  return ("Unknown error");
}
#endif


void amiga_init(void)
{
#if defined(amiga) && defined(NETBSD)
    if (mmap((caddr_t)0,
	     PAGE,
	     PROT_READ | PROT_WRITE,
	     MAP_ANON | MAP_PRIVATE | MAP_FIXED,
	     -1, 0) != (caddr_t)0) {
	panic("can't map page zero: %s", strerror(errno));
    }
    *(void **)4 = exec_init();
    if (mprotect((caddr_t)0, PAGE, PROT_READ)) {
	panic("mprotect: %s", strerror(errno));
    }
#else
    int fd = open("/dev/zero", O_RDWR);
    if (fd < 0 ||
	mmap((caddr_t)0,
	     PAGE,
	     PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED,
	     fd, 0))
	panic("can't map page zero: %s", strerror(errno));
    (void)close(fd);
    *(void **)4 = exec_init();
    if (mprotect((caddr_t)0, PAGE, PROT_READ)) {
      panic("mprotect error: %s", strerror(errno));
    }
#endif
    dos_init();
}
