Skip to content

Commit

Permalink
整理代码
Browse files Browse the repository at this point in the history
  • Loading branch information
actboy168 committed Apr 12, 2024
1 parent b82a84d commit b217ec1
Show file tree
Hide file tree
Showing 12 changed files with 122 additions and 187 deletions.
7 changes: 7 additions & 0 deletions 3rd/lua/bee_lua.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#if defined(_WIN32)
# define main(a, b) utf8_main(a, b)
# include "lua.c"
# undef main
#else
# include "lua.c"
#endif
30 changes: 0 additions & 30 deletions 3rd/lua/bee_utf8_crt.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -206,34 +206,4 @@ void utf8_ConsoleError(const char* fmt, const char* param) {
ConsoleWrite(stderr, str);
}

char** utf8_create_args(int argc, wchar_t** wargv) {
char** argv = new (std::nothrow) char*[argc + 1];
if (!argv) {
return NULL;
}
for (int i = 0; i < argc; ++i) {
size_t wlen = wcslen(wargv[i]);
size_t len = wtf8_from_utf16_length(wargv[i], wlen);
argv[i] = new (std::nothrow) char[len + 1];
if (!argv[i]) {
for (int j = 0; j < i; ++j) {
delete[] argv[j];
}
delete[] argv;
return NULL;
}
wtf8_from_utf16(wargv[i], wlen, argv[i], len);
argv[i][len] = '\0';
}
argv[argc] = NULL;
return argv;
}

void utf8_free_args(int argc, char** argv) {
for (int i = 0; i < argc; ++i) {
delete[] argv[i];
}
delete[] argv;
}

#endif
3 changes: 0 additions & 3 deletions 3rd/lua/bee_utf8_crt.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,6 @@ void utf8_ConsoleWrite(const char* msg, size_t sz);
void utf8_ConsoleNewLine();
void utf8_ConsoleError(const char* fmt, const char* param);

char** utf8_create_args(int argc, wchar_t** wargv);
void utf8_free_args(int argc, char** argv);

#endif

#if defined(__cplusplus)
Expand Down
81 changes: 81 additions & 0 deletions 3rd/lua/bee_utf8_main.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
#pragma once

#if defined(_WIN32)

# include <Windows.h>
# include <bee/platform/win/cwtf8.h>
# include <stdlib.h>
# include <string.h>

static char** utf8_create_args(int argc, wchar_t** wargv) {
char** argv = (char**)malloc((argc + 1) * sizeof(char*));
if (!argv) {
return NULL;
}
for (int i = 0; i < argc; ++i) {
size_t wlen = wcslen(wargv[i]);
size_t len = wtf8_from_utf16_length(wargv[i], wlen);
argv[i] = (char*)malloc((len + 1) * sizeof(char));

if (!argv[i]) {
for (int j = 0; j < i; ++j) {
free(argv[j]);
}
free(argv);
return NULL;
}
wtf8_from_utf16(wargv[i], wlen, argv[i], len);
argv[i][len] = '\0';
}
argv[argc] = NULL;
return argv;
}

static void utf8_free_args(int argc, char** argv) {
for (int i = 0; i < argc; ++i) {
free(argv[i]);
}
free(argv);
}

extern int utf8_main(int argc, char** argv);

static void enable_vtmode(HANDLE h) {
if (h == INVALID_HANDLE_VALUE) {
return;
}
DWORD mode = 0;
if (!GetConsoleMode(h, &mode)) {
return;
}
mode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING;
SetConsoleMode(h, mode);
}

int wmain(int argc, wchar_t** wargv) {
enable_vtmode(GetStdHandle(STD_OUTPUT_HANDLE));
enable_vtmode(GetStdHandle(STD_ERROR_HANDLE));
char** argv = utf8_create_args(argc, wargv);
if (!argv) {
return EXIT_FAILURE;
}
int ret = utf8_main(argc, argv);
utf8_free_args(argc, argv);
return ret;
}

# if defined(__MINGW32__)

extern int _CRT_glob;
extern "C" void __wgetmainargs(int*, wchar_t***, wchar_t***, int, int*);

int main() {
wchar_t **enpv, **argv;
int argc, si = 0;
__wgetmainargs(&argc, &argv, &enpv, _CRT_glob, &si);
return wmain(argc, argv);
}

# endif

#endif
File renamed without changes.
2 changes: 1 addition & 1 deletion 3rd/lua/lprefix.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@
#define _CRT_SECURE_NO_WARNINGS /* avoid warnings about ISO C functions */
#endif

