[net.lang.c] Example of calling functions via jump tables?

WAGREICH@BBNA.ARPA (09/07/84)

Could  someone  give  me  a  small  C  example  of how to declare
(addresses of) functions in a jump table and how to  use  a  jump
table  to call a function?  I would prefer an actual example to a
verbal explanation, or a pointer to a C program  that  uses  this
technique.

Thanks.

gwyn@BRL-VLD.ARPA (09/07/84)

From:      Doug Gwyn (VLD/VMB) <gwyn@BRL-VLD.ARPA>

/*
	example of calling variable function
*/

#include <string.h>

extern int	funca(), funcb();	/* possible functions to call */

static struct entry
	{
	char	*code_name;		/* if `name' matches this... */
	int	(*function)();		/* ...then call this function */
	}	table[] =
	{
	{	"A",	funca	},
	{	"B",	funcb	},
	{	0,	0	}
	};

int
dispatch( name, argument )
	register char	*name;		/* used to determine function */
	double		argument;	/* typical function argument */
	{
	register struct entry	*tp;	/* -> table[] entry */

	for ( tp = table; tp->code_name != (char *)0; ++tp )
		if ( strcmp( name, tp->code_name ) == 0 )
			return (*tp->function)( argument );

	return -1;			/* name not found in table[] */
	}