Picture

/* Gamelon API - C++ Language

 * Copyright (c) 1993-1997 Menai Corporation

 * All rights reserved.  U.S. Patent # 5,568,639 and patent pending.

 * Menai Corporation, Menlo Park, California

 */

 

/* Interfaces available for other computer languages, including

 * C, Delphi and Java.  Interface available also for ActiveX.

 */

 

/* Notes.

 *

 * 1.  A small number of functions can be called directly, rather than

 * through a CURSOR: these provide information about the library

 * and the computer node at which it is operating.

 *

 * 2.  Most functions are available in two formats, designed the

 * 'e prototype' and 'n prototype' formats.  The 'e' indicates that

 * the function returns a numeric indication of outcome in which

 * a "zero" value indicates success and a "non-zero" value indicates

 * some specific malfunction or failure.  The 'n' indicates that

 * the function is 'not' an 'e' format, and that it can be expected

 * to return a meaningful value that relates to the outcome of the

 * function call, such as a number that represents a count performed

 * by the function.  In both formats the same information is available,

 * but the 'n' prototype requires a follow-up call to ascertain the

 * error return value.  The 'e' format is very helpful for error

 * detection and self-documentation of code; the 'n' format is needed

 * for inline function calls.

 

/* Functions that do not require an open Cursor: */

 

/* Note: CursorQueryError will not return errors generated by the

 *       Local functions.

 */

 

/* e prototype functions */

 

EC0 DLL_LINKAGE eLocalSetTmpPath(const char *tmppath);

EC0 DLL_LINKAGE eLocalQueryTmpPath(char *tmppath, size_t size);

EC0 DLL_LINKAGE eLocalQueryProduct(char *product, size_t size);

EC0 DLL_LINKAGE eLocalQueryVersion(char *version, size_t size);

EC0 DLL_LINKAGE eLocalQueryErrorString(EC0 error, char *estr, size_t size);

EC0 DLL_LINKAGE eLocalQueryNodeIdentity(unsigned long *nodeid);

 

/* n prototype functions */

void            DLL_LINKAGE nLocalSetTmpPath(const char *tmppath);

char *          DLL_LINKAGE nLocalQueryTmpPath(char *tmppath, size_t size);

char *          DLL_LINKAGE nLocalQueryProduct(char *product, size_t size);

char *          DLL_LINKAGE nLocalQueryVersion(char *version, size_t size);

char *          DLL_LINKAGE nLocalQueryErrorString(EC0 error, char *estr, size_t size);

unsigned long   DLL_LINKAGE nLocalQueryNodeIdentity(void);

 

/* CURSOR member functions: */

 

class CURSOR

{

public:

  enum OTYPE      { OT_OBJ,   OT_AGGR,  OT_DATA,  OT_SINT,  OT_UINT, OT_FLT,

                    OT_CHAR,  OT_STR,   OT_BIN,   OT_OSF,   OT_BAD,  OT_IDX,

                    OT_REF,   OT_UNIC,  OT_UNIS };

  enum ACCESSMODE { AM_SHARED, AM_KEYED, AM_EXCLUSIVE };

  enum EXPORTMODE { EM_OVERWRITE, EM_FAIL, EM_BACKUP };

  enum KEYTYPE    { KT_PRIM, KT_SINT, KT_UINT, KT_STR, KT_BIN };

 

  /* Cursor Creation and Deletion */

  CURSOR(const char *filename, ACCESSMODE accessmode=AM_SHARED,

         const void *key=NULL, size_t keysize=0)

    { p=NULL; d=0; InitCursor(filename, accessmode, key, keysize); }

  ~CURSOR() { TerminateCursor(); }

 

/* e prototype functions */

 

  /* Node */

  EC0 DLL_LINKAGE eNodeSetTmpPath(const char *tmppath);

  EC0 DLL_LINKAGE eNodeQueryTmpPath(char *tmppath, size_t size);

  EC0 DLL_LINKAGE eNodeQueryProduct(char *product, size_t size);

  EC0 DLL_LINKAGE eNodeQueryVersion(char *version, size_t size);

  EC0 DLL_LINKAGE eNodeQueryErrorString(EC0 error, char *estr, size_t size);

  EC0 DLL_LINKAGE eNodeQueryNodeIdentity(unsigned long *nodeid);

 

  /* File Control */

  EC0 DLL_LINKAGE eFileQueryNameStrLen(size_t *len);

