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(); }
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; } }
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(); } } }
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; } }
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; } }