static void StringArg(CRC crc, Cli cli)
        {
            ushort result = crc.Checksum(cli.opt.Argument);

            ShowHex(result);
        }
        static void Main(string[] args)
        {
            Cli cli;

            try
            {
                cli = new Cli(args);
            }
            catch
            {
                Console.WriteLine("Command Line error");
                return;
            }

            if (cli.opt == null)
            {
                return;
            }

            CRC crc;

            if (cli.opt.Noise > 0)
            {
                crc = new NoiseCRC(cli.opt.Noise);
                if (cli.opt.Verbose)
                {
                    Console.WriteLine($"Enabling noise level {cli.opt.Noise}");
                }
            }
            else
            {
                crc = new CRC();
            }

            if ((cli.opt.Polynomial != null) && (cli.opt.Polynomial.Length > 0))
            {
                try
                {
                    ushort poly = System.Convert.ToUInt16(cli.opt.Polynomial, 16);
                    crc.Generate(poly);
                }
                catch
                {
                    Console.WriteLine($"Invalid polynomial spec {cli.opt.Polynomial}");
                    return;
                }
            }

            if (cli.opt.Table)
            {
                crc.ShowTable();
                return;
            }

            if (cli.opt.Argument == null)
            {
                return;
            }

            if (cli.opt.File)
            {
                FileArg(crc, cli);
                return;
            }
            else if (cli.opt.Lines)
            {
                LinesArg(crc, cli);
                return;
            }
            else if (cli.opt.HexString)
            {
                HexStringArg(crc, cli);
                return;
            }
            else
            {
                StringArg(crc, cli);
            }
        }
        static void FileArg(CRC crc, Cli cli)
        {
            ushort csum = crc.Checksum(cli.opt.Argument);

            ShowHex(csum);
        }