[comp.lang.c] Keeping tables in step

dmi@peregrine.peregrine.com (Dean Inada) (08/19/90)

#if 0
In article <3579@goanna.cs.rmit.oz.au> ok@goanna.cs.rmit.oz.au (Richard A. O'Keefe) writes:
>	#File: mktable.demo
>
>	EntryCt;	int whence;	int whither;	char *name
>
>	Butcher;	1;		2;		"Butcher"
>	Baker;		1;		3;		"Baker"
>	Bellman;	2;		3;		"Bellman"
>	Boojum;		0;		0;		NULL
>	#End: mktable.demo
>
>Running the command
>
>	awk -F";" -f mkheader.awk mktable.demo
>
>produces
>
>	/* From mktable.demo */
>	#define Butcher 0
>	#define Baker 1
>	#define Bellman 2
>	#define Boojum 3
>	#define EntryCt 4
>	extern 	int whence[4];
>	extern 	int whither[4];
>	extern 	char *name[4];
>	/* End mktable.demo */
#endif
#include <stdio.h>

#define table	\
	x(Butcher,	1,		2,		"Butcher")\
	x(Baker,	1,		3,		"Baker")\
	x(Bellman,	2,		3,		"Bellman")\
	x(Boojum,	0,		0,		NULL)\
/*enddefine*/

enum EntryCt {
#define x(entry,whence,whither,name)	entry,
	table
	EntryCt
#undef x
};
int whence[]={
#define x(entry,whence,whither,name)	whence,
	table
#undef x
};
int whither[]={
#define x(entry,whence,whither,name)	whither,
	table
#undef x
};
char *name[]={
#define x(entry,whence,whither,name)	name,
	table
#undef x
};

main()
{
#define x(en,wn,wr,nm)	\
	printf("entry=%d, whence=%d, whither=%d, name=%s\r\n",\
		en, whence[en], wr, name[en]);
	table
#undef x
}