[comp.os.msdos.programmer] Symbol address in Turbo C

valley@uchicago (Doug Dougherty) (02/26/91)

barber@equinox.unr.edu writes:


>	I'm attempting to write a program which produces a report based on 
>a form definition file.  The form definition file will contain two types of 
>information: 1) straight text to be copied to the report verbatium (sp),
>and 2) macros, which will be a name of a function located inside my 
>program.  
>	The problem I'm having is finding a way to call a function given
>a string representation of it's name.  So for example, if my program read
>the following from the form definition file:
>	@fn_doit
>it would call the function fn_doit.  I thought of building a local symbol
>table of functions callable from a form definition macro.  The symbol table

I don't think there's any "straight" way to do this.  You could read the .MAP
file created by the linker in at runtime, then lookup the addresses there.

einari@rhi.hi.is (Einar Indridason) (02/28/91)

In article <valley.667582769@gsbsun> valley@uchicago (Doug Dougherty) writes:
>barber@equinox.unr.edu writes:
>
>
>>	I'm attempting to write a program which produces a report based on 
>>a form definition file.  The form definition file will contain two types of 
>>information: 1) straight text to be copied to the report verbatium (sp),
>>and 2) macros, which will be a name of a function located inside my 
>>program.  
>>	The problem I'm having is finding a way to call a function given
>>a string representation of it's name.  So for example, if my program read
>>the following from the form definition file:
>>	@fn_doit
>>it would call the function fn_doit.  I thought of building a local symbol

What's wrong with (just typed from memory, that is):

struct actions {
	char	*string_to_compare_with;	/* malloced as needed */
		(*funcptr)();			/* function to be called */
} actions [] = {
	{ "Hello", output_hello_string() },	/* output_hello_string is 
						previously declared */
	{ "World", output_world_string() },
....
};

etc.

This is what (for example) MicroEMACS does it.

Hope it helps.


--
Internet:    einari@rhi.hi.is        |   "Just give me my command line and drag
UUCP:    ..!mcsun!isgate!rhi!einari  |   the GUIs to the waste basket!!!!"

Surgeon Generals warning:  Masking the 8th bit can seriously damage your brain!!