0671ab62f7452d5f1011cac4bd9eda81e13c3707
[smdp.git] / mdp.c
1 #include <errno.h>
2 #include <getopt.h>
3 #include <stdio.h>
4 #include <stdlib.h>
5 #include <string.h>
6
7 #include "include/parser.h"
8 #include "include/viewer.h"
9
10 void usage() {
11     fprintf(stderr, "Usage: mdp [OPTION]... [FILE]\n");
12     fprintf(stderr, "A command-line based markdown presentation tool.\n\n");
13     fprintf(stderr, "  -d, --debug   enable debug messages on STDERR\n");
14     fprintf(stderr, "                add it multiple times to increases debug level\n\n");
15     fprintf(stderr, "  -h, --help    display this help and exit\n");
16     fprintf(stderr, "\nWith no FILE, or when FILE is -, read standard input.\n\n");
17     exit(EXIT_FAILURE);
18 }
19
20 int main(int argc, char *argv[]) {
21
22     // define command-line options
23     struct option longopts[] = {
24         { "debug", no_argument, 0, 'd' },
25         { "help",  no_argument, 0, 'h' },
26         { 0, 0, 0, 0 }
27     };
28
29     // parse command-line options
30     int opt, debug = 0;
31     while ((opt = getopt_long(argc, argv, ":dh", longopts, NULL)) != -1) {
32         switch(opt) {
33             case 'd': debug += 1; break;
34             case 'h': usage(); break;
35             case ':': fprintf(stderr, "%s: '%c' requires an argument\n", argv[0], optopt); usage(); break;
36             case '?':
37             default : fprintf(stderr, "%s: option '%c' is invalid\n", argv[0], optopt); usage(); break;
38         }
39     }
40
41     // open file or set input to STDIN
42     char *file;
43     FILE *input;
44     if (optind < argc) {
45         do {
46             file = argv[optind];
47         } while(++optind < argc);
48
49         if(!strcmp(file, "-")) {
50             input = stdin;
51         } else {
52             input = fopen(file,"r");
53             if(!input) {
54                 fprintf(stderr, "%s: %s: %s\n", argv[0], file, strerror(errno));
55                 exit(EXIT_FAILURE);
56             }
57         }
58     } else {
59         input = stdin;
60     }
61
62     // load deck object from input
63     deck_t *deck;
64     deck = markdown_load(input);
65
66     //TODO close file
67
68     if(debug > 0) {
69         markdown_debug(deck, debug);
70     }
71
72     ncurses_display(deck, 0, 0);
73
74     return(EXIT_SUCCESS);
75 }
76