NAME
IrEXTEND - IRAPI extension function dynamic switch tables
SYNOPSIS
#include <irapi.h>
DESCRIPTION
The IRAPI dynamic switch function tables
Iri_ExtendInit_table , Iri_ExtendStart_table ,
Iri_ExtendExecute_table , Iri_ExtendExit_table ,
Iri_ExtendQuit_table , Iri_ExtendTrace_table , and
Iri_Extend_Name_table support the TSM extend instruction,
and the IRAPI function irXName.
By default, these tables are empty. Customer written C
language extension functions may be added to them via
irSPIRegister(3SPI) .
When the TSM process initializes TSM calls irExtendInit( 0
), and in turn all functions in the Iri_ExtendInit_table are
executed.
When the TSM process starts executing a script TSM calls
irExtendStart( 0, cid, scriptname ), and in turn all func-
tions in the Iri_ExtendStart_table are executed.
When TSM executes the extend( id ) instruction TSM calls
irExtendExecute( id, cid, scriptname, reg ) and in turn the
function in the Iri_ExtendExecute_table which corresponds to
extension function id is executed.
When a script exits TSM calls irExtendExit( 0, cid,
scriptname ), and in turn all functions in the
Iri_ExtendExit_table are executed.
When the TSM process receives a signal SIGQUIT TSM calls
irExtendQuit( 0 ), and in turn all functions in the
Iri_ExtendQuit_table are executed.
When the TSM process receives a signal SIGUSR1 TSM calls
irExtendTrace( 0 ), and in turn all functions in the
Iri_ExtendTrace_table are executed.
When an IRAPI program calls irXName(id) the function in the
Iri_Extend_Name_table which corresonds to the extension
library number for id is executed.
See irExtend(3IRAPI) for more information on how these func-
tions operate.
EXAMPLE
See /vs/examples/IRAPI/util_fcns.c for a sample extension
library which implements simple utility functions for TSM.
The following from util_fcns.c demonstrates how to add
entries to these IRAPI dynamic switch tables:
int irSPIRegister( void )
{
static const char *fnName = "irSPIRegister";
int ret = IRR_OK;
irQTraceP(IRD_INVALID, TEE, TAREA,
vfmtstr( "%s: ENTER: libirUTIL.so", fnName ));
if (irDynSwitchAdd(Iri_Extend_Name_table, IRD_EXT_LIBA,
iri_XNameA) == IRR_FAIL) ret = IRR_FAIL;
if (irVADynSwitchAdd(Iri_ExtendInit_table, IRX_UTIL,
iri_IRX_UTIL_init) == IRR_FAIL) ret = IRR_FAIL;
if (irVADynSwitchAdd(Iri_ExtendStart_table, IRX_UTIL,
iri_IRX_UTIL_start) == IRR_FAIL) ret = IRR_FAIL;
if (irVADynSwitchAdd(Iri_ExtendExecute_table, IRX_LBOLT,
iri_IRX_LBOLT_execute) == IRR_FAIL) ret = IRR_FAIL;
if (irVADynSwitchAdd(Iri_ExtendExecute_table, IRX_TIME,
iri_IRX_TIME_execute) == IRR_FAIL) ret = IRR_FAIL;
if (irVADynSwitchAdd(Iri_ExtendExecute_table, IRX_RAND,
iri_IRX_RAND_execute) == IRR_FAIL) ret = IRR_FAIL;
if (irVADynSwitchAdd(Iri_ExtendExecute_table, IRX_CTIME,
iri_IRX_CTIME_execute) == IRR_FAIL) ret = IRR_FAIL;
if (irVADynSwitchAdd(Iri_ExtendExit_table, IRX_UTIL,
iri_IRX_UTIL_exit) == IRR_FAIL) ret = IRR_FAIL;
if (irVADynSwitchAdd(Iri_ExtendQuit_table, IRX_UTIL,
iri_IRX_UTIL_quit) == IRR_FAIL) ret = IRR_FAIL;
if (irVADynSwitchAdd(Iri_ExtendTrace_table, IRX_UTIL,
iri_IRX_UTIL_trace) == IRR_FAIL) ret = IRR_FAIL;
return(ret);
}
FILES
/att/include/irExtend.h, /att/include/irStructure.h,
/vs/data/irSPI.libs, /vs/examples/IRAPI/util_fcns.c
ERROR
irError may be set by the functions called through the IRAPI
dynamic switch tables.
SEE ALSO
editSPIlibs(1IRAPI), irDefine(3IRAPI), irErrorStr(3IRAPI),
irExtend(3IRAPI), irName(3IRAPI), irRegister(3IRAPI),
irSPIRegister(3IRAPI), irSPIRegister(3SPI),
IrDEFINES(4IRAPI), IrEXTEND(4IRAPI), IrPARAMETERS(4IRAPI),
irSPI.libs(4IRAPI)
VERSION
This is version 8/31/00 of this man page.