+++ /dev/null
-/*!@file
- \brief APC main driver
- \details The driver assumes the existence of a bison-generated parser,
- referenced by the external function 'yyparse'.
- It also assumes the existence of a lexer which must be initialized
- before parsing, referenced by the external function 'lexer_init'
- which assumes standard error handling.
- All input arguments are made available through the exposed (that is,
- non-static) array of character pointers 'cargs', which point
- to the non-duplicated strings in 'argv' directly from the system.
- \author Jordan Lavatai
- \date Aug 2016
- ----------------------------------------------------------------------------*/
-/* Standard */
-#include <stdio.h> //print
-#include <errno.h> //errors
-#include <string.h> //strnlen
-/* Posix */
-#include <stdlib.h> //exit
-#include <unistd.h> //getopt
-
-const char* cargs['Z'] = {0};
-
-int main(int, char*[]);
-
-extern //bison
-void yyparse(void);
-extern //lexer.c
-int lexer_init(void);
-
-/* Main entry from terminal
- parses the command line and kicks off recursive scanning
-*/
-int main
-( int argc,
- char* argv[]
-)
-#define S(S)#S //stringifier
-#define MAXSTR 255
-#define MAXERR "-%c allows at most " S(MAXSTR) " input characters\n", opt
-#define USAGE "Usage: %s [-r root]\n", argv[0]
-#define DONE -1
-{ int opt;
-
- getopt:
- switch (opt = getopt(argc, argv, "r:o:"))
- { case DONE:
- break;
- case 'r' :
- case 'o' :
- if (strnlen(optarg, MAXSTR) != MAXSTR)
- { cargs[opt] = optarg;
- goto getopt;
- }
- fprintf(stderr, MAXERR);
- default :
- fprintf(stderr, USAGE);
- exit(EXIT_FAILURE);
- }
- if (lexer_init())
- { perror("lexer");
- exit(EXIT_FAILURE);
- }
- yyparse();
- exit(EXIT_SUCCESS);
-}
-