From f391b896d495410e703e88e06f3cec86323e6a81 Mon Sep 17 00:00:00 2001 From: Simon Date: Sat, 29 Jan 2011 12:16:13 +0000 Subject: [PATCH 1/6] Use Sessions instead of saving password --- includes/http.h | 6 +++--- includes/interface.h | 2 ++ src/http.c | 27 ++++++++++++++++++++----- src/interface.c | 48 +++++++++++++++++++++++++++++++------------- 4 files changed, 61 insertions(+), 22 deletions(-) diff --git a/includes/http.h b/includes/http.h index 2ad7ccc28..af0971c32 100755 --- a/includes/http.h +++ b/includes/http.h @@ -24,10 +24,10 @@ void http_init(char *proxy); void http_done(void); char *http_simple_get(char *uri, int *ret, int *len); -char *http_auth_get(char *uri, char *user, char *pass, int *ret, int *len); +char *http_auth_get(char *uri, char *user, char *pass, char * session_id, int *ret, int *len); char *http_simple_post(char *uri, char *data, int dlen, int *ret, int *len); -void http_auth_headers(void *ctx, char *user, char *pass); +void http_auth_headers(void *ctx, char *user, char *pass, char * session_id); void *http_async_req_start(void *ctx, char *uri, char *data, int dlen, int keep); void http_async_add_header(void *ctx, char *name, char *data); @@ -36,7 +36,7 @@ void http_async_get_length(void *ctx, int *total, int *done); char *http_async_req_stop(void *ctx, int *ret, int *len); void http_async_req_close(void *ctx); -char *http_multipart_post(char *uri, char **names, char **parts, int *plens, char *user, char *pass, int *ret, int *len); +char *http_multipart_post(char *uri, char **names, char **parts, int *plens, char *user, char *pass, char * session_id, int *ret, int *len); char *http_ret_text(int ret); diff --git a/includes/interface.h b/includes/interface.h index 4bee583dd..15e857dee 100644 --- a/includes/interface.h +++ b/includes/interface.h @@ -118,6 +118,8 @@ extern int svf_admin; extern int svf_mod; extern char svf_user[64]; extern char svf_pass[64]; +extern char svf_user_id[64]; +extern char svf_session_id[64]; extern int svf_open; extern int svf_own; diff --git a/src/http.c b/src/http.c index a68ea45b4..a881c7335 100644 --- a/src/http.c +++ b/src/http.c @@ -680,7 +680,7 @@ char *http_simple_get(char *uri, int *ret, int *len) return http_async_req_stop(ctx, ret, len); } static char hex[] = "0123456789abcdef"; -void http_auth_headers(void *ctx, char *user, char *pass) +void http_auth_headers(void *ctx, char *user, char *pass, char *session_id) { char *tmp; int i; @@ -690,7 +690,6 @@ void http_auth_headers(void *ctx, char *user, char *pass) if (user) { - http_async_add_header(ctx, "X-Auth-User", user); if (pass) { md5_init(&md5); @@ -710,9 +709,18 @@ void http_auth_headers(void *ctx, char *user, char *pass) http_async_add_header(ctx, "X-Auth-Hash", tmp); free(tmp); } + if(session_id) + { + http_async_add_header(ctx, "X-Auth-User-Id", user); + http_async_add_header(ctx, "X-Auth-Session-Key", session_id); + } + else + { + http_async_add_header(ctx, "X-Auth-User", user); + } } } -char *http_auth_get(char *uri, char *user, char *pass, int *ret, int *len) +char *http_auth_get(char *uri, char *user, char *pass, char *session_id, int *ret, int *len) { void *ctx = http_async_req_start(NULL, uri, NULL, 0, 0); @@ -870,7 +878,7 @@ char *http_ret_text(int ret) return "Unknown Status Code"; } } -char *http_multipart_post(char *uri, char **names, char **parts, int *plens, char *user, char *pass, int *ret, int *len) +char *http_multipart_post(char *uri, char **names, char **parts, int *plens, char *user, char *pass, char *session_id, int *ret, int *len) { void *ctx; char *data = NULL, *tmp, *p; @@ -965,7 +973,7 @@ retry: if (user) { - http_async_add_header(ctx, "X-Auth-User", user); + //http_async_add_header(ctx, "X-Auth-User", user); if (pass) { md5_init(&md5); @@ -1023,6 +1031,15 @@ retry: http_async_add_header(ctx, "X-Auth-Hash", tmp); free(tmp); } + if(session_id) + { + http_async_add_header(ctx, "X-Auth-User-Id", user); + http_async_add_header(ctx, "X-Auth-Session-Key", session_id); + } + else + { + http_async_add_header(ctx, "X-Auth-User", user); + } } if (data) diff --git a/src/interface.c b/src/interface.c index 05016c278..eef4b5ba4 100644 --- a/src/interface.c +++ b/src/interface.c @@ -25,7 +25,9 @@ int svf_login = 0; int svf_admin = 0; int svf_mod = 0; char svf_user[64] = ""; +char svf_user_id[64] = ""; char svf_pass[64] = ""; +char svf_session_id[64] = ""; int svf_open = 0; int svf_own = 0; @@ -836,7 +838,7 @@ void login_ui(pixel *vid_buf) res = http_multipart_post( "http://" SERVER "/Login.api", NULL, NULL, NULL, - svf_user, svf_pass, + svf_user, svf_pass, NULL, &err, NULL); if (err != 200) { @@ -845,14 +847,27 @@ void login_ui(pixel *vid_buf) free(res); goto fail; } - if (res && !strncmp(res, "OK", 2)) + if (res && !strncmp(res, "OK ", 3)) { - if (!strcmp(res, "OK ADMIN")) + char *s_id,*u_e,*nres; + s_id = strchr(res+3, ' '); + *(s_id++) = 0; + + u_e = strchr(s_id, ' '); + *(u_e++) = 0; + + strcpy(svf_user_id, res+3); + strcpy(svf_session_id, s_id); + nres = mystrdup(u_e); + + printf("\n{%s} {%s} {%s}\n", svf_user_id, svf_session_id, nres); + + if (!strncmp(nres, "ADMIN", 5)) { svf_admin = 1; svf_mod = 0; } - else if (!strcmp(res, "OK MOD")) + else if (!strncmp(nres, "MOD", 3)) { svf_admin = 0; svf_mod = 1; @@ -874,6 +889,8 @@ void login_ui(pixel *vid_buf) fail: strcpy(svf_user, ""); strcpy(svf_pass, ""); + strcpy(svf_user_id, ""); + strcpy(svf_session_id, ""); svf_login = 0; svf_own = 0; svf_admin = 0; @@ -2489,7 +2506,8 @@ int search_ui(pixel *vid_buf) http = http_async_req_start(http, uri, NULL, 0, 1); if (svf_login) { - http_auth_headers(http, svf_user, svf_pass); + //http_auth_headers(http, svf_user, svf_pass); + http_auth_headers(http, svf_user_id, NULL, svf_session_id); } http_last_use = time(NULL); free(uri); @@ -2757,8 +2775,10 @@ int open_ui(pixel *vid_buf, char *save_id, char *save_date) http_2 = http_async_req_start(http_2, uri_2, NULL, 0, 1); if (svf_login) { - http_auth_headers(http, svf_user, svf_pass); - http_auth_headers(http_2, svf_user, svf_pass); + //http_auth_headers(http, svf_user, svf_pass); + //http_auth_headers(http_2, svf_user, svf_pass); + http_auth_headers(http, svf_user_id, NULL, svf_session_id); + http_auth_headers(http_2, svf_user_id, NULL, svf_session_id); } http_last_use = time(NULL); http_last_use_2 = time(NULL); @@ -3483,7 +3503,7 @@ int execute_tagop(pixel *vid_buf, char *op, char *tag) result = http_multipart_post( uri, names, parts, NULL, - svf_user, svf_pass, + svf_user_id, /*svf_pass*/NULL, svf_session_id, &status, NULL); free(uri); @@ -3543,7 +3563,7 @@ void execute_save(pixel *vid_buf) result = http_multipart_post( "http://" SERVER "/Save.api", names, parts, plens, - svf_user, svf_pass, + svf_user_id, /*svf_pass*/NULL, svf_session_id, &status, NULL); if (svf_last) @@ -3600,7 +3620,7 @@ int execute_delete(pixel *vid_buf, char *id) result = http_multipart_post( "http://" SERVER "/Delete.api", names, parts, NULL, - svf_user, svf_pass, + svf_user_id, /*svf_pass*/NULL, svf_session_id, &status, NULL); if (status!=200) @@ -3636,7 +3656,7 @@ void execute_submit(pixel *vid_buf, char *id, char *message) result = http_multipart_post( "http://" SERVER "/Comment.api", names, parts, NULL, - svf_user, svf_pass, + svf_user_id, /*svf_pass*/NULL, svf_session_id, &status, NULL); if (status!=200) @@ -3671,7 +3691,7 @@ int execute_report(pixel *vid_buf, char *id, char *reason) result = http_multipart_post( "http://" SERVER "/Report.api", names, parts, NULL, - svf_user, svf_pass, + svf_user_id, /*svf_pass*/NULL, svf_session_id, &status, NULL); if (status!=200) @@ -3706,7 +3726,7 @@ void execute_fav(pixel *vid_buf, char *id) result = http_multipart_post( "http://" SERVER "/Favourite.api", names, parts, NULL, - svf_user, svf_pass, + svf_user_id, /*svf_pass*/NULL, svf_session_id, &status, NULL); if (status!=200) @@ -3741,7 +3761,7 @@ int execute_vote(pixel *vid_buf, char *id, char *action) result = http_multipart_post( "http://" SERVER "/Vote.api", names, parts, NULL, - svf_user, svf_pass, + svf_user_id, /*svf_pass*/NULL, svf_session_id, &status, NULL); if (status!=200) From 7522e95a9d7103d73b93538b233f67416e6d0921 Mon Sep 17 00:00:00 2001 From: Simon Date: Sat, 29 Jan 2011 12:19:48 +0000 Subject: [PATCH 2/6] Missing file, also fix cmode saving --- src/misc.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/misc.c b/src/misc.c index 64c2af51f..59ffc0e9d 100644 --- a/src/misc.c +++ b/src/misc.c @@ -95,7 +95,9 @@ void save_presets(int do_update) return; fwrite(sig, 1, 4, f); save_string(f, svf_user); - save_string(f, svf_pass); + //save_string(f, svf_pass); + save_string(f, svf_user_id); + save_string(f, svf_session_id); fwrite(&tmp, 1, 1, f); tmp = cmode; fwrite(&tmp, 1, 1, f); @@ -144,7 +146,11 @@ void load_presets(void) } if (load_string(f, svf_user, 63)) goto fail; - if (load_string(f, svf_pass, 63)) + //if (load_string(f, svf_pass, 63)) + //goto fail; + if (load_string(f, svf_user_id, 63)) + goto fail; + if (load_string(f, svf_session_id, 63)) goto fail; svf_login = !!svf_user[0]; if (fread(&tmp, 1, 1, f) != 1) @@ -152,7 +158,7 @@ void load_presets(void) sdl_scale = (tmp == 2) ? 2 : 1; if (fread(&tmp, 1, 1, f) != 1) goto fail; - cmode = tmp%7; + cmode = tmp%CM_COUNT; if (fread(&tmp, 1, 1, f) != 1) goto fail; svf_admin = tmp; From d61efca4e565939f90656916bba7fb4f88dd9ae5 Mon Sep 17 00:00:00 2001 From: FacialTurd Date: Sat, 29 Jan 2011 09:42:01 -0800 Subject: [PATCH 3/6] Missing header for CM_COUNT --- src/misc.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/misc.c b/src/misc.c index 59ffc0e9d..d5b57c560 100644 --- a/src/misc.c +++ b/src/misc.c @@ -5,6 +5,7 @@ #include "defines.h" #include "interface.h" #include "graphics.h" +#include "powder.h" //Signum function #if defined(WIN32) && !defined(__GNUC__) From e18337a70ab7d4b1560d909b1375959c9bed7e7b Mon Sep 17 00:00:00 2001 From: Cracker64 Date: Sun, 30 Jan 2011 01:23:24 -0500 Subject: [PATCH 4/6] Added a console! it is pretty self explanitory --- includes/defines.h | 1 + includes/interface.h | 2 + src/interface.c | 48 ++++++++ src/main.c | 258 ++++++++++++++++++++++++++++++++++++++++++- 4 files changed, 307 insertions(+), 2 deletions(-) diff --git a/includes/defines.h b/includes/defines.h index 43b259846..c22180f1d 100644 --- a/includes/defines.h +++ b/includes/defines.h @@ -139,6 +139,7 @@ int gol[XRES][YRES]; int gol2[XRES][YRES][NGOL]; int SEC; int SEC2; +int console_mode; int REPLACE_MODE; int CURRENT_BRUSH; int GRID_MODE; diff --git a/includes/interface.h b/includes/interface.h index 4bee583dd..0fa6e4087 100644 --- a/includes/interface.h +++ b/includes/interface.h @@ -224,5 +224,7 @@ void open_link(char *uri); int report_ui(pixel *vid_buf, char *save_id); +char *console_ui(pixel *vid_buf); + #endif diff --git a/src/interface.c b/src/interface.c index 05016c278..bbb7c2d82 100644 --- a/src/interface.c +++ b/src/interface.c @@ -3789,3 +3789,51 @@ void open_link(char *uri) { printf("Cannot open browser\n"); #endif } +char *console_ui(pixel *vid_buf) { //TODO: error messages, show previous commands + int mx,my,b,bq; + ui_edit ed; + ed.x = 15; + ed.y = 210; + ed.w = XRES; + ed.nx = 1; + ed.def = ""; + strcpy(ed.str, ""); + ed.focus = 1; + ed.hide = 0; + ed.multiline = 0; + ed.cursor = 0; + //fillrect(vid_buf, -1, -1, XRES, 220, 0, 0, 0, 190); + while (!sdl_poll()) + { + bq = b; + b = SDL_GetMouseState(&mx, &my); + mx /= sdl_scale; + my /= sdl_scale; + ed.focus = 1; + + clearrect(vid_buf, 0, 0, XRES+BARSIZE, 220);//anyway to make it transparent? + draw_line(vid_buf, 1, 219, XRES, 219, 228, 228, 228, XRES+BARSIZE); + drawtext(vid_buf, 15, 15, "Welcome to The Powder Toy console v.1 (by cracker64)\n" + "Current commands are quit, set, reset\n" + "You can set type, temp, ctype, life, x, y, vx, vy using this format ('set life particle# 9001')\n" + "You can also use 'all' instead of a particle number to do it to everything\n" + "Reset works with pressure, velocity, sparks, temp (ex. 'reset pressure')" + ,255, 187, 187, 255); + ui_edit_draw(vid_buf, &ed); + ui_edit_process(mx, my, b, &ed); + sdl_blit(0, 0, (XRES+BARSIZE), YRES+MENUSIZE, vid_buf, (XRES+BARSIZE)); + if (sdl_key==SDLK_RETURN) + { + return ed.str; + } + if (sdl_key==SDLK_ESCAPE || sdl_key==SDLK_BACKQUOTE) + { + console_mode = 0; + return NULL; + } + + } + + +} + diff --git a/src/main.c b/src/main.c index 77cd7e62b..37a4ce98b 100644 --- a/src/main.c +++ b/src/main.c @@ -1483,8 +1483,13 @@ int main(int argc, char *argv[]) } if ((sdl_mod & (KMOD_RCTRL) )&&( sdl_mod & (KMOD_RALT))) active_menu = 11; - if (sdl_key==SDLK_INSERT || sdl_key==SDLK_BACKQUOTE) + if (sdl_key==SDLK_INSERT)// || sdl_key==SDLK_BACKQUOTE) REPLACE_MODE = !REPLACE_MODE; + if (sdl_key==SDLK_BACKQUOTE) + { + console_mode = !console_mode; + hud_enable = !console_mode; + } if (sdl_key=='g') { if (sdl_mod & (KMOD_SHIFT)) @@ -1686,6 +1691,255 @@ int main(int argc, char *argv[]) }*/ } } + if(console_mode) + { + int nx,ny; + char *console; + char *console2; + char *console3; + char *console4; + char *console5; + sys_pause = 1; + console = console_ui(vid_buf); + if(console && strcmp(console, "")!=0 && strncmp(console, " ", 1)!=0) + { + console2 = strtok(console, " "); + console3 = strtok(NULL, " "); + console4 = strtok(NULL, " "); + console5 = strtok(NULL, " "); + if(strcmp(console2, "quit")==0) + { + break; + } + else if(strcmp(console2, "reset")==0 && console3) + { + if(strcmp(console3, "pressure")==0) + { + for (nx = 0; nx>8].ctype; if (tctype>=PT_NUM) tctype = 0; - sprintf(heattext, "%s (%s), Pressure: %3.2f, Temp: %4.2f C, Life: %d, Tmp: %d", ptypes[cr&0xFF].name, ptypes[tctype].name, pv[(y/sdl_scale)/CELL][(x/sdl_scale)/CELL], parts[cr>>8].temp-273.15f, parts[cr>>8].life ,parts[cr>>8].tmp); + sprintf(heattext, "%s (%s), Pressure: %3.2f, Temp: %4.2f C, Life: %d, #%d", ptypes[cr&0xFF].name, ptypes[tctype].name, pv[(y/sdl_scale)/CELL][(x/sdl_scale)/CELL], parts[cr>>8].temp-273.15f, parts[cr>>8].life ,cr>>8); //sprintf(heattext, "%s (%s), Pressure: %3.2f, Temp: %4.2f C, Life: %d", ptypes[cr&0xFF].name, ptypes[parts[cr>>8].ctype].name, pv[(y/sdl_scale)/CELL][(x/sdl_scale)/CELL], parts[cr>>8].temp-273.15f, parts[cr>>8].life); } else { sprintf(heattext, "%s, Pressure: %3.2f, Temp: %4.2f C", ptypes[cr&0xFF].name, pv[(y/sdl_scale)/CELL][(x/sdl_scale)/CELL], parts[cr>>8].temp-273.15f); From fcf958da21621887a80249f2af863991544815fd Mon Sep 17 00:00:00 2001 From: Cracker64 Date: Sun, 30 Jan 2011 15:00:54 -0500 Subject: [PATCH 5/6] added 'load' command, and a basic error message. --- includes/interface.h | 2 +- src/interface.c | 9 ++++++--- src/main.c | 16 +++++++++++++++- 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/includes/interface.h b/includes/interface.h index 0fa6e4087..986d5e4a5 100644 --- a/includes/interface.h +++ b/includes/interface.h @@ -224,7 +224,7 @@ void open_link(char *uri); int report_ui(pixel *vid_buf, char *save_id); -char *console_ui(pixel *vid_buf); +char *console_ui(pixel *vid_buf, char error[255]); #endif diff --git a/src/interface.c b/src/interface.c index bbb7c2d82..6f3f0bc4f 100644 --- a/src/interface.c +++ b/src/interface.c @@ -3789,7 +3789,7 @@ void open_link(char *uri) { printf("Cannot open browser\n"); #endif } -char *console_ui(pixel *vid_buf) { //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; ui_edit ed; ed.x = 15; @@ -3814,11 +3814,14 @@ char *console_ui(pixel *vid_buf) { //TODO: error messages, show previous command clearrect(vid_buf, 0, 0, XRES+BARSIZE, 220);//anyway to make it transparent? draw_line(vid_buf, 1, 219, XRES, 219, 228, 228, 228, XRES+BARSIZE); drawtext(vid_buf, 15, 15, "Welcome to The Powder Toy console v.1 (by cracker64)\n" - "Current commands are quit, set, reset\n" + "Current commands are quit, set, reset, load\n" "You can set type, temp, ctype, life, x, y, vx, vy using this format ('set life particle# 9001')\n" "You can also use 'all' instead of a particle number to do it to everything\n" - "Reset works with pressure, velocity, sparks, temp (ex. 'reset pressure')" + "Reset works with pressure, velocity, sparks, temp (ex. 'reset pressure')\n" + "To load a save use load saveID (ex. load 1337)" ,255, 187, 187, 255); + if(error) + drawtext(vid_buf, 15, 190, error,255, 187, 187, 255); ui_edit_draw(vid_buf, &ed); ui_edit_process(mx, my, b, &ed); sdl_blit(0, 0, (XRES+BARSIZE), YRES+MENUSIZE, vid_buf, (XRES+BARSIZE)); diff --git a/src/main.c b/src/main.c index 37a4ce98b..6f7ee7b4a 100644 --- a/src/main.c +++ b/src/main.c @@ -1117,6 +1117,7 @@ int main(int argc, char *argv[]) pixel *pers_bg=calloc((XRES+BARSIZE)*YRES, PIXELSIZE); void *http_ver_check; char *ver_data=NULL, *tmp; + char error[255]; int i, j, bq, fire_fc=0, do_check=0, old_version=0, http_ret=0, major, minor, old_ver_len; #ifdef INTERNAL int vs = 0; @@ -1699,8 +1700,10 @@ int main(int argc, char *argv[]) char *console3; char *console4; char *console5; + //char error[255] = "error!"; sys_pause = 1; - console = console_ui(vid_buf); + console = console_ui(vid_buf,error); + strcpy(error,""); if(console && strcmp(console, "")!=0 && strncmp(console, " ", 1)!=0) { console2 = strtok(console, " "); @@ -1711,6 +1714,15 @@ int main(int argc, char *argv[]) { break; } + else if(strcmp(console2, "load")==0 && console3) + { + j = atoi(console3); + if(j) + { + open_ui(vid_buf, console3, NULL); + console_mode = 0; + } + } else if(strcmp(console2, "reset")==0 && console3) { if(strcmp(console3, "pressure")==0) @@ -1936,6 +1948,8 @@ int main(int argc, char *argv[]) } } } + else + sprintf(error, "Invalid Command", console2); } if(!console_mode) hud_enable = 1; From bcbcb0063b1f3451b4e329b69d275bcabadc788a Mon Sep 17 00:00:00 2001 From: Simon Date: Sun, 30 Jan 2011 21:38:24 +0000 Subject: [PATCH 6/6] Command buffer, limit is 9, I think --- src/interface.c | 66 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 65 insertions(+), 1 deletion(-) diff --git a/src/interface.c b/src/interface.c index e83adcb97..0d963e0c5 100644 --- a/src/interface.c +++ b/src/interface.c @@ -3809,8 +3809,15 @@ void open_link(char *uri) { printf("Cannot open browser\n"); #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 - int mx,my,b,bq; + int mx,my,b,bq,cc,ci = -1; + command_history *currentcommand; ui_edit ed; ed.x = 15; 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" "To load a save use load saveID (ex. load 1337)" ,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) drawtext(vid_buf, 15, 190, error,255, 187, 187, 255); 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)); 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; } 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; 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; ccprev_command==NULL) + ci = cc; + else + currentcommand = currentcommand->prev_command; + } + strcpy(ed.str, currentcommand->command); + } + else + { + ci = -1; + strcpy(ed.str, ""); + } + } + } }