view anagram/agcore/config.cpp @ 14:a02e9434072e

Fix friend declaration for gcc10. XXX: did not check it against the IBM compiler, might end up needing XXX: to be conditional.
author David A. Holland
date Tue, 31 May 2022 00:59:42 -0400
parents 13d2b8934445
children
line wrap: on
line source

/*
 * AnaGram, A System for Syntax Directed Programming
 * Copyright 1993-2002 Parsifal Software. All Rights Reserved.
 * See the file COPYING for license and usage terms.
 *
 * config.cpp
 */

#include "agstring.h"
#include "config.h"
#include "configparam.h"

//#define INCLUDE_LOGGING
#include "log.h"


#ifdef AG_ON_UNIX
#define ALL_MASK "*"
#endif

#ifdef AG_ON_WINDOWS
#define ALL_MASK "*.*"
#endif

#ifdef AG_ON_AMIGA
#define ALL_MASK "#?"
#endif

////////////////////////////////////////////////////////////

#undef INTEGER_PARAM
#undef STRING_PARAM
#undef SWITCH
#undef DICT_PARAM
#undef TOKEN_PARAM
#undef TEXT_PARAM

#define INTEGER_PARAM(txt,nm) static IntegerParam nm##Param(txt,nm); int nm
#define STRING_PARAM(txt, nm) static StringParam  nm##Param(txt,nm);AgString nm
#define SWITCH(txt, nm)       static ConfigSwitch nm##Param(txt,nm); int nm
#define CAST_PARAM(txt, nm)   static CastParam    nm##Param(txt,nm); int nm
#define TOKEN_PARAM(txt, nm)  static TokenParam   nm##Param(txt,nm); int nm
#define TEXT_PARAM(txt, nm)   static TextParam    nm##Param(txt,nm);AgString nm

SWITCH       ("allow macros",           allow_macros)           = 1;
SWITCH       ("auto init",              auto_init)              = 1;
SWITCH       ("auto resynch",           auto_resynch)           = 0;

SWITCH       ("backtrack",              backtrack)              = 1;
INTEGER_PARAM("bottom margin",          bottom_margin)          = 3;
SWITCH       ("bright background",      bright_background)      = 1;

SWITCH       ("case sensitive",         case_sensitive)         = 1;
STRING_PARAM ("compile command",        compile_command)        = "";
SWITCH       ("const data",             const_data)             = 1;
TEXT_PARAM   ("context type",           context_type)           ;
STRING_PARAM ("coverage file name",     coverage_file_name)     = "#.nrc";

SWITCH       ("declare pcb",            declare_pcb)            = 1;
CAST_PARAM   ("default input type",     default_input_type)     ;
SWITCH       ("default reductions",     default_reductions)     = 1; 
CAST_PARAM   ("default token type",     default_token_type)     ;
SWITCH       ("diagnose errors",        diagnose_errors)        = 1;
SWITCH       ("distinguish lexemes",    distinguish_lexemes)    = 0;

STRING_PARAM ("edit command",           edit_command)           = "ed #.syn";
SWITCH       ("enable mouse",           enable_mouse)           = 1;
STRING_PARAM ("enum constant name",     enum_constant_name)     = "$_%_token";
TOKEN_PARAM  ("eof token",              eof_token)              = 0;
SWITCH       ("error frame",            error_frame)            = 0;
TOKEN_PARAM  ("error token",            error_token)            ;
SWITCH       ("error trace",            error_trace)            = 0;
SWITCH       ("escape backslashes",     escape_backslashes)     = 0;
SWITCH       ("event driven",           event_driven)           = 0;

SWITCH       ("far tables",             far_tables)             = 0;

TOKEN_PARAM  ("grammar token",          grammar_token)          = 0;

STRING_PARAM ("header file name",       header_file_name)       = "#.h";

SWITCH       ("input values",           input_values)           = 0;
SWITCH       ("iso latin 1",            iso_latin_1)            = 1;

INTEGER_PARAM("line length",            line_length)            = 80;
SWITCH       ("line numbers",           line_numbers)           = 0;
STRING_PARAM ("line numbers path",      line_numbers_path)      ;
SWITCH       ("lines and columns",      lines_and_columns)      = 1;

SWITCH       ("main program",           main_program)           = 1;
INTEGER_PARAM("max conflicts",          max_conflicts)          = 50;

SWITCH       ("near functions",         near_functions)         = 0;
SWITCH       ("nest comments",          nest_comments)          = 0;
SWITCH       ("no cr",                  no_cr)                  = 0;

SWITCH       ("old style",              old_style)              = 0;

INTEGER_PARAM("page length",            page_length)            = 66;
STRING_PARAM ("parser file name",       parser_file_name)       = "#.c";
TEXT_PARAM   ("parser name",            parser_name)            = "#";
CAST_PARAM   ("parser stack alignment", parser_stack_alignment) ;
INTEGER_PARAM("parser stack size",      parser_stack_size)      = 128;
SWITCH       ("pointer input",          pointer_input)          = 0;
TEXT_PARAM   ("pointer type",           pointer_type)      = "unsigned char *";
STRING_PARAM ("print file name",        print_file_name)        = "LPT1";

SWITCH       ("quick reference",        quick_reference)        = 0;

SWITCH       ("reduction choices",      reduction_choices)      = 0;
SWITCH       ("reentrant parser",       reentrant_parser)       = 0;
SWITCH       ("rule coverage",          rule_coverage)          = 0;

INTEGER_PARAM("tab spacing",            tab_spacing)            = 8;
SWITCH       ("test file binary",       test_file_binary)       = 0;
STRING_PARAM ("test file mask",         test_file_mask)         = ALL_MASK;
SWITCH       ("test range",             test_range)             = 1;
SWITCH       ("token names",            token_names)            = 0;
SWITCH       ("token names only",       token_names_only)       = 0;
INTEGER_PARAM("top margin",             top_margin)             = 3;
SWITCH       ("traditional engine",     traditional_engine)     = 0;

INTEGER_PARAM("video mode",             video_mode)             = -1;

////////////////////////////////////////////////////////////

#define PARAM_REF(name) &name##Param

ConfigParam *ConfigParam::table[] = {
  PARAM_REF(allow_macros),
  PARAM_REF(auto_init),
  PARAM_REF(auto_resynch),

  PARAM_REF(backtrack),
  PARAM_REF(bottom_margin),
  PARAM_REF(bright_background),

  PARAM_REF(case_sensitive),
  PARAM_REF(compile_command),
  PARAM_REF(const_data),
  PARAM_REF(context_type),
  PARAM_REF(coverage_file_name),

  PARAM_REF(declare_pcb),
  PARAM_REF(default_input_type),
  PARAM_REF(default_reductions),
  PARAM_REF(default_token_type),
  PARAM_REF(diagnose_errors),
  PARAM_REF(distinguish_lexemes),

  PARAM_REF(edit_command),
  PARAM_REF(enable_mouse),
  PARAM_REF(enum_constant_name),
  PARAM_REF(eof_token),
  PARAM_REF(error_frame),
  PARAM_REF(error_token),
  PARAM_REF(error_trace),
  PARAM_REF(escape_backslashes),
  PARAM_REF(event_driven),

  PARAM_REF(far_tables),

  PARAM_REF(grammar_token),

  PARAM_REF(header_file_name),

  PARAM_REF(input_values),
  PARAM_REF(iso_latin_1),

  PARAM_REF(line_length),
  PARAM_REF(line_numbers),
  PARAM_REF(line_numbers_path),
  PARAM_REF(lines_and_columns),

  PARAM_REF(main_program),
  PARAM_REF(max_conflicts),

  PARAM_REF(near_functions),
  PARAM_REF(nest_comments),
  PARAM_REF(no_cr),

  PARAM_REF(old_style),

  PARAM_REF(page_length),
  PARAM_REF(parser_file_name),
  PARAM_REF(parser_name),
  PARAM_REF(parser_stack_alignment),
  PARAM_REF(parser_stack_size),
  PARAM_REF(pointer_input),
  PARAM_REF(pointer_type),
  PARAM_REF(print_file_name),

  PARAM_REF(quick_reference),

  PARAM_REF(reduction_choices),
  PARAM_REF(reentrant_parser),
  PARAM_REF(rule_coverage),

  PARAM_REF(tab_spacing),
  PARAM_REF(test_file_binary),
  PARAM_REF(test_file_mask),
  PARAM_REF(test_range),
  PARAM_REF(token_names),
  PARAM_REF(token_names_only),
  PARAM_REF(top_margin),
  PARAM_REF(traditional_engine),
  //PARAM_REF(trial_copy_code),

  PARAM_REF(video_mode),
};

int ConfigParam::paramCount = sizeof(ConfigParam::table)/sizeof(ConfigParam *);

#ifdef __IBMCPP__
#pragma define(Param<int>)
#pragma define(Param<AgString>)
#endif

#ifdef _MSC_VER
template class Param<int>;
template class Param<AgString>;
#endif

#ifdef __GNUC__
template class Param<int>;
template class Param<AgString>;
#endif

#ifdef __WATCOM_CPLUSPLUS__
typedef Param<int> fake1;
template Param<AgString> fake2;
#endif

#ifdef __BCPLUSPLUS__
#pragma option -Jgd
typedef Param<int> fake1;
template Param<AgString> fake2;
#endif