Compare commits
6 Commits
0421f7f154
...
3979588f85
| Author | SHA1 | Date | |
|---|---|---|---|
| 3979588f85 | |||
| 1618665124 | |||
| 527ab8bf01 | |||
| 62c513db56 | |||
| e5798f4b71 | |||
| 788c5d6c6e |
45
ascii.cpp
45
ascii.cpp
@@ -294,6 +294,7 @@ void cls(uint8_t value) {
|
||||
debug_prompt = 0;
|
||||
debug_text[debug_prompt] = '>';
|
||||
}
|
||||
cursor_x = cursor_y = 0;
|
||||
}
|
||||
|
||||
void ink(uint8_t value) {
|
||||
@@ -322,15 +323,22 @@ void print(const char *str, int x, int y) {
|
||||
if (x >= 0) cursor_x = min(x, screen_width-1);
|
||||
if (y >= 0) cursor_y = min(y, screen_height-1);
|
||||
int len = SDL_strlen(str);
|
||||
if ((cursor_x+len) > screen_width) len -= ((cursor_x+len) - screen_width);
|
||||
const int pos = cursor_x+cursor_y*screen_width;
|
||||
if (pos+len > screen_width*screen_height) len -= ((pos+len) - screen_width*screen_height);
|
||||
//int offset = x+y*screen_width;
|
||||
for (int i=0; i < len; ++i) {
|
||||
CHRSCR(cursor_x+i, cursor_y) = str[i];
|
||||
if (current_mode != 0) COLSCR(cursor_x+i, cursor_y) = current_color;
|
||||
char_screen[pos+i] = str[i];
|
||||
if (current_mode != 0) color_screen[pos+i] = current_color;
|
||||
//char_screen[offset+i] = str[i];
|
||||
//if (current_mode != 0) color_screen[offset+i] = current_color;
|
||||
}
|
||||
cursor_x += len;
|
||||
cursor_x = (pos+len)%screen_width;
|
||||
cursor_y = (pos+len)/screen_width;
|
||||
}
|
||||
|
||||
void crlf() {
|
||||
cursor_x=0;
|
||||
cursor_y = min(cursor_y+1, screen_height-1);
|
||||
}
|
||||
|
||||
bool btn(uint8_t i) {
|
||||
@@ -423,9 +431,9 @@ int rnd(int x) {
|
||||
srand(x);
|
||||
}*/
|
||||
|
||||
char tostr_tmp[256];
|
||||
char str_tmp[1024];
|
||||
const char* tostr(float val) {
|
||||
return SDL_itoa(val, tostr_tmp, 10);
|
||||
return SDL_itoa(val, str_tmp, 10);
|
||||
}
|
||||
|
||||
void debug_set_prompt() {
|
||||
@@ -489,6 +497,12 @@ const char* chr(uint8_t ascii) {
|
||||
return chr_trans;
|
||||
}
|
||||
|
||||
const char* substr(const char* str, uint8_t start, uint8_t length) {
|
||||
memcpy(str_tmp, &str[start], length);
|
||||
str_tmp[length] = '\0';
|
||||
return str_tmp;
|
||||
}
|
||||
|
||||
void setchar(uint8_t index, uint8_t b0, uint8_t b1, uint8_t b2, uint8_t b3, uint8_t b4, uint8_t b5, uint8_t b6, uint8_t b7) {
|
||||
mem[MEM_CHAR_OFFSET+index*8] = b0;
|
||||
mem[MEM_CHAR_OFFSET+index*8+1] = b1;
|
||||
@@ -557,3 +571,22 @@ void filein(const char* str, uint16_t addr, uint16_t size) {
|
||||
fread(&mem[addr], size, 1, f);
|
||||
fclose(f);
|
||||
}
|
||||
|
||||
void toclipboard(const char* str) {
|
||||
SDL_SetClipboardText(str);
|
||||
}
|
||||
|
||||
const char* fromclipboard() {
|
||||
char* text = SDL_GetClipboardText();
|
||||
int len = strlen(text);
|
||||
if (len > 1023) {
|
||||
len = 27;
|
||||
SDL_memcpy(str_tmp, "ERROR! CLIPBOARD TOO LARGE", len);
|
||||
} else {
|
||||
SDL_memcpy(str_tmp, text, len);
|
||||
}
|
||||
str_tmp[len] = '\0';
|
||||
SDL_free((void*)text);
|
||||
|
||||
return str_tmp;
|
||||
}
|
||||
5
ascii.h
5
ascii.h
@@ -120,6 +120,7 @@ void color(uint8_t ink, uint8_t paper, int8_t border=-1);
|
||||
|
||||
void locate(uint8_t x, uint8_t y); // global::cursorx, global::cursory
|
||||
void print(const char *str, int x = -1, int y = -1);
|
||||
void crlf();
|
||||
|
||||
bool btn(uint8_t i);
|
||||
bool btnp(uint8_t i);
|
||||
@@ -163,6 +164,7 @@ void debug_get_cmd();
|
||||
|
||||
uint8_t ascii(const char *str, uint8_t index);
|
||||
const char* chr(uint8_t ascii);
|
||||
const char* substr(const char* str, uint8_t start, uint8_t length);
|
||||
|
||||
void setchar(uint8_t index, uint8_t b0, uint8_t b1, uint8_t b2, uint8_t b3, uint8_t b4, uint8_t b5, uint8_t b6, uint8_t b7);
|
||||
uint8_t peek(uint16_t addr);
|
||||
@@ -178,3 +180,6 @@ void load(const char* str);
|
||||
|
||||
void fileout(const char* str, uint16_t addr, uint16_t size);
|
||||
void filein(const char* str, uint16_t addr, uint16_t size);
|
||||
|
||||
void toclipboard(const char* str);
|
||||
const char* fromclipboard();
|
||||
130
lua.cpp
130
lua.cpp
@@ -2,6 +2,86 @@
|
||||
#include "lua/lua.hpp"
|
||||
#include "ascii.h"
|
||||
|
||||
void reverse(char* str, int len) {
|
||||
int i = 0, j = len - 1, temp;
|
||||
while (i < j) {
|
||||
temp = str[i];
|
||||
str[i] = str[j];
|
||||
str[j] = temp;
|
||||
i++;
|
||||
j--;
|
||||
}
|
||||
}
|
||||
|
||||
int intToStr(int x, char str[], int d) {
|
||||
int i = 0;
|
||||
while (x) {
|
||||
str[i++] = (x % 10) + '0';
|
||||
x = x / 10;
|
||||
}
|
||||
|
||||
while (i < d) str[i++] = '0';
|
||||
reverse(str, i);
|
||||
str[i] = '\0';
|
||||
return i;
|
||||
}
|
||||
|
||||
int ftoa(float n, char* res, int afterpoint) {
|
||||
int ipart = (int)n;
|
||||
float fpart = n - (float)ipart;
|
||||
int i = intToStr(ipart, res, 1);
|
||||
fpart = fpart * SDL_pow(10, afterpoint);
|
||||
if (int(fpart) != 0) {
|
||||
res[i++] = '.';
|
||||
i += intToStr((int)fpart, res + i, afterpoint);
|
||||
while(res[i-1] == '0') res[--i] = '\0';
|
||||
}
|
||||
return i;
|
||||
}
|
||||
|
||||
char tempstr[1024];
|
||||
uint16_t ts_index = 0;
|
||||
|
||||
void table_to_str(lua_State *L, int indx);
|
||||
|
||||
void value_to_str(lua_State *L, int indx) {
|
||||
if (lua_isnoneornil(L, indx)) {
|
||||
SDL_memcpy(&tempstr[ts_index], "nil", 3); ts_index+=3;
|
||||
} else if (lua_isfunction(L, indx) || lua_iscfunction(L,indx)) {
|
||||
SDL_memcpy(&tempstr[ts_index], "[function]", 10); ts_index+=10;
|
||||
} else if (lua_istable(L, indx)) {
|
||||
table_to_str(L, indx);
|
||||
} else if (lua_type(L, indx) == LUA_TNUMBER) {
|
||||
const float val = luaL_checknumber(L, indx);
|
||||
const int len = ftoa(val, &tempstr[ts_index], 4); ts_index+=len;
|
||||
} else if (lua_isboolean(L,indx)) {
|
||||
if (lua_toboolean(L, indx)) {
|
||||
SDL_memcpy(&tempstr[ts_index], "true", 4); ts_index+=4;
|
||||
} else {
|
||||
SDL_memcpy(&tempstr[ts_index], "false", 5); ts_index+=5;
|
||||
}
|
||||
} else if (lua_isstring(L,indx)) {
|
||||
const char* str = luaL_checkstring(L,indx);
|
||||
tempstr[ts_index++] = '"';
|
||||
SDL_memcpy(&tempstr[ts_index], str, strlen(str)); ts_index+=strlen(str);
|
||||
tempstr[ts_index++] = '"';
|
||||
}
|
||||
}
|
||||
|
||||
void table_to_str(lua_State *L, int indx) {
|
||||
tempstr[ts_index++] = '{';
|
||||
lua_pushnil(L);
|
||||
bool first = true;
|
||||
while (lua_next(L, indx) != 0) {
|
||||
if (first) { first=false; } else { tempstr[ts_index++] = ','; }
|
||||
value_to_str(L, lua_gettop(L)-1);
|
||||
tempstr[ts_index++] = '=';
|
||||
value_to_str(L, lua_gettop(L));
|
||||
lua_pop(L, 1);
|
||||
}
|
||||
tempstr[ts_index++] = '}';
|
||||
}
|
||||
|
||||
extern "C" {
|
||||
static int cpp_cls(lua_State *L) {
|
||||
uint8_t color = luaL_optinteger(L, 1, 32);
|
||||
@@ -54,6 +134,11 @@ extern "C" {
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cpp_crlf(lua_State *L) {
|
||||
crlf();
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cpp_btn(lua_State *L) {
|
||||
uint8_t i = luaL_checkinteger(L, 1);
|
||||
lua_pushboolean(L, btn(i));
|
||||
@@ -163,9 +248,28 @@ extern "C" {
|
||||
return 0;
|
||||
}
|
||||
static int cpp_tostr(lua_State *L) {
|
||||
float val = luaL_checknumber(L, 1);
|
||||
lua_pushstring(L, tostr(val));
|
||||
ts_index=0;
|
||||
value_to_str(L, 1); tempstr[ts_index] = '\0';
|
||||
lua_pushstring(L, tempstr);
|
||||
return 1;
|
||||
/*
|
||||
if (lua_isnoneornil(L,1)) {
|
||||
lua_pushstring(L, "nil");
|
||||
} else if (lua_isfunction(L,1) || lua_iscfunction(L,1)) {
|
||||
lua_pushstring(L, "[function]");
|
||||
} else if (lua_istable(L,1)) {
|
||||
lua_gettable
|
||||
lua_pushstring(L, "[function]");
|
||||
} else if (lua_isstring(L,1)) {
|
||||
lua_pushstring(L, luaL_checkstring(L,1));
|
||||
} else if (lua_isboolean(L,1)) {
|
||||
lua_pushstring(L, lua_toboolean(L, 1) ? "true" : "false");
|
||||
} else {
|
||||
const float val = luaL_checknumber(L, 1);
|
||||
lua_pushstring(L, tostr(val));
|
||||
}
|
||||
return 1;
|
||||
*/
|
||||
}
|
||||
static int cpp_ascii(lua_State *L) {
|
||||
const char* str = luaL_checkstring(L, 1);
|
||||
@@ -183,6 +287,13 @@ extern "C" {
|
||||
lua_pushinteger(L, strlen(str));
|
||||
return 1;
|
||||
}
|
||||
static int cpp_substr(lua_State *L) {
|
||||
const char* str = luaL_checkstring(L, 1);
|
||||
int start = luaL_checknumber(L, 2);
|
||||
int length = luaL_checknumber(L, 3);
|
||||
lua_pushstring(L, substr(str, start, length));
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int cpp_setchar(lua_State *L) {
|
||||
int index = luaL_checkinteger(L, 1);
|
||||
@@ -270,6 +381,17 @@ extern "C" {
|
||||
filein(str, addr, size);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cpp_toclipboard(lua_State *L) {
|
||||
const char* str = luaL_checkstring(L, 1);
|
||||
toclipboard(str);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cpp_fromclipboard(lua_State *L) {
|
||||
lua_pushstring(L, fromclipboard());
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
#define STATE_STOPPED 0
|
||||
@@ -319,6 +441,7 @@ void lua_init(const char* filename, const bool start_playing) {
|
||||
|
||||
lua_pushcfunction(L,cpp_locate); lua_setglobal(L, "locate");
|
||||
lua_pushcfunction(L,cpp_print); lua_setglobal(L, "print");
|
||||
lua_pushcfunction(L,cpp_crlf); lua_setglobal(L, "crlf");
|
||||
|
||||
lua_pushcfunction(L,cpp_btn); lua_setglobal(L, "btn");
|
||||
lua_pushcfunction(L,cpp_btnp); lua_setglobal(L, "btnp");
|
||||
@@ -346,6 +469,7 @@ void lua_init(const char* filename, const bool start_playing) {
|
||||
lua_pushcfunction(L,cpp_ascii); lua_setglobal(L, "ascii");
|
||||
lua_pushcfunction(L,cpp_chr); lua_setglobal(L, "chr");
|
||||
lua_pushcfunction(L,cpp_strlen); lua_setglobal(L, "strlen");
|
||||
lua_pushcfunction(L,cpp_substr); lua_setglobal(L, "substr");
|
||||
|
||||
lua_pushcfunction(L,cpp_setchar); lua_setglobal(L, "setchar");
|
||||
lua_pushcfunction(L,cpp_peek); lua_setglobal(L, "peek");
|
||||
@@ -360,6 +484,8 @@ void lua_init(const char* filename, const bool start_playing) {
|
||||
|
||||
lua_pushcfunction(L,cpp_fileout); lua_setglobal(L, "fileout");
|
||||
lua_pushcfunction(L,cpp_filein); lua_setglobal(L, "filein");
|
||||
lua_pushcfunction(L,cpp_toclipboard); lua_setglobal(L, "toclipboard");
|
||||
lua_pushcfunction(L,cpp_fromclipboard); lua_setglobal(L, "fromclipboard");
|
||||
|
||||
lua_pushinteger(L, 0); lua_setglobal(L, "KEY_UNKNOWN");
|
||||
lua_pushinteger(L, 4); lua_setglobal(L, "KEY_A");
|
||||
|
||||
Reference in New Issue
Block a user