  EC0 DLL_LINKAGE eFileQueryName(char *name, size_t size);

  EC0 DLL_LINKAGE eFileQueryAccessMode(ACCESSMODE *accessmode);

  EC0 DLL_LINKAGE eFileQueryLength(unsigned long *length);

  EC0 DLL_LINKAGE eFileQueryNodeIdentity(unsigned long *nodeid);

  EC0 DLL_LINKAGE eFileQueryForeign(int *foreign);

 

  /* Cursor Settings */

  EC0 DLL_LINKAGE eCursorSetDataObjectsOnly(int on);

  EC0 DLL_LINKAGE eCursorSetFollow(int on);

  EC0 DLL_LINKAGE eCursorSetValidate(int on);

  EC0 DLL_LINKAGE eCursorSetAutoIdentity(int on);

  EC0 DLL_LINKAGE eCursorQueryDataObjectsOnly(int *on);

  EC0 DLL_LINKAGE eCursorQueryFollow(int *on);

  EC0 DLL_LINKAGE eCursorQueryValidate(int *on);

  EC0 DLL_LINKAGE eCursorQueryAutoIdentity(int *on);

 

  /* Cursor Rights */

  EC0 DLL_LINKAGE eCursorSetRights(unsigned char rights);

  EC0 DLL_LINKAGE eCursorGrantRights(unsigned char rights);

  EC0 DLL_LINKAGE eCursorRevokeRights(unsigned char rights);

  EC0 DLL_LINKAGE eCursorQueryRights(unsigned char *rights);

  EC0 DLL_LINKAGE eCursorQueryRights(unsigned char rights, int *on);

 

  /* Cursor Actions */

  EC0 DLL_LINKAGE eCursorMoveIn(void);

  EC0 DLL_LINKAGE eCursorMoveOut(void);

  EC0 DLL_LINKAGE eCursorMovePrior(OTYPE target=OT_OBJ);

  EC0 DLL_LINKAGE eCursorMoveNext(OTYPE target=OT_OBJ);

  EC0 DLL_LINKAGE eCursorMoveFirst(OTYPE target=OT_OBJ);

  EC0 DLL_LINKAGE eCursorMoveLast(OTYPE target=OT_OBJ);

  EC0 DLL_LINKAGE eCursorMovePreFirst(void);

  EC0 DLL_LINKAGE eCursorMovePostLast(void);

  EC0 DLL_LINKAGE eCursorMoveTo(CURSOR *dest);

  EC0 DLL_LINKAGE eCursorMoveTo(const char *position);

  EC0 DLL_LINKAGE eCursorMoveTo(unsigned long objectid);

  EC0 DLL_LINKAGE eCursorMoveTo(unsigned long objectid, CURSOR *index);

  EC0 DLL_LINKAGE eCursorMoveTo(const char *filename, ACCESSMODE accessmode,

                                const void *key, size_t keysize);

  EC0 DLL_LINKAGE eCursorJumpTo(void);

  EC0 DLL_LINKAGE eCursorJumpTo(CURSOR *index);

  EC0 DLL_LINKAGE eCursorSeizeObject(void);

  EC0 DLL_LINKAGE eCursorUnseizeObject(void);

  EC0 DLL_LINKAGE eCursorUnseizeAllObjects(void);

  EC0 DLL_LINKAGE eCursorCountObjects(unsigned long *count,

                                      OTYPE otype=OT_OBJ);

 

  /* Cursor Index Actions */

  EC0 DLL_LINKAGE eCursorAssociate(CURSOR *index);

  EC0 DLL_LINKAGE eCursorDisassociate(CURSOR *index);

 

  /* Miscellaneous Cursor Queries */

  EC0 DLL_LINKAGE eCursorQueryValid(int *valid);

  EC0 DLL_LINKAGE eCursorQueryLevel(long *level);

  EC0 DLL_LINKAGE eCursorQueryOffset(long *offset);

  EC0 DLL_LINKAGE eCursorQueryPositionStrLen(size_t *len);

  EC0 DLL_LINKAGE eCursorQueryPosition(char *position, size_t size);

  EC0 DLL_LINKAGE eCursorQueryOnSamePosition(CURSOR *otherc, int *onsame);

  EC0 DLL_LINKAGE eCursorQueryOnObject(int *onobject);

  EC0 DLL_LINKAGE eCursorQueryOnNull(int *onnull);

  EC0 DLL_LINKAGE eCursorQueryOnPreFirst(int *onprefirst);

