コード例 #1
0
ファイル: readline.c プロジェクト: HarryR/sanos
static int getkey() {
  int ch;

  ch = getchar();
  if (ch < 0) return ch;

  switch (ch) {
    case 0x08: return KEY_BACKSPACE;
    case 0x09: return KEY_TAB;
    case 0x0D: return gettib()->proc->term->type == TERM_CONSOLE ? KEY_ENTER : KEY_UNKNOWN;
    case 0x0A: return gettib()->proc->term->type != TERM_CONSOLE ? KEY_ENTER : KEY_UNKNOWN;
    case 0x04: return KEY_EOF;

    case 0x1B:
      ch = getchar();
      switch (ch) {
        case 0x1B: return KEY_ESC;
        case 0x5B:
          ch = getchar();
          switch (ch) {
            case 0x41: return KEY_UP;
            case 0x42: return KEY_DOWN;
            case 0x43: return KEY_RIGHT;
            case 0x44: return KEY_LEFT;

            default: return KEY_UNKNOWN;
          }
          break;

        default: return KEY_UNKNOWN;
      }
      break;

    case 0x00:
    case 0xE0:
      ch = getchar();
      switch (ch) {
        case 0x47: return KEY_HOME;
        case 0x48: return KEY_UP;
        case 0x4B: return KEY_LEFT;
        case 0x4D: return KEY_RIGHT;
        case 0x4F: return KEY_END;
        case 0x50: return KEY_DOWN;
        case 0x52: return KEY_INS;
        case 0x53: return KEY_DEL;
        case 0x73: return KEY_CTRL_LEFT;
        case 0x74: return KEY_CTRL_RIGHT;
        default: return KEY_UNKNOWN;
      }
      break;

    case 0x7F: return KEY_BACKSPACE;

    default: return ch;
  }
}
コード例 #2
0
ファイル: stdio.c プロジェクト: HarryR/sanos
FILE *__getstdfile(int n) {
  struct process *proc = gettib()->proc;
  struct crtbase *crtbase = (struct crtbase *) proc->crtbase;

  if (!crtbase->stdio_initialized) init_stdio();
  return &crtbase->iob[n];
}
コード例 #3
0
ファイル: stdio.c プロジェクト: HarryR/sanos
static void init_stdio() {
  struct process *proc = gettib()->proc;
  struct crtbase *crtbase = (struct crtbase *) proc->crtbase;

  // Only initialize on first call.
  if (crtbase->stdio_initialized) return;
  if (atomic_increment(&crtbase->stdio_init) == 1) {
    // Set up stdin, stdout, and stderr.
    crtbase->iob[0].file = proc->iob[0];
    crtbase->iob[0].base = crtbase->iob[0].ptr = crtbase->stdinbuf;
    crtbase->iob[0].flag = _IORD | _IOEXTBUF;
    crtbase->iob[0].bufsiz = BUFSIZ;

    crtbase->iob[1].file = proc->iob[1];
    crtbase->iob[1].flag = _IOWR | _IONBF | _IOCRLF;

    crtbase->iob[2].file = proc->iob[2];
    crtbase->iob[2].flag = _IOWR | _IONBF | _IOCRLF;

    atexit(exit_stdio);
    crtbase->stdio_initialized = 1;
  } else {
    // Wait until initialization done.
    while (!crtbase->stdio_initialized) msleep(0);
  }
}
コード例 #4
0
ファイル: wsock32.c プロジェクト: HarryR/sanos
sockapi int __stdcall WSAGetLastError() {
  int err = gettib()->errnum;

  TRACE("WSAGetLastError");
  
  if (err == 0) return 0;
  if (err == EAGAIN) return EWOULDBLOCK + WSAERRBASE;
  if (err == EBADF) return ENOTSOCK + WSAERRBASE;
  if (err < 45) return err + WSAERRBASE;
  if (err < 82) return (err - 10) + WSAERRBASE;
  if (err == EHOSTNOTFOUND) return 1001 + WSAERRBASE;
  if (err == ETRYAGAIN) return 1002 + WSAERRBASE;
  if (err == ENORECOVERY) return 1003 + WSAERRBASE;
  if (err == ENODATA) return 1004 + WSAERRBASE;

  return EIO;
}
コード例 #5
0
ファイル: except.c プロジェクト: HarryR/sanos
void _local_unwind2(MSVCRT_EXCEPTION_FRAME* frame, int trylevel) {
  MSVCRT_EXCEPTION_FRAME *curframe = frame;
  EXCEPTION_FRAME reg;

  //syslog(LOG_DEBUG, "_local_unwind2(%p,%d,%d)",frame, frame->trylevel, trylevel);

  // Register a handler in case of a nested exception
  reg.handler = (PEXCEPTION_HANDLER) msvcrt_nested_handler;
  reg.prev = (PEXCEPTION_FRAME) gettib()->except;
  push_frame(&reg);

  while (frame->trylevel != TRYLEVEL_END && frame->trylevel != trylevel) {
    int curtrylevel = frame->scopetable[frame->trylevel].previousTryLevel;
    curframe = frame;
    curframe->trylevel = curtrylevel;
    if (!frame->scopetable[curtrylevel].lpfnFilter) {
      syslog(LOG_WARNING, "warning: __try block cleanup not implemented - expect crash!");
      // TODO: Remove current frame, set ebp, call frame->scopetable[curtrylevel].lpfnHandler()
    }
  }
  pop_frame(&reg);
}
コード例 #6
0
ファイル: except.c プロジェクト: HarryR/sanos
static __inline EXCEPTION_FRAME *pop_frame(EXCEPTION_FRAME *frame) {
  struct tib *tib = gettib();
  tib->except = (struct xcptrec *) frame->prev;
  return frame->prev;
}
コード例 #7
0
char *fcvt(double arg, int ndigits, int *decpt, int *sign) {
    return cvt(arg, ndigits, decpt, sign, gettib()->cvtbuf, 0);
}