#include "utf8_prefix.h"
#include "bee_utf8_prefix.h"

#endif /* } */

Expand Down
16 changes: 14 additions & 2 deletions 3rd/lua/onelua.c
Original file line number Diff line number Diff line change
Expand Up @@ -113,10 +113,22 @@

/* lua */
#ifdef MAKE_LUA
#include "lua.c"
# if defined(_WIN32)
# define main(a, b) utf8_main(a, b)
# include "lua.c"
# undef main
# else
# include "lua.c"
# endif
#endif

/* luac */
#ifdef MAKE_LUAC
#include "utf8_luac.c"
# if defined(_WIN32)
# define main(a, b) utf8_main(a, b)
# include "luac.c"
# undef main
# else
# include "luac.c"
# endif
#endif
59 changes: 0 additions & 59 deletions 3rd/lua/utf8_lua.c

This file was deleted.

40 changes: 0 additions & 40 deletions 3rd/lua/utf8_luac.c

This file was deleted.

46 changes: 1 addition & 45 deletions bootstrap/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -246,7 +246,7 @@ static int pmain(lua_State *L) {
}

#if defined(_WIN32)
static int utf8_main(int argc, char **argv) {
extern "C" int utf8_main(int argc, char **argv) {
#else
int main(int argc, char **argv) {
#endif
Expand All @@ -265,47 +265,3 @@ int main(int argc, char **argv) {
lua_close(L);
return (result && status == LUA_OK) ? EXIT_SUCCESS : EXIT_FAILURE;
}

#if defined(_WIN32)

# include <Windows.h>
# include <wchar.h>

static void enable_vtmode(HANDLE h) {
if (h == INVALID_HANDLE_VALUE) {
return;
}
DWORD mode = 0;
if (!GetConsoleMode(h, &mode)) {
return;
}
mode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING;
SetConsoleMode(h, mode);
}

int wmain(int argc, wchar_t **wargv) {
enable_vtmode(GetStdHandle(STD_OUTPUT_HANDLE));
enable_vtmode(GetStdHandle(STD_ERROR_HANDLE));
char **argv = utf8_create_args(argc, wargv);
int ret = utf8_main(argc, argv);
utf8_free_args(argc, argv);
return ret;
}

# if defined(__MINGW32__)

# include <stdlib.h>

extern int _CRT_glob;
extern "C" void __wgetmainargs(int *, wchar_t ***, wchar_t ***, int, int *);

int main() {
wchar_t **enpv, **argv;
int argc, si = 0;
__wgetmainargs(&argc, &argv, &enpv, _CRT_glob, &si);
return wmain(argc, argv);
}

# endif

#endif
5 changes: 4 additions & 1 deletion compile/common.lua
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,10 @@ lm:lua_source "source_bee" {

lm:source_set "source_lua" {
includes = ".",
sources = "3rd/lua/bee_utf8_crt.cpp",
sources = {
"3rd/lua/bee_utf8_crt.cpp",
"3rd/lua/bee_utf8_main.c",
},
}

lm:source_set "source_lua" {
Expand Down
20 changes: 14 additions & 6 deletions compile/lua.lua
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,15 @@ lm:lua_dll "bee" {
}

if lm.os == "windows" then
lm:source_set "lua54" {
lm:source_set "bee_utf8_crt" {
includes = ".",
sources = "3rd/lua/bee_utf8_crt.cpp",
sources = {
"3rd/lua/bee_utf8_crt.cpp",
"bee/platform/win/wtf8_win.cpp",
},
}
lm:shared_library "lua54" {
deps = "bee_utf8_crt",
sources = {
"3rd/lua/onelua.c",
"3rd/lua/linit.c",
Expand All @@ -31,18 +35,22 @@ if lm.os == "windows" then
}
}
lm:executable "lua" {
deps = "lua54",
deps = {
"lua54",
"bee_utf8_crt",
},
includes = ".",
sources = {
"3rd/lua/utf8_lua.c",
"3rd/lua/bee_utf8_crt.cpp",
"3rd/lua/bee_lua.c",
"3rd/lua/bee_utf8_main.c",
}
}
lm:executable "luac" {
deps = "bee_utf8_crt",
includes = ".",
sources = {
"3rd/lua/onelua.c",
"3rd/lua/bee_utf8_crt.cpp",
"3rd/lua/bee_utf8_main.c",
},
defines = {
"MAKE_LUAC",
Expand Down

0 comments on commit b217ec1

Please sign in to comment.