main.cc
changeset 746 c7219a37cc39
parent 596 4efb11e44065
child 867 a435684a5223
--- a/main.cc	Thu Nov 15 17:30:35 2012 +0100
+++ b/main.cc	Fri Nov 16 10:26:23 2012 +0100
@@ -67,21 +67,28 @@
 
 
 
-//#include <stdio.h>   // printf()
+#include <stdio.h>
 #include <getopt.h>
 #include <string.h>
-#include <stdlib.h>  // EXIT_FAILURE
-#include "absyntax/absyntax.hh"  // symbol_c type
-
-/* A macro for printing out internal parser errors... */
-#include <iostream> // required for std::cerr
+#include <stdlib.h>
+#include <stdarg.h>
+#include <iostream>
+
+
+#include "config/config.h"
+#include "absyntax/absyntax.hh"
+#include "absyntax_utils/absyntax_utils.hh"
+#include "stage1_2/stage1_2.hh"
+#include "stage3/stage3.hh"
+#include "stage4/stage4.hh"
+#include "main.hh"
+
 
 #ifndef HGVERSION
-#define HGVERSION ""
+   #define HGVERSION ""
 #endif
 
-#include "main.hh"  // symbol_c type
-#include <stdarg.h> // required for va_start(), va_list
+
 
 void error_exit(const char *file_name, int line_no, const char *errmsg, ...) {
   va_list argptr;
@@ -101,28 +108,20 @@
 }
 
 
-
-#include "config/config.h"
-#include "stage1_2/stage1_2.hh"
-#include "absyntax_utils/absyntax_utils.hh"
-
-int stage3(symbol_c *tree_root);
-int stage4(symbol_c *tree_root, const char *builddir);
-
-
 static void printusage(const char *cmd) {
-  printf("syntax: %s [-h] [-v] [-f] [-s] [-I <include_directory>] [-T <target_directory>] <input_file>\n", cmd);
+  printf("\nsyntax: %s [-h] [-v] [-f] [-s] [-c] [-I <include_directory>] [-T <target_directory>] <input_file>\n", cmd);
   printf("  h : show this help message\n");
   printf("  v : print version number\n");  
   printf("  f : display full token location on error messages\n");
       /******************************************************/
-      /* whether we are suporting safe extensions           */
+      /* whether we are supporting safe extensions          */
       /* as defined in PLCopen - Technical Committee 5      */
       /* Safety Software Technical Specification,           */
       /* Part 1: Concepts and Function Blocks,              */
-      /* Version 1.0 – Official Release                     */
+      /* Version 1.0 is Official Release                    */
       /******************************************************/
   printf("  s : allow use of safe extensions\n");
+  printf("  c : create conversion functions\n");
   printf("\n");
   printf("%s - Copyright (C) 2003-2011 \n"
          "This program comes with ABSOLUTELY NO WARRANTY!\n"
@@ -137,29 +136,34 @@
   stage1_2_options_t stage1_2_options = {false, false, NULL};
   int optres, errflg = 0;
   int path_len;
-/*
-  extern char *optarg;
-  extern int optind, optopt;
-*/
+
 
   /******************************************/
   /*   Parse command line options...        */
   /******************************************/
-  while ((optres = getopt(argc, argv, ":hvfsI:T:")) != -1) {
+  while ((optres = getopt(argc, argv, ":hvfscI:T:")) != -1) {
     switch(optres) {
     case 'h':
       printusage(argv[0]);
       return 0;
+
     case 'v':
       fprintf(stdout, "%s version %s\n"
 		      "changeset id: %s\n", PACKAGE_NAME, PACKAGE_VERSION, HGVERSION);      
-      return 0;        
+      return 0;
+
     case 'f':
       stage1_2_options.full_token_loc = true;
       break;
+
     case 's':
       stage1_2_options.safe_extensions = true;
       break;
+
+    case 'c':
+      stage1_2_options.conversion_functions = true;
+      break;
+
     case 'I':
       /* NOTE: To improve the usability under windows:
        *       We delete last char's path if it ends with "\".
@@ -170,20 +174,24 @@
       if (optarg[path_len] == '\\') optarg[path_len]= '\0';
       stage1_2_options.includedir = optarg;
       break;
+
     case 'T':
       /* NOTE: see note above */
       path_len = strlen(optarg) - 1;
       if (optarg[path_len] == '\\') optarg[path_len]= '\0';
       builddir = optarg;
       break;
+
     case ':':       /* -I or -T without operand */
       fprintf(stderr, "Option -%c requires an operand\n", optopt);
       errflg++;
       break;
+
     case '?':
       fprintf(stderr, "Unrecognized option: -%c\n", optopt);
       errflg++;
       break;
+
     default:
       fprintf(stderr, "Unknown error while parsing command line options.");
       errflg++;
@@ -202,9 +210,8 @@
   }
 
   if (errflg) {
-      printf("\n");
-      printusage(argv[0]);
-      return EXIT_FAILURE;
+    printusage(argv[0]);
+    return EXIT_FAILURE;
   }
 
 
@@ -225,7 +232,6 @@
   if (stage3(tree_root) < 0)
     return EXIT_FAILURE;
   
-
   /* 3rd Pass */
   if (stage4(tree_root, builddir) < 0)
     return EXIT_FAILURE;