From cc60d562fd9fe85deca72a63917f6721d40cc76d Mon Sep 17 00:00:00 2001 From: Kronos2308 <36446521+Kronos2308@users.noreply.github.com> Date: Thu, 19 Sep 2019 21:30:28 +0100 Subject: [PATCH] initial commit --- .gitignore | 11 ++ LICENSE | 339 ++++++++++++++++++++++++++++++++++++++++++++++++ Makefile | 196 ++++++++++++++++++++++++++++ README.md | 9 ++ compile.cmd | 6 + icon-nsp.jpg | Bin 0 -> 36263 bytes icon.jpg | Bin 0 -> 48065 bytes source/main.cpp | 292 +++++++++++++++++++++++++++++++++++++++++ 8 files changed, 853 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 Makefile create mode 100644 README.md create mode 100644 compile.cmd create mode 100644 icon-nsp.jpg create mode 100644 icon.jpg create mode 100644 source/main.cpp diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a51fd93 --- /dev/null +++ b/.gitignore @@ -0,0 +1,11 @@ +build/* +*.elf +*.nro +*.pfs0 +*.nso +*.nacp +*.nsp +*.npdm +img +*.rar + diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..d159169 --- /dev/null +++ b/LICENSE @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + 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 2 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, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..0e725d0 --- /dev/null +++ b/Makefile @@ -0,0 +1,196 @@ +#--------------------------------------------------------------------------------- +.SUFFIXES: +#--------------------------------------------------------------------------------- + +ifeq ($(strip $(DEVKITPRO)),) +$(error "Please set DEVKITPRO in your environment. export DEVKITPRO=/devkitpro") +endif + +TOPDIR ?= $(CURDIR) +include $(DEVKITPRO)/libnx/switch_rules + +#--------------------------------------------------------------------------------- +# TARGET is the name of the output +# BUILD is the directory where object files & intermediate files will be placed +# SOURCES is a list of directories containing source code +# DATA is a list of directories containing data files +# INCLUDES is a list of directories containing header files +# EXEFS_SRC is the optional input directory containing data copied into exefs, if anything this normally should only contain "main.npdm". +# ROMFS is the directory containing data to be added to RomFS, relative to the Makefile (Optional) +# +# NO_ICON: if set to anything, do not use icon. +# NO_NACP: if set to anything, no .nacp file is generated. +# APP_TITLE is the name of the app stored in the .nacp file (Optional) +# APP_AUTHOR is the author of the app stored in the .nacp file (Optional) +# APP_VERSION is the version of the app stored in the .nacp file (Optional) +# APP_TITLEID is the titleID of the app stored in the .nacp file (Optional) +# ICON is the filename of the icon (.jpg), relative to the project folder. +# If not set, it attempts to use one of the following (in this order): +# - .jpg +# - icon.jpg +# - /default_icon.jpg +#--------------------------------------------------------------------------------- +TARGET := Haku33 +BUILD := build +SOURCES := source +DATA := data +INCLUDES := include +EXEFS_SRC := exefs_src +APP_TITLE := Haku33 +APP_AUTHOR := Kronos2308 +APP_VERSION := 1.1 +#ROMFS := romfs + +#--------------------------------------------------------------------------------- +# options for code generation +#--------------------------------------------------------------------------------- +ARCH := -march=armv8-a -mtune=cortex-a57 -mtp=soft -fPIE + +CFLAGS := -g -O2 -ffunction-sections \ + $(ARCH) $(DEFINES) + +CFLAGS += $(INCLUDE) -D__SWITCH__ -DVERSION='"$(APP_VERSION)"' -DTITLE='"$(APP_TITLE)"' + +CXXFLAGS := $(CFLAGS) -fno-rtti -fno-exceptions + +ASFLAGS := -g $(ARCH) +LDFLAGS = -specs=$(DEVKITPRO)/libnx/switch.specs -g $(ARCH) -Wl,-Map,$(notdir $*.map) + +LIBS := -lnx + +#--------------------------------------------------------------------------------- +# list of directories containing libraries, this must be the top level containing +# include and lib +#--------------------------------------------------------------------------------- +LIBDIRS := $(PORTLIBS) $(LIBNX) + + +#--------------------------------------------------------------------------------- +# no real need to edit anything past this point unless you need to add additional +# rules for different file extensions +#--------------------------------------------------------------------------------- +ifneq ($(BUILD),$(notdir $(CURDIR))) +#--------------------------------------------------------------------------------- + +export OUTPUT := $(CURDIR)/$(TARGET) +export TOPDIR := $(CURDIR) + +export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ + $(foreach dir,$(DATA),$(CURDIR)/$(dir)) + +export DEPSDIR := $(CURDIR)/$(BUILD) + +CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) +CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) +SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) +BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) + +#--------------------------------------------------------------------------------- +# use CXX for linking C++ projects, CC for standard C +#--------------------------------------------------------------------------------- +ifeq ($(strip $(CPPFILES)),) +#--------------------------------------------------------------------------------- + export LD := $(CC) +#--------------------------------------------------------------------------------- +else +#--------------------------------------------------------------------------------- + export LD := $(CXX) +#--------------------------------------------------------------------------------- +endif +#--------------------------------------------------------------------------------- + +export OFILES_BIN := $(addsuffix .o,$(BINFILES)) +export OFILES_SRC := $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o) +export OFILES := $(OFILES_BIN) $(OFILES_SRC) +export HFILES_BIN := $(addsuffix .h,$(subst .,_,$(BINFILES))) + +export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \ + $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ + -I$(CURDIR)/$(BUILD) + +export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) + +export BUILD_EXEFS_SRC := $(TOPDIR)/$(EXEFS_SRC) + +ifeq ($(strip $(ICON)),) + icons := $(wildcard *.jpg) + ifneq (,$(findstring $(TARGET).jpg,$(icons))) + export APP_ICON := $(TOPDIR)/$(TARGET).jpg + else + ifneq (,$(findstring icon.jpg,$(icons))) + export APP_ICON := $(TOPDIR)/icon.jpg + endif + endif +else + export APP_ICON := $(TOPDIR)/$(ICON) +endif + +ifeq ($(strip $(NO_ICON)),) + export NROFLAGS += --icon=$(APP_ICON) +endif + +ifeq ($(strip $(NO_NACP)),) + export NROFLAGS += --nacp=$(CURDIR)/$(TARGET).nacp +endif + +ifneq ($(APP_TITLEID),) + export NACPFLAGS += --titleid=$(APP_TITLEID) +endif + +ifneq ($(ROMFS),) + export NROFLAGS += --romfsdir=$(CURDIR)/$(ROMFS) +endif + +.PHONY: $(BUILD) clean all + +#--------------------------------------------------------------------------------- +all: $(BUILD) + +$(BUILD): + @[ -d $@ ] || mkdir -p $@ + @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile + +#--------------------------------------------------------------------------------- +clean: + @echo clean ... + @rm -fr $(BUILD) $(TARGET).pfs0 $(TARGET).nso $(TARGET).nro $(TARGET).nacp $(TARGET).elf + + +#--------------------------------------------------------------------------------- +else +.PHONY: all + +DEPENDS := $(OFILES:.o=.d) + +#--------------------------------------------------------------------------------- +# main targets +#--------------------------------------------------------------------------------- +all : $(OUTPUT).pfs0 $(OUTPUT).nro + +$(OUTPUT).pfs0 : $(OUTPUT).nso + +$(OUTPUT).nso : $(OUTPUT).elf + +ifeq ($(strip $(NO_NACP)),) +$(OUTPUT).nro : $(OUTPUT).elf $(OUTPUT).nacp +else +$(OUTPUT).nro : $(OUTPUT).elf +endif + +$(OUTPUT).elf : $(OFILES) + +$(OFILES_SRC) : $(HFILES_BIN) + +#--------------------------------------------------------------------------------- +# you need a rule like this for each extension you use as binary data +#--------------------------------------------------------------------------------- +%.bin.o %_bin.h : %.bin +#--------------------------------------------------------------------------------- + @echo $(notdir $<) + @$(bin2o) + +-include $(DEPENDS) + +#--------------------------------------------------------------------------------------- +endif +#--------------------------------------------------------------------------------------- diff --git a/README.md b/README.md new file mode 100644 index 0000000..866a447 --- /dev/null +++ b/README.md @@ -0,0 +1,9 @@ +# Haku33 +Perform a hard reset of the switch, and leave it as if it had just left the factory + +# Reason +* In case you don't have a clean copy of the nand, clean it and start using all original or use emunand + +# Disclaimer +* Always have a nand backup. +* This will completely clean your switch so you will lose everything diff --git a/compile.cmd b/compile.cmd new file mode 100644 index 0000000..1fa750d --- /dev/null +++ b/compile.cmd @@ -0,0 +1,6 @@ +@echo off +make +echo completado +"C:\devkitPro\tools\bin\nxlink.exe" --address 192.168.1.129 Haku33.nro +%systemroot%\system32\timeout.exe 55 +exit diff --git a/icon-nsp.jpg b/icon-nsp.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4054b57f4b01da472e4ee28ac7f456bdb28a3548 GIT binary patch literal 36263 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 Ia(}1(1*TtKa{vGU literal 0 HcmV?d00001 diff --git a/icon.jpg b/icon.jpg new file mode 100644 index 0000000000000000000000000000000000000000..441e9dea5641b77d61d84f46f357b7dcd963c867 GIT binary patch literal 48065 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 G0RP#*fHkoI literal 0 HcmV?d00001 diff --git a/source/main.cpp b/source/main.cpp new file mode 100644 index 0000000..72cbcec --- /dev/null +++ b/source/main.cpp @@ -0,0 +1,292 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +using namespace std; + +//traduction +bool isSpanish() +{ + setInitialize(); + u64 lcode = 0; + s32 lang = 1; + setGetSystemLanguage(&lcode); + setMakeLanguage(lcode, &lang); + switch(lang) + { + case 5: + case 14: + return true; + break; + default: + return false; + break; + } + setsysExit(); + return false; +} + +bool fileExists(const char* path) +{ + FILE* f = fopen(path, "rb"); + if (f) + { + fclose(f); + return true; + } + return false; +} + + bool IsExist(std::string Path) + { + std::ifstream ifs(Path); + bool ex = ifs.good(); + ifs.close(); + return ex; + } + + bool DirExists(const char* const path) + { + struct stat info; + + int statRC = stat(path, &info); + if (statRC != 0) + { + if (errno == ENOENT) { return 0; } // something along the path does not exist + if (errno == ENOTDIR) { return 0; } // something in path prefix is not a dir + return false; + } + + return (info.st_mode & S_IFDIR) ? true : false; + } + + bool IsFile(std::string Path) + { + bool is = false; + struct stat st; + if (stat(Path.c_str(), &st) == 0) if (st.st_mode & S_IFREG) is = true; + return is; + } + void CreateFile(std::string Path) + { + std::ofstream ofs(Path); + ofs.close(); + } + void CreateDir(std::string Path) + { + mkdir(Path.c_str(), 777); + } + void DeleteFile(std::string Path) + { + if(IsExist(Path)) + remove(Path.c_str()); + } + + void DeleteDir(std::string Path) + { + DIR *d = opendir(Path.c_str()); + if (d) + { + struct dirent *dent; + while (true) + { + dent = readdir(d); + if (dent == NULL) break; + std::string nd = dent->d_name; + std::string pd = Path + "/" + nd; + if (IsFile(pd)) DeleteFile(pd); + else DeleteDir(pd); + } + } + closedir(d); + } + + +bool install() +{ + consoleUpdate(NULL); + //Initialize proc + printf("\x1b[31;1m*\x1b[0m Initialize proc\n"); + consoleUpdate(NULL); + fsInitialize(); + pmdmntInitialize(); + pmshellInitialize(); + //terminate + printf("\x1b[31;1m*\x1b[0m terminate\n"); + consoleUpdate(NULL); + pmshellTerminateProcessByTitleId(0x010000000000000C);//btca + pmshellTerminateProcessByTitleId(0x0100000000000009);//settings + pmshellTerminateProcessByTitleId(0x0100000000000012);//bsdsockets + pmshellTerminateProcessByTitleId(0x010000000000000E);//friends + pmshellTerminateProcessByTitleId(0x010000000000000F);//nifm + pmshellTerminateProcessByTitleId(0x010000000000001E);//account + pmshellTerminateProcessByTitleId(0x010000000000001F);//ns + pmshellTerminateProcessByTitleId(0x0100000000000020);//nfc + pmshellTerminateProcessByTitleId(0x0100000000000022);//capsrv + pmshellTerminateProcessByTitleId(0x0100000000000024);//ssl + pmshellTerminateProcessByTitleId(0x0100000000000025);//nim + pmshellTerminateProcessByTitleId(0x010000000000002B);//erpt + pmshellTerminateProcessByTitleId(0x010000000000002E);//pctl + pmshellTerminateProcessByTitleId(0x010000000000002F);//npns + pmshellTerminateProcessByTitleId(0x0100000000000030);//eupld + pmshellTerminateProcessByTitleId(0x0100000000000033);//es + pmshellTerminateProcessByTitleId(0x0100000000000036);//creport + pmshellTerminateProcessByTitleId(0x010000000000003A);//migration + pmshellTerminateProcessByTitleId(0x010000000000003E);//olsc +// pmshellTerminateProcessByTitleId(0x0100000000001000);//qlaunch + pmshellTerminateProcessByTitleId(0x0100000000001009);//miiEdit + + //mount system + printf("\x1b[31;1m*\x1b[0m mount system\n"); + consoleUpdate(NULL); + FsFileSystem mySystem; + fsOpenBisFileSystem(&mySystem, FsBisStorageId_System, ""); + fsdevMountDevice("myssytem", mySystem); + //delete system + printf("\x1b[31;1m*\x1b[0m delete system\n"); + consoleUpdate(NULL); + DeleteDir("myssytem:/save"); + DeleteDir("myssytem:/saveMeta"); + //umount system + printf("\x1b[31;1m*\x1b[0m umount system\n"); + consoleUpdate(NULL); + fsdevCommitDevice("myssytem"); + fsdevUnmountDevice("myssytem"); + fsFsClose(&mySystem); + + //mount user + printf("\x1b[31;1m*\x1b[0m mount User\n"); + consoleUpdate(NULL); + FsFileSystem myUser; + fsOpenBisFileSystem(&myUser, FsBisStorageId_User, ""); + fsdevMountDevice("myUser", myUser); + + //delete user + printf("\x1b[31;1m*\x1b[0m delete User\n"); + consoleUpdate(NULL); + DeleteDir("myUser:/Contents/registered"); + DeleteDir("myUser:/Contents"); + DeleteDir("myUser:/saveMeta"); + DeleteDir("myUser:/save"); + + //umount user + printf("\x1b[31;1m*\x1b[0m umount User\n"); + consoleUpdate(NULL); + fsdevCommitDevice("myUser"); + fsdevUnmountDevice("myUser"); + fsFsClose(&myUser); + + //exit proc + printf("\x1b[31;1m*\x1b[0m exit proc\n"); + consoleUpdate(NULL); + pmdmntExit(); + pmshellExit(); + fsExit(); + + printf("\x1b[31;1m*\x1b[0m power off\n"); + consoleUpdate(NULL); + bpcInitialize(); + bpcShutdownSystem(); + bpcExit(); + +/* + if(isSpanish()) + printf("Estas seguro de que deseas borrar tu informacion personal del prodinfo?\n"); + else + printf("Are you sure you want erase your personal information from prodinfo?\n"); + if (!confirm()) + { +// return end(); + } + + return true;*/ +return 0; +} + +int main(int argc, char **argv) +{ +appletBeginBlockingHomeButton(0); + + u64 count = 1000;//kill time + while (appletMainLoop()) + { + hidScanInput(); + u64 keys = hidKeysDown(CONTROLLER_P1_AUTO); + + if (keys & KEY_PLUS) + { + break; + } + + if (count <= 0) + { + install(); + break; + } + + count--; + consoleInit(NULL); + printf("\x1b[32;1m*\x1b[0m %s v%s Kronos2308, Hard Reset\n",TITLE, VERSION); + if(isSpanish()) + { + printf("\n\x1b[30;1m TU CONSOLA SERA COMPLETAMENTE LIMPADA: SAVES, JUEGOS, ETC \x1b[0m\n"); + printf("\n\x1b[30;1m SI NO SABES LO QUE HACES, PRESIONA + RAPIDO \x1b[0m\n"); + printf("\n\x1b[30;1m SE REALIZARA UN HARD RESET EN BREVE LUEGO SE APAGARA LA CONSOLA \x1b[0m\n"); + printf("\n\n\x1b[30;1m-------- LO DEVORARE TODO --------\x1b[0m\n\n"); + printf("PULSA + PARA CANSELAR\n\n"); + printf("\x1b[31;1m*\x1b[0m CUENTA ATRAS-%u\n",count); + }else{ + printf("\n\x1b[30;1m YOUR CONSOLE WILL BE COMPLETELY CLEANED: SAVES, GAMES, ETC \x1b[0m\n"); + printf("\n\x1b[30;1m IF YOU DON'T KNOW WHAT YOU DO, PRESS + NOW \x1b[0m\n"); + printf("\n\x1b[30;1m A HARD RESET WILL BE PERFORMED IN BRIEF AFTER THE CONSOLE WILL BE OFF \x1b[0m\n"); + printf("\n\n\x1b[30;1m-------- I WILL CONSUME EVERYTHING --------\x1b[0m\n\n"); + printf("PRESS + TO CANCEL\n\n"); + printf("\x1b[31;1m*\x1b[0m COUNTDOWN-%u\n",count); + } + consoleUpdate(NULL); + } + + + + + socketExit(); + fsdevUnmountAll(); + appletEndBlockingHomeButton(); + while (appletMainLoop()) + { + consoleInit(NULL); + printf("\x1b[32;1m*\x1b[0m %s v%s Kronos2308, Hard Reset\n",TITLE, VERSION); + if(isSpanish()) + { + printf("\n\x1b[30;1m PRESIONE HOME PARA SALIR \x1b[0m\n"); + }else{ + printf("\n\x1b[30;1m PRESS HOME TO EXIT \x1b[0m\n"); + } + consoleUpdate(NULL); + } + + + consoleExit(NULL); + return 0; +}