  EC0 DLL_LINKAGE eCursorQueryOnPostLast(int *onpostlast);

  EC0 DLL_LINKAGE eCursorQueryOnSeizedObject(int *onseized);

  EC0 DLL_LINKAGE eCursorQueryError(EXTEC0 *error);

 

  /* Alteration Actions */

  EC0 DLL_LINKAGE eAltInsert(void);

  EC0 DLL_LINKAGE eAltAppend(void);

  EC0 DLL_LINKAGE eAltReplace(void);

  EC0 DLL_LINKAGE eAltModify(void);

  EC0 DLL_LINKAGE eAltRemove(void);

  EC0 DLL_LINKAGE eAltStartAggregating(void);

  EC0 DLL_LINKAGE eAltStartBuffering(void);

  EC0 DLL_LINKAGE eAltCommit(void);

  EC0 DLL_LINKAGE eAltAbandon(void);

  EC0 DLL_LINKAGE eAltAbandonPendingAnnotations(void);

  EC0 DLL_LINKAGE eAltBeginFixedTransaction(void);

  EC0 DLL_LINKAGE eAltCommitFixedTransaction(void);

  EC0 DLL_LINKAGE eAltAbandonFixedTransaction(void);

  EC0 DLL_LINKAGE eAltBeginWanderingTransaction(void);

  EC0 DLL_LINKAGE eAltCommitWanderingTransaction(void);

  EC0 DLL_LINKAGE eAltAbandonWanderingTransaction(void);

  EC0 DLL_LINKAGE eAltQueryAltState(unsigned short *altstate);

  EC0 DLL_LINKAGE eAltEncrypt(const unsigned char *key, size_t size);

  EC0 DLL_LINKAGE eAltDecrypt(const unsigned char *key, size_t size);

  EC0 DLL_LINKAGE eAltDecryptForeign(const unsigned char *key, size_t size,

                                     const char *logfilename);

 

  /* Object Read Actions */

  EC0 DLL_LINKAGE eObjRead(signed char *sc);

  EC0 DLL_LINKAGE eObjRead(short *ss);

  EC0 DLL_LINKAGE eObjRead(long *sl);

  EC0 DLL_LINKAGE eObjRead(unsigned char *uc);

  EC0 DLL_LINKAGE eObjRead(unsigned short *us);

  EC0 DLL_LINKAGE eObjRead(unsigned long *ul);

  EC0 DLL_LINKAGE eObjRead(float *f);

  EC0 DLL_LINKAGE eObjRead(double *d);

  EC0 DLL_LINKAGE eObjRead(char *c);

  EC0 DLL_LINKAGE eObjRead(char *s, size_t size);

  EC0 DLL_LINKAGE eObjReadUnicodeChar(unichar *unic);

  EC0 DLL_LINKAGE eObjReadUnicodeString(unichar *unis, size_t size);

  EC0 DLL_LINKAGE eObjRead(void *buffer, size_t *size, long offset=0);

 

  /* Object Write Actions */

  EC0 DLL_LINKAGE eObjWriteAggregate(void);

  EC0 DLL_LINKAGE eObjWriteAbsent(OTYPE otype);

  EC0 DLL_LINKAGE eObjWrite(signed char sc);

  EC0 DLL_LINKAGE eObjWrite(short ss);

  EC0 DLL_LINKAGE eObjWrite(long sl);

  EC0 DLL_LINKAGE eObjWrite(unsigned char uc);

  EC0 DLL_LINKAGE eObjWrite(unsigned short us);

  EC0 DLL_LINKAGE eObjWrite(unsigned long ul);

  EC0 DLL_LINKAGE eObjWrite(float f);

  EC0 DLL_LINKAGE eObjWrite(double d);

  EC0 DLL_LINKAGE eObjWrite(char c);

  EC0 DLL_LINKAGE eObjWrite(const char *s);

  EC0 DLL_LINKAGE eObjWriteUnicodeChar(unichar unic);

  EC0 DLL_LINKAGE eObjWriteUnicodeString(const unichar *unis);

  EC0 DLL_LINKAGE eObjWrite(const void *buffer, size_t size);

  EC0 DLL_LINKAGE eObjWritePrimaryIndex(const char *filename=NULL);

  EC0 DLL_LINKAGE eObjWriteSecondaryIndex(KEYTYPE keytype, size_t keysize);

