/*********************************************************************** * line editor **********************************************************************/ static void getCommandLine(void) { tmpPrompt = GetTemporaryPrompt(); GetCurrentPrompt(Sci_Prompt); if (__CommandLine) { FREE(__CommandLine); __CommandLine = NULL; } if (getScilabMode() == SCILAB_STD) { /* Send new prompt to Java Console, do not display it */ if (tmpPrompt != NULL) { SetConsolePrompt(tmpPrompt); } else { SetConsolePrompt(Sci_Prompt); } setSearchedTokenInScilabHistory(NULL); /* Call Java Console to get a string */ __CommandLine = strdup(ConsoleRead()); } else { /* Call Term Management for NW and NWNI to get a string */ __CommandLine = getCmdLine(); } }
/*--------------------------------------------------------------------------*/ void putLineSearchedHistory(void) { char *line = NULL; char *token = getCurrentLine(); if (token) { if ( (int)strlen(token) > 1 ) { setSearchedTokenInScilabHistory(&token[1]); line = getNextLineInScilabHistory(); } FREE(token); token = NULL; } clearCurrentLine(); if (line) { copyLine(line); FREE(line); line = NULL; } }
/*--------------------------------------------------------------------------*/ char *TerminalGetString(char *prompt) { if (InitTerm) { InitializeTerminal(); InitTerm = FALSE; } newLine(); setCurrentPrompt(prompt); /* print the prompt */ displayPrompt(); /* initialize history search */ setSearchedTokenInScilabHistory(NULL); for (;;) { unsigned char cur_char = TerminalGetchar(); if (cur_char <= 0) { return NULL; } /* http://bugzilla.scilab.org/show_bug.cgi?id=1052 */ if (ismenu () == 1) { /* Abort current line */ return NULL; } if ( (cur_char == CR_1) || (cur_char == CR_2) ) { if ( isHistorySearch() ) { putLineSearchedHistory(); } else { char *line = getCurrentLine(); TerminalPutc('\n'); appendLineToScilabHistory(line); return line; } } else { TerminalPutc(cur_char); addCharacterCurrentLine(cur_char); } } return NULL; }
/*--------------------------------------------------------------------------*/ 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(); }
SWIGEXPORT jboolean JNICALL Java_org_scilab_modules_history_1manager_HistoryManagementJNI_setSearchedTokenInScilabHistory(JNIEnv *jenv, jclass jcls, jstring jarg1) { jboolean jresult = 0 ; char *arg1 = (char *) 0 ; BOOL result; (void)jenv; (void)jcls; arg1 = 0; if (jarg1) { arg1 = (char *)(*jenv)->GetStringUTFChars(jenv, jarg1, 0); if (!arg1) return 0; } result = setSearchedTokenInScilabHistory(arg1); { if (result) jresult = JNI_TRUE ; else jresult = JNI_FALSE ; } if (arg1) (*jenv)->ReleaseStringUTFChars(jenv, jarg1, (const char *)arg1); return jresult; }
/*--------------------------------------------------------------------------*/ 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; } }