[NEW] File handling functions

This commit is contained in:
2022-09-13 17:18:13 +02:00
parent fd3eeded52
commit 2063485240
3 changed files with 167 additions and 10 deletions

76
lua.cpp
View File

@@ -513,6 +513,67 @@ extern "C" {
lua_pushinteger(L, strlen(str)); lua_pushinteger(L, strlen(str));
return 1; return 1;
} }
static int cpp_fopen(lua_State *L) {
const char* str = luaL_checkstring(L, 1);
uint8_t mode = luaL_optinteger(L, 2, 0);
fopen(str, mode);
return 0;
}
static int cpp_fclose(lua_State *L) {
fclose();
return 0;
}
static int cpp_fwritei(lua_State *L) {
int value = luaL_checkinteger(L, 1);
fwritei(value);
return 0;
}
static int cpp_fwrited(lua_State *L) {
float value = luaL_checknumber(L, 1);
fwrited(value);
return 0;
}
static int cpp_fwrites(lua_State *L) {
const char* str = luaL_checkstring(L, 1);
fwrites(str);
return 0;
}
static int cpp_fwriteb(lua_State *L) {
bool value = lua_toboolean(L, 1);
fwriteb(value);
return 0;
}
static int cpp_fwriteln(lua_State *L) {
void fwriteln();
return 0;
}
static int cpp_freadi(lua_State *L) {
lua_pushinteger(L,freadi());
return 1;
}
static int cpp_freadd(lua_State *L) {
lua_pushnumber(L,freadd());
return 1;
}
static int cpp_freads(lua_State *L) {
lua_pushstring(L,freads());
return 1;
}
static int cpp_freadb(lua_State *L) {
lua_pushboolean(L,freadb());
return 1;
}
} }
lua_State *L; lua_State *L;
@@ -602,6 +663,18 @@ void lua_init() {
lua_pushcfunction(L,cpp_ascii); lua_setglobal(L, "ascii"); lua_pushcfunction(L,cpp_ascii); lua_setglobal(L, "ascii");
lua_pushcfunction(L,cpp_strlen); lua_setglobal(L, "strlen"); lua_pushcfunction(L,cpp_strlen); lua_setglobal(L, "strlen");
lua_pushcfunction(L,cpp_fopen); lua_setglobal(L, "fopen");
lua_pushcfunction(L,cpp_fclose); lua_setglobal(L, "fclose");
lua_pushcfunction(L,cpp_fwritei); lua_setglobal(L, "fwritei");
lua_pushcfunction(L,cpp_fwrited); lua_setglobal(L, "fwrited");
lua_pushcfunction(L,cpp_fwrites); lua_setglobal(L, "fwrites");
lua_pushcfunction(L,cpp_fwriteb); lua_setglobal(L, "fwriteb");
lua_pushcfunction(L,cpp_fwriteln); lua_setglobal(L, "fwriteln");
lua_pushcfunction(L,cpp_freadi); lua_setglobal(L, "freadi");
lua_pushcfunction(L,cpp_freadd); lua_setglobal(L, "freadd");
lua_pushcfunction(L,cpp_freads); lua_setglobal(L, "freads");
lua_pushcfunction(L,cpp_freadb); lua_setglobal(L, "freadb");
lua_pushinteger(L, 0); lua_setglobal(L, "KEY_UNKNOWN"); lua_pushinteger(L, 0); lua_setglobal(L, "KEY_UNKNOWN");
lua_pushinteger(L, 4); lua_setglobal(L, "KEY_A"); lua_pushinteger(L, 4); lua_setglobal(L, "KEY_A");
lua_pushinteger(L, 5); lua_setglobal(L, "KEY_B"); lua_pushinteger(L, 5); lua_setglobal(L, "KEY_B");
@@ -710,6 +783,9 @@ void lua_init() {
lua_pushinteger(L, 230); lua_setglobal(L, "KEY_RALT"); lua_pushinteger(L, 230); lua_setglobal(L, "KEY_RALT");
lua_pushinteger(L, 231); lua_setglobal(L, "KEY_RGUI"); lua_pushinteger(L, 231); lua_setglobal(L, "KEY_RGUI");
lua_pushinteger(L, 0); lua_setglobal(L, "FILE_READ");
lua_pushinteger(L, 1); lua_setglobal(L, "FILE_WRITE");
if (lua_pcall(L,0, LUA_MULTRET, 0)) { if (lua_pcall(L,0, LUA_MULTRET, 0)) {
debug("runtime error"); debug("runtime error");
debug(lua_tostring(L, -1)); debug(lua_tostring(L, -1));

View File

@@ -13,15 +13,19 @@ struct surface_t {
#define swap(a, b) {auto tmp=a;a=b;b=tmp;} #define swap(a, b) {auto tmp=a;a=b;b=tmp;}
char window_title[256]; char window_title[256];
uint16_t screen_width = 160; uint16_t screen_width = 160;
uint16_t screen_height = 120; uint16_t screen_height = 120;
uint8_t screen_zoom = 4; uint8_t screen_zoom = 4;
surface_t surfaces[10];
surface_t *screen_surface = &surfaces[0]; surface_t surfaces[10];
surface_t *dest_surface = screen_surface; surface_t *screen_surface = &surfaces[0];
surface_t *source_surface = NULL; surface_t *dest_surface = screen_surface;
surface_t *map_surface = NULL; surface_t *source_surface = NULL;
surface_t *map_surface = NULL;
FILE *file = NULL;
bool file_ignore_comma=true;
#define DEST(x, y) dest_surface->p[x+y*dest_surface->w] #define DEST(x, y) dest_surface->p[x+y*dest_surface->w]
#define SOURCE(x, y) source_surface->p[x+y*source_surface->w] #define SOURCE(x, y) source_surface->p[x+y*source_surface->w]
@@ -89,6 +93,7 @@ struct bmp_header_t {
uint32_t num_important_colors; // ignore uint32_t num_important_colors; // ignore
}; };
char* get_value_from_line(char* line) { char* get_value_from_line(char* line) {
char* equal_character = strchr(line, '='); char* equal_character = strchr(line, '=');
if (equal_character == NULL) return NULL; if (equal_character == NULL) return NULL;
@@ -127,6 +132,8 @@ void reinit() {
if (surfaces[i].p != NULL) free(surfaces[i].p); if (surfaces[i].p != NULL) free(surfaces[i].p);
surfaces[i].p = NULL; surfaces[i].p = NULL;
} }
if (file!=NULL) fclose(file);
file = NULL;
} }
uint8_t newsurf(int w, int h) { uint8_t newsurf(int w, int h) {
@@ -902,3 +909,63 @@ void pdebug() {
uint8_t ascii(const char *str, uint8_t index) { uint8_t ascii(const char *str, uint8_t index) {
return str[index]; return str[index];
} }
char fstr[255];
void fopen(const char *filename, uint8_t mode) {
if (file != NULL) fclose(file);
file = fopen(filename, mode==0?"r":"w");
}
void fclose() {
fclose(file);
}
void fwritei(int value) {
sprintf(fstr, "%i ", value);
fwrite(fstr, strlen(fstr), 1, file);
}
void fwrited(float value) {
char str[255];
sprintf(fstr, "%f ", value);
fwrite(fstr, strlen(fstr), 1, file);
}
void fwrites(const char *value) {
char str[255];
sprintf(fstr, "\"%s\" ", value);
fwrite(fstr, strlen(fstr), 1, file);
}
void fwriteb(bool value) {
char str[255];
sprintf(fstr, value?"true ":"false ", value);
fwrite(fstr, strlen(fstr), 1, file);
}
void fwriteln() {
fwrite("\n", 1, 1, file);
}
int freadi() {
int value;
fscanf(file, "%i", &value);
return value;
}
float freadd() {
float value;
fscanf(file, "%f", &value);
return value;
}
const char *freads() {
fscanf(file, " \"%[^\"]\"", &fstr);
//fscanf(file, "\"%[^\"]\"", &fstr);
return fstr;
}
bool freadb() {
fscanf(file, "%s", &fstr);
return strcmp(fstr, "true")==0?true:false;
}

14
mini.h
View File

@@ -229,3 +229,17 @@ void debug(const char *str);
void pdebug(); void pdebug();
uint8_t ascii(const char *str, uint8_t index); uint8_t ascii(const char *str, uint8_t index);
void fopen(const char *filename, uint8_t mode=0);
void fclose();
void fwritei(int value);
void fwrited(float value);
void fwrites(const char *value);
void fwriteb(bool value);
void fwriteln();
int freadi();
float freadd();
const char *freads();
bool freadb();