예제 #1
0
    public static void Main(string[] args)
    {
        var d = new lib.Data();

        analyze.argAnalyze(ref d, args);

        switch (d.mode)
        {
        case CM.main:    execute.exec(ref d); break;

        case CM.help:    docs.help();         break;

        case CM.version: docs.version();      break;
        }
    }
예제 #2
0
    public static void exec(ref Data d)
    {
        execute.d = d;
        ro2f();

        switch (d.multiple)
        {
        case MM.none:   single(); break;

        case MM.serial: serial(); break;

        case MM.spawn:  spawn();  break;

        case MM.thread: thread(); break;
        }

        r.Write(res);
        r.Close();
        Environment.Exit(ec == -1?1:ec);
    }
    public static void argAnalyze(ref lib.Data d, string[] l)
    {
        if (l.Length == 0)
        {
            lib.error("引数が不足しています");
        }
        else
        {
            switch (l[0])
            {
            case "-h":
            case "help":
            case "-help":
            case "--help": d.mode = CM.help; break;

            case "-v":
            case "version":
            case "-version":
            case "--version": d.mode = CM.version; break;
            }
        }

        Key?key = null;
        int n   = -1;

        foreach (var a in l)
        {
            n++;
            if (a.Length == 0)
            {
                continue;
            }

            bool proceed = true;
            switch (a)
            {
            case "-m":
            case "-multiple":
                d.multiple = MM.serial;
                key        = Key.multiple; break;

            case "-o":
            case "-out":
            case "-stdout":
                key = Key.stdout; break;

            case "-e":
            case "-err":
            case "-stderr":
                key = Key.stderr; break;

            case "-r":
            case "-result":
                key = Key.result; break;

            default: proceed = false; break;
            }
            if (proceed)
            {
                continue;
            }

            if (a.StartsWith("-"))
            {
                lib.error("不正なオプションが指定されています");
            }
            else if (key != null)
            {
                proceed = true;
                switch (key)
                {
                case Key.stdout: d.stdout = a; break;

                case Key.stderr: d.stderr = a; break;

                case Key.result: d.result = a; break;

                case Key.multiple:
                    switch (a)
                    {
                    case "none":
                        d.multiple = MM.none; break;

                    case "serial":
                    case "":
                        d.multiple = MM.serial; break;

                    case "spawn":
                    case "parallel":
                        d.multiple = MM.spawn; break;

                    case "thread":
                        d.multiple = MM.thread; break;

                    default: proceed = false; break;
                    }
                    break;
                }
                key = null;
            }
            if (proceed)
            {
                continue;
            }

            d.command = new string[l.Length - n];
            Array.Copy(l, n, d.command, 0, l.Length - n);
            break;
        }

        if (d.command.Length == 0)
        {
            lib.error("実行する内容が指定されていません");
        }
    }