typedef struct { union { void *ptr; int data[2]; double dbl; } user_context; /* user-context, initialy zero, 64 bits (aligned) */ int context_version; /* == 0, struct stops here */ union { struct { int call_num; /* call on line */ int line_number; /* source line number */ const char *file_name; /* may be null string but not null*/ } call_inst; // if (context_version & SVC_CONTEXT_LINE)1 } cvu; } svcContext; typedef void *handle; /* template for external context calls */ typedef void (*svcExtFunc)(handle,svcContext *,...); /* template for locater routines */ typedef svcExtFunc (*svcLocater)( void *locater_context, char *mod_spec, char *inst_name, char *rtn_name, svcContext *svcContext, ... /* argument types */); int svcRegisterLocator(svcLocater, void *locator_context, char *module_spec, int capabilities);