  EC0 DLL_LINKAGE eObjWriteReference(CURSOR *target);

  EC0 DLL_LINKAGE eObjWriteReference(unsigned long objectid);

 

  /* Import and Export */

  EC0 DLL_LINKAGE eObjImportBinary(const char *pathname);

  EC0 DLL_LINKAGE eObjExportBinary(const char *pathname,

                                   EXPORTMODE mode=EM_OVERWRITE);

  EC0 DLL_LINKAGE eObjImportOSFile(const char *pathname,

                                   unsigned long retain=OSF_ALL);

  EC0 DLL_LINKAGE eObjExportOSFile(const char *pathname,

                                   EXPORTMODE mode=EM_OVERWRITE);

  EC0 DLL_LINKAGE eObjImportObject(void *buffer, size_t size,

                                   const char *logfilename);

  EC0 DLL_LINKAGE eObjExportObject(void *buffer, size_t *size);

  EC0 DLL_LINKAGE eObjImportObject(const char *pathname,

                                   const char *logfilename);

  EC0 DLL_LINKAGE eObjExportObject(const char *pathname,

                                   EXPORTMODE mode=EM_OVERWRITE);

 

  /* Object Transfers between Cursors */

  EC0 DLL_LINKAGE eObjCopyFrom(CURSOR *source);

  EC0 DLL_LINKAGE eObjMoveFrom(CURSOR *source);

 

  /* Object Content Management */

  EC0 DLL_LINKAGE eObjApplyIdentity(unsigned long *objectid=NULL);

  EC0 DLL_LINKAGE eObjSetClass(unsigned long classnum);

  EC0 DLL_LINKAGE eObjSetName(const char *name);

  EC0 DLL_LINKAGE eObjSetComment(const char *comment);

  EC0 DLL_LINKAGE eObjPurgeAnnotations(unsigned long annotations);

  EC0 DLL_LINKAGE eObjChangeIndexTarget(const char *filename);

  EC0 DLL_LINKAGE eObjQueryNodeIdentity(unsigned long *nodeid);

  EC0 DLL_LINKAGE eObjQueryForeign(int *foreign);

  EC0 DLL_LINKAGE eObjQueryObjectIdentity(unsigned long *objectid);

  EC0 DLL_LINKAGE eObjQueryClass(unsigned long *classnum);

  EC0 DLL_LINKAGE eObjQueryNameStrLen(size_t *len);

  EC0 DLL_LINKAGE eObjQueryCommentStrLen(size_t *len);

  EC0 DLL_LINKAGE eObjQueryName(char *name, size_t size);

  EC0 DLL_LINKAGE eObjQueryComment(char *comment, size_t size);

  EC0 DLL_LINKAGE eObjQueryEncryption(unsigned long *method);

  EC0 DLL_LINKAGE eObjQueryIndexTarget(char *filename, size_t size);

 

  /* Object Queries */

  EC0 DLL_LINKAGE eObjQueryValid(int *valid);

  EC0 DLL_LINKAGE eObjQueryType(OTYPE *otype, size_t *size=NULL);

  EC0 DLL_LINKAGE eObjQueryAggregate(int *aggregate);

  EC0 DLL_LINKAGE eObjQueryData(int *data);

  EC0 DLL_LINKAGE eObjQueryDataAbsent(int *absent);

  EC0 DLL_LINKAGE eObjQueryDataSize(size_t *size);

  EC0 DLL_LINKAGE eObjQueryObjectSize(size_t *size);

  EC0 DLL_LINKAGE eObjQueryAggregateEmpty(int *empty);

  EC0 DLL_LINKAGE eObjQueryOSFileNameStrLen(size_t *len);

  EC0 DLL_LINKAGE eObjQueryOSFilePathStrLen(size_t *len);

  EC0 DLL_LINKAGE eObjQueryOSFileName(char *name, size_t size);

  EC0 DLL_LINKAGE eObjQueryOSFilePath(char *path, size_t size);

  EC0 DLL_LINKAGE eObjQueryOSFileLastModTime(time_t *modtime);

  EC0 DLL_LINKAGE eObjQueryOSFileLength(unsigned long *length);

  EC0 DLL_LINKAGE eObjQueryReference(unsigned long *objectid);

  EC0 DLL_LINKAGE eObjQueryIndexKeyType(KEYTYPE *keytype, size_t *keysize);

 

  /* Object Display Actions */

  EC0 DLL_LINKAGE eObjQueryDisplayStrLen(size_t *len);

