1 // =================================
  2 // Copyright (c) 2022 Seppo Laakko
  3 // Distributed under the MIT license
  4 // =================================
  5 
  6 using System;
  7 using System.Collections;
  8 using paths;
  9 
 10 int main(int argcconst char** argv)
 11 {
 12     try
 13     {
 14         bool verbose = false;
 15         bool recursive = false;
 16         List<string> files;
 17         for (int i = 1; i < argc; ++i;)
 18         {
 19             string arg = argv[i];
 20             if (arg.StartsWith("--"))
 21             {
 22                 if (arg == "--help")
 23                 {
 24                     PrintHelp();
 25                     return 1;
 26                 }
 27                 else if (arg == "--verbose")
 28                 {
 29                     verbose = true;
 30                 }
 31                 else if (arg == "--recursive")
 32                 {
 33                     recursive = true;
 34                 }
 35                 else
 36                 {
 37                     throw Exception("unknown argument '" + arg + "'");
 38                 }
 39             }
 40             else if (arg.StartsWith("-"))
 41             {
 42                 string options = arg.Substring(1);
 43                 if (options.IsEmpty())
 44                 {
 45                     throw Exception("unknown argument '" + arg + "'");
 46                 }
 47                 else
 48                 {
 49                     bool unknown = false;
 50                     string uo;
 51                     for (char o : options)
 52                     {
 53                         switch (o)
 54                         {
 55                             case 'h':
 56                             {
 57                                 PrintHelp();
 58                                 return 1;
 59                             }
 60                             case 'v':
 61                             {
 62                                 verbose = true;
 63                                 break;
 64                             }
 65                             case 'r':
 66                             {
 67                                 recursive = true;
 68                                 break;
 69                             }
 70                             default:
 71                             {
 72                                 unknown = true;
 73                                 uo.Append(o);
 74                                 break;
 75                             }
 76                         }
 77                         if (unknown)
 78                         {
 79                             throw Exception("unknown option '-" + uo + "'");
 80                         }
 81                     }
 82                 }
 83             }
 84             else
 85             {
 86                 files.Add(arg);
 87             }
 88         }
 89         if (!HasEnv("SHELL"))
 90         {
 91             files = Expand(files);
 92         }
 93         Remove(filesverboserecursive);
 94     }
 95     catch (const Exception& ex)
 96     {
 97         Console.Error() << ex.ToString() << endl();
 98         return 1;
 99     }
100     return 0;
101 }