CSharp · Console
using System;
using System.IO;
using System.Linq;
using Maroontress.Cui;
public class Program
{
public static void Main()
{
ParseArgs(["--count=abc"]);
}
private const int DefaultCount = 3;
private static int Count { get; set; } = DefaultCount;
private static void PrintUsage(OptionSchema schema, TextWriter output)
{
var usage = new[]
{
"usage: command [Options...] [--] Arguments...",
"",
"Options are:",
};
var messages = usage.Concat(schema.GetHelpMessage());
foreach (var m in messages)
{
output.WriteLine(m);
}
}
private static void ParseCount(RequiredArgumentOption o)
{
var v = o.ArgumentValue;
if (!int.TryParse(v, out var num) || num < 0)
{
var n = o.ArgumentName;
throw new OptionParsingException(
o, $"option '{o}': the value '{v}' is invalid for {n}");
}
Count = num;
}
public static void ParseArgs(string[] args)
{
var schema = Options.NewSchema()
.Add(
"count",
'c',
"NUM",
"Specifies the count",
ParseCount)
.Add("help", 'h', "Show help and exit");
try
{
var setting = schema.Parse(args);
var options = setting.Options;
var arguments = setting.Arguments;
foreach (var o in options)
{
if (o.Name is "help")
{
PrintUsage(schema, Console.Out);
Environment.Exit(0);
}
}
Console.WriteLine($"Count: {Count}");
}
catch (OptionParsingException e)
{
var output = Console.Error;
output.WriteLine(e.Message);
PrintUsage(schema, output);
Environment.Exit(1);
}
}
}