Prompt support in macros: $[Text].
This commit is contained in:
parent
0bf6dd5766
commit
0959aad655
2 changed files with 46 additions and 9 deletions
48
tts.c
48
tts.c
|
|
@ -741,14 +741,46 @@ input_char(win, c)
|
|||
WINDOW *win;
|
||||
wchar_t *c;
|
||||
{
|
||||
if (macro_pos) {
|
||||
if (*macro_pos) {
|
||||
*c = *macro_pos++;
|
||||
return 0;
|
||||
}
|
||||
free(macro_text);
|
||||
macro_text = macro_pos = NULL;
|
||||
wchar_t *pr, *s, *r;
|
||||
if (!macro_pos)
|
||||
return wget_wch(win, c);
|
||||
|
||||
if (!*macro_pos) {
|
||||
input_macro(NULL);
|
||||
return wget_wch(win, c);
|
||||
}
|
||||
|
||||
return wget_wch(win, c);
|
||||
if (macro_pos[0] != '$' || macro_pos[1] != '[') {
|
||||
*c = *macro_pos++;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Handle $[prompt string] escapes */
|
||||
pr = calloc(sizeof(wchar_t), wcslen(macro_pos) - 1);
|
||||
for (r = pr, s = macro_pos + 2; ; s++) {
|
||||
if (*s == '\0') {
|
||||
cmderr(L"Unterminated $[ prompt in macro");
|
||||
input_macro(NULL);
|
||||
return wget_wch(win, c);
|
||||
}
|
||||
|
||||
if (*s == ']')
|
||||
break;
|
||||
|
||||
*r++ = *s;
|
||||
}
|
||||
|
||||
s++;
|
||||
|
||||
macro_pos = NULL;
|
||||
r = prompt(pr, NULL, NULL);
|
||||
free(pr);
|
||||
|
||||
pr = calloc(sizeof(wchar_t), wcslen(r) + wcslen(s) + 1);
|
||||
wcscpy(pr, r);
|
||||
wcscat(pr, s);
|
||||
free(macro_text);
|
||||
macro_text = macro_pos = pr;
|
||||
*c = *macro_pos++;
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue