64 lines
1.8 KiB
C
64 lines
1.8 KiB
C
|
/****************************************************************
|
||
|
* *
|
||
|
* Copyright 2001, 2007 Fidelity Information Services, Inc *
|
||
|
* *
|
||
|
* This source code contains the intellectual property *
|
||
|
* of its copyright holder(s), and is made available *
|
||
|
* under a license. If you do not know the terms of *
|
||
|
* the license, please stop and do not read further. *
|
||
|
* *
|
||
|
***************************************************************/
|
||
|
|
||
|
#include "mdef.h"
|
||
|
|
||
|
#include "gtm_string.h"
|
||
|
#include "gtm_stdlib.h"
|
||
|
|
||
|
#include <errno.h>
|
||
|
|
||
|
#include "callintogtmxfer.h"
|
||
|
#include "gt_timer.h"
|
||
|
|
||
|
typedef int (*int_fptr)();
|
||
|
GBLREF int jnlpool_detach();
|
||
|
|
||
|
GBLDEF int (*callintogtm_vectortable[])()=
|
||
|
{
|
||
|
(int_fptr)hiber_start,
|
||
|
(int_fptr)hiber_start_wait_any,
|
||
|
(int_fptr)start_timer,
|
||
|
(int_fptr)cancel_timer,
|
||
|
(int_fptr)malloc,
|
||
|
(int_fptr)free,
|
||
|
(int_fptr)jnlpool_detach,
|
||
|
(int_fptr)-1L
|
||
|
};
|
||
|
|
||
|
#ifdef GTM64
|
||
|
#define MAX_ADDR_SIZE 64
|
||
|
#else
|
||
|
#define MAX_ADDR_SIZE 32
|
||
|
#endif
|
||
|
#define MAX_ADDR_ENV_SIZE 64
|
||
|
#define GTM_CALLIN_START_ENV "GTM_CALLIN_START="
|
||
|
GBLDEF unsigned char gtmvectortable_address[MAX_ADDR_SIZE];
|
||
|
GBLDEF unsigned char gtmvectortable_env[MAX_ADDR_ENV_SIZE];
|
||
|
|
||
|
void init_callin_functable(void)
|
||
|
{
|
||
|
unsigned char *env_top, *address_top;
|
||
|
uint4 address_len;
|
||
|
|
||
|
address_top = GTM64_ONLY(i2ascl)NON_GTM64_ONLY(i2asc)(gtmvectortable_address, (UINTPTR_T)(&callintogtm_vectortable[0]));
|
||
|
*address_top = '\0';
|
||
|
address_len = (uint4)(address_top - >mvectortable_address[0]);
|
||
|
env_top = >mvectortable_env[0];
|
||
|
memcpy(env_top, GTM_CALLIN_START_ENV, strlen(GTM_CALLIN_START_ENV));
|
||
|
memcpy((env_top + strlen(GTM_CALLIN_START_ENV)), gtmvectortable_address, address_len);
|
||
|
*(env_top + strlen(GTM_CALLIN_START_ENV) + address_len) = '\0';
|
||
|
if (PUTENV((char *)gtmvectortable_env))
|
||
|
{
|
||
|
rts_error(VARLSTCNT(1) errno);
|
||
|
}
|
||
|
}
|