static void _cli_history_up(void* a_ctx) { t_cli_ctx *ctx = (t_cli_ctx *)a_ctx; char prompt[12] = {0x00}; if ((ctx->hhead != ctx->htail) && strlen(ctx->history[ctx->hpos])) { memset(ctx->cmd, 0x00, CLI_CMD_BUFFER_SIZE); strcpy(ctx->cmd, ctx->history[ctx->hpos]); ctx->pos = strlen(ctx->cmd); if (!ctx->hpos) ctx->hpos = CLI_CMD_HISTORY_LEN - 1; else ctx->hpos--; snprintf(prompt, sizeof(prompt), "\r\n(%d/%d)", ctx->hpos, CLI_CMD_HISTORY_LEN); CLI_IO_OUTPUT(prompt, strlen(prompt)); CLI_IO_OUTPUT(ctx->cmd, strlen(ctx->cmd)); } } static void _cli_history_down(void* a_ctx) { t_cli_ctx *ctx = (t_cli_ctx *)a_ctx; char prompt[12] = {0x00}; if ((ctx->hhead != ctx->htail) && strlen(ctx->history[ctx->hpos])) { memset(ctx->cmd, 0x00, CLI_CMD_BUFFER_SIZE); ctx->hpos++; ctx->hpos %= CLI_CMD_HISTORY_LEN; strcpy(ctx->cmd, ctx->history[ctx->hpos]); ctx->pos = strlen(ctx->cmd); snprintf(prompt, sizeof(prompt), "\r\n(%d/%d)", ctx->hpos, CLI_CMD_HISTORY_LEN); CLI_IO_OUTPUT(prompt, strlen(prompt)); CLI_IO_OUTPUT(ctx->cmd, strlen(ctx->cmd)); } }