|
version 1.21.2.3, 2025/12/23 23:11:13
|
version 1.21.2.5, 2025/12/24 00:16:40
|
|
Line 84 cli_SetErr(int eno, char *estr, ...)
|
Line 84 cli_SetErr(int eno, char *estr, ...)
|
| // ------------------------------------------------------------ |
// ------------------------------------------------------------ |
| |
|
| static inline void |
static inline void |
| clrscrEOL(linebuffer_t * __restrict buf) | rewindin(linebuffer_t * __restrict buf, int len) |
| { |
{ |
| |
int ign __attribute__((unused)); |
| |
|
| |
if (buf) { |
| |
if (len == -1) |
| |
len = buf->line_posin; |
| |
while (len-- > 0) |
| |
ign = write(buf->line_out, K_CTRL_H, 1); |
| |
} |
| |
} |
| |
|
| |
static inline void |
| |
clrscrEOLin(linebuffer_t * __restrict buf) |
| |
{ |
| register int i; |
register int i; |
| int ign __attribute__((unused)); |
int ign __attribute__((unused)); |
| |
|
| if (buf && buf->line_prompt) { | if (buf) { |
| ign = write(buf->line_out, K_CR, 1); | rewindin(buf, -1); |
| |
|
| for (i = 0; i < buf->line_len; i++) | for (i = 0; i < buf->line_lenin; i++) |
| ign = write(buf->line_out, K_SPACE, 1); |
ign = write(buf->line_out, K_SPACE, 1); |
| } |
} |
| } |
} |
| |
|
| static inline void |
static inline void |
| rewindin(linebuffer_t * __restrict buf, int len) | clrscrEOL(linebuffer_t * __restrict buf) |
| { |
{ |
| |
register int i; |
| int ign __attribute__((unused)); |
int ign __attribute__((unused)); |
| |
|
| if (buf) { | if (buf && buf->line_prompt) { |
| if (len == -1) | ign = write(buf->line_out, K_CR, 1); |
| len = buf->line_posin; | |
| while (len-- > 0) | for (i = 0; i < buf->line_len; i++) |
| ign = write(buf->line_out, K_CTRL_H, 1); | ign = write(buf->line_out, K_SPACE, 1); |
| } |
} |
| } |
} |
| |
|
|
Line 330 bufCLRin(int idx, void * __restrict cli_buffer)
|
Line 344 bufCLRin(int idx, void * __restrict cli_buffer)
|
| if (!cli_buffer || idx < 0 || idx > MAX_BINDKEY) |
if (!cli_buffer || idx < 0 || idx > MAX_BINDKEY) |
| return RETCODE_ERR; |
return RETCODE_ERR; |
| |
|
| memset(buf->line_input, ' ', buf->line_lenin); | clrscrEOLin(buf); |
| rewindin(buf, -1); | rewindin(buf, buf->line_lenin); |
| printfEOLin(buf); | |
| rewindin(buf, -1); | |
| cli_freeInput(cli_buffer); |
cli_freeInput(cli_buffer); |
| return RETCODE_OK; |
return RETCODE_OK; |
| } |
} |
|
Line 352 bufCLR(int idx, void * __restrict cli_buffer)
|
Line 364 bufCLR(int idx, void * __restrict cli_buffer)
|
| } |
} |
| |
|
| static int |
static int |
| |
bufBSin(int idx, void * __restrict cli_buffer) |
| |
{ |
| |
linebuffer_t *buf = cli_buffer; |
| |
|
| |
if (!cli_buffer || idx < 0 || idx > MAX_BINDKEY) |
| |
return RETCODE_ERR; |
| |
|
| |
if (buf->line_posin > 0) { |
| |
clrscrEOLin(buf); |
| |
rewindin(buf, -1); |
| |
|
| |
buf->line_posin--; |
| |
buf->line_lenin--; |
| |
memmove(buf->line_input + buf->line_posin, |
| |
buf->line_input + buf->line_posin + 1, |
| |
buf->line_lenin - buf->line_posin); |
| |
buf->line_input[buf->line_lenin] = 0; |
| |
|
| |
rewindin(buf, buf->line_lenin - buf->line_posin); |
| |
printfEOLin(buf); |
| |
rewindin(buf, buf->line_lenin - buf->line_posin); |
| |
} |
| |
|
| |
return RETCODE_OK; |
| |
} |
| |
|
| |
static int |
| bufBS(int idx, void * __restrict cli_buffer) |
bufBS(int idx, void * __restrict cli_buffer) |
| { |
{ |
| linebuffer_t *buf = cli_buffer; |
linebuffer_t *buf = cli_buffer; |
|
Line 466 bufEND(int idx, void * __restrict cli_buffer)
|
Line 505 bufEND(int idx, void * __restrict cli_buffer)
|
| } |
} |
| |
|
| static int |
static int |
| |
bufLEFTin(int idx, void * __restrict cli_buffer) |
| |
{ |
| |
linebuffer_t *buf = cli_buffer; |
| |
|
| |
if (!cli_buffer || idx < 0 || idx > MAX_BINDKEY) |
| |
return RETCODE_ERR; |
| |
|
| |
if (buf->line_posin > 0) { |
| |
rewindin(buf, 1); |
| |
buf->line_posin--; |
| |
} |
| |
|
| |
return RETCODE_OK; |
| |
} |
| |
|
| |
static int |
| bufLEFT(int idx, void * __restrict cli_buffer) |
bufLEFT(int idx, void * __restrict cli_buffer) |
| { |
{ |
| linebuffer_t *buf = cli_buffer; |
linebuffer_t *buf = cli_buffer; |
|
Line 480 bufLEFT(int idx, void * __restrict cli_buffer)
|
Line 535 bufLEFT(int idx, void * __restrict cli_buffer)
|
| } |
} |
| |
|
| static int |
static int |
| |
bufRIGHTin(int idx, void * __restrict cli_buffer) |
| |
{ |
| |
linebuffer_t *buf = cli_buffer; |
| |
|
| |
if (!cli_buffer || idx < 0 || idx > MAX_BINDKEY) |
| |
return RETCODE_ERR; |
| |
|
| |
if (buf->line_posin < buf->line_lenin) { |
| |
write(buf->line_out, buf->line_input + buf->line_posin, 1); |
| |
buf->line_posin++; |
| |
} |
| |
|
| |
return RETCODE_OK; |
| |
} |
| |
|
| |
static int |
| bufRIGHT(int idx, void * __restrict cli_buffer) |
bufRIGHT(int idx, void * __restrict cli_buffer) |
| { |
{ |
| linebuffer_t *buf = cli_buffer; |
linebuffer_t *buf = cli_buffer; |
|
Line 1224 cliInit(int fin, int fout, const char *prompt)
|
Line 1295 cliInit(int fin, int fout, const char *prompt)
|
| keys[i].key_func = bufEOL; |
keys[i].key_func = bufEOL; |
| inkeys[i].key_func = bufEOLin; |
inkeys[i].key_func = bufEOLin; |
| } |
} |
| if (cli_buffer->line_prompt && (i == *K_CTRL_H || i == *K_BACKSPACE)) | if (i == *K_CTRL_H || i == *K_BACKSPACE) { |
| keys[i].key_func = bufBS; | if (cli_buffer->line_prompt) |
| | keys[i].key_func = bufBS; |
| | inkeys[i].key_func = bufBSin; |
| | } |
| if (i == *K_CTRL_C) { |
if (i == *K_CTRL_C) { |
| keys[i].key_func = bufCLR; |
keys[i].key_func = bufCLR; |
| inkeys[i].key_func = bufCLRin; |
inkeys[i].key_func = bufCLRin; |
|
Line 1402 cliInit(int fin, int fout, const char *prompt)
|
Line 1476 cliInit(int fin, int fout, const char *prompt)
|
| keys[i].key_len = inkeys[i].key_len = sizeof K_RIGHT - 1; |
keys[i].key_len = inkeys[i].key_len = sizeof K_RIGHT - 1; |
| if (cli_buffer->line_prompt) |
if (cli_buffer->line_prompt) |
| keys[i].key_func = bufRIGHT; |
keys[i].key_func = bufRIGHT; |
| |
inkeys[i].key_func = bufRIGHTin; |
| memcpy(keys[i].key_ch, K_RIGHT, keys[i].key_len); |
memcpy(keys[i].key_ch, K_RIGHT, keys[i].key_len); |
| memcpy(inkeys[i].key_ch, K_RIGHT, inkeys[i].key_len); |
memcpy(inkeys[i].key_ch, K_RIGHT, inkeys[i].key_len); |
| i++; |
i++; |
| keys[i].key_len = inkeys[i].key_len = sizeof K_LEFT - 1; |
keys[i].key_len = inkeys[i].key_len = sizeof K_LEFT - 1; |
| if (cli_buffer->line_prompt) |
if (cli_buffer->line_prompt) |
| keys[i].key_func = bufLEFT; |
keys[i].key_func = bufLEFT; |
| |
inkeys[i].key_func = bufLEFTin; |
| memcpy(keys[i].key_ch, K_LEFT, keys[i].key_len); |
memcpy(keys[i].key_ch, K_LEFT, keys[i].key_len); |
| memcpy(inkeys[i].key_ch, K_LEFT, inkeys[i].key_len); |
memcpy(inkeys[i].key_ch, K_LEFT, inkeys[i].key_len); |
| i++; |
i++; |