/*--------------------------------------------------------------------------*/ void newLine(void) { reallocLineBuffer(); cur_line[0] = '\0'; cur_pos = 0; max_pos = 0; }
/*--------------------------------------------------------------------------*/ void moveEndLine(void) { reallocLineBuffer(); while (cur_pos < max_pos) { TerminalPutc (cur_line[cur_pos]); cur_pos += 1; } }
/*--------------------------------------------------------------------------*/ void killCurrentPositionToEndLine(void) { int i = 0; reallocLineBuffer(); for (i = cur_pos; i < max_pos; i++) cur_line[i] = '\0'; for (i = cur_pos; i < max_pos; i++) TerminalPutc(VK_SPACE); for (i = cur_pos; i < max_pos; i++) backSpace (); max_pos = cur_pos; }
/*--------------------------------------------------------------------------*/ char *getLineBeforeCaret(void) { char *line = NULL; reallocLineBuffer(); line = os_strdup(cur_line); line[cur_pos] = '\0'; return line; }
/*--------------------------------------------------------------------------*/ void moveBackSingleChar(void) { reallocLineBuffer(); if (cur_pos > 0) { cur_pos -= 1; backSpace(); } }
/*--------------------------------------------------------------------------*/ void moveForwardSingleChar(void) { reallocLineBuffer(); if (cur_pos < max_pos) { TerminalPutc(cur_line[cur_pos]); cur_pos += 1; } }
/*--------------------------------------------------------------------------*/ void moveBeginningLine(void) { reallocLineBuffer(); while (cur_pos > 0) { cur_pos -= 1; backSpace(); } }
/*--------------------------------------------------------------------------*/ void copyLine(char *line) { reallocLineBuffer(); if (line) { TerminalPrintf(line); CharToOem(line, cur_line); cur_pos = max_pos = (int)strlen (cur_line); } }
/*--------------------------------------------------------------------------*/ char *getCurrentLine(void) { char *line = NULL; reallocLineBuffer(); cur_line[max_pos + 1] = '\0'; line = strdup_windows(cur_line); if (line) OemToChar(cur_line, line); return line; }
/*--------------------------------------------------------------------------*/ void deletePreviousChar(void) { reallocLineBuffer(); if (cur_pos > 0) { int i = 0; cur_pos -= 1; backSpace (); for (i = cur_pos; i < max_pos; i++) cur_line[i] = cur_line[i + 1]; max_pos -= 1; refreshLine(); } else TerminalBeep(); }
/*--------------------------------------------------------------------------*/ static void backSpace(void) { int X = 0, Y = 0; reallocLineBuffer(); TermGetPosition(&X, &Y); if ( (X - 1) < 0 ) { X = getXConsoleScreenSize(); Y = Y - 1; TermSetPosition(X, Y); } else TerminalPutc(VK_BACK); }
/*--------------------------------------------------------------------------*/ char *getCurrentLine(void) { char *line = NULL; reallocLineBuffer(); cur_line[max_pos + 1] = '\0'; line = os_strdup(cur_line); if (line) { OemToChar(cur_line, line); } return line; }
/*--------------------------------------------------------------------------*/ void moveForwardSingleWord(void) { reallocLineBuffer(); while ( !isspace(cur_line[cur_pos]) && (cur_pos < max_pos) ) { TerminalPutc(cur_line[cur_pos]); cur_pos++; } while ( isspace(cur_line[cur_pos]) && (cur_pos < max_pos) ) { TerminalPutc(cur_line[cur_pos]); cur_pos++; } refreshLine(); }
/*--------------------------------------------------------------------------*/ void moveBackSingleWord(void) { reallocLineBuffer(); while ((cur_pos > 0) && (isspace(cur_line[cur_pos - 1]) )) { cur_pos -= 1; backSpace (); } while ((cur_pos > 0) && ( !isspace(cur_line[cur_pos - 1]) )) { cur_pos -= 1; backSpace (); } refreshLine(); }
/*--------------------------------------------------------------------------*/ void refreshLine(void) { int i = 0; reallocLineBuffer(); /* write tail of string */ for (i = cur_pos; i < max_pos; i++) TerminalPutc(cur_line[i]); /* write a space at the end of the line in case we deleted one */ TerminalPutc(VK_SPACE); /* backup to original position */ for (i = max_pos + 1; i > cur_pos; i--) backSpace (); }
/*--------------------------------------------------------------------------*/ char *getLineAfterCaret(void) { char *line = NULL; reallocLineBuffer(); if (cur_pos != max_pos) { line = os_strdup(&cur_line[cur_pos]); line[(max_pos - cur_pos) + 1] = '\0'; } else { line = os_strdup(""); } return line; }
/*--------------------------------------------------------------------------*/ void addCharacterCurrentLine(unsigned char ch) { int i = 0; reallocLineBuffer(); for (i = max_pos; i > cur_pos; i--) cur_line[i] = cur_line[i - 1]; cur_line[cur_pos] = ch; cur_pos += 1; max_pos += 1; cur_line[max_pos] = '\0'; setSearchedTokenInScilabHistory(cur_line); if (cur_pos < max_pos) refreshLine(); }
/*--------------------------------------------------------------------------*/ void clearCurrentLine(void) { int i = 0; reallocLineBuffer(); for (i = 0; i < max_pos; i++) cur_line[i] = '\0'; moveBeginningLine(); for (i = 0; i < max_pos; i++) TerminalPutc(VK_SPACE); TerminalPutc('\r'); displayPrompt(); newLine(); }
/*--------------------------------------------------------------------------*/ void killLastWord(void) { reallocLineBuffer(); while ((cur_pos > 0) && (cur_line[cur_pos - 1] == VK_SPACE)) { cur_pos -= 1; backSpace (); } while ((cur_pos > 0) && (cur_line[cur_pos - 1] != VK_SPACE)) { cur_pos -= 1; backSpace (); } killCurrentPositionToEndLine(); }
/*--------------------------------------------------------------------------*/ void deleteCurrentChar(void) { reallocLineBuffer(); if (max_pos == 0) { TerminalBeep(); } else { if (cur_pos < max_pos) { int i =0; for (i = cur_pos; i < max_pos; i++) cur_line[i] = cur_line[i + 1]; max_pos -= 1; refreshLine(); } } }
/*--------------------------------------------------------------------------*/ void moveForwardHistory(void) { char *newline = NULL; reallocLineBuffer(); cur_line[max_pos + 1] = '\0'; if (cur_line[0] == '\0') { resetSearchedTokenInScilabHistory(); setSearchedTokenInScilabHistory(NULL); } newline = getNextLineInScilabHistory(); if (newline) { clearCurrentLine(); copyLine(newline); FREE(newline); newline = NULL; } }