/* ==================== Prompt_HistoryDown ==================== */ void Prompt_HistoryDown( commandPrompt_t *prompt ) { int i; Prompt_ClearState( prompt ); if( prompt->historyLineNum == prompt->inputLineNum ) { return; } prompt->historyLineNum++; i = prompt->historyLineNum & HISTORY_MASK; IF_Replace( &prompt->inputLine, prompt->history[i] ); }
void Prompt_CompleteHistory(commandPrompt_t *prompt, qboolean forward) { char *s, *m = NULL; int i, j; if (!prompt->search) { s = prompt->inputLine.text; if (*s == '/' || *s == '\\') { s++; } if (!*s) { return; } prompt->search = Z_CopyString(s); } if (forward) { for (i = prompt->historyLineNum + 1; i < prompt->inputLineNum; i++) { s = prompt->history[i & HISTORY_MASK]; if (s && strstr(s, prompt->search)) { if (strcmp(s, prompt->inputLine.text)) { m = s; break; } } } } else { j = prompt->inputLineNum - HISTORY_SIZE; if (j < 0) { j = 0; } for (i = prompt->historyLineNum - 1; i >= j; i--) { s = prompt->history[i & HISTORY_MASK]; if (s && strstr(s, prompt->search)) { if (strcmp(s, prompt->inputLine.text)) { m = s; break; } } } } if (!m) { return; } prompt->historyLineNum = i; IF_Replace(&prompt->inputLine, prompt->history[i & HISTORY_MASK]); }
/* ==================== Prompt_HistoryUp ==================== */ void Prompt_HistoryUp(commandPrompt_t *prompt) { int i; Prompt_ClearState(prompt); if (prompt->historyLineNum == prompt->inputLineNum) { // save current line in history i = prompt->inputLineNum & HISTORY_MASK; if (prompt->history[i]) { Z_Free(prompt->history[i]); } prompt->history[i] = Z_CopyString(prompt->inputLine.text); } if (prompt->inputLineNum - prompt->historyLineNum < HISTORY_SIZE && prompt->historyLineNum > 0) { prompt->historyLineNum--; } i = prompt->historyLineNum & HISTORY_MASK; IF_Replace(&prompt->inputLine, prompt->history[i]); }