  EC0 DLL_LINKAGE eObjDisplay(char *s, size_t size);

  EC0 DLL_LINKAGE eObjExportDisplay(const char *filename);

 

  /* Indexing */

  EC0 DLL_LINKAGE eIndexOpen(void);

  EC0 DLL_LINKAGE eIndexOpen(ACCESSMODE accessmode, const void *key,

                             size_t keysize);

  EC0 DLL_LINKAGE eIndexOpen(int (*cmp)(long key1, long key2));

  EC0 DLL_LINKAGE eIndexOpen(int (*cmp)(unsigned long key1,

                                        unsigned long key2));

  EC0 DLL_LINKAGE eIndexOpen(int (*cmp)(const char *key1, const char *key2));

  EC0 DLL_LINKAGE eIndexOpen(int (*cmp)(const void *key1, size_t keysize1,

                                        const void *key2, size_t keysize2));

  EC0 DLL_LINKAGE eIndexClose(void);

  EC0 DLL_LINKAGE eIndexFlush(void);

  EC0 DLL_LINKAGE eIndexErase(void);

  EC0 DLL_LINKAGE eIndexSetAutoPurge(int on);

  EC0 DLL_LINKAGE eIndexQueryAutoPurge(int *on);

  EC0 DLL_LINKAGE eIndexInclude(CURSOR *object);

  EC0 DLL_LINKAGE eIndexInclude(unsigned long objectid);

  EC0 DLL_LINKAGE eIndexInclude(unsigned long objectid, long key);

  EC0 DLL_LINKAGE eIndexInclude(unsigned long objectid, unsigned long key);

  EC0 DLL_LINKAGE eIndexInclude(unsigned long objectid, const char *key);

  EC0 DLL_LINKAGE eIndexInclude(unsigned long objectid, const void *key,

                                size_t keysize);

  EC0 DLL_LINKAGE eIndexChange(unsigned long objectid, long key, long newkey);

  EC0 DLL_LINKAGE eIndexChange(unsigned long objectid, unsigned long key,

                               unsigned long newkey);

  EC0 DLL_LINKAGE eIndexChange(unsigned long objectid, const char *key,

                               const char *newkey);

  EC0 DLL_LINKAGE eIndexChange(unsigned long objectid,

                               const void *key, size_t keysize,

                               const void *newkey, size_t newkeysize);

  EC0 DLL_LINKAGE eIndexExclude(CURSOR *object);

  EC0 DLL_LINKAGE eIndexExclude(unsigned long objectid);

  EC0 DLL_LINKAGE eIndexExclude(unsigned long objectid, long key);

  EC0 DLL_LINKAGE eIndexExclude(unsigned long objectid, unsigned long key);

  EC0 DLL_LINKAGE eIndexExclude(unsigned long objectid, const char *key);

  EC0 DLL_LINKAGE eIndexExclude(unsigned long objectid, const void *key,

                                size_t keysize);

  EC0 DLL_LINKAGE eIndexExcludeAll(long key);

  EC0 DLL_LINKAGE eIndexExcludeAll(unsigned long key);

  EC0 DLL_LINKAGE eIndexExcludeAll(const char *key);

  EC0 DLL_LINKAGE eIndexExcludeAll(const void *key, size_t keysize);

  EC0 DLL_LINKAGE eIndexAttachTo(CURSOR *cursor);

  EC0 DLL_LINKAGE eIndexDetachFrom(CURSOR *cursor);

  EC0 DLL_LINKAGE eIndexRegister(CURSOR *range);

  EC0 DLL_LINKAGE eIndexDeregister(CURSOR *range);

  EC0 DLL_LINKAGE eIndexQueryCount(unsigned long *count);

  EC0 DLL_LINKAGE eIndexQueryCount(unsigned long objectid,

                                   unsigned long *count);

  EC0 DLL_LINKAGE eIndexQueryCountKey(long key, unsigned long *count);

  EC0 DLL_LINKAGE eIndexQueryCountKey(unsigned long key,

                                      unsigned long *count);

  EC0 DLL_LINKAGE eIndexQueryCountKey(const char *key, unsigned long *count);

  EC0 DLL_LINKAGE eIndexQueryCountKey(const void *key, size_t keysize,

                                      unsigned long *count);

  EC0 DLL_LINKAGE eIndexQueryIncluded(unsigned long objectid, int *included);

