diff anagram/agcore/engdef.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/agcore/engdef.cpp	Sat Dec 22 17:52:45 2007 -0500
@@ -0,0 +1,53 @@
+/*
+ * AnaGram, A System for Syntax Directed Programming
+ * Copyright 2006 David A. Holland. All Rights Reserved.
+ * See the file COPYING for license and usage terms.
+ *
+ * engdef.cpp - engine definition file
+ *
+ * This file obsoletes the external AnaGram.cgb file found
+ * in older versions of AnaGram.
+ */
+
+#include <stdlib.h>
+#include <string.h>
+#include "port.h" // for OPTLINK
+
+#include "engdef.h"
+
+//#define INCLUDE_LOGGING
+#include "log.h"
+
+
+#include "engine.h"
+
+
+static int OPTLINK cgtable_sort(const void *ventrya, const void *ventryb) {
+  const cgentry *entrya = (const cgentry *)ventrya;
+  const cgentry *entryb = (const cgentry *)ventryb;
+  return strcmp(entrya->name, entryb->name);
+}
+
+static int OPTLINK cgtable_search(const void *vkey, const void *ventryb) {
+  const char *key = (const char *)vkey;
+  const cgentry *entryb = (const cgentry *)ventryb;
+  return strcmp(key, entryb->name);
+}
+
+void engdef_init(void) {
+  LOGSECTION("engdef_init");
+  qsort(cgtable, cgtablenum, sizeof(cgtable[0]), cgtable_sort);
+}
+
+const char *engdef_get(const char *key) {
+  const void *ventry;
+  const cgentry *entry;
+  ventry = bsearch(key, cgtable, cgtablenum, sizeof(cgtable[0]),
+		   cgtable_search);
+  if (!ventry) {
+    //fprintf(stderr, "warning: cgb key <%s> not found\n", key);
+    return "";
+  }
+  entry = (const cgentry *)ventry;
+  return entry->data;
+}