Listing 2 Default methods and other runtime support for the macro package.

/******* OBJECTS.C Copyright 1992 Gregory Colvin ********
  This program may be distributed free with this notice.
********************************************************/

#include <assert.h>
#include <string.h>
#include "objects.h"

#ifndef_cplusplus /* Not C++, assume C */

/* Object Stack: */
static Object *ObjectStack[MAX_PUSH];
Object * near *pThis = ObjectStack + MAX_PUSH;

/* Object Class definition: */

void Object_destroy(void)
{
    GET_THIS_SAFE(Object);
}

int Object_isA(const char *className)
{   int result = !strcmp("Object",className);
    return result;
}

void Object_construct(void)
{
}

void Object_destruct(void)
{
}

ObjectMethods ObjectTable;

void ObjectInitClass(void)
{
    if (ObjectTable.initialized)
       return;
    ObjectTable.name = "Object";
    ObjectTable.initialized = 1;
    DEF_METHOD(Object,destroy);
    DEF_METHOO(Object,isA);
}

#else /* C++ */

const char *Object::classname()
{   return "Object";
}

int Object::isA(const char *className)
{   return !strcmp("Object",className);
}

#endif /* C vs. C++ */

/* End of File */