aboutsummaryrefslogtreecommitdiffstats
path: root/timer.c
diff options
context:
space:
mode:
authorEliteTK <tomasz.kramkowski@gmail.com>2014-07-10 22:35:35 +0100
committerEliteTK <tomasz.kramkowski@gmail.com>2014-07-10 22:35:35 +0100
commita8609ccd901b1942e862c14205026d841e640add (patch)
tree5eaf1d04d454bc45acfdf4c698b2860b91f48a00 /timer.c
parent922fe2f68c39a765896d274356c7c9dc4fb9cd73 (diff)
downloadc-stuff-a8609ccd901b1942e862c14205026d841e640add.tar.gz
c-stuff-a8609ccd901b1942e862c14205026d841e640add.tar.xz
c-stuff-a8609ccd901b1942e862c14205026d841e640add.zip
More stuff.
Diffstat (limited to 'timer.c')
-rw-r--r--timer.c58
1 files changed, 58 insertions, 0 deletions
diff --git a/timer.c b/timer.c
new file mode 100644
index 0000000..5ab51c6
--- /dev/null
+++ b/timer.c
@@ -0,0 +1,58 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+
+unsigned long long int get_seconds(char *);
+
+void usage(char *cmd)
+{
+ printf("Usage:\n"
+ " %s <n>{s,m,h,D,M,Y} ...\n", cmd);
+}
+
+int main(int argc, char **argv)
+{
+ if (argc < 2) {
+ printf("Not enough arguments.\n");
+ usage(argv[0]);
+ exit(1);
+ }
+
+ unsigned long long int total_seconds = 0;
+
+ int i;
+ for (i = 1; i < argc; i++)
+ total_seconds += get_seconds(argv[i]);
+
+ printf("Total time: %llu second(s).\n", total_seconds);
+
+ return 0;
+}
+
+unsigned long long int get_seconds(char *code)
+{
+ int length = strlen(code);
+ if (length < 2) {
+ return 0;
+ }
+
+ int multiplier = 0;
+ char suffix = code[length - 1];
+ switch (suffix) {
+ case 's': multiplier = 1; break; // 1 second
+ case 'm': multiplier = 60; break; // 1 minute
+ case 'h': multiplier = 3600; break; // 1 hour
+ case 'D': multiplier = 86400; break; // 1 day
+ case 'M': multiplier = 2419200; break; // 28 days
+ case 'Y': multiplier = 31536000; break; // 365 days
+ default : return 0;
+ }
+
+ char value[length + 1];
+ strcpy(value, code);
+
+ value[length - 1] = '\0';
+
+ return strtoull(value, NULL, 10) * multiplier;
+}