Mercurial > ~dholland > hg > ag > index.cgi
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; +}