2013-02-16 20:37:37 +00:00
|
|
|
#include "mpw.h"
|
|
|
|
#include "mpw_errno.h"
|
|
|
|
#include "mpw_internal.h"
|
|
|
|
|
|
|
|
#include <vector>
|
|
|
|
|
2013-02-12 01:59:15 +00:00
|
|
|
#include <cstdint>
|
|
|
|
#include <cstdio>
|
|
|
|
#include <cerrno>
|
|
|
|
|
2013-02-16 20:37:37 +00:00
|
|
|
#include <stdlib.h>
|
2013-02-11 01:18:47 +00:00
|
|
|
#include <unistd.h>
|
|
|
|
|
|
|
|
|
2013-02-16 20:37:37 +00:00
|
|
|
#include <cpu/defs.h>
|
|
|
|
#include <cpu/fmem.h>
|
|
|
|
#include <cpu/cpuModule.h>
|
2013-02-11 01:18:47 +00:00
|
|
|
|
|
|
|
|
2013-02-16 20:37:37 +00:00
|
|
|
namespace MPW { namespace Internal {
|
2013-02-11 01:18:47 +00:00
|
|
|
|
2013-02-16 20:37:37 +00:00
|
|
|
// for dup counts, etc.
|
|
|
|
std::vector<int> FDTable;
|
2013-02-11 01:18:47 +00:00
|
|
|
|
2013-02-16 20:37:37 +00:00
|
|
|
} }
|
2013-02-11 01:18:47 +00:00
|
|
|
|
2013-02-12 01:59:15 +00:00
|
|
|
|
2013-02-16 20:37:37 +00:00
|
|
|
namespace MPW
|
|
|
|
{
|
|
|
|
using namespace Internal;
|
2013-02-13 03:34:56 +00:00
|
|
|
|
|
|
|
int errno_to_errno(int xerrno)
|
2013-02-12 01:59:15 +00:00
|
|
|
{
|
|
|
|
switch (xerrno)
|
|
|
|
{
|
|
|
|
case EPERM: return kEPERM;
|
|
|
|
case ENOENT: return kENOENT;
|
|
|
|
|
|
|
|
#ifdef ENORSRC
|
|
|
|
case ENORSRC: return kENORSRC;
|
|
|
|
#endif
|
|
|
|
|
|
|
|
case EINTR: return kEINTR;
|
|
|
|
case EIO: return kEIO;
|
|
|
|
case ENXIO: return kENXIO;
|
|
|
|
case E2BIG: return kE2BIG;
|
|
|
|
case ENOEXEC: return kENOEXEC;
|
|
|
|
case EBADF: return kEBADF;
|
|
|
|
case ECHILD: return kECHILD;
|
|
|
|
case EAGAIN: return kEAGAIN;
|
|
|
|
case ENOMEM: return kENOMEM;
|
|
|
|
case EACCES: return kEACCES;
|
|
|
|
case EFAULT: return kEFAULT;
|
|
|
|
case ENOTBLK: return kENOTBLK;
|
|
|
|
case EBUSY: return kEBUSY;
|
|
|
|
case EEXIST: return kEEXIST;
|
|
|
|
case EXDEV: return kEXDEV;
|
|
|
|
case ENODEV: return kENODEV;
|
|
|
|
case ENOTDIR: return kENOTDIR;
|
|
|
|
case EISDIR: return kEISDIR;
|
|
|
|
case EINVAL: return kEINVAL;
|
|
|
|
case ENFILE: return kENFILE;
|
|
|
|
case EMFILE: return kEMFILE;
|
|
|
|
case ENOTTY: return kENOTTY;
|
|
|
|
case ETXTBSY: return kETXTBSY;
|
|
|
|
case EFBIG: return kEFBIG;
|
|
|
|
case ENOSPC: return kENOSPC;
|
|
|
|
case ESPIPE: return kESPIPE;
|
|
|
|
case EROFS: return kEROFS;
|
|
|
|
case EMLINK: return kEMLINK;
|
|
|
|
case EPIPE: return kEPIPE;
|
|
|
|
case EDOM: return kEDOM;
|
|
|
|
case ERANGE: return kERANGE;
|
|
|
|
}
|
|
|
|
return kEINVAL;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2013-02-16 20:37:37 +00:00
|
|
|
void Init()
|
2013-02-16 04:47:15 +00:00
|
|
|
{
|
2013-02-16 20:37:37 +00:00
|
|
|
FDTable.resize(16);
|
2013-02-16 04:47:15 +00:00
|
|
|
|
2013-02-16 20:37:37 +00:00
|
|
|
FDTable[STDIN_FILENO] = 1;
|
|
|
|
FDTable[STDOUT_FILENO] = 1;
|
|
|
|
FDTable[STDERR_FILENO] = 1;
|
2013-02-16 04:47:15 +00:00
|
|
|
|
2013-02-16 20:37:37 +00:00
|
|
|
// todo -- should eventually set up the mpw environment.
|
2013-02-16 04:47:15 +00:00
|
|
|
}
|
|
|
|
|
2013-02-16 00:03:53 +00:00
|
|
|
|
2013-02-11 01:18:47 +00:00
|
|
|
void ftrap_quit(uint16_t trap)
|
|
|
|
{
|
|
|
|
fprintf(stderr, "%04x Quit()\n", trap);
|
|
|
|
cpuSetStop(true);
|
|
|
|
}
|
|
|
|
|
|
|
|
void dispatch(uint16_t trap)
|
|
|
|
{
|
|
|
|
switch (trap)
|
|
|
|
{
|
|
|
|
case fQuit:
|
2013-02-13 03:34:56 +00:00
|
|
|
case 0xffff:
|
2013-02-11 01:18:47 +00:00
|
|
|
ftrap_quit(trap);
|
|
|
|
break;
|
2013-02-13 03:34:56 +00:00
|
|
|
|
2013-02-11 01:18:47 +00:00
|
|
|
case fAccess:
|
|
|
|
ftrap_access(trap);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case fClose:
|
|
|
|
ftrap_close(trap);
|
|
|
|
break;
|
2013-02-13 03:34:56 +00:00
|
|
|
|
2013-02-11 01:18:47 +00:00
|
|
|
case fRead:
|
|
|
|
ftrap_read(trap);
|
|
|
|
break;
|
2013-02-13 03:34:56 +00:00
|
|
|
|
2013-02-11 01:18:47 +00:00
|
|
|
case fWrite:
|
|
|
|
ftrap_write(trap);
|
|
|
|
break;
|
2013-02-13 03:34:56 +00:00
|
|
|
|
2013-02-11 01:18:47 +00:00
|
|
|
case fIOCtl:
|
|
|
|
ftrap_ioctl(trap);
|
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
fprintf(stderr, "Unsupported f trap: %04x\n", trap);
|
|
|
|
exit(1);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2013-02-16 20:37:37 +00:00
|
|
|
|
2013-02-11 01:18:47 +00:00
|
|
|
}
|