typedef void (*my_fcn_ptr)(char *, int);
typedef const char *(my_fcn_ptr)(char *, int);
typedef int (my_fcn_ptr)(char *, int);
typedef struct foo *(my_fcn_ptr)(char *, int);
typedef enum foo *(*my_fcn_ptr)(char *, int);
typedef const struct foo *(*my_fcn_ptr)(char *, int);
typedef BOOL (my_fcn_ptr)(char *, int);
typedef INT32 (*my_fcn_ptr)(char *, int);
typedef int   INT32;
typedef struct foo
{
   int a;
} fooey;

typedef struct
{
   int a;
} queso;

struct myfoo
{
   INT32            age;
   const struct foo *(*my_fcn_ptr)(char *, int);
   const CHAR       *name;
   MYTYPE           (*foo)(int, char);
   void             *user;
   void             (*foo)(int, char);
};

SMU foo(void)
{
   double AAA = 1.e-3, BBB = 0.016, CCC = 2 * DDD * sqrt(EEE);

   a = 4;
   (*ABC)();
   return(SMUIFY(a));
}

typedef struct
{
   void (*newObject)(const object_info *info, const IObject **interface, struct object_h *instance);
} IObjectFactory;

