summaryrefslogtreecommitdiff
path: root/src/main.c
blob: ac45fd583809be94606761edaec937df40875212 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#include "./main.h"

void printhelp(void) {
  fprintf(stderr, "even: a binary by ZachIR to check if a number is even or ");
  fprintf(stderr, "odd.\n");
  fprintf(stderr, "even [-hcv]\n");
  fprintf(stderr, "even [--help]\n");
  fprintf(stderr, "even [--copyright]\n");
  fprintf(stderr, "even [--version]\n");
  fprintf(stderr, "even [-q] [--quiet] NUMBER\n");
  fprintf(stderr, "\t-h: prints this help message\n");
  fprintf(stderr, "\t-c: prints the copyright information\n");
  fprintf(stderr, "\t-v: prints the version\n");
  fprintf(stderr, "\t-q: just uses error codes, no text\n");
  return;
}

void printcopyright(void) {
  fprintf(stderr, "Copyright (c) 2024 Zachary Smith\n");
  fprintf(stderr, "even is Free software under the MIT license, and is ");
  fprintf(stderr, "provided without warranty of any kind.\n");
  return;
}

void printversion(void) {
  fprintf(stderr, "even version %s, 2024\n", VERSION);
  return;
}

int main(int argc, char **argv) {
  bool quiet;
  bool value;
  long result;

  quiet = false;
  value = false;
  result = 0;
  char *end = NULL;

  if (argc > 1) {
    for (int i = 1; i < argc; i++) {
      if (argv[i][0] == '-') {
        switch (argv[i][1]) {
          case 'h':
            printhelp();
            return SUCCESS;
          case 'c':
            printcopyright();
            return SUCCESS;
          case 'v':
            printversion();
            return SUCCESS;
          case 'q':
            quiet = true;
            break;
        }
      }
      result = strtol(argv[i], &end, 10);
      if ((end == argv[i]) || (end[0] != '\0')) {
        fprintf(stderr, "Please provide an integer, not %s!\n", argv[i]);
        return ERR;
      }
      value = true;
    }
  } else {
    printhelp();
    return ERR;
  }
  if (value) {
    if (result % 2 == 0) {
      if (!quiet) {
        fprintf(stdout, "even\n");
      }
      return 0;
    } else {
      if (!quiet) {
        fprintf(stdout, "odd\n");
        return 0;
      }
      return 1;
    }
  }
  return ERR;
}