Created
December 16, 2025 08:49
-
-
Save atifaziz/1eb4bc27f9171bf536badc2da4178242 to your computer and use it in GitHub Desktop.
File-based C# application using docopt.net for CLI parsing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #:package [email protected] | |
| #nullable enable | |
| using DocoptNet; | |
| static int Main(ProgramArguments args) | |
| { | |
| foreach (var (name, value) in args) | |
| Console.WriteLine($"{name} = {value}"); | |
| Console.WriteLine($@"{{ | |
| Ship = {args.CmdShip }, | |
| New = {args.CmdNew }, | |
| Name = [{string.Join(", ", args.ArgName)}], | |
| Move = {args.CmdMove }, | |
| X = {args.ArgX }, | |
| Y = {args.ArgY }, | |
| Speed = {args.OptSpeed }, | |
| Shoot = {args.CmdShoot }, | |
| Mine = {args.CmdMine }, | |
| Set = {args.CmdSet }, | |
| Remove = {args.CmdRemove }, | |
| Moored = {args.OptMoored }, | |
| Drifting = {args.OptDrifting}, | |
| Help = {args.OptHelp }, | |
| Version = {args.OptVersion }, | |
| }}"); | |
| return 0; | |
| } | |
| static int ShowHelp(string help) | |
| { | |
| var bin = Path.GetFileName(AppContext.GetData("EntryPointFilePath")?.ToString() // file-based app | |
| ?? Environment.ProcessPath // published app | |
| ?? ProgramArguments.Bin); | |
| Console.WriteLine(help.Replace(ProgramArguments.Bin, bin)); | |
| return 0; | |
| } | |
| static int ShowVersion(string version) { Console.WriteLine(version); return 0; } | |
| static int OnError(string usage) { Console.WriteLine(usage); return 1; } | |
| return ProgramArguments.CreateParser() | |
| .WithVersion("Naval Fate 2.0") | |
| .Parse(args) | |
| .Match(Main, | |
| result => ShowHelp(result.Help), | |
| result => ShowVersion(result.Version), | |
| result => OnError(result.Usage)); | |
| [DocoptArguments] | |
| partial class ProgramArguments | |
| { | |
| public const string Bin = "BIN"; | |
| const string Help = $""" | |
| Naval Fate. | |
| Usage: | |
| {Bin} ship new <name>... | |
| {Bin} ship <name> move <x> <y> [--speed=<kn>] | |
| {Bin} ship shoot <x> <y> | |
| {Bin} mine (set|remove) <x> <y> [--moored | --drifting] | |
| {Bin} (-h | --help) | |
| {Bin} --version | |
| Options: | |
| -h --help Show this screen. | |
| --version Show version. | |
| --speed=<kn> Speed in knots [default: 10]. | |
| --moored Moored (anchored) mine. | |
| --drifting Drifting mine. | |
| """; | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment