Command buffer, limit is 9, I think
This commit is contained in:
parent
c6db32f829
commit
bcbcb0063b
@ -3809,8 +3809,15 @@ void open_link(char *uri) {
|
|||||||
printf("Cannot open browser\n");
|
printf("Cannot open browser\n");
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
struct command_history {
|
||||||
|
void *prev_command;
|
||||||
|
char *command;
|
||||||
|
};
|
||||||
|
typedef struct command_history command_history;
|
||||||
|
command_history *last_command = NULL;
|
||||||
char *console_ui(pixel *vid_buf,char error[255]) { //TODO: error messages, show previous commands
|
char *console_ui(pixel *vid_buf,char error[255]) { //TODO: error messages, show previous commands
|
||||||
int mx,my,b,bq;
|
int mx,my,b,bq,cc,ci = -1;
|
||||||
|
command_history *currentcommand;
|
||||||
ui_edit ed;
|
ui_edit ed;
|
||||||
ed.x = 15;
|
ed.x = 15;
|
||||||
ed.y = 210;
|
ed.y = 210;
|
||||||
@ -3840,6 +3847,30 @@ char *console_ui(pixel *vid_buf,char error[255]) { //TODO: error messages, show
|
|||||||
"Reset works with pressure, velocity, sparks, temp (ex. 'reset pressure')\n"
|
"Reset works with pressure, velocity, sparks, temp (ex. 'reset pressure')\n"
|
||||||
"To load a save use load saveID (ex. load 1337)"
|
"To load a save use load saveID (ex. load 1337)"
|
||||||
,255, 187, 187, 255);
|
,255, 187, 187, 255);
|
||||||
|
|
||||||
|
cc = 0;
|
||||||
|
currentcommand = last_command;
|
||||||
|
while(cc < 10)
|
||||||
|
{
|
||||||
|
if(currentcommand==NULL)
|
||||||
|
break;
|
||||||
|
drawtext(vid_buf, 15, 175-(cc*12), currentcommand->command, 255, 255, 255, 255);
|
||||||
|
if(currentcommand->prev_command!=NULL)
|
||||||
|
{
|
||||||
|
if(cc<9) {
|
||||||
|
currentcommand = currentcommand->prev_command;
|
||||||
|
} else if(currentcommand->prev_command!=NULL){
|
||||||
|
free(currentcommand->prev_command);
|
||||||
|
currentcommand->prev_command = NULL;
|
||||||
|
}
|
||||||
|
cc++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(error)
|
if(error)
|
||||||
drawtext(vid_buf, 15, 190, error,255, 187, 187, 255);
|
drawtext(vid_buf, 15, 190, error,255, 187, 187, 255);
|
||||||
ui_edit_draw(vid_buf, &ed);
|
ui_edit_draw(vid_buf, &ed);
|
||||||
@ -3847,6 +3878,11 @@ char *console_ui(pixel *vid_buf,char error[255]) { //TODO: error messages, show
|
|||||||
sdl_blit(0, 0, (XRES+BARSIZE), YRES+MENUSIZE, vid_buf, (XRES+BARSIZE));
|
sdl_blit(0, 0, (XRES+BARSIZE), YRES+MENUSIZE, vid_buf, (XRES+BARSIZE));
|
||||||
if (sdl_key==SDLK_RETURN)
|
if (sdl_key==SDLK_RETURN)
|
||||||
{
|
{
|
||||||
|
currentcommand = malloc(sizeof(command_history));
|
||||||
|
memset(currentcommand, 0, sizeof(command_history));
|
||||||
|
currentcommand->prev_command = last_command;
|
||||||
|
currentcommand->command = mystrdup(ed.str);
|
||||||
|
last_command = currentcommand;
|
||||||
return ed.str;
|
return ed.str;
|
||||||
}
|
}
|
||||||
if (sdl_key==SDLK_ESCAPE || sdl_key==SDLK_BACKQUOTE)
|
if (sdl_key==SDLK_ESCAPE || sdl_key==SDLK_BACKQUOTE)
|
||||||
@ -3854,6 +3890,34 @@ char *console_ui(pixel *vid_buf,char error[255]) { //TODO: error messages, show
|
|||||||
console_mode = 0;
|
console_mode = 0;
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
if(sdl_key==SDLK_UP || sdl_key==SDLK_DOWN)
|
||||||
|
{
|
||||||
|
ci += sdl_key==SDLK_UP?1:-1;
|
||||||
|
if(ci<-1)
|
||||||
|
ci = -1;
|
||||||
|
if(ci==-1)
|
||||||
|
{
|
||||||
|
strcpy(ed.str, "");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(last_command!=NULL){
|
||||||
|
currentcommand = last_command;
|
||||||
|
for (cc = 0; cc<ci; cc++) {
|
||||||
|
if(currentcommand->prev_command==NULL)
|
||||||
|
ci = cc;
|
||||||
|
else
|
||||||
|
currentcommand = currentcommand->prev_command;
|
||||||
|
}
|
||||||
|
strcpy(ed.str, currentcommand->command);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ci = -1;
|
||||||
|
strcpy(ed.str, "");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user