Sharpii-NetCore/Sharpii/Program.cs
Shadow Eevee f9198444e2 Added custom exit codes.
Added custom exit codes, which allow headless scripts to use Sharpii easier. Exit Codes do NOT interfere with normal system exit codes. (System exit codes are 15999 and below, Custom exits are 16001+.)
2020-03-07 21:44:10 -08:00

342 lines
No EOL
16 KiB
C#

/* This file is part of Sharpii.
* Copyright (C) 2013 Person66
*
* Sharpii 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.
*
* Sharpii 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 Sharpii. If not, see <http://www.gnu.org/licenses/>.
*/
using System;
using System.IO;
using System.Net;
using libWiiSharp;
using System.Diagnostics;
namespace Sharpii
{
class MainApp
{
static void Main(string[] args)
{
if (args.Length < 1)
{
help();
Environment.Exit(0);
}
if (!File.Exists(Path.GetDirectoryName(AppDomain.CurrentDomain.BaseDirectory) + Path.DirectorySeparatorChar + "libWiiSharp.dll"))
{
Console.WriteLine("ERROR: libWiiSharp.dll not found");
Console.WriteLine("This should not appear on the .Net Core port.");
Console.WriteLine("If you see this, report how you got here on https://github.com/TheShadowEevee/Sharpii-NetCore/issues.");
Console.WriteLine("Error: SHARPII_NET_CORE_MAIN_MISSING_DLL_LIBWIISHARP_01");
Environment.Exit(0x0000064F);
}
for (int i = 1; i < args.Length; i++)
{
switch (args[i].ToUpper())
{
case "-QUIET":
BeQuiet.quiet = 1;
break;
case "-Q":
BeQuiet.quiet = 1;
break;
case "-LOTS":
BeQuiet.quiet = 3;
break;
case "-NOLOG":
Logging.log = 0;
break;
}
}
string Function = args[0].ToUpper();
bool gotSomewhere = false;
if (Function == "-H" || Function == "-HELP" || Function == "H" || Function == "HELP")
{
help();
gotSomewhere = true;
}
if (Function == "BNS")
{
BNS_Stuff.BNS(args);
gotSomewhere = true;
}
if (Function == "WAD")
{
WAD_Stuff.WAD(args);
gotSomewhere = true;
}
if (Function == "TPL")
{
TPL_Stuff.TPL(args);
gotSomewhere = true;
}
if (Function == "U8")
{
U8_Stuff.U8(args);
gotSomewhere = true;
}
if (Function == "IOS")
{
IOS_Stuff.IOS(args);
gotSomewhere = true;
}
if (Function == "NUS" || Function == "NUSD")
{
NUS_Stuff.NUS(args);
gotSomewhere = true;
}
if (Function == "SENDDOL" || Function == "SENDOL")
{
HBC_Stuff.SendDol(args);
gotSomewhere = true;
}
if (Function == "SENDWAD")
{
bool cont = HBC_Stuff.SendWad_Check(args);
if (cont == true) HBC_Stuff.SendWad(args);
gotSomewhere = true;
}
if (Function == "INSTALL")
{
Install();
gotSomewhere = true;
}
if (Function == "UNINSTALL")
{
Uninstall();
gotSomewhere = true;
}
if (Function == "ERRORS")
{
ERROR_Stuff.ERROR(args);
gotSomewhere = true;
}
if (Function == "EXITCODES")
{
ERRORCODE_Stuff.ERRORCODE(args);
gotSomewhere = true;
}
if (Function == "WHICH CAME FIRST" || Function == "WHICH CAME FIRST?" ||
(Function == "WHICH" && args[1].ToUpper() == "CAME" && args[2].Substring(0,5).ToUpper() == "FIRST"))
{
InconspicuousNotEasterEggThingamajig();
gotSomewhere = true;
}
if (gotSomewhere == false)
{
//If tuser gets here, they entered something wrong
Console.WriteLine("ERROR: The argument {0} is invalid", args[0]);
Console.WriteLine("Error: SHARPII_NET_CORE_MAIN_INVALID_ARG_01");
Environment.Exit(0x00000650);
}
string temp = Path.GetTempPath() + "Sharpii.tmp";
if (Directory.Exists(temp) == true)
DeleteADir.DeleteDirectory(temp);
Environment.Exit(0);
}
private static void Install()
{
try
{
if (BeQuiet.quiet > 1)
Console.WriteLine("Installing Sharpii...");
if (BeQuiet.quiet > 1)
Console.WriteLine("Adding Variables");
Environment.SetEnvironmentVariable("PATH", Path.Combine(Environment.GetEnvironmentVariable("PATH", EnvironmentVariableTarget.Machine), ";", Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), "Sharpii"), EnvironmentVariableTarget.Machine);
if (BeQuiet.quiet > 1)
Console.WriteLine("Creating Directory");
if (Directory.Exists(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), "Sharpii")))
DeleteADir.DeleteDirectory(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), "Sharpii"));
Directory.CreateDirectory(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), "Sharpii"));
if (BeQuiet.quiet > 1)
Console.WriteLine("Copying Files");
File.Copy(AppDomain.CurrentDomain.BaseDirectory, Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) + "\\Sharpii\\Sharpii.exe");
if (File.Exists(Path.Combine(Path.GetDirectoryName(AppDomain.CurrentDomain.BaseDirectory), "libWiiSharp.dll")))
File.Copy(Path.Combine(Path.GetDirectoryName(AppDomain.CurrentDomain.BaseDirectory), "libWiiSharp.dll"), Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), "Sharpii", "libWiiSharp.dll"));
if (File.Exists(Path.Combine(Path.GetDirectoryName(AppDomain.CurrentDomain.BaseDirectory), "WadInstaller.dll")))
File.Copy(Path.Combine(Path.GetDirectoryName(AppDomain.CurrentDomain.BaseDirectory), "WadInstaller.dll"), Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), "Sharpii", "WadInstaller.dll"));
if (BeQuiet.quiet > 1)
{
Console.WriteLine("Sharpii was successfully installed to: {0}", Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) + "\\Sharpii\\");
Console.WriteLine("You can now use Sharpii in any directory!");
Console.WriteLine("\nNOTE: You may need to restart your computer for this to take effect");
}
return;
}
catch (Exception ex)
{
Console.WriteLine("An unknown error occured, please try again\n\nERROR DETAILS: {0}", ex.Message);
Environment.Exit(0x00000642);
return;
}
}
private static void Uninstall()
{
try
{
if (BeQuiet.quiet > 1)
Console.WriteLine("Uninstalling Sharpii...");
string path = Environment.GetEnvironmentVariable("PATH", EnvironmentVariableTarget.Machine);
Environment.SetEnvironmentVariable("PATH", path.Replace(";" + Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) + "\\Sharpii\\", ""), EnvironmentVariableTarget.Machine);
Process.Start("cmd.exe", "/C mode con:cols=50 lines=4 & color 0B & echo Finishing Uninstallation... & sleep 2 & rmdir /s /q " + '"' +
Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) + "\\Sharpii\\" + '"' + " & CLS & echo Sharpii has been successfully uninstalled! & echo. & pause");
Environment.Exit(0);
}
catch (Exception ex)
{
Console.WriteLine("An unknown error occured, please try again\n\nERROR DETAILS: {0}", ex.Message);
Environment.Exit(0x00000642);
return;
}
}
private static void InconspicuousNotEasterEggThingamajig()
{
WebClient egg = new WebClient(); string all = "";
try { all = egg.DownloadString("http://sites.google.com/site/person66files/home/EASTEREGG.txt"); }
catch (Exception) { Console.WriteLine("\n Easter eggs are more fun if you has internetz"); return; }
int width = Console.WindowWidth; int height = Console.WindowHeight; int bwidth = Console.BufferWidth; int bheight = Console.BufferHeight;
ConsoleKeyInfo key; Console.Clear(); Console.CursorVisible = false; Console.SetWindowSize(75, 5); Console.SetBufferSize(75, 5);
Console.WriteLine("Complete the following: \n\n UP, __ , __ , __ , __ , __ , __ , __ , __ , __ , START"); key = Console.ReadKey(true);
if (key.Key.ToString() == "UpArrow") { Console.SetCursorPosition(7, 2); Console.Write("UP"); } else { goto ByeBye; }
key = Console.ReadKey(true); if (key.Key.ToString() == "DownArrow") { Console.SetCursorPosition(12, 2); Console.Write("DOWN , __ , __ , __ , __ , __ , __ , __ , START"); } else { goto ByeBye; }
key = Console.ReadKey(true); if (key.Key.ToString() == "DownArrow") { Console.SetCursorPosition(19, 2); Console.Write("DOWN , __ , __ , __ , __ , __ , __ , START"); } else { goto ByeBye; }
key = Console.ReadKey(true); if (key.Key.ToString() == "LeftArrow") { Console.SetCursorPosition(26, 2); Console.Write("LEFT , __ , __ , __ , __ , __ , START"); } else { goto ByeBye; }
key = Console.ReadKey(true); if (key.Key.ToString() == "RightArrow") { Console.SetCursorPosition(33, 2); Console.Write("RIGHT , __ , __ , __ , __ , START"); } else { goto ByeBye; }
key = Console.ReadKey(true); if (key.Key.ToString() == "LeftArrow") { Console.SetCursorPosition(41, 2); Console.Write("LEFT , __ , __ , __ , START"); } else { goto ByeBye; }
key = Console.ReadKey(true); if (key.Key.ToString() == "RightArrow") { Console.SetCursorPosition(48, 2); Console.Write("RIGHT , __ , __ , START"); } else { goto ByeBye; }
key = Console.ReadKey(true); if (key.Key.ToString() == "B") { Console.SetCursorPosition(56, 2); Console.Write("B , __ , START "); } else { goto ByeBye; }
key = Console.ReadKey(true); if (key.Key.ToString() == "A") { Console.SetCursorPosition(60, 2); Console.Write("A , START "); } else { goto ByeBye; }
Console.SetBufferSize(95, 44); Console.SetWindowSize(95, 44); Console.SetCursorPosition(0, 0); Console.Clear(); Console.Write(all); Console.ReadKey(true);
ByeBye: Console.Clear(); Console.CursorVisible = true; Console.SetWindowSize(width, height); Console.SetBufferSize(bwidth, bheight); Environment.Exit(0);
}
private static void help()
{
Console.WriteLine("");
Console.WriteLine("Sharpii {0} - A tool by person66, using libWiiSharp.dll by leathl", ProgramVersion.version);
Console.WriteLine("Sharpii .Net Core Port by TheShadowEevee");
Console.WriteLine("");
Console.WriteLine("");
Console.WriteLine(" Usage:");
Console.WriteLine("");
Console.WriteLine(" Sharpii [function] [parameters] [-quiet | -q | -lots]");
Console.WriteLine("");
Console.WriteLine("");
Console.WriteLine(" Functions:");
Console.WriteLine("");
Console.WriteLine(" BNS Convert a wav to bns, or vice versa");
Console.WriteLine(" WAD Pack/Unpack/Edit a wad file");
Console.WriteLine(" TPL Convert a image to a tpl, or vice versa");
Console.WriteLine(" U8 Pack/Unpack a U8 archive");
Console.WriteLine(" IOS Apply various patches to an IOS");
Console.WriteLine(" NUSD Download files from NUS");
Console.WriteLine(" SendDol Send a dol to the HBC over wifi");
Console.WriteLine(" SendWad Send a wad to the HBC over wifi");
Console.WriteLine(" Errors Get a Sharpii error's description");
Console.WriteLine(" ExitCodes List of all Sharpii exit codes");
Console.WriteLine("");
Console.WriteLine(" NOTE: Too see more detailed descriptions of any of the above,");
Console.WriteLine(" use 'Sharpii [function] -h'");
Console.WriteLine("");
Console.WriteLine("");
Console.WriteLine(" Other Functions:");
Console.WriteLine("");
//Console.WriteLine(" Install Install Sharpii to your computer so you can run it");
//Console.WriteLine(" from anywhere without needing the exe");
//Console.WriteLine(" Uninstall Uninstall Sharpii from your computer");
Console.WriteLine("");
Console.WriteLine("");
Console.WriteLine(" Global Arguments:");
Console.WriteLine("");
Console.WriteLine(" -quiet | -q Try not to display any output");
Console.WriteLine(" -lots Display lots of output");
Console.WriteLine(" -nolog Don't create a log file");
Console.WriteLine("");
Environment.Exit(0x0000064E);
}
}
}
public class DeleteADir
{
public static bool DeleteDirectory(string target_dir)
{
bool result = false;
string[] files = Directory.GetFiles(target_dir);
string[] dirs = Directory.GetDirectories(target_dir);
foreach (string file in files)
{
File.SetAttributes(file, FileAttributes.Normal);
File.Delete(file);
}
foreach (string dir in dirs)
{
DeleteDirectory(dir);
}
Directory.Delete(target_dir, false);
return result;
}
}
public class BeQuiet
{
//1 = little
//2 = normal
//3 = lots
public static int quiet = 2;
}
public class ProgramVersion
{
public static string version = "1.0.1; .Net Core Port (Based on Sharpii 1.7.3)";
}
public class Logging
{
//By default, Sharpii should create a log.
//Using the option -NoLog will disable it.
//Everything should check this when it checks the BeQuiet.Quiet variable.
//This isn't used yet.
public static int log = 1;
}