mirror of
https://github.com/visit1985/mdp.git
synced 2024-11-25 22:13:33 +03:00
added getopts argument parsing + usage + debug mode
This commit is contained in:
parent
c8c3b3d8b2
commit
c29cfeaa5c
103
tmp.c
103
tmp.c
@ -1,22 +1,55 @@
|
||||
#include <errno.h>
|
||||
#include <getopt.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <errno.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "include/markdown.h"
|
||||
|
||||
void usage() {
|
||||
fprintf(stderr, "Usage: tmp [OPTION]... [FILE]\n");
|
||||
fprintf(stderr, "A command-line based markdown presentation tool.\n\n");
|
||||
fprintf(stderr, " -d, --debug enable debug messages on STDERR\n");
|
||||
fprintf(stderr, " -h, --help display this help and exit\n");
|
||||
fprintf(stderr, "\nWith no FILE, or when FILE is -, read standard input.\n\n");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
|
||||
FILE *input;
|
||||
document_t *doc;
|
||||
// define command-line options
|
||||
struct option longopts[] = {
|
||||
{ "debug", no_argument, 0, 'd' },
|
||||
{ "help", no_argument, 0, 'h' },
|
||||
{ 0, 0, 0, 0 }
|
||||
};
|
||||
|
||||
if (argc > 1) {
|
||||
if(!strcmp(argv[1], "-")) {
|
||||
// parse command-line options
|
||||
int opt, debug = 0;
|
||||
while ((opt = getopt_long(argc, argv, ":dh", longopts, NULL)) != -1) {
|
||||
switch(opt) {
|
||||
case 'd': debug = 1; break;
|
||||
case 'h': usage(); break;
|
||||
case ':': fprintf(stderr, "%s: '%c' requires an argument\n", argv[0], optopt); usage(); break;
|
||||
case '?':
|
||||
default : fprintf(stderr, "%s: option '%c' is invalid\n", argv[0], optopt); usage(); break;
|
||||
}
|
||||
}
|
||||
|
||||
// open file or set input to STDIN
|
||||
char *file;
|
||||
FILE *input;
|
||||
if (optind < argc) {
|
||||
do {
|
||||
file = argv[optind];
|
||||
} while(++optind < argc);
|
||||
|
||||
if(!strcmp(file, "-")) {
|
||||
input = stdin;
|
||||
} else {
|
||||
input = fopen(argv[1],"r");
|
||||
input = fopen(file,"r");
|
||||
if(!input) {
|
||||
fprintf(stderr, "Unable to open '%s': %s\n",
|
||||
argv[1], strerror(errno));
|
||||
fprintf(stderr, "%s: %s: %s\n", argv[0], file, strerror(errno));
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
}
|
||||
@ -24,35 +57,41 @@ int main(int argc, char *argv[]) {
|
||||
input = stdin;
|
||||
}
|
||||
|
||||
// load document object from input
|
||||
document_t *doc;
|
||||
doc = markdown_load(input);
|
||||
|
||||
// test line/page load
|
||||
int offset;
|
||||
line_t *header;
|
||||
if(doc->header) {
|
||||
header = doc->header;
|
||||
while(header &&
|
||||
header->text->size > 0 &&
|
||||
header->text->text[0] == '%') {
|
||||
if(debug) {
|
||||
// print header to STDERR
|
||||
int offset;
|
||||
line_t *header;
|
||||
if(doc->header) {
|
||||
header = doc->header;
|
||||
while(header &&
|
||||
header->text->size > 0 &&
|
||||
header->text->text[0] == '%') {
|
||||
|
||||
offset = next_blank(header->text, 0) + 1;
|
||||
printf("header: %s\n", &header->text->text[offset]);
|
||||
header = header->next;
|
||||
offset = next_blank(header->text, 0) + 1;
|
||||
printf("header: %s\n", &header->text->text[offset]);
|
||||
header = header->next;
|
||||
}
|
||||
}
|
||||
}
|
||||
int cp = 0, cl = 0;
|
||||
page_t *page = doc->page;
|
||||
line_t *line;
|
||||
while(page) {
|
||||
cp++;
|
||||
line = page->line;
|
||||
cl = 0;
|
||||
while(line) {
|
||||
cl++;
|
||||
line = line->next;
|
||||
|
||||
// print page/line count to STDERR
|
||||
int cp = 0, cl = 0;
|
||||
page_t *page = doc->page;
|
||||
line_t *line;
|
||||
while(page) {
|
||||
cp++;
|
||||
line = page->line;
|
||||
cl = 0;
|
||||
while(line) {
|
||||
cl++;
|
||||
line = line->next;
|
||||
}
|
||||
printf("page %i: %i lines\n", cp, cl);
|
||||
page = page->next;
|
||||
}
|
||||
printf("page %i: %i lines\n", cp, cl);
|
||||
page = page->next;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user