test complete
[henge/apc.git] / src / apc.c
index a4ae543..5bd6d73 100644 (file)
--- a/src/apc.c
+++ b/src/apc.c
 #include <string.h> //strndupa
 /* Posix */
 #include <stdlib.h> //exit
-#include <unistd.h> //getopt
+#include <unistd.h> //getopt, sysconf
 /* Internal */
 #include "parser.tab.h" //bison
 
+#define DEFAULT_PAGESIZE 4096
 const char* cargs['Z'] = {0};
-
+long  sys_pagesize;
+  
 int main(int, char*[]);
 
-extern //bison
-int yyparse(void);
 extern //lexer.c
 int  lexer_init(void);
-
-extern //apc/parser.tab.c
-YYSTYPE yylval;
-extern //lexer.c
-int  lexer(void);
+extern //scanner.c
+int  scanner_init(void);
+extern //scanner.c
+void scanner_quit(void);
+extern //scanner.c
+int  scanner_scanpath(char const*);
+extern //ir.c
+int  ir_init(void);
+extern //ir.c
+int  ir_linker(void);
+extern //ir.c
+int  ir_condenser(void);
 
 /* Main entry from terminal
    parses the command line and kicks off recursive scanning
@@ -53,13 +60,12 @@ int main
   "\t\t-o\tOutput filename \t\t[a.asspak]\n"           \
   "\t\t-h\tPrint this help\n"
 #define DONE   -1
+#define SCANPATH (cargs['d'] ? cargs['d'] : "./")
 { int   opt;
 
  getopt:
   switch (opt = getopt(argc, argv, OPTS))
-  { case DONE:
-      break;
-    case 'd' :
+  { case 'd' :
     case 'o' :
       if (strnlen(optarg, MAXSTR) != MAXSTR)
         { cargs[opt] = optarg;
@@ -73,12 +79,20 @@ int main
       printf(USAGE);
       printf(USAGE_LONG);
       exit(EXIT_SUCCESS);
+    case DONE:
+      break;
   }
-  if (lexer_init())
-    { perror("lexer");
+  if ((sys_pagesize = sysconf(_SC_PAGESIZE)) == 0)
+    sys_pagesize = DEFAULT_PAGESIZE;
+  if (ir_init())
+    { perror("init");
+      exit(EXIT_FAILURE);
+    }
+  if (scanner_scanpath(SCANPATH))
+    { perror("scanner");
       exit(EXIT_FAILURE);
     }
-  yyparse();
+  ir_linker();
+  ir_condenser();
   exit(EXIT_SUCCESS);
 }
-