Separate main function, parse command-line options
This commit is contained in:
5
.gitignore
vendored
5
.gitignore
vendored
@@ -17,10 +17,9 @@ src/Makefile
|
|||||||
src/Makefile.in
|
src/Makefile.in
|
||||||
src/sermon
|
src/sermon
|
||||||
src/sermon_lexer.c
|
src/sermon_lexer.c
|
||||||
src/sermon_lexer.o
|
|
||||||
src/sermon_parser.c
|
src/sermon_parser.c
|
||||||
src/sermon_parser.h
|
src/sermon_parser.h
|
||||||
src/sermon_parser.o
|
|
||||||
src/sermon_util.o
|
|
||||||
stamp-h1
|
stamp-h1
|
||||||
ylwrap
|
ylwrap
|
||||||
|
*.o
|
||||||
|
*.core
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
bin_PROGRAMS = sermon
|
bin_PROGRAMS = sermon
|
||||||
BUILT_SOURCES = sermon_lexer.c sermon_parser.c sermon_parser.h
|
BUILT_SOURCES = sermon_lexer.c sermon_parser.c sermon_parser.h
|
||||||
AM_YFLAGS = -d --location
|
AM_YFLAGS = -d --location
|
||||||
sermon_SOURCES = sermon_lexer.l sermon_parser.y sermon_util.c
|
sermon_SOURCES = sermon_lexer.l sermon_parser.y sermon_util.c main.c
|
||||||
CLEANFILES = sermon_lexer.c sermon_parser.c sermon_parser.h
|
CLEANFILES = sermon_lexer.c sermon_parser.c sermon_parser.h
|
||||||
LIBS = $(LEXLIB)
|
LIBS = $(LEXLIB)
|
||||||
|
|||||||
63
src/main.c
Normal file
63
src/main.c
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include "sermon.h"
|
||||||
|
|
||||||
|
extern int yyparse(Sermon *);
|
||||||
|
extern FILE* yyin;
|
||||||
|
|
||||||
|
void usage(const char* progname) {
|
||||||
|
fprintf(stderr, "Usage: %s [-h] FILE\n"
|
||||||
|
"\n"
|
||||||
|
" -h Display help message\n"
|
||||||
|
"\n"
|
||||||
|
" FILE sermon file to scan\n", progname);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char* argv[]) {
|
||||||
|
Sermon sermon;
|
||||||
|
int i = 0, block = 0, normal = 0;
|
||||||
|
const char* progname = argv[0], *filename = NULL;
|
||||||
|
while (++i < argc) {
|
||||||
|
if (strcmp(argv[i], "-h") == 0) { usage(progname); exit(0); }
|
||||||
|
else if ((argv[i][0] == '-') && (argv[i][1] != '\0')) {
|
||||||
|
fprintf(stderr, "Unknown option: %s\n", argv[i]);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
filename = argv[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!filename) {
|
||||||
|
usage(progname);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
InitSermon(&sermon);
|
||||||
|
if (strcmp(filename, "-") == 0) {
|
||||||
|
yyin = stdin;
|
||||||
|
} else {
|
||||||
|
yyin = fopen(argv[1], "rt");
|
||||||
|
}
|
||||||
|
yyparse(&sermon);
|
||||||
|
printf("Parsed sermon.\n");
|
||||||
|
printf("TITLE=%s\n", sermon.sermonTitle ? sermon.sermonTitle : "none");
|
||||||
|
printf("AUTHOR=%s\n", sermon.sermonAuthor ? sermon.sermonAuthor : "none");
|
||||||
|
printf("DATE=%s\n", sermon.sermonDate ? sermon.sermonDate : "none");
|
||||||
|
printf("OCCASION=%s\n", sermon.sermonOccasion ? sermon.sermonOccasion : "none");
|
||||||
|
printf("TEXT=%s\n", sermon.sermonText ? sermon.sermonText : "none");
|
||||||
|
printf("\nThere are %d paragraphs", sermon.numParagraphs);
|
||||||
|
for (i = 0; i < sermon.numParagraphs; i++) {
|
||||||
|
if (sermon.sermonParagraphs[i].paraType == PARA_DEFAULT) normal++;
|
||||||
|
else if (sermon.sermonParagraphs[i].paraType == PARA_BLOCKQUOTE) block++;
|
||||||
|
}
|
||||||
|
printf(" (%d regular, %d blockquote)\n", normal, block);
|
||||||
|
printf("\nThere are %d references.\n", sermon.numReferences);
|
||||||
|
for (i = 0; i < sermon.numReferences; i++) {
|
||||||
|
printf(" - %s: %s\n", sermon.sermonReferences[i].refId, sermon.sermonReferences[i].refText);
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
FreeSermon(&sermon);
|
||||||
|
if (strcmp(filename, "-") != 0) {
|
||||||
|
fclose(yyin);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -130,33 +130,6 @@ reference:
|
|||||||
;
|
;
|
||||||
%%
|
%%
|
||||||
|
|
||||||
int main(int argc, char* argv[]) {
|
|
||||||
Sermon sermon;
|
|
||||||
int i = 0, block = 0, normal = 0;
|
|
||||||
InitSermon(&sermon);
|
|
||||||
yyin = fopen(argv[1], "rt");
|
|
||||||
yyparse(&sermon);
|
|
||||||
printf("Parsed sermon.\n");
|
|
||||||
printf("TITLE=%s\n", sermon.sermonTitle ? sermon.sermonTitle : "none");
|
|
||||||
printf("AUTHOR=%s\n", sermon.sermonAuthor ? sermon.sermonAuthor : "none");
|
|
||||||
printf("DATE=%s\n", sermon.sermonDate ? sermon.sermonDate : "none");
|
|
||||||
printf("OCCASION=%s\n", sermon.sermonOccasion ? sermon.sermonOccasion : "none");
|
|
||||||
printf("TEXT=%s\n", sermon.sermonText ? sermon.sermonText : "none");
|
|
||||||
printf("\nThere are %d paragraphs", sermon.numParagraphs);
|
|
||||||
for (i = 0; i < sermon.numParagraphs; i++) {
|
|
||||||
if (sermon.sermonParagraphs[i].paraType == PARA_DEFAULT) normal++;
|
|
||||||
else if (sermon.sermonParagraphs[i].paraType == PARA_BLOCKQUOTE) block++;
|
|
||||||
}
|
|
||||||
printf(" (%d regular, %d blockquote)\n", normal, block);
|
|
||||||
printf("\nThere are %d references.\n", sermon.numReferences);
|
|
||||||
for (i = 0; i < sermon.numReferences; i++) {
|
|
||||||
printf(" - %s: %s\n", sermon.sermonReferences[i].refId, sermon.sermonReferences[i].refText);
|
|
||||||
}
|
|
||||||
printf("\n");
|
|
||||||
FreeSermon(&sermon);
|
|
||||||
fclose(yyin);
|
|
||||||
}
|
|
||||||
|
|
||||||
void yyerror(Sermon* s, const char* msg) {
|
void yyerror(Sermon* s, const char* msg) {
|
||||||
fprintf(stderr, "Parse error (%d:%d): %s - \"%s\"\n", yylloc.first_line, yylloc.first_column, msg, yytext);
|
fprintf(stderr, "Parse error (%d:%d): %s - \"%s\"\n", yylloc.first_line, yylloc.first_column, msg, yytext);
|
||||||
exit(1);
|
exit(1);
|
||||||
|
|||||||
Reference in New Issue
Block a user