From 422c3c327295094c69a8f65698a08f31a8028dc3 Mon Sep 17 00:00:00 2001 From: Kartik Date: Tue, 4 Apr 2017 21:19:37 +0530 Subject: [PATCH] Implement error applet (#343) --- libctru/include/3ds.h | 3 +- libctru/include/3ds/applets/error.h | 89 +++++++++++++++++++++++++++++ libctru/source/applets/error.c | 54 +++++++++++++++++ 3 files changed, 145 insertions(+), 1 deletion(-) create mode 100644 libctru/include/3ds/applets/error.h create mode 100644 libctru/source/applets/error.c diff --git a/libctru/include/3ds.h b/libctru/include/3ds.h index ebee3d7..fd91d31 100644 --- a/libctru/include/3ds.h +++ b/libctru/include/3ds.h @@ -74,7 +74,8 @@ extern "C" { #include <3ds/ndsp/channel.h> #include <3ds/applets/swkbd.h> - +#include <3ds/applets/error.h> + #include <3ds/sdmc.h> #include <3ds/romfs.h> #include <3ds/font.h> diff --git a/libctru/include/3ds/applets/error.h b/libctru/include/3ds/applets/error.h new file mode 100644 index 0000000..e56d901 --- /dev/null +++ b/libctru/include/3ds/applets/error.h @@ -0,0 +1,89 @@ +/** + * @file error.h + * @brief Error applet. + */ +#pragma once + enum +{ + ERROR_LANGUAGE_FLAG = 0x100, /// +#include +#include <3ds/types.h> +#include <3ds/synchronization.h> +#include <3ds/services/apt.h> +#include <3ds/services/cfgu.h> +#include <3ds/util/utf.h> +#include <3ds/applets/error.h> + +void errorInit(errorConf* err, errorType type, CFG_Language lang) +{ + memset(err, 0, sizeof(*err)); + err->errorType = type; + err->useLanguage = lang; + err->upperScreenFlag = ERROR_NORMAL; + err->eulaVersion = 0; + err->homeButton = true; + err->softwareReset = false; + err->appJump = false; + err->returnCode = ERROR_UNKNOWN; +} + +void errorCode(errorConf* err, int error) +{ + err->errorCode = error; +} + +static void errorConvertToUTF16(u16* out, const char* in, size_t max) +{ + if (!in || !*in) + { + out[0] = 0; + return; + } + + ssize_t units = utf8_to_utf16(out, (const uint8_t*)in, max-1); + if (units < 0) + { + out[0] = 0; + return; + } + + out[units] = 0; +} + +void errorText(errorConf *err, const char* text) +{ + errorConvertToUTF16(err->Text, text, 1900); +} + +void errorDisp(errorConf* err) +{ + aptLaunchLibraryApplet(APPID_ERROR, err, sizeof(*err), 0); +}