  EC0 DLL_LINKAGE eIndexQueryCurrentKeySize(size_t *keysize);

  EC0 DLL_LINKAGE eIndexQueryCurrent(unsigned long *objectid);

  EC0 DLL_LINKAGE eIndexQueryCurrent(unsigned long *objectid, long *key);

  EC0 DLL_LINKAGE eIndexQueryCurrent(unsigned long *objectid,

                                     unsigned long *key);

  EC0 DLL_LINKAGE eIndexQueryCurrent(unsigned long *objectid,

                                     char *key, size_t *keysize);

  EC0 DLL_LINKAGE eIndexQueryCurrent(unsigned long *objectid,

                                     void *key, size_t *keysize);

  EC0 DLL_LINKAGE eIndexChangeCurrent(long key);

  EC0 DLL_LINKAGE eIndexChangeCurrent(unsigned long key);

  EC0 DLL_LINKAGE eIndexChangeCurrent(const char *key);

  EC0 DLL_LINKAGE eIndexChangeCurrent(const void *key, size_t keysize);

  EC0 DLL_LINKAGE eIndexExcludeCurrent(void);

  EC0 DLL_LINKAGE eIndexSeek(unsigned long objectid, long key);

  EC0 DLL_LINKAGE eIndexSeek(unsigned long objectid, unsigned long key);

  EC0 DLL_LINKAGE eIndexSeek(unsigned long objectid, const char *key);

  EC0 DLL_LINKAGE eIndexSeek(unsigned long objectid, const void *key,

                             size_t keysize);

  EC0 DLL_LINKAGE eIndexSeekFirst(void);

  EC0 DLL_LINKAGE eIndexSeekFirst(long key);

  EC0 DLL_LINKAGE eIndexSeekFirst(unsigned long key);

  EC0 DLL_LINKAGE eIndexSeekFirst(const char *key);

  EC0 DLL_LINKAGE eIndexSeekFirst(const void *key, size_t keysize);

  EC0 DLL_LINKAGE eIndexSeekLast(void);

  EC0 DLL_LINKAGE eIndexSeekLast(long key);

  EC0 DLL_LINKAGE eIndexSeekLast(unsigned long key);

  EC0 DLL_LINKAGE eIndexSeekLast(const char *key);

  EC0 DLL_LINKAGE eIndexSeekLast(const void *key, size_t keysize);

  EC0 DLL_LINKAGE eIndexSeekPrior(void);

  EC0 DLL_LINKAGE eIndexSeekPrior(long key);

  EC0 DLL_LINKAGE eIndexSeekPrior(unsigned long key);

  EC0 DLL_LINKAGE eIndexSeekPrior(const char *key);

  EC0 DLL_LINKAGE eIndexSeekPrior(const void *key, size_t keysize);

  EC0 DLL_LINKAGE eIndexSeekNext(void);

  EC0 DLL_LINKAGE eIndexSeekNext(long key);

  EC0 DLL_LINKAGE eIndexSeekNext(unsigned long key);

  EC0 DLL_LINKAGE eIndexSeekNext(const char *key);

  EC0 DLL_LINKAGE eIndexSeekNext(const void *key, size_t keysize);

private:

  void          *p;

  int           d;

  unsigned long e;

 

  /* InitCursor and TerminateCursor are called by the constructor and

   *   destructor, respectively, to improve portability of the DLL among

   *   compilers.  These functions are not intended to be used for any other

   *   purpose.

   */

  void DLL_LINKAGE InitCursor(const char *filename,

 ACCESSMODE accessmode,

const void *key, size_t keysize);

  void DLL_LINKAGE TerminateCursor(void);

};

/* Copyright (c) 1993-1997 Menai Corporation */

Return to API Description

n Prototype Functions

 Home | Product | Consulting | Programming | Reviews | Company | Site Map | Guest Book

 Menai Corporation, 1010 El Camino Real, Suite 300, Menlo Park, California 94025-4335
 800-GAMELON (800-426-3566) (US only), 650-853-6450 (voice), 650-853-6453 (fax)
 Questions about our products and services:
info@menai.com.
 Comments about this web site:
webmaster@menai.com.

Copyright © 1996-98 Menai Corporation. All Rights Reserved. Menai, Gamelon and gamelon(stylized) are worldwide trademarks of Menai Corporation, registered in the United States of America, and the .[g] logo is a worldwide trademark of Menai Corporation. All other trademarks are owned by their respective owners.