#define ZZ(x)   zz##x
#define YY(x)   yy##x
#define XX      xx
#define zzYY(x) ZZyy##x

void ZZ(YY(XX)) (void) ; /* is ZZyyXX */

/********
#define DD(a,b,c,d,e,f) (a,b,c,d,e,f)

void dd DD(int a,int b,int c,int d,,,) ;

#define AA(a,b,c)  ais: a ; bis: b ; cis: c

AA( le C est C.. \, ZAP ! )


#define BB(b) b
BB(zap)
#define CC (zap)
BB CC

*********/

/*

#define FUNPTR(RetType,ParamType,ParamList,TypeName) \
   struct TypeName { RetType (*fun) ParamList ; ParamType param ; }


FUNPTR ( void, void*, (void*) ) GenProc ;

typedef FUNPTR (void,void*,(void)) AbsProc ;

*/

/*

void zap ( struct { int x,y ;} S )
{
  S.x++ ;
}

*/


extern char mystring [] ;
char mystring [] = { 0,1,2,3,4,5,6,7,8,9 } ;

typedef struct LList LList ;

struct LList {
  LList * Next ;
  LList * Prev ;
  int     Data [1] ;
};

LList a,b ;
LList a = { &b, &b, { 'a' } } ;
LList b = { &a, &a, { 'b' } } ;

/*
 typedef void * (*pfun0) (void*);
 typedef pfun0* (*pfun1) (pfun0*);
 typedef pfun1* (*pfun ) (pfun1*);
 typedef pfun * (*pfun ) (pfun *);
*/


void main (void)
{
  void *p ;
  p = (void*)
      (
        (void (*(*)(void))(void)) /*   pointer to a function returning */
				  /* a pointer to a function */
                                0L
      ) ;
}
