mirror of
https://github.com/DarkStore-3DS/DarkStore.git
synced 2026-07-03 00:39:02 +00:00
Remove FTP, and fix Download speed crash...?
This commit is contained in:
@@ -30,7 +30,7 @@
|
|||||||
#include "common.hpp"
|
#include "common.hpp"
|
||||||
|
|
||||||
#define APP_TITLE "Universal-Updater"
|
#define APP_TITLE "Universal-Updater"
|
||||||
#define VERSION_STRING "2.5.0"
|
#define VERSION_STRING "2.5.1"
|
||||||
|
|
||||||
// The Release Fetch struct.
|
// The Release Fetch struct.
|
||||||
struct ReleaseFetch {
|
struct ReleaseFetch {
|
||||||
|
|||||||
@@ -1,47 +0,0 @@
|
|||||||
/*
|
|
||||||
* This file is part of Universal-Updater
|
|
||||||
* Copyright (C) 2019-2020 Universal-Team
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Additional Terms 7.b and 7.c of GPLv3 apply to this file:
|
|
||||||
* * Requiring preservation of specified reasonable legal notices or
|
|
||||||
* author attributions in that material or in the Appropriate Legal
|
|
||||||
* Notices displayed by works containing it.
|
|
||||||
* * Prohibiting misrepresentation of the origin of that material,
|
|
||||||
* or requiring that modified versions of such material be marked in
|
|
||||||
* reasonable ways as different from the original version.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _UNIVERSAL_UPDATER_FTP_SCREEN_HPP
|
|
||||||
#define _UNIVERSAL_UPDATER_FTP_SCREEN_HPP
|
|
||||||
|
|
||||||
#include "common.hpp"
|
|
||||||
#include "structs.hpp"
|
|
||||||
|
|
||||||
#include <vector>
|
|
||||||
|
|
||||||
class FTPScreen : public Screen {
|
|
||||||
public:
|
|
||||||
void Draw(void) const override;
|
|
||||||
void Logic(u32 hDown, u32 hHeld, touchPosition touch) override;
|
|
||||||
|
|
||||||
private:
|
|
||||||
int ftpEnabled = 1;
|
|
||||||
const std::vector<Structs::ButtonPos> arrowPos = {
|
|
||||||
{0, 215, 25, 25} // Back Arrow.
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,39 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#ifdef _3DS
|
|
||||||
#include <3ds.h>
|
|
||||||
#define ESC(x) "\x1b[" #x
|
|
||||||
#define RESET ESC(0m)
|
|
||||||
#define BLACK ESC(30m)
|
|
||||||
#define RED ESC(31;1m)
|
|
||||||
#define GREEN ESC(32;1m)
|
|
||||||
#define YELLOW ESC(33;1m)
|
|
||||||
#define BLUE ESC(34;1m)
|
|
||||||
#define MAGENTA ESC(35;1m)
|
|
||||||
#define CYAN ESC(36;1m)
|
|
||||||
#define WHITE ESC(37;1m)
|
|
||||||
#else
|
|
||||||
#define ESC(x)
|
|
||||||
#define RESET
|
|
||||||
#define BLACK
|
|
||||||
#define RED
|
|
||||||
#define GREEN
|
|
||||||
#define YELLOW
|
|
||||||
#define BLUE
|
|
||||||
#define MAGENTA
|
|
||||||
#define CYAN
|
|
||||||
#define WHITE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void console_init(void);
|
|
||||||
|
|
||||||
__attribute__((format(printf,1,2)))
|
|
||||||
void console_set_status(const char *fmt, ...);
|
|
||||||
|
|
||||||
__attribute__((format(printf,1,2)))
|
|
||||||
void console_print(const char *fmt, ...);
|
|
||||||
|
|
||||||
__attribute__((format(printf,1,2)))
|
|
||||||
void debug_print(const char *fmt, ...);
|
|
||||||
|
|
||||||
void console_render(void);
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include <3ds.h>
|
|
||||||
|
|
||||||
/*! Loop status */
|
|
||||||
typedef enum
|
|
||||||
{
|
|
||||||
LOOP_CONTINUE, /*!< Continue looping */
|
|
||||||
LOOP_RESTART, /*!< Reinitialize */
|
|
||||||
LOOP_EXIT, /*!< Terminate looping */
|
|
||||||
} loop_status_t;
|
|
||||||
|
|
||||||
extern bool isTransfering;
|
|
||||||
extern char ftp_accepted_connection[50], ftp_file_transfer[100];
|
|
||||||
|
|
||||||
int ftp_init(void);
|
|
||||||
loop_status_t ftp_loop(void);
|
|
||||||
void ftp_exit(void);
|
|
||||||
@@ -69,9 +69,10 @@ extern u32 selected;
|
|||||||
extern u32 unselected;
|
extern u32 unselected;
|
||||||
|
|
||||||
CURL *hnd; // Needed to display download speed properly?
|
CURL *hnd; // Needed to display download speed properly?
|
||||||
|
CURLcode curlResult;
|
||||||
|
|
||||||
curl_off_t downloadTotal = 1; //Dont initialize with 0 to avoid division by zero later
|
curl_off_t downloadTotal = 1; //Dont initialize with 0 to avoid division by zero later
|
||||||
curl_off_t downloadNow = 0;
|
curl_off_t downloadNow = 0;
|
||||||
curl_off_t downloadSpeed = 0;
|
|
||||||
|
|
||||||
static FILE *downfile = NULL;
|
static FILE *downfile = NULL;
|
||||||
static size_t file_buffer_pos = 0;
|
static size_t file_buffer_pos = 0;
|
||||||
@@ -152,12 +153,9 @@ static size_t file_handle_data(char *ptr, size_t size, size_t nmemb, void *userd
|
|||||||
}
|
}
|
||||||
|
|
||||||
Result downloadToFile(std::string url, std::string path) {
|
Result downloadToFile(std::string url, std::string path) {
|
||||||
|
|
||||||
Result retcode = 0;
|
Result retcode = 0;
|
||||||
downloadTotal = 1;
|
downloadTotal = 1;
|
||||||
downloadNow = 0;
|
|
||||||
int res;
|
int res;
|
||||||
CURLcode cres;
|
|
||||||
|
|
||||||
printf("Downloading from:\n%s\nto:\n%s\n", url.c_str(), path.c_str());
|
printf("Downloading from:\n%s\nto:\n%s\n", url.c_str(), path.c_str());
|
||||||
const char* filepath = path.c_str();
|
const char* filepath = path.c_str();
|
||||||
@@ -197,12 +195,11 @@ Result downloadToFile(std::string url, std::string path) {
|
|||||||
curl_easy_setopt(hnd, CURLOPT_VERBOSE, 1L);
|
curl_easy_setopt(hnd, CURLOPT_VERBOSE, 1L);
|
||||||
curl_easy_setopt(hnd, CURLOPT_STDERR, stdout);
|
curl_easy_setopt(hnd, CURLOPT_STDERR, stdout);
|
||||||
|
|
||||||
cres = curl_easy_perform(hnd);
|
curlResult = curl_easy_perform(hnd);
|
||||||
downloadSpeed = 0;
|
|
||||||
curl_easy_cleanup(hnd);
|
curl_easy_cleanup(hnd);
|
||||||
|
|
||||||
if (cres != CURLE_OK) {
|
if (curlResult != CURLE_OK) {
|
||||||
retcode = -cres;
|
retcode = -curlResult;
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -216,6 +213,7 @@ Result downloadToFile(std::string url, std::string path) {
|
|||||||
retcode = -3;
|
retcode = -3;
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
fflush(downfile);
|
fflush(downfile);
|
||||||
|
|
||||||
exit:
|
exit:
|
||||||
@@ -232,23 +230,26 @@ exit:
|
|||||||
if (socubuf) {
|
if (socubuf) {
|
||||||
free(socubuf);
|
free(socubuf);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (downfile) {
|
if (downfile) {
|
||||||
fclose(downfile);
|
fclose(downfile);
|
||||||
downfile = NULL;
|
downfile = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (g_buffers[0]) {
|
if (g_buffers[0]) {
|
||||||
free(g_buffers[0]);
|
free(g_buffers[0]);
|
||||||
g_buffers[0] = NULL;
|
g_buffers[0] = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (g_buffers[1]) {
|
if (g_buffers[1]) {
|
||||||
free(g_buffers[1]);
|
free(g_buffers[1]);
|
||||||
g_buffers[1] = NULL;
|
g_buffers[1] = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
g_index = 0;
|
g_index = 0;
|
||||||
file_buffer_pos = 0;
|
file_buffer_pos = 0;
|
||||||
file_toCommit_size = 0;
|
file_toCommit_size = 0;
|
||||||
writeError = false;
|
writeError = false;
|
||||||
|
|
||||||
return retcode;
|
return retcode;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -606,6 +607,7 @@ Result downloadFromRelease(std::string url, std::string asset, std::string path,
|
|||||||
result_buf = NULL;
|
result_buf = NULL;
|
||||||
result_sz = 0;
|
result_sz = 0;
|
||||||
result_written = 0;
|
result_written = 0;
|
||||||
|
|
||||||
if (assetUrl.empty()) {
|
if (assetUrl.empty()) {
|
||||||
ret = DL_ERROR_GIT;
|
ret = DL_ERROR_GIT;
|
||||||
} else {
|
} else {
|
||||||
@@ -839,22 +841,32 @@ std::string getLatestCommit(std::string repo, std::string array, std::string ite
|
|||||||
void displayProgressBar() {
|
void displayProgressBar() {
|
||||||
char str[256];
|
char str[256];
|
||||||
while(showProgressBar) {
|
while(showProgressBar) {
|
||||||
|
switch(progressbarType) {
|
||||||
|
case ProgressBar::Downloading:
|
||||||
if (downloadTotal < 1.0f) {
|
if (downloadTotal < 1.0f) {
|
||||||
downloadTotal = 1.0f;
|
downloadTotal = 1.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (downloadTotal < downloadNow) {
|
if (downloadTotal < downloadNow) {
|
||||||
downloadTotal = downloadNow;
|
downloadTotal = downloadNow;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (progressbarType == ProgressBar::Downloading) curl_easy_getinfo(hnd, CURLINFO_SPEED_DOWNLOAD_T, &downloadSpeed); // Get download speed.
|
if (!curlResult) {
|
||||||
|
curl_off_t speed;
|
||||||
switch(progressbarType) {
|
curlResult = curl_easy_getinfo(hnd, CURLINFO_SPEED_DOWNLOAD_T, &speed);
|
||||||
case ProgressBar::Downloading:
|
if (!curlResult) {
|
||||||
snprintf(str, sizeof(str), "%s / %s (%.2f%%) \n\n\n\n\n %s %lld %s",
|
snprintf(str, sizeof(str), "%s / %s (%.2f%%) \n\n\n\n\n %s %lld %s",
|
||||||
formatBytes(downloadNow).c_str(),
|
formatBytes(downloadNow).c_str(),
|
||||||
formatBytes(downloadTotal).c_str(),
|
formatBytes(downloadTotal).c_str(),
|
||||||
((float)downloadNow/(float)downloadTotal) * 100.0f,
|
((float)downloadNow/(float)downloadTotal) * 100.0f,
|
||||||
Lang::get("DOWNLOAD_SPEED").c_str(), (downloadSpeed / 1000), Lang::get("KB_PER_SECOND").c_str());
|
Lang::get("DOWNLOAD_SPEED").c_str(), (speed / 1000), Lang::get("KB_PER_SECOND").c_str());
|
||||||
|
} else {
|
||||||
|
snprintf(str, sizeof(str), "%s / %s (%.2f%%) \n\n\n\n\n %s",
|
||||||
|
formatBytes(downloadNow).c_str(),
|
||||||
|
formatBytes(downloadTotal).c_str(),
|
||||||
|
((float)downloadNow/(float)downloadTotal) * 100.0f);
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case ProgressBar::Extracting:
|
case ProgressBar::Extracting:
|
||||||
snprintf(str, sizeof(str), "%s / %s (%.2f%%)",
|
snprintf(str, sizeof(str), "%s / %s (%.2f%%)",
|
||||||
|
|||||||
@@ -1,97 +0,0 @@
|
|||||||
/*
|
|
||||||
* This file is part of Universal-Updater
|
|
||||||
* Copyright (C) 2019-2020 Universal-Team
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Additional Terms 7.b and 7.c of GPLv3 apply to this file:
|
|
||||||
* * Requiring preservation of specified reasonable legal notices or
|
|
||||||
* author attributions in that material or in the Appropriate Legal
|
|
||||||
* Notices displayed by works containing it.
|
|
||||||
* * Prohibiting misrepresentation of the origin of that material,
|
|
||||||
* or requiring that modified versions of such material be marked in
|
|
||||||
* reasonable ways as different from the original version.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "ftpScreen.hpp"
|
|
||||||
|
|
||||||
#include <algorithm>
|
|
||||||
#include <fstream>
|
|
||||||
#include <unistd.h>
|
|
||||||
|
|
||||||
extern "C" {
|
|
||||||
#include "ftp.h"
|
|
||||||
}
|
|
||||||
|
|
||||||
extern std::unique_ptr<Config> config;
|
|
||||||
extern bool touching(touchPosition touch, Structs::ButtonPos button);
|
|
||||||
extern touchPosition touch;
|
|
||||||
|
|
||||||
void FTPScreen::Draw(void) const {
|
|
||||||
ftp_init();
|
|
||||||
Result ret = 0;
|
|
||||||
char buf[137], hostname[128];
|
|
||||||
u32 wifiStatus = 0;
|
|
||||||
ret = gethostname(hostname, sizeof(hostname));
|
|
||||||
|
|
||||||
while(ftpEnabled == 1) {
|
|
||||||
ftp_loop();
|
|
||||||
Gui::clearTextBufs();
|
|
||||||
C3D_FrameBegin(C3D_FRAME_SYNCDRAW);
|
|
||||||
GFX::DrawTop();
|
|
||||||
Gui::DrawStringCentered(0, config->useBars() ? 0 : 2, 0.7f, config->textColor(), Lang::get("FTP_MODE"), 400);
|
|
||||||
if (fadealpha > 0) Gui::Draw_Rect(0, 0, 400, 240, C2D_Color32(fadecolor, fadecolor, fadecolor, fadealpha)); // Fade in/out effect
|
|
||||||
GFX::DrawBottom();
|
|
||||||
GFX::DrawArrow(0, 218, 0, 1);
|
|
||||||
ret = ACU_GetWifiStatus(&wifiStatus);
|
|
||||||
|
|
||||||
if ((wifiStatus != 0) && R_SUCCEEDED(ret)) {
|
|
||||||
Gui::DrawStringCentered(0, 40, 0.48f, config->textColor(), Lang::get("FTP_INITIALIZED"), 320);
|
|
||||||
snprintf(buf, 137, "IP: %s:5000", R_FAILED(ret)? Lang::get("FAILED_GET_IP").c_str() : hostname);
|
|
||||||
|
|
||||||
if (strlen(ftp_accepted_connection) != 0) {
|
|
||||||
Gui::DrawStringCentered(0, 80, 0.45f, config->textColor(), ftp_accepted_connection, 320);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strlen(ftp_file_transfer) != 0) {
|
|
||||||
Gui::DrawStringCentered(0, 150, 0.45f, config->textColor(), ftp_file_transfer, 320);
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
Gui::DrawStringCentered(0, 40, 0.48f, config->textColor(), Lang::get("FAILED_INITIALIZE_FTP"), 320);
|
|
||||||
snprintf(buf, 18, Lang::get("WIFI_NOT_ENABLED").c_str());
|
|
||||||
}
|
|
||||||
|
|
||||||
Gui::DrawStringCentered(0, 60, 0.48, config->textColor(), buf, 320);
|
|
||||||
Gui::DrawStringCentered(0, 222, 0.48f, config->textColor(), Lang::get("B_FTP_EXIT"), 320);
|
|
||||||
if (fadealpha > 0) Gui::Draw_Rect(0, 0, 320, 240, C2D_Color32(fadecolor, fadecolor, fadecolor, fadealpha)); // Fade in/out effect
|
|
||||||
Gui::clearTextBufs();
|
|
||||||
C3D_FrameEnd(0);
|
|
||||||
hidScanInput();
|
|
||||||
hidTouchRead(&touch);
|
|
||||||
u32 hDown = hidKeysDown();
|
|
||||||
|
|
||||||
if ((hDown & KEY_B) || (hDown & KEY_TOUCH && touching(touch, arrowPos[0])))
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
memset(ftp_accepted_connection, 0, 20); // Empty accepted connection address.
|
|
||||||
memset(ftp_file_transfer, 0, 50); // Empty transfer status.
|
|
||||||
ftp_exit();
|
|
||||||
|
|
||||||
Gui::screenBack(false);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Needed here, otherwise it won't compile.
|
|
||||||
void FTPScreen::Logic(u32 hDown, u32 hHeld, touchPosition touch) { }
|
|
||||||
@@ -25,7 +25,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.hpp"
|
#include "config.hpp"
|
||||||
#include "ftpScreen.hpp"
|
#include "credits.hpp"
|
||||||
#include "mainMenu.hpp"
|
#include "mainMenu.hpp"
|
||||||
#include "scriptHelper.hpp"
|
#include "scriptHelper.hpp"
|
||||||
#include "scriptlist.hpp"
|
#include "scriptlist.hpp"
|
||||||
@@ -51,7 +51,7 @@ void MainMenu::Draw(void) const {
|
|||||||
GFX::DrawButton(mainButtons[0].x, mainButtons[0].y, "UniStore");
|
GFX::DrawButton(mainButtons[0].x, mainButtons[0].y, "UniStore");
|
||||||
GFX::DrawButton(mainButtons[1].x, mainButtons[1].y, Lang::get("SCRIPTS"));
|
GFX::DrawButton(mainButtons[1].x, mainButtons[1].y, Lang::get("SCRIPTS"));
|
||||||
GFX::DrawButton(mainButtons[2].x, mainButtons[2].y, Lang::get("SETTINGS"));
|
GFX::DrawButton(mainButtons[2].x, mainButtons[2].y, Lang::get("SETTINGS"));
|
||||||
GFX::DrawButton(mainButtons[3].x, mainButtons[3].y, "FTP");
|
GFX::DrawButton(mainButtons[3].x, mainButtons[3].y, Lang::get("CREDITS"));
|
||||||
// Selector.
|
// Selector.
|
||||||
Animation::Button(mainButtons[Selection].x, mainButtons[Selection].y, .060);
|
Animation::Button(mainButtons[Selection].x, mainButtons[Selection].y, .060);
|
||||||
|
|
||||||
@@ -90,7 +90,7 @@ void MainMenu::Logic(u32 hDown, u32 hHeld, touchPosition touch) {
|
|||||||
Gui::setScreen(std::make_unique<Settings>(), config->screenFade(), true);
|
Gui::setScreen(std::make_unique<Settings>(), config->screenFade(), true);
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
Gui::setScreen(std::make_unique<FTPScreen>(), false, true);
|
Gui::setScreen(std::make_unique<Credits>(), config->screenFade(), true);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -103,7 +103,7 @@ void MainMenu::Logic(u32 hDown, u32 hHeld, touchPosition touch) {
|
|||||||
} else if (touching(touch, mainButtons[2])) {
|
} else if (touching(touch, mainButtons[2])) {
|
||||||
Gui::setScreen(std::make_unique<Settings>(), config->screenFade(), true);
|
Gui::setScreen(std::make_unique<Settings>(), config->screenFade(), true);
|
||||||
} else if (touching(touch, mainButtons[3])) {
|
} else if (touching(touch, mainButtons[3])) {
|
||||||
Gui::setScreen(std::make_unique<FTPScreen>(), false, true);
|
Gui::setScreen(std::make_unique<Credits>(), config->screenFade(), true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+12
-32
@@ -24,7 +24,6 @@
|
|||||||
* reasonable ways as different from the original version.
|
* reasonable ways as different from the original version.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "credits.hpp"
|
|
||||||
#include "keyboard.hpp"
|
#include "keyboard.hpp"
|
||||||
#include "settings.hpp"
|
#include "settings.hpp"
|
||||||
|
|
||||||
@@ -59,7 +58,7 @@ void Settings::DrawSubMenu(void) const {
|
|||||||
|
|
||||||
GFX::DrawButton(mainButtons[0].x, mainButtons[0].y, Lang::get("LANGUAGE"));
|
GFX::DrawButton(mainButtons[0].x, mainButtons[0].y, Lang::get("LANGUAGE"));
|
||||||
GFX::DrawButton(mainButtons[1].x, mainButtons[1].y, Lang::get("COLORS"));
|
GFX::DrawButton(mainButtons[1].x, mainButtons[1].y, Lang::get("COLORS"));
|
||||||
GFX::DrawButton(mainButtons[2].x, mainButtons[2].y, Lang::get("CREDITS"));
|
GFX::DrawButton(mainButtons[2].x, mainButtons[2].y, Lang::get("CHANGE_BAR_STYLE"));
|
||||||
// Selector.
|
// Selector.
|
||||||
Animation::Button(mainButtons[Selection].x, mainButtons[Selection].y, .060);
|
Animation::Button(mainButtons[Selection].x, mainButtons[Selection].y, .060);
|
||||||
if (fadealpha > 0) Gui::Draw_Rect(0, 0, 320, 240, C2D_Color32(fadecolor, fadecolor, fadecolor, fadealpha)); // Fade in/out effect
|
if (fadealpha > 0) Gui::Draw_Rect(0, 0, 320, 240, C2D_Color32(fadecolor, fadecolor, fadecolor, fadealpha)); // Fade in/out effect
|
||||||
@@ -97,6 +96,7 @@ void Settings::DrawLanguageSelection(void) const {
|
|||||||
|
|
||||||
Gui::DrawStringCentered(0, 50+(i*57), 0.7f, config->textColor(), line1, 320);
|
Gui::DrawStringCentered(0, 50+(i*57), 0.7f, config->textColor(), line1, 320);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fadealpha > 0) Gui::Draw_Rect(0, 0, 320, 240, C2D_Color32(fadecolor, fadecolor, fadecolor, fadealpha)); // Fade in/out effect
|
if (fadealpha > 0) Gui::Draw_Rect(0, 0, 320, 240, C2D_Color32(fadecolor, fadecolor, fadecolor, fadealpha)); // Fade in/out effect
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -215,6 +215,7 @@ void Settings::DrawColorChanging(void) const {
|
|||||||
GFX::DrawButton(mainButtons[2].x, mainButtons[2].y, ColorHelper::getColorName(config->buttonColor(), 0).c_str(), C2D_Color32(0, 0, 255, 255));
|
GFX::DrawButton(mainButtons[2].x, mainButtons[2].y, ColorHelper::getColorName(config->buttonColor(), 0).c_str(), C2D_Color32(0, 0, 255, 255));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fadealpha > 0) Gui::Draw_Rect(0, 0, 320, 240, C2D_Color32(fadecolor, fadecolor, fadecolor, fadealpha)); // Fade in/out effect
|
if (fadealpha > 0) Gui::Draw_Rect(0, 0, 320, 240, C2D_Color32(fadecolor, fadecolor, fadecolor, fadealpha)); // Fade in/out effect
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -226,9 +227,8 @@ void Settings::DrawMiscSettings(void) const {
|
|||||||
GFX::DrawArrow(0, 218, 0, 1);
|
GFX::DrawArrow(0, 218, 0, 1);
|
||||||
|
|
||||||
GFX::DrawButton(mainButtons2[0].x, mainButtons2[0].y, Lang::get("CHANGE_MUSICFILE"));
|
GFX::DrawButton(mainButtons2[0].x, mainButtons2[0].y, Lang::get("CHANGE_MUSICFILE"));
|
||||||
GFX::DrawButton(mainButtons2[1].x, mainButtons2[1].y, Lang::get("CHANGE_BAR_STYLE"));
|
GFX::DrawButton(mainButtons2[1].x, mainButtons2[1].y, Lang::get("CHANGE_KEY_DELAY"));
|
||||||
GFX::DrawButton(mainButtons2[2].x, mainButtons2[2].y, Lang::get("CHANGE_KEY_DELAY"));
|
GFX::DrawButton(mainButtons2[2].x, mainButtons2[2].y, Lang::get("TOGGLE_FADE"));
|
||||||
GFX::DrawButton(mainButtons2[3].x, mainButtons2[3].y, Lang::get("TOGGLE_FADE"));
|
|
||||||
|
|
||||||
// Selector.
|
// Selector.
|
||||||
Animation::Button(mainButtons2[Selection].x, mainButtons2[Selection].y, .060);
|
Animation::Button(mainButtons2[Selection].x, mainButtons2[Selection].y, .060);
|
||||||
@@ -241,27 +241,19 @@ void Settings::MiscSettingsLogic(u32 hDown, u32 hHeld, touchPosition touch) {
|
|||||||
std::string tempMusic = selectFilePath(Lang::get("SELECT_MUSIC_FILE"), "sdmc:/", {"wav"}, 2);
|
std::string tempMusic = selectFilePath(Lang::get("SELECT_MUSIC_FILE"), "sdmc:/", {"wav"}, 2);
|
||||||
if (tempMusic != "") {
|
if (tempMusic != "") {
|
||||||
config->musicPath(tempMusic);
|
config->musicPath(tempMusic);
|
||||||
changesMade = true;
|
|
||||||
}
|
}
|
||||||
} else if (Selection == 1) {
|
} else if (Selection == 1) {
|
||||||
if (config->useBars() == true) config->useBars(false);
|
|
||||||
else if (config->useBars() == false) config->useBars(true);
|
|
||||||
changesMade = true;
|
|
||||||
} else if (Selection == 2) {
|
|
||||||
config->keyDelay(Input::getUint(255, Lang::get("ENTER_KEY_DELAY")));
|
config->keyDelay(Input::getUint(255, Lang::get("ENTER_KEY_DELAY")));
|
||||||
changesMade = true;
|
} else if (Selection == 2) {
|
||||||
} else if (Selection == 3) {
|
|
||||||
if (config->screenFade()) {
|
if (config->screenFade()) {
|
||||||
if (Msg::promptMsg(Lang::get("TOGGLE_FADE_DISABLE"))) {
|
if (Msg::promptMsg(Lang::get("TOGGLE_FADE_DISABLE"))) {
|
||||||
config->screenFade(false);
|
config->screenFade(false);
|
||||||
Msg::DisplayWarnMsg(Lang::get("DISABLED"));
|
Msg::DisplayWarnMsg(Lang::get("DISABLED"));
|
||||||
changesMade = true;
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (Msg::promptMsg(Lang::get("TOGGLE_FADE_ENABLE"))) {
|
if (Msg::promptMsg(Lang::get("TOGGLE_FADE_ENABLE"))) {
|
||||||
config->screenFade(true);
|
config->screenFade(true);
|
||||||
Msg::DisplayWarnMsg(Lang::get("ENABLED"));
|
Msg::DisplayWarnMsg(Lang::get("ENABLED"));
|
||||||
changesMade = true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -272,27 +264,19 @@ void Settings::MiscSettingsLogic(u32 hDown, u32 hHeld, touchPosition touch) {
|
|||||||
std::string tempMusic = selectFilePath(Lang::get("SELECT_MUSIC_FILE"), "sdmc:/", {"wav"}, 2);
|
std::string tempMusic = selectFilePath(Lang::get("SELECT_MUSIC_FILE"), "sdmc:/", {"wav"}, 2);
|
||||||
if (tempMusic != "") {
|
if (tempMusic != "") {
|
||||||
config->musicPath(tempMusic);
|
config->musicPath(tempMusic);
|
||||||
changesMade = true;
|
|
||||||
}
|
}
|
||||||
} else if (touching(touch, mainButtons2[1])) {
|
} else if (touching(touch, mainButtons2[1])) {
|
||||||
if (config->useBars() == true) config->useBars(false);
|
|
||||||
else if (config->useBars() == false) config->useBars(true);
|
|
||||||
changesMade = true;
|
|
||||||
} else if (touching(touch, mainButtons2[2])) {
|
|
||||||
config->keyDelay(Input::getUint(255, Lang::get("ENTER_KEY_DELAY")));
|
config->keyDelay(Input::getUint(255, Lang::get("ENTER_KEY_DELAY")));
|
||||||
changesMade = true;
|
} else if (touching(touch, mainButtons2[2])) {
|
||||||
} else if (touching(touch, mainButtons2[3])) {
|
|
||||||
if (config->screenFade()) {
|
if (config->screenFade()) {
|
||||||
if (Msg::promptMsg(Lang::get("TOGGLE_FADE_DISABLE"))) {
|
if (Msg::promptMsg(Lang::get("TOGGLE_FADE_DISABLE"))) {
|
||||||
config->screenFade(false);
|
config->screenFade(false);
|
||||||
Msg::DisplayWarnMsg(Lang::get("DISABLED"));
|
Msg::DisplayWarnMsg(Lang::get("DISABLED"));
|
||||||
changesMade = true;
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (Msg::promptMsg(Lang::get("TOGGLE_FADE_ENABLE"))) {
|
if (Msg::promptMsg(Lang::get("TOGGLE_FADE_ENABLE"))) {
|
||||||
config->screenFade(true);
|
config->screenFade(true);
|
||||||
Msg::DisplayWarnMsg(Lang::get("ENABLED"));
|
Msg::DisplayWarnMsg(Lang::get("ENABLED"));
|
||||||
changesMade = true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -309,13 +293,11 @@ void Settings::MiscSettingsLogic(u32 hDown, u32 hHeld, touchPosition touch) {
|
|||||||
if (Msg::promptMsg(Lang::get("PROGRESS_BAR_DISABLE"))) {
|
if (Msg::promptMsg(Lang::get("PROGRESS_BAR_DISABLE"))) {
|
||||||
config->progressDisplay(false);
|
config->progressDisplay(false);
|
||||||
Msg::DisplayWarnMsg(Lang::get("DISABLED"));
|
Msg::DisplayWarnMsg(Lang::get("DISABLED"));
|
||||||
changesMade = true;
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (Msg::promptMsg(Lang::get("PROGRESS_BAR_ENABLE"))) {
|
if (Msg::promptMsg(Lang::get("PROGRESS_BAR_ENABLE"))) {
|
||||||
config->progressDisplay(true);
|
config->progressDisplay(true);
|
||||||
Msg::DisplayWarnMsg(Lang::get("ENABLED"));
|
Msg::DisplayWarnMsg(Lang::get("ENABLED"));
|
||||||
changesMade = true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -354,7 +336,8 @@ void Settings::SubMenuLogic(u32 hDown, u32 hHeld, touchPosition touch) {
|
|||||||
mode = 2;
|
mode = 2;
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
Gui::setScreen(std::make_unique<Credits>(), config->screenFade(), true);
|
if (config->useBars()) config->useBars(false);
|
||||||
|
else config->useBars(true);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -368,7 +351,8 @@ void Settings::SubMenuLogic(u32 hDown, u32 hHeld, touchPosition touch) {
|
|||||||
screenPos = 0;
|
screenPos = 0;
|
||||||
mode = 2;
|
mode = 2;
|
||||||
} else if (touching(touch, mainButtons[2])) {
|
} else if (touching(touch, mainButtons[2])) {
|
||||||
Gui::setScreen(std::make_unique<Credits>(), config->screenFade(), true);
|
if (config->useBars()) config->useBars(false);
|
||||||
|
else config->useBars(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -410,7 +394,6 @@ void Settings::LanguageSelection(u32 hDown, u32 hHeld, touchPosition touch) {
|
|||||||
if (hDown & KEY_A) {
|
if (hDown & KEY_A) {
|
||||||
config->language(langsTemp[selectedLang]);
|
config->language(langsTemp[selectedLang]);
|
||||||
Lang::load(config->language());
|
Lang::load(config->language());
|
||||||
changesMade = true;
|
|
||||||
mode = 0;
|
mode = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -459,7 +442,6 @@ void Settings::colorChanging(u32 hDown, u32 hHeld, touchPosition touch) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
if ((hDown & KEY_SELECT) || (hDown & KEY_TOUCH && touching(touch, arrowPos[3]))) {
|
if ((hDown & KEY_SELECT) || (hDown & KEY_TOUCH && touching(touch, arrowPos[3]))) {
|
||||||
colorSelection = colorMode;
|
colorSelection = colorMode;
|
||||||
dropDownMenu = true;
|
dropDownMenu = true;
|
||||||
@@ -507,7 +489,6 @@ void Settings::colorChanging(u32 hDown, u32 hHeld, touchPosition touch) {
|
|||||||
} else if (colorMode == 11) {
|
} else if (colorMode == 11) {
|
||||||
config->buttonColor(RGBA8(red, ColorHelper::getColorValue(config->buttonColor(), 1), ColorHelper::getColorValue(config->buttonColor(), 0), 255));
|
config->buttonColor(RGBA8(red, ColorHelper::getColorValue(config->buttonColor(), 1), ColorHelper::getColorValue(config->buttonColor(), 0), 255));
|
||||||
}
|
}
|
||||||
changesMade = true;
|
|
||||||
}
|
}
|
||||||
} else if (touching(touch, mainButtons[1])) {
|
} else if (touching(touch, mainButtons[1])) {
|
||||||
int temp = Input::getUint(255, Lang::get("ENTER_GREEN_RGB"));
|
int temp = Input::getUint(255, Lang::get("ENTER_GREEN_RGB"));
|
||||||
@@ -538,7 +519,6 @@ void Settings::colorChanging(u32 hDown, u32 hHeld, touchPosition touch) {
|
|||||||
} else if (colorMode == 11) {
|
} else if (colorMode == 11) {
|
||||||
config->buttonColor(RGBA8(ColorHelper::getColorValue(config->buttonColor(), 2), green, ColorHelper::getColorValue(config->buttonColor(), 0), 255));
|
config->buttonColor(RGBA8(ColorHelper::getColorValue(config->buttonColor(), 2), green, ColorHelper::getColorValue(config->buttonColor(), 0), 255));
|
||||||
}
|
}
|
||||||
changesMade = true;
|
|
||||||
}
|
}
|
||||||
} else if (touching(touch, mainButtons[2])) {
|
} else if (touching(touch, mainButtons[2])) {
|
||||||
int temp = Input::getUint(255, Lang::get("ENTER_BLUE_RGB"));
|
int temp = Input::getUint(255, Lang::get("ENTER_BLUE_RGB"));
|
||||||
@@ -569,11 +549,11 @@ void Settings::colorChanging(u32 hDown, u32 hHeld, touchPosition touch) {
|
|||||||
} else if (colorMode == 11) {
|
} else if (colorMode == 11) {
|
||||||
config->buttonColor(RGBA8(ColorHelper::getColorValue(config->buttonColor(), 2), ColorHelper::getColorValue(config->buttonColor(), 1), blue, 255));
|
config->buttonColor(RGBA8(ColorHelper::getColorValue(config->buttonColor(), 2), ColorHelper::getColorValue(config->buttonColor(), 1), blue, 255));
|
||||||
}
|
}
|
||||||
changesMade = true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (colorSelection < screenPos) {
|
if (colorSelection < screenPos) {
|
||||||
screenPos = colorSelection;
|
screenPos = colorSelection;
|
||||||
} else if (colorSelection > screenPos + ENTRIES_PER_SCREEN - 1) {
|
} else if (colorSelection > screenPos + ENTRIES_PER_SCREEN - 1) {
|
||||||
|
|||||||
@@ -1,237 +0,0 @@
|
|||||||
#include "console.h"
|
|
||||||
|
|
||||||
#include <arpa/inet.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <stdarg.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
#ifdef _3DS
|
|
||||||
#include <3ds.h>
|
|
||||||
|
|
||||||
static PrintConsole status_console;
|
|
||||||
static PrintConsole main_console;
|
|
||||||
static PrintConsole tcp_console;
|
|
||||||
#if ENABLE_LOGGING
|
|
||||||
static bool disable_logging = false;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*! initialize console subsystem */
|
|
||||||
void
|
|
||||||
console_init(void)
|
|
||||||
{
|
|
||||||
consoleInit(GFX_TOP, &status_console);
|
|
||||||
consoleSetWindow(&status_console, 0, 0, 50, 1);
|
|
||||||
|
|
||||||
consoleInit(GFX_TOP, &main_console);
|
|
||||||
consoleSetWindow(&main_console, 0, 1, 50, 29);
|
|
||||||
|
|
||||||
consoleInit(GFX_BOTTOM, &tcp_console);
|
|
||||||
|
|
||||||
consoleSelect(&main_console);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*! set status bar contents
|
|
||||||
*
|
|
||||||
* @param[in] fmt format string
|
|
||||||
* @param[in] ... format arguments
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
console_set_status(const char *fmt, ...)
|
|
||||||
{
|
|
||||||
va_list ap;
|
|
||||||
|
|
||||||
consoleSelect(&status_console);
|
|
||||||
va_start(ap, fmt);
|
|
||||||
vprintf(fmt, ap);
|
|
||||||
#ifdef ENABLE_LOGGING
|
|
||||||
vfprintf(stderr, fmt, ap);
|
|
||||||
#endif
|
|
||||||
va_end(ap);
|
|
||||||
consoleSelect(&main_console);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*! add text to the console
|
|
||||||
*
|
|
||||||
* @param[in] fmt format string
|
|
||||||
* @param[in] ... format arguments
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
console_print(const char *fmt, ...)
|
|
||||||
{
|
|
||||||
va_list ap;
|
|
||||||
|
|
||||||
va_start(ap, fmt);
|
|
||||||
vprintf(fmt, ap);
|
|
||||||
#ifdef ENABLE_LOGGING
|
|
||||||
if (!disable_logging)
|
|
||||||
vfprintf(stderr, fmt, ap);
|
|
||||||
#endif
|
|
||||||
va_end(ap);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*! print debug message
|
|
||||||
*
|
|
||||||
* @param[in] fmt format string
|
|
||||||
* @param[in] ... format arguments
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
debug_print(const char *fmt, ...)
|
|
||||||
{
|
|
||||||
#ifdef ENABLE_LOGGING
|
|
||||||
va_list ap;
|
|
||||||
|
|
||||||
va_start(ap, fmt);
|
|
||||||
vfprintf(stderr, fmt, ap);
|
|
||||||
va_end(ap);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
/*! print tcp tables */
|
|
||||||
static void
|
|
||||||
print_tcp_table(void)
|
|
||||||
{
|
|
||||||
static SOCU_TCPTableEntry tcp_entries[32];
|
|
||||||
socklen_t optlen;
|
|
||||||
size_t i;
|
|
||||||
int rc, lines = 0;
|
|
||||||
|
|
||||||
#ifdef ENABLE_LOGGING
|
|
||||||
disable_logging = true;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
consoleSelect(&tcp_console);
|
|
||||||
console_print("\x1b[0;0H\x1b[K");
|
|
||||||
optlen = sizeof(tcp_entries);
|
|
||||||
rc = SOCU_GetNetworkOpt(SOL_CONFIG, NETOPT_TCP_TABLE, tcp_entries, &optlen);
|
|
||||||
if(rc != 0 && errno != ENODEV)
|
|
||||||
console_print(RED "tcp table: %d %s\n\x1b[J\n" RESET, errno, strerror(errno));
|
|
||||||
else if(rc == 0)
|
|
||||||
{
|
|
||||||
for(i = 0; lines < 30 && i < optlen / sizeof(SOCU_TCPTableEntry); ++i)
|
|
||||||
{
|
|
||||||
SOCU_TCPTableEntry *entry = &tcp_entries[i];
|
|
||||||
struct sockaddr_in *local = (struct sockaddr_in*)&entry->local;
|
|
||||||
struct sockaddr_in *remote = (struct sockaddr_in*)&entry->remote;
|
|
||||||
|
|
||||||
console_print(GREEN "%stcp[%zu]: ", i == 0 ? "" : "\n", i);
|
|
||||||
switch(entry->state)
|
|
||||||
{
|
|
||||||
case TCP_STATE_CLOSED:
|
|
||||||
console_print("CLOSED\x1b[K");
|
|
||||||
local = remote = NULL;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case TCP_STATE_LISTEN:
|
|
||||||
console_print("LISTEN\x1b[K");
|
|
||||||
remote = NULL;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case TCP_STATE_ESTABLISHED:
|
|
||||||
console_print("ESTABLISHED\x1b[K");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case TCP_STATE_FINWAIT1:
|
|
||||||
console_print("FINWAIT1\x1b[K");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case TCP_STATE_FINWAIT2:
|
|
||||||
console_print("FINWAIT2\x1b[K");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case TCP_STATE_CLOSE_WAIT:
|
|
||||||
console_print("CLOSE_WAIT\x1b[K");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case TCP_STATE_LAST_ACK:
|
|
||||||
console_print("LAST_ACK\x1b[K");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case TCP_STATE_TIME_WAIT:
|
|
||||||
console_print("TIME_WAIT\x1b[K");
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
console_print("State %lu\x1b[K", entry->state);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
++lines;
|
|
||||||
|
|
||||||
if(local && (lines++ < 30))
|
|
||||||
console_print("\n Local %s:%u\x1b[K", inet_ntoa(local->sin_addr),
|
|
||||||
ntohs(local->sin_port));
|
|
||||||
|
|
||||||
if(remote && (lines++ < 30))
|
|
||||||
console_print("\n Peer %s:%u\x1b[K", inet_ntoa(remote->sin_addr),
|
|
||||||
ntohs(remote->sin_port));
|
|
||||||
}
|
|
||||||
|
|
||||||
console_print(RESET "\x1b[J");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
console_print("\x1b[2J");
|
|
||||||
|
|
||||||
consoleSelect(&main_console);
|
|
||||||
|
|
||||||
#ifdef ENABLE_LOGGING
|
|
||||||
disable_logging = false;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
/*! draw console to screen */
|
|
||||||
void
|
|
||||||
console_render(void)
|
|
||||||
{
|
|
||||||
/* print tcp table */
|
|
||||||
print_tcp_table();
|
|
||||||
|
|
||||||
/* flush framebuffer */
|
|
||||||
gfxFlushBuffers();
|
|
||||||
gspWaitForVBlank();
|
|
||||||
gfxSwapBuffers();
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
|
|
||||||
/* this is a lot easier when you have a real console */
|
|
||||||
|
|
||||||
void
|
|
||||||
console_init(void)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
console_set_status(const char *fmt, ...)
|
|
||||||
{
|
|
||||||
va_list ap;
|
|
||||||
va_start(ap, fmt);
|
|
||||||
vprintf(fmt, ap);
|
|
||||||
va_end(ap);
|
|
||||||
fputc('\n', stdout);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
console_print(const char *fmt, ...)
|
|
||||||
{
|
|
||||||
va_list ap;
|
|
||||||
va_start(ap, fmt);
|
|
||||||
vprintf(fmt, ap);
|
|
||||||
va_end(ap);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
debug_print(const char *fmt, ...)
|
|
||||||
{
|
|
||||||
#ifdef ENABLE_LOGGING
|
|
||||||
va_list ap;
|
|
||||||
va_start(ap, fmt);
|
|
||||||
vfprintf(stderr, fmt, ap);
|
|
||||||
va_end(ap);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
void console_render(void)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
-4046
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user