Newer
Older
Epoc / zPakr / Cmds.cs
@Ivan Dominguez Ivan Dominguez on 13 Feb 2 KB Initial upload
namespace XWolf.Z
{
    internal class Cmds
    {
        public enum CmdAction { HELP, CREATE, ADD, LIST, EXTRACT, FILE, DUMP }
        public Cmds(string[] args)
        {
            if (args.Length == 0)
                return;
            if (args[0].Length > 1 && args[0][0] != '-')
                throw new ArgumentException("Parameters unknown.");
            Action = args[0][1..].ToLower().Trim() switch
            {
                "c" => CmdAction.CREATE,
                "a" => CmdAction.ADD,
                "l" => CmdAction.LIST,
                "x" => CmdAction.EXTRACT,
                "f" => CmdAction.FILE,
                "d" => CmdAction.DUMP,
                "h" or "?" => CmdAction.HELP,
                _ => throw new ArgumentException($"Unknown action {args[0]}."),
            };
            if (Action == CmdAction.HELP)
                if (args.Length > 1)
                    throw new ArgumentException($"Too many parameters for action {args[0]}.");
                else return;
            PakFile = args[1];
            switch (Action)
            {
                case CmdAction.CREATE:
                case CmdAction.DUMP:
                    From = args.Length > 2 ? args[2] : throw new ArgumentException($"Missing parameters for action {args[0]}.");
                    if (args.Length > 3)
                        throw new ArgumentException($"Too many parameters for action {args[0]}.");
                    break;
                case CmdAction.ADD:
                case CmdAction.FILE:
                    From = args.Length > 2 ? args[2] : throw new ArgumentException($"Missing parameters for action {args[0]}.");
                    To = args.Length > 3 ? args[3] : string.Empty;
                    if (args.Length > 4)
                        throw new ArgumentException($"Too many parameters for action {args[0]}.");
                    break;
                case CmdAction.LIST:
                    break;
                case CmdAction.EXTRACT:
                    To = args.Length > 2 ? args[2] : string.Empty;
                    if (args.Length > 3)
                        throw new ArgumentException($"Too many parameters for action {args[0]}.");
                    break;

            }
        }

        public CmdAction Action { get; set; } = CmdAction.HELP;
        public string PakFile { get; set; } = string.Empty;
        public string From { get; set; } = string.Empty;
        public string To { get; set; } = string.Empty;
    }
}