diff anagram/guisupport/anom.cpp @ 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/anom.cpp	Sat Dec 22 17:52:45 2007 -0500
@@ -0,0 +1,144 @@
+/*
+ * AnaGram, A System for Syntax Directed Programming
+ * Copyright 1993-1999 Parsifal Software. All Rights Reserved.
+ * See the file COPYING for license and usage terms.
+ *
+ * anom.cpp - Anomaly diagnosis module
+ */
+
+#include "anom.h"
+#include "cd.h"
+#include "conflictdc.h"
+#include "conflicttrc.h"
+#include "data.h"
+#include "dc.h"
+#include "nckwtr.h"
+#include "rule.h"
+#include "stacks.h"
+#include "tracedc.h"
+#include "ut.h"
+#include "wm1.h"
+#include "ws.h"
+
+//#define INCLUDE_LOGGING
+#include "log.h"
+
+
+static void find_anomaly(int sn, int tn, int fn) {
+  LOGSECTION("find_anomaly");
+  analyze_conflict(sn, tn, fn, 1);
+}
+
+static int anomaly_table_tabs[] = {7,13,15,0};
+
+anomaly_table_dc::anomaly_table_dc(void)
+  : dc("Keyword Anomalies")
+{
+  LOGSECTION("anomaly_table_dc::anomaly_table_dc");
+  tab_stops = anomaly_table_tabs;
+  des->d_size.y = 2*key_mess->nt;
+  //getWidth();
+  //des->c_size = cint(des->d_size.x,1);
+  //resize_window();
+}
+
+dc_ref anomaly_table_dc::anomaly_trace(unsigned ln) {
+  LOGSECTION("anomaly_table_dc::anomaly_trace");
+  int sn, tn, fn, rs;
+  dc_ref new_window;
+  tsd *stack;
+
+  xtx(key_mess, ln/2, &sn, &tn, &fn, &rs);
+  find_anomaly(sn, tn, fn);
+  stack = make_stored_trace(&new_conflict_stack[0],
+			    new_conflict_stack_depth, conflict_token);
+  new_window = dc_ref(new trace_window_dc("Keyword Anomaly Trace", 
+					  stack, sn, tn, fn));
+  delete_tsd(stack);
+  return new_window;
+}
+
+dc_ref anomaly_table_dc::derive_rule(unsigned ln) {
+  LOGSECTION("anomaly_table_dc::derive_rule");
+  int sn,tn,fn,rs;
+
+  ln /= 2;
+  xtx(key_mess,ln, &sn, &tn, &fn, &rs);
+  find_anomaly(sn, tn, fn);
+  return build_rule_derivation(sn, fn);
+}
+
+void anomaly_table_dc::getLine(unsigned ln) const {
+  LOGSECTION("anomaly_table_dc::getLine");
+  int sn, tn, fn, rs;
+  //unsigned char *ks;
+  int parity = ln % 2;
+
+  ln /= 2;
+  xtx(key_mess, ln, &sn, &tn, &fn, &rs);
+  //ks = (unsigned char *) dict_str(key_dict,map_token_number[tn].key);
+  //ks = (unsigned char *) Keyword(map_token_number[tn].key)->string.pointer();
+  //ks = (unsigned char *) map_token_number[tn].key->string.pointer();
+  //if (parity == 0) ssprintf("S%03d:  T%03d = \"%s\"",sn,tn,ks);
+  //if (parity == 0) ssprintf("S%03d:\tT%03d\t=\t\"%s\"",sn,tn,ks);
+  if (parity == 0) {
+    ssprintf("S%03d:\tT%03d\t=\t", sn, tn);
+    atkn(tn);
+  }
+  else {
+    //sss("       ");
+    sss("\t");
+    append_item(fn, -1);
+  }
+}
+
+//#ifndef OLDUI
+int anomaly_table_dc::reduction_states_ok(unsigned ln) {
+  LOGSECTION("anomaly_table_dc::reduction_states_ok");
+  int sn, tn, fn, rs;
+
+  ln /= 2;
+  xtx(key_mess, ln, &sn, &tn, &fn, &rs);
+  return reduction_states_window_ok(fn, Rule(fn)->length());
+}
+//#endif
+
+dc_ref anomaly_table_dc::reduction_states(unsigned ln) {
+  LOGSECTION("anomaly_table_dc::reduction_states");
+  int sn, tn, fn, rs;
+
+  ln /= 2;
+  xtx(key_mess, ln, &sn, &tn, &fn, &rs);
+  return reduction_states_window(sn,fn,Rule(fn)->length());
+}
+
+dc_ref anomaly_table_dc::reduction_trace(unsigned ln) {
+  LOGSECTION("anomaly_table_dc::reduction_trace");
+  int sn, tn, fn, rs;
+
+  ln /= 2;
+  xtx(key_mess, ln, &sn, &tn, &fn, &rs);
+  find_anomaly(sn, tn, fn);
+  return build_red_trace(sn, tn, fn);
+}
+
+dc_ref anomaly_table_dc::state_definition(unsigned ln) {
+  LOGSECTION("anomaly_table_dc::state_definition");
+  int sn, tn, fn, rs;
+
+  ln /= 2;
+  xtx(key_mess, ln, &sn, &tn, &fn, &rs);
+  return conflict_state_window(sn);
+}
+
+void anomaly_table_dc::synchCursor(unsigned ln) const {
+  LOGSECTION("anomaly_table_dc::synch_cursor");
+  int sn, tn, fn, rs;
+  xtx(key_mess, ln/2, &sn, &tn, &fn, &rs);
+  if (fn) {
+    set_rule_line(fn);
+  }
+}
+
+
+/* End ANOM.C */