Haven't found my "working" example yet (might've been on a docker I blew away). I did find some WIP code but some of the includes it uses are not distributed.
Maybe this will help you get further until I find something concrete: #include "Python.h" #include <jsystem.h> int ParseArguments(char* arr[],Py_ssize_t size, PyObject *args) { /* Get arbitrary number of strings from Py_Tuple */ Py_ssize_t i; PyObject *temp_p, * pyStr; temp_p = PyTuple_GetItem(args,i); if(temp_p == NULL) {return 0;} char *ptr = PyUnicode_AsUTF8AndSize(temp_p, &size); arr[i] = strdup(ptr); } return 1; } static PyObject * jbasepy_callsub(PyObject *self, PyObject *args) { struct jBASEDataAreas *dp; dp = jbase_getdpEX(NULL,NULL,1,NULL); if (dp != NULL) { char * subroutineName; Py_ssize_t TupleSize = PyTuple_Size(args); char ** all_args = malloc(TupleSize * sizeof(char*)); PyObject * list_out; if (ParseArguments(all_args, TupleSize, args)) { subroutineName = all_args[0]; int (*subptr)() = JediObjectFindFunction(dp, subroutineName, 2); if (subptr != NULL) { int i; char V[256]; memset (V, 'V', TupleSize-1); V[TupleSize-1] = '\0'; /* null terminate. */ VAR *varArg, **varArgs = malloc((TupleSize-1) * sizeof(VAR*)); for(i = 1; i < TupleSize; ++i) { varArgs[i-1] = malloc(sizeof(VAR)); varArg = varArgs[i-1]; VAR_INITIALISE_VB(varArg); STORE_VBS(varArg,(STRING*)all_args[i]); } list_out = PyUnicode_FromString((char*)CONV_SFB(varArgs[0])); for(i = 1; i < TupleSize; ++i) { VAR * varArg = varArgs[i-1]; VAR_RELEASE_VB(varArg); free(varArgs[i-1]); free(all_args[i]); } free(all_args[0]); char V[256]; memset (V, 'V', TupleSize-1); V[TupleSize-1] = '\0'; /* null terminate. */ VAR *varArg, **varArgs = malloc((TupleSize-1) * sizeof(VAR*)); for(i = 1; i < TupleSize; ++i) { varArgs[i-1] = malloc(sizeof(VAR)); varArg = varArgs[i-1]; VAR_INITIALISE_VB(varArg); STORE_VBS(varArg,(STRING*)all_args[i]); } subptr(dp, V, varArgs[0], varArgs[1], varArgs[2], varArgs[3], varArgs[4], varArg s[5], varArgs[6], varArgs[7], varArgs[8], varArgs[9]); list_out = PyUnicode_FromString((char*)CONV_SFB(varArgs[0])); for(i = 1; i < TupleSize; ++i) { VAR * varArg = varArgs[i-1]; VAR_RELEASE_VB(varArg); free(varArgs[i-1]); free(all_args[i]); } free(all_args[0]); free(all_args); free(varArgs); return list_out; } else { return PyUnicode_FromString("Subroutine not found"); } } return PyUnicode_FromString("Error parsing arguments"); } return PyUnicode_FromString("Failed to initialise jBASE"); } static PyMethodDef jbasepy_methods[] = { {"callsub", (PyCFunction)jbasepy_callsub, METH_VARARGS, PyDoc_STR("call jBASE subroutine")}, On Wed, Mar 4, 2020 at 12:08 PM Peter Falson <pbtbl...@gmail.com> wrote: > What version of jBASE do you have? > > Sent from my iPhone > > On Mar 4, 2020, at 10:55 AM, Igor Osmolovskiy <igos...@gmail.com> wrote: > > > Thanks Peter, would be really helpful! > > I've tried two ways > 1. ctypes library. I managed to call a JBC function but it requires quite > a lot work as the explicit variable types are required in this case. So all > the transformations from PythonObj to a C type is required for each > argument. Also in many cases polymorphismе would be required as JBC > arguments often assume different types. > 2. building a python library via distutils and working with PythonObj > only. As I've mentioned already this works but was not able to get rid of > the additional session being created at the step of "import lib" in python > code. > > среда, 4 марта 2020 г., 16:11:12 UTC+1 пользователь pfalson написал: >> >> We have some examples of python calling a subroutine and vice versa. I >> will dig around. >> >> Sent from my iPhone >> >> On Mar 4, 2020, at 7:05 AM, Igor Osmolovskiy <igo...@gmail.com> wrote: >> >> >> Hello >> pls see my response to Jim with the code sample >> >> вторник, 3 марта 2020 г., 21:06:27 UTC+1 пользователь pfalson написал: >>> >>> Can you post some code? >>> >>> Sent from my iPhone >>> >>> On Mar 3, 2020, at 11:19 AM, Igor Osmolovskiy <igo...@gmail.com> wrote: >>> >>> >>> Dear all >>> >>> I need the jBase DP (data pointer) to be initialized. I've actually >>> managed to initialize it by calling the jbase_getdp(). But in both cases >>> the new child session is created in jshell (and gets removed automatically >>> after the code has been executed). >>> >>> So I am wondering: is there a possibility to retrieve and use the >>> current session DP somehow? So that no child session would get created >>> >>> Any advice would be highly appreciated >>> >>> Thanks in advance >>> >>> >>> PS: to the admin, it is actually a jBase related question rather than >>> TAFC. Thanks >>> >>> >>> Kind regards, >>> Igor >>> >>> -- >>> -- >>> IMPORTANT: T24/Globus posts are no longer accepted on this forum. >>> >>> To post, send email to jb...@googlegroups.com >>> To unsubscribe, send email to jbase-un...@googlegroups.com >>> For more options, visit this group at >>> http://groups.google.com/group/jBASE?hl=en >>> >>> --- >>> You received this message because you are subscribed to the Google >>> Groups "jBASE" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to jb...@googlegroups.com. >>> To view this discussion on the web visit >>> https://groups.google.com/d/msgid/jbase/73153581-25ae-493a-95f6-8afc5cdf7813%40googlegroups.com >>> <https://groups.google.com/d/msgid/jbase/73153581-25ae-493a-95f6-8afc5cdf7813%40googlegroups.com?utm_medium=email&utm_source=footer> >>> . >>> >>> -- >> -- >> IMPORTANT: T24/Globus posts are no longer accepted on this forum. >> >> To post, send email to jb...@googlegroups.com >> To unsubscribe, send email to jbase-un...@googlegroups.com >> For more options, visit this group at >> http://groups.google.com/group/jBASE?hl=en >> >> --- >> You received this message because you are subscribed to the Google Groups >> "jBASE" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to jb...@googlegroups.com. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/jbase/5c46377f-4c68-4f50-a5fb-9d1d8164232b%40googlegroups.com >> <https://groups.google.com/d/msgid/jbase/5c46377f-4c68-4f50-a5fb-9d1d8164232b%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> >> -- > -- > IMPORTANT: T24/Globus posts are no longer accepted on this forum. > > To post, send email to jBASE@googlegroups.com > To unsubscribe, send email to jbase-unsubscr...@googlegroups.com > For more options, visit this group at > http://groups.google.com/group/jBASE?hl=en > > --- > You received this message because you are subscribed to the Google Groups > "jBASE" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to jbase+unsubscr...@googlegroups.com. > To view this discussion on the web visit > https://groups.google.com/d/msgid/jbase/8ed5e66b-8076-495b-8b66-c7db7d4e8629%40googlegroups.com > <https://groups.google.com/d/msgid/jbase/8ed5e66b-8076-495b-8b66-c7db7d4e8629%40googlegroups.com?utm_medium=email&utm_source=footer> > . > > -- -- IMPORTANT: T24/Globus posts are no longer accepted on this forum. To post, send email to jBASE@googlegroups.com To unsubscribe, send email to jbase-unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/jBASE?hl=en --- You received this message because you are subscribed to the Google Groups "jBASE" group. To unsubscribe from this group and stop receiving emails from it, send an email to jbase+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/jbase/CADBkQX3y2BVd0goEPGE8K1EdfrbcmdjZ1vK0xGWigTCaOfnBVA%40mail.gmail.com.