Ejemplo n.º 1
0
void sj_prompt_init(struct v7 *v7) {
  memset(&s_sjp, 0, sizeof(s_sjp));

  /* TODO(alashkin): load cfg from flash */
  s_sjp.v7 = v7;

  retarget_putc('\n');
  show_prompt();
}
Ejemplo n.º 2
0
static void process_prompt_char(char ch) {
  if (s_sjp.swallow > 0) {
    s_sjp.swallow--;
    s_sjp.pos--;
    return;
  }

  switch (ch) {
    /*
     * swallow cursor movement escape sequences (and other 3 byte sequences)
     * they are fairly common in random user input and some serial terminals
     * will just move the cursor around if echoed, confusing users.
     */
    case 0x1b:
      s_sjp.swallow = 2;
      break;
    case 0x7f:
    case 0x08:
      s_sjp.pos--; /* Swallow BS itself. */
      if (s_sjp.pos > 0) {
        s_sjp.pos--;
        /* \b only moves the cursor left, let's also clear the char */
        retarget_puts("\b \b");
      }
      s_sjp.buf[s_sjp.pos] = '\0';
      break;
    case '\n':
#ifndef SJ_PROMPT_DISABLE_ECHO
      retarget_putc('\n');
#endif
      s_sjp.pos--;
      s_sjp.buf[s_sjp.pos] = '\0';
      process_command(s_sjp.buf);
      s_sjp.pos = 0;
      break;
    case '\r':
      break;
    default:
#ifndef SJ_PROMPT_DISABLE_ECHO
      retarget_putc(ch); /* echo */
#endif
      break;
  }
}
Ejemplo n.º 3
0
static void process_here_char(char ch) {
  retarget_putc(ch);

  if ((s_sjp.pos >= 7 &&
       strncmp(&s_sjp.buf[s_sjp.pos - 7], "\r\nEOF\r\n", 7) == 0) ||
      (s_sjp.pos >= 5 &&
       (strncmp(&s_sjp.buf[s_sjp.pos - 5], "\nEOF\n", 5) == 0 ||
        strncmp(&s_sjp.buf[s_sjp.pos - 5], "\rEOF\r", 5) == 0))) {
    int end_pos = s_sjp.pos - (s_sjp.buf[s_sjp.pos - 2] == '\r' ? 7 : 5);
    s_sjp.buf[end_pos] = '\0';
    retarget_putc('\n');
    process_js(s_sjp.buf);
    show_prompt();
  } else {
    if (s_sjp.pos >= RX_BUFSIZE) {
      retarget_puts("Input too long\n");
      show_prompt();
    }
  }
}
Ejemplo n.º 4
0
extern int _write(int file, char* ptr, int len)
{
    if(file < 3) {
        int i;

        for(i = 0; i < len; i++) {
            retarget_putc(*ptr);
            ptr++;
        }
        return len;
    } else {
        VMUINT written_bytes;

        vm_fs_write(file, ptr, len, &written_bytes);
        LOG("_write(%d, %s, %d, %d)\n", file, ptr, len, written_bytes);
        return written_bytes;
    }
}
Ejemplo n.º 5
0
extern int _write( int file, char *ptr, int len )
{
    if (file < 3) {
        int i;

        for (i = 0; i < len; i++) {
            retarget_putc(*ptr);
            ptr++;
        }
        return len ;
    } else {
        VMUINT written_bytes;

        vm_file_write(file, ptr, len, &written_bytes);

        // printf("_write() - file: %d, content: %s, len: %d, written: %d\n", file, ptr, len, written_bytes);
        return written_bytes;
    }
}