mpw/mpw/mpw.cpp

136 lines
2.3 KiB
C++
Raw Normal View History

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
}