Index: libmenu/menu_console.c =================================================================== RCS file: /cvsroot/mplayer/main/libmenu/menu_console.c,v retrieving revision 1.1 diff -u -r1.1 menu_console.c --- libmenu/menu_console.c 14 Nov 2002 23:47:11 -0000 1.1 +++ libmenu/menu_console.c 18 Nov 2002 18:20:23 -0000 @@ -142,6 +142,40 @@ break; } } +static char *history[50]; +static int history_index=0, last_hist=0, looking_hist=0; +static void save_history(char *command) { + if(history_index >= 50) + history_index = 0; + history[history_index]=malloc(sizeof(char)*strlen(command)); + history[history_index]=strdup(command); + last_hist=history_index; + looking_hist=history_index+1; + history_index++; +} + +static char *get_hist(int up) { + char *ret = NULL; + int looped = looking_hist; +search_again: + if(up == 1 && looking_hist > last_hist) + return ret; + if(up == -1 || looking_hist < last_hist) + looking_hist+=up; + if(looking_hist >= 0 && looking_hist < 50) { + if(history[looking_hist]) { + ret=strdup(history[looking_hist]); + return ret; + } else { + if(looped==looking_hist) return ret; + goto search_again; + } + } else { + looking_hist= (up==-1)?50:-1; + goto search_again; + } + return ret; +} static void read_key(menu_t* menu,int c) { switch(c) { @@ -152,12 +186,29 @@ menu->show = 0; mpriv->show_ts = 0; return; + case KEY_UP: + case KEY_DOWN: { + char *cmd=get_hist(c==KEY_UP?-1:1); + if (cmd) { + unsigned int i = strlen(mpriv->input); + while(i >= strlen(mpriv->prompt)) + mpriv->input[i--] = '\0'; + i = 0; + while (i < strlen(cmd)) { + mpriv->input[i+strlen(mpriv->prompt)] = cmd[i]; + i++; + } + free(cmd); + } + break; + } case KEY_ENTER: { mp_cmd_t* c = mp_input_parse_cmd(&mpriv->input[strlen(mpriv->prompt)]); add_line(mpriv,mpriv->input); if(!c) add_line(mpriv,"Invalid command try help"); else { + save_history(&mpriv->input[strlen(mpriv->prompt)]); switch(c->id) { case MP_CMD_CHELP: add_line(mpriv,"Mplayer console 0.01");