static int CopyLineAtPrompt(char **wk_buf, char *line, unsigned int *cursor, unsigned int *cursor_max) { FREE(*wk_buf); if (line) { wchar_t *wtmp = NULL; //** Copy line to current command buffer, usefull in completion case. *wk_buf = MALLOC(sizeof(char) * strlen(line) + 1); strcpy(*wk_buf, line); backspace(*cursor); /* backspace to beginning of line */ printf("%s", *wk_buf); /* copy to screen */ wtmp = to_wide_string(*wk_buf); *cursor = wcslen(wtmp); /* cursor set at end of line */ FREE(wtmp); /* erase extra characters left over if any */ erase_nchar(GET_MAX(0, (*cursor_max - *cursor))); *cursor_max = *cursor; return 1; } else { *wk_buf = (char*) MALLOC(sizeof(char)); (*wk_buf)[0] = '\0'; } return 0; }
static int CopyLineAtPrompt(char *wk_buf, char *line, unsigned int *cursor, unsigned int *cursor_max) { if (line) { //** Copy line to current command buffer, usefull in completion case. strcpy(wk_buf, line); backspace(*cursor); /* backspace to beginning of line */ printf("%s", wk_buf); /* copy to screen */ *cursor = strlen(wk_buf); /* cursor set at end of line */ /* erase extra characters left over if any */ erase_nchar(GET_MAX(0, (*cursor_max - *cursor))); *cursor_max = *cursor; return 1; } return 0; }
static void TermCompletionOnAll(char *lineBeforeCaret, char *lineAfterCaret, char *defaultPattern, char **wk_buf, unsigned int *cursor, unsigned int *cursor_max) { if (defaultPattern) { int numberWordFound = 0; char **completionDictionaryFunctions = NULL; int sizecompletionDictionaryFunctions = 0; char **completionDictionaryCommandWords = NULL; int sizecompletionDictionaryCommandWords = 0; char **completionDictionaryMacros = NULL; int sizecompletionDictionaryMacros = 0; char **completionDictionaryVariables = NULL; int sizecompletionDictionaryVariables = 0; char **completionDictionaryHandleGraphicsProperties = NULL; int sizecompletionDictionaryHandleGraphicsProperties = 0; char **completionDictionaryFields = NULL; int sizecompletionDictionaryFields = 0; completionDictionaryFields = completionOnFields(lineBeforeCaret, defaultPattern, &sizecompletionDictionaryFields); if (!completionDictionaryFields && strcmp(defaultPattern, "")) { completionDictionaryFunctions = completionOnFunctions(defaultPattern, &sizecompletionDictionaryFunctions); completionDictionaryCommandWords = completionOnCommandWords(defaultPattern, &sizecompletionDictionaryCommandWords); completionDictionaryMacros = completionOnMacros(defaultPattern, &sizecompletionDictionaryMacros); completionDictionaryVariables = completionOnVariablesWithoutMacros(defaultPattern, &sizecompletionDictionaryVariables); completionDictionaryHandleGraphicsProperties = completionOnHandleGraphicsProperties(defaultPattern, &sizecompletionDictionaryHandleGraphicsProperties); } numberWordFound = sizecompletionDictionaryFunctions + sizecompletionDictionaryCommandWords + sizecompletionDictionaryMacros + sizecompletionDictionaryVariables + sizecompletionDictionaryHandleGraphicsProperties + sizecompletionDictionaryFields; if (numberWordFound > 0) { if (numberWordFound == 1) { char **completionDictionary = NULL; char *new_line = NULL; if (completionDictionaryFields) { completionDictionary = completionDictionaryFields; } if (completionDictionaryFunctions) { completionDictionary = completionDictionaryFunctions; } if (completionDictionaryCommandWords) { completionDictionary = completionDictionaryCommandWords; } if (completionDictionaryMacros) { completionDictionary = completionDictionaryMacros; } if (completionDictionaryVariables) { completionDictionary = completionDictionaryVariables; } if (completionDictionaryHandleGraphicsProperties) { completionDictionary = completionDictionaryHandleGraphicsProperties; } new_line = completeLine(lineBeforeCaret, completionDictionary[0], NULL, defaultPattern, FALSE, lineAfterCaret); if (new_line) { char buflinetmp[WK_BUF_SIZE + 1]; strcpy(buflinetmp, new_line); FREE(new_line); backspace(*cursor); erase_nchar(*cursor_max); *cursor = *cursor_max = 0; CopyLineAtPrompt(wk_buf, buflinetmp, cursor, cursor_max); } freeArrayOfString(completionDictionary, 1); } else { char *commonAll = NULL; if (completionDictionaryFields) { commonAll = getCommonPart(completionDictionaryFields, sizecompletionDictionaryFields); displayCompletionDictionary(completionDictionaryFields, sizecompletionDictionaryFields, (char *)_("Scilab Fields")); freeArrayOfString(completionDictionaryFields, sizecompletionDictionaryFields); } else { char *commonFunctions = getCommonPart(completionDictionaryFunctions, sizecompletionDictionaryFunctions); char *commonCommandWords = getCommonPart(completionDictionaryCommandWords, sizecompletionDictionaryCommandWords); char *commonMacros = getCommonPart(completionDictionaryMacros, sizecompletionDictionaryMacros); char *commonVariables = getCommonPart(completionDictionaryVariables, sizecompletionDictionaryVariables); char *commonHandleGraphicsProperties = getCommonPart(completionDictionaryHandleGraphicsProperties, sizecompletionDictionaryHandleGraphicsProperties); int sizecommonsDictionary = 0; char **commonsDictionary = concatenateStrings(&sizecommonsDictionary, commonFunctions, commonMacros, commonCommandWords, commonVariables, commonHandleGraphicsProperties); if (sizecommonsDictionary > 0) { if (sizecommonsDictionary == 1) { commonAll = strdup(commonsDictionary[0]); } else { commonAll = getCommonPart(commonsDictionary, sizecommonsDictionary); } freeArrayOfString(commonsDictionary, sizecommonsDictionary); } displayCompletionDictionary(completionDictionaryFunctions, sizecompletionDictionaryFunctions, (char *)_("Scilab Function")); displayCompletionDictionary(completionDictionaryCommandWords, sizecompletionDictionaryCommandWords, (char *)_("Scilab Command")); displayCompletionDictionary(completionDictionaryMacros, sizecompletionDictionaryMacros, (char *)_("Scilab Macro")); displayCompletionDictionary(completionDictionaryVariables, sizecompletionDictionaryVariables, (char *)_("Scilab Variable")); displayCompletionDictionary(completionDictionaryHandleGraphicsProperties, sizecompletionDictionaryHandleGraphicsProperties, (char *)_("Graphics handle field")); freeArrayOfString(completionDictionaryFunctions, sizecompletionDictionaryFunctions); freeArrayOfString(completionDictionaryCommandWords, sizecompletionDictionaryCommandWords); freeArrayOfString(completionDictionaryMacros, sizecompletionDictionaryMacros); freeArrayOfString(completionDictionaryVariables, sizecompletionDictionaryVariables); freeArrayOfString(completionDictionaryHandleGraphicsProperties, sizecompletionDictionaryHandleGraphicsProperties); } printf("\n"); backspace(*cursor); erase_nchar(*cursor_max); *cursor = *cursor_max = 0; printPrompt(WRITE_PROMPT); if (commonAll) { char *new_line = NULL; new_line = completeLine(lineBeforeCaret, commonAll, NULL, defaultPattern, FALSE, lineAfterCaret); if (new_line) { char buflinetmp[WK_BUF_SIZE + 1]; strcpy(buflinetmp, new_line); FREE(new_line); CopyLineAtPrompt(wk_buf, buflinetmp, cursor, cursor_max); } FREE(commonAll); commonAll = NULL; } } } } }
static void TermCompletionOnFiles(char **dictionaryFiles, int sizedictionaryFiles, char *lineBeforeCaret, char *lineAfterCaret, char *filePattern, char *defaultPattern, char **wk_buf, unsigned int *cursor, unsigned int *cursor_max) { if (dictionaryFiles) { if (sizedictionaryFiles == 1) { char *new_line = completeLine(lineBeforeCaret, dictionaryFiles[0], filePattern, defaultPattern, TRUE, lineAfterCaret); if (new_line) { char buflinetmp[WK_BUF_SIZE + 1]; strcpy(buflinetmp, new_line); FREE(new_line); backspace(*cursor); erase_nchar(*cursor_max); *cursor = *cursor_max = 0; CopyLineAtPrompt(wk_buf, buflinetmp, cursor, cursor_max); return; } } else { char *common = getCommonPart(dictionaryFiles, sizedictionaryFiles); displayCompletionDictionary(dictionaryFiles, sizedictionaryFiles, gettext("File or Directory")); printf("\n"); backspace(*cursor); erase_nchar(*cursor_max); *cursor = *cursor_max = 0; printPrompt(WRITE_PROMPT); if (defaultPattern[0] == 0) { int lennewline = (int)strlen(lineBeforeCaret) + (int)strlen(lineAfterCaret); char *new_line = (char *)MALLOC(sizeof(char) * (lennewline + 1)); if (new_line) { strcpy(new_line, lineBeforeCaret); strcat(new_line, lineAfterCaret); CopyLineAtPrompt(wk_buf, new_line, cursor, cursor_max); FREE(new_line); new_line = NULL; } } else if (common) { char *new_line = completeLine(lineBeforeCaret, common, filePattern, defaultPattern, TRUE, lineAfterCaret); if (new_line) { char buflinetmp[WK_BUF_SIZE + 1]; strcpy(buflinetmp, new_line); FREE(new_line); CopyLineAtPrompt(wk_buf, buflinetmp, cursor, cursor_max); } else { int lennewline = (int)strlen(lineBeforeCaret) + (int)strlen(lineAfterCaret); new_line = (char *)MALLOC(sizeof(char) * (lennewline + 1)); if (new_line) { strcpy(new_line, lineBeforeCaret); strcat(new_line, lineAfterCaret); CopyLineAtPrompt(wk_buf, new_line, cursor, cursor_max); FREE(new_line); new_line = NULL; } } } if (common) { FREE(common); common = NULL; } } } }