Revision: 59
http://bsf4oorexx.svn.sourceforge.net/bsf4oorexx/?rev=59&view=rev
Author: orexx
Date: 2012-02-22 19:38:50 +0000 (Wed, 22 Feb 2012)
Log Message:
-----------
2012-02-22 Implementation of Rexx exit and Rexx command handlers finished, still thorough testing needed.
Modified Paths:
--------------
trunk/bsf4oorexx.dev/source_cc/32/BSF4ooRexx.dll
trunk/bsf4oorexx.dev/source_cc/BSF4ooRexx.cc
trunk/bsf4oorexx.dev/source_java/RexxExitHandler.java
trunk/org/rexxla/bsf/engines/rexx/RexxExitHandler.class
trunk/org/rexxla/bsf/engines/rexx/RexxExitHandler.java
Added Paths:
-----------
trunk/samples/Java/handlers/commandHandlers/
trunk/samples/Java/handlers/commandHandlers/01_commandHandler/
trunk/samples/Java/handlers/commandHandlers/01_commandHandler/JavaRunRexxWithCommandHandler.class
trunk/samples/Java/handlers/commandHandlers/01_commandHandler/JavaRunRexxWithCommandHandler.java
trunk/samples/Java/handlers/commandHandlers/01_commandHandler/index.html
trunk/samples/Java/handlers/commandHandlers/01_commandHandler/testRexxWithCommandHandler.rxj
trunk/samples/Java/handlers/commandHandlers/10_commandHandlers/
trunk/samples/Java/handlers/commandHandlers/10_commandHandlers/JavaRunRexxWithCommandExits$JavaAliceCommandHandler.class
trunk/samples/Java/handlers/commandHandlers/10_commandHandlers/JavaRunRexxWithCommandExits$JavaDanielCommandHandler.class
trunk/samples/Java/handlers/commandHandlers/10_commandHandlers/JavaRunRexxWithCommandExits$JavaMichaelCommandHandler.class
trunk/samples/Java/handlers/commandHandlers/10_commandHandlers/JavaRunRexxWithCommandExits$JavaReturnGregorianCalendarCommandHandler.class
trunk/samples/Java/handlers/commandHandlers/10_commandHandlers/JavaRunRexxWithCommandExits$JavaRonyCommandHandler.class
trunk/samples/Java/handlers/commandHandlers/10_commandHandlers/JavaRunRexxWithCommandExits$JavaTestConditionCommandHandler.class
trunk/samples/Java/handlers/commandHandlers/10_commandHandlers/JavaRunRexxWithCommandExits$JavaTestException0CommandHandler.class
trunk/samples/Java/handlers/commandHandlers/10_commandHandlers/JavaRunRexxWithCommandExits$JavaTestException1CommandHandler.class
trunk/samples/Java/handlers/commandHandlers/10_commandHandlers/JavaRunRexxWithCommandExits$JavaTestException2CommandHandler.class
trunk/samples/Java/handlers/commandHandlers/10_commandHandlers/JavaRunRexxWithCommandExits$JavaTestExceptionCommandHandler.class
trunk/samples/Java/handlers/commandHandlers/10_commandHandlers/JavaRunRexxWithCommandExits.class
trunk/samples/Java/handlers/commandHandlers/10_commandHandlers/JavaRunRexxWithCommandExits.java
trunk/samples/Java/handlers/commandHandlers/10_commandHandlers/index.html
trunk/samples/Java/handlers/commandHandlers/10_commandHandlers/testRexxWithCommandExits.rxj
trunk/samples/Java/handlers/exitHandlers/
trunk/samples/Java/handlers/exitHandlers/02_RXFNC/
trunk/samples/Java/handlers/exitHandlers/02_RXFNC/JavaRunRexxWith_RXFNC_Exit.class
trunk/samples/Java/handlers/exitHandlers/02_RXFNC/JavaRunRexxWith_RXFNC_Exit.java
trunk/samples/Java/handlers/exitHandlers/02_RXFNC/index.html
trunk/samples/Java/handlers/exitHandlers/02_RXFNC/testRexxWith_RXFNC_Exit.rxj
trunk/samples/Java/handlers/exitHandlers/03_RXCMD/
trunk/samples/Java/handlers/exitHandlers/03_RXCMD/JavaRunRexxWith_RXCMD_Exit.class
trunk/samples/Java/handlers/exitHandlers/03_RXCMD/JavaRunRexxWith_RXCMD_Exit.java
trunk/samples/Java/handlers/exitHandlers/03_RXCMD/index.html
trunk/samples/Java/handlers/exitHandlers/03_RXCMD/testRexxWith_RXCMD_Exit.rxj
trunk/samples/Java/handlers/exitHandlers/04_RXMSQ/
trunk/samples/Java/handlers/exitHandlers/04_RXMSQ/JavaRunRexxWith_RXMSQ_Exit.class
trunk/samples/Java/handlers/exitHandlers/04_RXMSQ/JavaRunRexxWith_RXMSQ_Exit.java
trunk/samples/Java/handlers/exitHandlers/04_RXMSQ/index.html
trunk/samples/Java/handlers/exitHandlers/04_RXMSQ/testRexxWith_RXMSQ_Exit.rxj
trunk/samples/Java/handlers/exitHandlers/05_RXSIO/
trunk/samples/Java/handlers/exitHandlers/05_RXSIO/JavaRunRexxWith_RXSIO_Exit.class
trunk/samples/Java/handlers/exitHandlers/05_RXSIO/JavaRunRexxWith_RXSIO_Exit.java
trunk/samples/Java/handlers/exitHandlers/05_RXSIO/index.html
trunk/samples/Java/handlers/exitHandlers/05_RXSIO/testRexxWith_RXSIO_Exit.rxj
trunk/samples/Java/handlers/exitHandlers/07_RXHLT/
trunk/samples/Java/handlers/exitHandlers/07_RXHLT/JavaRunRexxWith_RXHLT_Exit.class
trunk/samples/Java/handlers/exitHandlers/07_RXHLT/JavaRunRexxWith_RXHLT_Exit.java
trunk/samples/Java/handlers/exitHandlers/07_RXHLT/index.html
trunk/samples/Java/handlers/exitHandlers/07_RXHLT/testRexxWith_RXHLT_Exit.rxj
trunk/samples/Java/handlers/exitHandlers/08_RXTRC/
trunk/samples/Java/handlers/exitHandlers/08_RXTRC/JavaRunRexxWith_RXTRC_Exit.class
trunk/samples/Java/handlers/exitHandlers/08_RXTRC/JavaRunRexxWith_RXTRC_Exit.java
trunk/samples/Java/handlers/exitHandlers/08_RXTRC/index.html
trunk/samples/Java/handlers/exitHandlers/08_RXTRC/testRexxWith_RXTRC_Exit.rxj
trunk/samples/Java/handlers/exitHandlers/09_RXINI_10_RXTER/
trunk/samples/Java/handlers/exitHandlers/09_RXINI_10_RXTER/JavaRunRexxWith_RXINI_RXTER_Exit.class
trunk/samples/Java/handlers/exitHandlers/09_RXINI_10_RXTER/JavaRunRexxWith_RXINI_RXTER_Exit.java
trunk/samples/Java/handlers/exitHandlers/09_RXINI_10_RXTER/index.html
trunk/samples/Java/handlers/exitHandlers/09_RXINI_10_RXTER/testRexxWith_RXINI_RXTER_Exit.rxj
trunk/samples/Java/handlers/exitHandlers/12_RXEXF/
trunk/samples/Java/handlers/exitHandlers/12_RXEXF/JavaRunRexxWith_RXEXF_Exit.class
trunk/samples/Java/handlers/exitHandlers/12_RXEXF/JavaRunRexxWith_RXEXF_Exit.java
trunk/samples/Java/handlers/exitHandlers/12_RXEXF/index.html
trunk/samples/Java/handlers/exitHandlers/12_RXEXF/testRexxWith_RXEXF_Exit.rxj
trunk/samples/Java/handlers/exitHandlers/13_RXNOVAL/
trunk/samples/Java/handlers/exitHandlers/13_RXNOVAL/JavaRunRexxWith_RXNOVAL_Exit.class
trunk/samples/Java/handlers/exitHandlers/13_RXNOVAL/JavaRunRexxWith_RXNOVAL_Exit.java
trunk/samples/Java/handlers/exitHandlers/13_RXNOVAL/index.html
trunk/samples/Java/handlers/exitHandlers/13_RXNOVAL/testRexxWith_RXNOVAL_Exit.rxj
trunk/samples/Java/handlers/exitHandlers/14_RXVALUE/
trunk/samples/Java/handlers/exitHandlers/14_RXVALUE/JavaRunRexxWith_RXVALUE_Exit.class
trunk/samples/Java/handlers/exitHandlers/14_RXVALUE/JavaRunRexxWith_RXVALUE_Exit.java
trunk/samples/Java/handlers/exitHandlers/14_RXVALUE/index.html
trunk/samples/Java/handlers/exitHandlers/14_RXVALUE/testRexxWith_RXVALUE_Exit.rxj
trunk/samples/Java/handlers/exitHandlers/15_RXOFNC/
trunk/samples/Java/handlers/exitHandlers/15_RXOFNC/JavaRunRexxWith_RXOFNC_Exit.class
trunk/samples/Java/handlers/exitHandlers/15_RXOFNC/JavaRunRexxWith_RXOFNC_Exit.java
trunk/samples/Java/handlers/exitHandlers/15_RXOFNC/index.html
trunk/samples/Java/handlers/exitHandlers/15_RXOFNC/testRexxWith_RXOFNC_Exit.rxj
Removed Paths:
-------------
trunk/samples/Java/handlers/JavaRunRexxWithCommandExits$JavaAliceCommandHandler.class
trunk/samples/Java/handlers/JavaRunRexxWithCommandExits$JavaDanielCommandHandler.class
trunk/samples/Java/handlers/JavaRunRexxWithCommandExits$JavaMichaelCommandHandler.class
trunk/samples/Java/handlers/JavaRunRexxWithCommandExits$JavaRonyCommandHandler.class
trunk/samples/Java/handlers/JavaRunRexxWithCommandExits$JavaTestConditionCommandHandler.class
trunk/samples/Java/handlers/JavaRunRexxWithCommandExits$JavaTestException0CommandHandler.class
trunk/samples/Java/handlers/JavaRunRexxWithCommandExits$JavaTestException1CommandHandler.class
trunk/samples/Java/handlers/JavaRunRexxWithCommandExits$JavaTestException2CommandHandler.class
trunk/samples/Java/handlers/JavaRunRexxWithCommandExits$JavaTestExceptionCommandHandler.class
trunk/samples/Java/handlers/JavaRunRexxWithCommandExits.class
trunk/samples/Java/handlers/JavaRunRexxWithCommandExits.java
trunk/samples/Java/handlers/JavaRunRexxWithSystemExits$RXNOVAL_exit.class
trunk/samples/Java/handlers/JavaRunRexxWithSystemExits.class
trunk/samples/Java/handlers/JavaRunRexxWithSystemExits.java
trunk/samples/Java/handlers/index.html
trunk/samples/Java/handlers/testRexxWithCommandExits.rxj
trunk/samples/Java/handlers/testRexxWithSystemExits.rxj
Modified: trunk/bsf4oorexx.dev/source_cc/32/BSF4ooRexx.dll
===================================================================
(Binary files differ)
Modified: trunk/bsf4oorexx.dev/source_cc/BSF4ooRexx.cc
===================================================================
--- trunk/bsf4oorexx.dev/source_cc/BSF4ooRexx.cc 2012-02-19 19:21:08 UTC (rev 58)
+++ trunk/bsf4oorexx.dev/source_cc/BSF4ooRexx.cc 2012-02-22 19:38:50 UTC (rev 59)
@@ -511,7 +511,9 @@
// #define DEBUG_RGF_PROCESS_J_ARGS
// #define DEBUG_REXX_OBJECT_TO_JAVA // rgf, 2012-02-19
+// #define DEBUG_ARRAY_ARGS // rgf, 2012-02-21
+#define DEBUGINFO_FOR_OTHERS // rgf, 2012-02-22: if flag is set, then show some debug infos for others who try to debug
#if defined (UNIX) && defined (NIXI_NOXI) // comment before && to activate all of the flags below
@@ -731,11 +733,11 @@
#if defined (BSF4REXX_32_BIT)
- #define BSF_VERSION "410.20120219 org/rexxla/bsf/engines/rexx 32-bit" // version: "MajorNumber"."YYYYMMDD"
+ #define BSF_VERSION "410.20120222 org/rexxla/bsf/engines/rexx 32-bit" // version: "MajorNumber"."YYYYMMDD"
#elif defined (BSF4REXX_64_BIT)
- #define BSF_VERSION "410.20120219 org/rexxla/bsf/engines/rexx 64-bit" // version: "MajorNumber"."YYYYMMDD"
+ #define BSF_VERSION "410.20120222 org/rexxla/bsf/engines/rexx 64-bit" // version: "MajorNumber"."YYYYMMDD"
#else
- #define BSF_VERSION "410.20120219 org/rexxla/bsf/engines/rexx n/a-bit" // version: "MajorNumber"."YYYYMMDD"
+ #define BSF_VERSION "410.20120222 org/rexxla/bsf/engines/rexx n/a-bit" // version: "MajorNumber"."YYYYMMDD"
#endif
#define JAVA_4_REXX "org/rexxla/bsf/engines/rexx/Java4Rexx" // 2005-06-02, supportive Java4Rexx-class
@@ -2905,7 +2907,9 @@
#endif
RexxObjectPtr result_obj=NULL;
- RexxRoutineObject rro=rtc->NewRoutine("FROM_BSF4ooRexx_DLL", "::requires BSF.CLS", 18);
+ // RexxRoutineObject rro=rtc->NewRoutine("FROM_BSF4ooRexx_DLL", "::requires BSF.CLS", 18);
+ char code[]="::requires BSF.CLS";
+ RexxRoutineObject rro=rtc->NewRoutine("FROM_BSF4ooRexx_RgfJavaObject2RexxObject", code, strlen(code));
if (rro!=NULL) // object got created, let us run it
{
result_obj=rtc->CallRoutine(rro, NULL); // call the program ?? NULL correct ??
@@ -3091,14 +3095,16 @@
fprintf(stderr, "**** //1a// clzBSF~string=[%s]\n", rtc->CString(rtc->SendMessage0(clzBSF,"STRING")));
fflush(stderr);
-/* as of 2012-02-09, rgf: bombs!
+ // as of 2012-02-09, rgf: bombs! not anymore with 4.1.1, 20110222
fprintf(stderr, "**** //1b// clzBSF~string=[%s] (->ObjectToStringValue)\n", rtc->ObjectToStringValue(clzBSF));
fprintf(stderr, "**** //1c// clzBSF~string=[%s] (->ObjectToString)\n", rtc->CString(rtc->ObjectToString(clzBSF)));
fflush(stderr);
-*/
+
}
#endif
+// bLoadBSF=TRUE;
+
if (!bClzBsf && bLoadBSF) // rgf, 2009-09-26: if BSF.CLS was not required yet, require it now!
{
@@ -7111,7 +7117,7 @@
jobject jresult=NULL; // default for -1, -2
-#if defined (DEBUG_REXX_PROXY_BSF) || defined (DEBUG_REXX_OBJECT_TO_JAVA)
+#if defined (DEBUG_REXX_PROXY_BSF) || defined (DEBUG_REXX_OBJECT_TO_JAVA) || defined (DEBUG_ARRAY_ARGS)
RexxStringObject strTmpObj= RgfDebug_GetMaxStringValue(context, tmpObj, 90) ;
fprintf(stderr, "... RgfRexxObject2JavaObject():b: typeIndicator=[%d], maxStringValue=[%.256s]\n", typeIndicator, (unsigned long) context->CString(strTmpObj) );
@@ -7125,7 +7131,7 @@
if (typeIndicator==1) // a .STRING
{
-#if defined (DEBUG_REXX_PROXY_BSF) || defined (DEBUG_REXX_OBJECT_TO_JAVA)
+#if defined (DEBUG_REXX_PROXY_BSF) || defined (DEBUG_REXX_OBJECT_TO_JAVA) || defined (DEBUG_ARRAY_ARGS)
// fprintf(stderr, "-> BSF(): \targ[%u] STRING val=[%.256s]\n",i, context->CString(context->ObjectToString(tmpObj))); fflush(stderr);
fprintf(stderr, "-> RgfRexxObject2JavaObject():c: \tSTRING val=[%.256s]\n",
context->CString(RgfDebug_GetMaxStringValue(context, tmpObj, 180))); fflush(stderr);
@@ -7146,7 +7152,7 @@
// )
if (typeIndicator>1) // a BSF/UNO_PROXY object in hand, Java object resides in BSF registry
{
-#if defined (DEBUG_REXX_PROXY_BSF) || defined (DEBUG_REXX_OBJECT_TO_JAVA)
+#if defined (DEBUG_REXX_PROXY_BSF) || defined (DEBUG_REXX_OBJECT_TO_JAVA) || defined (DEBUG_ARRAY_ARGS)
fprintf(stderr, "-> RgfRexxObject2JavaObject():d: \tBSF/UNO_PROXY val=[%.256s]\n",context->CString(RgfDebug_GetMaxStringValue(context, tmpObj, 90)) ); fflush(stderr);
#endif
// lookup the Java object from the BSF registry and return that Java object, i.e.
@@ -7161,7 +7167,7 @@
else // any other Rexx object, wrap it up as a (Java) RexxProxy
{
-#if defined (DEBUG_REXX_PROXY_BSF) || defined (DEBUG_REXX_OBJECT_TO_JAVA)
+#if defined (DEBUG_REXX_PROXY_BSF) || defined (DEBUG_REXX_OBJECT_TO_JAVA) || defined (DEBUG_ARRAY_ARGS)
char *tmpStrObject=(char *) context->CString(context->ObjectToString(tmpObj));
fprintf(stderr, "-> RgfRexxObject2JavaObject(): debug! \tis a non-String, non-BSF/UNO RexxObject, type=[%.256s]: creating a RexxProxy for it!\n\t~string=[%.256s]\n",
context->CString(context->ObjectToString(context->SendMessage0(tmpObj,"CLASS"))),
@@ -7176,8 +7182,8 @@
NULL // userData (slot)
);
-#if defined (DEBUG_REXX_PROXY_BSF) || defined (DEBUG_REXX_OBJECT_TO_JAVA)
- fprintf(stderr, "-> RgfRexxObject2JavaObject(): AFTER creating RexxProxy jresult=[%p]\n",jresult);fflush(stderr);
+#if defined (DEBUG_REXX_PROXY_BSF) || defined (DEBUG_REXX_OBJECT_TO_JAVA) || defined (DEBUG_ARRAY_ARGS)
+ fprintf(stderr, "-> RgfRexxObject2JavaObject(): AFTER creating RexxProxy jresult=[%p], CheckCondition()=[%d]\n",jresult,context->CheckCondition());fflush(stderr);
#endif
}
}
@@ -7194,6 +7200,9 @@
jobjectArray RgfRexxArray2JavaArray(PSTRUCT_PARAM param, RexxThreadContext *context, RexxArrayObject argArray)
{
// *** >>>> ????
+#if defined (RGF_INFO_1) || defined (DEBUG_ARRAY_ARGS) // rgf, 20090820
+ fprintf(stderr, "RgfRexxArray2JavaArray():\t 1 - just arrived, CheckCondition()=[%d]...\n", context->CheckCondition());fflush(stderr);
+#endif
if (argArray==NULL) // no object passed in, then return NULL as well
{
return NULL;
@@ -7210,12 +7219,12 @@
NULL
// defaultJVM->jstring_emptyUTFString// (*env).NewStringUTF("")
);
-#ifdef RGF_INFO_1 // rgf, 20090820
- fprintf(stderr, "RgfRexxArray2JavaArray():\t 1 - after creating Java array object 'arr'...\n");fflush(stderr);
+#if defined (RGF_INFO_1) || defined (DEBUG_ARRAY_ARGS) // rgf, 20090820
+ fprintf(stderr, "RgfRexxArray2JavaArray():\t 2 - after creating Java array object 'arr', CheckCondition()=[%d]...\n", context->CheckCondition());fflush(stderr);
#endif
-#if defined (DEBUG_REXX_PROXY_BSF) || defined (DEBUG_BSF_FUNCTION)
+#if defined (DEBUG_REXX_PROXY_BSF) || defined (DEBUG_BSF_FUNCTION) || defined (DEBUG_ARRAY_ARGS)
#ifdef UNIX
pthread_t
@@ -7224,7 +7233,7 @@
#endif
tid=RgfGetTID();
- fprintf(stderr, "--- RGF_INFO: RgfRexxArray2JavaArray(): 1, tid=[%lu], numArgs=[%lu]", (unsigned long) tid, numArgs);fflush(stderr);
+ fprintf(stderr, "--- RGF_INFO: RgfRexxArray2JavaArray(): 3, tid=[%lu], numArgs=[%lu]", (unsigned long) tid, numArgs);fflush(stderr);
if (numArgs>0)
{
@@ -7261,6 +7270,10 @@
param->env->SetObjectArrayElement(arr, (jsize) i, RgfRexxObject2JavaObject(param,context,tmpObj));
}
+#if defined (RGF_INFO_1) || defined (DEBUG_ARRAY_ARGS) // rgf, 20120221
+ fprintf(stderr, "RgfRexxArray2JavaArray():\t 4 - before returning, CheckCondition()=[%d]...\n", context->CheckCondition());fflush(stderr);
+#endif
+
return arr;
}
@@ -14066,6 +14079,13 @@
<<< */
+ // invocationType:
+ // 1: execute Rexx program from file, use the 4.0 API <code>CallProgram</code>
+ // 2: execute Rexx program from buffer, uses the 4.0 API <code>NewRoutine</code> and <code>CallRoutine</code>
+ // 3: load Rexx package (and run prolog) from file, use the 4.0 API <code>LoadPackage</code>
+ // 4: load Rexx package (and run prolog) from buffer, use the 4.0 API <code>LoadPackageFromData</code>
+// fprintf(stderr, "C++ invocationType=[%d]\n", invocationType);fflush(stderr);
+
switch (invocationType)
{
case 1: // CallProgram()
@@ -15327,7 +15347,7 @@
// invoke command handler
// create slot array argument
jobjectArray jslot = param.env->NewObjectArray (
- (jsize) 5, // needed size (number of elements)
+ (jsize) 4, // needed size (number of elements)
defaultJVM->clz_Object, // type
NULL // initial value
);
@@ -15345,14 +15365,10 @@
// index [3]: add context pointer type: 0=ThreadContext, 1=MethodContext, 2=FunctionContext, 3=ExitContext
param.env->SetObjectArrayElement(jslot, (jint) 3, param.env->NewStringUTF("3"));
- // index [4]: last entry always unused, meant as a slot entry in case this becomes necessary in the future
+ jobjectArray jpb=NULL; // Java version of the parmBlock (Object [])
- jobjectArray jpb=NULL; // Java version of the parmBlock (Object [])
-// !!!
-// TODO: process paramBlock according to system exit, prepare argument accordingly
-
// ================== BEGIN: system exit related special handling, before invoking the Java exit handler
{
switch (exitNumber)
@@ -15418,6 +15434,160 @@
// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+ case RXCMD: // system exit # 3, "Process calls to subcommand handlers"
+ {
+
+#if defined ( RGF_INFO ) || defined ( RGF_SYSTEM_EXIT_HANDLER )
+ RXCMDHST_PARM *pb =(RXCMDHST_PARM *) parmBlock;
+ fprintf(stderr, "---> RXCMD=3: [%d], subfunction: [%d], address=[%.32s], dllname=[%.32s], command=[%.64s]\n",
+ exitNumber,
+ subfunction,
+ pb->rxcmd_address,
+ pb->rxcmd_dll,
+ pb->rxcmd_command
+ );
+#endif
+
+ if (subfunction==RXCMDHST) // 1 - Calls a named subcommand handler
+ {
+ RXCMDHST_PARM *pb=(RXCMDHST_PARM *) parmBlock;
+
+ jpb = param.env->NewObjectArray (
+ (jsize) 5, // needed size (number of elements)
+ defaultJVM->clz_Object, // type
+ NULL // initial value
+ );
+
+ // process flags for Java
+ jbooleanArray jflags= param.env->NewBooleanArray((jsize) 2); // needed size (number of elements)
+ jboolean * tmpFlags=param.env->GetBooleanArrayElements(jflags,NULL);
+ tmpFlags[0]=pb->rxcmd_flags.rxfcfail;
+ tmpFlags[1]=pb->rxcmd_flags.rxfcerr;
+ param.env->ReleaseBooleanArrayElements(jflags, tmpFlags, NULL); // do not copy elements back to Java
+ param.env->SetObjectArrayElement(jpb, (jint) 0, jflags);
+
+
+ // process address name
+ CONSTRXSTRING address_name;
+ address_name.strptr =pb->rxcmd_address;
+ address_name.strlength=pb->rxcmd_addressl;
+ jobject jaddress=JNU_CreateJavaStringFromCONSTRXSTRING(param.env,
+ context->threadContext,
+ &address_name);
+ param.env->SetObjectArrayElement(jpb, (jint) 1, jaddress);
+
+
+ // process dllname name
+ CONSTRXSTRING dllname_name;
+ dllname_name.strptr =pb->rxcmd_dll;
+ dllname_name.strlength=pb->rxcmd_dll_len;
+ jobject jdllname=JNU_CreateJavaStringFromCONSTRXSTRING(param.env,
+ context->threadContext,
+ &dllname_name);
+ param.env->SetObjectArrayElement(jpb, (jint) 2, jdllname);
+
+
+ // process command
+ jobject jcommand=JNU_CreateJavaStringFromCONSTRXSTRING(param.env,
+ context->threadContext,
+ &pb->rxcmd_command);
+ param.env->SetObjectArrayElement(jpb, (jint) 3, jcommand);
+
+ // index [4]: may be set by the exit handler to a return String (!) value
+ }
+ }
+ break;
+
+
+ // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+ case RXMSQ: // system exit # 4, "External data queue exit"
+ {
+
+#if defined ( RGF_INFO ) || defined ( RGF_SYSTEM_EXIT_HANDLER )
+ fprintf(stderr, "---> RXMSQ=4: [%d], subfunction: [%d]\n", exitNumber, subfunction);
+#endif
+
+ if (subfunction==RXMSQPLL) // 1 - Pulls a line from the external data queue
+ {
+ RXMSQPLL_PARM *pb=(RXMSQPLL_PARM *) parmBlock;
+
+ jpb = param.env->NewObjectArray (
+ (jsize) 1, // needed size (number of elements)
+ defaultJVM->clz_Object, // type
+ NULL // initial value
+ );
+
+ // index [0]: may be set by the exit handler to return any value
+
+ }
+
+ else if (subfunction==RXMSQPSH) // 2 - Places a line in the external data queue.
+ {
+ RXMSQPSH_PARM *pb=(RXMSQPSH_PARM *) parmBlock;
+
+ jpb = param.env->NewObjectArray (
+ (jsize) 2, // needed size (number of elements)
+ defaultJVM->clz_Object, // type
+ NULL // initial value
+ );
+
+ // process flags for Java
+ jbooleanArray jflags= param.env->NewBooleanArray((jsize) 1); // needed size (number of elements)
+ jboolean * tmpFlags=param.env->GetBooleanArrayElements(jflags,NULL);
+ tmpFlags[0]=pb->rxmsq_flags.rxfmlifo;
+
+fprintf(stderr, "C++ RXMSQPSH, pb->rxmsq_flags.rxfmlifo=[%d]\n", pb->rxmsq_flags.rxfmlifo);fflush(stderr);
+ param.env->ReleaseBooleanArrayElements(jflags, tmpFlags, NULL); // do not copy elements back to Java
+ param.env->SetObjectArrayElement(jpb, (jint) 0, jflags);
+
+ // process value to push
+ jobject jvalue=JNU_CreateJavaStringFromCONSTRXSTRING(param.env,
+ context->threadContext,
+ &pb->rxmsq_value);
+ param.env->SetObjectArrayElement(jpb, (jint) 1, jvalue);
+ }
+
+ else if (subfunction==RXMSQSIZ) // 3 - Returns the number of lines in the external data queue
+ {
+ RXMSQSIZ_PARM *pb=(RXMSQSIZ_PARM *) parmBlock;
+
+ jpb = param.env->NewObjectArray (
+ (jsize) 1, // needed size (number of elements)
+ defaultJVM->clz_Object, // type
+ NULL // initial value
+ );
+
+ // index [0]: should be set by the Java handler, a String containing the number
+ }
+
+ else if (subfunction==RXMSQNAM) // 20 - Sets the name of the active external data queue
+ {
+ RXMSQNAM_PARM *pb=(RXMSQNAM_PARM *) parmBlock;
+
+ jpb = param.env->NewObjectArray (
+ (jsize) 1, // needed size (number of elements)
+ defaultJVM->clz_Object, // type
+ NULL // initial value
+ );
+
+ // index [0]: new queue name; be nice and use type CONSTRXSTRING for RXSTRING, although they have the same structure but different const defs
+ CONSTRXSTRING new_queue_name;
+ new_queue_name.strptr =pb->rxmsq_name.strptr;
+ new_queue_name.strlength=pb->rxmsq_name.strlength;
+
+// fprintf(stderr, "C++ C++ C++ RXMSQNAM, new_queue_name=[%.64s]\n", pb->rxmsq_name.strptr);fflush(stderr);
+ jobject jnewQueueName=JNU_CreateJavaStringFromCONSTRXSTRING(param.env,
+ context->threadContext,
+ &new_queue_name);
+ param.env->SetObjectArrayElement(jpb, (jint) 0, jnewQueueName);
+ }
+ }
+ break;
+
+
+
+
+ // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
case RXSIO: // system exit # 5, "standard input and output"
{
@@ -15505,12 +15675,11 @@
case RXHLT: // system exit # 7, "HALT condition processing"
{
#if defined ( RGF_INFO ) || defined ( RGF_SYSTEM_EXIT_HANDLER )
- RXFNCCAL_PARM *pb =(RXFNCCAL_PARM *) parmBlock;
fprintf(stderr, "---> RXHLT=7: [%d], subfunction: [%d]\n", exitNumber, subfunction);
#endif
if (subfunction==RXHLTTST || // 2
- subfunction==RXHLTCLR) // 1 - TODO: does this have a parmBlock ??
+ subfunction==RXHLTCLR) // 1 - also has a parmBlock (unclear documentation) !!
{
RXHLTTST_PARM *pb=(RXHLTTST_PARM *) parmBlock;
jpb = param.env->NewObjectArray (
@@ -15532,8 +15701,34 @@
break;
+ // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+ case RXTRC: // system exit # 8, "Tests the external trace indicator."
+ {
+#if defined ( RGF_INFO ) || defined ( RGF_SYSTEM_EXIT_HANDLER )
+ fprintf(stderr, "---> RXTRC=8: [%d], subfunction: [%d]\n", exitNumber, subfunction);
+#endif
+ if (subfunction==RXTRCTST) // 1
+ {
+ RXTRCTST_PARM *pb =(RXTRCTST_PARM *) parmBlock;
+ jpb = param.env->NewObjectArray (
+ (jsize) 1, // needed size (number of elements)
+ defaultJVM->clz_Object, // type
+ NULL // initial value
+ );
+ // process flag for Java
+ jbooleanArray jflags= param.env->NewBooleanArray((jsize) 1); // needed size (number of elements)
+ jboolean * tmpFlags=param.env->GetBooleanArrayElements(jflags,NULL);
+ tmpFlags[0]=pb->rxtrc_flags.rxftrace;
+ param.env->ReleaseBooleanArrayElements(jflags, tmpFlags, NULL); // do not copy elements back to Java
+ param.env->SetObjectArrayElement(jpb, (jint) 0, jflags);
+ }
+ }
+ break;
+
+
+
// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
// nothing to setup, so just break
case RXINI: // system exit # 9, "initialization processing"
@@ -15582,12 +15777,12 @@
param.env->NewStringUTF(context->CString(pb->variable_name))
);
-
-
}
}
break;
+
+
// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
case RXEXF: // system exit # 12, "processes calls to external functions, if not found", OO version
case RXOFNC: // system exit # 15, "processes calls to external functions, before search starts", OO version
@@ -15623,7 +15818,7 @@
}
jpb = param.env->NewObjectArray (
- (jsize) 5, // needed size (number of elements)
+ (jsize) 4, // needed size (number of elements)
defaultJVM->clz_Object, // type
NULL // initial value
);
@@ -15661,14 +15856,11 @@
RexxArrayObject rao=context->NewArray(argc);
for (size_t i=0; i<argc; i++)
{
- context->ArrayPut(rao, argv[i], i);
+ context->ArrayPut(rao, argv[i], i+1);
}
param.env->SetObjectArrayElement(jpb, (jint) 2, RgfRexxArray2JavaArray(¶m, context->threadContext, rao));
// fourth element remains NULL, needs to be set by handler, if a result is returned
-
- // fifth element is our slot
-
}
}
break;
@@ -15725,7 +15917,7 @@
}
// ================== END: system exit related special handling, before invoking the Java exit handler
-
+/*
if (param.env->ExceptionCheck())
{
// show Java handler stack before raising a Rexx condition to help debug Java implemented handlers
@@ -15734,7 +15926,20 @@
fprintf(stderr, "*** <--- ****\n");fflush(stderr);
param.env->ExceptionClear(); // clear the Java exception
}
+*/
+
+
+ // a Rexx condition raised while preparing data for the Java handler? If so, return immediately
+ if (context->CheckCondition()) {
+ RgfAcquireLock();
+ environmentDetachFrom(¶m, FALSE); // do not close group
+ RgfReleaseLock();
+ return RXEXIT_RAISE_ERROR;
+ }
+
+
+
// public abstract Object handleCommand(String address, String command, Object[] slot);
jobject jresult=NULL;
@@ -15815,28 +16020,9 @@
environmentDetachFrom(¶m, FALSE); // do not close group
RgfReleaseLock();
return RXEXIT_RAISE_ERROR;
-
-/*
- // -----------------
-// show Java handler stack before raising a Rexx condition to help debug Java implemented handlers
-fprintf(stderr, "*** rexx_exit_handler_entry --> ****\n");
-param.env->ExceptionDescribe(); // clear the Java exception
-fprintf(stderr, "*** <--- ****\n");fflush(stderr);
-
- param.env->ExceptionClear(); // clear the Java exception
- RgfAcquireLock();
- environmentDetachFrom(¶m, FALSE); // do not close group
- RgfReleaseLock();
-
- SNPRINTF(msg, 1024, "%.16s/internal/rexx_exit_handler_entry(), error 5: Java exception while running the Java exit handler for system exit number=[%d], subfunction=[%d]",
- DLLNAME, exitNumber, subfunction);
- context->RaiseException1(Rexx_Error_Incorrect_call_user_defined, context->String(msg));
- return RXEXIT_RAISE_ERROR;
-*/
}
- // TODO: analyze system exits that raise an error indicator whether
// a Rexx condition raised by the Java handler? If so, return immediately
if (context->CheckCondition()) {
RgfAcquireLock();
@@ -15845,9 +16031,8 @@
return RXEXIT_RAISE_ERROR;
}
-// !!!
-// TODO: process return code
-// TODO: process paramBlock contained result (if any) according to system exit; transfer to parmBlock, if necessary
+
+
// --------------------------------------------------------------------------
// --------------------------------------------------------------------------
if (j_exit_rc != RXEXIT_NOT_HANDLED) // o.k. exit handler says it handled exit; do we need to do something ?
@@ -15907,8 +16092,148 @@
break;
+ // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+ case RXCMD: // system exit # 3, "Process calls to subcommand handlers"
+ {
+ #if defined ( RGF_INFO ) || defined ( RGF_SYSTEM_EXIT_HANDLER )
+ RXCMDHST_PARM *pb =(RXCMDHST_PARM *) parmBlock;
+ fprintf(stderr, "<--- RXCMD=3: [%d], subfunction: [%d], address=[%.32s], dllname=[%.32s], command=[%.64s]\n",
+ exitNumber,
+ subfunction,
+ pb->rxcmd_address,
+ pb->rxcmd_dll,
+ pb->rxcmd_command
+ );
+ #endif
+
+ if (subfunction==RXCMDHST) // 1 - Calls a named subcommand handler
+ {
+ RXCMDHST_PARM *pb=(RXCMDHST_PARM *) parmBlock;
+
+ // get flags from Java and assign their values to Rexx
+ jbooleanArray jflags= (jbooleanArray) param.env->GetObjectArrayElement(jpb, (jint) 0);
+ jboolean * tmpFlags=param.env->GetBooleanArrayElements(jflags,NULL);
+ pb->rxcmd_flags.rxfcfail =tmpFlags[0];
+ pb->rxcmd_flags.rxfcerr =tmpFlags[1];
+ param.env->ReleaseBooleanArrayElements(jflags, tmpFlags, NULL); // do not copy elements back to Java
+
+ // get result, if any, turn it into a RexxObjectPtr
+ jobject jresult=param.env->GetObjectArrayElement(jpb, (jint) 4);
+ if (jresult==NULL ) // return an empty Rexx string
+ {
+ pb->rxcmd_retc.strlength=0;
+// fprintf(stderr, "C++ C++ -> jresult==NULL! \n");fflush(stderr);
+ }
+
+ // an error
+ // TODO: could get Java object's String value and return that ?
+ else if ( param.env->IsInstanceOf(jresult, defaultJVM->clz_String)==JNI_FALSE )
+ {
+ pb->rxcmd_flags.rxfcerr =1; // indicate an error occurred
+ SNPRINTF(msg, 1024, "%.16s/internal/rexx_exit_handler_entry(), error 7: Java RXCMD=3 exit handler (exitNumber: [%d], subfunction: [%d]) did not return a Java String object",
+ DLLNAME, exitNumber, subfunction);
+ context->RaiseException1(Rexx_Error_Incorrect_call_user_defined, context->String(msg));
+ }
+
+ else // o.k., process Java String object
+ {
+ JNU_JavaString2pRxString(param.env, (jstring) jresult, &pb->rxcmd_retc);
+// fprintf(stderr, "C++ C++ -> created return value=[%.128s] \n", pb->rxcmd_retc.strptr);fflush(stderr);
+ }
+ }
+ }
+ break;
+
+
+
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+ case RXMSQ: // system exit # 4, "External data queue exit"
+ {
+
+ #if defined ( RGF_INFO ) || defined ( RGF_SYSTEM_EXIT_HANDLER )
+ fprintf(stderr, "<--- RXMSQ=4: [%d], subfunction: [%d]\n", exitNumber, subfunction);
+ #endif
+
+ if (subfunction==RXMSQPLL) // 1 - Pulls a line from the external data queue
+ {
+ RXMSQPLL_PARM *pb=(RXMSQPLL_PARM *) parmBlock;
+
+ // get result, if any, turn it into a RexxObjectPtr
+ jobject jresult=param.env->GetObjectArrayElement(jpb, (jint) 0);
+ if (jresult==NULL ) // return an empty Rexx string
+ {
+ pb->rxmsq_retc.strlength=0;
+// fprintf(stderr, "C++ C++ -> jresult==NULL! \n");fflush(stderr);
+ }
+
+ // an error
+ // TODO: could get Java object's String value and return that ?
+ else if ( param.env->IsInstanceOf(jresult, defaultJVM->clz_String)==JNI_FALSE )
+ {
+ SNPRINTF(msg, 1024, "%.16s/internal/rexx_exit_handler_entry(), error 8: Java RXMSQ=4 exit handler (exitNumber: [%d], subfunction: [%d]) did not return a Java String object",
+ DLLNAME, exitNumber, subfunction);
+ context->RaiseException1(Rexx_Error_Incorrect_call_user_defined, context->String(msg));
+ }
+
+ else // o.k., process Java String object
+ {
+ JNU_JavaString2pRxString(param.env, (jstring) jresult, &pb->rxmsq_retc);
+// fprintf(stderr, "C++ C++ -> created return value=[%.128s] \n", pb->rxmsq_retc.strptr);fflush(stderr);
+ }
+ }
+
+ else if (subfunction==RXMSQSIZ) // 3 - Returns the number of lines in the external data queue
+ {
+ RXMSQSIZ_PARM *pb=(RXMSQSIZ_PARM *) parmBlock;
+
+ // get result, if any, turn it into a RexxObjectPtr
+ jobject jresult=param.env->GetObjectArrayElement(jpb, (jint) 0);
+ if (jresult==NULL ) // return an empty Rexx string
+ {
+ pb->rxmsq_size=0;
+// fprintf(stderr, "C++ C++ -> jresult==NULL! \n");fflush(stderr);
+ SNPRINTF(msg, 1024, "%.16s/internal/rexx_exit_handler_entry(), error 9: Java RXMSQ=4 exit handler (exitNumber: [%d], subfunction: [%d]) did not return a value (current size of queue)",
+ DLLNAME, exitNumber, subfunction);
+ context->RaiseException1(Rexx_Error_Incorrect_call_user_defined, context->String(msg));
+ }
+
+ // an error
+ // TODO: could get Java object's String value and return that ?
+ else if ( param.env->IsInstanceOf(jresult, defaultJVM->clz_String)==JNI_FALSE )
+ {
+ SNPRINTF(msg, 1024, "%.16s/internal/rexx_exit_handler_entry(), error 10: Java RXMSQ=4 exit handler (exitNumber: [%d], subfunction: [%d]) did not return a Java String object",
+ DLLNAME, exitNumber, subfunction);
+ context->RaiseException1(Rexx_Error_Incorrect_call_user_defined, context->String(msg));
+ }
+
+ else // o.k., process Java String object, return Rexx string
+ {
+ // turn Java value into size_t
+ char * c_result=(char *) JNU_GetStringNativeChars(param.env, (jstring) jresult); // convert to native string
+ size_t size=0;
+ // turn into RexxString, then create a size_t from it
+ int res=context->ObjectToStringSize(context->String(c_result), &size);
+ if (res==0) // conversion error occurred !
+ {
+ SNPRINTF(msg, 1024, "%.16s/internal/rexx_exit_handler_entry(), error 11: Java RXMSQ=4 exit handler (exitNumber: [%d], subfunction: [%d]) did not return a Java String object representing a valid number (\"size_t\")",
+ DLLNAME, exitNumber, subfunction);
+ context->RaiseException1(Rexx_Error_Incorrect_call_user_defined, context->String(msg));
+ }
+ else // conversion went o.k.
+ {
+ pb->rxmsq_size=size;
+ }
+ RexxFreeMemory(c_result);
+ }
+ }
+ }
+ break;
+
+
+
+
+ // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
case RXSIO: // system exit # 5, "standard input and output"
{
@@ -15954,7 +16279,7 @@
// TODO: could get Java object's String value and return that ?
else if ( param.env->IsInstanceOf(jresult, defaultJVM->clz_String)==JNI_FALSE )
{
- SNPRINTF(msg, 1024, "%.16s/internal/rexx_exit_handler_entry(), error 7: Java RXFNC=2 exit handler (exitNumber: [%d], subfunction: [%d]) did not return a Java String object",
+ SNPRINTF(msg, 1024, "%.16s/internal/rexx_exit_handler_entry(), error 12: Java RXFNC=2 exit handler (exitNumber: [%d], subfunction: [%d]) did not return a Java String object",
DLLNAME, exitNumber, subfunction);
context->RaiseException1(Rexx_Error_Incorrect_call_user_defined, context->String(msg));
}
@@ -15984,7 +16309,7 @@
// TODO: could get Java object's String value and return that ?
else if ( param.env->IsInstanceOf(jresult, defaultJVM->clz_String)==JNI_FALSE )
{
- SNPRINTF(msg, 1024, "%.16s/internal/rexx_exit_handler_entry(), error 8: Java RXFNC=2 exit handler (exitNumber: [%d], subfunction: [%d]) did not return a Java String object",
+ SNPRINTF(msg, 1024, "%.16s/internal/rexx_exit_handler_entry(), error 13: Java RXFNC=2 exit handler (exitNumber: [%d], subfunction: [%d]) did not return a Java String object",
DLLNAME, exitNumber, subfunction);
context->RaiseException1(Rexx_Error_Incorrect_call_user_defined, context->String(msg));
}
@@ -16003,7 +16328,6 @@
case RXHLT: // system exit # 7, "HALT condition processing"
{
#if defined ( RGF_INFO ) || defined ( RGF_SYSTEM_EXIT_HANDLER )
- RXFNCCAL_PARM *pb =(RXFNCCAL_PARM *) parmBlock;
fprintf(stderr, "<--- RXHLT=7: [%d], subfunction: [%d]\n", exitNumber, subfunction);
#endif
@@ -16016,10 +16340,26 @@
jbooleanArray jflags= (jbooleanArray) param.env->GetObjectArrayElement(jpb, (jint) 0);
jboolean * tmpFlags=param.env->GetBooleanArrayElements(jflags,NULL);
pb->rxhlt_flags.rxfhhalt =tmpFlags[0];
+ param.env->ReleaseBooleanArrayElements(jflags, tmpFlags, NULL); // do not copy elements back to Java
+ }
+ }
+ break;
-// fprintf(stderr, "<--- RXHLT=7: [%d], subfunction: [%d], pb->rxhlt_flags.rxfhhalt=[%d]\n",exitNumber, subfunction, pb->rxhlt_flags.rxfhhalt);fflush(stderr);
+ // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+ case RXTRC: // system exit # 8, "Tests the external trace indicator"
+ {
+ #if defined ( RGF_INFO ) || defined ( RGF_SYSTEM_EXIT_HANDLER )
+ fprintf(stderr, "<--- RXTRC=8: [%d], subfunction: [%d]\n", exitNumber, subfunction);
+ #endif
+ if (subfunction==RXTRCTST) // 1 - Tests the external trace indicator
+ {
+ RXTRCTST_PARM *pb =(RXTRCTST_PARM *) parmBlock;
+ // get flags from Java and assign their values to Rexx
+ jbooleanArray jflags= (jbooleanArray) param.env->GetObjectArrayElement(jpb, (jint) 0);
+ jboolean * tmpFlags=param.env->GetBooleanArrayElements(jflags,NULL);
+ pb->rxtrc_flags.rxftrace =tmpFlags[0];
param.env->ReleaseBooleanArrayElements(jflags, tmpFlags, NULL); // do not copy elements back to Java
}
}
@@ -16098,13 +16438,19 @@
if (subfunction==RXOFNCCAL || subfunction==RXEXFCAL) // 1
{
-#if defined ( RGF_INFO ) || defined ( RGF_SYSTEM_EXIT_HANDLER )
- fprintf(stderr, "<--- RXEXF=12/RXOFNC=15, exitNumber: [%d], subfunction: [%d], RXEXIT_HANDLED, rxfnc_name=[%.256s]\n",
+#if defined ( RGF_INFO ) || defined ( RGF_SYSTEM_EXIT_HANDLER ) || defined (DEBUGINFO_FOR_OTHERS)
+ #if defined (DEBUGINFO_FOR_OTHERS)
+ fprintf(stderr, "C++ ");
+ #endif
+
+ fprintf(stderr, "<--- RXEXF=12/RXOFNC=15, exitNumber: [%d], subfunction: [%d], RXEXIT_HANDLED, rxfnc_name=[%.256s], j_exit_rc=[%d]=[%s]\n",
exitNumber,
subfunction,
exitNumber==RXOFNC ?
((RXOFNCCAL_PARM *) parmBlock)->rxfnc_name.strptr :
((RXEXFCAL_PARM *) parmBlock)->rxfnc_name.strptr
+ , j_exit_rc
+ , (j_exit_rc==RXEXIT_HANDLED ? "RXEXIT_HANDLED" : "RXEXIT_RAISE_ERROR")
);
#endif
@@ -16116,19 +16462,31 @@
// get flags from Java and assign their values to Rexx
jbooleanArray jflags= (jbooleanArray) param.env->GetObjectArrayElement(jpb, (jint) 0);
jboolean * tmpFlags=param.env->GetBooleanArrayElements(jflags,NULL);
+
+#if defined (DEBUGINFO_FOR_OTHERS)
+ fprintf(stderr, "C++ returned from RXOFNC or RXEXF exit, ferr=[%d], fnfnd=[%d], fsub=[%d]\n",tmpFlags[0], tmpFlags[1], tmpFlags[2]); fflush(stderr);
+#endif
+
if (exitNumber==RXOFNC)
{
RXOFNC_FLAGS flags=((RXOFNCCAL_PARM *) parmBlock)->rxfnc_flags;
flags.rxfferr =tmpFlags[0];
flags.rxffnfnd=tmpFlags[1];
- flags.rxffsub =tmpFlags[2];
+
+#if defined (DEBUGINFO_FOR_OTHERS)
+ fprintf(stderr, "C++ RXOFNC , ferr=[%d], fnfnd=[%d]\n",flags.rxfferr, flags.rxffnfnd);fflush(stderr);
+#endif
+
}
else
{
RXEXF_FLAGS flags=((RXEXFCAL_PARM *) parmBlock)->rxfnc_flags;
flags.rxfferr =tmpFlags[0];
flags.rxffnfnd=tmpFlags[1];
- flags.rxffsub =tmpFlags[2];
+
+#if defined (DEBUGINFO_FOR_OTHERS)
+ fprintf(stderr, "C++ RXEXF , ferr=[%d], fnfnd=[%d]\n",flags.rxfferr, flags.rxffnfnd);fflush(stderr);
+#endif
}
param.env->ReleaseBooleanArrayElements(jflags, tmpFlags, NULL); // do not copy elements back to Java
@@ -16308,10 +16666,6 @@
jaddress);
// check for Java exception
-
-SNPRINTF(msg, 1024, "%%.16s/internal/rexx_command_handler_entry(), error 3: Java exception while attempting to fetch the Java command handler for command name/address=[%s] - [%%s]",
- context->CString(address));
-fprintf(stderr, "*** DEBUG *** ---> [%s] <---\n", msg);
if (param.env->ExceptionCheck())
{
// raise Rexx condition with Java Throwable
@@ -16326,23 +16680,6 @@
environmentDetachFrom(¶m, FALSE); // do not close group
RgfReleaseLock();
return NULL;
-
-/*
- // --------------------
-// show Java handler stack before raising a Rexx condition to help debug Java implemented handlers
-fprintf(stderr, "*** rexx_command_handler_entry --> ****\n");
-param.env->ExceptionDescribe(); // clear the Java exception
-fprintf(stderr, "*** <--- ****\n");fflush(stderr);
- param.env->ExceptionClear(); // clear the Java exception
- RgfAcquireLock();
- environmentDetachFrom(¶m, FALSE); // do not close group
- RgfReleaseLock();
-
- SNPRINTF(msg, 1024, "%.16s/internal/rexx_command_handler_entry(), error 3: Java exception while attempting to fetch the Java command handler for command name/address=[%s]",
- DLLNAME, context->CString(address));
- context->RaiseException1(Rexx_Error_Incorrect_call_user_defined, context->String(msg));
- return NULL;
-*/
}
// check whether jhandler==NULL, if so raise appropriate RexxCondtion
@@ -16361,7 +16698,7 @@
// invoke command handler
// create slot array argument
jobjectArray jslot = param.env->NewObjectArray (
- (jsize) 5, // needed size (number of elements)
+ (jsize) 4, // needed size (number of elements)
defaultJVM->clz_Object, // type
NULL // initial value
);
@@ -16379,9 +16716,7 @@
// index [3]: add context pointer type: 0=ThreadContext, 1=MethodContext, 2=FunctionContext, 3=ExitContext
param.env->SetObjectArrayElement(jslot, (jint) 3, param.env->NewStringUTF("3"));
- // index [4]: last entry always unused, meant as a slot entry in case this becomes necessary in the future
-
// public abstract Object handleCommand(Object slot, String address, String command);
jobject jresult=NULL;
@@ -16440,23 +16775,6 @@
environmentDetachFrom(¶m, FALSE); // do not close group
RgfReleaseLock();
return NULL;
-
-/*
- // -------------------------
-// show Java handler stack before raising a Rexx condition to help debug Java implemented handlers
-fprintf(stderr, "*** rexx_command_handler_entry --> ****\n");
-param.env->ExceptionDescribe(); // clear the Java exception
-fprintf(stderr, "*** <--- ****\n");fflush(stderr);
- param.env->ExceptionClear(); // clear the Java exception
- RgfAcquireLock();
- environmentDetachFrom(¶m, FALSE); // do not close group
- RgfReleaseLock();
-
- SNPRINTF(msg, 1024, "%.16s/internal/rexx_command_handler_entry(), error 6: Java exception while running the Java command handler for command name/address=[%s], command=[%s]",
- DLLNAME, context->CString(address), context->CString(command));
- context->RaiseException1(Rexx_Error_Incorrect_call_user_defined, context->String(msg));
- return NULL;
-*/
}
Modified: trunk/bsf4oorexx.dev/source_java/RexxExitHandler.java
===================================================================
--- trunk/bsf4oorexx.dev/source_java/RexxExitHandler.java 2012-02-19 19:21:08 UTC (rev 58)
+++ trunk/bsf4oorexx.dev/source_java/RexxExitHandler.java 2012-02-22 19:38:50 UTC (rev 59)
@@ -27,13 +27,13 @@
*
* @author Rony G. Flatscher
* @version 1.0
- * @since 2012-02-17
+ * @since 2012-02-21
*/
public interface RexxExitHandler
{
/** Version string indicating version of this class (majorVersion*100+minorVersion
* concatenated with a dot and the sorted date of last change. */
- final static public String version = "1.20120217";
+ final static public String version = "99.20120221";
// --------------------------------------------------------------------------------
// Exit return actions
@@ -97,6 +97,304 @@
/** Exit handler signature (called via native code) according to the ooRexx API
* documentation in <code>rexxpg.pdf</code>.
*
+ *
+
+ <p>
+ The following documents briefly the parmBlock-array that gets supplied to the Java exit
+ handler, depending on the exit number and subfunction. Please refer also to the ooRexx
+ documentation "rexxpg.pdf", section entitled "Context Exit Definitions"
+ on which this implementation is based upon.
+
+ <table border>
+ <tr>
+ <th>Exit name/number
+ <th>subfunction name/number
+ <th>Description
+
+ <tr> <!-- ================================================ -->
+ <td><code>RXFNC/2</code>
+ <td><code>RXFNCCAL/1</code>
+ <td>Processes calls to external functions.<br>
+ <code>parmBlock</code>:
+ <table>
+ <tr>
+ <td><code>[0] rxfnc_flags</code>, type: <code>boolean[]</code>
+ <ul>
+ <li><code>[0] rxfferr</code>, settable ("invalid call to routine")
+ <li><code>[1] rxffnfnd</code>, settable ("function not found")
+ <li><code>[2] rxffsub</code>, if <code>true</code> then called as subroutine, else as function
+ </ul>
+
+ <tr>
+ <td><code>[1] rxfnc_name</code>, subroutine/function name, type: <code>String</code>
+
+ <tr>
+ <td><code>[2] rxfnc_que</code>, current queue name, type: <code>String</code>
+
+ <tr>
+ <td><code>[3] rxfnc_argv</code>, supplied arguments, type: <code>Object[]</code>, can be <code>null</code>
+
+ <tr>
+ <td><code>[4] rxfnc_retc</code>, return value by handler, if any, type: <code>String</code>
+
+ </table>
+
+
+ <tr> <!-- ================================================ -->
+ <td><code>RXCMD/3</code>
+ <td><code>RXCMDHST/1</code>
+ <td>Calls a named subcommand handler.<br>
+ <code>parmBlock</code>:
+ <table>
+ <tr>
+ <td><code>[0] rxfnc_flags</code>, type: <code>boolean[]</code>
+ <ul>
+ <li><code>[0] rxffail</code>, settable ("command failed (trap FAILURE condition)")
+ <li><code>[1] rxffcerr</code>, settable ("command raises an error (trap ERROR condition)")
+ </ul>
+
+ <tr>
+ <td><code>[1] rxcmd_address</code>, address name, type: <code>String</code>
+
+ <tr>
+ <td><code>[2] rxcmd_dll</code>, DLL name, if handler is in a DLL, empty string else, type: <code>String</code>
+
+ <tr>
+ <td><code>[3] rxcmd_command</code>, command, type: <code>String</code>
+
+ <tr>
+ <td><code>[4] rxcmd_retc</code>, return value by handler, if any, type: <code>String</code>
+
+ </table>
+
+
+ <tr> <!-- ================================================ -->
+ <td><code>RXMSQ/4</code>
+ <td><code>RXMSQPLL/1</code>
+ <td>Pulls a line from the external data queue.<br>
+ <code>parmBlock</code>:
+ <table>
+ <tr>
+ <td><code>[0] rxmsq_retc</code>, return value by handler, if any, type: <code>String</code>
+ </table>
+
+ <tr>
+ <td>
+ <td><code>RXMSQPSH/2</code>
+ <td>Places a line in the external data queue.<br>
+ <code>parmBlock</code>:
+ <table>
+ <tr>
+ <td><code>[0] rxfnc_flags</code>, type: <code>boolean[]</code>
+ <ul>
+ <li><code>[0] rxfmlifo</code>, if set <code>LIFO (QUEUE)</code>, if <code>false FIFO (PUSH)</code>
+ </ul>
+
+ <tr>
+ <td><code>[1] rxmsq_value</code>, entry to be pushed/queued, type: <code>String</code>
+ </table>
+
+ <tr>
+ <td>
+ <td><code>RXMSQSIZ/3</code>
+ <td>Returns the number of lines in the external data queue.<br>
+ <code>parmBlock</code>:
+ <table>
+ <tr>
+ <td><code>[0] rxmsq_size</code>, number of lines in queue, type: <code>String</code>
+ </table>
+
+ <tr>
+ <td>
+ <td><code>RXMSQNAM/20</code>
+ <td>Sets the name of the active external data queue.<br>
+ <code>parmBlock</code>:
+ <table>
+ <tr>
+ <td><code>[0] rxmsq_name</code>, new external data queue name, type: <code>String</code>
+ </table>
+
+
+ <tr> <!-- ================================================ -->
+ <td><code>RXSIO/5</code>
+ <td><code>RXSIOSAY/1</code>
+ <td>Writes a line to the standard output stream.<br>
+ <code>parmBlock</code>:
+ <table>
+ <tr>
+ <td><code>[0] rxsio_string</code>, string to display, type: <code>String</code>
+ </table>
+
+ <tr>
+ <td>
+ <td><code>RXSIOTRC/2</code>
+ <td>Writes trace and error message output to the standard error stream.
+ <code>parmBlock</code>:
+ <table>
+ <tr>
+ <td><code>[0] rxsio_string</code>, trace line to display, type: <code>String</code>
+ </table>
+
+ <tr>
+ <td>
+ <td><code>RXSIOTRD/3</code>
+ <td>Reads from standard input stream.<br>
+ <code>parmBlock</code>:
+ <table>
+ <tr>
+ <td><code>[0] rxsiotrd_retc</code>, return value by handler, if any, type: <code>String</code>
+ </table>
+
+ <tr>
+ <td>
+ <td><code>RXSIODTR/4</code>
+ <td>Interactive debug input.<br>
+ <code>parmBlock</code>:
+ <table>
+ <tr>
+ <td><code>[0] rxsiodtr_retc</code>, return value by handler, if any, type: <code>String</code>
+ </table>
+
+ <tr> <!-- ================================================ -->
+ <td><code>RXHLT/7</code>
+ <td><code>RXHLTCLR/1</code>
+ <td>Clears the HALT condition.<br>
+ <code>parmBlock</code>:
+ <table>
+ <tr>
+ <td><code>[0] rxhlt_flags</code>, type: <code>boolean[]</code>
+ <ul>
+ <li><code>[0] rxfhhalt</code>, settable, if set to <code>true</code>, the <code>HALT</code> condition will be cleared
+ </ul>
+ </table>
+
+
+ <tr>
+ <td>
+ <td><code>RXHLTTST/2</code>
+ <td>Tests the halt indicator.<br>
+ <code>parmBlock</code>:
+ <table>
+ <tr>
+ <td><code>[0] rxhlt_flags</code>, type: <code>boolean[]</code>
+ <ul>
+ <li><code>[0] rxfhhalt</code>, settable, if set to <code>true</code>, the <code>HALT</code> condition will be raised
+ </ul>
+ </table>
+
+
+ <tr> <!-- ================================================ -->
+ <td><code>RXTRC/8</code>
+ <td><code>RXTRCTST/1</code>
+ <td>Tests the external trace indicator.<br>
+ <code>parmBlock</code>:
+ <table>
+ <tr>
+ <td><code>[0] rxtrc_flags</code>, type: <code>boolean[]</code>
+ <ul>
+ <li><code>[0] rxftrace</code>, settable, if set to <code>true</code>, then tracing will take place
+ </ul>
+ </table>
+
+
+ <tr> <!-- ================================================ -->
+ <td><code>RXINI/9</code>
+ <td><code>RXINIEXT/1</code>
+ <td>Initializing processing.
+
+
+ <tr> <!-- ================================================ -->
+ <td><code>RXTER/10</code>
+ <td><code>RXTEREXT/1</code>
+ <td>Termination processing.
+
+
+ <tr> <!-- ================================================ -->
+ <td><code>RXEXF/12</code>
+ <td><code>RXEXFCAL/1</code>
+ <td>Processes calls to external functions (ooRexx version), at end of search for an external routine.<br>
+ <code>parmBlock</code>:
+ <table>
+ <tr>
+ <td><code>[0] rxfnc_flags</code>, type: <code>boolean[]</code>
+ <ul>
+ <li><code>[0] rxfferr</code>, settable ("invalid call to routine")
+ <li><code>[1] rxffnfnd</code>, settable ("function not found")
+ <li><code>[2] rxffsub</code>, if <code>true</code> then called as subroutine, else as function
+ </ul>
+
+ <tr>
+ <td><code>[1] rxfnc_name</code>, subroutine/function name, type: <code>String</code>
+
+ <tr>
+ <td><code>[2] rxfnc_argv</code>, supplied arguments, type: <code>Object[]</code>, can be <code>null</code>
+
+ <tr>
+ <td><code>[3] rxfnc_retc</code>, return value by handler, if any, type: <code>Object</code>
+
+ </table>
+
+
+ <tr> <!-- ================================================ -->
+ <td><code>RXNOVAL/13</code>
+ <td><code>RXNOVALCALL/1</code>
+ <td>Processes a Rexx <code>NOVALUE</code> condition.<br>
+ <code>parmBlock</code>:
+ <table>
+ <tr>
+ <td><code>[0] variable_name</code>, variable name, type: <code>String</code>
+
+ <tr>
+ <td><code>[1] value</code>, return value by handler, if any, type: <code>Object</code>
+
+ </table>
+
+
+ <tr> <!-- ================================================ -->
+ <td><code>RXVALUE/14</code>
+ <td><code>RXVALUECALL/1</code>
+ <td>Processes an extended call to the <code>VALUE()</code> built-in function ("BIF")
+ <code>parmBlock</code>:
+ <table>
+ <tr>
+ <td><code>[0] selector</code>, the environment selector name, type: <code>String</code>
+
+ <tr>
+ <td><code>[1] variable_name</code>, variable name, type: <code>String</code>
+
+ <tr>
+ <td><code>[2] value</code>, return value by handler, if any, type: <code>Object</code>
+
+ </table>
+
+
+ <tr> <!-- ================================================ -->
+ <td><code>RXOFNC/15</code>
+ <td><code>RXOFNCCAL/1</code>
+ <td>Processes calls to external functions (ooRexx version), at beginning of the search for an external routine.<br>
+ <code>parmBlock</code>:
+ <table>
+ <tr>
+ <td><code>[0] rxfnc_flags</code>, type: <code>boolean[]</code>
+ <ul>
+ <li><code>[0] rxfferr</code>, settable ("invalid call to routine")
+ <li><code>[1] rxffnfnd</code>, settable ("function not found")
+ <li><code>[2] rxffsub</code>, if <code>true</code> then called as subroutine, else as function
+ </ul>
+
+ <tr>
+ <td><code>[1] rxfnc_name</code>, subroutine/function name, type: <code>String</code>
+
+ <tr>
+ <td><code>[2] rxfnc_argv</code>, supplied arguments, type: <code>Object[]</code>, can be <code>null</code>
+
+ <tr>
+ <td><code>[3] rxfnc_retc</code>, return value by handler, if any, type: <code>Object</code>
+
+ </table>
+
+ </table>
+ *
* @param slot this is an opaque <code>Object</code> argument which must be supplied
* unchanged to the direct Rexx API methods in {@link RexxHandler}
* @param exitNumber the Rexx exit number
@@ -108,17 +406,6 @@
public int handleExit(Object slot, int exitNumber, int subFunction, Object[] parmBlock);
-/** The following documents briefly the parmBlock-array
-
- system exit # RXNOVAL/13:
-
- parmBlock[0]: variable_name - a String
- parmBlock[1]: value - any value the exit handler wants the variable to be assigned to
-
- system exit ...
-
-*/
-
}
Modified: trunk/org/rexxla/bsf/engines/rexx/RexxExitHandler.class
===================================================================
(Binary files differ)
Modified: trunk/org/rexxla/bsf/engines/rexx/RexxExitHandler.java
===================================================================
--- trunk/org/rexxla/bsf/engines/rexx/RexxExitHandler.java 2012-02-19 19:21:08 UTC (rev 58)
+++ trunk/org/rexxla/bsf/engines/rexx/RexxExitHandler.java 2012-02-22 19:38:50 UTC (rev 59)
@@ -27,13 +27,13 @@
*
* @author Rony G. Flatscher
* @version 1.0
- * @since 2012-02-17
+ * @since 2012-02-21
*/
public interface RexxExitHandler
{
/** Version string indicating version of this class (majorVersion*100+minorVersion
* concatenated with a dot and the sorted date of last change. */
- final static public String version = "1.20120217";
+ final static public String version = "99.20120221";
// --------------------------------------------------------------------------------
// Exit return actions
@@ -97,6 +97,304 @@
/** Exit handler signature (called via native code) according to the ooRexx API
* documentation in <code>rexxpg.pdf</code>.
*
+ *
+
+ <p>
+ The following documents briefly the parmBlock-array that gets supplied to the Java exit
+ handler, depending on the exit number and subfunction. Please refer also to the ooRexx
+ documentation "rexxpg.pdf", section entitled "Context Exit Definitions"
+ on which this implementation is based upon.
+
+ <table border>
+ <tr>
+ <th>Exit name/number
+ <th>subfunction name/number
+ <th>Description
+
+ <tr> <!-- ================================================ -->
+ <td><code>RXFNC/2</code>
+ <td><code>RXFNCCAL/1</code>
+ <td>Processes calls to external functions.<br>
+ <code>parmBlock</code>:
+ <table>
+ <tr>
+ <td><code>[0] rxfnc_flags</code>, type: <code>boolean[]</code>
+ <ul>
+ <li><code>[0] rxfferr</code>, settable ("invalid call to routine")
+ <li><code>[1] rxffnfnd</code>, settable ("function not found")
+ <li><code>[2] rxffsub</code>, if <code>true</code> then called as subroutine, else as function
+ </ul>
+
+ <tr>
+ <td><code>[1] rxfnc_name</code>, subroutine/function name, type: <code>String</code>
+
+ <tr>
+ <td><code>[2] rxfnc_que</code>, current queue name, type: <code>String</code>
+
+ <tr>
+ <td><code>[3] rxfnc_argv</code>, supplied arguments, type: <code>Object[]</code>, can be <code>null</code>
+
+ <tr>
+ <td><code>[4] rxfnc_retc</code>, return value by handler, if any, type: <code>String</code>
+
+ </table>
+
+
+ <tr> <!-- ================================================ -->
+ <td><code>RXCMD/3</code>
+ <td><code>RXCMDHST/1</code>
+ <td>Calls a named subcommand handler.<br>
+ <code>parmBlock</code>:
+ <table>
+ <tr>
+ <td><code>[0] rxfnc_flags</code>, type: <code>boolean[]</code>
+ <ul>
+ <li><code>[0] rxffail</code>, settable ("command failed (trap FAILURE condition)")
+ <li><code>[1] rxffcerr</code>, settable ("command raises an error (trap ERROR condition)")
+ </ul>
+
+ <tr>
+ <td><code>[1] rxcmd_address</code>, address name, type: <code>String</code>
+
+ <tr>
+ <td><code>[2] rxcmd_dll</code>, DLL name, if handler is in a DLL, empty string else, type: <code>String</code>
+
+ <tr>
+ <td><code>[3] rxcmd_command</code>, command, type: <code>String</code>
+
+ <tr>
+ <td><code>[4] rxcmd_retc</code>, return value by handler, if any, type: <code>String</code>
+
+ </table>
+
+
+ <tr> <!-- ================================================ -->
+ <td><code>RXMSQ/4</code>
+ <td><code>RXMSQPLL/1</code>
+ <td>Pulls a line from the external data queue.<br>
+ <code>parmBlock</code>:
+ <table>
+ <tr>
+ <td><code>[0] rxmsq_retc</code>, return value by handler, if any, type: <code>String</code>
+ </table>
+
+ <tr>
+ <td>
+ <td><code>RXMSQPSH/2</code>
+ <td>Places a line in the external data queue.<br>
+ <code>parmBlock</code>:
+ <table>
+ <tr>
+ <td><code>[0] rxfnc_flags</code>, type: <code>boolean[]</code>
+ <ul>
+ <li><code>[0] rxfmlifo</code>, if set <code>LIFO (QUEUE)</code>, if <code>false FIFO (PUSH)</code>
+ </ul>
+
+ <tr>
+ <td><code>[1] rxmsq_value</code>, entry to be pushed/queued, type: <code>String</code>
+ </table>
+
+ <tr>
+ <td>
+ <td><code>RXMSQSIZ/3</code>
+ <td>Returns the number of lines in the external data queue.<br>
+ <code>parmBlock</code>:
+ <table>
+ <tr>
+ <td><code>[0] rxmsq_size</code>, number of lines in queue, type: <code>String</code>
+ </table>
+
+ <tr>
+ <td>
+ <td><code>RXMSQNAM/20</code>
+ <td>Sets the name of the active external data queue.<br>
+ <code>parmBlock</code>:
+ <table>
+ <tr>
+ <td><code>[0] rxmsq_name</code>, new external data queue name, type: <code>String</code>
+ </table>
+
+
+ <tr> <!-- ================================================ -->
+ <td><code>RXSIO/5</code>
+ <td><code>RXSIOSAY/1</code>
+ <td>Writes a line to the standard output stream.<br>
+ <code>parmBlock</code>:
+ <table>
+ <tr>
+ <td><code>[0] rxsio_string</code>, string to display, type: <code>String</code>
+ </table>
+
+ <tr>
+ <td>
+ <td><code>RXSIOTRC/2</code>
+ <td>Writes trace and error message output to the standard error stream.
+ <code>parmBlock</code>:
+ <table>
+ <tr>
+ <td><code>[0] rxsio_string</code>, trace line to display, type: <code>String</code>
+ </table>
+
+ <tr>
+ <td>
+ <td><code>RXSIOTRD/3</code>
+ <td>Reads from standard input stream.<br>
+ <code>parmBlock</code>:
+ <table>
+ <tr>
+ <td><code>[0] rxsiotrd_retc</code>, return value by handler, if any, type: <code>String</code>
+ </table>
+
+ <tr>
+ <td>
+ <td><code>RXSIODTR/4</code>
+ <td>Interactive debug input.<br>
+ <code>parmBlock</code>:
+ <table>
+ <tr>
+ <td><code>[0] rxsiodtr_retc</code>, return value by handler, if any, type: <code>String</code>
+ </table>
+
+ <tr> <!-- ================================================ -->
+ <td><code>RXHLT/7</code>
+ <td><code>RXHLTCLR/1</code>
+ <td>Clears the HALT condition.<br>
+ <code>parmBlock</code>:
+ <table>
+ <tr>
+ <td><code>[0] rxhlt_flags</code>, type: <code>boolean[]</code>
+ <ul>
+ <li><code>[0] rxfhhalt</code>, settable, if set to <code>true</code>, the <code>HALT</code> condition will be cleared
+ </ul>
+ </table>
+
+
+ <tr>
+ <td>
+ <td><code>RXHLTTST/2</code>
+ <td>Tests the halt indicator.<br>
+ <code>parmBlock</code>:
+ <table>
+ <tr>
+ <td><code>[0] rxhlt_flags</code>, type: <code>boolean[]</code>
+ <ul>
+ <li><code>[0] rxfhhalt</code>, settable, if set to <code>true</code>, the <code>HALT</code> condition will be raised
+ </ul>
+ </table>
+
+
+ <tr> <!-- ================================================ -->
+ <td><code>RXTRC/8</code>
+ <td><code>RXTRCTST/1</code>
+ <td>Tests the external trace indicator.<br>
+ <code>parmBlock</code>:
+ <table>
+ <tr>
+ <td><code>[0] rxtrc_flags</code>, type: <code>boolean[]</code>
+ <ul>
+ <li><code>[0] rxftrace</code>, settable, if set to <code>true</code>, then tracing will take place
+ </ul>
+ </table>
+
+
+ <tr> <!-- ================================================ -->
+ <td><code>RXINI/9</code>
+ <td><code>RXINIEXT/1</code>
+ <td>Initializing processing.
+
+
+ <tr> <!-- ================================================ -->
+ <td><code>RXTER/10</code>
+ <td><code>RXTEREXT/1</code>
+ <td>Termination processing.
+
+
+ <tr> <!-- ================================================ -->
+ <td><code>RXEXF/12</code>
+ <td><code>RXEXFCAL/1</code>
+ <td>Processes calls to external functions (ooRexx version), at end of search for an external routine.<br>
+ <code>parmBlock</code>:
+ <table>
+ <tr>
+ <td><code>[0] rxfnc_flags</code>, type: <code>boolean[]</code>
+ <ul>
+ <li><code>[0] rxfferr</code>, settable ("invalid call to routine")
+ <li><code>[1] rxffnfnd</code>, settable ("function not found")
+ <li><code>[2] rxffsub</code>, if <code>true</code> then called as subroutine, else as function
+ </ul>
+
+ <tr>
+ <td><code>[1] rxfnc_name</code>, subroutine/function name, type: <code>String</code>
+
+ <tr>
+ <td><code>[2] rxfnc_argv</code>, supplied arguments, type: <code>Object[]</code>, can be <code>null</code>
+
+ <tr>
+ <td><code>[3] rxfnc_retc</code>, return value by handler, if any, type: <code>Object</code>
+
+ </table>
+
+
+ <tr> <!-- ================================================ -->
+ <td><code>RXNOVAL/13</code>
+ <td><code>RXNOVALCALL/1</code>
+ <td>Processes a Rexx <code>NOVALUE</code> condition.<br>
+ <code>parmBlock</code>:
+ <table>
+ <tr>
+ <td><code>[0] variable_name</code>, variable name, type: <code>String</code>
+
+ <tr>
+ <td><code>[1] value</code>, return value by handler, if any, type: <code>Object</code>
+
+ </table>
+
+
+ <tr> <!-- ================================================ -->
+ <td><code>RXVALUE/14</code>
+ <td><code>RXVALUECALL/1</code>
+ <td>Processes an extended call to the <code>VALUE()</code> built-in function ("BIF")
+ <code>parmBlock</code>:
+ <table>
+ <tr>
+ <td><code>[0] selector</code>, the environment selector name, type: <code>String</code>
+
+ <tr>
+ <td><code>[1] variable_name</code>, variable name, type: <code>String</code>
+
+ <tr>
+ <td><code>[2] value</code>, return value by handler, if any, type: <code>Object</code>
+
+ </table>
+
+
+ <tr> <!-- ================================================ -->
+ <td><code>RXOFNC/15</code>
+ <td><code>RXOFNCCAL/1</code>
+ <td>Processes calls to external functions (ooRexx version), at beginning of the search for an external routine.<br>
+ <code>parmBlock</code>:
+ <table>
+ <tr>
+ <td><code>[0] rxfnc_flags</code>, type: <code>boolean[]</code>
+ <ul>
+ <li><code>[0] rxfferr</code>, settable ("invalid call to routine")
+ <li><code>[1] rxffnfnd</code>, settable ("function not found")
+ <li><code>[2] rxffsub</code>, if <code>true</code> then called as subroutine, else as function
+ </ul>
+
+ <tr>
+ <td><code>[1] rxfnc_name</code>, subroutine/function name, type: <code>String</code>
+
+ <tr>
+ <td><code>[2] rxfnc_argv</code>, supplied arguments, type: <code>Object[]</code>, can be <code>null</code>
+
+ <tr>
+ <td><code>[3] rxfnc_retc</code>, return value by handler, if any, type: <code>Object</code>
+
+ </table>
+
+ </table>
+ *
* @param slot this is an opaque <code>Object</code> argument which must be supplied
* unchanged to the direct Rexx API methods in {@link RexxHandler}
* @param exitNumber the Rexx exit number
@@ -108,17 +406,6 @@
public int handleExit(Object slot, int exitNumber, int subFunction, Object[] parmBlock);
-/** The following documents briefly the parmBlock-array
-
- system exit # RXNOVAL/13:
-
- parmBlock[0]: variable_name - a String
- parmBlock[1]: value - any value the exit handler wants the variable to be assigned to
-
- system exit ...
-
-*/
-
}
Deleted: trunk/samples/Java/handlers/JavaRunRexxWithCommandExits$JavaAliceCommandHandler.class
===================================================================
(Binary files differ)
Deleted: trunk/samples/Java/handlers/JavaRunRexxWithCommandExits$JavaDanielCommandHandler.class
===================================================================
(Binary files differ)
Deleted: trunk/samples/Java/handlers/JavaRunRexxWithCommandExits$JavaMichaelCommandHandler.class
===================================================================
(Binary files differ)
Deleted: trunk/samples/Java/handlers/JavaRunRexxWithCommandExits$JavaRonyCommandHandler.class
===================================================================
(Binary files differ)
Deleted: trunk/samples/Java/handlers/JavaRunRexxWithCommandExits$JavaTestConditionCommandHandler.class
===================================================================
(Binary files differ)
Deleted: trunk/samples/Java/handlers/JavaRunRexxWithCommandExits$JavaTestException0CommandHandler.class
===================================================================
(Binary files differ)
Deleted: trunk/samples/Java/handlers/JavaRunRexxWithCommandExits$JavaTestException1CommandHandler.class
===================================================================
(Binary files differ)
Deleted: trunk/samples/Java/handlers/JavaRunRexxWithCommandExits$JavaTestException2CommandHandler.class
===================================================================
(Binary files differ)
Deleted: trunk/samples/Java/handlers/JavaRunRexxWithCommandExits$JavaTestExceptionCommandHandler.class
===================================================================
(Binary files differ)
Deleted: trunk/samples/Java/handlers/JavaRunRexxWithCommandExits.class
===================================================================
(Binary files differ)
Deleted: trunk/samples/Java/handlers/JavaRunRexxWithCommandExits.java
===================================================================
--- trunk/samples/Java/handlers/JavaRunRexxWithCommandExits.java 2012-02-19 19:21:08 UTC (rev 58)
+++ trunk/samples/Java/handlers/JavaRunRexxWithCommandExits.java 2012-02-22 19:38:50 UTC (rev 59)
@@ -1,192 +0,0 @@
-/* ------------------------ Apache Version 2.0 license -------------------------
- * Copyright (C) 2012 Rony G. Flatscher
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * -----------------------------------------------------------------------------
- *
- * purpose: demonstrate the possibilities Java command handlers allows for
- * needs: testRexxWithCommandExits.rxj
- *
- * @author Rony G. Flatscher
- * @since 2012-02-09
- */
-
-import org.apache.bsf.*;
-import org.rexxla.bsf.engines.rexx.*;
-import java.util.GregorianCalendar;
-
-
-public class JavaRunRexxWithCommandExits
-{
- public static void main (String args[]) throws BSFException
- {
- BSFManager mgr =new BSFManager(); // create an instance of BSFManager
- RexxEngine rexxEngine=(RexxEngine) mgr.loadScriptingEngine("rexx"); // load the Rexx engine
-
- // Rexx code to run
- String rexxCode= "call 'testRexxWithCommandExits.rxj' ;" +
- "::requires BSF.CLS ;" ; // get ooRexx support (camouflage Java as ooRexx)
-
- // Configure the RexxEngine
- RexxConfiguration rexxconf=rexxEngine.getRexxConfiguration();
- System.err.println("default rexxconf=["+rexxconf+"]\n");
- rexxconf.addCommandHandler("ALICE", new JavaAliceCommandHandler());
- rexxconf.addCommandHandler("DANIEL", new JavaDanielCommandHandler());
- rexxconf.addCommandHandler("MICHAEL", new JavaMichaelCommandHandler());
- rexxconf.addCommandHandler("RONY", new JavaRonyCommandHandler());
-
- rexxconf.addCommandHandler("TESTCONDITION", new JavaTestConditionCommandHandler());
-
- rexxconf.addCommandHandler("TESTEXCEPTION", new JavaTestExceptionCommandHandler());
- rexxconf.addCommandHandler("TESTEXCEPTION0", new JavaTestException0CommandHandler());
- rexxconf.addCommandHandler("TESTEXCEPTION1", new JavaTestException1CommandHandler());
- rexxconf.addCommandHandler("TESTEXCEPTION2", new JavaTestException2CommandHandler());
-
- rexxconf.setInitialAddressEnvironment("ALICE");
-
- // add ",.pre" to default call extensions
- rexxconf.setExternalCallExtensions(rexxconf.getExternalCallExtensions()+",.pre");
-
- rexxconf.setExternalCallPath("..");
-
- System.err.println("edited rexxconf=["+rexxconf+"]\n");
-
- // invoke the interpreter and run the Rexx program
- rexxEngine.apply ("JavaRunRexxWithCommandExits.java", 0, 0, rexxCode, null, null);
- }
-
-
- public static class JavaAliceCommandHandler extends RexxCommandHandler
- {
- public Object handleCommand(String address, String command, Object[] slot)
- {
- System.err.println("[JavaAliceCommandHandler] address=["+address+"]"+
- "\tcommand=["+command+"]");
- return "118";
- }
- }
-
- public static class JavaDanielCommandHandler extends RexxCommandHandler
- {
- public Object handleCommand(String address, String command, Object[] slot)
- {
- System.err.println("[JavaDanielCommandHandler] address=["+address+"]"+
- "\tcommand=["+command+"]");
- return "521";
- }
- }
-
- public static class JavaMichaelCommandHandler extends RexxCommandHandler
- {
- public Object handleCommand(String address, String command, Object[] slot)
- {
- System.err.println("[JavaMichaelCommandHandler] address=["+address+"]"+
- "\tcommand=["+command+"]");
- return "922";
- }
- }
-
- public static class JavaRonyCommandHandler extends RexxCommandHandler
- {
- public Object handleCommand(String address, String command, Object[] slot)
- {
- System.err.println("[JavaRonyCommandHandler] address=["+address+"]"+
- "\tcommand=["+command+"]");
- return "520";
- }
- }
-
-
- public static class JavaTestConditionCommandHandler extends RexxCommandHandler
- {
- public Object handleCommand(String address, String command, Object[] slot)
- {
- System.err.println("[JavaTestConditionCommandHandler] address=["+address+"]"+
- "\tcommand=["+command+"]"+
- "\nraising a 'Failure' condition before returning to Rexx");
-
- GregorianCalendar gregCal=new GregorianCalendar();
- Object additional[]={"additional #1", "additional #2", gregCal, "additional #4"};
- raiseCondition(slot, "Failure", "description: test", additional, "43 -nixi, noxi");
- return null;
- }
- }
-
-
- public static class JavaTestExceptionCommandHandler extends RexxCommandHandler
- {
- public Object handleCommand(String address, String command, Object[] slot)
- {
- System.err.println("[JavaTestExceptionCommandHandler] address=["+address+"]"+
- "\tcommand=["+command+"]"+
- "\nraising a syntax exception (# 98.945) before returning to Rexx");
-
- GregorianCalendar gregCal=new GregorianCalendar();
- Object substitutions[]={"substitution #1", "substitution #2", gregCal, "substitution #4"};
- raiseException(slot, 98945, substitutions); // some dummy Rexx error number ("98.945")
- return null;
- }
- }
-
- public static class JavaTestException0CommandHandler extends RexxCommandHandler
- {
- public Object handleCommand(String address, String command, Object[] slot)
- {
- System.err.println("[JavaTestException0CommandHandler] address=["+address+"]"+
- "\tcommand=["+command+"]"+
- "\nraising a syntax exception (# 98.945) before returning to Rexx");
-
- raiseException0(slot, 98945); // some dummy Rexx error number ("98.945")
- return null;
- }
- }
-
- public static class JavaTestException1CommandHandler extends RexxCommandHandler
- {
- public Object handleCommand(String address, String command, Object[] slot)
- {
- System.err.println("[JavaTestException1CommandHandler] address=["+address+"]"+
- "\tcommand=["+command+"]"+
- "\nraising a syntax exception (# 98.945) before returning to Rexx");
-
- raiseException1(slot, 98945, "substitution #1"); // some dummy Rexx error number ("98.945")
- return null;
- }
- }
-
- public static class JavaTestException2CommandHandler extends RexxCommandHandler
- {
- public Object handleCommand(String address, String command, Object[] slot)
- {
- System.err.println("[JavaTestException2CommandHandler] address=["+address+"]"+
- "\tcommand=["+command+"]");
-
- System.err.println("\t(JAVA-side) fetching Rexx context variable 'TEST', which should NOT be set: ["
- + getContextVariable(slot, "TEST")
- + "]");
-
- setContextVariable(slot, "TEST", "This is a value from the Java command handler!");
-
- System.err.println("\t(JAVA-side) fetching Rexx context variable 'TEST', which now SHOULD be set: ["
- + getContextVariable(slot, "TEST")
- + "]");
-
- System.err.println("\nraising a syntax exception (# 98.945) before returning to Rexx");
-
- raiseException2(slot, 98945, "substitution #1", "substitution #2"); // some dummy Rexx error number ("98.945")
- return null;
- }
- }
-
-}
-
Deleted: trunk/samples/Java/handlers/JavaRunRexxWithSystemExits$RXNOVAL_exit.class
===================================================================
(Binary files differ)
Deleted: trunk/samples/Java/handlers/JavaRunRexxWithSystemExits.class
===================================================================
(Binary files differ)
Deleted: trunk/samples/Java/handlers/JavaRunRexxWithSystemExits.java
===================================================================
--- trunk/samples/Java/handlers/JavaRunRexxWithSystemExits.java 2012-02-19 19:21:08 UTC (rev 58)
+++ trunk/samples/Java/handlers/JavaRunRexxWithSystemExits.java 2012-02-22 19:38:50 UTC (rev 59)
@@ -1,90 +0,0 @@
-/* ------------------------ Apache Version 2.0 license -------------------------
- * Copyright (C) 2012 Rony G. Flatscher
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * -----------------------------------------------------------------------------
- *
- * purpose: demonstrate the possibilities Java implemented system exit handlers allow for
- * needs: testRexxWithSystemdExits.rxj
- *
- * @author Rony G. Flatscher
- * @since 2012-02-09
- */
-
-import org.apache.bsf.*;
-import org.rexxla.bsf.engines.rexx.*;
-import java.util.GregorianCalendar;
-
-
-public class JavaRunRexxWithSystemExits
-{
- public static void main (String args[]) throws BSFException
- {
- BSFManager mgr =new BSFManager(); // create an instance of BSFManager
- RexxEngine rexxEngine=(RexxEngine) mgr.loadScriptingEngine("rexx"); // load the Rexx engine
-
- // Rexx code to run
- String rexxCode= "call 'testRexxWithSystemExits.rxj' ;" +
- "::requires BSF.CLS ;" ; // get ooRexx support (camouflage Java as ooRexx)
-
- // Configure the RexxEngine
- RexxConfiguration rexxconf=rexxEngine.getRexxConfiguration();
- System.err.println("default rexxconf=["+rexxconf+"]\n");
-
- // add system exits
- rexxconf.addExitHandler(RexxExitHandler.RXNOVAL, new RXNOVAL_exit() );
-
- // add ",.pre" to default call extensions
- rexxconf.setExternalCallExtensions(rexxconf.getExternalCallExtensions()+",.pre");
-
- rexxconf.setExternalCallPath("..");
-
- System.err.println("edited rexxconf=["+rexxconf+"]\n");
-
- // invoke the interpreter and run the Rexx program
- rexxEngine.apply ("JavaRunRexxWithSystemExits.java", 0, 0, rexxCode, null, null);
- }
-
-
-
- public static class RXNOVAL_exit extends RexxExitHandler
- {
- private boolean bHandle=false; // switch that causes handling every even invocation
- private int counter=0; // count # of invocations,
-
- public int handleExit(int exitNumber, int subFunction, Object[] parmBlock, Object[] slot)
- {
- counter++;
- System.err.print("(Java-side) [RXNOVAL_exit] exitNumber=["+exitNumber+"] subFunction=["+subFunction+"]"
- + " variable_name=["+parmBlock[0]+"], invoked ["+counter+"] time");
- if (counter>1) // add plural ?
- {
- System.err.print("s");
- }
-
- if (bHandle)
- {
- bHandle=false; // next time do not handle exit
- parmBlock[1]="<Value supplied by Java system exit (RXNOVAL) handler>"; // assign new value
- System.err.println(": this time handling exit!");
- return RexxExitHandler.RXEXIT_HANDLED;
- }
-
- bHandle=true; // next time handle the exit
- System.err.println();
- return RexxExitHandler.RXEXIT_NOT_HANDLED;
- }
- }
-
-}
-
Added: trunk/samples/Java/handlers/commandHandlers/01_commandHandler/JavaRunRexxWithCommandHandler.class
===================================================================
(Binary files differ)
Property changes on: trunk/samples/Java/handlers/commandHandlers/01_commandHandler/JavaRunRexxWithCommandHandler.class
___________________________________________________________________
Added: svn:executable
+ *
Added: svn:mime-type
+ application/x-java-applet
Added: trunk/samples/Java/handlers/commandHandlers/01_commandHandler/JavaRunRexxWithCommandHandler.java
===================================================================
--- trunk/samples/Java/handlers/commandHandlers/01_commandHandler/JavaRunRexxWithCommandHandler.java (rev 0)
+++ trunk/samples/Java/handlers/commandHandlers/01_commandHandler/JavaRunRexxWithCommandHandler.java 2012-02-22 19:38:50 UTC (rev 59)
@@ -0,0 +1,76 @@
+/* ------------------------ Apache Version 2.0 license -------------------------
+ * Copyright (C) 2012 Rony G. Flatscher
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * -----------------------------------------------------------------------------
+ *
+ * purpose: demonstrate the possibilities of a Java command handler
+ * needs: testRexxWithCommandHandler.rxj
+ *
+ * @author Rony G. Flatscher
+ * @since 2012-02-21
+ */
+
+import org.apache.bsf.*;
+import org.rexxla.bsf.engines.rexx.*;
+import java.util.GregorianCalendar;
+
+
+public class JavaRunRexxWithCommandHandler implements RexxCommandHandler
+{
+ public static void main (String args[]) throws BSFException
+ {
+ BSFManager mgr =new BSFManager(); // create an instance of BSFManager
+ RexxEngine rexxEngine=(RexxEngine) mgr.loadScriptingEngine("rexx"); // load the Rexx engine
+
+ // Rexx code to run
+ String rexxCode= "call 'testRexxWithCommandHandler.rxj' ;" +
+ "::requires BSF.CLS ;" ; // get ooRexx support (camouflage Java as ooRexx)
+
+ // Configure the RexxEngine
+ RexxConfiguration rexxconf=rexxEngine.getRexxConfiguration();
+ System.err.println("default rexxconf=["+rexxconf+"]\n");
+ rexxconf.addCommandHandler("EPOQUE", new JavaRunRexxWithCommandHandler());
+
+ rexxconf.setInitialAddressEnvironment("EPOQUE");
+
+ // add ",.pre" to default call extensions
+ rexxconf.setExternalCallExtensions(rexxconf.getExternalCallExtensions()+",.pre");
+
+ rexxconf.setExternalCallPath("..");
+
+ System.err.println("edited rexxconf=["+rexxconf+"]\n");
+
+ // invoke the interpreter and run the Rexx program
+ rexxEngine.apply ("JavaRunRexxWithCommandHandler.java", 0, 0, rexxCode, null, null);
+ }
+
+
+ int counter=0;
+ public Object handleCommand(Object slot, String address, String command)
+ {
+ counter++;
+ System.err.println("[JavaRunRexxWithCommandHandler] address=["+address+"]"+
+ "\tcommand=["+command+"], counter=["+counter+"]");
+ switch (counter)
+ {
+ case 1: return "123";
+ case 2: return new GregorianCalendar();
+ case 3: return null;
+ default: return ""+counter; // turn primitive into Java String
+ }
+ }
+
+
+}
+
Property changes on: trunk/samples/Java/handlers/commandHandlers/01_commandHandler/JavaRunRexxWithCommandHandler.java
___________________________________________________________________
Added: svn:executable
+ *
Added: trunk/samples/Java/handlers/commandHandlers/01_commandHandler/index.html
===================================================================
--- trunk/samples/Java/handlers/commandHandlers/01_commandHandler/index.html (rev 0)
+++ trunk/samples/Java/handlers/commandHandlers/01_commandHandler/index.html 2012-02-22 19:38:50 UTC (rev 59)
@@ -0,0 +1,38 @@
+<head>
+ <title>Brief Overview of the BSF4ooRexx Samples in this Directory</title>
+
+</head>
+
+<body>
+<h1>
+ Java Example (Running ooRexx Scripts from Java) Using a Java Implemented
+ Rexx Command Handler named "EPOQUE"
+</h1>
+
+<em>Hint:</em> if you wish to look at the ooRexx code with syntax highlighting, then you can
+use the free and open-source editor <code>"[g]vim"</code>, which is available for practically
+all platforms and can be downloaded from its homepage at
+<a href="http://www.vim.org/">http://www.vim.org/</a>.
+
+<dl>
+ <dt><em><a href=".">. <directory> (List of this directory)</a></em>
+ <dd>Display all of this directory's files and directories.
+
+ <dt><em><a href="..">.. <directory> (List of parent directory)</a></em>
+ <dd>Display all of the parent directory's files and directories.
+
+ <dt><a href="JavaRunRexxWithCommandHandler.java">JavaRunRexxWithCommandHandler.java</a>
+ <dd>A Java demonstration program to show, how easy it is to invoke a Rexx program for
+ which a Rexx command handler got implemented in Java.
+ <p> The companion Rexx program is:
+ <a href="testRexxWithCommandHandler.rxj">testRexxWithCommandHandler.rxj</a>.
+
+ <p>To run enter the following command on the command line:<br>
+ <pre> java JavaRunRexxWithCommandHandler</pre>
+</dl>
+
+<hr>
+<p style="font-size: 80%;">
+Rony G. Flatscher, 2012-02-21, Wien/Vienna, Austria, Europe
+</body>
+
Property changes on: trunk/samples/Java/handlers/commandHandlers/01_commandHandler/index.html
___________________________________________________________________
Added: svn:executable
+ *
Added: trunk/samples/Java/handlers/commandHandlers/01_commandHandler/testRexxWithCommandHandler.rxj
===================================================================
--- trunk/samples/Java/handlers/commandHandlers/01_commandHandler/testRexxWithCommandHandler.rxj (rev 0)
+++ trunk/samples/Java/handlers/commandHandlers/01_commandHandler/testRexxWithCommandHandler.rxj 2012-02-22 19:38:50 UTC (rev 59)
@@ -0,0 +1,34 @@
+/* ------------------------ Apache Version 2.0 license -------------------------
+ * Copyright (C) 2012 Rony G. Flatscher
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * -----------------------------------------------------------------------------
+ *
+ * purpose: demonstrate the possibilities Java command handlers allows for
+ *
+ * @author Rony G. Flatscher
+ * @since 2012-02-21
+ */
+
+say "default environment:" address()
+
+do i=1 to 10
+ "helloWorld #" i
+ say "rc="rc
+ say "---"
+ say
+end
+
+
+::requires "BSF.CLS" -- get Java support
+
Property changes on: trunk/samples/Java/handlers/commandHandlers/01_commandHandler/testRexxWithCommandHandler.rxj
___________________________________________________________________
Added: svn:executable
+ *
Added: trunk/samples/Java/handlers/commandHandlers/10_commandHandlers/JavaRunRexxWithCommandExits$JavaAliceCommandHandler.class
===================================================================
(Binary files differ)
Property changes on: trunk/samples/Java/handlers/commandHandlers/10_commandHandlers/JavaRunRexxWithCommandExits$JavaAliceCommandHandler.class
___________________________________________________________________
Added: svn:executable
+ *
Added: svn:mime-type
+ application/x-java-applet
Added: trunk/samples/Java/handlers/commandHandlers/10_commandHandlers/JavaRunRexxWithCommandExits$JavaDanielCommandHandler.class
===================================================================
(Binary files differ)
Property changes on: trunk/samples/Java/handlers/commandHandlers/10_commandHandlers/JavaRunRexxWithCommandExits$JavaDanielCommandHandler.class
___________________________________________________________________
Added: svn:executable
+ *
Added: svn:mime-type
+ application/x-java-applet
Added: trunk/samples/Java/handlers/commandHandlers/10_commandHandlers/JavaRunRexxWithCommandExits$JavaMichaelCommandHandler.class
===================================================================
(Binary files differ)
Property changes on: trunk/samples/Java/handlers/commandHandlers/10_commandHandlers/JavaRunRexxWithCommandExits$JavaMichaelCommandHandler.class
___________________________________________________________________
Added: svn:executable
+ *
Added: svn:mime-type
+ application/x-java-applet
Added: trunk/samples/Java/handlers/commandHandlers/10_commandHandlers/JavaRunRexxWithCommandExits$JavaReturnGregorianCalendarCommandHandler.class
===================================================================
(Binary files differ)
Property changes on: trunk/samples/Java/handlers/commandHandlers/10_commandHandlers/JavaRunRexxWithCommandExits$JavaReturnGregorianCalendarCommandHandler.class
___________________________________________________________________
Added: svn:executable
+ *
Added: svn:mime-type
+ application/x-java-applet
Added: trunk/samples/Java/handlers/commandHandlers/10_commandHandlers/JavaRunRexxWithCommandExits$JavaRonyCommandHandler.class
===================================================================
(Binary files differ)
Property changes on: trunk/samples/Java/handlers/commandHandlers/10_commandHandlers/JavaRunRexxWithCommandExits$JavaRonyCommandHandler.class
___________________________________________________________________
Added: svn:executable
+ *
Added: svn:mime-type
+ application/x-java-applet
Added: trunk/samples/Java/handlers/commandHandlers/10_commandHandlers/JavaRunRexxWithCommandExits$JavaTestConditionCommandHandler.class
===================================================================
(Binary files differ)
Property changes on: trunk/samples/Java/handlers/commandHandlers/10_commandHandlers/JavaRunRexxWithCommandExits$JavaTestConditionCommandHandler.class
___________________________________________________________________
Added: svn:executable
+ *
Added: svn:mime-type
+ application/x-java-applet
Added: trunk/samples/Java/handlers/commandHandlers/10_commandHandlers/JavaRunRexxWithCommandExits$JavaTestException0CommandHandler.class
===================================================================
(Binary files differ)
Property changes on: trunk/samples/Java/handlers/commandHandlers/10_commandHandlers/JavaRunRexxWithCommandExits$JavaTestException0CommandHandler.class
___________________________________________________________________
Added: svn:executable
+ *
Added: svn:mime-type
+ application/x-java-applet
Added: trunk/samples/Java/handlers/commandHandlers/10_commandHandlers/JavaRunRexxWithCommandExits$JavaTestException1CommandHandler.class
===================================================================
(Binary files differ)
Property changes on: trunk/samples/Java/handlers/commandHandlers/10_commandHandlers/JavaRunRexxWithCommandExits$JavaTestException1CommandHandler.class
___________________________________________________________________
Added: svn:executable
+ *
Added: svn:mime-type
+ application/x-java-applet
Added: trunk/samples/Java/handlers/commandHandlers/10_commandHandlers/JavaRunRexxWithCommandExits$JavaTestException2CommandHandler.class
===================================================================
(Binary files differ)
Property changes on: trunk/samples/Java/handlers/commandHandlers/10_commandHandlers/JavaRunRexxWithCommandExits$JavaTestException2CommandHandler.class
___________________________________________________________________
Added: svn:executable
+ *
Added: svn:mime-type
+ application/x-java-applet
Added: trunk/samples/Java/handlers/commandHandlers/10_commandHandlers/JavaRunRexxWithCommandExits$JavaTestExceptionCommandHandler.class
===================================================================
(Binary files differ)
Property changes on: trunk/samples/Java/handlers/commandHandlers/10_commandHandlers/JavaRunRexxWithCommandExits$JavaTestExceptionCommandHandler.class
___________________________________________________________________
Added: svn:executable
+ *
Added: svn:mime-type
+ application/x-java-applet
Added: trunk/samples/Java/handlers/commandHandlers/10_commandHandlers/JavaRunRexxWithCommandExits.class
===================================================================
(Binary files differ)
Property changes on: trunk/samples/Java/handlers/commandHandlers/10_commandHandlers/JavaRunRexxWithCommandExits.class
___________________________________________________________________
Added: svn:executable
+ *
Added: svn:mime-type
+ application/x-java-applet
Added: trunk/samples/Java/handlers/commandHandlers/10_commandHandlers/JavaRunRexxWithCommandExits.java
===================================================================
@@ Diff output truncated at 100000 characters. @@
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|