Open64 (mfef90, whirl2f, and IR tools)  TAG: version-openad; SVN changeset: 916
cmd_line.c
Go to the documentation of this file.
00001 /*
00002 
00003   Copyright (C) 2000, 2001 Silicon Graphics, Inc.  All Rights Reserved.
00004 
00005   This program is free software; you can redistribute it and/or modify it
00006   under the terms of version 2 of the GNU General Public License as
00007   published by the Free Software Foundation.
00008 
00009   This program is distributed in the hope that it would be useful, but
00010   WITHOUT ANY WARRANTY; without even the implied warranty of
00011   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
00012 
00013   Further, this software is distributed without any warranty that it is
00014   free of the rightful claim of any third person regarding infringement 
00015   or the like.  Any license provided herein, whether implied or 
00016   otherwise, applies only to this software file.  Patent licenses, if 
00017   any, provided herein do not apply to combinations of this program with 
00018   other software, or any other product whatsoever.  
00019 
00020   You should have received a copy of the GNU General Public License along
00021   with this program; if not, write the Free Software Foundation, Inc., 59
00022   Temple Place - Suite 330, Boston MA 02111-1307, USA.
00023 
00024   Contact information:  Silicon Graphics, Inc., 1600 Amphitheatre Pky,
00025   Mountain View, CA 94043, or:
00026 
00027   http://www.sgi.com
00028 
00029   For further information regarding this notice, see:
00030 
00031   http://oss.sgi.com/projects/GenInfo/NoticeExplan
00032 
00033 */
00034 
00035 
00036 
00037 static char USMID[] = "\n@(#)5.0_pl/sources/cmd_line.c  5.16    10/20/99 17:17:46\n";
00038 
00039 #include <unistd.h> /* for getopt(), optarg, optind, opterr, optopt */
00040 #if defined(__linux__) 
00041 # include <getopt.h> /* for optind, opterr, optopt */
00042 #endif
00043 
00044 # include "defines.h"           /* Machine dependent ifdefs */
00045 
00046 # include "host.m"              /* Host machine dependent macros.*/
00047 # include "host.h"              /* Host machine dependent header.*/
00048 # include "target.m"            /* Target machine dependent macros.*/
00049 # include "target.h"            /* Target machine dependent header.*/
00050 
00051 # include "globals.m"
00052 # include "tokens.m"
00053 # include "sytb.m"
00054 # include "src_input.m"
00055 # include "cmd_line.m"
00056 # include "debug.m"
00057 
00058 # include "globals.h"
00059 # include "tokens.h"
00060 # include "sytb.h"
00061 # include "cmd_line.h"
00062 
00063 /*****************************************************************\
00064 |* function prototypes of static functions declared in this file *|
00065 \*****************************************************************/
00066 
00067 extern  char                    release_level[];
00068 extern  char                    frontend_version[];
00069 
00070 
00071 static  void dump_help_screen (void);
00072 static  void init_cmd_line    (void);
00073 static  void process_A_option (char *);
00074 static  void process_a_option (char *);
00075 static  void process_b_option (char *);
00076 static  void process_C_option (char *, char *[]);
00077 static  void process_d_option (char *);
00078 static  void process_e_option (char *);
00079 static  void process_f_option (char *);
00080 static  void process_G_option (char *);
00081 static  void process_i_option (char *);
00082 static  void process_J_option (char *);
00083 static  void process_k_option (char *);
00084 static  void process_m_option (char *);
00085 static  void process_M_option (char *);
00086 static  void process_N_option (char *);
00087 static  void process_O_option (char *, int);
00088 static  void add_to_fp_table  (char *, int *, int);
00089 static  void process_P_option (char *);
00090 static  void process_q_option (char *);
00091 static  void process_r_option (char *);
00092 static  void process_R_option (char *);
00093 static  void process_s_option (char *);
00094 static  void process_S_option (char *);
00095 static  void process_t_option (char *);
00096 static  void process_u_option (char *);
00097 static  void process_v_option (char *);
00098 static  void process_x_option (char *);
00099 static  void process_X_option (char *);
00100 static  void process_Y_option (char *);
00101 static  void set_prog_file_names (char *argv[]);
00102 static  void validate_O_option (void);
00103 static  void validate_G_option (void);
00104 static  void validate_R_option (void);
00105 static  void validate_s_option (void);
00106 static  void process_D_option(char *);
00107 static  void process_U_option(char *);
00108 extern  void process_v_dbg_flags(char *);
00109 static  void set_system_module_path( void );
00110 static  void process_reshape_array(char *);
00111 static  void dump_options(void);
00112 
00113 
00114 /******************************************************************************\
00115 |*                                                                            *|
00116 |* Description:                                                               *|
00117 |*      Process_cmd_line is called to accept and validate command line        *|
00118 |*      options and arguments to change compiler flags.                       *|
00119 |*                                                                            *|
00120 |* Input parameters:                                                          *|
00121 |*      argc                    number of command line arguments              *|
00122 |*      argv                    argument strings                              *|
00123 |*                                                                            *|
00124 |* Output parameters:                                                         *|
00125 |*      NONE                                                                  *|
00126 |*                                                                            *|
00127 |* Returns:                                                                   *|
00128 |*      NOTHING                                                               *|
00129 |*                                                                            *|
00130 \******************************************************************************/
00131   
00132 int process_cmd_line(int   argc,
00133                          char *argv[])
00134 {
00135    char         err_char;
00136    int          err_ind;
00137    int          option;
00138    int          i;
00139 
00140    int          save_argc;
00141 
00142 
00143 /******************************************************************************/
00144 /*                                                                            */
00145 /* NOTE:                                                                      */
00146 /*    To add a new commandline option to the compiler, you must add the letter*/
00147 /*    to opt_string.  Any letter you add must go in the list alphabetically.  */
00148 /*    Those that have args must have a colon follwing.  Those that do not have*/
00149 /*    args must NOT have a colon following. Currently they are -g, -V, -z, -Z */
00150 /*                                                                            */
00151 /******************************************************************************/
00152 
00153    char *opt_string="a:b:d:e:f:ghi:k:m:p:q:r:s:t:u:v:x:z"
00154                     "A:C:D:FG:I:J:M:N:O:P:R:S:T:U:Y:X:VZ";
00155 
00156    char  str[7];
00157 
00158 
00159    TRACE (Func_Entry, "process_cmd_line", NULL);
00160 
00161    save_argc = argc;
00162 
00163    opterr = 0;                                          /* disable lib msgs  */
00164 
00165    init_cmd_line ();
00166 
00167 # ifdef _DEBUG
00168 # ifdef _ENABLE_FEI
00169    str[0] = 'N';
00170    str[1] = '\0';
00171    process_v_dbg_flags (str);   /* pass -vN always */
00172 # endif
00173 # endif
00174    err_ind = optind;
00175 
00176    while ((option = getopt (argc, argv, opt_string)) != EOF) {
00177 
00178       switch (option) {
00179          case 'h':
00180            dump_options();
00181            return 1;
00182            break;
00183          case 'a':                                      /* memory options     */
00184             process_a_option (optarg);
00185             break;
00186 
00187          case 'b':                                      /* binary file name   */
00188             process_b_option (optarg);
00189             break;
00190 
00191          case 'd':                                      /* off flags          */
00192             process_d_option (optarg);
00193             break;
00194 
00195          case 'e':                                      /* on flags           */
00196             process_e_option (optarg);
00197             break;
00198     
00199          case 'f':                                      /* source form        */
00200             process_f_option (optarg);
00201             break;
00202     
00203          case 'g':                                      /* -G 0               */
00204             cmd_line_flags.debug_lvl = Debug_Lvl_0;
00205             break;
00206     
00207          case 'i':                                      /* integer size       */
00208             process_i_option (optarg);
00209             break;
00210 
00211          case 'k':                                      /* Solaris profiling  */
00212             process_k_option (optarg);
00213             break;
00214 
00215       /* When the -l option is implemented (to specify what file the CIF      */
00216       /* output should go to), also update cif_misc_compiler_opts_rec in      */
00217       /* cif.c.                                                               */
00218       /*                                                                      */
00219       /* case 'l':                                         CIF name           */
00220       /*    break;                                                            */
00221 
00222          case 'm':                                      /* msg level suppr'd  */
00223             process_m_option (optarg);
00224             break;
00225 
00226          case 'O':                                      /* optimization opts  */
00227             process_O_option (optarg, argc);
00228             break;
00229 
00230          case 'p':                                      /* module path name  */
00231             add_to_fp_table (optarg, &module_path_idx, option);
00232             break;
00233 
00234          case 'q':                                      /* expression eval    */
00235             process_q_option (optarg);
00236             break;
00237 
00238          case 'r':                                      /* list options       */
00239             process_r_option (optarg);
00240             break;
00241 
00242          case 'R':                                      /* runtime checking   */
00243             process_R_option (optarg);
00244             break;
00245 
00246          case 's':                                      /* type size option   */
00247             process_s_option (optarg);
00248             break;
00249 
00250          case 'S':                                      /* cal file name      */
00251             process_S_option (optarg);
00252             break;
00253 
00254          case 't':                                      /* truncate bits      */
00255             process_t_option (optarg);
00256             break;
00257 
00258          case 'u':                                      /* debug dump flags   */
00259             process_u_option (optarg);
00260             break;
00261 
00262          case 'v':                                      /* PDGCS debug opts   */
00263             process_v_option (optarg);
00264             break;
00265 
00266          case 'A':                                      /* implicit use       */
00267             process_A_option (optarg);
00268             break;
00269 
00270          case 'C':                                      /* CIF flags          */
00271             process_C_option (optarg, argv);
00272             break;
00273 
00274          case 'D':                                      /* DEFINE */
00275 # ifdef _FRONTEND_CONDITIONAL_COMP
00276             process_D_option (optarg);
00277 # endif
00278             break;
00279 
00280          case 'x':                                      /* disregard CDIRs    */
00281             process_x_option (optarg);
00282             break;
00283 
00284          case 'F':                                      /* fortran macro exp */
00285 # ifdef _FRONTEND_CONDITIONAL_COMP
00286             cmd_line_flags.pp_macro_expansion   = TRUE;
00287             on_off_flags.preprocess = TRUE;
00288 # endif
00289             break;
00290     
00291     
00292          case 'G':                                      /* debug option       */
00293             process_G_option (optarg);
00294             break;
00295     
00296          case 'I':                                      /* include option     */
00297             add_to_fp_table(optarg, &include_path_idx, option);
00298             break;
00299 
00300          case 'J':                                      /* .mod output locate */
00301             process_J_option (optarg);
00302             break;
00303 
00304          case 'M':                                      /* disable msg numbers*/
00305             process_M_option (optarg);
00306             break;
00307     
00308          case 'N':                                      /* fixed line size    */
00309             process_N_option (optarg);
00310             break;
00311 
00312          case 'P':                                      /* position independ  */
00313             process_P_option (optarg);
00314             break;
00315     
00316          case 'U':                                      /* UNDEF */
00317 # ifdef _FRONTEND_CONDITIONAL_COMP
00318             process_U_option (optarg);
00319 # endif
00320             break;
00321 
00322          case 'V':                                      /* version option     */
00323             cmd_line_flags.verify_option = TRUE;
00324             break;
00325 
00326          case 'X':                                      /* MPP num PE's opt   */
00327             process_X_option (optarg);
00328             break;
00329 
00330          case 'Y':
00331             process_Y_option (optarg);                  /* ccg debug options  */
00332             break;
00333 
00334 # ifdef COARRAY_FORTRAN
00335          case 'Z':
00336             cmd_line_flags.co_array_fortran     = TRUE;
00337             dump_flags.f_minus_minus            = TRUE;
00338             dump_flags.fmm1                     = TRUE;
00339           break;
00340 # endif
00341 
00342          case 'z':                                      /* cleanup whirl      */
00343             cmd_line_flags.cleanUpWhirl=1;
00344             break;
00345 
00346 
00347          default:     /* Command line has an invalid option. */
00348 
00349             err_char = argv[err_ind][1];
00350 
00351             if (err_char == 'O') {
00352 
00353                /* Accept -O with no arguments.  It means use defaults. */
00354                /* Intentionally blank */
00355 
00356                ntr_msg_queue(0, 1221, Log_Warning, 0, (char *) NULL, 0, NO_ARG);
00357             }
00358             else {
00359                err_char = optopt;
00360                ntr_msg_queue(0, 77, Log_Error, 0, 
00361                              (char *) NULL, optopt, ARG_ARG);
00362             }
00363             break;
00364       }  /* switch */
00365 
00366       err_ind = optind;
00367    }  /* while */
00368 
00369 /* # ifdef _DEBUG */
00370 
00371    if (dump_flags.help_dbg) {
00372       dump_help_screen();
00373       return 1;
00374    }
00375 
00376 /* # endif */
00377 
00378    if (argc == 2  &&  cmd_line_flags.verify_option) {
00379 
00380       /* cft90 call only requests compiler version info.    */
00381       /* message will be produced by init_compiler in main. */
00382    }
00383    else {
00384 
00385       if (on_off_flags.MPP_apprentice) {
00386          cif_flags = cif_flags | ALL_RECS      |
00387                                  XREF_RECS     | MISC_RECS |
00388                                  MESSAGE_RECS  | INFO_RECS |
00389                                  BASIC_RECS    | COMPILER_RECS;
00390       }
00391 
00392 #     if defined(GENERATE_WHIRL)
00393 
00394          if (dump_flags.cray_compatible) {
00395             cmd_line_flags.s_default64 = TRUE;
00396          }
00397 #     endif
00398 
00399       if (on_off_flags.all_debug) {  /* Turn on all debugging options. */
00400 
00401          /* -eD implies -O0 -G0 -ei -m2 -RabcsCE -rl */
00402 
00403          opt_flags.support_lvl                  = 0;
00404          cmd_line_flags.debug_lvl               = Debug_Lvl_0;
00405          on_off_flags.indef_init                = TRUE;
00406          cmd_line_flags.msg_lvl_suppressed      = Caution_Lvl;
00407          cmd_line_flags.runtime_argument        = TRUE;
00408          cmd_line_flags.runtime_bounds          = TRUE;
00409          cmd_line_flags.runtime_conformance     = TRUE;
00410          cmd_line_flags.runtime_substring       = TRUE;
00411          cmd_line_flags.runtime_ptr_chk         = TRUE;
00412          cmd_line_flags.runtime_arg_call        = TRUE;
00413          cmd_line_flags.runtime_arg_entry       = TRUE;
00414          cif_flags = cif_flags | ALL_RECS      |
00415                                  XREF_RECS     | MISC_RECS |
00416                                  MESSAGE_RECS  | INFO_RECS |
00417                                  BASIC_RECS    | COMPILER_RECS;
00418          cif_C_opts = cif_C_opts | ALL_RECS;
00419 
00420          if (on_off_flags.zero_init) {  /* Conflict - issue warning */
00421             on_off_flags.zero_init = FALSE;
00422             ntr_msg_queue(0, 1313, Log_Warning, 0, "ei\ne0", 0,MULT_STR_ARG);
00423          }
00424 
00425          if (! set_scalar_option) {
00426             opt_flags.scalar_lvl = Scalar_Lvl_0;
00427          }
00428 
00429 #        if defined(_ACCEPT_VECTOR)
00430 
00431          if (! set_vector_option) {
00432             opt_flags.vector_lvl = Vector_Lvl_0;
00433          }
00434 
00435 #        endif
00436 
00437 #        if defined(_ACCEPT_TASK)
00438 
00439          if (! set_task_option) {
00440             opt_flags.task_lvl = Task_Lvl_0;
00441          }
00442 #        endif
00443 
00444 #        if defined(_ACCEPT_STREAM)
00445 
00446          if (! set_stream_option) {
00447             opt_flags.stream_lvl = Stream_Lvl_0;
00448          }
00449 
00450 #        endif
00451       }
00452 
00453       /* Validate G before O, because G can override O levels. */
00454 
00455       if (cmd_line_flags.debug_lvl < No_Debugging) {
00456          validate_G_option ();
00457       }
00458 
00459       validate_O_option ();
00460       validate_R_option ();
00461       validate_s_option ();
00462 
00463       if (cmd_line_flags.align32 && cmd_line_flags.align64) {
00464          cmd_line_flags.align32         = FALSE;
00465          ntr_msg_queue(0, 1353, Log_Warning, 0, 
00466                        "-a align32\n-a align64\n-a align32",
00467                        0, MULT_STR_ARG);
00468       }
00469 
00470       if (target_ieee) {
00471 
00472          if (set_ieeeconform_option && opt_flags.ieeeconform && 
00473              !on_off_flags.eu) {
00474             on_off_flags.eu = FALSE;
00475 
00476             if (set_eu_option) {  /* -du has been specified. */
00477                ntr_msg_queue(0, 1215, Log_Warning, 0, (char *) NULL, 0, NO_ARG);
00478             }
00479             else {                /* -du is default. */
00480                ntr_msg_queue(0, 1216, Log_Warning, 0, (char *) NULL, 0, NO_ARG);
00481             }
00482          }
00483 
00484          if (opt_flags.ieeeconform) {
00485             on_off_flags.reciprical_divide = FALSE;
00486          }
00487          else {
00488             on_off_flags.reciprical_divide = !on_off_flags.eu;
00489          }
00490       }
00491       else {
00492          on_off_flags.round_integer_divide = on_off_flags.eu;
00493       }
00494 
00495       if (on_off_flags.assembly_listing_file && !cmd_line_flags.binary_output) {
00496          cmd_line_flags.binary_output = TRUE;
00497          ntr_msg_queue(0, 913, Log_Warning, 0, (char *) NULL, 0, NO_ARG);
00498       }
00499 
00500       if (cmd_line_flags.co_array_fortran) {
00501 # if defined(_TASK_COMMON_EXTENSION)
00502          cmd_line_flags.taskcommon      = TRUE;
00503 # endif
00504          opt_flags.task_lvl             = Task_Lvl_0;
00505       }
00506 
00507 # if defined(_NO_BINARY_OUTPUT)
00508       binary_output     = FALSE;
00509       assembly_output   = cmd_line_flags.binary_output ||
00510                           cmd_line_flags.assembly_output;
00511 # else
00512       binary_output     = cmd_line_flags.binary_output;
00513       assembly_output   = cmd_line_flags.assembly_output;
00514 # endif
00515 
00516 /*
00517       if (no_preprocessing) {
00518          on_off_flags.preprocess = FALSE;
00519          on_off_flags.preprocess_only = FALSE;
00520          on_off_flags.save_dot_i = FALSE;
00521       }
00522 */
00523 
00524       set_prog_file_names (argv);
00525 
00526       if (optind < (argc-1)) { /* Options not allowed after input file name. */
00527          ntr_msg_queue(0, 79, Log_Error, 0, (char *) NULL, 0, NO_ARG);
00528       }
00529    }
00530 
00531    if (cmd_line_flags.mod_out_path && !on_off_flags.module_to_mod) {
00532 
00533       /* Must specify -em to specify -J */
00534 
00535       ntr_msg_queue(0, 1658, Log_Error, 0, (char *) NULL, 0, NO_ARG);
00536    }
00537 
00538    PRINT_CMD_LINE_TBLS;  /* Will print if -u cmd is specified for a DEBUG comp*/
00539 
00540    if (dump_flags.show_cmd_line) {
00541       printf("\n");
00542       for (i = 0; i < save_argc; i++) {
00543          printf("%s ", argv[i]);
00544       }
00545       printf("\n\n");
00546    }
00547 
00548    issue_deferred_msgs();
00549 
00550    TRACE (Func_Exit, "process_cmd_line", NULL);
00551 
00552    return 0;
00553   
00554 }  /* process_cmd_line */
00555 
00556 
00557 /******************************************************************************\
00558 |*                                                                            *|
00559 |* Description:                                                               *|
00560 |*      Validate_G_option is called to check the combination of debug options *|
00561 |*      and optimization options.                                             *|
00562 |*                                                                            *|
00563 |* Input parameters:                                                          *|
00564 |*      NONE                                                                  *|
00565 |*                                                                            *|
00566 |* Output parameters:                                                         *|
00567 |*      NONE                                                                  *|
00568 |*                                                                            *|
00569 |* Returns:                                                                   *|
00570 |*      NOTHING                                                               *|
00571 |*                                                                            *|
00572 \******************************************************************************/
00573 
00574 static void validate_G_option (void)
00575 {
00576 /* KAY - This routine needs help.  It doesn't appear to be finished. */
00577 
00578    int          correct_scalar_lvl;
00579    int          correct_vector_lvl;
00580    int          correct_task_lvl;
00581    int          debug_lvl;
00582 
00583 
00584    TRACE (Func_Entry, "validate_G_option", NULL);
00585 
00586    if (!cmd_line_flags.binary_output) {
00587 
00588 # if !defined(_NO_BINARY_OUTPUT)
00589 
00590       /* Warning - binary output needs to be on for debugging. */
00591 
00592       ntr_msg_queue(0, 82, Log_Warning, 0, (char *) NULL, 0, NO_ARG);
00593       cmd_line_flags.assembly_output    = FALSE;
00594       cmd_line_flags.binary_output      = TRUE;
00595 # endif
00596 
00597    }
00598 
00599    switch (cmd_line_flags.debug_lvl) {
00600    case Debug_Lvl_0:
00601 
00602       if (set_scalar_option && opt_flags.scalar_lvl > Scalar_Lvl_0) {
00603          ntr_msg_queue(0, 1536, Log_Warning, 0,
00604                        scalar_lvl_str[Scalar_Lvl_0], 
00605                        Debug_Lvl_0, STR_ARG_ARG);
00606       }
00607 
00608       if (set_vector_option && opt_flags.vector_lvl > Vector_Lvl_0) {
00609         ntr_msg_queue(0, 1536, Log_Warning, 0,
00610                        vector_lvl_str[Vector_Lvl_0], 
00611                        Debug_Lvl_0, STR_ARG_ARG);
00612       }
00613 
00614       if (set_stream_option && opt_flags.stream_lvl > Stream_Lvl_0) {
00615          ntr_msg_queue(0, 1536, Log_Warning, 0,
00616                        stream_lvl_str[Stream_Lvl_0], 
00617                        Debug_Lvl_0, STR_ARG_ARG);
00618       }
00619 
00620       if (set_task_option && opt_flags.task_lvl > Task_Lvl_0) {
00621          ntr_msg_queue(0, 1536, Log_Warning, 0,
00622                        task_lvl_str[Task_Lvl_0], 
00623                        Debug_Lvl_0, STR_ARG_ARG);
00624       }
00625 
00626       if (set_support_lvl_option && opt_flags.support_lvl > 0) {
00627          ntr_msg_queue(0, 1536, Log_Warning, 0,
00628                        "-O0", Debug_Lvl_0, STR_ARG_ARG);
00629       }
00630 
00631       if (opt_flags.inline_lvl > Inline_Lvl_0 ||
00632           set_inlinefrom_option) {
00633          ntr_msg_queue(0, 1199, Log_Warning, 0, (char *) NULL, 0, NO_ARG);
00634       }
00635 
00636       cmd_line_flags.do_UDB_checks      = opt_flags.scalar_lvl > Scalar_Lvl_0;
00637       opt_flags.scalar_lvl              = Scalar_Lvl_0;
00638       opt_flags.stream_lvl              = Stream_Lvl_0;
00639       opt_flags.vector_lvl              = Vector_Lvl_0;
00640       opt_flags.task_lvl                = Task_Lvl_0;
00641       opt_flags.inline_lvl              = Inline_Lvl_0; 
00642       opt_flags.support_lvl             = 0;
00643 
00644       if (set_aggress_option) {
00645          ntr_msg_queue(0, 1069, Log_Warning, 0,
00646                        "aggress", Debug_Lvl_0, STR_ARG_ARG);
00647       }
00648 
00649       if (set_bottom_load_option) {
00650          ntr_msg_queue(0, 1069, Log_Warning, 0,
00651                        "bl", Debug_Lvl_0, STR_ARG_ARG);
00652       }
00653 
00654       if (set_loop_align_option) {
00655          ntr_msg_queue(0, 1069, Log_Warning, 0,
00656                        "loopalign", Debug_Lvl_0, STR_ARG_ARG);
00657       }
00658 
00659       if (set_pattern_option) {
00660          ntr_msg_queue(0, 1069, Log_Warning, 0,
00661                        "pattern", Debug_Lvl_0, STR_ARG_ARG);
00662       }
00663 
00664       if (set_pipeline_option) {
00665          ntr_msg_queue(0, 1069, Log_Warning, 0,
00666                        "pipeline", Debug_Lvl_0, STR_ARG_ARG);
00667       }
00668 
00669       if (set_recurrence_option) {
00670          ntr_msg_queue(0, 1069, Log_Warning, 0,
00671                        "recurrence", Debug_Lvl_0, STR_ARG_ARG);
00672       }
00673 
00674       if (set_vsearch_option) {
00675          ntr_msg_queue(0, 1069, Log_Warning, 0,
00676                        "vsearch", Debug_Lvl_0, STR_ARG_ARG);
00677       }
00678 
00679       if (set_zeroinc_option) {
00680          ntr_msg_queue(0, 1069, Log_Warning, 0,
00681                        "zeroinc", Debug_Lvl_0, STR_ARG_ARG);
00682       }
00683 
00684       opt_flags.aggress         = FALSE;
00685       opt_flags.bottom_load     = FALSE;
00686       opt_flags.loopalign       = FALSE;
00687       opt_flags.recurrence      = FALSE;
00688       opt_flags.pattern         = FALSE;
00689       opt_flags.pipeline_lvl    = 0;
00690       opt_flags.vsearch         = FALSE;
00691       opt_flags.zeroinc         = FALSE;
00692       set_debug_option          = TRUE;
00693       break;
00694 
00695 
00696    case Debug_Lvl_1:
00697 
00698       debug_lvl                 = Debug_Lvl_1;
00699       set_debug_option          = TRUE;
00700 
00701       if (opt_flags.scalar_lvl > Scalar_Lvl_2) {
00702 
00703          if (set_scalar_option) {
00704             ntr_msg_queue(0, 1536, Log_Warning, 0,
00705                           scalar_lvl_str[Scalar_Lvl_2], 
00706                           Debug_Lvl_1, STR_ARG_ARG);
00707          }
00708          opt_flags.scalar_lvl   = Scalar_Lvl_2;
00709       }
00710 
00711       if (opt_flags.inline_lvl > Inline_Lvl_0 ||
00712           set_inlinefrom_option) {
00713          opt_flags.inline_lvl = Inline_Lvl_0; 
00714          ntr_msg_queue(0, 1199, Log_Warning, 0, (char *) NULL, 0, NO_ARG);
00715       }
00716 
00717 # if defined(_ACCEPT_STREAM)
00718 
00719       if (opt_flags.stream_lvl > Stream_Lvl_1) {
00720 
00721          if (set_stream_option) {
00722             ntr_msg_queue(0, 1536, Log_Warning, 0,
00723                           stream_lvl_str[Stream_Lvl_1], 
00724                           Debug_Lvl_1, STR_ARG_ARG);
00725          }
00726 
00727          opt_flags.stream_lvl   = Stream_Lvl_1;
00728       }
00729 # endif
00730 
00731 
00732 # if defined(_ACCEPT_VECTOR)
00733 
00734       if (opt_flags.vector_lvl > Vector_Lvl_1) {
00735 
00736          if (set_vector_option) {
00737             ntr_msg_queue(0, 1536, Log_Warning, 0,
00738                           vector_lvl_str[Vector_Lvl_1], 
00739                           Debug_Lvl_1, STR_ARG_ARG);
00740          }
00741 
00742          opt_flags.vector_lvl   = Vector_Lvl_1;
00743       }
00744 # endif
00745 
00746       if (set_support_lvl_option && opt_flags.support_lvl > 1) {
00747          ntr_msg_queue(0, 1536, Log_Warning, 0,
00748                        "-O1", Debug_Lvl_1, STR_ARG_ARG);
00749          opt_flags.support_lvl  = 1;
00750       }
00751 
00752       break;
00753 
00754 
00755    case Debug_Lvl_2:
00756 
00757       set_debug_option          = TRUE;
00758       correct_vector_lvl        = Vector_Lvl_3;
00759       correct_task_lvl          = Task_Lvl_3;
00760       correct_scalar_lvl        = Scalar_Lvl_3;
00761       debug_lvl                 = Debug_Lvl_2;
00762       break;
00763 
00764    case Debug_Lvl_3:
00765 
00766       /* Ignore these for now.  gsf says -G doesn't affect levels */
00767 
00768       correct_vector_lvl        = Vector_Lvl_3;
00769       correct_task_lvl          = Task_Lvl_3;
00770       correct_scalar_lvl        = Scalar_Lvl_3;
00771       debug_lvl                 = Debug_Lvl_3;
00772       break;
00773    }
00774 
00775    TRACE (Func_Exit, "validate_G_option", NULL);
00776 
00777    return;
00778 
00779 }  /* validate_G_option */
00780 
00781 /******************************************************************************\
00782 |*                                                                            *|
00783 |* Description:                                                               *|
00784 |*      <description>                                                         *|
00785 |*                                                                            *|
00786 |* Input parameters:                                                          *|
00787 |*      NONE                                                                  *|
00788 |*                                                                            *|
00789 |* Output parameters:                                                         *|
00790 |*      NONE                                                                  *|
00791 |*                                                                            *|
00792 |* Returns:                                                                   *|
00793 |*      NOTHING                                                               *|
00794 |*                                                                            *|
00795 \******************************************************************************/
00796 
00797 static void validate_R_option( void )
00798 
00799 {
00800 
00801 
00802    TRACE (Func_Entry, "validate_R_option", NULL);
00803 
00804    if (cmd_line_flags.runtime_arg_count_only &&
00805        ! cmd_line_flags.runtime_argument &&
00806        ! cmd_line_flags.runtime_arg_call &&
00807        ! cmd_line_flags.runtime_arg_entry) {
00808 
00809       cmd_line_flags.runtime_argument = TRUE;
00810    }
00811 
00812    TRACE (Func_Exit, "validate_R_option", NULL);
00813 
00814    return;
00815 
00816 }  /* validate_R_option */
00817 
00818 /******************************************************************************\
00819 |*                                                                            *|
00820 |* Description:                                                               *|
00821 |*      Init_flags is called to set all flag structs to their default values. *|
00822 |*      These flags control the compiler.  The user is able to change any of  *|
00823 |*      these flag values through commmand line options and compiler          *|
00824 |*      directives.                                                           *|
00825 |*                                                                            *|
00826 |* Input parameters:                                                          *|
00827 |*      NONE                                                                  *|
00828 |*                                                                            *|
00829 |* Output parameters:                                                         *|
00830 |*      NONE                                                                  *|
00831 |*                                                                            *|
00832 |* Returns:                                                                   *|
00833 |*      NOTHING                                                               *|
00834 |*                                                                            *|
00835 \******************************************************************************/
00836            
00837 static void init_cmd_line (void)
00838  
00839 {
00840    int  idx;
00841    char *u_option;
00842 
00843    TRACE (Func_Entry, "init_cmd_line", NULL);
00844 
00845 # if defined(_ACCEPT_STREAM)
00846 # if defined(_TARGET_SV2)
00847      accept_stream = TRUE;
00848 # else
00849      accept_stream = target_sv1;
00850 # endif
00851 # endif
00852 
00853    set_support_lvl_option       = FALSE;
00854 
00855    /* Set defaults for CIF option flags.                                      */
00856    cif_flags              = 0;
00857    cif_C_opts             = 0;
00858 
00859    /* set defaults for command line level option flags */
00860 
00861    cmd_line_flags.dalign                = (cft90_dash_a_dalign_option == 1);
00862    cmd_line_flags.align32               = FALSE;
00863    cmd_line_flags.align64               = FALSE;
00864                                                                 /* -a  dalign */
00865    cmd_line_flags.taskcommon            = FALSE;                /*-ataskcommon*/
00866    cmd_line_flags.static_threadprivate  = FALSE;                /*-astatic_th */
00867    cmd_line_flags.solaris_profile       = FALSE;                /* -k  s/g    */
00868 
00869    cmd_line_flags.binary_output         = TRUE;                 /* -b  name   */
00870    cmd_line_flags.assembly_output       = FALSE;                /* -s  name   */
00871 
00872    cmd_line_flags.runtime_argument      = FALSE;                /* -R a       */
00873    cmd_line_flags.runtime_arg_call      = FALSE;                /* -R C       */
00874    cmd_line_flags.runtime_arg_entry     = FALSE;                /* -R E       */
00875    cmd_line_flags.runtime_arg_count_only= FALSE;                /* -R n       */
00876    cmd_line_flags.runtime_bounds        = FALSE;                /* -R b       */
00877    cmd_line_flags.runtime_conformance   = FALSE;                /* -R c       */
00878    cmd_line_flags.runtime_intrinsics    = FALSE;                /* -R i       */
00879    cmd_line_flags.runtime_substring     = FALSE;                /* -R s       */
00880    cmd_line_flags.runtime_ptr_chk       = FALSE;                /* -R p       */
00881    cmd_line_flags.s_float64             = FALSE;                /*-s float64  */
00882    cmd_line_flags.s_default32           = FALSE;                /*-s default32*/
00883    cmd_line_flags.s_default64           = FALSE;                /*-s default64*/
00884    cmd_line_flags.s_cf77types           = FALSE;                /*-s cf77types*/
00885    cmd_line_flags.s_integer8            = FALSE;                /*-s integer8 */
00886    cmd_line_flags.s_logical8            = FALSE;                /*-s logical8 */
00887    cmd_line_flags.s_real8               = FALSE;                /*-s real8    */
00888    cmd_line_flags.s_complex8            = FALSE;                /*-s complex8 */
00889    cmd_line_flags.s_doubleprecision16   = FALSE;                /*-s doublep  */
00890    cmd_line_flags.s_doublecomplex16     = FALSE;                /*-s doublec  */
00891 
00892 # if defined(_TARGET_SV2) || \
00893        ((defined(_HOST_OS_IRIX) || defined(_HOST_OS_LINUX)) && defined(_TARGET_OS_UNICOS))
00894    cmd_line_flags.s_pointer8            = TRUE;                 /*-s pointer8 */
00895 # else
00896    cmd_line_flags.s_pointer8            = FALSE;                /*-s pointer8 */
00897 # endif
00898    cmd_line_flags.src_form              = Fixed_Form;
00899    cmd_line_flags.disregard_all_mpp_cdirs       = FALSE;        /* -x mpp     */
00900    cmd_line_flags.disregard_all_directives      = FALSE;        /* -x all     */
00901    cmd_line_flags.disregard_all_dirs            = FALSE;        /* -x dir     */
00902    cmd_line_flags.disregard_all_mics            = FALSE;        /* -x mic     */
00903    cmd_line_flags.disregard_all_mips            = FALSE;        /* -x SGI     */
00904    cmd_line_flags.disregard_all_omps            = FALSE;        /* -x omp     */
00905    cmd_line_flags.disregard_conditional_omp     = FALSE;        /* -x cond_.. */
00906    /* eraxxon: OpenAD directive */
00907    cmd_line_flags.disregard_all_openads         = FALSE;        /* -x openad  */
00908    cmd_line_flags.msg_lvl_suppressed    = (msg_lvl_type) cft90_dash_m_option;
00909    cmd_line_flags.truncate_bits         = 0;                    /* -t  0      */
00910    cmd_line_flags.implicit_use_idx      = NULL_IDX;
00911    cmd_line_flags.debug_lvl             = (debug_lvl_type) 
00912                                            cft90_dash_G_debug_option;
00913 
00914    cmd_line_flags.mod_out_path          = FALSE;                /* -J         */
00915    cmd_line_flags.dwarf_debug           = TRUE;         /* -Gd        */
00916    cmd_line_flags.num_msgs_suppressed   = 0;                    /* num -M msgs*/
00917    cmd_line_flags.line_size_80          = (cft90_dash_N_option == 80);
00918    cmd_line_flags.line_size_132         = (cft90_dash_N_option == 132);
00919    cmd_line_flags.verify_option         = FALSE;                /* -V  FALSE  */
00920    cmd_line_flags.malleable             = FALSE;                /* -Xm FALSE  */
00921    cmd_line_flags.MPP_num_pes           = cft90_dash_X_option;  /* -X n$pes   */
00922    cmd_line_flags.integer_32            = FALSE;
00923    cmd_line_flags.co_array_fortran      = FALSE;
00924    cmd_line_flags.pp_macro_expansion    = FALSE;
00925 
00926    /* Set defaults for -e / -d option flags */
00927 
00928    on_off_flags.abort_if_any_errors     = (cft90_dash_e_a_option == 1);
00929 
00930    /* Hard code this as turned on by default for now because we want IEEE     */
00931    /* intrinsics to always be recognized.  Leave the option here in case      */
00932    /* customers scream too much about name space encroachment.                */
00933 
00934    on_off_flags.pad_char_literals       = FALSE;                /* -dc FALSE  */
00935    on_off_flags.ieee                    = TRUE;                 /* -ee TRUE   */
00936    on_off_flags.flowtrace_option        = FALSE;                /* -ef FALSE  */
00937    on_off_flags.assembly_listing_file   = FALSE;                /* -eg FALSE  */
00938 
00939 # if defined(_INTEGER_1_AND_2) && !defined(_ACCEPT_CMD_ed_h)
00940    on_off_flags.integer_1_and_2         = TRUE;
00941 # else
00942    on_off_flags.integer_1_and_2         = FALSE;
00943 # endif
00944 
00945    on_off_flags.indef_init              = (cft90_dash_e_i_option == 1);
00946    on_off_flags.exec_doloops_once       = FALSE;                /* -ej FALSE  */
00947    on_off_flags.module_to_mod           = (cft90_dash_e_m_option == 1);
00948    on_off_flags.issue_ansi_messages     = (cft90_dash_e_n_option == 1);
00949    on_off_flags.enable_double_precision = (cft90_dash_e_p_option == 1);
00950    on_off_flags.abort_on_100_errors     = TRUE;                 /* -eq TRUE   */
00951    on_off_flags.round_mult_operations   = (cft90_dash_e_r_option == 1);
00952    on_off_flags.alloc_autos_on_stack    = (cft90_dash_e_t_option == 1);
00953 
00954    /* This gets translated into reciprical divide /strong round flag */
00955    /* in process_cmd_line.   For now, turn them all off.             */
00956 
00957    on_off_flags.eu                      = (cft90_dash_e_u_option == 1);
00958    on_off_flags.reciprical_divide       = FALSE;
00959    on_off_flags.round_integer_divide    = FALSE;
00960    on_off_flags.recognize_minus_zero    = FALSE;
00961    on_off_flags.zero_init               = FALSE;
00962    on_off_flags.save_all_vars           = (cft90_dash_e_v_option == 1);
00963    on_off_flags.MPP_apprentice          = FALSE;                /* -dA        */
00964    on_off_flags.shared_to_private_coer  = FALSE;                /* -dC        */
00965    on_off_flags.all_debug               = FALSE;                /* -dD        */
00966    on_off_flags.top_test_shortloops     = FALSE;                /* -dL        */
00967    on_off_flags.remove_trailing_uscore  = FALSE;                /* -dN        */
00968    on_off_flags.allow_leading_uscore    = FALSE;                /* -dQ        */
00969    on_off_flags.output_pound_lines      = TRUE;                 /* -dP        */
00970    on_off_flags.preprocess_only         = FALSE;                /*            */
00971    on_off_flags.preprocess              = FALSE;
00972    on_off_flags.save_dot_i              = FALSE;                /* -ek        */
00973    on_off_flags.recursive               = FALSE;                /* -dR        */
00974    on_off_flags.atexpert                = FALSE;                /* -dX        */
00975    on_off_flags.upper_case_names        = FALSE;
00976    on_off_flags.d_lines                 = FALSE;
00977  
00978    /* Set defaults for -O option flags.                                       */
00979 
00980    /* If these options vary depending on platform, use cmd_line.h and the     */
00981    /* cft90_dash_O method to initialize.  That way all platform information   */
00982    /* for commandline initialization is in one place.                         */
00983 
00984    opt_flags.aggress                    = (cft90_dash_O_aggress_option == 1);
00985    opt_flags.bottom_load                = (cft90_dash_O_bl_option == 1);
00986    opt_flags.set_fastint_option         = FALSE;
00987    opt_flags.set_nofastint_option       = FALSE;
00988    opt_flags.set_allfastint_option      = FALSE;
00989    opt_flags.ieeeconform                = (cft90_dash_O_ieeeconform_option==1);
00990    opt_flags.inline_lvl                 = Inline_Lvl_0;
00991    opt_flags.extent_assert              = FALSE;
00992    opt_flags.short_circuit_lvl          = Short_Circuit_Present;
00993    opt_flags.jump                       = (cft90_dash_O_jump_option == 1);
00994    opt_flags.loopalign                  = (cft90_dash_O_loopalign_option == 1);
00995    opt_flags.modinline                  = FALSE;
00996    opt_flags.msgs                       = FALSE;
00997    opt_flags.neg_msgs                   = FALSE;
00998    opt_flags.nointerchange              = FALSE;
00999    opt_flags.opt_info                   = FALSE;
01000    opt_flags.over_index                 = (cft90_dash_O_overindex_option == 1);
01001    opt_flags.pattern                    = (cft90_dash_O_pattern_option == 1);
01002    opt_flags.pipeline_lvl               = 0;
01003    opt_flags.recurrence                 = (cft90_dash_O_recurrence_option == 1);
01004    opt_flags.taskinner                  = (cft90_dash_O_taskinner_option == 1);
01005    opt_flags.threshold                  = (cft90_dash_O_threshold_option == 1);
01006    opt_flags.vsearch                    = (cft90_dash_O_vsearch_option == 1);
01007    opt_flags.zeroinc                    = (cft90_dash_O_zeroinc_option == 1);
01008    opt_flags.support_lvl                = cft90_dash_O_support_option;
01009    opt_flags.scalar_lvl                 = cft90_dash_O_scalar_option;
01010    opt_flags.split_lvl                  = cft90_dash_O_split_option;
01011    opt_flags.vector_lvl                 = cft90_dash_O_vector_option;
01012    opt_flags.task_lvl                   = cft90_dash_O_task_option;
01013    opt_flags.unroll_lvl                 = cft90_dash_O_unroll_option;
01014    opt_flags.reshape_idx                = NULL_IDX;
01015    opt_flags.reshape                    = FALSE;
01016    opt_flags.reshape_all_arrays         = FALSE;
01017    opt_flags.matmul_inline              = FALSE;
01018    opt_flags.mv_matmul_inline           = FALSE;
01019  
01020    /* Set defaults for -x option flags.                                       */
01021 
01022    for (idx = 0; idx < (Tok_Dir_End-Tok_Dir_Start); idx++) {
01023       disregard_directive[idx]  = FALSE;
01024    }
01025 
01026    for (idx = 0; idx < (Tok_Mic_End-Tok_Mic_Start); idx++) {
01027       disregard_mics[idx]       = FALSE;
01028    }
01029 
01030    for (idx = 0; idx < (Tok_SGI_Dir_End-Tok_SGI_Dir_Start); idx++) {
01031       disregard_mips[idx]       = FALSE;
01032    }
01033 
01034    for (idx = 0; idx < (Tok_Open_Mp_Dir_End-Tok_Open_Mp_Dir_Start); idx++) {
01035       disregard_open_mp[idx]    = FALSE;
01036    }
01037    
01038    for (idx = 0; idx < (Tok_OpenAD_Dir_End-Tok_OpenAD_Dir_Start); idx++) {
01039       /* eraxxon: OpenAD directive */           
01040       disregard_openad[idx]     = FALSE;
01041    }
01042 
01043    /* set defaults for -u option flags */
01044    dump_flags.pvp_test                  = 0;
01045    dump_flags.blk_stk                   = FALSE;
01046    dump_flags.bd_tbl                    = FALSE;
01047    dump_flags.cmd_line_tbls             = FALSE;
01048    dump_flags.cn_tbl                    = FALSE;
01049    dump_flags.fp_tbl                    = FALSE;
01050    dump_flags.ftrace_info               = FALSE;
01051    dump_flags.gl_tbl                    = FALSE;
01052    dump_flags.intrin_tbl                = FALSE;
01053    dump_flags.ir1_tbl                   = FALSE;
01054    dump_flags.ir2_tbl                   = FALSE;
01055    dump_flags.ir3_tbl                   = FALSE;
01056    dump_flags.ir4_tbl                   = FALSE;
01057    dump_flags.mem_report                = FALSE;
01058    dump_flags.mod_version               = FALSE;
01059    dump_flags.mtrace_info               = FALSE;
01060    dump_flags.name_tbls                 = FALSE;
01061    dump_flags.pdgcs                     = FALSE;
01062    dump_flags.pdt_dump                  = FALSE;
01063    dump_flags.sb_tbl                    = FALSE;
01064    dump_flags.scp_tbl                   = FALSE;
01065    dump_flags.src_dmp                   = FALSE;
01066    dump_flags.std_err                   = FALSE;
01067    dump_flags.stmt_dmp                  = FALSE;
01068    dump_flags.sytb                      = FALSE;
01069    dump_flags.typ_tbl                   = FALSE;
01070    dump_flags.defines                   = FALSE;
01071    dump_flags.constant_bits             = FALSE;
01072    dump_flags.abort_on_ansi             = FALSE;
01073    dump_flags.no_dimension_padding      = FALSE;
01074    dump_flags.no_module_output          = FALSE;
01075    dump_flags.f_minus_minus             = FALSE;
01076    dump_flags.fmm1                      = FALSE;
01077    dump_flags.fmm2                      = FALSE;
01078    dump_flags.show_cmd_line             = FALSE;
01079    dump_flags.mp                        = FALSE;
01080    dump_flags.open_mp                   = FALSE;
01081    dump_flags.dsm                       = FALSE;
01082    dump_flags.cray_compatible           = FALSE;
01083    dump_flags.pack_half_word            = FALSE;
01084 
01085    /* Set defaults for -Y CCG option flags.                                   */
01086 
01087    ccg_dump_flags                       = 0;                     /* All FALSE */
01088 
01089 
01090    /* Clear the message tables.   */
01091 
01092    for (idx = 0; idx < MAX_MSG_SIZE; idx++) {
01093       message_suppress_tbl[idx] = 0L;
01094       message_error_tbl[idx]    = 0L;
01095       message_warning_tbl[idx]  = 0L;
01096    }
01097 
01098    u_option = getenv("FE_DASH_U_OPTION");
01099 
01100    if (u_option != NULL) {
01101       process_u_option(u_option);
01102    }
01103 
01104    TRACE (Func_Exit, "init_cmd_line", NULL);
01105 
01106    return;
01107 
01108 }  /* init_cmd_line */
01109 
01110 
01111 /******************************************************************************\
01112 |*                                                                            *|
01113 |* Description:                                                               *|
01114 |*      Process_c_option handles command line CIF options passed via argv     *|
01115 |*      (c switch).                                                           *|
01116 |*                                                                            *|
01117 |* Input parameters:                                                          *|
01118 |*      optargs                 -C option arguments                           *|
01119 |*      argv                    argument list                                 *|
01120 |*                                                                            *|
01121 |* Output parameters:                                                         *|
01122 |*      NONE                                                                  *|
01123 |*                                                                            *|
01124 |* Returns:                                                                   *|
01125 |*      NOTHING                                                               *|
01126 |*                                                                            *|
01127 |* Algorithm notes:                                                           *|
01128 |*   CIF file output is requested via the -C option.                          *|
01129 |*                                                                            *|
01130 |*   Qualifier    Constant         Meaning                                    *|
01131 |*   ---------    --------         --------                                   *|
01132 |*      a         ALL_RECS         All available CIF record types             *|
01133 |*      c         COMPILER_RECS    Only CIF records that contain compiler     *|
01134 |*                                   information, plus f-level records        *|
01135 |*      f         BASIC_RECS       Basic CIF records (file info, unit markers,*|
01136 |*                                   include files, etc.)                     *|
01137 |*      i         INFO_RECS        Information records for variables, labels, *|
01138 |*                                   constants, etc., plus f-level records    *|
01139 |*      m         MESSAGE_RECS     Message records plus f-level records       *|
01140 |*      o         MISC_RECS        Miscellaneous other records (stmt types,   *|
01141 |*                                   call sites, etc.) plus f- and i-level    *|
01142 |*                                   records                                  *|
01143 |*      s         OUTPUT_TO_STDOUT Redirect CIF output to stdout instead of   *|
01144 |*                                   file.T                                   *|
01145 |*      x         XREF_RECS        Cross-reference information plus f- and    *|
01146 |*                                   i-level records                          *|
01147 |*                                                                            *|
01148 \******************************************************************************/
01149  
01150 static void process_C_option (char *optargs,
01151                               char *argv[])
01152 
01153 {
01154    int          ch;
01155    char         err_str[2];
01156    long         orig_cmd_len;
01157 
01158    extern int   optind;                                 /* defined in getopt  */
01159 
01160 
01161    TRACE (Func_Entry, "process_C_option", NULL);
01162 
01163    while (ch = *optargs++) {
01164 
01165       switch (ch) {
01166          case 'a':
01167             cif_flags = cif_flags | ALL_RECS      |
01168                                     XREF_RECS     | MISC_RECS |
01169                                     MESSAGE_RECS  | INFO_RECS |
01170                                     BASIC_RECS    | COMPILER_RECS;
01171             cif_C_opts = cif_C_opts | ALL_RECS;
01172             break;
01173 
01174          case 'c':
01175             cif_flags  = cif_flags | COMPILER_RECS | BASIC_RECS;
01176             cif_C_opts = cif_C_opts | COMPILER_RECS;
01177             break;
01178 
01179          case 'f':
01180             cif_flags  = cif_flags | BASIC_RECS;
01181             cif_C_opts = cif_C_opts | BASIC_RECS;
01182             break;
01183 
01184          case 'i':
01185             cif_flags  = cif_flags | INFO_RECS | BASIC_RECS;
01186             cif_C_opts = cif_C_opts | INFO_RECS;
01187             break;
01188 
01189          case 'm':
01190             cif_flags  = cif_flags | MESSAGE_RECS | BASIC_RECS;
01191             cif_C_opts = cif_C_opts | MESSAGE_RECS;
01192             break;
01193 
01194          case 'o':
01195             cif_flags  = cif_flags | MISC_RECS | INFO_RECS | BASIC_RECS;
01196             cif_C_opts = cif_C_opts | MISC_RECS;
01197             break;
01198 
01199          case 's':
01200             cif_flags  = cif_flags | OUTPUT_TO_STDOUT;
01201             cif_C_opts = cif_C_opts | OUTPUT_TO_STDOUT;
01202             break;      
01203 
01204          case 'x':
01205             cif_flags  = cif_flags | XREF_RECS | INFO_RECS | BASIC_RECS;
01206             cif_C_opts = cif_C_opts | XREF_RECS;
01207             break;
01208 
01209          case 'Y':
01210 
01211             /* -CY is NOT a user-specifiable option.  It is used by the MPP   */
01212             /* driver to pass the command line as entered by the user and     */
01213             /* added to by the driver for the Original Command Line CIF       */
01214             /* record which cflist requires.  The PVP driver adds this        */
01215             /* record when it consolidates the .T files.                      */
01216 
01217             orig_cmd_len = (long) strlen(argv[optind]);
01218             ++orig_cmd_len;
01219             MEM_ALLOC(orig_cmd_line, char, orig_cmd_len);
01220             strcpy(orig_cmd_line, argv[optind]);
01221             ++optind;
01222             break;
01223 
01224          case 'Z':
01225 
01226             /* -CZ is NOT a user-specifiable option.  It is the option the    */
01227             /* command line processor uses to pass the CIF name to us.  The   */
01228             /* command line processor issues the error if it's specified by a */
01229             /* user.                                                          */
01230 
01231             strcpy(cif_name, optargs);
01232             
01233             /* Since the string following the CZ is a file name, skip past    */
01234             /* the entire string to complete the while loop.  No additional   */
01235             /* -C options are allowed after a -CZ.                            */
01236 
01237             optargs = optargs + strlen(optargs);
01238             break;
01239 
01240          default:
01241             err_str[0] = ch;
01242             err_str[1] = EOS;
01243 
01244             /* The CIF option has an invalid argument */
01245 
01246             ntr_msg_queue(0, 917, Log_Error, 0, err_str, 0, STR_ARG);
01247             break;
01248 
01249          }  /* switch */
01250 
01251    }  /* while */
01252 
01253    if (cif_flags != 0) {
01254       cif_C_opts = cif_C_opts | CMD_PROVIDED_CIF;
01255    }
01256 
01257    /* If the only suboption specified was the "s" (output to stdout)          */
01258    /* suboption, don't attempt to produce any CIF records.                    */
01259 
01260    if (cif_flags == OUTPUT_TO_STDOUT) {
01261       cif_flags = 0;
01262       cif_C_opts = 0;
01263    }
01264 
01265    TRACE (Func_Exit, "process_C_option", NULL);
01266 
01267    return;
01268  
01269 }  /* process_C_option */
01270 
01271 
01272 /******************************************************************************\
01273 |*                                                                            *|
01274 |* Description:                                                               *|
01275 |*      Process_d_option handles command line on/off options passed via argv  *|
01276 |*      (d switch).                                                           *|
01277 |*                                                                            *|
01278 |* Input parameters:                                                          *|
01279 |*      optargs                 -d option arguments                           *|
01280 |*                                                                            *|
01281 |* Output parameters:                                                         *|
01282 |*      NONE                                                                  *|
01283 |*                                                                            *|
01284 |* Returns:                                                                   *|
01285 |*      NOTHING                                                               *|
01286 |*                                                                            *|
01287 \******************************************************************************/
01288  
01289 static void process_d_option (char *optargs)
01290 
01291 {
01292    int  ch;
01293    char err_str[2];
01294  
01295 
01296    TRACE (Func_Entry, "process_d_option", NULL);
01297 
01298    while (ch = *optargs++) {
01299       switch (ch) {
01300       case 'a':
01301          on_off_flags.abort_if_any_errors = FALSE;
01302          break;
01303 
01304 # if defined(GENERATE_WHIRL)
01305       case 'c':
01306          on_off_flags.pad_char_literals = FALSE;
01307          break;
01308 # endif
01309 
01310 # ifdef _D_LINES_SUPPORTED
01311       case 'd':
01312          on_off_flags.d_lines = FALSE;
01313          break;
01314 # endif
01315 
01316 # if 0
01317 
01318       /* Take this out for now because we want IEEE intrinsics to always      */
01319       /* be recognized.  Leave the option here in case customers scream too   */
01320       /* much about name space encroachment.                                  */
01321 
01322       case 'e':
01323          on_off_flags.ieee = FALSE;
01324          break;
01325 
01326 # endif
01327 
01328       case 'f':
01329 
01330 #        if defined(_ACCEPT_FLOW)
01331             on_off_flags.flowtrace_option = FALSE;
01332 #        else
01333             ntr_msg_queue(0, 744, Log_Warning, 0, "f", 'd', ARG_STR_ARG);
01334 #        endif
01335          break;
01336 
01337       case 'g':
01338 
01339 #        if defined(_ACCEPT_CMD_ed_g)
01340             on_off_flags.assembly_listing_file = FALSE;
01341 #        else
01342             ntr_msg_queue(0, 744, Log_Warning, 0, "g", 'd', ARG_STR_ARG);
01343 #        endif
01344          break;
01345 
01346       case 'h':
01347 
01348 #        if defined(_ACCEPT_CMD_ed_h)
01349             on_off_flags.integer_1_and_2 = FALSE;
01350 #        else
01351             ntr_msg_queue(0, 744, Log_Warning, 0, "h", 'd', ARG_STR_ARG);
01352 #        endif
01353          break;
01354 
01355       case 'i':
01356 
01357 #        if defined(_ACCEPT_CMD_ed_i)
01358             ntr_msg_queue(0, 744, Log_Warning, 0, "i", 'd', ARG_STR_ARG);
01359 #        else
01360             on_off_flags.indef_init = FALSE;
01361 #        endif
01362          break;
01363 
01364       case 'j':
01365 
01366 #        if defined(_ACCEPT_CMD_ed_j)
01367             on_off_flags.exec_doloops_once = FALSE;
01368 #        else
01369             ntr_msg_queue(0, 744, Log_Warning, 0, "j", 'd', ARG_STR_ARG);
01370 #        endif
01371          break;
01372 
01373       case 'k': on_off_flags.output_pound_lines = FALSE;
01374          break;
01375 
01376       case 'm':
01377 
01378          /* If turning off -em, need an alternative to write out the module. */
01379 
01380 #        if defined(_MODULE_TO_DOT_o) || defined(_MODULE_TO_DOT_M)
01381             on_off_flags.module_to_mod = FALSE;
01382 #        else
01383             PRINTMSG (0, 744, Log_Warning, 0, 'd', "m");
01384 #        endif
01385          break;
01386 
01387       case 'n':
01388          on_off_flags.issue_ansi_messages = FALSE;
01389          break;
01390 
01391       case 'p':
01392          on_off_flags.enable_double_precision = FALSE;
01393          break;
01394 
01395       case 'q':
01396          on_off_flags.abort_on_100_errors = FALSE;
01397          break;
01398 
01399       case 'r':
01400 
01401 #        if defined(_ACCEPT_CMD_ed_r)
01402 
01403             if (set_trunc_option) {
01404                set_round_option = FALSE;
01405 
01406                /* Rounding(-dr) /truncation (-t) conflict detected. */
01407 
01408                ntr_msg_queue(0, 75, Log_Warning, 0, "-dr", 0, STR_ARG);
01409             }
01410 
01411             cmd_line_flags.truncate_bits        = 0;
01412             on_off_flags.round_mult_operations  = FALSE;
01413             set_round_option                    = TRUE;
01414 #        else
01415             ntr_msg_queue(0, 744, Log_Warning, 0, "r", 'd', ARG_STR_ARG);
01416 #        endif
01417          break;
01418 
01419       case 't':
01420          on_off_flags.alloc_autos_on_stack = FALSE;
01421          break;
01422 
01423       case 'u':
01424          set_eu_option   = TRUE;
01425          on_off_flags.eu = FALSE;
01426          break;
01427 
01428       case 'v':
01429          on_off_flags.save_all_vars = FALSE;
01430          break;
01431 
01432       case 'z':
01433 
01434 #        if defined(_ACCEPT_CMD_ed_z)
01435             on_off_flags.recognize_minus_zero = FALSE;
01436 #        else
01437             ntr_msg_queue(0, 744, Log_Warning, 0, "z", 'd', ARG_STR_ARG);
01438 #        endif
01439          break;
01440 
01441       case '0':
01442 #        if defined(_ACCEPT_CMD_ed_0)
01443             on_off_flags.zero_init = FALSE;
01444 #        else
01445             ntr_msg_queue(0, 744, Log_Warning, 0, "0", 'd', ARG_STR_ARG);
01446 #        endif
01447          break;
01448 
01449       case 'A':
01450 
01451 #        if defined(_ACCEPT_CMD_ed_A)
01452             on_off_flags.MPP_apprentice = FALSE;
01453 #        else
01454             ntr_msg_queue(0, 744, Log_Warning, 0, "A", 'd', ARG_STR_ARG);
01455 #        endif
01456          break;
01457     
01458       case 'B':
01459          cmd_line_flags.binary_output = FALSE;
01460          break;
01461 
01462       case 'C':
01463 
01464 #        if defined(_ACCEPT_CMD_ed_C)
01465             on_off_flags.shared_to_private_coer = FALSE;
01466 #        else
01467             ntr_msg_queue(0, 744, Log_Warning, 0, "C", 'd', ARG_STR_ARG);
01468 #        endif
01469          break;
01470 
01471       case 'D':
01472 #        if defined(_ACCEPT_CMD_ed_i)
01473             on_off_flags.all_debug = FALSE;
01474 #        else
01475             ntr_msg_queue(0, 744, Log_Warning, 0, "D", 'd', ARG_STR_ARG);
01476 #        endif
01477          break;
01478 
01479       case 'I':
01480          on_off_flags.implicit_none = FALSE;
01481          break;
01482 
01483       case 'L':
01484          on_off_flags.top_test_shortloops = FALSE;
01485          break;
01486 
01487       case 'N':
01488          on_off_flags.remove_trailing_uscore = FALSE;
01489          break;
01490 
01491       case 'Q':   /* Q is undocumented */
01492          on_off_flags.allow_leading_uscore = FALSE;
01493          break;
01494     
01495       case 'R':
01496          on_off_flags.recursive = FALSE;
01497          break;
01498 
01499       case 'S':
01500          cmd_line_flags.assembly_output = FALSE;
01501          break;
01502 
01503       case 'T':
01504 # ifdef _FRONTEND_CONDITIONAL_COMP
01505          no_preprocessing = TRUE;
01506          on_off_flags.preprocess = FALSE;
01507          on_off_flags.preprocess_only = FALSE;
01508          on_off_flags.save_dot_i = FALSE;
01509 # endif
01510          break;
01511 
01512       case 'U':   /* U is undocumented */
01513 #        if defined(_ACCEPT_CMD_ed_U)
01514             on_off_flags.upper_case_names = FALSE;
01515 #        else
01516             ntr_msg_queue(0, 744, Log_Warning, 0, "U", 'd', ARG_STR_ARG);
01517 #        endif
01518          break;
01519 
01520       case 'X':
01521 
01522 #        if defined(_ACCEPT_CMD_ed_X)
01523             on_off_flags.atexpert = FALSE;
01524 #        else
01525             ntr_msg_queue(0, 744, Log_Warning, 0, "X", 'd', ARG_STR_ARG);
01526 #        endif
01527          break;
01528 
01529       default:
01530          err_str[0] = ch;
01531          err_str[1] = EOS;
01532 
01533          /* option has an invalid argument */
01534 
01535          ntr_msg_queue(0, 78, Log_Error, 0, err_str, 'd', ARG_STR_ARG);
01536          break;
01537 
01538       }  /* switch */
01539    }  /* while */
01540 
01541    TRACE (Func_Exit, "process_d_option", NULL);
01542 
01543    return;
01544  
01545 }  /* process_d_option */
01546 
01547 /******************************************************************************\
01548 |*                                                                            *|
01549 |* Description:                                                               *|
01550 |*      Process_e_option handles command line on/off options passed via argv  *|
01551 |*      (e switch).                                                           *|
01552 |*                                                                            *|
01553 |* Input parameters:                                                          *|
01554 |*      optargs                 -e option arguments                           *|
01555 |*                                                                            *|
01556 |* Output parameters:                                                         *|
01557 |*      NONE                                                                  *|
01558 |*                                                                            *|
01559 |* Returns:                                                                   *|
01560 |*      NOTHING                                                               *|
01561 |*                                                                            *|
01562 \******************************************************************************/
01563 
01564 static void process_e_option (char *optargs)
01565 
01566 {
01567    int           ch;
01568    char          err_str[2];
01569 
01570 
01571    TRACE (Func_Entry, "process_e_option", NULL);
01572 
01573    while (ch = *optargs++) {
01574       switch (ch) {
01575       case 'a':
01576          on_off_flags.abort_if_any_errors = TRUE; 
01577          break;
01578 
01579 # if defined(GENERATE_WHIRL)
01580       case 'c':
01581          on_off_flags.pad_char_literals = TRUE;
01582          break;
01583 # endif
01584 
01585 # ifdef _D_LINES_SUPPORTED
01586       case 'd':
01587          on_off_flags.d_lines = TRUE;
01588          break;
01589 # endif
01590 
01591 
01592 # if 0
01593       /* Take this out for now because we want IEEE intrinsics to always      */
01594       /* be recognized.  Leave the option here in case customers scream too   */
01595       /* much about name space encroachment.                                  */
01596 
01597       case 'e':
01598          on_off_flags.ieee = TRUE;
01599          break;
01600 
01601 # endif
01602 
01603       case 'f':
01604 
01605 #        if defined(_ACCEPT_FLOW)
01606             on_off_flags.flowtrace_option = TRUE;
01607 #        else
01608             ntr_msg_queue(0, 744, Log_Warning, 0, "f", 'e', ARG_STR_ARG);
01609 #        endif
01610          break;
01611 
01612       case 'g':
01613 
01614 #        if defined(_ACCEPT_CMD_ed_g)
01615             on_off_flags.assembly_listing_file = TRUE;
01616 
01617             /* issue warning if cal file output is being overridden */  
01618 
01619             if (cmd_line_flags.assembly_output) {        
01620                ntr_msg_queue(0, 388, Log_Warning, 0, (char *) NULL, 0, NO_ARG);
01621                cmd_line_flags.assembly_output   = FALSE;  
01622                cmd_line_flags.binary_output     = TRUE;  
01623             }
01624 #        else /* doc'd as -rg */
01625             ntr_msg_queue(0, 744, Log_Warning, 0, "g", 'r', ARG_STR_ARG);
01626 #        endif
01627          break;
01628 
01629 
01630       case 'h':
01631 
01632 #        if defined(_ACCEPT_CMD_ed_h)
01633             on_off_flags.integer_1_and_2 = TRUE;
01634 #        else
01635             ntr_msg_queue(0, 744, Log_Warning, 0, "h", 'e', ARG_STR_ARG);
01636 #        endif
01637          break;
01638 
01639 
01640       case 'i':
01641 
01642 #        if defined(_ACCEPT_CMD_ed_i)
01643             on_off_flags.indef_init = TRUE;
01644 
01645             if (on_off_flags.zero_init) {  /* Conflict - issue warning */
01646                on_off_flags.zero_init = FALSE;
01647                ntr_msg_queue(0, 1313, Log_Warning, 0, "ei\ne0", 0,MULT_STR_ARG);
01648             }
01649 #        else
01650             ntr_msg_queue(0, 744, Log_Warning, 0, "i", 'e', ARG_STR_ARG);
01651 #        endif
01652          break;
01653 
01654       case 'j':
01655 
01656 #        if defined(_ACCEPT_CMD_ed_j)
01657             on_off_flags.exec_doloops_once = TRUE;
01658 #        else
01659             ntr_msg_queue(0, 744, Log_Warning, 0, "j", 'e', ARG_STR_ARG);
01660 #        endif
01661          break;
01662 
01663       case 'k':
01664          on_off_flags.save_dot_i = TRUE;
01665          break;
01666 
01667       case 'm':
01668          on_off_flags.module_to_mod = TRUE;
01669          break;
01670 
01671       case 'n':
01672          on_off_flags.issue_ansi_messages = TRUE;
01673          break;
01674 
01675       case 'p':
01676          on_off_flags.enable_double_precision = TRUE;
01677          break;
01678 
01679       case 'q':
01680          on_off_flags.abort_on_100_errors = TRUE;
01681          break;
01682 
01683       case 'r':
01684 
01685 #        if defined(_ACCEPT_CMD_ed_r)
01686 
01687             if (set_trunc_option) {
01688 
01689                /* Rounding(-er) /truncation (-t) conflict detected. */
01690 
01691                ntr_msg_queue(0, 75, Log_Warning, 0, "-er", 0, STR_ARG);
01692                set_trunc_option                 = FALSE;
01693             }
01694 
01695             on_off_flags.round_mult_operations  = TRUE;
01696             cmd_line_flags.truncate_bits        = 0;
01697             set_round_option                    = TRUE;
01698 #        else
01699             ntr_msg_queue(0, 744, Log_Warning, 0, "r", 'e', ARG_STR_ARG);
01700 #        endif
01701          break;
01702 
01703       case 't':
01704          on_off_flags.alloc_autos_on_stack = TRUE;
01705          break;
01706 
01707       case 'u':
01708          on_off_flags.eu        = TRUE;
01709          set_eu_option          = TRUE;
01710          break;
01711     
01712       case 'v':
01713          on_off_flags.save_all_vars = TRUE;
01714          break;
01715 
01716       case 'z':
01717 
01718 #        if defined(_ACCEPT_CMD_ed_z)
01719             on_off_flags.recognize_minus_zero = TRUE;
01720 #        else
01721             ntr_msg_queue(0, 744, Log_Warning, 0, "z", 'e', ARG_STR_ARG);
01722 #        endif
01723          break;
01724 
01725       case '0':
01726 #        if defined(_ACCEPT_CMD_ed_0)
01727             on_off_flags.zero_init = TRUE;
01728 
01729             if (on_off_flags.indef_init) {  /* Conflict - issue warning */
01730                on_off_flags.indef_init = FALSE;
01731                ntr_msg_queue(0, 1313, Log_Warning, 0, "e0\nei", 0,MULT_STR_ARG);
01732             }
01733 
01734 #        else
01735             ntr_msg_queue(0, 744, Log_Warning, 0, "0", 'e', ARG_STR_ARG);
01736 #        endif
01737          break;
01738 
01739       case 'A':
01740 
01741 #        if defined(_ACCEPT_CMD_ed_A)
01742             on_off_flags.MPP_apprentice = TRUE;
01743 #        else
01744             ntr_msg_queue(0, 744, Log_Warning, 0, "A", 'e', ARG_STR_ARG);
01745 #        endif
01746          break;
01747     
01748       case 'B':
01749 
01750          /* issue warning if cal output is being overridden */ 
01751 
01752          if (cmd_line_flags.assembly_output) { 
01753             ntr_msg_queue(0, 715, Log_Warning, 0, (char *) NULL, 0, NO_ARG);
01754             cmd_line_flags.assembly_output = FALSE; 
01755          }
01756 
01757          cmd_line_flags.binary_output = TRUE;
01758          break;
01759 
01760       case 'C':
01761 
01762 #        if defined(_ACCEPT_CMD_ed_C)
01763             on_off_flags.shared_to_private_coer = TRUE;
01764 #        else
01765             ntr_msg_queue(0, 744, Log_Warning, 0, "C", 'e', ARG_STR_ARG);
01766 #        endif
01767          break;
01768 
01769       case 'D':
01770 #        if defined(_ACCEPT_CMD_ed_D)
01771             on_off_flags.all_debug = TRUE;
01772 #        else
01773             ntr_msg_queue(0, 744, Log_Warning, 0, "D", 'e', ARG_STR_ARG);
01774 #        endif
01775          break;
01776 
01777       case 'I':
01778          on_off_flags.implicit_none = TRUE;
01779          break;
01780 
01781       case 'L':
01782          on_off_flags.top_test_shortloops = TRUE;
01783          break;
01784 
01785       case 'N':
01786          on_off_flags.remove_trailing_uscore = TRUE;
01787          break;
01788 
01789       case 'Q':
01790          on_off_flags.allow_leading_uscore = TRUE;
01791          break;
01792 
01793       case 'R':
01794          on_off_flags.recursive = TRUE;
01795          break;
01796 
01797       case 'S':
01798 
01799          /* issue warning if binary output is being overridden */  
01800 
01801          if (cmd_line_flags.binary_output) {     
01802 /*          PRINTMSG (0, 74, Log_Warning, 0);       LRR: driver now does this */
01803             cmd_line_flags.binary_output = FALSE;  
01804          }
01805 
01806          /* issue warning if cal file listing is being overridden */  
01807 
01808          if (on_off_flags.assembly_listing_file) {       
01809             ntr_msg_queue(0, 911, Log_Warning, 0, (char *) NULL, 0, NO_ARG);
01810             on_off_flags.assembly_listing_file = FALSE;  
01811          }
01812      
01813          cmd_line_flags.assembly_output = TRUE;
01814          break;
01815 
01816       case 'T':
01817 # ifdef _FRONTEND_CONDITIONAL_COMP
01818          no_preprocessing = FALSE;
01819          on_off_flags.preprocess = TRUE;
01820 # endif
01821          break;
01822 
01823       case 'U':
01824 #        if defined(_ACCEPT_CMD_ed_U)
01825             on_off_flags.upper_case_names = TRUE;
01826 #        else
01827             ntr_msg_queue(0, 744, Log_Warning, 0, "U", 'e', ARG_STR_ARG);
01828 #        endif
01829          break;
01830 
01831       case 'X':
01832         
01833 #        if defined(_ACCEPT_CMD_ed_X)
01834             on_off_flags.atexpert = TRUE;
01835 #        else
01836             ntr_msg_queue(0, 744, Log_Warning, 0, "X", 'e', ARG_STR_ARG);
01837 #        endif
01838          break;
01839 
01840       case 'Z':
01841 # ifdef _FRONTEND_CONDITIONAL_COMP
01842          no_preprocessing = FALSE;
01843          on_off_flags.preprocess_only = TRUE;
01844          on_off_flags.preprocess = TRUE;
01845 # endif
01846          break;
01847     
01848       default:
01849          err_str[0] = ch;
01850          err_str[1] = EOS;
01851 
01852          /* option has an invalid argument */
01853 
01854          ntr_msg_queue(0, 78, Log_Error, 0, err_str, 'e', ARG_STR_ARG);
01855          break;
01856       }  /* switch */
01857    }  /* while */
01858  
01859    TRACE (Func_Exit, "process_e_option", NULL);
01860 
01861    return;
01862 
01863 }  /* process_e_option */
01864 
01865 /******************************************************************************\
01866 |*                                                                            *|
01867 |* Description:                                                               *|
01868 |*      Process_O_option handles command line optimization options passed via *|
01869 |*      argv (O switch).                                                      *|
01870 |*                                                                            *|
01871 |* Input parameters:                                                          *|
01872 |*      optargs                 -O option arguments                           *|
01873 |*                                                                            *|
01874 |* Output parameters:                                                         *|
01875 |*      NONE                                                                  *|
01876 |*                                                                            *|
01877 |* Returns:                                                                   *|
01878 |*      NOTHING                                                               *|
01879 |*                                                                            *|
01880 \******************************************************************************/
01881 
01882 static void process_O_option (char      *optargs,
01883                               int        argc)
01884 
01885 {
01886                 char            *cp;
01887                 boolean          err;
01888                 boolean          first;
01889    extern       int              optind;        /* defined in getopt  */
01890 
01891 
01892    TRACE (Func_Entry, "process_O_option", NULL);
01893 
01894    if (*optargs == '-') {
01895 
01896       /* Just a -O, issue warning, backup getopt and continue.  If      */
01897       /* optarg is a "-", the next item following -O is another option. */
01898 
01899       ntr_msg_queue(0, 1221, Log_Warning, 0, (char *) NULL, 0, NO_ARG);
01900       --optind;
01901       return;
01902    }
01903 
01904    first        = TRUE;
01905 
01906    while (*optargs != EOS) {
01907 
01908       for (cp = optargs;
01909           *optargs != BLANK  &&  *optargs != COMMA  &&  *optargs != EOS;
01910           ++optargs);
01911 
01912       if (*optargs != EOS) {
01913          *optargs = EOS;
01914          *optargs++;
01915       }
01916 
01917       err = FALSE;
01918 
01919       switch (*cp) {
01920 
01921          case '0':
01922             if (EQUAL_STRS(cp, "0")) {
01923                opt_flags.support_lvl  = 0;
01924                set_support_lvl_option = TRUE;
01925 
01926                if (! set_scalar_option) {
01927                   opt_flags.scalar_lvl = Scalar_Lvl_0;
01928                }
01929 
01930 #              if defined(_ACCEPT_VECTOR)
01931 
01932                if (! set_vector_option) {
01933                   opt_flags.vector_lvl = Vector_Lvl_0;
01934                }
01935 
01936 #              endif
01937 
01938 #              if defined(_ACCEPT_STREAM)
01939 
01940                if (! set_stream_option) {
01941                   opt_flags.stream_lvl = Stream_Lvl_0;
01942                }
01943 
01944 #              endif
01945 
01946 
01947 #              if defined(_ACCEPT_TASK)
01948 
01949                if (! set_task_option) {
01950                   opt_flags.task_lvl = Task_Lvl_0;
01951                }
01952 
01953 #              endif
01954 
01955             }
01956             else {
01957                err = TRUE;
01958             }
01959 
01960             break;
01961 
01962 
01963          case '1':
01964             if (EQUAL_STRS(cp, "1")) {
01965                opt_flags.support_lvl  = 1;
01966                set_support_lvl_option = TRUE;
01967 
01968                if (! set_scalar_option) {
01969                   opt_flags.scalar_lvl = Scalar_Lvl_1;
01970                }
01971 
01972 #              if defined(_ACCEPT_VECTOR)
01973 
01974                if (! set_vector_option) {
01975                   opt_flags.vector_lvl = Vector_Lvl_1;
01976                }
01977 
01978 #              endif
01979 
01980 #              if defined(_ACCEPT_STREAM)
01981 
01982                if (! set_stream_option) {
01983 
01984 # if defined(_TARGET_SV2)
01985                   opt_flags.stream_lvl = Stream_Lvl_1;
01986 # else
01987                   opt_flags.stream_lvl = Stream_Lvl_0;
01988 # endif
01989                }
01990 
01991 #              endif
01992 
01993 #              if defined(_ACCEPT_TASK)
01994 
01995                if (! set_task_option) {
01996                   opt_flags.task_lvl = Task_Lvl_1;
01997                }
01998 
01999 #              endif
02000 
02001             }
02002             else {
02003                err = TRUE;
02004             }
02005 
02006             break;
02007 
02008 
02009          case '2':
02010             if (EQUAL_STRS(cp, "2")) {
02011                opt_flags.support_lvl  = 2;
02012                set_support_lvl_option = TRUE;
02013 
02014                if (! set_scalar_option) {
02015                   opt_flags.scalar_lvl = Scalar_Lvl_2;
02016                }
02017 
02018 #              if defined(_ACCEPT_STREAM)
02019 
02020                if (! set_stream_option) {
02021 
02022 # if defined(_TARGET_SV2)
02023                   opt_flags.stream_lvl = Stream_Lvl_2;
02024 # else
02025                   opt_flags.stream_lvl = Stream_Lvl_0;
02026 # endif
02027                }
02028 
02029 #              endif
02030 
02031 #              if defined(_ACCEPT_VECTOR)
02032 
02033                if (! set_vector_option) {
02034                   opt_flags.vector_lvl = Vector_Lvl_2;
02035                }
02036 
02037 #              endif
02038 
02039 #              if defined(_ACCEPT_TASK)
02040 
02041                if (! set_task_option) {
02042                   opt_flags.task_lvl = Task_Lvl_1;
02043                }
02044 
02045 #              endif
02046 
02047             }
02048             else {
02049                err = TRUE;
02050             }
02051 
02052             break;
02053 
02054 
02055          case '3':
02056             if (EQUAL_STRS(cp, "3")) {
02057                opt_flags.support_lvl  = 3;
02058                set_support_lvl_option = TRUE;
02059            
02060                if (! set_scalar_option) {
02061                   opt_flags.scalar_lvl = Scalar_Lvl_2;
02062                }
02063 
02064 #              if defined(_ACCEPT_VECTOR)
02065 
02066                if (! set_vector_option) {
02067                   opt_flags.vector_lvl = Vector_Lvl_3;
02068                }
02069 
02070 #              endif
02071 
02072 #              if defined(_ACCEPT_STREAM)
02073 
02074                if (! set_stream_option) {
02075 
02076 # if defined(_TARGET_SV2)
02077                   opt_flags.stream_lvl = Stream_Lvl_3;
02078 # else
02079                   opt_flags.stream_lvl = Stream_Lvl_0;
02080 # endif
02081                }
02082 
02083 #              endif
02084 
02085 
02086 #              if defined(_ACCEPT_TASK)
02087 
02088                if (! set_task_option) {
02089                   opt_flags.task_lvl = Task_Lvl_2;
02090                }
02091 
02092 #              endif
02093 
02094             }
02095             else {
02096                err = TRUE;
02097             }
02098 
02099             break;
02100 
02101 
02102          case 'a':
02103             if (EQUAL_STRS(cp, "aggress")) {
02104                opt_flags.aggress = TRUE;
02105                set_aggress_option = TRUE;
02106             }
02107             else if (EQUAL_STRS(cp, "allfastint")) {
02108 
02109 # if defined(_ACCEPT_CMD_O_FASTINT)
02110                opt_flags.set_allfastint_option = TRUE;
02111 
02112                if (set_i_option) {
02113                   ntr_msg_queue(0, 1192, Log_Warning, 0,
02114                                 "-i\n-O allfastint\n-i",
02115                                 0, MULT_STR_ARG);
02116                }
02117 # else
02118                ntr_msg_queue(0, 744, Log_Warning, 0,
02119                              "allfastint", 'O', ARG_STR_ARG);
02120 # endif
02121             }
02122             else {
02123                err = TRUE;
02124             }
02125 
02126             break;
02127 
02128 
02129          case 'b':
02130             if (! EQUAL_STRS(cp, "bl")) {
02131                err = TRUE;
02132             }
02133             else {
02134 
02135 #              if defined(_ACCEPT_BL)
02136 
02137                opt_flags.bottom_load  = TRUE;
02138                set_bottom_load_option = TRUE;
02139 
02140 #              else
02141 
02142                ntr_msg_queue(0, 744, Log_Warning, 0, "bl", 'O', ARG_STR_ARG);
02143 
02144 #              endif
02145 
02146             }
02147 
02148             break;
02149     
02150 
02151          case 'f':
02152 
02153             if (EQUAL_STRS(cp, "fastint")) {
02154 
02155 # if defined(_ACCEPT_CMD_O_FASTINT)
02156                opt_flags.set_fastint_option = TRUE;
02157                if (set_i_option) {
02158                   ntr_msg_queue(0, 1192, Log_Warning, 0,
02159                                 "-i\n-O fastint\n-i",
02160                                 0, MULT_STR_ARG);
02161                }
02162 # else
02163                ntr_msg_queue(0, 744, Log_Warning, 0,
02164                             "fastint", 'O', ARG_STR_ARG);
02165 # endif
02166             }
02167             else if (EQUAL_STRS(cp, "fusion")) {
02168 
02169 # if defined(_ACCEPT_CMD_O_FUSION)
02170                opt_flags.fusion = TRUE;
02171 # else
02172                ntr_msg_queue(0, 744, Log_Warning, 0,
02173                             "fusion", 'O', ARG_STR_ARG);
02174 # endif
02175             }
02176             else {
02177                err = TRUE;
02178             }
02179             break;
02180 
02181 
02182          case 'i': 
02183 
02184             if (EQUAL_STRS(cp, "ieeeconform")) {
02185 
02186                if (target_ieee) {
02187                   opt_flags.ieeeconform         = TRUE;
02188                   set_ieeeconform_option        = TRUE;
02189                } 
02190                else {
02191                   ntr_msg_queue(0, 744, Log_Warning, 0,
02192                                "ieeeconform", 'O', ARG_STR_ARG);
02193                } 
02194             }
02195             else if ((strncmp (cp, "inlinefrom=", 11) == IDENTICAL)) {
02196                cp = cp+11;
02197                add_to_fp_table (cp, &inline_path_idx, 'O');
02198                set_inlinefrom_option = TRUE;
02199             }
02200             else if (EQUAL_STRS(cp, "inline0")) {
02201 
02202 #              if defined(_ACCEPT_INLINE)
02203 
02204                opt_flags.inline_lvl = Inline_Lvl_0;   
02205 
02206 #              else
02207 
02208                ntr_msg_queue(0, 744, Log_Warning, 0,
02209                              "inline0", 'O', ARG_STR_ARG);
02210 
02211 #              endif
02212 
02213             }
02214             else if (EQUAL_STRS(cp, "inline1") ||
02215                      EQUAL_STRS(cp, "inlinee1")) {
02216 
02217 #              if defined(_ACCEPT_INLINE)
02218 
02219                if (EQUAL_STRS(cp, "inlinee1")) {
02220                   opt_flags.extent_assert = TRUE;
02221                }
02222 
02223                opt_flags.inline_lvl = Inline_Lvl_1;   
02224 
02225 #              else
02226 
02227                ntr_msg_queue(0, 744, Log_Warning, 0,
02228                              "inline1", 'O', ARG_STR_ARG);
02229 
02230 #              endif
02231 
02232             }
02233             else if (EQUAL_STRS(cp, "inline2") ||
02234                      EQUAL_STRS(cp, "inlinee2")) {
02235 
02236 #              if defined(_ACCEPT_INLINE)
02237 
02238                if (EQUAL_STRS(cp, "inlinee2")) {
02239                   opt_flags.extent_assert = TRUE;
02240                }
02241 
02242                opt_flags.inline_lvl = Inline_Lvl_2;
02243 
02244 #              else
02245 
02246                ntr_msg_queue(0, 744, Log_Warning, 0,
02247                              "inline2", 'O', ARG_STR_ARG);
02248 
02249 #              endif
02250 
02251             }
02252             else if (EQUAL_STRS(cp, "inline3") ||
02253                      EQUAL_STRS(cp, "inlinee3")) {
02254 
02255 #              if defined(_ACCEPT_INLINE)
02256 
02257                if (EQUAL_STRS(cp, "inlinee3")) {
02258                   opt_flags.extent_assert = TRUE;
02259                }
02260 
02261                opt_flags.inline_lvl = Inline_Lvl_3;
02262                ntr_msg_queue(0, 1548, Log_Warning, 0,
02263                              "-O inline3", 0, STR_ARG);
02264 
02265 #              else
02266 
02267                ntr_msg_queue(0, 744, Log_Warning, 0,
02268                              "inline3", 'O', ARG_STR_ARG);
02269 
02270 #              endif
02271             }
02272             else if (EQUAL_STRS(cp, "inline4") ||
02273                      EQUAL_STRS(cp, "inlinee4")) {
02274 
02275 #              if defined(_ACCEPT_INLINE)
02276 
02277                if (EQUAL_STRS(cp, "inlinee4")) {
02278                   opt_flags.extent_assert = TRUE;
02279                }
02280 
02281                opt_flags.inline_lvl = Inline_Lvl_4;
02282 
02283 #              else
02284 
02285                ntr_msg_queue(0, 744, Log_Warning, 0,
02286                              "inline4", 'O', ARG_STR_ARG);
02287 
02288 #              endif
02289             }
02290             else {  
02291                err = TRUE;
02292             }
02293 
02294             if (set_debug_option) {
02295                opt_flags.inline_lvl = Inline_Lvl_0;
02296             }
02297 
02298             break;
02299 
02300 
02301          case 'j':
02302 
02303             if (! EQUAL_STRS(cp, "jump")) {
02304                err = TRUE;
02305             }
02306             else {
02307 
02308 #              if defined(_ACCEPT_CMD_O_JUMP)
02309                opt_flags.jump  = TRUE;
02310 #              else
02311                ntr_msg_queue(0, 744, Log_Warning, 0, "jump", 'O', ARG_STR_ARG);
02312 #              endif
02313 
02314             }
02315 
02316             break;
02317 
02318     
02319          case 'l': 
02320 
02321             if ( !EQUAL_STRS(cp, "loopalign")) {
02322                err = TRUE;
02323             }
02324             else {
02325 
02326 #              if defined(_ACCEPT_CMD_O_LOOPALIGN)
02327 
02328                opt_flags.loopalign   = TRUE;
02329                set_loop_align_option = TRUE;
02330 
02331 #              else
02332 
02333                ntr_msg_queue(0, 744, Log_Warning, 0,
02334                              "loopalign", 'O', ARG_STR_ARG);
02335 
02336 #              endif
02337 
02338             }
02339 
02340             break;
02341 
02342 
02343          case 'm': 
02344 
02345             if (EQUAL_STRS(cp, "modinline")) {
02346 
02347 #              if defined(_ACCEPT_INLINE)
02348                opt_flags.modinline = TRUE;
02349 #              else
02350 
02351                ntr_msg_queue(0, 744, Log_Warning, 0,
02352                              "modinline", 'O', ARG_STR_ARG);
02353 
02354 #              endif
02355 
02356             }
02357             else if (EQUAL_STRS(cp, "msgs")) {
02358                opt_flags.msgs = TRUE;
02359             }
02360             else if (strncmp(cp, "mark", 4) == 0) {
02361                opt_flags.mark = TRUE;
02362                cp             +=4;
02363 
02364                if (*cp != EOS) {
02365 
02366                   if (*cp != EQUAL) {
02367                      err = TRUE;
02368                   }
02369                   else {  /* Check strlen ??  KAY */
02370                      ++cp;
02371                      strcpy(opt_flags.mark_name.string, cp);
02372                   }
02373                }
02374             }
02375             else if (EQUAL_STRS(cp, "matmul_inline")) {
02376 
02377 #              if defined(_ACCEPT_CMD_O_MATMUL_INLINE)
02378                   opt_flags.matmul_inline = TRUE;
02379 #              else
02380                   PRINTMSG (0, 744, Log_Warning, 0, 'O', "matmul_inline");
02381 #              endif
02382 
02383             }
02384             else if (EQUAL_STRS(cp, "mv_matmul_inline")) {
02385 
02386 #              if defined(_ACCEPT_CMD_O_MATMUL_INLINE)
02387                   opt_flags.mv_matmul_inline = TRUE;
02388 #              else
02389                   PRINTMSG (0, 744, Log_Warning, 0, 'O', "mv_matmul_inline");
02390 #              endif
02391 
02392             }
02393             else { 
02394                err = TRUE;
02395             }
02396 
02397             break;
02398 
02399 
02400          case 'n': 
02401 
02402             if (EQUAL_STRS(cp, "negmsgs")) {
02403                opt_flags.neg_msgs = TRUE;
02404             }
02405             else if (EQUAL_STRS(cp, "noaggress")) {
02406                opt_flags.aggress = FALSE;
02407             }
02408             else if (EQUAL_STRS(cp, "nobl")) {
02409 
02410 #              if defined(_ACCEPT_BL)
02411 
02412                opt_flags.bottom_load = FALSE;
02413 
02414 #              else
02415 
02416                ntr_msg_queue(0, 744, Log_Warning, 0, "nobl", 'O', ARG_STR_ARG);
02417 
02418 #              endif
02419 
02420             } 
02421             else if (EQUAL_STRS(cp, "nofastint")) {
02422 
02423 # if defined(_ACCEPT_CMD_O_FASTINT)
02424                opt_flags.set_nofastint_option = TRUE;
02425 
02426                if (set_i_option) {
02427                   ntr_msg_queue(0, 1192, Log_Warning, 0,
02428                                 "-i\n-O nofastint\n-i",
02429                                 0, MULT_STR_ARG);
02430                }
02431 # else
02432                ntr_msg_queue(0, 744, Log_Warning, 0,
02433                              "nofastint", 'O', ARG_STR_ARG);
02434 # endif
02435 
02436             }
02437             else if (EQUAL_STRS(cp, "nofusion")) {
02438 
02439 # if defined(_ACCEPT_CMD_O_FUSION)
02440                opt_flags.fusion = FALSE;
02441 # else
02442                ntr_msg_queue(0, 744, Log_Warning, 0,
02443                              "nofusion", 'O', ARG_STR_ARG);
02444 # endif
02445             }
02446             else if (EQUAL_STRS(cp, "noieeeconform")) {
02447 
02448                if (target_ieee) {
02449                   opt_flags.ieeeconform         = FALSE;
02450                   set_ieeeconform_option        = TRUE;
02451                } 
02452                else {
02453                   ntr_msg_queue(0, 744, Log_Warning, 0,
02454                                 "noieeeconform", 'O', ARG_STR_ARG);
02455                } 
02456             }
02457             else if (EQUAL_STRS(cp, "nointerchange")) {
02458                opt_flags.nointerchange          = TRUE;
02459             }
02460             else if (EQUAL_STRS(cp, "nojump")) {
02461 
02462 #              if defined(_ACCEPT_CMD_O_JUMP)
02463 
02464                opt_flags.jump = FALSE;
02465 
02466 #              else
02467 
02468                ntr_msg_queue(0, 744, Log_Warning, 0,
02469                              "nojump", 'O', ARG_STR_ARG);
02470 
02471 #              endif
02472 
02473             }
02474             else if (EQUAL_STRS(cp, "noloopalign")) {
02475 
02476 #              if defined(_ACCEPT_CMD_O_LOOPALIGN)
02477 
02478                opt_flags.loopalign = FALSE;
02479 
02480 #              else
02481 
02482                ntr_msg_queue(0, 744, Log_Warning, 0,
02483                              "noloopalign", 'O', ARG_STR_ARG);
02484 
02485 #              endif
02486 
02487             }
02488             else if (EQUAL_STRS(cp, "nomodinline")) {
02489 
02490 #              if defined(_ACCEPT_INLINE)
02491                opt_flags.modinline = FALSE;
02492 #              else
02493 
02494                ntr_msg_queue(0, 744, Log_Warning, 0,
02495                              "nomodinline", 'O', ARG_STR_ARG);
02496 
02497 #              endif
02498 
02499             }
02500             else if (EQUAL_STRS(cp, "nomsgs")) {
02501                opt_flags.msgs = FALSE;
02502             }
02503             else if (EQUAL_STRS(cp, "nonegmsgs")) {
02504                opt_flags.neg_msgs = FALSE;
02505             }
02506             else if (EQUAL_STRS(cp, "nopattern")) {
02507                opt_flags.pattern = FALSE;
02508             }
02509             else if (EQUAL_STRS(cp, "nooverindex")) {
02510                opt_flags.over_index = FALSE;
02511             }
02512             else if (EQUAL_STRS(cp, "norecurrence")) {
02513                opt_flags.recurrence = FALSE;
02514             }
02515             else if (EQUAL_STRS(cp, "notaskinner")) {
02516 
02517 #              if defined(_ACCEPT_TASK)
02518 
02519                opt_flags.taskinner = FALSE;
02520 
02521 #              else
02522 
02523                ntr_msg_queue(0, 744, Log_Warning, 0,
02524                              "notaskinner", 'O', ARG_STR_ARG);
02525 
02526 #              endif
02527 
02528             }
02529             else if (EQUAL_STRS(cp, "nothreshold")) {
02530 
02531 #              if defined(_ACCEPT_TASK)
02532 
02533                opt_flags.threshold  = FALSE;
02534 
02535 #              else
02536 
02537                ntr_msg_queue(0, 744, Log_Warning, 0,
02538                              "nothreshold", 'O', ARG_STR_ARG);
02539 
02540 #              endif
02541             }
02542             else if (EQUAL_STRS(cp, "novsearch")) {
02543 
02544 #              if defined(_ACCEPT_VSEARCH)
02545 
02546                opt_flags.vsearch = FALSE;
02547 
02548 #              else
02549 
02550                ntr_msg_queue(0, 744, Log_Warning, 0,
02551                              "novsearch", 'O', ARG_STR_ARG);
02552 
02553 #              endif
02554 
02555             }
02556             else if (EQUAL_STRS(cp, "nozeroinc")) {
02557 
02558 #              if defined(_ACCEPT_CMD_O_ZEROINC)
02559 
02560                opt_flags.zeroinc = FALSE;
02561 
02562 #              else
02563 
02564                ntr_msg_queue(0, 744, Log_Warning, 0,
02565                              "nozeroinc", 'O', ARG_STR_ARG);
02566 
02567 #              endif
02568 
02569             }
02570             else {
02571                err = TRUE;
02572             }
02573 
02574             break;
02575 
02576 
02577          case 'o':
02578 
02579             if (EQUAL_STRS(cp, "overindex")) {
02580                opt_flags.over_index = TRUE;
02581             }
02582             else if (EQUAL_STRS(cp, "opt_info")) {
02583 
02584 #              if defined(_ACCEPT_CMD_O_OPT_INFO)
02585                   opt_flags.opt_info    = TRUE;
02586 #              else
02587                   ntr_msg_queue(0, 744, Log_Warning, 0,
02588                                 "opt_info", 'O', ARG_STR_ARG);
02589 #              endif
02590             }
02591             else {
02592                err = TRUE;
02593             }
02594 
02595             break;
02596 
02597 
02598          case 'p': 
02599 
02600             if (EQUAL_STRS(cp, "pattern")) {
02601                opt_flags.pattern  = TRUE;
02602                set_pattern_option = TRUE;
02603             }
02604             else if (EQUAL_STRS(cp, "pipeline0")) {
02605 
02606 #              if defined(_ACCEPT_CMD_O_PIPELINE)
02607                   opt_flags.pipeline_lvl        = 0;
02608                   set_pipeline_option           = TRUE;
02609 #              else
02610                   ntr_msg_queue(0, 744, Log_Warning, 0,
02611                                 "pipeline0", 'O', ARG_STR_ARG);
02612 #              endif
02613             }
02614             else if (EQUAL_STRS(cp, "pipeline1")) {
02615 
02616 #              if defined(_ACCEPT_CMD_O_PIPELINE)
02617                   opt_flags.pipeline_lvl        = 1;
02618                   set_pipeline_option           = TRUE;
02619 #              else
02620                   ntr_msg_queue(0, 744, Log_Warning, 0,
02621                                 "pipeline1", 'O', ARG_STR_ARG);
02622 #              endif
02623             }
02624             else if (EQUAL_STRS(cp, "pipeline2")) {
02625 
02626 #              if defined(_ACCEPT_CMD_O_PIPELINE)
02627                   opt_flags.pipeline_lvl        = 2;
02628                   set_pipeline_option           = TRUE;
02629 #              else
02630                   ntr_msg_queue(0, 744, Log_Warning, 0,
02631                                 "pipeline2", 'O', ARG_STR_ARG);
02632 #              endif
02633             }
02634             else if (EQUAL_STRS(cp, "pipeline3")) {
02635 
02636 #              if defined(_ACCEPT_CMD_O_PIPELINE)
02637                   opt_flags.pipeline_lvl        = 3;
02638                   set_pipeline_option           = TRUE;
02639 #              else
02640                   ntr_msg_queue(0, 744, Log_Warning, 0,
02641                                 "pipeline3", 'O', ARG_STR_ARG);
02642 #              endif
02643             }
02644             else {
02645                err = TRUE;
02646             }
02647 
02648             break;
02649 
02650     
02651          case 'r': 
02652 
02653             if (EQUAL_STRS(cp, "reshape")) {
02654 
02655 #  if defined(_ACCEPT_CMD_O_RESHAPE)
02656                opt_flags.reshape_all_arrays     = TRUE;
02657                opt_flags.reshape                = TRUE;
02658 # else
02659                ntr_msg_queue(0, 744, Log_Warning, 0,
02660                             "reshape", 'O', ARG_STR_ARG);
02661 # endif
02662             }
02663             else if ((strncmp (cp, "reshape=", 8) == IDENTICAL)) {
02664                cp += 8;
02665                process_reshape_array(cp);
02666             }
02667             else if (! EQUAL_STRS(cp, "recurrence")) {
02668                err = TRUE;
02669             }
02670             else {
02671                opt_flags.recurrence  = TRUE;
02672                set_recurrence_option = TRUE;
02673             }
02674 
02675             break;
02676 
02677 
02678          case 's':
02679 
02680             if (EQUAL_STRS(cp, "scalar0")) {
02681                opt_flags.scalar_lvl = Scalar_Lvl_0;
02682                set_scalar_option    = TRUE;
02683             }
02684             else if (EQUAL_STRS(cp, "scalar1")) {
02685                opt_flags.scalar_lvl = Scalar_Lvl_1;
02686                set_scalar_option    = TRUE;
02687             }
02688             else if (EQUAL_STRS(cp, "scalar2")) {
02689                opt_flags.scalar_lvl = Scalar_Lvl_2;
02690                set_scalar_option    = TRUE;
02691             }
02692             else if (EQUAL_STRS(cp, "scalar3")) {
02693                opt_flags.scalar_lvl = Scalar_Lvl_3;
02694                set_scalar_option    = TRUE;
02695             }
02696             else if (EQUAL_STRS(cp, "split0")) {
02697 
02698 #              if defined(_ACCEPT_SPLIT)
02699                   opt_flags.split_lvl = Split_Lvl_0;
02700 #              else
02701                   ntr_msg_queue(0, 744, Log_Warning, 0,
02702                                 "split0", 'O', ARG_STR_ARG);
02703 #              endif
02704             }
02705             else if (EQUAL_STRS(cp, "split1")) {
02706 
02707 #              if defined(_ACCEPT_SPLIT)
02708                   opt_flags.split_lvl = Split_Lvl_1;
02709 
02710 #              else
02711                   ntr_msg_queue(0, 744, Log_Warning, 0,
02712                                 "split1", 'O', ARG_STR_ARG);
02713 #              endif
02714             }
02715             else if (EQUAL_STRS(cp, "split2")) {
02716 
02717 #              if defined(_ACCEPT_SPLIT)
02718                   opt_flags.split_lvl = Split_Lvl_2;
02719 #             else 
02720                   ntr_msg_queue(0, 744, Log_Warning, 0,
02721                                 "split2", 'O', ARG_STR_ARG);
02722 #              endif
02723             }
02724             else if (EQUAL_STRS(cp, "shortcircuit0")) {
02725 
02726 #              if defined(_ACCEPT_SHORTCIRCUIT)
02727                   opt_flags.short_circuit_lvl = Short_Circuit_Off;
02728 #              else
02729                   ntr_msg_queue(0, 744, Log_Warning, 0,
02730                                 "shortcircuit0", 'O', ARG_STR_ARG);
02731 #              endif
02732 
02733             }
02734             else if (EQUAL_STRS(cp, "shortcircuit1")) {
02735 
02736 #              if defined(_ACCEPT_SHORTCIRCUIT)
02737                   opt_flags.short_circuit_lvl = Short_Circuit_Present;
02738 #              else
02739                   ntr_msg_queue(0, 744, Log_Warning, 0,
02740                                 "shortcircuit1", 'O', ARG_STR_ARG);
02741 #              endif
02742 
02743             }
02744             else if (EQUAL_STRS(cp, "shortcircuit2")) {
02745 
02746 #              if defined(_ACCEPT_SHORTCIRCUIT)
02747                   opt_flags.short_circuit_lvl = Short_Circuit_Left_Right;
02748 #              else
02749                   ntr_msg_queue(0, 744, Log_Warning, 0,
02750                                 "shortcircuit2", 'O', ARG_STR_ARG);
02751 #              endif
02752 
02753             }
02754             else if (EQUAL_STRS(cp, "shortcircuit3")) {
02755 
02756 #              if defined(_ACCEPT_SHORTCIRCUIT)
02757                   opt_flags.short_circuit_lvl = Short_Circuit_Functions;
02758 #              else
02759                   ntr_msg_queue(0, 744, Log_Warning, 0,
02760                                 "shortcircuit3", 'O', ARG_STR_ARG);
02761 #              endif
02762 
02763             }
02764             else if (EQUAL_STRS(cp, "stream0")) {
02765 
02766                if (accept_stream) { 
02767                   set_stream_option     = TRUE;
02768                   opt_flags.stream_lvl  = Stream_Lvl_0;
02769                }
02770                else {
02771                   PRINTMSG (0, 744, Log_Warning, 0, 'O', "stream0");
02772                }
02773             }
02774             else if (EQUAL_STRS(cp, "stream1")) {
02775 
02776                if (accept_stream) { 
02777                   set_stream_option     = TRUE;
02778                   opt_flags.stream_lvl  = Stream_Lvl_1;
02779                }
02780                else {
02781                   PRINTMSG (0, 744, Log_Warning, 0, 'O', "stream1");
02782                }
02783             }
02784             else if (EQUAL_STRS(cp, "stream2")) {
02785 
02786                if (accept_stream) { 
02787                   set_stream_option     = TRUE;
02788                   opt_flags.stream_lvl  = Stream_Lvl_2;
02789                }
02790                else {
02791                   PRINTMSG (0, 744, Log_Warning, 0, 'O', "stream2");
02792                }
02793             }
02794             else if (EQUAL_STRS(cp, "stream3")) {
02795 
02796                if (accept_stream) { 
02797                   set_stream_option     = TRUE;
02798                   opt_flags.stream_lvl  = Stream_Lvl_3;
02799                }
02800                else {
02801                   PRINTMSG (0, 744, Log_Warning, 0, 'O', "stream3");
02802                }
02803             }
02804             else {
02805                err = TRUE;
02806             }
02807 
02808             break;
02809 
02810 
02811          case 't': 
02812 
02813             if (EQUAL_STRS(cp, "task0")) {
02814 
02815 #              if defined(_ACCEPT_TASK)
02816 
02817                opt_flags.task_lvl = Task_Lvl_0;
02818                set_task_option    = TRUE;
02819 
02820 #              else
02821 
02822                ntr_msg_queue(0, 744, Log_Warning, 0, "task0", 'O', ARG_STR_ARG);
02823 
02824 #              endif
02825 
02826             }
02827             else if (EQUAL_STRS(cp, "task1")) {
02828 
02829 #              if defined(_ACCEPT_TASK)
02830 
02831                opt_flags.task_lvl = Task_Lvl_1;
02832                set_task_option    = TRUE;
02833 
02834 #              else
02835 
02836                ntr_msg_queue(0, 744, Log_Warning, 0, "task1", 'O', ARG_STR_ARG);
02837 
02838 #              endif
02839 
02840             }
02841             else if (EQUAL_STRS(cp, "task2")) {
02842 
02843 #              if defined(_ACCEPT_TASK)
02844 
02845                opt_flags.task_lvl = Task_Lvl_2;
02846                set_task_option    = TRUE;
02847 
02848 #              else
02849 
02850                ntr_msg_queue(0, 744, Log_Warning, 0, "task2", 'O', ARG_STR_ARG);
02851 
02852 #              endif
02853 
02854             }
02855             else if (EQUAL_STRS(cp, "task3")) {
02856 
02857 #              if defined(_ACCEPT_TASK)
02858 
02859                opt_flags.task_lvl = Task_Lvl_3;
02860                set_task_option    = TRUE;
02861 
02862 #              else
02863 
02864                ntr_msg_queue(0, 744, Log_Warning, 0, "task3", 'O', ARG_STR_ARG);
02865 
02866 #              endif
02867 
02868             }
02869             else if (EQUAL_STRS(cp, "taskinner")) {
02870 
02871 #              if defined(_ACCEPT_TASK)
02872 
02873                opt_flags.taskinner  = TRUE;
02874                set_taskinner_option = TRUE;
02875 
02876 #              else
02877 
02878                ntr_msg_queue(0, 744, Log_Warning, 0,
02879                              "taskinner", 'O', ARG_STR_ARG);
02880 
02881 #              endif
02882 
02883             }
02884             else if (EQUAL_STRS(cp, "threshold")) {
02885 
02886 #              if defined(_ACCEPT_TASK)
02887                opt_flags.threshold  = TRUE;
02888 #              else
02889                ntr_msg_queue(0, 744, Log_Warning, 0,
02890                              "threshold", 'O', ARG_STR_ARG);
02891 #              endif
02892             }
02893             else {
02894                err = TRUE;
02895             }
02896 
02897             break;
02898 
02899 
02900          case 'u':
02901 
02902             if (EQUAL_STRS(cp, "unroll0")) {
02903 
02904 #              if defined(_ACCEPT_CMD_O_UNROLL)
02905                   opt_flags.unroll_lvl = Unroll_Lvl_0;
02906 #              else
02907                   ntr_msg_queue(0, 744, Log_Warning, 0,
02908                                 "unroll0", 'O', ARG_STR_ARG);
02909 #              endif
02910             }
02911             else if (EQUAL_STRS(cp, "unroll1")) {
02912    
02913 #              if defined(_ACCEPT_CMD_O_UNROLL)
02914                   opt_flags.unroll_lvl = Unroll_Lvl_1;
02915 #              else
02916                   ntr_msg_queue(0, 744, Log_Warning, 0,
02917                                 "unroll1", 'O', ARG_STR_ARG);
02918 #              endif
02919             }
02920             else if (EQUAL_STRS(cp, "unroll2")) {
02921 
02922 #              if defined(_ACCEPT_CMD_O_UNROLL)
02923                   opt_flags.unroll_lvl = Unroll_Lvl_2;
02924 #              else
02925                   ntr_msg_queue(0, 744, Log_Warning, 0,
02926                                 "unroll2", 'O', ARG_STR_ARG);
02927 #              endif
02928             }
02929             else {
02930                err = TRUE;
02931             }
02932             break;
02933 
02934 
02935          case 'v':
02936 
02937             if (EQUAL_STRS(cp, "vector0")) {
02938 
02939 #              if defined(_ACCEPT_VECTOR)
02940                   opt_flags.vector_lvl = Vector_Lvl_0;
02941                   set_vector_option    = TRUE;
02942 #              else
02943                   ntr_msg_queue(0, 744, Log_Warning, 0,
02944                                 "vector0", 'O', ARG_STR_ARG);
02945 #              endif
02946 
02947             }
02948             else if (EQUAL_STRS(cp, "vector1")) {
02949 
02950 #              if defined(_ACCEPT_VECTOR)
02951 
02952                opt_flags.vector_lvl = Vector_Lvl_1;
02953                set_vector_option    = TRUE;
02954 
02955 #              else
02956 
02957                ntr_msg_queue(0, 744, Log_Warning, 0,
02958                              "vector1", 'O', ARG_STR_ARG);
02959 
02960 #              endif
02961 
02962             }
02963             else if (EQUAL_STRS(cp, "vector2")) {
02964 
02965 #              if defined(_ACCEPT_VECTOR)
02966 
02967                opt_flags.vector_lvl = Vector_Lvl_2;
02968                set_vector_option    = TRUE;
02969 
02970 #              else
02971 
02972                ntr_msg_queue(0, 744, Log_Warning, 0,
02973                              "vector2", 'O', ARG_STR_ARG);
02974 
02975 #              endif
02976 
02977             }
02978             else if (EQUAL_STRS(cp, "vector3")) {
02979 
02980 #              if defined(_ACCEPT_VECTOR)
02981 
02982                opt_flags.vector_lvl = Vector_Lvl_3;
02983                set_vector_option    = TRUE;
02984 
02985 #              else
02986 
02987                ntr_msg_queue(0, 744, Log_Warning, 0,
02988                              "vector3", 'O', ARG_STR_ARG);
02989 
02990 #              endif
02991 
02992             }
02993             else if (EQUAL_STRS(cp, "vsearch")) {
02994 
02995 #              if defined(_ACCEPT_VSEARCH)
02996 
02997                opt_flags.vsearch  = TRUE;
02998                set_vsearch_option = TRUE;
02999 
03000 #              else
03001 
03002                ntr_msg_queue(0, 744, Log_Warning, 0,
03003                              "vsearch", 'O', ARG_STR_ARG);
03004 
03005 #              endif
03006 
03007             }
03008             else {
03009                err = TRUE;
03010             }
03011 
03012             break;
03013 
03014 
03015          case 'z':
03016 
03017             if (! EQUAL_STRS(cp, "zeroinc")) {
03018                err = TRUE;
03019             }
03020             else {
03021 
03022 #              if defined(_ACCEPT_CMD_O_ZEROINC)
03023 
03024                opt_flags.zeroinc  = TRUE;
03025                set_zeroinc_option = TRUE;
03026 
03027 #              else
03028 
03029                ntr_msg_queue(0, 744, Log_Warning, 0,
03030                              "zeroinc", 'O', ARG_STR_ARG);
03031 
03032 #              endif
03033 
03034             }
03035 
03036             break;
03037 
03038 
03039          default:
03040             err = TRUE;
03041             break;
03042       }                            /* End -O argument switch.                 */
03043 
03044 
03045       /* Option has an invalid argument?                                      */
03046 
03047       if (err) {
03048 
03049          if (first && (argc == optind)) {
03050 
03051             /* We're seeing something similar to -O end.f        */
03052             /* This is the first time through the while loop     */
03053             /* and there is nothing on the commandline following */
03054             /* the -O and its argument.  We will assume this is  */
03055             /* a lone -O and that the argument is really the     */
03056             /* file to be compiled.  We could also be seeing     */
03057             /* -O vctor where the input is expected to be from   */
03058             /* stdin, but we'll go with the first choice because */
03059             /* it could be correct.  If we didn't we might be    */
03060             /* issuing an error for a valid commandline.         */
03061 
03062             ntr_msg_queue(0, 1221, Log_Warning, 0, (char *) NULL, 0, NO_ARG);
03063             --optind;
03064          }
03065          else {
03066             ntr_msg_queue(0, 78, Log_Error, 0, cp, 'O', ARG_STR_ARG);
03067          }
03068       }
03069 
03070       first     = FALSE;
03071    }                               /* End -O argument WHILE loop.             */
03072 
03073    TRACE (Func_Exit, "process_O_option", NULL);
03074 
03075    return;
03076 
03077 }  /* process_O_option */
03078 
03079 
03080 /******************************************************************************\
03081 |*                                                                            *|
03082 |* Description:                                                               *|
03083 |*      Validate_O_option is called to check the precedence of optimization   *|
03084 |*      options selected.                                                     *|
03085 |*                                                                            *|
03086 |* Input parameters:                                                          *|
03087 |*      NONE                                                                  *|
03088 |*                                                                            *|
03089 |* Output parameters:                                                         *|
03090 |*      NONE                                                                  *|
03091 |*                                                                            *|
03092 |* Returns:                                                                   *|
03093 |*      NOTHING                                                               *|
03094 |*                                                                            *|
03095 \******************************************************************************/
03096 
03097 static void validate_O_option (void)
03098 
03099 {
03100    char          msg_str[30];
03101    boolean       option_conflict        = FALSE;
03102    int           scalar;
03103    char         *str;
03104    int           task;
03105 
03106 #  if defined(_ACCEPT_VECTOR)
03107    int           vector;
03108 #  endif
03109 
03110 
03111    TRACE (Func_Entry, "validate_O_option", NULL);
03112 
03113    /* If a general optimization option (-O<number>) was specified, no         */
03114    /* specific option (such as -Otask1) can be specified, even if the specific*/
03115    /* option is one that would be implied by the general option.              */
03116 
03117    if (set_support_lvl_option) {
03118 
03119       if (set_scalar_option) {
03120          ntr_msg_queue(0, 1535, Log_Error, 0, 
03121                        scalar_lvl_str[opt_flags.scalar_lvl],
03122                        (long) opt_flags.support_lvl, ARG_STR_ARG);
03123          option_conflict = TRUE;
03124       }
03125 
03126       if (set_vector_option) {
03127          ntr_msg_queue(0, 1535, Log_Error, 0, 
03128                        vector_lvl_str[opt_flags.vector_lvl],
03129                        (long) opt_flags.support_lvl, ARG_STR_ARG);
03130          option_conflict = TRUE;
03131       }
03132 
03133       if (set_task_option) {
03134          ntr_msg_queue(0, 1535, Log_Error, 0, 
03135                        task_lvl_str[opt_flags.task_lvl],
03136                        (long) opt_flags.support_lvl, ARG_STR_ARG);
03137          option_conflict = TRUE;
03138       }
03139    }
03140 
03141    if (option_conflict) {
03142       goto EXIT;
03143    }
03144 
03145    /* Need to check for errors and possibly reset defaults.  An error is set  */
03146    /* if the user requests an invalid combination, but if a user requests a   */
03147    /* valid combination any options not set by the user are adjusted and a    */
03148    /* warning message is issued.  The scalar option is always allowed.  This  */
03149    /* code only needs to be executed if another option, task or vector is     */
03150    /* allowed.                                                                */
03151 
03152 # ifdef _ACCEPT_TASK
03153 
03154    if (set_taskinner_option  &&  opt_flags.taskinner) {
03155 
03156       if (set_task_option  ||  set_support_lvl_option) {
03157 
03158          if (opt_flags.task_lvl < Task_Lvl_2) {
03159             ntr_msg_queue(0, 1182, Log_Error, 0, (char *) NULL, 0, NO_ARG);
03160          }
03161       }
03162       else {
03163          ntr_msg_queue(0, 1182, Log_Error, 0, (char *) NULL, 0, NO_ARG);
03164       }
03165    }
03166 
03167 # endif
03168 
03169 
03170 #  if defined(_ACCEPT_TASK) && defined(_ACCEPT_VECTOR)
03171 
03172    if (! set_vector_option  &&  ! set_scalar_option  &&  ! set_task_option) {
03173       goto CONTINUE;   /* Nothing is set.  No checking needs to be done. */
03174    }
03175 
03176    if (set_vector_option && set_scalar_option && set_task_option) {
03177 
03178       if (opt_flags.scalar_lvl >= opt_flags.vector_lvl &&
03179           opt_flags.vector_lvl >= opt_flags.task_lvl) {
03180 
03181          /* okay - intentionally blank */
03182       }
03183       else if (opt_flags.task_lvl > Task_Lvl_1 &&
03184                opt_flags.task_lvl > opt_flags.vector_lvl) {
03185          msg_str[0] = NULL_CHAR;
03186          strcpy(msg_str, vector_lvl_str[opt_flags.vector_lvl]);
03187          strcpy(&msg_str[7], "\n");
03188          strcpy(&msg_str[8], task_lvl_str[opt_flags.task_lvl]);
03189          ntr_msg_queue(0, 99, Log_Error, 0, msg_str, 0, MULT_STR_ARG);
03190       }
03191       else if (opt_flags.scalar_lvl == Scalar_Lvl_2 &&
03192                opt_flags.vector_lvl == Vector_Lvl_3) {
03193 
03194          /* Okay - intentionally blank */
03195          /* Rule exception - scalar2, vector3  */
03196       }
03197       else if (opt_flags.scalar_lvl < opt_flags.vector_lvl) {
03198          msg_str[0] = NULL_CHAR;
03199          strcpy(msg_str, scalar_lvl_str[opt_flags.scalar_lvl]);
03200          strcpy(&msg_str[7], "\n");
03201          strcpy(&msg_str[8], vector_lvl_str[opt_flags.vector_lvl]);
03202          ntr_msg_queue(0, 99, Log_Error, 0, msg_str, 0, MULT_STR_ARG);
03203       }
03204    }
03205    else if (set_vector_option  &&  set_scalar_option) {
03206 
03207       if (opt_flags.scalar_lvl == Scalar_Lvl_2  &&
03208           opt_flags.vector_lvl == Vector_Lvl_3) {
03209 
03210          /* Okay - intentionally blank */
03211          /* Rule exception - scalar2, vector3  */
03212          /* If vector3, task can be anything */
03213       }
03214       else if (opt_flags.scalar_lvl < opt_flags.vector_lvl) {
03215          msg_str[0] = NULL_CHAR;
03216          strcpy(msg_str, scalar_lvl_str[opt_flags.scalar_lvl]);
03217          strcpy(&msg_str[7], "\n");
03218          strcpy(&msg_str[8], vector_lvl_str[opt_flags.vector_lvl]);
03219          ntr_msg_queue(0, 99, Log_Error, 0, msg_str, 0, MULT_STR_ARG);
03220       }
03221       else if (opt_flags.task_lvl > opt_flags.vector_lvl  &&
03222                opt_flags.task_lvl > Task_Lvl_1) {
03223          task = (opt_flags.vector_lvl == Vector_Lvl_0) ?
03224                  Task_Lvl_1 : opt_flags.vector_lvl;
03225 
03226          msg_str[0] = NULL_CHAR;
03227          strcpy(msg_str, scalar_lvl_str[opt_flags.scalar_lvl]); 
03228          strcpy(&msg_str[7], "\n");
03229          strcpy(&msg_str[8], vector_lvl_str[opt_flags.vector_lvl]); 
03230          strcpy(&msg_str[15], "\n");
03231          strcpy(&msg_str[16], task_lvl_str[opt_flags.task_lvl]); 
03232          strcpy(&msg_str[21], "\n");
03233          strcpy(&msg_str[22], task_lvl_str[task]); 
03234 
03235          ntr_msg_queue(0, 1064, Log_Error, 0, msg_str, 0, MULT_STR_ARG);
03236          opt_flags.task_lvl = task;
03237       }
03238    }
03239    else if (set_scalar_option  &&  set_task_option) {
03240 
03241       if (opt_flags.task_lvl == Task_Lvl_3  &&
03242           opt_flags.scalar_lvl == Scalar_Lvl_2) {
03243 
03244          /* Rule exception - Scalar2, Task3 is okay. */
03245 
03246          if (opt_flags.vector_lvl != Vector_Lvl_3) {
03247             msg_str[0] = NULL_CHAR;
03248             strcpy(msg_str, scalar_lvl_str[opt_flags.scalar_lvl]); 
03249             strcpy(&msg_str[7], "\n");
03250             strcpy(&msg_str[8], task_lvl_str[opt_flags.task_lvl]); 
03251             strcpy(&msg_str[13], "\n");
03252             strcpy(&msg_str[14], vector_lvl_str[opt_flags.vector_lvl]); 
03253             strcpy(&msg_str[21], "\n");
03254             strcpy(&msg_str[22], vector_lvl_str[Vector_Lvl_3]); 
03255 
03256             ntr_msg_queue(0, 1064, Log_Error, 0, msg_str, 0, MULT_STR_ARG);
03257             opt_flags.vector_lvl = Vector_Lvl_3;
03258          }
03259       }
03260       else if (opt_flags.task_lvl <= Task_Lvl_1) {
03261 
03262          /* Just check scalar and vector */
03263 
03264          if (opt_flags.vector_lvl > opt_flags.scalar_lvl) {
03265             vector = opt_flags.scalar_lvl;
03266             msg_str[0] = NULL_CHAR;
03267             strcpy(msg_str, scalar_lvl_str[opt_flags.scalar_lvl]); 
03268             strcpy(&msg_str[7], "\n");
03269             strcpy(&msg_str[8], task_lvl_str[opt_flags.task_lvl]); 
03270             strcpy(&msg_str[13], "\n");
03271             strcpy(&msg_str[14], vector_lvl_str[opt_flags.vector_lvl]); 
03272             strcpy(&msg_str[21], "\n");
03273             strcpy(&msg_str[22], vector_lvl_str[vector]); 
03274 
03275             ntr_msg_queue(0, 1064, Log_Error, 0, msg_str, 0, MULT_STR_ARG);
03276             opt_flags.vector_lvl = vector;
03277          }
03278       }
03279       else if (opt_flags.task_lvl > opt_flags.scalar_lvl) {
03280          msg_str[0] = NULL_CHAR;
03281          strcpy(msg_str, scalar_lvl_str[opt_flags.scalar_lvl]);
03282          strcpy(&msg_str[7], "\n");
03283          strcpy(&msg_str[8], task_lvl_str[opt_flags.task_lvl]);
03284          ntr_msg_queue(0, 99, Log_Error, 0, msg_str, 0, MULT_STR_ARG);
03285       }
03286       else if (opt_flags.task_lvl > opt_flags.vector_lvl) {
03287          vector = opt_flags.task_lvl;
03288          msg_str[0] = NULL_CHAR;
03289          strcpy(msg_str, scalar_lvl_str[opt_flags.scalar_lvl]); 
03290          strcpy(&msg_str[7], "\n");
03291          strcpy(&msg_str[8], task_lvl_str[opt_flags.task_lvl]); 
03292          strcpy(&msg_str[13], "\n");
03293          strcpy(&msg_str[14], vector_lvl_str[opt_flags.vector_lvl]); 
03294          strcpy(&msg_str[21], "\n");
03295          strcpy(&msg_str[22], vector_lvl_str[vector]); 
03296          ntr_msg_queue(0, 1064, Log_Warning, 0, msg_str, 0, MULT_STR_ARG);
03297 
03298          opt_flags.vector_lvl = vector;
03299       }
03300    }
03301    else if (set_vector_option  &&  set_task_option) {
03302 
03303       if (opt_flags.task_lvl > Task_Lvl_1 &&
03304           opt_flags.task_lvl > opt_flags.vector_lvl) {
03305          msg_str[0] = NULL_CHAR;
03306          strcpy(msg_str, vector_lvl_str[opt_flags.vector_lvl]);
03307          strcpy(&msg_str[7], "\n");
03308          strcpy(&msg_str[8], task_lvl_str[opt_flags.task_lvl]);
03309          ntr_msg_queue(0, 99, Log_Error, 0, msg_str, 0, MULT_STR_ARG);
03310       }
03311       else if (opt_flags.vector_lvl > opt_flags.scalar_lvl) {
03312 
03313          if (opt_flags.scalar_lvl == Scalar_Lvl_2) {
03314 
03315             /* Rule exception - scalar2, vector3   If vector is         */
03316             /* Vector_Lvl_3 then task can be anything so this is legal. */
03317          }
03318          else {
03319             scalar = (opt_flags.vector_lvl == Vector_Lvl_3) ?
03320                      Scalar_Lvl_2 : opt_flags.vector_lvl;
03321             msg_str[0] = NULL_CHAR;
03322             strcpy(msg_str, vector_lvl_str[opt_flags.vector_lvl]); 
03323             strcpy(&msg_str[7], "\n");
03324             strcpy(&msg_str[8], task_lvl_str[opt_flags.task_lvl]); 
03325             strcpy(&msg_str[13], "\n");
03326             strcpy(&msg_str[14], scalar_lvl_str[opt_flags.scalar_lvl]); 
03327             strcpy(&msg_str[21], "\n");
03328             strcpy(&msg_str[22], scalar_lvl_str[scalar]); 
03329             ntr_msg_queue(0, 1064, Log_Warning, 0, msg_str, 0, MULT_STR_ARG);
03330 
03331             opt_flags.scalar_lvl = scalar;
03332          }
03333       }
03334    }
03335    else if (set_scalar_option) {
03336 
03337       if (opt_flags.vector_lvl > opt_flags.scalar_lvl) { 
03338          vector = opt_flags.scalar_lvl;
03339          msg_str[0] = NULL_CHAR;
03340          strcpy(msg_str, scalar_lvl_str[opt_flags.scalar_lvl]); 
03341          strcpy(&msg_str[7], "\n");
03342          strcpy(&msg_str[8], vector_lvl_str[opt_flags.vector_lvl]); 
03343          strcpy(&msg_str[15], "\n");
03344          strcpy(&msg_str[16], vector_lvl_str[vector]); 
03345 
03346          ntr_msg_queue(0, 1068, Log_Warning, 0, msg_str, 0, MULT_STR_ARG);
03347          opt_flags.vector_lvl = vector;
03348       }
03349 
03350       if (opt_flags.task_lvl > opt_flags.vector_lvl  && 
03351           opt_flags.task_lvl > Task_Lvl_1) {
03352          task = (opt_flags.vector_lvl == Vector_Lvl_0) ?
03353                  Task_Lvl_1 : opt_flags.vector_lvl;
03354          msg_str[0] = NULL_CHAR;
03355          strcpy(msg_str, vector_lvl_str[opt_flags.vector_lvl]); 
03356          strcpy(&msg_str[7], "\n");
03357          strcpy(&msg_str[8], task_lvl_str[opt_flags.task_lvl]); 
03358          strcpy(&msg_str[13], "\n");
03359          strcpy(&msg_str[14], task_lvl_str[task]); 
03360 
03361          ntr_msg_queue(0, 1068, Log_Warning, 0, msg_str, 0, MULT_STR_ARG);
03362          opt_flags.task_lvl = task;
03363       }
03364    }
03365    else if (set_vector_option) {
03366 
03367       if (opt_flags.vector_lvl > opt_flags.scalar_lvl  && 
03368           opt_flags.scalar_lvl != Scalar_Lvl_2) {
03369 
03370          /* Raise scalar lvl unless vector is level 3 */
03371 
03372          scalar = (opt_flags.vector_lvl == Vector_Lvl_3) ?
03373                    Scalar_Lvl_2 : opt_flags.vector_lvl;
03374          msg_str[0] = NULL_CHAR;
03375          strcpy(msg_str, vector_lvl_str[opt_flags.vector_lvl]); 
03376          strcpy(&msg_str[7], "\n");
03377          strcpy(&msg_str[8], scalar_lvl_str[opt_flags.scalar_lvl]); 
03378          strcpy(&msg_str[15], "\n");
03379          strcpy(&msg_str[16], scalar_lvl_str[scalar]); 
03380 
03381          ntr_msg_queue(0, 1068, Log_Warning, 0, msg_str, 0, MULT_STR_ARG);
03382          opt_flags.scalar_lvl = scalar;
03383       }
03384 
03385       if (opt_flags.task_lvl > opt_flags.vector_lvl  && 
03386           opt_flags.task_lvl > Task_Lvl_1) {
03387 
03388          task = (opt_flags.vector_lvl == Vector_Lvl_0) ?
03389                  Task_Lvl_1 : opt_flags.vector_lvl;
03390          msg_str[0] = NULL_CHAR;
03391          strcpy(msg_str, vector_lvl_str[opt_flags.vector_lvl]); 
03392          strcpy(&msg_str[7], "\n");
03393          strcpy(&msg_str[8], task_lvl_str[opt_flags.task_lvl]); 
03394          strcpy(&msg_str[13], "\n");
03395          strcpy(&msg_str[14], task_lvl_str[task]); 
03396 
03397          ntr_msg_queue(0, 1068, Log_Warning, 0, msg_str, 0, MULT_STR_ARG);
03398          opt_flags.task_lvl = task;
03399       }
03400    }
03401    else if (set_task_option && opt_flags.task_lvl > Task_Lvl_1) {
03402 
03403       if (opt_flags.scalar_lvl < opt_flags.task_lvl  && 
03404           opt_flags.scalar_lvl != Scalar_Lvl_2) {
03405          scalar = (opt_flags.task_lvl == Task_Lvl_3) ?
03406                    Scalar_Lvl_2 : opt_flags.task_lvl;
03407          msg_str[0] = NULL_CHAR;
03408          strcpy(msg_str, task_lvl_str[opt_flags.task_lvl]); 
03409          strcpy(&msg_str[5], "\n");
03410          strcpy(&msg_str[6], scalar_lvl_str[opt_flags.scalar_lvl]); 
03411          strcpy(&msg_str[13], "\n");
03412          strcpy(&msg_str[14], scalar_lvl_str[scalar]); 
03413 
03414          ntr_msg_queue(0, 1068, Log_Warning, 0, msg_str, 0, MULT_STR_ARG);
03415          opt_flags.scalar_lvl = scalar;
03416       }
03417 
03418       if (opt_flags.task_lvl > opt_flags.vector_lvl) { 
03419          vector = opt_flags.task_lvl;
03420          msg_str[0] = NULL_CHAR;
03421          strcpy(msg_str, task_lvl_str[opt_flags.task_lvl]); 
03422          strcpy(&msg_str[5], "\n");
03423          strcpy(&msg_str[6], vector_lvl_str[opt_flags.vector_lvl]); 
03424          strcpy(&msg_str[13], "\n");
03425          strcpy(&msg_str[14], vector_lvl_str[vector]); 
03426 
03427          ntr_msg_queue(0, 1068, Log_Warning, 0, msg_str, 0, MULT_STR_ARG);
03428          opt_flags.vector_lvl = vector;
03429       }
03430    }
03431 
03432 #  elif defined(_ACCEPT_TASK) && !defined(_ACCEPT_VECTOR)
03433 
03434    if (opt_flags.task_lvl > Task_Lvl_1) {
03435 
03436        /* If task level is 0 or 1, scalar can be anything */
03437 
03438       if (set_scalar_option  &&  set_task_option) {
03439 
03440          if (opt_flags.task_lvl > opt_flags.scalar_lvl  &&
03441              opt_flags.scalar_lvl != Scalar_Lvl_2) {
03442 
03443             /* Scalar2, Task3 is an exception and is legal. */
03444 
03445             msg_str[0] = NULL_CHAR;
03446             strcpy(msg_str, scalar_lvl_str[opt_flags.scalar_lvl]);
03447             strcpy(&msg_str[7], "\n");
03448             strcpy(&msg_str[8], task_lvl_str[opt_flags.task_lvl]);
03449             ntr_msg_queue(0, 99, Log_Error, 0, msg_str, 0, MULT_STR_ARG);
03450          }
03451       }
03452       else if (set_scalar_option) {
03453 
03454          if (opt_flags.task_lvl > opt_flags.scalar_lvl) { 
03455             task = (opt_flags.scalar_lvl == Scalar_Lvl_0) ?
03456                     Task_Lvl_1 : opt_flags.scalar_lvl;
03457             msg_str[0] = NULL_CHAR;
03458             strcpy(msg_str, scalar_lvl_str[opt_flags.scalar_lvl]); 
03459             strcpy(&msg_str[7], "\n");
03460             strcpy(&msg_str[8], task_lvl_str[opt_flags.task_lvl]); 
03461             strcpy(&msg_str[13], "\n");
03462             strcpy(&msg_str[14], task_lvl_str[task]); 
03463 
03464             ntr_msg_queue(0, 1068, Log_Warning, 0, msg_str, 0, MULT_STR_ARG);
03465             opt_flags.task_lvl = task;
03466          }
03467       }
03468       else if (set_task_option) {
03469 
03470          if (opt_flags.task_lvl > opt_flags.scalar_lvl) { 
03471             scalar = (opt_flags.task_lvl == Task_Lvl_3) ?
03472                       Scalar_Lvl_2 : opt_flags.task_lvl;
03473             msg_str[0] = NULL_CHAR;
03474             strcpy(msg_str, task_lvl_str[opt_flags.task_lvl]); 
03475             strcpy(&msg_str[5], "\n");
03476             strcpy(&msg_str[6], scalar_lvl_str[opt_flags.scalar_lvl]); 
03477             strcpy(&msg_str[13], "\n");
03478             strcpy(&msg_str[14], scalar_lvl_str[scalar]); 
03479 
03480             ntr_msg_queue(0, 1068, Log_Warning, 0, msg_str, 0, MULT_STR_ARG);
03481             opt_flags.scalar_lvl = scalar;
03482          }
03483       }
03484    }
03485 
03486 #  endif
03487 CONTINUE:
03488 
03489 
03490    if (opt_flags.scalar_lvl == Scalar_Lvl_0) {
03491 
03492       if (set_aggress_option  &&  opt_flags.aggress) {
03493          str = (set_scalar_option) ? "scalar0" : "0";
03494          strcat(str, "\n");
03495          strcat(str, "aggress");
03496          ntr_msg_queue(0, 99, Log_Error, 0, str, 0, MULT_STR_ARG);
03497       }
03498 
03499       opt_flags.aggress = FALSE;
03500 
03501       if (set_bottom_load_option  &&  opt_flags.bottom_load) { 
03502          str = (set_scalar_option) ? "scalar0" : "0";
03503          strcat(str, "\n");
03504          strcat(str, "bl");
03505          ntr_msg_queue(0, 99, Log_Error, 0, str, 0, MULT_STR_ARG);
03506       }
03507 
03508       opt_flags.bottom_load = FALSE;
03509 
03510       if (set_recurrence_option && opt_flags.recurrence) {
03511          str    = (set_scalar_option) ? "scalar0" : "0";
03512          strcat(str, "\n");
03513          strcat(str, "recurrence");
03514          ntr_msg_queue(0, 99, Log_Error, 0, str, 0, MULT_STR_ARG);
03515       }
03516 
03517       opt_flags.recurrence = FALSE;
03518 
03519       if (set_zeroinc_option  &&  opt_flags.zeroinc) {
03520          str    = (set_scalar_option) ? "scalar0" : "0";
03521          strcat(str, "\n");
03522          strcat(str, "zeroinc");
03523          ntr_msg_queue(0, 99, Log_Error, 0, str, 0, MULT_STR_ARG);
03524       }
03525 
03526       opt_flags.zeroinc = FALSE;
03527    }
03528    else if (opt_flags.scalar_lvl == Scalar_Lvl_3) {
03529 
03530       if (! set_bottom_load_option) {
03531          opt_flags.bottom_load = TRUE;
03532       }
03533    }
03534 
03535 # if defined(_ACCEPT_VECTOR)
03536 
03537    if (opt_flags.vector_lvl == Vector_Lvl_0) {
03538 
03539       if (set_vsearch_option  &&  opt_flags.vsearch) { 
03540          str = (set_vector_option) ? "vector0" : "0";
03541          strcat(str, "\n");
03542          strcat(str, "vsearch");
03543          ntr_msg_queue(0, 99, Log_Error, 0, str, 0, MULT_STR_ARG);
03544       }
03545 
03546       opt_flags.vsearch = FALSE;
03547    
03548 # if defined(_TARGET_OS_UNICOS)
03549 
03550       if (set_pattern_option  &&  opt_flags.pattern) {
03551          str = (set_vector_option) ? "vector0" : "0";
03552          strcat(str, "\n");
03553          strcat(str, "pattern");
03554          ntr_msg_queue(0, 99, Log_Error, 0, str, 0, MULT_STR_ARG);
03555       }
03556 
03557       opt_flags.pattern = FALSE;
03558 # endif
03559 
03560    }
03561 
03562 # if defined(_TARGET_OS_UNICOS)
03563    else if (opt_flags.vector_lvl == Vector_Lvl_1) {
03564 
03565       if (set_pattern_option  &&  opt_flags.pattern) {
03566          str = (set_vector_option) ? "vector1" : "1";
03567          strcpy(msg_str, "\n");
03568          strcpy(msg_str, "pattern");
03569          ntr_msg_queue(0, 99, Log_Error, 0, msg_str, 0, MULT_STR_ARG);
03570       }
03571 
03572       opt_flags.pattern = FALSE;
03573    }
03574 # endif
03575 
03576 # endif
03577 
03578 # if defined(_ACCEPT_STREAM)
03579    if (opt_flags.stream_lvl > Stream_Lvl_0 && cmd_line_flags.co_array_fortran) {
03580       PRINTMSG (0, 1570, Log_Error, 0, "-Z");
03581    }
03582 
03583    if (accept_stream && opt_flags.stream_lvl > Stream_Lvl_0) {
03584 
03585       /* Stream_Lvl_1 requires at least scalar1 and vector1                 */
03586       /* Stream_Lvl_2 and Stream_Lvl_3 require at least scalar2 and vector2 */
03587 
03588       if (opt_flags.stream_lvl > opt_flags.scalar_lvl &&
03589           opt_flags.scalar_lvl < Scalar_Lvl_2) {
03590 
03591          if (set_scalar_option && set_stream_option) {
03592 
03593             /* The two are set wrong - issue an error */
03594 
03595             msg_str[0] = NULL_CHAR;
03596             strcpy(msg_str, stream_lvl_str[opt_flags.stream_lvl]);
03597             strcpy(&msg_str[7], "\n");
03598             strcpy(&msg_str[8], scalar_lvl_str[opt_flags.scalar_lvl]);
03599             ntr_msg_queue(0, 99, Log_Error, 0, msg_str, 0, MULT_STR_ARG);
03600             option_conflict     = TRUE;
03601          }
03602          else if (!set_scalar_option  && !set_stream_option) {
03603 
03604             /* The defaults are set wrong - change them */
03605             /* Maybe this should be an INTERNAL error?? */
03606 
03607             opt_flags.stream_lvl = opt_flags.scalar_lvl;
03608          }
03609          else if (set_scalar_option) {
03610             msg_str[0] = NULL_CHAR;
03611             strcpy(msg_str, scalar_lvl_str[opt_flags.scalar_lvl]); 
03612             strcpy(&msg_str[7], "\n");
03613             strcpy(&msg_str[8], stream_lvl_str[opt_flags.stream_lvl]); 
03614             strcpy(&msg_str[15], "\n");
03615             strcpy(&msg_str[16], stream_lvl_str[opt_flags.scalar_lvl]); 
03616 
03617             ntr_msg_queue(0, 1068, Log_Warning, 0, msg_str, 0, MULT_STR_ARG);
03618             opt_flags.stream_lvl = opt_flags.scalar_lvl;
03619          }
03620          else if (set_stream_option) {
03621             msg_str[0] = NULL_CHAR;
03622             strcpy(msg_str, stream_lvl_str[opt_flags.stream_lvl]); 
03623             strcpy(&msg_str[7], "\n");
03624             strcpy(&msg_str[8], scalar_lvl_str[opt_flags.scalar_lvl]); 
03625             strcpy(&msg_str[15], "\n");
03626 
03627             if (opt_flags.stream_lvl == Stream_Lvl_3) {
03628                strcpy(&msg_str[16], scalar_lvl_str[Stream_Lvl_2]); 
03629 
03630                ntr_msg_queue(0, 1068, Log_Warning, 0, msg_str, 0, MULT_STR_ARG);
03631                opt_flags.scalar_lvl = Stream_Lvl_2;
03632             }
03633             else {
03634                strcpy(&msg_str[16], scalar_lvl_str[opt_flags.stream_lvl]); 
03635 
03636                ntr_msg_queue(0, 1068, Log_Warning, 0, msg_str, 0, MULT_STR_ARG);
03637                opt_flags.scalar_lvl = opt_flags.stream_lvl;
03638             }
03639          }
03640       }
03641 
03642 
03643       if (option_conflict) {
03644          goto EXIT;
03645       }
03646 
03647       if (opt_flags.stream_lvl > opt_flags.vector_lvl &&
03648           opt_flags.vector_lvl < Vector_Lvl_2) {
03649 
03650          if (set_vector_option && set_stream_option) {
03651 
03652             /* The two are set wrong - issue an error */
03653 
03654             msg_str[0] = NULL_CHAR;
03655             strcpy(msg_str, stream_lvl_str[opt_flags.stream_lvl]);
03656             strcpy(&msg_str[7], "\n");
03657             strcpy(&msg_str[8], vector_lvl_str[opt_flags.vector_lvl]);
03658             ntr_msg_queue(0, 99, Log_Error, 0, msg_str, 0, MULT_STR_ARG);
03659             option_conflict     = TRUE;
03660          }
03661          else if (!set_vector_option  && !set_stream_option) {
03662 
03663             /* The defaults are set wrong - change them */
03664             /* Maybe this should be an INTERNAL error?? */
03665 
03666             opt_flags.stream_lvl = opt_flags.vector_lvl;
03667          }
03668          else if (set_vector_option) {
03669             msg_str[0] = NULL_CHAR;
03670             strcpy(msg_str, vector_lvl_str[opt_flags.vector_lvl]); 
03671             strcpy(&msg_str[7], "\n");
03672             strcpy(&msg_str[8], stream_lvl_str[opt_flags.stream_lvl]); 
03673             strcpy(&msg_str[15], "\n");
03674             strcpy(&msg_str[16], stream_lvl_str[opt_flags.vector_lvl]); 
03675 
03676             ntr_msg_queue(0, 1068, Log_Warning, 0, msg_str, 0, MULT_STR_ARG);
03677             opt_flags.stream_lvl = opt_flags.vector_lvl;
03678          }
03679          else if (set_stream_option) {
03680             msg_str[0] = NULL_CHAR;
03681             strcpy(msg_str, stream_lvl_str[opt_flags.stream_lvl]); 
03682             strcpy(&msg_str[7], "\n");
03683             strcpy(&msg_str[8], vector_lvl_str[opt_flags.vector_lvl]); 
03684             strcpy(&msg_str[15], "\n");
03685 
03686             if (opt_flags.stream_lvl == Stream_Lvl_3) {
03687                strcpy(&msg_str[16], vector_lvl_str[Stream_Lvl_2]); 
03688 
03689                ntr_msg_queue(0, 1068, Log_Warning, 0, msg_str, 0, MULT_STR_ARG);
03690                opt_flags.vector_lvl = Stream_Lvl_2;
03691             }
03692             else {
03693                strcpy(&msg_str[16], vector_lvl_str[opt_flags.stream_lvl]); 
03694 
03695                ntr_msg_queue(0, 1068, Log_Warning, 0, msg_str, 0, MULT_STR_ARG);
03696                opt_flags.vector_lvl = opt_flags.stream_lvl;
03697             }
03698          }
03699       }
03700 
03701       if (option_conflict) {
03702          goto EXIT;
03703       }
03704    }
03705 
03706 # endif
03707 
03708 # if defined(_ACCEPT_INLINE)
03709 
03710    if (opt_flags.inline_lvl == Inline_Lvl_0 &&
03711        set_inlinefrom_option) {
03712       opt_flags.inline_lvl = Inline_Lvl_4;
03713    }
03714 
03715    if (set_debug_option) {
03716       opt_flags.inline_lvl = Inline_Lvl_0;
03717    }
03718 
03719 # endif
03720 
03721 # if defined(_TARGET_OS_UNICOS)
03722       /* Task0 disables open mp on pvp */
03723 
03724       if (opt_flags.task_lvl == Task_Lvl_0) {
03725          dump_flags.open_mp = FALSE;
03726       }
03727       else {
03728          dump_flags.open_mp = TRUE;
03729       }
03730 
03731 # endif
03732 
03733 EXIT:
03734 
03735    TRACE (Func_Exit, "validate_O_option", NULL);
03736 
03737    return;
03738  
03739 }  /* validate_O_option */
03740 
03741 
03742 /******************************************************************************\
03743 |*                                                                            *|
03744 |* Description:                                                               *|
03745 |*      Process_t_option handles the command line truncation option passed via*|
03746 |*      argv (t switch).                                                      *|
03747 |*                                                                            *|
03748 |* Input parameters:                                                          *|
03749 |*      optargs                 -t option argument                            *|
03750 |*                                                                            *|
03751 |* Output parameters:                                                         *|
03752 |*      NONE                                                                  *|
03753 |*                                                                            *|
03754 |* Returns:                                                                   *|
03755 |*      NOTHING                                                               *|
03756 |*                                                                            *|
03757 \******************************************************************************/
03758 
03759 static void process_t_option (char *optargs)
03760  
03761 {
03762    char *opt_chk;
03763    int   trunc;
03764 
03765 
03766    TRACE (Func_Entry, "process_t_option", NULL);
03767 
03768    /* issue warning if rounding option is being overridden */
03769 
03770    if (set_round_option) { /* Rounding/truncation conflict detected. */
03771       ntr_msg_queue(0, 75, Log_Warning, 0, "-t", 0, STR_ARG);
03772       set_round_option = FALSE;
03773    }
03774 
03775    /* validate that -t arg contains only digits */
03776 
03777    opt_chk = optargs;
03778 
03779    while (isdigit(*opt_chk)) {
03780       opt_chk++;
03781    }
03782 
03783    trunc = atoi (optargs);
03784 
03785    if (*opt_chk != EOS  ||  trunc > MAX_TRUNCATION_BITS) {
03786       ntr_msg_queue(0, 78, Log_Error, 0, optargs, 't', ARG_STR_ARG);
03787    }
03788    else {
03789 
03790 # if defined(_TARGET_OS_SOLARIS)
03791 
03792       if (trunc > 0) {
03793          ntr_msg_queue(0, 744, Log_Warning, 0, optargs, 't', ARG_STR_ARG);
03794          trunc = 0;
03795       }
03796 # endif
03797 
03798       on_off_flags.round_mult_operations        = FALSE;
03799       cmd_line_flags.truncate_bits              = trunc;
03800    }
03801 
03802    set_trunc_option = TRUE;
03803 
03804    TRACE (Func_Exit, "process_t_option", NULL);
03805 
03806    return;
03807 
03808 }  /* process_t_option */
03809 
03810 /******************************************************************************\
03811 |*                                                                            *|
03812 |* Description:                                                               *|
03813 |*      Process_u_option handles command line dump options passed via argv    *|
03814 |*      (u switch).                                                           *|
03815 |*                                                                            *|
03816 |* Input parameters:                                                          *|
03817 |*      optargs                 -u option arguments                           *|
03818 |*                                                                            *|
03819 |* Output parameters:                                                         *|
03820 |*      NONE                                                                  *|
03821 |*                                                                            *|
03822 |* Returns:                                                                   *|
03823 |*      NOTHING                                                               *|
03824 |*                                                                            *|
03825 \******************************************************************************/
03826 
03827 static void process_u_option (char *optargs)
03828 
03829 {
03830    char         *cp;
03831    boolean       non_debug_ok   = FALSE;
03832 
03833    TRACE (Func_Entry, "process_u_option", NULL);
03834 
03835    while (*optargs != EOS) {
03836       for (cp = optargs;
03837            *optargs != BLANK  &&  *optargs != COMMA  &&  *optargs != EOS;
03838            ++optargs);
03839 
03840       if (*optargs != EOS) {
03841          *optargs = EOS;
03842          *optargs++;
03843       }
03844 
03845       if (EQUAL_STRS(cp, "help")) {                     /* Describe all the   */
03846          dump_flags.help_dbg    = TRUE;                 /* options.           */
03847          non_debug_ok           = TRUE;
03848       }
03849       else if (EQUAL_STRS(cp, "abort_ansi")) {          /* Abort on first ANSI*/
03850          dump_flags.abort_on_ansi = TRUE;
03851          non_debug_ok           = TRUE;
03852       }
03853       else if (EQUAL_STRS(cp, "no_dim_pad")) {          /* for F--  */
03854          dump_flags.no_dimension_padding = TRUE;
03855          non_debug_ok           = TRUE;
03856       }
03857       else if (EQUAL_STRS(cp, "show")) {
03858          dump_flags.show_cmd_line = TRUE;
03859          non_debug_ok           = TRUE;
03860       }
03861       else if (EQUAL_STRS(cp, "mp")) {
03862          dump_flags.mp = TRUE;
03863          non_debug_ok           = TRUE;
03864       }
03865       else if (EQUAL_STRS(cp, "mod_version")) {
03866          dump_flags.mod_version = TRUE;
03867          non_debug_ok           = TRUE;
03868       }
03869       else if (EQUAL_STRS(cp, "open_mp")) {
03870          dump_flags.open_mp = TRUE;
03871          non_debug_ok           = TRUE;
03872       }
03873       else if (EQUAL_STRS(cp, "dsm")) {
03874          dump_flags.dsm = TRUE;
03875          non_debug_ok           = TRUE;
03876       }
03877       else if (EQUAL_STRS(cp, "cray_compatible")) {
03878          dump_flags.cray_compatible = TRUE;
03879          non_debug_ok           = TRUE;
03880       }
03881 
03882 # if defined(_TARGET_PACK_HALF_WORD_TYPES)
03883       else if (EQUAL_STRS(cp, "pack_half_word")) {
03884          dump_flags.pack_half_word = TRUE;
03885          non_debug_ok           = TRUE;
03886       }
03887 # endif
03888       else if (EQUAL_STRS(cp, "fe_version")) {
03889          printf("This is frontend %s of release %s\n",
03890                  frontend_version, release_level);
03891          non_debug_ok           = TRUE;
03892       }
03893 # if defined(COARRAY_FORTRAN)
03894       else if (EQUAL_STRS(cp, "fmm1")) {
03895          dump_flags.f_minus_minus = TRUE;
03896          cmd_line_flags.co_array_fortran        = TRUE;
03897          dump_flags.fmm1 = TRUE;
03898          non_debug_ok           = TRUE;
03899       }
03900       else if (EQUAL_STRS(cp, "fmm2")) {
03901          dump_flags.f_minus_minus = TRUE;
03902          cmd_line_flags.co_array_fortran        = TRUE;
03903          dump_flags.fmm2 = TRUE;
03904          non_debug_ok           = TRUE;
03905       }
03906       else if (EQUAL_STRS(cp, "fmm")) {
03907          dump_flags.f_minus_minus = TRUE;
03908          cmd_line_flags.co_array_fortran        = TRUE;
03909          dump_flags.fmm1 = TRUE;
03910          non_debug_ok           = TRUE;
03911       }
03912 # endif
03913       else if (EQUAL_STRS(cp, "no_mod_output")) {       /* For inlinefrom     */
03914          dump_flags.no_module_output = TRUE;
03915          non_debug_ok           = TRUE;
03916       }
03917       else if ((strncmp (cp, "preinline=", 10) == IDENTICAL)) {
03918          dump_flags.preinline = TRUE;
03919          cp = cp + 10;
03920          strcpy(preinline_file, cp);
03921          non_debug_ok           = TRUE;
03922       }
03923       else if (EQUAL_STRS(cp, "f")) {                   /* Fortran output     */
03924          dump_flags.fortran_out = TRUE;
03925       }
03926       else if (EQUAL_STRS(cp, "all")) {                 /* all tbls           */
03927          dump_flags.blk_stk             = TRUE;
03928          dump_flags.bd_tbl              = TRUE;
03929          dump_flags.cmd_line_tbls       = TRUE;
03930          dump_flags.cn_tbl              = TRUE;
03931          dump_flags.fort_out            = TRUE;
03932          dump_flags.fp_tbl              = TRUE;
03933          dump_flags.ftrace_info         = FALSE;
03934          dump_flags.gl_tbl              = TRUE;  
03935          dump_flags.intrin_tbl          = FALSE;        /* TOO much output    */
03936          dump_flags.ir1_tbl             = TRUE;
03937          dump_flags.ir2_tbl             = TRUE;
03938          dump_flags.ir3_tbl             = FALSE;
03939          dump_flags.ir4_tbl             = FALSE;
03940          dump_flags.mem_report          = FALSE;
03941          dump_flags.mtrace_info         = TRUE;
03942          dump_flags.name_tbls           = TRUE; 
03943          dump_flags.pdgcs               = TRUE;
03944          dump_flags.sb_tbl              = TRUE;
03945          dump_flags.scp_tbl             = TRUE;
03946          dump_flags.std_err             = FALSE;
03947          dump_flags.sytb                = TRUE;
03948          dump_flags.typ_tbl             = TRUE;
03949          dump_flags.defines             = TRUE;
03950          dump_flags.abort_on_ansi       = FALSE;        /* Not needed         */
03951 
03952          /* These next 2 are mutually exclusive.  stmt_dmp is the plain one   */
03953          /* src_dmp is the one to use for testing out src_input.c             */
03954 
03955          dump_flags.src_dmp             = FALSE;
03956          dump_flags.stmt_dmp            = TRUE;
03957          dump_flags.pdt_dump            = TRUE; 
03958 
03959       }
03960       else if (EQUAL_STRS(cp, "bd")) {                  /* bounds table       */
03961          dump_flags.bd_tbl      = TRUE;
03962       }
03963       else if (EQUAL_STRS(cp, "blk")) {                 /* block stack table  */
03964          dump_flags.blk_stk     = TRUE;
03965       }
03966       else if (EQUAL_STRS(cp, "cmd")) {                 /* command line info  */
03967          dump_flags.cmd_line_tbls = TRUE;
03968       }
03969       else if (EQUAL_STRS(cp, "cn")) {                  /* constant table     */
03970          dump_flags.cn_tbl      = TRUE;
03971       }
03972       else if (EQUAL_STRS(cp, "defines")) {             /* defines info       */
03973          dump_flags.defines = TRUE;
03974       }
03975       else if (EQUAL_STRS(cp, "cnout")) {       /* binary dump of constants */
03976          dump_flags.constant_bits = TRUE;
03977       }
03978       else if ((strncmp (cp, "pvp_test=", 9) == IDENTICAL)) {
03979          cp = cp + 9;
03980          dump_flags.pvp_test = atoi (cp);
03981          non_debug_ok           = TRUE;
03982       }
03983       else if (EQUAL_STRS(cp, "pvp_test")) {            /* pvp_test[=nn]     */
03984          dump_flags.pvp_test = 1;
03985          non_debug_ok           = TRUE;
03986       }
03987       else if ((strncmp (cp, "file=", 5) == IDENTICAL)) {
03988          cp = cp + 5;
03989          strcpy(debug_file_name, cp);
03990          non_debug_ok           = TRUE;
03991       }
03992       else if (EQUAL_STRS(cp, "fortran")) {             /* module file tbl    */
03993          dump_flags.fort_out = TRUE;
03994       }
03995       else if (EQUAL_STRS(cp, "fp")) {                  /* module file tbl    */
03996          dump_flags.fp_tbl = TRUE;
03997       }
03998       else if (EQUAL_STRS(cp, "ftrace")) {              /* func trace info    */
03999          dump_flags.ftrace_info = TRUE;
04000       }
04001       else if (EQUAL_STRS(cp, "gl")) {                  /* global line tbl    */
04002          dump_flags.gl_tbl = TRUE;
04003       }
04004       else if (EQUAL_STRS(cp, "intrin")) {              /* intrinsic tbl      */
04005          dump_flags.intrin_tbl = TRUE;
04006       }
04007       else if (EQUAL_STRS(cp, "ir1")) {                 /* intermediate rep   */
04008          dump_flags.ir1_tbl = TRUE;
04009       }
04010       else if (EQUAL_STRS(cp, "ir2")) {                 /* intermediate rep   */
04011          dump_flags.ir2_tbl = TRUE;
04012       }
04013       else if (EQUAL_STRS(cp, "ir3")) {                 /* inlining rep       */
04014          dump_flags.ir3_tbl = TRUE;
04015       }
04016       else if (EQUAL_STRS(cp, "ir4")) {                 /* swap dimension dmp */
04017          dump_flags.ir4_tbl = TRUE;
04018       }
04019       else if (EQUAL_STRS(cp, "mem_report")) {          /* memory usage report*/
04020          dump_flags.mem_report = TRUE;
04021       }
04022       else if (EQUAL_STRS(cp, "msg")) {                 /* memory usage report*/
04023          dump_flags.msg_checking = TRUE;
04024       }
04025       else if (EQUAL_STRS(cp, "mtrace")) {              /* memory trace info  */
04026          dump_flags.mtrace_info = TRUE;
04027       }
04028       else if (EQUAL_STRS(cp, "names")) {               /* name tables        */
04029          dump_flags.name_tbls = TRUE;
04030       }
04031       else if (EQUAL_STRS(cp, "pdg")) {                 /* interface calls    */
04032          dump_flags.pdgcs = TRUE;
04033       }
04034       else if (EQUAL_STRS(cp, "pdt")) {                 /* interface calls    */
04035          dump_flags.pdt_dump = TRUE;
04036       }
04037       else if (EQUAL_STRS(cp, "sb")) {                  /* storage blk tbl    */
04038          dump_flags.sb_tbl = TRUE;
04039       }
04040       else if (EQUAL_STRS(cp, "scp")) {                 /* scope tbl          */
04041          dump_flags.scp_tbl = TRUE;
04042       }
04043       else if (EQUAL_STRS(cp, "src")) {                 /* print stmts and    */
04044          dump_flags.src_dmp = TRUE;                     /* expanded src info  */
04045       }
04046       else if (EQUAL_STRS(cp, "stderr")) {              /* msgs to stderr     */
04047          dump_flags.std_err = TRUE;                     /* rather than ordered*/
04048       }
04049       else if (EQUAL_STRS(cp, "stmt")) {                /* print stmts        */
04050          dump_flags.stmt_dmp = TRUE;
04051       }
04052       else if (EQUAL_STRS(cp, "sytb")) {                /* symbol tbl         */
04053          dump_flags.sytb = TRUE;
04054       }
04055       else if (EQUAL_STRS(cp, "typ")) {                 /* type tbl           */
04056          dump_flags.typ_tbl = TRUE;
04057       }
04058       else { /* option has an invalid argument */
04059          ntr_msg_queue(0, 78, Log_Error, 0, cp, 'u', ARG_STR_ARG);
04060       }
04061    }  /* while */
04062 
04063 #ifndef _DEBUG
04064 
04065    if (!non_debug_ok) { /* -u options ignored */
04066       ntr_msg_queue(0, 877, Log_Warning, 0, (char *) NULL, 0, NO_ARG);
04067    }
04068 #endif
04069 
04070    TRACE (Func_Exit, "process_u_option", NULL);
04071 
04072    return;
04073 
04074 }  /* process_u_option */
04075 
04076  
04077 /******************************************************************************\
04078 |*                                                                            *|
04079 |* Description:                                                               *|
04080 |*      Process_x_option handles the command line directive suppress options  *|
04081 |*      passed via argv (x switch).                                           *|
04082 |*                                                                            *|
04083 |* Input parameters:                                                          *|
04084 |*      optargs                 -x option arguments                           *|
04085 |*                                                                            *|
04086 |* Output parameters:                                                         *|
04087 |*      NONE                                                                  *|
04088 |*                                                                            *|
04089 |* Returns:                                                                   *|
04090 |*      NOTHING                                                               *|
04091 |*                                                                            *|
04092 \******************************************************************************/
04093 
04094 static void process_x_option (char *optargs) 
04095  
04096 {
04097    char                 *cp;
04098    boolean               issue_warning  = FALSE;
04099    token_values_type     tok_type;
04100 
04101 
04102    TRACE (Func_Entry, "process_x_option", NULL);
04103 
04104    while (*optargs != EOS) {
04105 
04106       for (cp = optargs;
04107            *optargs != COMMA  &&  *optargs != EOS;
04108            ++optargs);
04109 
04110       if (*optargs != EOS) {
04111          *optargs = EOS;
04112          *optargs++;
04113       }
04114 
04115       tok_type  = get_dir_token_from_str(cp);
04116 
04117       if (tok_type == Tok_Id) {
04118 
04119          /* get_dir_token_from_str special cases for ALL, MIC, MPP and DIR */
04120          /* If it finds one of these it returns Tok_Id, otherwise its      */
04121          /* Tok_Unknown if it can't find a directive or cmic name.         */
04122 
04123          switch(*cp) {
04124          case 'a':
04125 
04126             if (EQUAL_STRS(cp, "all")) {
04127                cmd_line_flags.disregard_all_directives  = TRUE;
04128                cmd_line_flags.disregard_all_dirs        = TRUE;
04129                cmd_line_flags.disregard_all_mics        = TRUE;
04130                cmd_line_flags.disregard_all_mips        = TRUE;
04131                cmd_line_flags.disregard_all_omps        = TRUE;
04132                cmd_line_flags.disregard_conditional_omp = TRUE;
04133                /* eraxxon: OpenAD directive */
04134                cmd_line_flags.disregard_all_openads     = TRUE;
04135             }
04136             else {
04137                ntr_msg_queue(0, 78, Log_Error, 0, cp, 'x', ARG_STR_ARG);
04138             }
04139             break;
04140 
04141          case 'c':
04142 
04143             if (EQUAL_STRS(cp, "conditional_omp")) {
04144                cmd_line_flags.disregard_conditional_omp = TRUE;
04145             }
04146             else {
04147                PRINTMSG (0, 78, Log_Error, 0, 'x', cp);
04148             }
04149             break;
04150 
04151 
04152          case 'd':
04153 
04154             if (EQUAL_STRS(cp, "dir")) {
04155                cmd_line_flags.disregard_all_dirs        = TRUE;
04156             }
04157             else {
04158                ntr_msg_queue(0, 78, Log_Error, 0, cp, 'x', ARG_STR_ARG);
04159             }
04160             break;
04161 
04162 
04163          case 'm':
04164 
04165             if (EQUAL_STRS(cp, "mic")) {
04166                cmd_line_flags.disregard_all_mics        = TRUE;
04167             }
04168             else if (EQUAL_STRS(cp, "mpp")) {
04169                cmd_line_flags.disregard_all_mpp_cdirs   = TRUE;
04170             }
04171             else if (EQUAL_STRS(cp, "mipspro")) {
04172                cmd_line_flags.disregard_all_mips        = TRUE;
04173             }
04174             else {
04175                ntr_msg_queue(0, 78, Log_Error, 0, cp, 'x', ARG_STR_ARG);
04176             }
04177             break;
04178 
04179 
04180          case 'o':
04181 
04182             if (EQUAL_STRS(cp, "omp")) {
04183                cmd_line_flags.disregard_all_omps        = TRUE;
04184                cmd_line_flags.disregard_conditional_omp = TRUE;
04185             }
04186             else if (EQUAL_STRS(cp, "openad")) {
04187                /* eraxxon: OpenAD directive */          
04188                cmd_line_flags.disregard_all_openads     = TRUE;
04189             }
04190             else {
04191                PRINTMSG (0, 78, Log_Error, 0, 'x', cp);
04192             }
04193             break;
04194 
04195 
04196          default:
04197             ntr_msg_queue(0, 78, Log_Error, 0, cp, 'x', ARG_STR_ARG);
04198             break;
04199          }
04200       }
04201       else if (tok_type == Tok_Unknown) {
04202          ntr_msg_queue(0, 78, Log_Error, 0, cp, 'x', ARG_STR_ARG);
04203       }
04204       else {
04205 
04206          if (tok_type > Tok_Dir_Start && tok_type < Tok_Dir_End) {
04207             disregard_directive[tok_type - Tok_Dir_Start]       = TRUE;
04208          }
04209          if (tok_type > Tok_Mic_Start && tok_type < Tok_Mic_End) {
04210             disregard_mics[tok_type - Tok_Mic_Start]            = TRUE;
04211          }
04212          if (tok_type > Tok_SGI_Dir_Start && tok_type < Tok_SGI_Dir_End) {
04213             disregard_mips[tok_type - Tok_SGI_Dir_Start]        = TRUE;
04214          }
04215          if (tok_type > Tok_Open_Mp_Dir_Start && 
04216              tok_type < Tok_Open_Mp_Dir_End) {
04217             disregard_open_mp[tok_type - Tok_Open_Mp_Dir_Start] = TRUE;
04218          }
04219 
04220          /* eraxxon: OpenAD directive: do not support selective disabling */
04221 
04222          /* We need to handle the legal directives, vs the tokens that */
04223          /* are actually parameters to the directives.   We also need  */
04224          /* to handle the situation of having the same directive  with */
04225          /* different prefixes.  The following list is all valid dirs  */
04226          /* that can be specified on the -x commandline.  We will      */
04227          /* issue an error if the specified token is not one of the    */
04228          /* listed tokens.  We also look for duplicate names and set   */
04229          /* the token for all possible prefixes.                       */
04230 
04231          switch(tok_type) {
04232 
04233          /* Handle duplicate directive names, by setting the bit for them all */
04234 
04235          case Tok_Dir_Barrier :          /* CRAFT dir - obsolete */
04236          case Tok_SGI_Dir_Barrier :
04237          case Tok_Open_Mp_Dir_Barrier :
04238             disregard_directive[Tok_Dir_Barrier - Tok_Dir_Start]        = TRUE;
04239             disregard_mips[Tok_SGI_Dir_Barrier - Tok_SGI_Dir_Start]     = TRUE;
04240             disregard_open_mp[Tok_Open_Mp_Dir_Barrier - 
04241                               Tok_Open_Mp_Dir_Start]                    = TRUE;
04242             break;
04243 
04244          case Tok_Dir_Blockable :
04245          case Tok_SGI_Dir_Blockable :
04246             disregard_directive[Tok_Dir_Blockable - Tok_Dir_Start]      = TRUE;
04247             disregard_mips[Tok_SGI_Dir_Blockable - Tok_SGI_Dir_Start]   = TRUE;
04248             break;
04249 
04250          case Tok_Dir_Blockingsize :
04251          case Tok_SGI_Dir_Blockingsize :
04252             disregard_directive[Tok_Dir_Blockingsize - Tok_Dir_Start]   = TRUE;
04253             disregard_mips[Tok_SGI_Dir_Blockingsize - Tok_SGI_Dir_Start]= TRUE;
04254             break;
04255 
04256          case Tok_Dir_Concurrent :
04257          case Tok_SGI_Dir_Concurrent :
04258             disregard_directive[Tok_Dir_Concurrent - Tok_Dir_Start]     = TRUE;
04259             disregard_mips[Tok_SGI_Dir_Concurrent - Tok_SGI_Dir_Start]  = TRUE;
04260             break;
04261 
04262 
04263          case Tok_Open_Mp_Dir_Copyin :   /* Keyword */
04264          case Tok_SGI_Dir_Copyin :
04265             disregard_mips[Tok_SGI_Dir_Copyin - Tok_SGI_Dir_Start]      = TRUE;
04266             break;
04267 
04268          case Tok_Dir_Critical :      /* CRAFT dir - obsolete */
04269          case Tok_Open_Mp_Dir_Critical :
04270             disregard_directive[Tok_Dir_Critical - Tok_Dir_Start]       = TRUE;
04271             disregard_open_mp[Tok_Open_Mp_Dir_Critical - 
04272                               Tok_Open_Mp_Dir_Start]                    = TRUE;
04273             break;
04274 
04275          case Tok_Open_Mp_Dir_Distribute :
04276          case Tok_SGI_Dir_Distribute :
04277             disregard_mips[Tok_SGI_Dir_Distribute - Tok_SGI_Dir_Start]  = TRUE;
04278             disregard_open_mp[Tok_Open_Mp_Dir_Distribute - 
04279                               Tok_Open_Mp_Dir_Start]                    = TRUE;
04280             break;
04281 
04282          case Tok_Open_Mp_Dir_Distribute_Reshape :
04283          case Tok_SGI_Dir_Distribute_Reshape :
04284             disregard_mips[Tok_SGI_Dir_Distribute_Reshape - 
04285                            Tok_SGI_Dir_Start]                           = TRUE;
04286             disregard_open_mp[Tok_Open_Mp_Dir_Distribute_Reshape - 
04287                               Tok_Open_Mp_Dir_Start]                    = TRUE;
04288             break;
04289 
04290          case Tok_Open_Mp_Dir_Do :
04291          case Tok_SGI_Dir_Do :              /* Keyword */
04292             disregard_open_mp[Tok_Open_Mp_Dir_Do - 
04293                               Tok_Open_Mp_Dir_Start]                    = TRUE;
04294             break;
04295 
04296          case Tok_Dir_Dynamic :             /* Obsolete */
04297          case Tok_Open_Mp_Dir_Dynamic :
04298          case Tok_SGI_Dir_Dynamic :
04299             disregard_directive[Tok_Dir_Dynamic - Tok_Dir_Start]        = TRUE;
04300             disregard_mips[Tok_SGI_Dir_Dynamic - Tok_SGI_Dir_Start]     = TRUE;
04301             disregard_open_mp[Tok_Open_Mp_Dir_Dynamic - 
04302                               Tok_Open_Mp_Dir_Start]                    = TRUE;
04303             break;
04304 
04305          case Tok_Dir_Endcritical :        /* CRAFT directive */
04306          case Tok_Open_Mp_Dir_Endcritical :
04307             disregard_directive[Tok_Dir_Endcritical - Tok_Dir_Start]    = TRUE;
04308             disregard_open_mp[Tok_Open_Mp_Dir_Endcritical - 
04309                               Tok_Open_Mp_Dir_Start]                    = TRUE;
04310             break;
04311 
04312          case Tok_Dir_Endmaster :          /* CRAFT directive */
04313          case Tok_Open_Mp_Dir_Endmaster :
04314             disregard_directive[Tok_Dir_Endmaster - Tok_Dir_Start]      = TRUE;
04315             disregard_open_mp[Tok_Open_Mp_Dir_Endmaster - 
04316                               Tok_Open_Mp_Dir_Start]                    = TRUE;
04317             break;
04318 
04319          case Tok_Open_Mp_Dir_Endparallel :
04320          case Tok_SGI_Dir_Endparallel :
04321          case Tok_Mic_End_Parallel :
04322             disregard_mics[Tok_Mic_End_Parallel - Tok_Mic_Start]        = TRUE;
04323             disregard_mips[Tok_SGI_Dir_Endparallel - Tok_SGI_Dir_Start] = TRUE;
04324             disregard_open_mp[Tok_Open_Mp_Dir_Endparallel - 
04325                               Tok_Open_Mp_Dir_Start]                    = TRUE;
04326             break;
04327 
04328          case Tok_Open_Mp_Dir_Flush :
04329          case Tok_SGI_Dir_Flush :
04330             disregard_mips[Tok_SGI_Dir_Flush - Tok_SGI_Dir_Start]       = TRUE;
04331             disregard_open_mp[Tok_Open_Mp_Dir_Flush - 
04332                               Tok_Open_Mp_Dir_Start]                    = TRUE;
04333             break;
04334 
04335          case Tok_Dir_Inline :
04336          case Tok_SGI_Dir_Inline :
04337             disregard_directive[Tok_Dir_Inline - Tok_Dir_Start]         = TRUE;
04338             disregard_mips[Tok_SGI_Dir_Inline - Tok_SGI_Dir_Start]      = TRUE;
04339             break;
04340 
04341          case Tok_Dir_Interchange :
04342          case Tok_SGI_Dir_Interchange :
04343             disregard_directive[Tok_Dir_Interchange - Tok_Dir_Start]    = TRUE;
04344             disregard_mips[Tok_SGI_Dir_Interchange - Tok_SGI_Dir_Start] = TRUE;
04345             break;
04346 
04347          case Tok_Dir_Master :                 /* CRAFT directive */
04348          case Tok_Open_Mp_Dir_Master :
04349             disregard_directive[tok_type - Tok_Dir_Start]               = TRUE;
04350             disregard_open_mp[tok_type - Tok_Open_Mp_Dir_Start]         = TRUE;
04351             break;
04352 
04353          case Tok_Dir_Maxcpus :
04354          case Tok_Mic_Maxcpus :        /* Keyword */
04355             disregard_directive[Tok_Dir_Maxcpus - Tok_Dir_Start]        = TRUE;
04356             break;
04357 
04358          case Tok_Dir_Noblocking :
04359          case Tok_SGI_Dir_Noblocking :
04360             disregard_directive[Tok_Dir_Noblocking - Tok_Dir_Start]     = TRUE;
04361             disregard_mips[Tok_SGI_Dir_Noblocking - Tok_SGI_Dir_Start]  = TRUE;
04362             break;
04363 
04364          case Tok_Dir_Noinline :
04365          case Tok_SGI_Dir_Noinline :
04366             disregard_directive[Tok_Dir_Noinline - Tok_Dir_Start]       = TRUE;
04367             disregard_mips[Tok_SGI_Dir_Noinline - Tok_SGI_Dir_Start]    = TRUE;
04368             break;
04369 
04370          case Tok_Dir_Nointerchange :
04371          case Tok_SGI_Dir_Nointerchange :
04372             disregard_directive[Tok_Dir_Nointerchange - Tok_Dir_Start]  = TRUE;
04373             disregard_mips[Tok_SGI_Dir_Nointerchange - 
04374                            Tok_SGI_Dir_Start]                           = TRUE;
04375             break;
04376 
04377          case Tok_Dir_Norecurrence :
04378          case Tok_SGI_Dir_Norecurrence :  /* Keyword */
04379             disregard_directive[Tok_SGI_Dir_Norecurrence - Tok_Dir_Start]= TRUE;
04380             break;
04381 
04382 
04383          case Tok_SGI_Dir_Ordered :   /* Keyword */
04384          case Tok_Open_Mp_Dir_Ordered :
04385             disregard_mips[Tok_SGI_Dir_Ordered - Tok_SGI_Dir_Start]     = TRUE;
04386             disregard_open_mp[Tok_Open_Mp_Dir_Ordered - 
04387                               Tok_Open_Mp_Dir_Start]                    = TRUE;
04388             break;
04389 
04390          case Tok_SGI_Dir_Page_Place :
04391          case Tok_Open_Mp_Dir_Page_Place :
04392             disregard_mips[Tok_SGI_Dir_Page_Place - Tok_SGI_Dir_Start]  = TRUE;
04393             disregard_open_mp[Tok_Open_Mp_Dir_Page_Place - 
04394                               Tok_Open_Mp_Dir_Start]                    = TRUE;
04395             break;
04396 
04397          case Tok_Mic_Parallel :
04398          case Tok_SGI_Dir_Parallel :
04399          case Tok_Open_Mp_Dir_Parallel :
04400             disregard_mics[Tok_Mic_Parallel - Tok_Mic_Start]            = TRUE;
04401             disregard_mips[Tok_SGI_Dir_Parallel - Tok_SGI_Dir_Start]    = TRUE;
04402             disregard_open_mp[Tok_Open_Mp_Dir_Parallel - 
04403                               Tok_Open_Mp_Dir_Start]                    = TRUE;
04404             break;
04405 
04406          case Tok_SGI_Dir_Paralleldo :
04407          case Tok_Open_Mp_Dir_Paralleldo :
04408             disregard_mips[Tok_SGI_Dir_Paralleldo - Tok_SGI_Dir_Start]  = TRUE;
04409             disregard_open_mp[Tok_Open_Mp_Dir_Paralleldo - 
04410                               Tok_Open_Mp_Dir_Start]                    = TRUE;
04411             break;
04412 
04413          case Tok_Open_Mp_Dir_Parallelworkshare :
04414             disregard_open_mp[tok_type - Tok_Open_Mp_Dir_Start]         = TRUE;
04415             break;
04416 
04417          case Tok_Mic_Permutation :
04418          case Tok_SGI_Dir_Permutation :   /* Keyword */
04419             disregard_mics[Tok_Mic_Permutation - Tok_Mic_Start] = TRUE;
04420             break;
04421 
04422          case Tok_SGI_Dir_Redistribute :
04423          case Tok_Open_Mp_Dir_Redistribute :
04424             disregard_mips[Tok_SGI_Dir_Redistribute - Tok_SGI_Dir_Start]= TRUE;
04425             disregard_open_mp[Tok_Open_Mp_Dir_Redistribute - 
04426                               Tok_Open_Mp_Dir_Start]                    = TRUE;
04427             break;
04428 
04429          case Tok_SGI_Dir_Section :
04430          case Tok_Open_Mp_Dir_Section :
04431             disregard_mips[Tok_SGI_Dir_Section - Tok_SGI_Dir_Start]     = TRUE;
04432             disregard_open_mp[Tok_Open_Mp_Dir_Section - 
04433                               Tok_Open_Mp_Dir_Start]                    = TRUE;
04434             break;
04435 
04436          case Tok_Dir_Shared :          /* CRAFT directive */
04437          case Tok_Open_Mp_Dir_Shared :  /* Keyword */
04438          case Tok_SGI_Dir_Shared :      /* Keyword */
04439             disregard_directive[Tok_Dir_Shared - Tok_Dir_Start]         = TRUE;
04440             break;
04441 
04442          case Tok_Dir_Single :           /* Keyword */
04443          case Tok_Open_Mp_Dir_Single :
04444             disregard_open_mp[Tok_Open_Mp_Dir_Single - 
04445                               Tok_Open_Mp_Dir_Start]                    = TRUE;
04446             break;
04447 
04448          case Tok_Open_Mp_Dir_Workshare :
04449             disregard_open_mp[Tok_Open_Mp_Dir_Workshare - 
04450                               Tok_Open_Mp_Dir_Start]                    = TRUE;
04451             break;
04452 
04453          case Tok_Dir_Taskcommon :
04454          case Tok_Mic_Taskcommon :  /* Unsupported */
04455             disregard_directive[Tok_Dir_Taskcommon - Tok_Dir_Start]     = TRUE;
04456             disregard_mics[Tok_Mic_Taskcommon - Tok_Mic_Start]          = TRUE;
04457             break;
04458 
04459          case Tok_Dir_Unroll :
04460          case Tok_SGI_Dir_Unroll :
04461             disregard_directive[Tok_Dir_Unroll - Tok_Dir_Start]         = TRUE;
04462             disregard_mips[Tok_SGI_Dir_Unroll - Tok_SGI_Dir_Start]      = TRUE;
04463             break;
04464 
04465          case Tok_Dir_Vector :
04466          case Tok_SGI_Dir_Vector :  /* Keyword */
04467             disregard_directive[Tok_Dir_Vector - Tok_Dir_Start]         = TRUE;
04468             break;
04469 
04470 
04471 
04472          case Tok_Dir_Align :
04473          case Tok_Dir_Auxiliary :
04474          case Tok_Dir_Bl :
04475          case Tok_Dir_Bounds :
04476          case Tok_Dir_Cache_Align :
04477          case Tok_Dir_Cache_Bypass :
04478          case Tok_Dir_Cache_Noalloc :
04479          case Tok_Dir_Common :
04480          case Tok_Dir_Copy_Assumed_Shape :
04481          case Tok_Dir_Eject :
04482          case Tok_Dir_Flow :
04483          case Tok_Dir_Fixed :
04484          case Tok_Dir_Free :
04485          case Tok_Dir_Id :
04486          case Tok_Dir_Ignore_TKR :
04487          case Tok_Dir_Inline_Always :
04488          case Tok_Dir_Inline_Never :
04489          case Tok_Dir_Ivdep :
04490          case Tok_Dir_List :
04491          case Tok_Dir_Mark :
04492          case Tok_Dir_Modinline :
04493          case Tok_Dir_Name :
04494          case Tok_Dir_Nextscalar :
04495          case Tok_Dir_Nobl :
04496          case Tok_Dir_Nobounds :
04497          case Tok_Dir_Noflow :
04498          case Tok_Dir_Nolist :
04499          case Tok_Dir_Nomark :
04500          case Tok_Dir_Nomodinline :
04501          case Tok_Dir_Nopattern :
04502          case Tok_Dir_Nosideeffects :
04503          case Tok_Dir_Nosplit :
04504          case Tok_Dir_Nostream :
04505          case Tok_Dir_Notask :
04506          case Tok_Dir_Nounroll :
04507          case Tok_Dir_Novector :
04508          case Tok_Dir_Novsearch :
04509          case Tok_Dir_Pattern :
04510          case Tok_Dir_Preferstream :
04511          case Tok_Dir_Prefertask :
04512          case Tok_Dir_Prefervector :
04513          case Tok_Dir_Recurrence :
04514          case Tok_Dir_Shortloop :
04515          case Tok_Dir_Split :
04516          case Tok_Dir_Stack :
04517          case Tok_Dir_Stream :
04518          case Tok_Dir_Suppress :
04519          case Tok_Dir_Symmetric :
04520          case Tok_Dir_System_Module :
04521          case Tok_Dir_Task :
04522          case Tok_Dir_Uses_Eregs :
04523          case Tok_Dir_Vfunction :
04524          case Tok_Dir_Vsearch :
04525             break;
04526 
04527 
04528          case Tok_Mic_Case :
04529          case Tok_Mic_End_Case :
04530          case Tok_Mic_Cncall :
04531          case Tok_Mic_Do_All :
04532          case Tok_Mic_Do_Parallel :
04533          case Tok_Mic_End_Do :
04534          case Tok_Mic_Guard :
04535          case Tok_Mic_End_Guard :
04536          case Tok_Mic_Numcpus :
04537          case Tok_Mic_Wait :
04538          case Tok_Mic_Send :
04539             break;
04540 
04541 
04542          /* OpenMp directives. */
04543 
04544          case Tok_Open_Mp_Dir_Atomic :
04545          case Tok_Open_Mp_Dir_Enddo :
04546          case Tok_Open_Mp_Dir_Endordered :
04547          case Tok_Open_Mp_Dir_Endparalleldo :
04548          case Tok_Open_Mp_Dir_Endparallelsections :
04549          case Tok_Open_Mp_Dir_Endparallelworkshare :
04550          case Tok_Open_Mp_Dir_Endsections :
04551          case Tok_Open_Mp_Dir_Endsingle :
04552          case Tok_Open_Mp_Dir_Endworkshare :
04553          case Tok_Open_Mp_Dir_Parallelsections :
04554          case Tok_Open_Mp_Dir_Sections :
04555          case Tok_Open_Mp_Dir_Threadprivate :
04556             break;
04557 
04558 
04559          /* eraxxon: OpenAD directive: do not support selective disabling */
04560 
04561          case Tok_OpenAD_Dir_XXX:
04562          case Tok_OpenAD_Dir_Dependent:
04563          case Tok_OpenAD_Dir_Independent:
04564          case Tok_OpenAD_Dir_Simple:
04565          case Tok_OpenAD_Dir_EndSimple:
04566            break;
04567 
04568 
04569          /* Mips directives */
04570 
04571          case Tok_SGI_Dir_Aggressiveinner :
04572          case Tok_SGI_Dir_Align_Symbol :
04573          case Tok_SGI_Dir_Assert :
04574          case Tok_SGI_Dir_Chunk :
04575          case Tok_SGI_Dir_Criticalsection :
04576          case Tok_SGI_Dir_Doacross :
04577          case Tok_SGI_Dir_Endcriticalsection :
04578          case Tok_SGI_Dir_Endpsections :
04579          case Tok_SGI_Dir_Endpsection :
04580          case Tok_SGI_Dir_Endpdo :
04581          case Tok_SGI_Dir_Endsingleprocess :
04582          case Tok_SGI_Dir_Fill_Symbol :
04583          case Tok_SGI_Dir_Fission :
04584          case Tok_SGI_Dir_Fissionable :
04585          case Tok_SGI_Dir_Fusable :
04586          case Tok_SGI_Dir_Fuse :
04587          case Tok_SGI_Dir_Ipa :
04588          case Tok_SGI_Dir_Limit :
04589          case Tok_SGI_Dir_Minconcurrent :
04590          case Tok_SGI_Dir_Mp_Schedtype :
04591          case Tok_SGI_Dir_Noconcurrentize :
04592          case Tok_SGI_Dir_Nofission :
04593          case Tok_SGI_Dir_Nofusion :
04594          case Tok_SGI_Dir_Noipa :
04595          case Tok_SGI_Dir_Opaque :
04596          case Tok_SGI_Dir_Optional :
04597          case Tok_SGI_Dir_Pdo :
04598          case Tok_SGI_Dir_Prefetch_Manual :
04599          case Tok_SGI_Dir_Prefetch_Ref :
04600          case Tok_SGI_Dir_Prefetch :
04601          case Tok_SGI_Dir_Prefetch_Ref_Disable :
04602          case Tok_SGI_Dir_Psection :
04603          case Tok_SGI_Dir_Psections :
04604          case Tok_SGI_Dir_Purpleconditional :
04605          case Tok_SGI_Dir_Purpleunconditional :
04606          case Tok_SGI_Dir_Regionbegin :
04607          case Tok_SGI_Dir_Regionend :
04608          case Tok_SGI_Dir_Section_Gp :
04609          case Tok_SGI_Dir_Section_Non_Gp :
04610          case Tok_SGI_Dir_Singleprocess :
04611             break;
04612 
04613          /* These are obsolete directives. */
04614 
04615          case Tok_Dir_Block :
04616          case Tok_Dir_Regfile :
04617          case Tok_Dir_Semextern :
04618          case Tok_Dir_Shortsequence :
04619          case Tok_Dir_Static :
04620          case Tok_Dir_Taskhead :
04621             issue_warning       = TRUE;
04622             break;
04623 
04624          /* Unsupported cmics */
04625 
04626          case Tok_Mic_Continue :
04627             issue_warning       = TRUE;
04628 
04629          /* CRAFT directives */
04630 
04631          case Tok_Dir_Atomicupdate :
04632          case Tok_Dir_Nobarrier :
04633             issue_warning       = TRUE;
04634             break;
04635 
04636          }  /* end switch */
04637 
04638          if (issue_warning) {
04639             PRINTMSG (0, 604, Log_Warning, 0, 'x', cp);
04640             issue_warning       = FALSE;
04641          }
04642       }
04643    }
04644 
04645    TRACE (Func_Exit, "process_x_option", NULL);
04646 
04647    return; 
04648  
04649 }  /* process_x_option */
04650  
04651 /******************************************************************************\
04652 |*                                                                            *|
04653 |* Description:                                                               *|
04654 |*      Process_M_option handles the command line message suppress option     *|
04655 |*      passed via argv (M switch).                                           *|
04656 |*                                                                            *|
04657 |* Input parameters:                                                          *|
04658 |*      optargs                 -M option arguments                           *|
04659 |*                                                                            *|
04660 |* Output parameters:                                                         *|
04661 |*      NONE                                                                  *|
04662 |*                                                                            *|
04663 |* Returns:                                                                   *|
04664 |*      NOTHING                                                               *|
04665 |*                                                                            *|
04666 \******************************************************************************/
04667 
04668 static void process_M_option (char *optargs) 
04669  
04670 { 
04671    char         *cp;
04672    long          msg_num;
04673    boolean       suppress;
04674    long         *table_ptr;
04675 
04676 
04677    TRACE (Func_Entry, "process_M_option", NULL);
04678 
04679    while (*optargs != EOS) {
04680 
04681       for (cp = optargs;
04682            *optargs != BLANK  &&  *optargs != COMMA  &&  *optargs != EOS;
04683            ++optargs);
04684 
04685       if (*optargs != EOS) {
04686          *optargs = EOS;
04687          *optargs++;
04688       }
04689 
04690       table_ptr = (long *) message_suppress_tbl;
04691       suppress  = TRUE;
04692 
04693       if (*cp == 'E') {
04694          *cp++;
04695          suppress       = FALSE;
04696          table_ptr      = (long *) message_error_tbl;
04697       }
04698       else if (*cp == 'W') {
04699          *cp++;
04700          suppress       = FALSE;
04701          table_ptr      = (long *) message_warning_tbl;
04702       }
04703       else if (*cp < '0' || *cp > '9') {    /* Not alphabetic */
04704          ntr_msg_queue(0, 78, Log_Error, 0, cp, 'M', ARG_STR_ARG);
04705       }
04706 
04707       msg_num = atoi(cp);
04708 
04709       if (msg_num < 0  || msg_num > (MAX_MSG_SIZE*HOST_BITS_PER_WORD) - 1) {
04710          ntr_msg_queue(0, 78, Log_Error, 0, cp, 'M', ARG_STR_ARG);
04711       }
04712       else {
04713 
04714          if (suppress && !GET_MESSAGE_TBL(message_suppress_tbl, msg_num)) {
04715             cmd_line_flags.num_msgs_suppressed++;
04716          }
04717 
04718          SET_MESSAGE_TBL(table_ptr, msg_num);
04719       }
04720    }
04721 
04722    TRACE (Func_Exit, "process_M_option", NULL);
04723 
04724    return; 
04725  
04726 }  /* process_M_option */
04727 
04728 
04729 /******************************************************************************\
04730 |*                                                                            *|
04731 |* Description:                                                               *|
04732 |*      Process_Y_option handles ccg dump options.                            *|
04733 |*                                                                            *|
04734 |* Input parameters:                                                          *|
04735 |*      optargs                 -Y option arguments                           *|
04736 |*                                                                            *|
04737 |* Output parameters:                                                         *|
04738 |*      NONE                                                                  *|
04739 |*                                                                            *|
04740 |* Returns:                                                                   *|
04741 |*      NOTHING                                                               *|
04742 |*                                                                            *|
04743 \******************************************************************************/
04744  
04745 static void process_Y_option (char *optargs)
04746 
04747 {
04748    int  ch;
04749 
04750 
04751    TRACE (Func_Entry, "process_Y_option", NULL);
04752 
04753 
04754    while (ch = *optargs++) {
04755 #ifdef _TARGET32
04756       ccg_dump_flags = ccg_dump_flags | (1 << ((ch - 'A') & 0x1F));
04757 #else
04758       ccg_dump_flags = ccg_dump_flags | (1 << (ch - 'A'));
04759 #endif
04760    }  /* while */
04761 
04762 
04763    TRACE (Func_Exit, "process_Y_option", NULL);
04764 
04765    return;
04766  
04767 }  /* process_Y_option */
04768 
04769 
04770 /******************************************************************************\
04771 |*                                                                            *|
04772 |* Description:                                                               *|
04773 |*      Set_prog_file_names processes the source file name on command line,   *|
04774 |*      if it exists, otherwise the default source file is 'stdin'.           *|
04775 |*                                                                            *|
04776 |* Input parameters:                                                          *|
04777 |*      argv                    last argument on cmd line is input file       *|
04778 |*                                                                            *|
04779 |* Output parameters:                                                         *|
04780 |*      NONE                                                                  *|
04781 |*                                                                            *|
04782 |* Returns:                                                                   *|
04783 |*      NOTHING                                                               *|
04784 |*                                                                            *|
04785 \******************************************************************************/
04786 
04787 static void set_prog_file_names (char *argv[])
04788 
04789 {
04790    extern       char    *optarg;                /* defined in getopt */
04791    extern       int     optind;                 /* defined in getopt */
04792 
04793                 int     fp_idx;
04794                 int     idx;
04795                 int     length;
04796                 char    *stp;
04797 
04798 
04799    TRACE (Func_Entry, "set_prog_file_names", NULL);
04800 
04801    /* optind points to the last argument;  if it exists, it is the file  */
04802    /* to be compiled;  if nothing is there, input is obtained from stdin */
04803 
04804    optarg = argv[optind];
04805 
04806    if (optarg == NULL) {                        /* 'stdin' is default input   */
04807       src_file[0] = EOS;
04808 
04809       /* make sure -b specified when binary file requested and input is stdin */
04810 
04811       if (binary_output  &&  bin_file[0] == EOS) {
04812 
04813          /* Name must be specified for file when input is from stdin. */
04814 
04815          ntr_msg_queue(0, 80, Log_Error, 0, "binary", 0, STR_ARG);
04816          binary_output = FALSE;
04817       }
04818 
04819       /* make sure -S specified when cal file requested and input is stdin */
04820 
04821       if (assembly_output  &&  assembly_file[0] == EOS) {
04822 
04823          /* Name must be specified for file when input is from stdin. */
04824 
04825          ntr_msg_queue(0, 80, Log_Error, 0, "assembly", 0, STR_ARG);
04826          assembly_output = FALSE;
04827       }
04828 
04829       if (on_off_flags.assembly_listing_file) {
04830          strcpy(assembly_listing_file, "stdout");
04831       }
04832 
04833       strcpy(debug_file_name, "stderr");
04834    }
04835    else {                                       /* named file[.f] is input    */
04836       strncpy (src_file, optarg, MAX_FILE_NAME_SIZE);
04837       src_file[MAX_FILE_NAME_SIZE-1] = EOS;
04838 
04839       /* generate default file name for binary file from input file[.f]  */
04840 
04841       if (binary_output && bin_file[0] == EOS) {
04842          MAKE_DEFAULT_NAME (bin_file, src_file, "o");
04843       }
04844 
04845       /* generate default file name for cal file from input file[.f]  */
04846 
04847       if (assembly_output  &&  assembly_file[0] == EOS) {
04848          MAKE_DEFAULT_NAME (assembly_file, src_file, "s");
04849       }
04850 
04851       if (on_off_flags.assembly_listing_file) {
04852          MAKE_DEFAULT_NAME (assembly_listing_file, src_file, "L");
04853       }
04854 
04855       /* Generate default file name for debug file from input file[.f]     */
04856       /* In some obscure cases, the debug file will have been written to   */
04857       /* before the commandline is processed or it may have been specified */
04858       /* on the command line via -ufile=<name>.  DO NOT change the name.   */
04859       /* Leave it as cft90_dump or as specified.  Otherwise name it        */
04860       /* src_file.l                                                        */
04861       if (debug_file_name[0] == NULL_CHAR) {
04862          MAKE_DEFAULT_NAME (debug_file_name, src_file, "l");
04863       }
04864 
04865       if (! set_source_form_option) {   /* Set fixed/free from src file name  */
04866          stp = strrchr (src_file, DOT);
04867 
04868          if (stp != NULL) {
04869 
04870             if (EQUAL_STRS(stp, ".f") ||
04871                 EQUAL_STRS(stp, ".F")) {
04872                cmd_line_flags.src_form  = Fixed_Form;
04873                source_form              = Fixed_Form;
04874             }
04875             else if (EQUAL_STRS(stp, ".f90") ||
04876                      EQUAL_STRS(stp, ".caf") ||
04877                      EQUAL_STRS(stp, ".F90")) {
04878                cmd_line_flags.src_form  = Free_Form;
04879                source_form              = Free_Form;
04880             }
04881          }
04882       }
04883 
04884 # if defined(_FRONTEND_CONDITIONAL_COMP)
04885       if (! no_preprocessing) {
04886          /* see if this is a .F or .F90 file */
04887          stp = strrchr (src_file, DOT);
04888 
04889          if (stp != NULL) {
04890 
04891             if (EQUAL_STRS(stp, ".F") ||
04892                 EQUAL_STRS(stp, ".F90")) {
04893 
04894                on_off_flags.preprocess = TRUE;
04895             }
04896          }
04897       }
04898 # endif
04899    }
04900 
04901    /* Check that any inlinefrom files will not be */ 
04902    /* overwritten by the main file compilation.   */
04903 
04904    fp_idx = inline_path_idx;
04905 
04906    while (fp_idx != NULL_IDX) {
04907 
04908       if (strcmp(bin_file, FP_NAME_PTR(fp_idx)) == 0) {
04909 
04910          /* This should use ntr_msg_queue but to do it would be messy. */
04911          /* So technically we cannot stop 1252 from issuing if it is   */
04912          /* used with the -M option.   kay                             */
04913 
04914          PRINTMSG(0, 1252, Log_Error, 0, bin_file, FP_NAME_PTR(fp_idx));
04915       }
04916       fp_idx = FP_NEXT_FILE_IDX(fp_idx);
04917    }
04918 
04919    if (cif_flags != 0  &&  cif_name[0] == '\0') {
04920       MAKE_DEFAULT_NAME (cif_name, src_file, "T");
04921    }
04922 
04923    if (on_off_flags.preprocess_only || on_off_flags.save_dot_i) {
04924       MAKE_DEFAULT_NAME (dot_i_file, src_file, "i");
04925    }
04926 
04927    /* Put the current directory into the module search path.  By putting */
04928    /* it here, it will be searched after all user specified files/dirs.  */
04929 
04930    TBL_REALLOC_CK(file_path_tbl, 1);
04931    CLEAR_TBL_NTRY(file_path_tbl, file_path_tbl_idx);
04932    FP_NAME_LEN(file_path_tbl_idx)       = 2;
04933    FP_NAME_IDX(file_path_tbl_idx)       = str_pool_idx + 1;
04934    FP_SRCH_THE_FILE(file_path_tbl_idx)  = TRUE;
04935    length                               = WORD_LEN(2);
04936 
04937    TBL_REALLOC_CK(str_pool, length);
04938 
04939    for (idx = FP_NAME_IDX(file_path_tbl_idx); idx <= str_pool_idx; idx++) {
04940       str_pool[idx].name_long           = 0;
04941    }
04942 
04943    strcpy(FP_NAME_PTR(file_path_tbl_idx), "./");
04944 
04945    if (module_path_idx != NULL_IDX) {
04946       idx = module_path_idx;
04947 
04948       while (FP_NEXT_FILE_IDX(idx) != NULL_IDX) {
04949          idx = FP_NEXT_FILE_IDX(idx);
04950       }
04951       FP_NEXT_FILE_IDX(idx)             = file_path_tbl_idx;
04952    }
04953    else {
04954       module_path_idx = file_path_tbl_idx;
04955    }
04956 
04957    set_system_module_path();
04958 
04959    TRACE (Func_Exit, "set_prog_file_names", NULL);
04960 
04961    return;
04962 
04963 }  /* set_prog_file_names */
04964 
04965 
04966 /* # ifdef _DEBUG */
04967 /******************************************************************************\
04968 |*                                                                            *|
04969 |* Description:                                                               *|
04970 |*      Prints a description of the debug items available to stderr.          *|
04971 |*                                                                            *|
04972 |* Input parameters:                                                          *|
04973 |*      NONE                                                                  *|
04974 |*                                                                            *|
04975 |* Output parameters:                                                         *|
04976 |*      NONE                                                                  *|
04977 |*                                                                            *|
04978 |* Returns:                                                                   *|
04979 |*      NOTHING                                                               *|
04980 |*                                                                            *|
04981 \******************************************************************************/
04982 
04983 static  void    dump_help_screen(void)
04984 {
04985    int   i;
04986    char *info_str[] = {
04987              "The following options are available in a compiler with -u: ",
04988              " ",
04989              "abort_ansi       Abort compilation after first ANSI msg.",
04990              "cray_compatible  Sgi  turns s_default64 on, int1,2 off.",
04991              "f                Unimplemented - controls fortran output.",
04992              "dsm              Set by mongoose driver - not a user option.",
04993              "fmm              Controls f-- prototype.",
04994              "fmm1             Controls f-- prototype.",
04995              "fmm2             Controls f-- prototype.",
04996              "mod_version      Prints each module version number being read in",
04997              "mp               Allow recognition of the SGI directives.",
04998              "no_dim_pad       Do not pad out missing dimensions.",
04999              "no_mod_output    Do not do module output.",
05000              "open_mp          Allow recognition of the open mp directives.",
05001              "pack_half_word   Turn on component packing for sdefault32",
05002              "preinline=       Create an inline template for this file.",
05003              "pvp_test         Used for meta development.",
05004              "show             Show input command line to frontend.",
05005              " ",
05006              "The following options are available in a debug compiler with -u:",
05007              " ",
05008              "all              Dump all tables.  Do not do any tracing.",
05009              "bd               Dump the bounds table.",
05010              "blk              Dump the Block Stack.",
05011              "cmd              Dump the commandline table.",
05012              "cn               Dump the Constant table.",
05013              "defines          Dump the build definitions.",
05014              "file=            Specify the name of the debug output file.",
05015              "fortran          Dump the output IR in a Fortran format.",
05016              "fp               Dump the File Path table.",
05017              "ftrace           Activate the function trace.",
05018              "gl               Dump the Global Line table.",
05019              "intrin           Dump the Intrinsic table.",
05020              "ir1              Dump the IR after Pass 1.",
05021              "ir2              Dump the IR after Pass 2.",
05022              "ir3              Dump the IR after inlining.",
05023              "ir4              Dump the IR after swapping dimensions.",
05024              "mem_report       Provide a report of front-end memory usage.",
05025              "msg              Issue an abort for all zero line numbers.",
05026              "mtrace           Trace front-end memory usage.",
05027              "names            Dump the local, global and hidden name tables.",
05028              "pdg              Dump all calls to the PGDCS interface.",
05029              "pdt              Dump PDT info while searching for modules.",
05030              "sb               Dump the Storage Block table.",
05031              "scp              Dump the scope table.",
05032              "src              Dump whole source program.",
05033              "stderr           Output msgs to stderr rather than ordering.",
05034              "stmt             Dump each statement.",
05035              "sytb             Dump the symbol table.",
05036              "typ              Dump the Type table.",
05037              "cnout            Dump constants as binary to stdout.",
05038              "DONE" };
05039 
05040    TRACE (Func_Entry, "dump_help_screen", NULL);
05041 
05042    i = 0;
05043 
05044    while (strcmp(info_str[i],"DONE")) fprintf(stderr, "%s\n", info_str[i++]);
05045 
05046    TRACE (Func_Exit, "dump_help_screen", NULL);
05047 
05048    return;
05049 
05050 }  /* dump_help_screen */
05051 
05052 /* # endif */
05053 
05054 
05055 /******************************************************************************\
05056 |*                                                                            *|
05057 |* Description:                                                               *|
05058 |*      Add path names to the file path table.  Used by both -p and -I.       *|
05059 |*                                                                            *|
05060 |* Input parameters:                                                          *|
05061 |*      NONE                                                                  *|
05062 |*                                                                            *|
05063 |* Output parameters:                                                         *|
05064 |*      NONE                                                                  *|
05065 |*                                                                            *|
05066 |* Returns:                                                                   *|
05067 |*      NOTHING                                                               *|
05068 |*                                                                            *|
05069 \******************************************************************************/
05070 
05071 static  void    add_to_fp_table(char    *optargs,
05072                                 int     *start_idx,
05073                                 int      option)
05074 
05075 {
05076    int           fp_idx;
05077    int           length;
05078    char          path_name[MAX_FILE_NAME_SIZE];
05079 
05080 
05081    TRACE (Func_Entry, "add_to_fp_table", NULL);
05082 
05083    TBL_REALLOC_CK(file_path_tbl, 1);
05084    CLEAR_TBL_NTRY(file_path_tbl, file_path_tbl_idx);
05085 
05086    if (*start_idx == NULL_IDX) {
05087       *start_idx        = file_path_tbl_idx;
05088    }
05089    else {
05090       fp_idx = *start_idx;
05091 
05092       /* Find the end of the list of files/paths.  These must be ordered. */
05093 
05094       while (FP_NEXT_FILE_IDX(fp_idx) != NULL_IDX) {
05095          fp_idx = FP_NEXT_FILE_IDX(fp_idx);
05096       }
05097       FP_NEXT_FILE_IDX(fp_idx)          = file_path_tbl_idx;
05098    }
05099       
05100    FP_NAME_IDX(file_path_tbl_idx)       = str_pool_idx + 1;
05101    length                               = strlen(optargs);
05102 
05103    if (option == 'p' || option == 'O') {   /* module path option */
05104       FP_SRCH_THE_FILE(file_path_tbl_idx)       = TRUE;
05105    }
05106    else {
05107 
05108       FP_CLASS(file_path_tbl_idx)       = Include_Fp;
05109 
05110       if (optargs[0] != SLASH)
05111 
05112       {
05113          /* make relative path prefix absolute */
05114 
05115          getcwd (path_name, MAX_FILE_NAME_SIZE);
05116          length += strlen(path_name) + 1;
05117       }
05118    }
05119 
05120    FP_NAME_LEN(file_path_tbl_idx) = length;
05121 
05122    TBL_REALLOC_CK(str_pool, WORD_LEN(length));
05123 
05124    str_pool[str_pool_idx].name_long = 0; /* Zero out last word */
05125 
05126    if (option == 'p' || option == 'O' || optargs[0] == SLASH)
05127      {
05128       strcpy(FP_NAME_PTR(file_path_tbl_idx), optargs);
05129    }
05130    else {  /* Hardcoding a path name here for inlining only */
05131       strcpy(FP_NAME_PTR(file_path_tbl_idx), path_name);
05132       strcat(FP_NAME_PTR(file_path_tbl_idx), "/");
05133       strcat(FP_NAME_PTR(file_path_tbl_idx), optargs);
05134    }
05135 
05136    TRACE (Func_Exit, "add_to_fp_table", NULL);
05137 
05138    return;
05139 
05140 }  /* add_to_fp_table */
05141 
05142 /******************************************************************************\
05143 |*                                                                            *|
05144 |* Description:                                                               *|
05145 |*      process_P_option handles position independent code model options      *|
05146 |*                                                                            *|
05147 |* Input parameters:                                                          *|
05148 |*      optargs                 -P option arguments                           *|
05149 |*                                                                            *|
05150 |* Output parameters:                                                         *|
05151 |*      NONE                                                                  *|
05152 |*                                                                            *|
05153 |* Returns:                                                                   *|
05154 |*      NOTHING                                                               *|
05155 |*                                                                            *|
05156 \******************************************************************************/
05157 
05158 static void process_P_option (char *optargs)
05159 
05160 {
05161 #  if defined(_ACCEPT_CMD_P)
05162    int           ch;
05163    char          err_str[2];
05164 #  endif
05165 
05166 
05167    TRACE (Func_Entry, "process_P_option", NULL);
05168 
05169 #  if defined(_ACCEPT_CMD_P)
05170       while (ch = *optargs++) {
05171 
05172          switch (ch) {
05173          case 'l':
05174             cmd_line_flags.large_pic_model      = TRUE;
05175             break;
05176 
05177          case 's':
05178             cmd_line_flags.small_pic_model      = TRUE;
05179             break;
05180 
05181          default:
05182             err_str[0] = ch;
05183             err_str[1] = EOS;
05184 
05185             /* option has an invalid argument */
05186 
05187             ntr_msg_queue(0, 78, Log_Error, 0, err_str, 'P', ARG_STR_ARG);
05188             break;
05189          }       /* switch */
05190       }  /* while */
05191 #  else  /* Unsupported */
05192       ntr_msg_queue(0, 797, Log_Warning, 0, (char *) NULL, 'P' ,ARG_ARG);
05193 #  endif
05194  
05195    TRACE (Func_Exit, "process_P_option", NULL);
05196 
05197    return;
05198 
05199 }  /* process_P_option */
05200 
05201 /******************************************************************************\
05202 |*                                                                            *|
05203 |* Description:                                                               *|
05204 |*      Process memory option.                                                *|
05205 |*                                                                            *|
05206 |* Input parameters:                                                          *|
05207 |*      NONE                                                                  *|
05208 |*                                                                            *|
05209 |* Output parameters:                                                         *|
05210 |*      NONE                                                                  *|
05211 |*                                                                            *|
05212 |* Returns:                                                                   *|
05213 |*      NOTHING                                                               *|
05214 |*                                                                            *|
05215 \******************************************************************************/
05216 
05217 static  void    process_a_option(char   *optargs)
05218 
05219 {
05220    char         *cp;
05221 
05222 #  if defined(_ACCEPT_CMD_a_pad)
05223           int            pad_amount;
05224 #  endif
05225 
05226 
05227    TRACE (Func_Entry, "process_a_option", NULL);
05228 
05229    while (*optargs != EOS) {
05230 
05231       for (cp = optargs;
05232               *optargs != BLANK  &&  *optargs != COMMA  &&  *optargs != EOS;
05233               ++optargs) {
05234       }
05235 
05236       if (*optargs != EOS) {
05237           *optargs = EOS;
05238           *optargs++;
05239       }
05240 
05241 # if 0
05242       if (EQUAL_STRS(cp, "lign8")) {
05243 
05244 #        if defined(_ACCEPT_CMD_align)
05245             cmd_line_flags.align8       = TRUE;
05246 #        else
05247             ntr_msg_queue(0, 744, Log_Warning, 0, "align8", 'a', ARG_STR_ARG);
05248 #        endif
05249       }
05250       else if (EQUAL_STRS(cp, "lign16")) {
05251 
05252 #        if defined(_ACCEPT_CMD_align)
05253             cmd_line_flags.align16      = TRUE;
05254 #        else
05255             ntr_msg_queue(0, 744, Log_Warning, 0, "align16", 'a', ARG_STR_ARG);
05256 #        endif
05257       }
05258 # endif
05259       if (EQUAL_STRS(cp, "lign32")) {
05260 
05261 #        if defined(_ACCEPT_CMD_align)
05262             cmd_line_flags.align32      = TRUE;
05263 #        else
05264             ntr_msg_queue(0, 744, Log_Warning, 0, "align32", 'a', ARG_STR_ARG);
05265 #        endif
05266       }
05267       else if (EQUAL_STRS(cp, "lign64")) {
05268 
05269 #        if defined(_ACCEPT_CMD_align)
05270             cmd_line_flags.align64      = TRUE;
05271             cmd_line_flags.dalign       = TRUE;  /* Means the same thing. */
05272 #        else
05273             ntr_msg_queue(0, 744, Log_Warning, 0, "align64", 'a', ARG_STR_ARG);
05274 #        endif
05275       }
05276       else if (EQUAL_STRS(cp, "dalign")) {
05277 
05278 #        if defined(_ACCEPT_CMD_a_dalign)
05279             cmd_line_flags.dalign       = TRUE;
05280 #        else
05281             ntr_msg_queue(0, 744, Log_Warning, 0, "dalign", 'a', ARG_STR_ARG);
05282 #        endif
05283       }
05284       else if (EQUAL_STRS(cp, "static_threadprivate")) {
05285 
05286 #        if defined(_ACCEPT_CMD_a_static_threadprivate)
05287             cmd_line_flags.static_threadprivate = TRUE;
05288 #        else
05289             ntr_msg_queue(0, 744, Log_Warning, 0, "static_threadprivate",
05290                                                   'a', ARG_STR_ARG);
05291 #        endif
05292       }
05293       else if (EQUAL_STRS(cp, "taskcommon")) {
05294 
05295 #        if !defined(_TASK_COMMON_EXTENSION)
05296             ntr_msg_queue(0, 744, Log_Warning, 0,
05297                           "taskcommon", 'a', ARG_STR_ARG);
05298 #        else
05299             cmd_line_flags.taskcommon   = TRUE;
05300 #        endif
05301       }
05302       else if (strncmp(cp, "pad", 3) == 0) {
05303 
05304 #        if defined(_ACCEPT_CMD_a_pad)
05305             cp                         +=3 ;
05306 
05307             if (*cp != EOS) {
05308                pad_amount = atoi(cp);
05309 
05310                if (pad_amount <= 0 || pad_amount >= 4096) {
05311                   ntr_msg_queue(0, 1251, Log_Error, 0,
05312                                 (char *) NULL, pad_amount, ARG_ARG);
05313                }
05314             }
05315             else {
05316                pad_amount = 0;
05317             }
05318  
05319             cmd_line_flags.pad          = TRUE;
05320             cmd_line_flags.pad_amount   = pad_amount;
05321 #        else
05322             ntr_msg_queue(0, 744, Log_Warning, 0, "pad", 'a', ARG_STR_ARG);
05323 #        endif
05324       }
05325       else { /* option has an invalid argument */
05326          ntr_msg_queue(0, 78, Log_Error, 0, cp, 'a', ARG_STR_ARG);
05327       }
05328 
05329    }  /* while */
05330 
05331             
05332    TRACE (Func_Exit, "process_a_option", NULL);
05333 
05334    return;
05335 
05336 }  /* process_a_option */
05337 
05338 /******************************************************************************\
05339 |*                                                                            *|
05340 |* Description:                                                               *|
05341 |*      Add use names to the file path table for implicit use.                *|
05342 |*                                                                            *|
05343 |* Input parameters:                                                          *|
05344 |*      NONE                                                                  *|
05345 |*                                                                            *|
05346 |* Output parameters:                                                         *|
05347 |*      NONE                                                                  *|
05348 |*                                                                            *|
05349 |* Returns:                                                                   *|
05350 |*      NOTHING                                                               *|
05351 |*                                                                            *|
05352 \******************************************************************************/
05353 
05354 static  void    process_A_option(char   *optargs)
05355 
05356 {
05357    boolean       found_one;
05358    int           fp_idx;
05359    int           idx;
05360    int           length;
05361    char         *module_name;
05362    int           start_idx;
05363    char         *str_ptr;
05364 
05365 
05366    TRACE (Func_Entry, "process_A_option", NULL);
05367 
05368    start_idx    = file_path_tbl_idx + 1;
05369    found_one    = FALSE;
05370       
05371    while (*optargs != EOS) {
05372 
05373       for (module_name = optargs;
05374           *optargs != BLANK  &&  *optargs != COMMA  &&  *optargs != EOS;
05375           ++optargs);
05376 
05377       if (*optargs != EOS) {
05378          *optargs = EOS;
05379          *optargs++;
05380       }
05381 
05382       if (found_one) {  /* Second or subsequent time through */
05383          FP_NEXT_FILE_IDX(file_path_tbl_idx) = file_path_tbl_idx + 1;
05384       }
05385 
05386       TBL_REALLOC_CK(file_path_tbl, 1);
05387       CLEAR_TBL_NTRY(file_path_tbl, file_path_tbl_idx);
05388 
05389       found_one                 = TRUE;
05390       FP_NAME_IDX(file_path_tbl_idx)    = str_pool_idx + 1;
05391       length                            = strlen(module_name);
05392       FP_CLASS(file_path_tbl_idx)       = Unknown_Fp;
05393       FP_NAME_LEN(file_path_tbl_idx)    = length;
05394 
05395       TBL_REALLOC_CK(str_pool, WORD_LEN(length));
05396 
05397       str_pool[str_pool_idx].name_long = 0; /* Zero out last word */
05398 
05399       str_ptr   = &str_pool[FP_NAME_IDX(file_path_tbl_idx)].name_char;
05400 
05401       for (idx = 0;  idx < length;  idx++) {
05402          str_ptr[idx] = toupper(module_name[idx]);
05403       }
05404    }
05405 
05406    if (found_one) {
05407 
05408       if (cmd_line_flags.implicit_use_idx == NULL_IDX) {
05409          cmd_line_flags.implicit_use_idx        = start_idx;
05410       }
05411       else {
05412          fp_idx = cmd_line_flags.implicit_use_idx;
05413 
05414          /* Find the end of the list of files/paths.  These must be ordered. */
05415 
05416          while (FP_NEXT_FILE_IDX(fp_idx) != NULL_IDX) {
05417             fp_idx = FP_NEXT_FILE_IDX(fp_idx);
05418          }
05419          FP_NEXT_FILE_IDX(fp_idx)               = start_idx;
05420       }
05421    }
05422 
05423    TRACE (Func_Exit, "process_A_option", NULL);
05424 
05425    return;
05426 
05427 }  /* process_A_option */
05428 
05429 /******************************************************************************\
05430 |*                                                                            *|
05431 |* Description:                                                               *|
05432 |*      Process binary option.                                                *|
05433 |*                                                                            *|
05434 |* Input parameters:                                                          *|
05435 |*      NONE                                                                  *|
05436 |*                                                                            *|
05437 |* Output parameters:                                                         *|
05438 |*      NONE                                                                  *|
05439 |*                                                                            *|
05440 |* Returns:                                                                   *|
05441 |*      NOTHING                                                               *|
05442 |*                                                                            *|
05443 \******************************************************************************/
05444 
05445 static  void    process_b_option(char   *optargs)
05446 
05447 {
05448 
05449    TRACE (Func_Entry, "process_b_option", NULL);
05450 
05451    /* issue warning if cal output is being overridden */
05452 
05453    if (cmd_line_flags.assembly_output) {
05454       ntr_msg_queue(0, 715, Log_Warning, 0, (char *) NULL, 0, NO_ARG);
05455       cmd_line_flags.assembly_output = FALSE;
05456     }
05457  
05458     cmd_line_flags.binary_output = TRUE;
05459     strncpy (bin_file, optargs, MAX_FILE_NAME_SIZE);
05460     bin_file[MAX_FILE_NAME_SIZE-1] = EOS;
05461 
05462    TRACE (Func_Exit, "process_b_option", NULL);
05463 
05464    return;
05465 
05466 }  /* process_b_option */
05467 
05468 /******************************************************************************\
05469 |*                                                                            *|
05470 |* Description:                                                               *|
05471 |*      Process source form option.                                           *|
05472 |*                                                                            *|
05473 |* Input parameters:                                                          *|
05474 |*      NONE                                                                  *|
05475 |*                                                                            *|
05476 |* Output parameters:                                                         *|
05477 |*      NONE                                                                  *|
05478 |*                                                                            *|
05479 |* Returns:                                                                   *|
05480 |*      NOTHING                                                               *|
05481 |*                                                                            *|
05482 \******************************************************************************/
05483 
05484 static  void    process_f_option(char   *optargs)
05485 
05486 {
05487 
05488    TRACE (Func_Entry, "process_f_option", NULL);
05489 
05490    if (EQUAL_STRS(optargs, "fixed")) {
05491       cmd_line_flags.src_form   = Fixed_Form;
05492       source_form               = Fixed_Form;
05493       set_source_form_option    = TRUE;
05494    }
05495    else if (EQUAL_STRS(optargs, "free")) {
05496       cmd_line_flags.src_form   = Free_Form;
05497       source_form               = Free_Form;
05498       set_source_form_option    = TRUE;
05499    }
05500    else {
05501       ntr_msg_queue(0, 78, Log_Error, 0, optargs, 'f', ARG_STR_ARG);
05502    }
05503 
05504    TRACE (Func_Exit, "process_f_option", NULL);
05505 
05506    return;
05507 
05508 }  /* process_f_option */
05509 
05510 /******************************************************************************\
05511 |*                                                                            *|
05512 |* Description:                                                               *|
05513 |*      Process integer option.                                               *|
05514 |*                                                                            *|
05515 |* Input parameters:                                                          *|
05516 |*      NONE                                                                  *|
05517 |*                                                                            *|
05518 |* Output parameters:                                                         *|
05519 |*      NONE                                                                  *|
05520 |*                                                                            *|
05521 |* Returns:                                                                   *|
05522 |*      NOTHING                                                               *|
05523 |*                                                                            *|
05524 \******************************************************************************/
05525 
05526 static  void    process_i_option(char   *optargs)
05527 {
05528 
05529    TRACE (Func_Entry, "process_i_option", NULL);
05530 
05531 
05532 
05533    set_i_option = TRUE;
05534 
05535   if (!EQUAL_STRS(optargs, "32"))
05536       printf("HERERERERE\n");
05537 
05538 
05539    if (!EQUAL_STRS(optargs, "32")) {
05540       ntr_msg_queue(0, 78, Log_Error, 0, optargs, 'i', ARG_STR_ARG);
05541    }
05542    else if (opt_flags.set_fastint_option) {
05543       ntr_msg_queue(0, 1192, Log_Warning, 0,
05544                     "-i\n-O fastint\n-O fastint",
05545                     0, MULT_STR_ARG);
05546    }
05547    else if (opt_flags.set_allfastint_option) {
05548       ntr_msg_queue(0, 1192, Log_Warning, 0,
05549                     "-i\n-O allfastint\n-O allfastint",
05550                     0, MULT_STR_ARG);
05551    }
05552    else if (opt_flags.set_nofastint_option) {
05553       ntr_msg_queue(0, 1192, Log_Warning, 0,
05554                     "-i\n-O nofastint\n-O nofastint",
05555                     0, MULT_STR_ARG);
05556    }
05557 
05558    cmd_line_flags.integer_32 = TRUE;
05559 
05560    TRACE (Func_Exit, "process_i_option", NULL);
05561 
05562    return;
05563 
05564 }  /* process_i_option */
05565 
05566 
05567 /******************************************************************************\
05568 |*                                                                            *|
05569 |* Description:                                                               *|
05570 |*      Process solaris profile option.                                       *|
05571 |*                                                                            *|
05572 |* Input parameters:                                                          *|
05573 |*      NONE                                                                  *|
05574 |*                                                                            *|
05575 |* Output parameters:                                                         *|
05576 |*      NONE                                                                  *|
05577 |*                                                                            *|
05578 |* Returns:                                                                   *|
05579 |*      NOTHING                                                               *|
05580 |*                                                                            *|
05581 \******************************************************************************/
05582 
05583 static  void    process_k_option(char   *optargs)
05584 
05585 {
05586 
05587    TRACE (Func_Entry, "process_k_option", NULL);
05588 
05589 #  if defined(_ACCEPT_CMD_k)
05590 
05591       if (EQUAL_STRS(optargs, "g") || EQUAL_STRS(optargs, "s")) {
05592          cmd_line_flags.solaris_profile = TRUE;
05593       }
05594       else {
05595          ntr_msg_queue(0, 78, Log_Error, 0, optargs, 'k', ARG_STR_ARG);
05596       }
05597 #  else  /* Unsupported */
05598       ntr_msg_queue(0, 797, Log_Warning, 0, (char *) NULL, 'k' ,ARG_ARG);
05599 #  endif
05600 
05601    TRACE (Func_Exit, "process_k_option", NULL);
05602 
05603    return;
05604 
05605 }  /* process_k_option */
05606 
05607 /******************************************************************************\
05608 |*                                                                            *|
05609 |* Description:                                                               *|
05610 |*      Process msg level option.                                             *|
05611 |*                                                                            *|
05612 |* Input parameters:                                                          *|
05613 |*      NONE                                                                  *|
05614 |*                                                                            *|
05615 |* Output parameters:                                                         *|
05616 |*      NONE                                                                  *|
05617 |*                                                                            *|
05618 |* Returns:                                                                   *|
05619 |*      NOTHING                                                               *|
05620 |*                                                                            *|
05621 \******************************************************************************/
05622 
05623 static  void    process_m_option(char   *optargs)
05624 
05625 {
05626 
05627    TRACE (Func_Entry, "process_m_option", NULL);
05628 
05629    if (EQUAL_STRS(optargs, "0")) {
05630       cmd_line_flags.msg_lvl_suppressed = Comment_Lvl;
05631    }
05632    else if (EQUAL_STRS(optargs, "1")) {
05633       cmd_line_flags.msg_lvl_suppressed = Note_Lvl;
05634    }
05635    else if (EQUAL_STRS(optargs, "2")) { 
05636       cmd_line_flags.msg_lvl_suppressed = Caution_Lvl;
05637    }
05638    else if (EQUAL_STRS(optargs, "3")) { 
05639       cmd_line_flags.msg_lvl_suppressed = Warning_Lvl;
05640    }
05641    else if (EQUAL_STRS(optargs, "4")) { 
05642       cmd_line_flags.msg_lvl_suppressed = Error_Lvl;
05643    }
05644    else {
05645       ntr_msg_queue(0, 78, Log_Error, 0, optargs, 'm', ARG_STR_ARG);
05646    }
05647 
05648    TRACE (Func_Exit, "process_m_option", NULL);
05649 
05650    return;
05651 
05652 }  /* process_m_option */
05653 
05654 /******************************************************************************\
05655 |*                                                                            *|
05656 |* Description:                                                               *|
05657 |*      Process cal file option.                                              *|
05658 |*                                                                            *|
05659 |* Input parameters:                                                          *|
05660 |*      NONE                                                                  *|
05661 |*                                                                            *|
05662 |* Output parameters:                                                         *|
05663 |*      NONE                                                                  *|
05664 |*                                                                            *|
05665 |* Returns:                                                                   *|
05666 |*      NOTHING                                                               *|
05667 |*                                                                            *|
05668 \******************************************************************************/
05669 
05670 static  void    process_S_option(char   *optargs)
05671 {
05672    TRACE (Func_Entry, "process_S_option", NULL);
05673 
05674    /* issue warning if binary output is being overridden */
05675 
05676    if (cmd_line_flags.binary_output) {  /* Driver issues this message */
05677       cmd_line_flags.binary_output = FALSE;
05678    }
05679 
05680    /* issue warning if cal file listing is being overridden */  
05681 
05682    if (on_off_flags.assembly_listing_file) {     
05683       ntr_msg_queue(0, 911, Log_Warning, 0, (char *) NULL, 0, NO_ARG);
05684       on_off_flags.assembly_listing_file = FALSE;  
05685    }
05686 
05687    cmd_line_flags.assembly_output = TRUE;
05688    strncpy (assembly_file, optargs, MAX_FILE_NAME_SIZE);
05689    assembly_file[MAX_FILE_NAME_SIZE-1] = EOS;
05690 
05691    TRACE (Func_Exit, "process_S_option", NULL);
05692 
05693    return;
05694 
05695 }  /* process_S_option */
05696 
05697 /******************************************************************************\
05698 |*                                                                            *|
05699 |* Description:                                                               *|
05700 |*      Process debug option.                                                 *|
05701 |*                                                                            *|
05702 |* Input parameters:                                                          *|
05703 |*      NONE                                                                  *|
05704 |*                                                                            *|
05705 |* Output parameters:                                                         *|
05706 |*      NONE                                                                  *|
05707 |*                                                                            *|
05708 |* Returns:                                                                   *|
05709 |*      NOTHING                                                               *|
05710 |*                                                                            *|
05711 \******************************************************************************/
05712 
05713 static  void    process_G_option(char   *optargs)
05714 
05715 {
05716 
05717    TRACE (Func_Entry, "process_G_option", NULL);
05718 
05719    if (EQUAL_STRS(optargs, "0")) {
05720       cmd_line_flags.debug_lvl = Debug_Lvl_0;
05721    }
05722    else if (EQUAL_STRS(optargs, "1")) {
05723       cmd_line_flags.debug_lvl = Debug_Lvl_1;
05724    }
05725    else if (EQUAL_STRS(optargs, "2")) {
05726       cmd_line_flags.debug_lvl = Debug_Lvl_2;
05727    }
05728    else if (EQUAL_STRS(optargs, "3")) {  /* -G deferred */
05729       ntr_msg_queue(0, 886, Log_Warning, 0, (char *) NULL, 3 ,ARG_ARG);
05730       cmd_line_flags.debug_lvl = Debug_Lvl_3;
05731    }
05732 
05733 # if defined(_ACCEPT_CMD_Gd)
05734 
05735    /* This is set by the sgi commandline if debug symbols are to be generated */
05736    /* for Dwarf.  At the moment, this just ensures that parameters are sent   */
05737    /* through so that named constants can be found in the debug symbol table. */
05738 
05739    else if (EQUAL_STRS(optargs, "d")) {
05740       cmd_line_flags.dwarf_debug = TRUE;
05741    }
05742 # endif
05743 
05744    else {
05745       ntr_msg_queue(0, 78, Log_Error, 0, optargs, 'G', ARG_STR_ARG);
05746    }
05747 
05748    TRACE (Func_Exit, "process_G_option", NULL);
05749 
05750    return;
05751 
05752 }  /* process_G_option */
05753 
05754 /******************************************************************************\
05755 |*                                                                            *|
05756 |* Description:                                                               *|
05757 |*      Process pdgcs debug option.                                           *|
05758 |*                                                                            *|
05759 |* Input parameters:                                                          *|
05760 |*      NONE                                                                  *|
05761 |*                                                                            *|
05762 |* Output parameters:                                                         *|
05763 |*      NONE                                                                  *|
05764 |*                                                                            *|
05765 |* Returns:                                                                   *|
05766 |*      NOTHING                                                               *|
05767 |*                                                                            *|
05768 \******************************************************************************/
05769 
05770 static  void    process_v_option(char   *optargs)
05771 
05772 {
05773 
05774    TRACE (Func_Entry, "process_v_option", NULL);
05775 
05776 #if defined(_DEBUG) && defined(_ENABLE_FEI)
05777    process_v_dbg_flags (optargs);               /* pdgcs debug calls  */
05778 #else
05779    /* Command line has an invalid option. */
05780    ntr_msg_queue(0, 77, Log_Error, 0, (char *) NULL, 'v' ,ARG_ARG);
05781 #endif
05782 
05783    TRACE (Func_Exit, "process_v_option", NULL);
05784 
05785    return;
05786 
05787 }  /* process_v_option */
05788 
05789 
05790 /******************************************************************************\
05791 |*                                                                            *|
05792 |* Description:                                                               *|
05793 |*      Process line size option.                                             *|
05794 |*                                                                            *|
05795 |* Input parameters:                                                          *|
05796 |*      NONE                                                                  *|
05797 |*                                                                            *|
05798 |* Output parameters:                                                         *|
05799 |*      NONE                                                                  *|
05800 |*                                                                            *|
05801 |* Returns:                                                                   *|
05802 |*      NOTHING                                                               *|
05803 |*                                                                            *|
05804 \******************************************************************************/
05805 
05806 static  void    process_N_option(char   *optargs)
05807 
05808 {
05809 
05810    TRACE (Func_Entry, "process_N_option", NULL);
05811 
05812    if (cmd_line_flags.src_form != Fixed_Form) {
05813 
05814       /* Line size option ignored.  Free source form is in effect. */
05815 
05816       ntr_msg_queue(0, 11, Log_Warning, 0, (char *) NULL, 0, NO_ARG);
05817    }
05818    else if (EQUAL_STRS(optargs, "72")) {
05819       cmd_line_flags.line_size_80 = FALSE;
05820       cmd_line_flags.line_size_132 = FALSE;
05821    }
05822    else if (EQUAL_STRS(optargs, "80")) {
05823       cmd_line_flags.line_size_80 = TRUE;
05824       cmd_line_flags.line_size_132 = FALSE;
05825    }
05826    else if (EQUAL_STRS(optargs, "120")) { /* KAY - support */
05827       ntr_msg_queue(0, 1659, Log_Warning, 0, (char *) NULL, 0, NO_ARG);
05828       cmd_line_flags.line_size_132 = TRUE;
05829       cmd_line_flags.line_size_80 = FALSE;
05830    }
05831    else if (EQUAL_STRS(optargs, "132")) {
05832       cmd_line_flags.line_size_132 = TRUE;
05833       cmd_line_flags.line_size_80 = FALSE;
05834    }
05835    else { /* option has an invalid argument */
05836       ntr_msg_queue(0, 78, Log_Error, 0, optargs, 'N', ARG_STR_ARG);
05837    }
05838 
05839    TRACE (Func_Exit, "process_N_option", NULL);
05840 
05841    return;
05842 
05843 }  /* process_N_option */
05844 
05845 /******************************************************************************\
05846 |*                                                                            *|
05847 |* Description:                                                               *|
05848 |*      Process MPP number of PEs option.                                     *|
05849 |*                                                                            *|
05850 |* Input parameters:                                                          *|
05851 |*      NONE                                                                  *|
05852 |*                                                                            *|
05853 |* Output parameters:                                                         *|
05854 |*      NONE                                                                  *|
05855 |*                                                                            *|
05856 |* Returns:                                                                   *|
05857 |*      NOTHING                                                               *|
05858 |*                                                                            *|
05859 \******************************************************************************/
05860 
05861 static  void    process_X_option(char   *optargs)
05862 
05863 {
05864 #  if defined(_ACCEPT_CMD_X)
05865    char         *opt_chk;
05866    int           n_pes;
05867 # endif
05868 
05869 
05870    TRACE (Func_Entry, "process_X_option", NULL);
05871 
05872 #  if defined(_ACCEPT_CMD_X)
05873 
05874       /* validate that -X arg contains only digits */
05875 
05876       if (*optargs == 'm') {
05877          cmd_line_flags.malleable = TRUE;
05878 
05879          if (set_MPP_num_pes) {
05880             set_MPP_num_pes     = FALSE;
05881 
05882             /* -X # overrides -Xm */
05883 
05884             ntr_msg_queue(0, 1231, Log_Warning, 0, "m", 0, STR_ARG);
05885 
05886 # if defined(_TARGET_OS_MAX)
05887             cmd_line_flags.MPP_num_pes = 0;
05888 # else
05889             cmd_line_flags.MPP_num_pes = 1;
05890 # endif
05891          }
05892       }
05893       else {
05894 
05895          opt_chk = optargs;
05896 
05897          while (isdigit(*opt_chk)) {
05898             opt_chk++;
05899          }
05900 
05901          n_pes = atoi (optargs);
05902 
05903          if (*opt_chk != EOS) {
05904             ntr_msg_queue(0, 78, Log_Error, 0, optargs, 'X', ARG_STR_ARG);
05905          }
05906          else if (cmd_line_flags.malleable) {
05907             ntr_msg_queue(0, 1231, Log_Warning, 0, optargs, 0, STR_ARG);
05908             cmd_line_flags.malleable = FALSE;
05909          }
05910          else if (n_pes < 1 || n_pes > 2048) {
05911             ntr_msg_queue(0, 1238, Log_Error, 0, optargs, 0, STR_ARG);
05912          }
05913 
05914          set_MPP_num_pes                = TRUE;
05915          cmd_line_flags.MPP_num_pes     = n_pes;
05916       }
05917 
05918 #  else  /* Unsupported */
05919       ntr_msg_queue(0, 797, Log_Warning, 0, (char *) NULL, 'X' ,ARG_ARG);
05920 #  endif
05921 
05922    TRACE (Func_Exit, "process_X_option", NULL);
05923 
05924    return;
05925 
05926 }  /* process_X_option */
05927 
05928 /******************************************************************************\
05929 |*                                                                            *|
05930 |* Description:                                                               *|
05931 |*      process_q_option handles expression evaluator args passed via argv    *|
05932 |*                                                                            *|
05933 |* Input parameters:                                                          *|
05934 |*      optargs                 -q option arguments                           *|
05935 |*                                                                            *|
05936 |* Output parameters:                                                         *|
05937 |*      NONE                                                                  *|
05938 |*                                                                            *|
05939 |* Returns:                                                                   *|
05940 |*      NOTHING                                                               *|
05941 |*                                                                            *|
05942 \******************************************************************************/
05943 
05944 static void process_q_option (char *optargs)
05945 
05946 {
05947    int           ch;
05948    char          err_str[2];
05949 
05950 
05951    TRACE (Func_Entry, "process_q_option", NULL);
05952 
05953    while (ch = *optargs++) {
05954 
05955       switch (ch) {
05956       case 'e':
05957          cmd_line_flags.expression_eval_expr = TRUE;
05958          break;
05959 
05960       case 's':
05961          cmd_line_flags.expression_eval_stmt = TRUE;
05962          break;
05963 
05964       default:
05965          err_str[0] = ch;
05966          err_str[1] = EOS;
05967 
05968          /* option has an invalid argument */
05969 
05970          ntr_msg_queue(0, 78, Log_Error, 0, err_str, 'q', ARG_STR_ARG);
05971          break;
05972       }
05973 
05974    }  /* while */
05975  
05976    TRACE (Func_Exit, "process_q_option", NULL);
05977 
05978    return;
05979 
05980 }  /* process_q_option */
05981 
05982 /******************************************************************************\
05983 |*                                                                            *|
05984 |* Description:                                                               *|
05985 |*      process_r_option handles runtime checking options passed via argv     *|
05986 |*                                                                            *|
05987 |* Input parameters:                                                          *|
05988 |*      optargs                 -r option arguments                           *|
05989 |*                                                                            *|
05990 |* Output parameters:                                                         *|
05991 |*      NONE                                                                  *|
05992 |*                                                                            *|
05993 |* Returns:                                                                   *|
05994 |*      NOTHING                                                               *|
05995 |*                                                                            *|
05996 \******************************************************************************/
05997 
05998 static void process_r_option (char *optargs)
05999 
06000 {
06001    int           ch;
06002    char          err_str[2];
06003 
06004 
06005    TRACE (Func_Entry, "process_r_option", NULL);
06006 
06007    while (ch = *optargs++) {
06008 
06009       switch (ch) {
06010       case 'g':
06011 
06012 #        if defined(_ACCEPT_CMD_ed_g)
06013             on_off_flags.assembly_listing_file = TRUE;
06014 
06015             /* issue warning if cal file output is being overridden */  
06016 
06017             if (cmd_line_flags.assembly_output) {        
06018                ntr_msg_queue(0, 388, Log_Warning, 0, (char *) NULL, 0, NO_ARG);
06019                cmd_line_flags.assembly_output = FALSE;  
06020                cmd_line_flags.binary_output = TRUE;  
06021             }
06022 #        else  /* doc'd as -rg */
06023             ntr_msg_queue(0, 744, Log_Warning, 0, "g", 'r', ARG_STR_ARG);
06024 #        endif
06025          break;
06026 
06027       default:
06028          err_str[0] = ch;
06029          err_str[1] = EOS;
06030 
06031          /* option has an invalid argument */
06032 
06033          ntr_msg_queue(0, 78, Log_Error, 0, err_str, 'r', ARG_STR_ARG);
06034          break;
06035       }  /* switch */
06036    }  /* while */
06037  
06038    TRACE (Func_Exit, "process_r_option", NULL);
06039 
06040    return;
06041 
06042 }  /* process_r_option */
06043 
06044 /******************************************************************************\
06045 |*                                                                            *|
06046 |* Description:                                                               *|
06047 |*      process_R_option handles runtime checking options passed via argv     *|
06048 |*                                                                            *|
06049 |* Input parameters:                                                          *|
06050 |*      optargs                 -R option arguments                           *|
06051 |*                                                                            *|
06052 |* Output parameters:                                                         *|
06053 |*      NONE                                                                  *|
06054 |*                                                                            *|
06055 |* Returns:                                                                   *|
06056 |*      NOTHING                                                               *|
06057 |*                                                                            *|
06058 \******************************************************************************/
06059 
06060 static void process_R_option (char *optargs)
06061 
06062 {
06063    int           ch;
06064    char          err_str[2];
06065    char         *cp;
06066 
06067 
06068    TRACE (Func_Entry, "process_R_option", NULL);
06069 
06070    while (ch = *optargs++) {
06071 
06072       switch (ch) {
06073       case 'a':
06074          cmd_line_flags.runtime_argument        = TRUE;
06075          break;
06076 
06077       case 'b':
06078          cmd_line_flags.runtime_bounds          = TRUE;
06079          break;
06080 
06081       case 'c':
06082          cmd_line_flags.runtime_conformance     = TRUE;
06083          break;
06084 
06085       case 'C':
06086          cmd_line_flags.runtime_arg_call        = TRUE;
06087          break;
06088 
06089       case 'E':
06090          cmd_line_flags.runtime_arg_entry       = TRUE;
06091          break;
06092 
06093       case 'M':
06094 
06095          while (*optargs != EOS && isdigit(*optargs)) {
06096 
06097             for (cp = optargs;
06098                  *optargs != BLANK  &&  *optargs != COMMA  &&  *optargs != EOS;
06099                  ++optargs);
06100 
06101             if (*optargs != EOS) {
06102                *optargs = EOS;
06103                *optargs++;
06104             }
06105 
06106             num_argchck_suppress_msg++;
06107             argchck_suppress_msg[num_argchck_suppress_msg] = atoi(cp);
06108          }
06109 
06110          argchck_suppress_msg[num_argchck_suppress_msg+1] = 0;
06111          break;
06112 
06113       case 'n':
06114          cmd_line_flags.runtime_arg_count_only  = TRUE;
06115          break;
06116 
06117       case 'p':
06118          cmd_line_flags.runtime_ptr_chk         = TRUE;
06119          break;
06120 
06121       case 's':
06122          cmd_line_flags.runtime_substring       = TRUE;
06123          break;
06124 
06125       default:
06126          err_str[0] = ch;
06127          err_str[1] = EOS;
06128 
06129          /* option has an invalid argument */
06130 
06131          ntr_msg_queue(0, 78, Log_Error, 0, err_str, 'R', ARG_STR_ARG);
06132          break;
06133       }  /* switch */
06134    }  /* while */
06135  
06136    TRACE (Func_Exit, "process_R_option", NULL);
06137 
06138    return;
06139 
06140 }  /* process_R_option */
06141 
06142 /******************************************************************************\
06143 |*                                                                            *|
06144 |* Description:                                                               *|
06145 |*      process_s_option handles size options passed via argv                 *|
06146 |*                                                                            *|
06147 |* Input parameters:                                                          *|
06148 |*      optargs                 -s option arguments                           *|
06149 |*                                                                            *|
06150 |* Output parameters:                                                         *|
06151 |*      NONE                                                                  *|
06152 |*                                                                            *|
06153 |* Returns:                                                                   *|
06154 |*      NOTHING                                                               *|
06155 |*                                                                            *|
06156 \******************************************************************************/
06157 
06158 static void process_s_option (char *optargs)
06159 {
06160    TRACE (Func_Entry, "process_s_option", NULL);
06161 
06162    if (EQUAL_STRS(optargs, "integer8")) {
06163          cmd_line_flags.s_integer8              = TRUE;
06164    }
06165    else if (EQUAL_STRS(optargs, "logical8")) {
06166          cmd_line_flags.s_logical8              = TRUE;
06167    }
06168    else if (EQUAL_STRS(optargs, "real8")) {
06169          cmd_line_flags.s_real8                 = TRUE;
06170    }
06171    else if (EQUAL_STRS(optargs, "complex8")) {
06172          cmd_line_flags.s_complex8              = TRUE;
06173    }
06174    else if (EQUAL_STRS(optargs, "doubleprecision16")) {
06175          cmd_line_flags.s_doubleprecision16     = TRUE;
06176    }
06177    else if (EQUAL_STRS(optargs, "doublecomplex16")) {
06178          cmd_line_flags.s_doublecomplex16       = TRUE;
06179    }
06180    else if (EQUAL_STRS(optargs, "pointer8")) {
06181          cmd_line_flags.s_pointer8              = TRUE;
06182    }
06183    else if (EQUAL_STRS(optargs, "cf77types")) {
06184 
06185 #     if defined(_ACCEPT_CMD_s_cf77types)
06186          cmd_line_flags.s_cf77types     = TRUE;
06187          ntr_msg_queue(0, 1172, Log_Warning, 0, (char *) NULL, 0, NO_ARG);
06188 #     else
06189          ntr_msg_queue(0, 744, Log_Warning, 0, "cf77types", 's', ARG_STR_ARG);
06190 #     endif
06191    }
06192    else if (EQUAL_STRS(optargs, "float64")) {
06193 
06194 #     if defined(_ACCEPT_CMD_s_64)
06195          cmd_line_flags.s_float64       = TRUE;
06196 #     else
06197          ntr_msg_queue(0, 744, Log_Warning, 0, "float64", 's', ARG_STR_ARG);
06198 #     endif
06199    }
06200    else if (EQUAL_STRS(optargs, "default64")) {
06201 
06202 #     if defined(_ACCEPT_CMD_s_64)
06203          cmd_line_flags.s_float64       = TRUE;
06204          cmd_line_flags.s_default64     = TRUE;
06205 #     else
06206          ntr_msg_queue(0, 744, Log_Warning, 0, "default64", 's', ARG_STR_ARG);
06207 #     endif
06208    }
06209    else if (EQUAL_STRS(optargs, "default32")) {
06210 
06211 #     if defined(_ACCEPT_CMD_s_32)
06212          cmd_line_flags.s_default32     = TRUE;
06213 #     else
06214          ntr_msg_queue(0, 744, Log_Warning, 0, "default32", 's', ARG_STR_ARG);
06215 #     endif
06216    }
06217    else {
06218       ntr_msg_queue(0, 78, Log_Error, 0, optargs, 's', ARG_STR_ARG);
06219    }
06220  
06221    TRACE (Func_Exit, "process_s_option", NULL);
06222 
06223    return;
06224 
06225 }  /* process_s_option */
06226 
06227 /******************************************************************************\
06228 |*                                                                            *|
06229 |* Description:                                                               *|
06230 |*      handle the -D command line option to define a preprocessing id.       *|
06231 |*                                                                            *|
06232 |* Input parameters:                                                          *|
06233 |*      NONE                                                                  *|
06234 |*                                                                            *|
06235 |* Output parameters:                                                         *|
06236 |*      NONE                                                                  *|
06237 |*                                                                            *|
06238 |* Returns:                                                                   *|
06239 |*      NOTHING                                                               *|
06240 |*                                                                            *|
06241 \******************************************************************************/
06242 
06243 static void process_D_option(char *optargs)
06244 
06245 {
06246    int                  idx;
06247    char                 str[MAX_ID_LEN+1];
06248    char                 *value;
06249 
06250 
06251    TRACE (Func_Entry, "process_D_option", NULL);
06252 
06253    idx = 0;
06254 
06255    while (optargs[idx] != EQUAL && optargs[idx] != EOS && idx < MAX_ID_LEN) {
06256       str[idx] = optargs[idx];
06257       idx++;
06258    }
06259 
06260    str[idx] = '\0';
06261 
06262    if (optargs[idx] != EQUAL && optargs[idx] != EOS) {
06263       /* id too long */
06264       ntr_msg_queue(0, 78, Log_Error, 0, optargs, 'D', ARG_STR_ARG);
06265    }
06266 
06267    if (optargs[idx] == EQUAL) {
06268       idx++;
06269       value = &(optargs[idx]);
06270    }
06271    else {
06272       value = NULL;
06273    }
06274 
06275    if (! enter_cmd_line_cc_define(str, value, TRUE)) {
06276       /* problem with the string */
06277       ntr_msg_queue(0, 78, Log_Error, 0, optargs, 'D', ARG_STR_ARG);
06278    }
06279 
06280    TRACE (Func_Exit, "process_D_option", NULL);
06281 
06282    return;
06283 
06284 }  /* process_D_option */
06285 
06286 /******************************************************************************\
06287 |*                                                                            *|
06288 |* Description:                                                               *|
06289 |*      handle the -U command line option to undefine a preprocessing id.     *|
06290 |*                                                                            *|
06291 |* Input parameters:                                                          *|
06292 |*      NONE                                                                  *|
06293 |*                                                                            *|
06294 |* Output parameters:                                                         *|
06295 |*      NONE                                                                  *|
06296 |*                                                                            *|
06297 |* Returns:                                                                   *|
06298 |*      NOTHING                                                               *|
06299 |*                                                                            *|
06300 \******************************************************************************/
06301 
06302 static void process_U_option(char *optargs)
06303 
06304 {
06305    int                  idx;
06306    char                 str[MAX_ID_LEN+1];
06307 
06308 
06309    TRACE (Func_Entry, "process_U_option", NULL);
06310 
06311    idx = 0;
06312 
06313    while (optargs[idx] != EOS && idx < MAX_ID_LEN) {
06314       str[idx] = optargs[idx];
06315       idx++;
06316    }
06317 
06318    str[idx] = '\0';
06319 
06320    if (optargs[idx] != EOS) { /* id too long */
06321       ntr_msg_queue(0, 78, Log_Error, 0, optargs, 'U', ARG_STR_ARG);
06322    }
06323 
06324    if (! enter_cmd_line_cc_define(str, NULL, FALSE)) {
06325       /* problem with the string */
06326       ntr_msg_queue(0, 78, Log_Error, 0, optargs, 'U', ARG_STR_ARG);
06327    }
06328 
06329    TRACE (Func_Exit, "process_U_option", NULL);
06330 
06331    return;
06332 
06333 }  /* process_U_option */
06334 
06335 /******************************************************************************\
06336 |*                                                                            *|
06337 |* Description:                                                               *|
06338 |*      <description>                                                         *|
06339 |*                                                                            *|
06340 |* Input parameters:                                                          *|
06341 |*      NONE                                                                  *|
06342 |*                                                                            *|
06343 |* Output parameters:                                                         *|
06344 |*      NONE                                                                  *|
06345 |*                                                                            *|
06346 |* Returns:                                                                   *|
06347 |*      NOTHING                                                               *|
06348 |*                                                                            *|
06349 \******************************************************************************/
06350 static void validate_s_option( void )
06351 
06352 {
06353    TRACE (Func_Entry, "validate_s_option", NULL);
06354 
06355    if (cmd_line_flags.s_float64) {
06356 
06357       if (cmd_line_flags.s_real8) {
06358          cmd_line_flags.s_real8         = FALSE;
06359          ntr_msg_queue(0, 1353, Log_Warning, 0, 
06360                        "-s float64\n-s real8\n-s float64",
06361                        0, MULT_STR_ARG);
06362       }
06363 
06364       if (cmd_line_flags.s_complex8) {
06365          cmd_line_flags.s_complex8              = FALSE;
06366          ntr_msg_queue(0, 1353, Log_Warning, 0, 
06367                        "-s float64\n-s complex8\n-s float64",
06368                        0, MULT_STR_ARG);
06369       }
06370 
06371       if (cmd_line_flags.s_doubleprecision16) {
06372          cmd_line_flags.s_doubleprecision16     = FALSE;
06373          ntr_msg_queue(0, 1353, Log_Warning, 0, 
06374                        "-s float64\n-s doubleprecision16\n-s float64",
06375                        0, MULT_STR_ARG);
06376       }
06377 
06378       if (cmd_line_flags.s_doublecomplex16) {
06379          cmd_line_flags.s_doublecomplex16       = FALSE;
06380          ntr_msg_queue(0, 1353, Log_Warning, 0, 
06381                        "-s float64\n-s doublecomplex16\n-s float64",
06382                        0, MULT_STR_ARG);
06383       }
06384    }
06385 
06386    if (cmd_line_flags.s_default64) {
06387 
06388       if (cmd_line_flags.s_integer8) {
06389          cmd_line_flags.s_integer8              = FALSE;
06390          ntr_msg_queue(0, 1353, Log_Warning, 0, 
06391                        "-s default64\n-s integer8\n-s default64",
06392                        0, MULT_STR_ARG);
06393       }
06394     
06395       if (cmd_line_flags.s_logical8) {
06396          cmd_line_flags.s_logical8              = FALSE;
06397          ntr_msg_queue(0, 1353, Log_Warning, 0, 
06398                        "-s default64\n-s logical8\n-s default64",
06399                        0, MULT_STR_ARG);
06400       }
06401     
06402       if (cmd_line_flags.s_real8) {
06403          cmd_line_flags.s_real8                 = FALSE;
06404          ntr_msg_queue(0, 1353, Log_Warning, 0, 
06405                        "-s default64\n-s real8\n-s default64",
06406                        0, MULT_STR_ARG);
06407       }
06408 
06409       if (cmd_line_flags.s_complex8) {
06410          cmd_line_flags.s_complex8              = FALSE;
06411          ntr_msg_queue(0, 1353, Log_Warning, 0, 
06412                        "-s default64\n-s complex8\n-s default64",
06413                        0, MULT_STR_ARG);
06414       }
06415     
06416       if (cmd_line_flags.s_doubleprecision16) {
06417          cmd_line_flags.s_doubleprecision16     = FALSE;
06418          ntr_msg_queue(0, 1353, Log_Warning, 0, 
06419                        "-s default64\n-s doubleprecision16\n-s default64",
06420                        0, MULT_STR_ARG);
06421       }
06422 
06423       if (cmd_line_flags.s_doublecomplex16) {
06424          cmd_line_flags.s_doublecomplex16       = FALSE;
06425          ntr_msg_queue(0, 1353, Log_Warning, 0, 
06426                        "-s default64\n-s doublecomplex16\n-s default64",
06427                        0, MULT_STR_ARG);
06428       }
06429    }
06430 
06431    if (cmd_line_flags.s_default32) {
06432 
06433       if (cmd_line_flags.s_integer8) {
06434          cmd_line_flags.s_integer8              = FALSE;
06435          ntr_msg_queue(0, 1353, Log_Warning, 0, 
06436                        "-s default32\n-s integer8\n-s default32",
06437                        0, MULT_STR_ARG);
06438       }
06439     
06440       if (cmd_line_flags.s_logical8) {
06441          cmd_line_flags.s_logical8              = FALSE;
06442          ntr_msg_queue(0, 1353, Log_Warning, 0, 
06443                        "-s default3\n-s logical8\n-s default32",
06444                        0, MULT_STR_ARG);
06445       }
06446     
06447       if (cmd_line_flags.s_real8) {
06448          cmd_line_flags.s_real8         = FALSE;
06449          ntr_msg_queue(0, 1353, Log_Warning, 0, 
06450                        "-s default32\n-s real8\n-s default32",
06451                        0, MULT_STR_ARG);
06452       }
06453     
06454       if (cmd_line_flags.s_complex8) {
06455          cmd_line_flags.s_complex8              = FALSE;
06456          ntr_msg_queue(0, 1353, Log_Warning, 0, 
06457                        "-s default32\n-s complex8\n-s default32",
06458                        0, MULT_STR_ARG);
06459       }
06460 
06461       if (cmd_line_flags.s_doubleprecision16) {
06462          cmd_line_flags.s_doubleprecision16     = FALSE;
06463          ntr_msg_queue(0, 1353, Log_Warning, 0, 
06464                        "-s default32\n-s doubleprecision16\n-s default32",
06465                        0, MULT_STR_ARG);
06466       }
06467 
06468       if (cmd_line_flags.s_doublecomplex16) {
06469          cmd_line_flags.s_doublecomplex16       = FALSE;
06470          ntr_msg_queue(0, 1353, Log_Warning, 0, 
06471                        "-s default32\n-s doublecomplex16\n-s default32",
06472                        0, MULT_STR_ARG);
06473       }
06474    }
06475 
06476    if (cmd_line_flags.s_cf77types) {
06477 
06478       if (cmd_line_flags.s_integer8) {
06479          cmd_line_flags.s_integer8      = FALSE;
06480          ntr_msg_queue(0, 1353, Log_Warning, 0, 
06481                        "-s cf77types\n-s integer8\n-s cf77types",
06482                        0, MULT_STR_ARG);
06483       }
06484     
06485       if (cmd_line_flags.s_logical8) {
06486          cmd_line_flags.s_logical8              = FALSE;
06487          ntr_msg_queue(0, 1353, Log_Warning, 0, 
06488                        "-s cf77types\n-s logical8\n-s cf77types",
06489                        0, MULT_STR_ARG);
06490       }
06491     
06492       if (cmd_line_flags.s_real8) {
06493          cmd_line_flags.s_real8         = FALSE;
06494          ntr_msg_queue(0, 1353, Log_Warning, 0, 
06495                        "-s cf77types\n-s real8\n-s cf77types",
06496                        0, MULT_STR_ARG);
06497       }
06498     
06499       if (cmd_line_flags.s_complex8) {
06500          cmd_line_flags.s_complex8              = FALSE;
06501          ntr_msg_queue(0, 1353, Log_Warning, 0, 
06502                        "-s cf77types\n-s complex8\n-s cf77types",
06503                        0, MULT_STR_ARG);
06504       }
06505 
06506       if (cmd_line_flags.s_doubleprecision16) {
06507          cmd_line_flags.s_doubleprecision16     = FALSE;
06508          ntr_msg_queue(0, 1353, Log_Warning, 0, 
06509                        "-s cf77types\n-s doubleprecision16\n-s cf77types",
06510                        0, MULT_STR_ARG);
06511       }
06512 
06513       if (cmd_line_flags.s_doublecomplex16) {
06514          cmd_line_flags.s_doublecomplex16       = FALSE;
06515          ntr_msg_queue(0, 1353, Log_Warning, 0, 
06516                         "-s cf77types\n-s doublecomplex16\n-s cf77types",
06517                        0, MULT_STR_ARG);
06518       }
06519    }
06520 
06521    if (!on_off_flags.enable_double_precision) {
06522 
06523       if (cmd_line_flags.s_doubleprecision16) {
06524          cmd_line_flags.s_doubleprecision16     = FALSE;
06525          ntr_msg_queue(0, 1353, Log_Warning, 0, 
06526                        "-dp\n-s doubleprecision16\n-dp",
06527                        0, MULT_STR_ARG);
06528       }
06529 
06530       if (cmd_line_flags.s_doublecomplex16) {
06531          cmd_line_flags.s_doublecomplex16       = FALSE;
06532          ntr_msg_queue(0, 1353, Log_Warning, 0, 
06533                        "-dp\n-s doublecomplex16\n-dp",
06534                        0, MULT_STR_ARG);
06535       }
06536    }
06537 
06538    if (set_i_option) {
06539 
06540       if (cmd_line_flags.s_integer8) {
06541          cmd_line_flags.s_integer8 = FALSE;
06542          ntr_msg_queue(0, 1353, Log_Warning, 0, 
06543                        "-i32\n-s integer8\n-i32",
06544                        0, MULT_STR_ARG);
06545       }
06546    }
06547 
06548 
06549    TRACE (Func_Exit, "validate_s_option", NULL);
06550 
06551    return;
06552 
06553 }  /* validate_s_option */
06554 
06555 
06556 /******************************************************************************\
06557 |*                                                                            *|
06558 |* Description:                                                               *|
06559 |*      <description>                                                         *|
06560 |*                                                                            *|
06561 |* Input parameters:                                                          *|
06562 |*      NONE                                                                  *|
06563 |*                                                                            *|
06564 |* Output parameters:                                                         *|
06565 |*      NONE                                                                  *|
06566 |*                                                                            *|
06567 |* Returns:                                                                   *|
06568 |*      NOTHING                                                               *|
06569 |*                                                                            *|
06570 \******************************************************************************/
06571 static void set_system_module_path( void )
06572 {
06573 
06574    char         *directory;
06575    int           idx;
06576    int           length;
06577    char         *next_dir_ptr;
06578    char         *path_var;
06579    char         *ptr;
06580    int           save_file_path_tbl_idx;
06581 
06582    extern       boolean is_directory(char *);
06583 
06584 
06585    TRACE (Func_Entry, "set_system_module_path", NULL);
06586 
06587    /* Put the system directory into the module search path.   */
06588    /* It should end up being the very last thing searched.    */
06589    /* Currently we are supporting both old and new system     */
06590    /* variables.  So there are two places to check.           */
06591 
06592    path_var     = SYSTEM_MODULE_USE_VAR;
06593    directory    = getenv(path_var);
06594 
06595    if (directory != NULL) {
06596 
06597       /* Set up for the new implementation.  One environment variable */
06598       /* with a colon separate list of paths and file names.          */
06599 
06600       do {
06601          next_dir_ptr = strchr(directory, ':');
06602 
06603          if (next_dir_ptr != NULL) {
06604             *next_dir_ptr       = '\0';
06605 
06606             if (++next_dir_ptr == '\0') {
06607                next_dir_ptr     = NULL;
06608             }
06609          }
06610 
06611          TBL_REALLOC_CK(file_path_tbl, 1);
06612          CLEAR_TBL_NTRY(file_path_tbl, file_path_tbl_idx);
06613          FP_NAME_IDX(file_path_tbl_idx)         = str_pool_idx + 1;
06614          FP_SRCH_THE_FILE(file_path_tbl_idx)    = TRUE;
06615          FP_CLASS(file_path_tbl_idx)            = Unknown_Fp;
06616          FP_SYSTEM_FILE(file_path_tbl_idx)      = TRUE;
06617          length                                 = strlen(directory) + 1;
06618          FP_NAME_LEN(file_path_tbl_idx)         = length;
06619          length                                 = WORD_LEN(length);
06620 
06621          TBL_REALLOC_CK(str_pool, length);
06622 
06623          for (idx = FP_NAME_IDX(file_path_tbl_idx); idx <= str_pool_idx; idx++){
06624             str_pool[idx].name_long = 0;
06625          }
06626 
06627          strcpy(FP_NAME_PTR(file_path_tbl_idx), directory);
06628          save_file_path_tbl_idx = file_path_tbl_idx;
06629 
06630 # if (defined(_HOST_OS_IRIX) || defined(_HOST_OS_LINUX))
06631 
06632          if (is_directory(FP_NAME_PTR(file_path_tbl_idx))) {
06633 
06634             /* Add the ABI search path for system dependent ABI modules */
06635 
06636             TBL_REALLOC_CK(file_path_tbl, 1);
06637             CLEAR_TBL_NTRY(file_path_tbl, file_path_tbl_idx);
06638             FP_NAME_IDX(file_path_tbl_idx)      = str_pool_idx + 1;
06639             FP_SRCH_THE_FILE(file_path_tbl_idx) = TRUE;
06640             FP_CLASS(file_path_tbl_idx)         = Unknown_Fp;
06641             FP_SYSTEM_FILE(file_path_tbl_idx)   = TRUE;
06642             length  = (cmd_line_flags.s_pointer8) ? 3:4;
06643             length += FP_NAME_LEN(save_file_path_tbl_idx);
06644             FP_NAME_LEN(file_path_tbl_idx)      = length;
06645             length                              = WORD_LEN(length);
06646             TBL_REALLOC_CK(str_pool, length);
06647 
06648             for (idx = FP_NAME_IDX(file_path_tbl_idx);
06649                  idx <= str_pool_idx; idx++) {
06650                str_pool[idx].name_long = 0;
06651             }
06652             strcpy(FP_NAME_PTR(file_path_tbl_idx), directory);
06653             ptr = FP_NAME_PTR(file_path_tbl_idx) +
06654                   FP_NAME_LEN(save_file_path_tbl_idx) - 1;
06655             strcpy(ptr, (cmd_line_flags.s_pointer8) ? "/64" : "/n32");
06656             idx = module_path_idx;
06657 
06658             while (FP_NEXT_FILE_IDX(idx) != NULL_IDX) {
06659                idx = FP_NEXT_FILE_IDX(idx);
06660             }
06661             FP_NEXT_FILE_IDX(idx)       = file_path_tbl_idx;
06662          }
06663 # endif
06664 
06665          idx = module_path_idx;
06666 
06667          while (FP_NEXT_FILE_IDX(idx) != NULL_IDX) {
06668             idx = FP_NEXT_FILE_IDX(idx);
06669          }
06670          FP_NEXT_FILE_IDX(idx)  = save_file_path_tbl_idx;
06671          directory              = next_dir_ptr;
06672       }
06673       while (directory != NULL);
06674    }
06675    else {
06676       path_var  = MODULE_USE_SYSTEM_PATH_VAR;
06677       directory = getenv(path_var);
06678 
06679       if (directory != NULL) {
06680          TBL_REALLOC_CK(file_path_tbl, 1);
06681          CLEAR_TBL_NTRY(file_path_tbl, file_path_tbl_idx);
06682          FP_NAME_IDX(file_path_tbl_idx)         = str_pool_idx + 1;
06683          FP_SRCH_THE_FILE(file_path_tbl_idx)    = TRUE;
06684          FP_CLASS(file_path_tbl_idx)            = Unknown_Fp;
06685          FP_SYSTEM_FILE(file_path_tbl_idx)      = TRUE;
06686 
06687 # if (defined(_HOST_OS_IRIX) || defined(_HOST_OS_LINUX))
06688          length = strlen(directory) + 1;
06689 # else
06690          length = strlen(directory) + strlen(MODULE_USE_SYSTEM_FILE) + 1;
06691 # endif
06692 
06693          FP_NAME_LEN(file_path_tbl_idx)         = length;
06694          length                                 = WORD_LEN(length);
06695 
06696          TBL_REALLOC_CK(str_pool, length);
06697 
06698          for (idx = FP_NAME_IDX(file_path_tbl_idx); idx <= str_pool_idx; idx++){
06699             str_pool[idx].name_long = 0;
06700          }
06701 
06702          strcpy(FP_NAME_PTR(file_path_tbl_idx), directory);
06703 
06704 # if ! (defined(_HOST_OS_IRIX) || defined(_HOST_OS_LINUX))
06705          ptr = FP_NAME_PTR(file_path_tbl_idx) + strlen(directory);
06706          strcpy(ptr, "/");
06707          strcpy(++ptr, MODULE_USE_SYSTEM_FILE);
06708 # endif
06709          idx = module_path_idx;
06710 
06711          while (FP_NEXT_FILE_IDX(idx) != NULL_IDX) {
06712             idx = FP_NEXT_FILE_IDX(idx);
06713          }
06714          FP_NEXT_FILE_IDX(idx)     = file_path_tbl_idx;
06715       }
06716    }
06717 
06718    TRACE (Func_Exit, "set_system_module_path", NULL);
06719 
06720    return;
06721 
06722 }  /* set_system_module_path */
06723 
06724 /******************************************************************************\
06725 |*                                                                            *|
06726 |* Description:                                                               *|
06727 |*      Add array names to the file path table for the -O swap array option.  *|
06728 |*                                                                            *|
06729 |* Input parameters:                                                          *|
06730 |*      NONE                                                                  *|
06731 |*                                                                            *|
06732 |* Output parameters:                                                         *|
06733 |*      NONE                                                                  *|
06734 |*                                                                            *|
06735 |* Returns:                                                                   *|
06736 |*      NOTHING                                                               *|
06737 |*                                                                            *|
06738 \******************************************************************************/
06739 
06740 static  void    process_reshape_array(char      *optargs)
06741 
06742 {
06743    boolean       found_one;
06744    int           fp_idx;
06745    int           idx;
06746    int           length;
06747    char         *array_name;
06748    int           start_idx;
06749    char         *str_ptr;
06750 
06751 
06752    TRACE (Func_Entry, "process_reshape_array", NULL);
06753 
06754    start_idx            = file_path_tbl_idx + 1;
06755    found_one            = FALSE;
06756    opt_flags.reshape    = TRUE;
06757       
06758    while (*optargs != EOS) {
06759 
06760       for (array_name = optargs;
06761           *optargs != BLANK  &&  *optargs != COMMA  &&  *optargs != EOS;
06762           ++optargs);
06763 
06764       if (*optargs != EOS) {
06765          *optargs = EOS;
06766          *optargs++;
06767       }
06768 
06769       if (found_one) {  /* Second or subsequent time through */
06770          FP_NEXT_FILE_IDX(file_path_tbl_idx) = file_path_tbl_idx + 1;
06771       }
06772 
06773       TBL_REALLOC_CK(file_path_tbl, 1);
06774       CLEAR_TBL_NTRY(file_path_tbl, file_path_tbl_idx);
06775 
06776       found_one                         = TRUE;
06777       FP_NAME_IDX(file_path_tbl_idx)    = str_pool_idx + 1;
06778       length                            = strlen(array_name);
06779       FP_CLASS(file_path_tbl_idx)       = Reshape_Array_Fp;
06780       FP_NAME_LEN(file_path_tbl_idx)    = length;
06781 
06782       TBL_REALLOC_CK(str_pool, WORD_LEN(length));
06783 
06784       str_pool[str_pool_idx].name_long  = 0; /* Zero out last word */
06785 
06786       str_ptr   = &str_pool[FP_NAME_IDX(file_path_tbl_idx)].name_char;
06787 
06788       for (idx = 0;  idx < length;  idx++) {
06789          str_ptr[idx] = toupper(array_name[idx]);
06790       }
06791    }
06792 
06793    if (found_one) {
06794 
06795       if (opt_flags.reshape_idx == NULL_IDX) {
06796          opt_flags.reshape_idx     = start_idx;
06797       }
06798       else {
06799          fp_idx = opt_flags.reshape_idx;
06800 
06801          /* Find the end of the list of files/paths.  These must be ordered. */
06802 
06803          while (FP_NEXT_FILE_IDX(fp_idx) != NULL_IDX) {
06804             fp_idx = FP_NEXT_FILE_IDX(fp_idx);
06805          }
06806          FP_NEXT_FILE_IDX(fp_idx)               = start_idx;
06807       }
06808    }
06809 
06810 #  if !defined(_ACCEPT_CMD_O_RESHAPE)
06811       opt_flags.reshape_idx     = NULL_IDX;
06812       PRINTMSG (0, 744, Log_Warning, 0, 'O', "reshape");
06813 #  endif
06814 
06815    TRACE (Func_Exit, "process_reshape_array", NULL);
06816 
06817    return;
06818 
06819 }  /* process_reshape_array */
06820 
06821 /******************************************************************************\
06822 |*                                                                            *|
06823 |* Description:                                                               *|
06824 |*      Add path names to the file path table.  Used by both -p and -I.       *|
06825 |*                                                                            *|
06826 |* Input parameters:                                                          *|
06827 |*      NONE                                                                  *|
06828 |*                                                                            *|
06829 |* Output parameters:                                                         *|
06830 |*      NONE                                                                  *|
06831 |*                                                                            *|
06832 |* Returns:                                                                   *|
06833 |*      NOTHING                                                               *|
06834 |*                                                                            *|
06835 \******************************************************************************/
06836 
06837 static  void    process_J_option(char   *optargs)
06838 
06839 {
06840 
06841    TRACE (Func_Entry, "process_J_option", NULL);
06842 
06843 # if defined(_ACCEPT_CMD_J)
06844    strncpy (mod_out_path, optargs, MAX_FILE_NAME_SIZE);
06845    mod_out_path[MAX_FILE_NAME_SIZE-1]   = EOS;
06846    cmd_line_flags.mod_out_path          = TRUE;
06847 # else
06848    ntr_msg_queue(0, 77, Log_Error, 0, (char *) NULL, 'J', ARG_ARG);
06849 # endif
06850 
06851    TRACE (Func_Exit, "process_J_option", NULL);
06852 
06853    return;
06854 
06855 }  /* process_J_option */
06856 
06857 
06858 /**************************************************************\
06859  * add -help option to dump out all possible opstions of
06860  * Open64 frontend
06861  * there are
06862  * a,b,d,e,f,g,i,k,m,o,p,q,r,R,s,S,t,u,v,z,A,C,D,x,F,G,I,J,M,
06863  * N,P,U,V,X,Y,Z options
06864 \*************************************************************/
06865 
06866 static void dump_options(void) 
06867   {
06868    int i;
06869    char *all_options[] = {
06870     " ",
06871     "The following options are available in the Open64 frontend:",
06872     "-a: memory options ",
06873     "   lign32",
06874     "   lign64",
06875     "   dalign",
06876     "   static_threadprivate",
06877     "   taskcommon",
06878     "   pad",
06879     "-b: binary file name ",
06880     "-d: off flags",
06881     "-e: on flags",
06882     "-f: souce format (-ffree or -ffixed) ",
06883     "-g: -G O",
06884     "-i: integer size", 
06885     "-k: Solaris profiling",
06886     "-m: process message level options",
06887     "-O: optimization options",
06888     "-p: module path name ",
06889     "-q: expression evaluator args passed via argv",
06890     "-r: runtime checking options passed via argv",
06891     "-R: runtime checking options passed via argv",
06892     "-s: size options passed via argv",
06893     "   integer8",
06894     "   logical8",
06895     "   real8",
06896     "   complex8",
06897     "   doubleprecision16",
06898     "   doublecomplex16",
06899     "   pointer8",
06900     "   cf77types",
06901     "   float64",
06902     "   default64",
06903     "   default32",
06904     "-S: cal file option",
06905     "-t: the command line truncation option passed via argv (t switch)",
06906     "-u: command line dump options passed via argv(u<switch>), note there should be no space after \'u\')",
06907     "         The following options are available in a compiler with -u: ",
06908     "          ",
06909     "         abort_ansi       Abort compilation after first ANSI msg.",
06910     "         cray_compatible  Sgi  turns s_default64 on, int1,2 off.",
06911     "         f                Unimplemented - controls fortran output.",
06912     "         dsm              Set by mongoose driver - not a user option.",
06913     "         fmm              Controls f-- prototype.",
06914     "         fmm1             Controls f-- prototype.",
06915     "         fmm2             Controls f-- prototype.",
06916     "         mod_version      Prints each module version number being read in",
06917     "         mp               Allow recognition of the SGI directives.",
06918     "         no_dim_pad       Do not pad out missing dimensions.",
06919     "         no_mod_output    Do not do module output.",
06920     "         open_mp          Allow recognition of the open mp directives.",
06921     "         pack_half_word   Turn on component packing for sdefault32",
06922     "         preinline=       Create an inline template for this file.",
06923     "         pvp_test         Used for meta development.",
06924     "         show             Show input command line to frontend.",
06925     "          ",
06926     "         The following options are available in a debug compiler with -u:",
06927     "          ",
06928     "         all              Dump all tables.  Do not do any tracing.",
06929     "         bd               Dump the bounds table.",
06930     "         blk              Dump the Block Stack.",
06931     "         cmd              Dump the commandline table.",
06932     "         cn               Dump the Constant table.",
06933     "         defines          Dump the build definitions.",
06934     "         file=            Specify the name of the debug output file.",
06935     "         fortran          Dump the output IR in a Fortran format.",
06936     "         fp               Dump the File Path table.",
06937     "         ftrace           Activate the function trace.",
06938     "         gl               Dump the Global Line table.",
06939     "         intrin           Dump the Intrinsic table.",
06940     "         ir1              Dump the IR after Pass 1.",
06941     "         ir2              Dump the IR after Pass 2.",
06942     "         ir3              Dump the IR after inlining.",
06943     "         ir4              Dump the IR after swapping dimensions.",
06944     "         mem_report       Provide a report of front-end memory usage.",
06945     "         msg              Issue an abort for all zero line numbers.",
06946     "         mtrace           Trace front-end memory usage.",
06947     "         names            Dump the local, global and hidden name tables.",
06948     "         pdg              Dump all calls to the PGDCS interface.",
06949     "         pdt              Dump PDT info while searching for modules.",
06950     "         sb               Dump the Storage Block table.",
06951     "         scp              Dump the scope table.",
06952     "         src              Dump whole source program.",
06953     "         stderr           Output msgs to stderr rather than ordering.",
06954     "         stmt             Dump each statement.",
06955     "         sytb             Dump the symbol table.",
06956     "         typ              Dump the Type table.",
06957     "         cnout            Dump constants as binary to stdout.",
06958     "-v: pdgcs debug option",
06959     "-z: clean up whirl (required for use with OpenAD/OpenAnalysis)",
06960     "-A: add use names to the files path tables for implicit use",
06961     "-C: CIF file output is requested via the -C option",
06962     "-D: define a preprocessing id",
06963     "-x: disregard CDIRs",
06964     "-F: fortran macro expansion",
06965     "-G: debug option",
06966     "-I: include option",
06967     "-J: .mod output locate",
06968     "-M: disable message numbers",
06969     "-N: fixed line size",
06970     "-P: position independent code model",
06971     "-U: undefine a preprocessing id",
06972     "-V: version option",
06973     "-X: MPP num PE's option",
06974     "-Y: ccg debug options",
06975     "-Z: co_array fortran",
06976     " ",
06977     "If you need to know arguments of option WHAT,mostly you can get the information by reading:",
06978     "\"process_WHAT_option\" in the source file cmd_line.c.",
06979     " ",
06980     "DONE"
06981    };
06982 
06983   i=0;
06984   while (strcmp(all_options[i],"DONE")) printf("%s\n",all_options[i++]);
06985   return;
06986  }
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines