diff anagram/guisupport/dc.h @ 0:13d2b8934445

Import AnaGram (near-)release tree into Mercurial.
author David A. Holland
date Sat, 22 Dec 2007 17:52:45 -0500
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/anagram/guisupport/dc.h	Sat Dec 22 17:52:45 2007 -0500
@@ -0,0 +1,446 @@
+/*
+ * AnaGram, A System for Syntax Directed Programming
+ * Copyright 1993-2002 Parsifal Software. All Rights Reserved.
+ * See the file COPYING for license and usage terms.
+ *
+ * dc.h - display contexts
+ */
+
+#ifndef DC_H
+#define DC_H
+
+class WindowConnector; // from wdata.h
+#include "agstring.h"
+#include "cint.h"
+
+struct wd {
+  const char *head_title_display;
+  const char *foot_title_display;
+  int refresh;                         /* increment to refresh */
+  cint c_loc_doc;                      /* location of cursor on document */
+  cint d_size;                         /* size of document */
+};
+
+struct dc {
+  // Reference control
+
+  int usage_count;
+
+  class ref {
+  protected:
+    dc *window;
+
+  public:
+    ref(void);
+    ref(dc *x);
+    ref(const ref &x);
+
+    ref &operator =(const ref &x);
+    ref &operator =(dc *x);
+    ~ref(void);
+
+    void discardData(void);
+    int exists(void) const { return window != NULL; }
+
+    operator dc *(void) const;
+    dc *operator ->(void) const;
+    int operator ==(const ref &x) const { return window == x.window; }
+    int operator !=(const ref &x) const { return window != x.window; }
+  };
+
+  AgString head_title, foot_title;
+  AgString columnHeadTitle;
+
+  dc *id;
+
+  wd *des;                             /* describes desired window */
+  WindowConnector *windowConnector;
+
+  int *tab_stops;
+
+
+  unsigned syntax_dependent : 1;
+
+  void init_dc(void);
+  void clear_data(void);
+
+  dc(void);
+
+  dc(const AgString head);
+  dc(const AgString head, const AgString foot);
+  dc(dc &x);
+
+  virtual ~dc();
+
+  struct MenuOption {
+    const char *option_name;
+    void (dc:: * action)();
+    int (dc::  * ok_action)();
+    MenuOption() : option_name(0) {}
+    MenuOption(const char *name) : option_name(name) {}
+    virtual ~MenuOption() {}
+    virtual ref getAuxWindow(ref, unsigned) { return ref(); }
+  };
+
+  virtual AgString findHelpTopic();
+  virtual MenuOption **getAuxWinMenu(void) { return NULL; }
+  virtual ref anomaly_trace(unsigned)    { return ref(); }
+  virtual ref aux_trace(unsigned)        { return ref(); }
+  virtual ref derive_rule(unsigned)      { return ref(); }
+  virtual ref derive_token(unsigned)     { return ref(); }
+  virtual ref expansion_chain(unsigned)  { return ref(); }
+  virtual ref expansion_rules(unsigned)  { return ref(); }
+  virtual ref keywords(unsigned)         { return ref(); }
+  virtual ref partition_sets(unsigned)   { return ref(); }
+  virtual ref previous_states(unsigned)  { return ref(); }
+  virtual ref problem_states(unsigned)   { return ref(); }
+  virtual ref productions(unsigned)      { return ref(); }
+
+  virtual ref reduction_states(unsigned) { return ref(); }
+  virtual ref reduction_trace(unsigned)  { return ref(); }
+  virtual ref rule_context(unsigned)     { return ref(); }
+  //virtual ref rule_stack(unsigned)       { return ref(); }
+  virtual ref select_conflict(unsigned)  { return ref(); }
+  virtual ref set_elements(unsigned)     { return ref(); }
+  virtual ref state_definition(unsigned) { return ref(); }
+  virtual ref state_expansion(unsigned)  { return ref(); }
+  virtual ref usage(unsigned)            { return ref(); }
+
+  virtual int derive_rule_ok(unsigned)      { return 1; }
+  virtual int expansion_chain_ok(unsigned)  { return 1; }
+  virtual int expansion_rules_ok(unsigned)  { return 1; }
+  virtual int keywords_ok(unsigned)         { return 1; }
+  virtual int previous_states_ok(unsigned)  { return 1; }
+  virtual int productions_ok(unsigned)      { return 1; }
+
+  virtual int reduction_states_ok(unsigned) { return 1; }
+  virtual int rule_context_ok(unsigned)     { return 1; }
+  virtual int set_elements_ok(unsigned)     { return 1; }
+  virtual int state_expansion_ok(unsigned)  { return 1; }
+  virtual int usage_ok(unsigned)            { return 1; }
+
+  void anomaly_trace()    ;
+  void aux_trace()        ;
+  void derive_rule()      ;
+  void derive_token()     ;
+  void expansion_chain()  ;
+  void expansion_rules()  ;
+  void keywords()         ;
+  void partition_sets()   ;
+  void previous_states()  ;
+  void problem_states()   ;
+  void productions()      ;
+
+  void reduction_states() ;
+  void reduction_trace()  ;
+  void rule_context()     ;
+  //void rule_stack()     ;
+  void select_conflict()  ;
+  void set_elements()     ;
+  void state_definition() ;
+  void state_expansion()  ;
+  void usage()            ;
+
+  int derive_rule_ok()    ;
+
+  int anomaly_trace_ok()    { return 1; }
+  int aux_trace_ok()        { return 1; }
+  int derive_token_ok()     { return derive_rule_ok(); }
+  int expansion_chain_ok();
+  int expansion_rules_ok();
+  int keywords_ok()       ;
+  int partition_sets_ok()   { return 1; }
+  int previous_states_ok();
+  int problem_states_ok()   { return derive_rule_ok(); }
+  int productions_ok()    ;
+
+  int reduction_states_ok();
+  int reduction_trace_ok()  { return derive_rule_ok(); }
+  int rule_context_ok()   ;
+  //int rule_stack_ok()     { return 1; }
+  int select_conflict_ok()  { return derive_rule_ok(); }
+  int set_elements_ok()   ;
+  int state_definition_ok() { return 1; }
+  int state_expansion_ok();
+  int usage_ok()          ;
+
+  struct AnomalyTraceOption : public MenuOption {
+    AnomalyTraceOption(void) : MenuOption("Keyword Anomaly Trace") {
+      ok_action = &dc::anomaly_trace_ok;
+      action = &dc::anomaly_trace;
+    }
+    virtual ~AnomalyTraceOption() {}
+    virtual ref getAuxWindow(ref d, unsigned ln) {
+      return d->anomaly_trace(ln);
+    }
+  };
+
+  struct AuxiliaryTraceOption : public MenuOption {
+    AuxiliaryTraceOption(void) : MenuOption("Auxiliary Trace") {
+      ok_action = &dc::aux_trace_ok;
+      action = &dc::aux_trace;
+    }
+    virtual ~AuxiliaryTraceOption() {}
+    virtual ref getAuxWindow(ref d, unsigned ln) {
+      return d->aux_trace(ln);
+    }
+  };
+
+  struct ConflictTraceOption : public MenuOption {
+    ConflictTraceOption(void) : MenuOption("Conflict Trace") {
+      ok_action = &dc::select_conflict_ok;
+      action = &dc::select_conflict;
+    }
+    virtual ~ConflictTraceOption() {}
+    virtual ref getAuxWindow(ref d, unsigned ln) {
+      return d->select_conflict(ln);
+    }
+  };
+
+
+  struct ExpansionChainOption : public MenuOption {
+    ExpansionChainOption(void) : MenuOption("Expansion Chain") {
+      ok_action = &dc::expansion_chain_ok;
+      action = &dc::expansion_chain;
+    }
+    virtual ~ExpansionChainOption() {}
+    virtual ref getAuxWindow(ref d, unsigned ln) {
+      return d->expansion_chain(ln);
+    }
+  };
+
+  struct ExpansionRulesOption : public MenuOption {
+    ExpansionRulesOption(void) : MenuOption("Expansion Rules") {
+      ok_action = &dc::expansion_rules_ok;
+      action = &dc::expansion_rules;
+    }
+    virtual ~ExpansionRulesOption() {}
+    virtual ref getAuxWindow(ref d, unsigned ln) {
+      return d->expansion_rules(ln);
+    }
+  };
+
+  struct KeywordsOption : public MenuOption {
+    KeywordsOption(void) : MenuOption("Keywords") {
+      ok_action = &dc::keywords_ok;
+      action = &dc::keywords;
+    }
+    virtual ~KeywordsOption() {}
+    virtual ref getAuxWindow(ref d, unsigned ln) {
+      return d->keywords(ln);
+    }
+  };
+
+  struct PartitionSetsOption : public MenuOption {
+    PartitionSetsOption(void) : MenuOption("Partition Sets") {
+      ok_action = &dc::partition_sets_ok;
+      action = &dc::partition_sets;
+    }
+    virtual ~PartitionSetsOption() {}
+    virtual ref getAuxWindow(ref d, unsigned ln) {
+      return d->partition_sets(ln);
+    }
+  };
+
+  struct PreviousStatesOption : public MenuOption {
+    PreviousStatesOption(void) : MenuOption("Previous States") {
+      ok_action = &dc::previous_states_ok;
+      action = &dc::previous_states;
+    }
+    virtual ~PreviousStatesOption() {}
+    virtual ref getAuxWindow(ref d, unsigned ln) {
+      return d->previous_states(ln);
+    }
+  };
+
+  struct ProblemStatesOption : public MenuOption {
+    ProblemStatesOption(void) : MenuOption("Problem States") {
+      ok_action = &dc::problem_states_ok;
+      action = &dc::problem_states;
+    }
+    virtual ~ProblemStatesOption() {}
+    virtual ref getAuxWindow(ref d, unsigned ln) {
+      return d->problem_states(ln);
+    }
+  };
+
+  struct ProductionsOption : public MenuOption {
+    ProductionsOption(void) : MenuOption("Productions") {
+      ok_action = &dc::productions_ok;
+      action = &dc::productions;
+    }
+    virtual ~ProductionsOption() {}
+    virtual ref getAuxWindow(ref d, unsigned ln) {
+      return d->productions(ln);
+    }
+  };
+
+  struct ReductionStatesOption : public MenuOption {
+    ReductionStatesOption(void) : MenuOption("Reduction States") {
+      ok_action = &dc::reduction_states_ok;
+      action = &dc::reduction_states;
+    }
+    virtual ~ReductionStatesOption() {}
+    virtual ref getAuxWindow(ref d, unsigned ln) {
+      return d->reduction_states(ln);
+    }
+  };
+
+  struct ReductionTraceOption : public MenuOption {
+    ReductionTraceOption(void) : MenuOption("Reduction Trace") {
+      ok_action = &dc::reduction_trace_ok;
+      action = &dc::reduction_trace;
+    }
+    virtual ~ReductionTraceOption() {}
+    virtual ref getAuxWindow(ref d, unsigned ln) {
+      return d->reduction_trace(ln);
+    }
+  };
+
+  struct RuleContextOption : public MenuOption {
+    RuleContextOption(void) : MenuOption("Rule Context") {
+      ok_action = &dc::rule_context_ok;
+      action = &dc::rule_context;
+    }
+    virtual ~RuleContextOption() {}
+    virtual ref getAuxWindow(ref d, unsigned ln) {
+      return d->rule_context(ln);
+    }
+  };
+
+  struct RuleDerivationOption : public MenuOption {
+    RuleDerivationOption(void) : MenuOption("Rule Derivation") {
+      ok_action = &dc::derive_rule_ok;
+      action = &dc::derive_rule;
+    }
+    virtual ~RuleDerivationOption() {}
+    virtual ref getAuxWindow(ref d, unsigned ln) {
+      return d->derive_rule(ln);
+    }
+  };
+/*
+  struct RuleStackOption : public MenuOption {
+    RuleStackOption(void) : MenuOption("Rule Stack") {
+      ok_action = &dc::rule_stack_ok;
+      action = &dc::rule_stack;
+    }
+    virtual ~RuleStackOption() {}
+    virtual ref getAuxWindow(ref d, unsigned ln) {
+      return d->rule_stack(ln);
+    }
+  };
+*/
+  struct SetElementsOption : public MenuOption {
+    SetElementsOption(void) : MenuOption("Set Elements") {
+      ok_action = &dc::set_elements_ok;
+      action = &dc::set_elements;
+    }
+    virtual ~SetElementsOption() {}
+    virtual ref getAuxWindow(ref d, unsigned ln) {
+      return d->set_elements(ln);
+    }
+  };
+
+  struct StateDefinitionOption : public MenuOption {
+    StateDefinitionOption(void) : MenuOption("State Definition") {
+      ok_action = &dc::state_definition_ok;
+      action = &dc::state_definition;
+    }
+    virtual ~StateDefinitionOption() {}
+    virtual ref getAuxWindow(ref d, unsigned ln) {
+      return d->state_definition(ln);
+    }
+  };
+
+  struct StateExpansionOption : public MenuOption {
+    StateExpansionOption(void) : MenuOption("State Expansion") {
+      ok_action = &dc::state_expansion_ok;
+      action = &dc::state_expansion;
+    }
+    virtual ~StateExpansionOption() {}
+    virtual ref getAuxWindow(ref d, unsigned ln) {
+      return d->state_expansion(ln);
+    }
+  };
+
+  struct TokenDerivationOption : public MenuOption {
+    TokenDerivationOption(void) : MenuOption("Token Derivation") {
+      ok_action = &dc::derive_token_ok;
+      action = &dc::derive_token;
+    }
+    virtual ~TokenDerivationOption() {}
+    virtual ref getAuxWindow(ref d, unsigned ln) {
+      return d->derive_token(ln);
+    }
+  };
+
+  struct TokenUsageOption : public MenuOption {
+    TokenUsageOption(void): MenuOption("Token Usage") {
+      ok_action = &dc::usage_ok;
+      action = &dc::usage;
+    }
+    virtual ~TokenUsageOption() {}
+    virtual ref getAuxWindow(ref d, unsigned ln) {
+      return d->usage(ln);
+    }
+  };
+/*
+  static const char *help_gs_msg;
+  static const char *help_index_msg;
+  static const char *kbd_ref_msg;
+  static const char *mouse_ref_msg;
+  static const char *using_help_msg;
+  static const char *help_wn_msg;
+*/
+
+  static AnomalyTraceOption    anomalyTraceOptionInstance;
+  static AuxiliaryTraceOption  auxiliaryTraceOptionInstance;
+  static ConflictTraceOption   conflictTraceOptionInstance;
+  static ExpansionChainOption  expansionChainOptionInstance;
+  static ExpansionRulesOption  expansionRulesOptionInstance;
+  static KeywordsOption        keywordsOptionInstance;
+  static PartitionSetsOption   partitionSetsOptionInstance;
+  static PreviousStatesOption  previousStatesOptionInstance;
+  static ProblemStatesOption   problemStatesOptionInstance;
+  static ProductionsOption     productionsOptionInstance;
+  static ReductionStatesOption reductionStatesOptionInstance;
+  static ReductionTraceOption  reductionTraceOptionInstance;
+  static RuleContextOption     ruleContextOptionInstance;
+  static RuleDerivationOption  ruleDerivationOptionInstance;
+  //static RuleStackOption       ruleStackOptionInstance;
+  static SetElementsOption     setElementsOptionInstance;
+  static StateDefinitionOption stateDefinitionOptionInstance;
+  static StateExpansionOption  stateExpansionOptionInstance;
+  static TokenDerivationOption tokenDerivationOptionInstance;
+  static TokenUsageOption      tokenUsageOptionInstance;
+
+  virtual void getLine(unsigned) const;
+  virtual void synchCursor(unsigned) const {}
+};
+
+typedef dc::ref dc_ref;
+
+template <class T>
+class DcRef : public dc::ref {
+public:
+  DcRef(void);// {}
+  DcRef(T *x);// : dc::ref((dc *) x) {}
+  DcRef(const DcRef<T> &x);// : dc::ref(x) {}
+  DcRef(dc::ref x);// : dc::ref(x) {}
+
+  operator T *() { return (T *) window; }
+  T *operator ->(void)
+    { return (T *) window; }
+};
+
+template <class T>
+DcRef<T>::DcRef(void) {}
+template <class T>
+DcRef<T>::DcRef(T *x) : dc::ref((dc *) x) {}
+template <class T>
+DcRef<T>::DcRef(const DcRef<T> &x) : dc::ref(x) {}
+template <class T>
+DcRef<T>::DcRef(dc::ref x) : dc::ref(x) {}
+
+
+#endif /* DC_H */