From 73ee5b9c2102fe515c41ed696d767e464df02e53 Mon Sep 17 00:00:00 2001 From: Mark Hessling Date: Thu, 20 Feb 2003 07:59:42 +0000 Subject: [PATCH] Support for RXINI handling. --- common/loader.c | 30 +++++++++++++++++++++--------- common/rxpack.c | 30 +++++++++++++++++++++++++++++- common/rxpack.h | 1 + 3 files changed, 51 insertions(+), 10 deletions(-) diff --git a/common/loader.c b/common/loader.c index 604c4f09..f8537219 100644 --- a/common/loader.c +++ b/common/loader.c @@ -18,7 +18,7 @@ * Mark Hessling M.Hessling@qut.edu.au http://www.lightlink.com/hessling/ */ -static char RCSid[] = "$Id: loader.c,v 1.15 2003/02/19 11:10:14 mark Exp $"; +static char RCSid[] = "$Id: loader.c,v 1.16 2003/02/20 07:59:39 mark Exp $"; #include "rxpack.h" @@ -43,6 +43,7 @@ extern int optind; extern PackageInitialiser *GETPACKAGEINITIALISER(); extern PackageTerminator *GETPACKAGETERMINATOR(); extern RexxSubcomHandler *GETPACKAGESUBCOMHANDLER(); +extern RexxExitHandler *GETPACKAGEINITHANDLER(); extern RexxFunction *GETPACKAGEFUNCTIONS(); extern RxPackageConstantDef *GETPACKAGECONSTANTS(); extern void PACKAGEUSAGE(); @@ -87,9 +88,14 @@ int main int rc=0; RXSTRING retstr; CHAR retbuf[RETBUFLEN]; + CHAR initexitname[100]; RXSTRING ArgList; -#if !defined(DYNAMIC_LIBRARY) && (defined(USE_WINREXX) || defined(USE_QUERCUS)) +#if !defined(DYNAMIC_LIBRARY) +# if defined(USE_WINREXX) || defined(USE_QUERCUS) + RXSYSEXIT ExitList[3]; +# else RXSYSEXIT ExitList[2]; +# endif #endif RxPackageGlobalDataDef MyGlob, *RxPackageGlobalData; @@ -222,22 +228,28 @@ int main */ if ( ( rc = RegisterRxSubcom( RxPackageGlobalData, GETPACKAGESUBCOMHANDLER() ) ) != 0 ) return( rc ); -#if 0 /* * Register a RXINI handler to set the package constants */ - if ( ( rc = RegisterRxIni( RxPackageGlobalData, GETPACKAGECONSTANTSDLER() ) ) != 0 ) + sprintf( initexitname, "%s%s", RXPACKAGENAME, "INIT" ); + if ( ( rc = RegisterRxInit( RxPackageGlobalData, GETPACKAGEINITHANDLER(), initexitname ) ) != 0 ) return( rc ); - SetPackageConstants( RxPackageGlobalData, GETPACKAGECONSTANTS(), RXPACKAGENAME ); -#endif FunctionPrologue( RxPackageGlobalData, GETPACKAGEINITIALISER(), RXPACKAGENAME, 0L, NULL ); /* - * Set up the system exit for the Say and Trace redirection + * Set up the system exit for the Say and Trace redirection and RxIni */ -#if !defined(DYNAMIC_LIBRARY) && (defined(USE_WINREXX) || defined(USE_QUERCUS)) +#if !defined(DYNAMIC_LIBRARY) +# if defined(USE_WINREXX) || defined(USE_QUERCUS) ExitList[0].sysexit_name = RXPACKAGENAME; ExitList[0].sysexit_code = RXSIO; + ExitList[1].sysexit_name = initexitname; + ExitList[1].sysexit_code = RXINI; + ExitList[2].sysexit_code = RXENDLST; +# else + ExitList[0].sysexit_name = initexitname; + ExitList[0].sysexit_code = RXINI; ExitList[1].sysexit_code = RXENDLST; +# endif #endif MAKERXSTRING( retstr, retbuf, sizeof( retbuf ) ); @@ -252,7 +264,7 @@ int main ( RS_ARG3_TYPE )NULL, ( RS_ARG4_TYPE )RXPACKAGENAME, ( RS_ARG5_TYPE )RXCOMMAND, -#if !defined(DYNAMIC_LIBRARY) && (defined(USE_WINREXX) || defined(USE_QUERCUS)) +#if !defined(DYNAMIC_LIBRARY) ( RS_ARG6_TYPE )ExitList, #else ( RS_ARG6_TYPE )NULL, diff --git a/common/rxpack.c b/common/rxpack.c index f2d47f2f..c69ca761 100644 --- a/common/rxpack.c +++ b/common/rxpack.c @@ -16,7 +16,7 @@ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -static char RCSid[] = "$Id: rxpack.c,v 1.25 2003/02/19 11:10:15 mark Exp $"; +static char RCSid[] = "$Id: rxpack.c,v 1.26 2003/02/20 07:59:41 mark Exp $"; #include "rxpack.h" @@ -1317,6 +1317,34 @@ int RegisterRxSubcom return 0; } +/*----------------------------------------------------------------------------- + * This function registers the package's RXINI exit handler... + *----------------------------------------------------------------------------*/ +int RegisterRxInit + +#ifdef HAVE_PROTO + ( RxPackageGlobalDataDef *RxPackageGlobalData, RexxExitHandler ptr, char *name) +#else + ( RxPackageGlobalData, ptr, name ) + RxPackageGlobalDataDef *RxPackageGlobalData; + RexxExitHandler ptr; + char *name; +#endif + +{ + ULONG rc=0L; + + InternalTrace( RxPackageGlobalData, "RegisterRxInit", "Name: %s Addr: %ld", name, ptr ); + + rc = RexxRegisterExitExe( (RREE_ARG0_TYPE)name, + (RREE_ARG1_TYPE)(ptr), + (RREE_ARG2_TYPE)NULL ); + InternalTrace( RxPackageGlobalData, "RegisterRxInit", "returning %d", rc ); + if ( rc != RXEXIT_OK ) + return 1; + return 0; +} + /*----------------------------------------------------------------------------- * This function registers the external functions... *----------------------------------------------------------------------------*/ diff --git a/common/rxpack.h b/common/rxpack.h index c9b4962b..ae7d4100 100644 --- a/common/rxpack.h +++ b/common/rxpack.h @@ -237,6 +237,7 @@ RxPackageGlobalDataDef *InitRxPackage Args(( RxPackageGlobalDataDef *, PackageIn int TermRxPackage Args(( RxPackageGlobalDataDef **, PackageTerminator *, RexxFunction *, char *, int )); int RegisterRxFunctions Args(( RxPackageGlobalDataDef *, RexxFunction *, char * )); int RegisterRxSubcom Args(( RxPackageGlobalDataDef *, RexxSubcomHandler )); +int RegisterRxInit Args(( RxPackageGlobalDataDef *, RexxExitHandler, char *)); int QueryRxFunction Args(( RxPackageGlobalDataDef *, char * )); int DeregisterRxFunctions Args(( RxPackageGlobalDataDef *, RexxFunction *, int )); int SetPackageConstants Args(( RxPackageGlobalDataDef *, RxPackageConstantDef *, char * ));