[FEAT] New terminal console system
This commit is contained in:
48
ascii.cpp
48
ascii.cpp
@@ -224,6 +224,7 @@ int main(int argc,char*argv[]) {
|
|||||||
|
|
||||||
if (lua_is_playing()) {
|
if (lua_is_playing()) {
|
||||||
lua_call_update();
|
lua_call_update();
|
||||||
|
if (!lua_is_playing()) debug_set_prompt();
|
||||||
} else {
|
} else {
|
||||||
debug_cursor_blink--;
|
debug_cursor_blink--;
|
||||||
if (debug_cursor_blink == 0) {
|
if (debug_cursor_blink == 0) {
|
||||||
@@ -299,10 +300,9 @@ void cls(uint8_t value) {
|
|||||||
SDL_memset(char_screen, value, screen_width*screen_height);
|
SDL_memset(char_screen, value, screen_width*screen_height);
|
||||||
if (current_mode != 0) SDL_memset(color_screen, current_color, screen_width*screen_height);
|
if (current_mode != 0) SDL_memset(color_screen, current_color, screen_width*screen_height);
|
||||||
cursor_x = cursor_y = 0;
|
cursor_x = cursor_y = 0;
|
||||||
if (!lua_is_playing()) {
|
//if (!lua_is_playing()) {
|
||||||
char_screen[0] = '>';
|
// debug_set_prompt()
|
||||||
cursor_x=1;
|
//}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ink(uint8_t value) {
|
void ink(uint8_t value) {
|
||||||
@@ -478,16 +478,21 @@ void debugchr(const uint8_t chr) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void debug(const char *str) {
|
void debug(const char *str, const bool newline) {
|
||||||
const int len = SDL_strlen(str);
|
const int len = SDL_strlen(str);
|
||||||
int cursor = cursor_x+cursor_y*screen_width;
|
int cursor = cursor_x+cursor_y*screen_width;
|
||||||
for (int i=0; i<len;++i) {
|
for (int i=0; i<len;++i) {
|
||||||
char_screen[cursor++] = str[i];
|
char_screen[cursor++] = str[i];
|
||||||
if (cursor >= screen_width*screen_height) debug_one_line_up();
|
if (cursor >= screen_width*screen_height) debug_one_line_up();
|
||||||
}
|
}
|
||||||
cursor_x = 0;
|
if (newline) {
|
||||||
cursor_y = (cursor/screen_width)+1;
|
cursor_x = 0;
|
||||||
if (cursor_y >= screen_height) debug_one_line_up();
|
cursor_y = (cursor/screen_width)+1;
|
||||||
|
if (cursor_y >= screen_height) debug_one_line_up();
|
||||||
|
} else {
|
||||||
|
cursor_x = cursor%screen_width;
|
||||||
|
cursor_y = cursor/screen_width;
|
||||||
|
}
|
||||||
//debug_set_prompt();
|
//debug_set_prompt();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -511,24 +516,36 @@ void debug_get_cmd() {
|
|||||||
char_screen[cursor_x+cursor_y*screen_width] = 32;
|
char_screen[cursor_x+cursor_y*screen_width] = 32;
|
||||||
cursor_x=0;cursor_y++;if(cursor_y>=screen_height)debug_one_line_up();
|
cursor_x=0;cursor_y++;if(cursor_y>=screen_height)debug_one_line_up();
|
||||||
cmd_index=0;
|
cmd_index=0;
|
||||||
lua_call_cmd(cmd_list[cmd_list.size()-1].c_str());
|
const char* cmd = cmd_list[cmd_list.size()-1].c_str();
|
||||||
//if ((cursor_y>0) || (cursor_x>0)) { cursor_x=0;cursor_y++;if(cursor_y>=screen_height)debug_one_line_up(); }
|
|
||||||
debug_set_prompt();
|
if (cmd[0]=='r' && cmd[1]=='u' && cmd[2]=='n' && cmd[3]=='\0') {
|
||||||
|
lua_quit();
|
||||||
|
reinit();
|
||||||
|
lua_init(lua_filename);
|
||||||
|
lua_call_init();
|
||||||
|
} else {
|
||||||
|
lua_call_cmd(cmd);
|
||||||
|
debug_set_prompt();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void next_cmd() {
|
void get_cmd_by_index() {
|
||||||
if (cmd_index < cmd_list.size()) cmd_index++;
|
|
||||||
const char* cmd = cmd_list[cmd_list.size()-cmd_index].c_str();
|
const char* cmd = cmd_list[cmd_list.size()-cmd_index].c_str();
|
||||||
int pos = cursor_x+cursor_y*screen_width;
|
int pos = cursor_x+cursor_y*screen_width;
|
||||||
for (int i=debug_prompt;i<=pos;++i) char_screen[i] = 32;
|
for (int i=debug_prompt;i<=pos;++i) char_screen[i] = 32;
|
||||||
SDL_memcpy(&char_screen[debug_prompt], cmd, strlen(cmd));
|
SDL_memcpy(&char_screen[debug_prompt], cmd, strlen(cmd));
|
||||||
pos += debug_prompt;
|
pos = debug_prompt+strlen(cmd);
|
||||||
cursor_x = pos%screen_width;
|
cursor_x = pos%screen_width;
|
||||||
cursor_y = pos/screen_width;
|
cursor_y = pos/screen_width;
|
||||||
}
|
}
|
||||||
|
void next_cmd() {
|
||||||
|
if (cmd_index < cmd_list.size()) cmd_index++;
|
||||||
|
get_cmd_by_index();
|
||||||
|
}
|
||||||
|
|
||||||
void prev_cmd() {
|
void prev_cmd() {
|
||||||
|
if (cmd_index > 0) cmd_index--;
|
||||||
|
get_cmd_by_index();
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t ascii(const char *str, uint8_t index) {
|
uint8_t ascii(const char *str, uint8_t index) {
|
||||||
@@ -598,6 +615,7 @@ void play(const char* str) {
|
|||||||
void setmode(const uint8_t mode) {
|
void setmode(const uint8_t mode) {
|
||||||
current_mode = mode;
|
current_mode = mode;
|
||||||
reinit();
|
reinit();
|
||||||
|
cls();
|
||||||
}
|
}
|
||||||
|
|
||||||
void load(const char* str) {
|
void load(const char* str) {
|
||||||
|
|||||||
2
ascii.h
2
ascii.h
@@ -158,7 +158,7 @@ int rnd(int x);
|
|||||||
const char* tostr(float val);
|
const char* tostr(float val);
|
||||||
|
|
||||||
void debugchr(const uint8_t chr);
|
void debugchr(const uint8_t chr);
|
||||||
void debug(const char *str);
|
void debug(const char *str, const bool newline=true);
|
||||||
//void pdebug();
|
//void pdebug();
|
||||||
void debug_get_cmd();
|
void debug_get_cmd();
|
||||||
void next_cmd();
|
void next_cmd();
|
||||||
|
|||||||
36
lua.cpp
36
lua.cpp
@@ -417,7 +417,7 @@ void lua_init(const char* filename, const bool start_playing) {
|
|||||||
|
|
||||||
if (filename == NULL) {
|
if (filename == NULL) {
|
||||||
if (luaL_loadstring(L, boot)) {
|
if (luaL_loadstring(L, boot)) {
|
||||||
debug("BOOT ERROR");
|
debug("BOOT ERROR:", false);
|
||||||
debug(lua_tostring(L, -1));
|
debug(lua_tostring(L, -1));
|
||||||
lua_pop(L,1);
|
lua_pop(L,1);
|
||||||
setmode(0);
|
setmode(0);
|
||||||
@@ -425,7 +425,7 @@ void lua_init(const char* filename, const bool start_playing) {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (luaL_loadfile(L, filename)) {
|
if (luaL_loadfile(L, filename)) {
|
||||||
debug("ERROR LOADING GAME");
|
debug("ERROR LOADING GAME:",false);
|
||||||
debug(lua_tostring(L, -1));
|
debug(lua_tostring(L, -1));
|
||||||
lua_pop(L,1);
|
lua_pop(L,1);
|
||||||
setmode(0);
|
setmode(0);
|
||||||
@@ -615,7 +615,7 @@ void lua_init(const char* filename, const bool start_playing) {
|
|||||||
if (!file_loaded) return;
|
if (!file_loaded) return;
|
||||||
|
|
||||||
if (lua_pcall(L,0, LUA_MULTRET, 0)) {
|
if (lua_pcall(L,0, LUA_MULTRET, 0)) {
|
||||||
debug("RUNTIME ERROR");
|
debug("RUNTIME ERROR:", false);
|
||||||
debug(lua_tostring(L, -1));
|
debug(lua_tostring(L, -1));
|
||||||
lua_pop(L,1);
|
lua_pop(L,1);
|
||||||
setmode(0);
|
setmode(0);
|
||||||
@@ -634,20 +634,32 @@ void lua_init(const char* filename, const bool start_playing) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void lua_call_cmd(const char* str) {
|
void lua_call_cmd(const char* str) {
|
||||||
if (luaL_dostring(L, str)) {
|
if (str[0]=='?') {
|
||||||
//debug(" ");
|
const int size = strlen(str)+14;
|
||||||
debug("ERROR");
|
char* cmd = (char*)malloc(size);
|
||||||
debug(lua_tostring(L, -1));
|
memcpy(cmd, "print(tostr(", 12);
|
||||||
lua_pop(L,1);
|
memcpy(&cmd[12], &str[1], strlen(str)-1);
|
||||||
|
cmd[size-1]='\0';
|
||||||
|
cmd[size-3]=cmd[size-2]=')';
|
||||||
|
if (luaL_dostring(L, cmd)) {
|
||||||
|
debug("ERROR:",false);
|
||||||
|
debug(lua_tostring(L, -1));
|
||||||
|
lua_pop(L,1);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (luaL_dostring(L, str)) {
|
||||||
|
debug("ERROR:",false);
|
||||||
|
debug(lua_tostring(L, -1));
|
||||||
|
lua_pop(L,1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
//debug(" ");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void lua_call_init() {
|
void lua_call_init() {
|
||||||
if (!init_exists) return;
|
if (!init_exists) return;
|
||||||
lua_getglobal(L, "init");
|
lua_getglobal(L, "init");
|
||||||
if (lua_pcall(L, 0, 0, 0)) {
|
if (lua_pcall(L, 0, 0, 0)) {
|
||||||
debug("RUNTIME ERROR");
|
debug("RUNTIME ERROR:",false);
|
||||||
debug(lua_tostring(L, -1));
|
debug(lua_tostring(L, -1));
|
||||||
lua_pop(L,1);
|
lua_pop(L,1);
|
||||||
setmode(0);
|
setmode(0);
|
||||||
@@ -656,10 +668,10 @@ void lua_call_init() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void lua_call_update() {
|
void lua_call_update() {
|
||||||
if (!update_exists) return;
|
if (!update_exists) { lua_state = STATE_PAUSED; return; }
|
||||||
lua_getglobal(L, "update");
|
lua_getglobal(L, "update");
|
||||||
if (lua_pcall(L, 0, 0, 0)) {
|
if (lua_pcall(L, 0, 0, 0)) {
|
||||||
debug("RUNTIME ERROR");
|
debug("RUNTIME ERROR:",false);
|
||||||
debug(lua_tostring(L, -1));
|
debug(lua_tostring(L, -1));
|
||||||
lua_pop(L,1);
|
lua_pop(L,1);
|
||||||
setmode(0);
|
setmode(0);
|
||||||
|
|||||||
8
main.cpp
8
main.cpp
@@ -24,7 +24,9 @@ void do_terminal() {
|
|||||||
else if (key == KEY_7) { if (mods & KMOD_SHIFT) { debugchr('/'); } else { debugchr('7'); } }
|
else if (key == KEY_7) { if (mods & KMOD_SHIFT) { debugchr('/'); } else { debugchr('7'); } }
|
||||||
else if (key == KEY_8) { if (mods & KMOD_SHIFT) { debugchr('('); } else { debugchr('8'); } }
|
else if (key == KEY_8) { if (mods & KMOD_SHIFT) { debugchr('('); } else { debugchr('8'); } }
|
||||||
else if (key == KEY_9) { if (mods & KMOD_SHIFT) { debugchr(')'); } else { debugchr('9'); } }
|
else if (key == KEY_9) { if (mods & KMOD_SHIFT) { debugchr(')'); } else { debugchr('9'); } }
|
||||||
else if (key == KEY_RETURN) debug_get_cmd();
|
else if (key == KEY_RETURN or key == KEY_KP_ENTER) debug_get_cmd();
|
||||||
|
else if (key == KEY_UP) next_cmd();
|
||||||
|
else if (key == KEY_DOWN) prev_cmd();
|
||||||
else if (key == KEY_SPACE) debugchr(32);
|
else if (key == KEY_SPACE) debugchr(32);
|
||||||
else if (key == KEY_BACKSPACE) debugchr(8);
|
else if (key == KEY_BACKSPACE) debugchr(8);
|
||||||
else if (key == KEY_MINUS) { if (mods & KMOD_SHIFT) { debugchr('?'); } else { debugchr('\''); } }
|
else if (key == KEY_MINUS) { if (mods & KMOD_SHIFT) { debugchr('?'); } else { debugchr('\''); } }
|
||||||
@@ -34,6 +36,10 @@ void do_terminal() {
|
|||||||
else if (key == KEY_SLASH) { if (mods & KMOD_SHIFT) { debugchr('_'); } else { debugchr('-'); } }
|
else if (key == KEY_SLASH) { if (mods & KMOD_SHIFT) { debugchr('_'); } else { debugchr('-'); } }
|
||||||
else if (key == KEY_LEFTBRACKET) { if (mods & KMOD_SHIFT) { debugchr(160); } else if (mods & KMOD_RALT) { debugchr('['); } else { debugchr(96); } }
|
else if (key == KEY_LEFTBRACKET) { if (mods & KMOD_SHIFT) { debugchr(160); } else if (mods & KMOD_RALT) { debugchr('['); } else { debugchr(96); } }
|
||||||
else if (key == KEY_RIGHTBRACKET) { if (mods & KMOD_SHIFT) { debugchr('*'); } else if (mods & KMOD_RALT) { debugchr(']'); } else { debugchr('+'); } }
|
else if (key == KEY_RIGHTBRACKET) { if (mods & KMOD_SHIFT) { debugchr('*'); } else if (mods & KMOD_RALT) { debugchr(']'); } else { debugchr('+'); } }
|
||||||
|
else if (key == KEY_APOSTROPHE) { if (mods & KMOD_SHIFT) { debugchr(162); } else if (mods & KMOD_RALT) { debugchr('{'); } else { debugchr(161); } }
|
||||||
|
else if (key == KEY_BACKSLASH) { if (mods & KMOD_SHIFT) { debugchr('C'); } else if (mods & KMOD_RALT) { debugchr('}'); } else { debugchr('c'); } }
|
||||||
|
else if (key == KEY_GRAVE) { if (mods & KMOD_SHIFT) { debugchr('>'); } else { debugchr('<'); } }
|
||||||
|
else if (key == KEY_NONUSBACKSLASH) { if (mods & KMOD_SHIFT) { debugchr(164); } else if (mods & KMOD_RALT) { debugchr('\\'); } else { debugchr(163); } }
|
||||||
}
|
}
|
||||||
//cls(0);
|
//cls(0);
|
||||||
//pdebug();
|
//pdebug();
|
||||||
|
|||||||
Reference in New Issue
Block a user