//#include #include "cern_ctfjmod_MADManager.h" #include #include #include #include #include "madxinterface.h" #define MAX_CMDLEN 2000 JNIEXPORT void JNICALL Java_cern_ctfjmod_MADManager_InitMAD (JNIEnv *, jclass) { /* * Class: cern_ctfjmod_MADManager * Method: FinishMAD * Signature: ()V */ madx_init_(); madx_start_(); } ///////////////////////////////////////////////////////////////////// JNIEXPORT void JNICALL Java_cern_ctfjmod_MADManager_FinishMAD (JNIEnv *, jclass) { /* * Class: cern_ctfjmod_MADManager * Method: ProcessCommand * Signature: (Ljava/lang/String;)I */ madx_finish(); } ///////////////////////////////////////////////////////////////////// JNIEXPORT jint JNICALL Java_cern_ctfjmod_MADManager_ProcessCommand (JNIEnv* env, jclass , jstring jcmd) { /* * Class: cern_ctfjmod_MADManager * Method: GetErrorFlag * Signature: ()I */ char* buff = (char*)malloc(MAX_CMDLEN); jint retval = 0; jboolean* makecopy = 0x0; const char* ccmd = env->GetStringUTFChars(jcmd, makecopy); int len = env->GetStringLength(jcmd); //printf("Processing: String length is %d \n",len); if (len == 0) { return retval; } strcpy(buff,ccmd); env->ReleaseStringUTFChars(jcmd,ccmd); stolower_nq(buff); printf("C: Processing: %s\n",buff); fflush(0); pro_input(buff); // printf("C: Command Processed\n"); fflush(0); free(buff); return retval; } ///////////////////////////////////////////////////////////////////// JNIEXPORT jint JNICALL Java_cern_ctfjmod_MADManager_GetErrorFlag (JNIEnv *, jclass) { /* * Class: cern_ctfjmod_MADManager * Method: GetErrorMessage * Signature: ()Ljava/lang/String; */ printf("Asked for error flag\n"); fflush(0); jint retval = geterrorflag(); printf("Got error flag %d\n",retval); fflush(0); return retval; } ///////////////////////////////////////////////////////////////////// JNIEXPORT jstring JNICALL Java_cern_ctfjmod_MADManager_GetErrorMessage (JNIEnv * env, jclass) { /* * Class: cern_ctfjmod_MADManager * Method: getValues * Signature: (I)[D */ const char* em = geterrrormessage(); jstring retval = env->NewStringUTF(em); return retval; } ///////////////////////////////////////////////////////////////////// JNIEXPORT void JNICALL Java_cern_ctfjmod_MADManager_SetVariable (JNIEnv *env, jclass, jstring vn, jdouble v) { char buff[100]; jboolean* makecopy = 0x0; const char* varname = env->GetStringUTFChars(vn, makecopy); strcpy(buff,varname); double value = v; set_variable(buff,&value); } JNIEXPORT jdouble JNICALL Java_cern_ctfjmod_MADManager_GetVariable (JNIEnv *env, jclass, jstring vname) { jdouble retval; char buff[100]; jboolean* makecopy = 0x0; const char* varname = env->GetStringUTFChars(vname, makecopy); strcpy(buff,varname); retval = get_variable(buff); return retval; } JNIEXPORT jdoubleArray JNICALL Java_cern_ctfjmod_MADManager_getValues(JNIEnv *env, jclass cls, jint index) { static char buff[MAX_CMDLEN]; printf("Jestem w funkcji c++: %d \n", index); printf("\n\n"); jdoubleArray result; result = env->NewDoubleArray(10); jdouble tmp[10]; for (int i = 0; i < 10; i++) { tmp[i] = i % 3; } env->SetDoubleArrayRegion(result, 0, 10, tmp); madx_init_(); madx_start_(); strcpy(buff,"print, text=\"Dupa w madeksie\";"); pro_input(buff); strcpy(buff,"dupa= 21;"); pro_input(buff); strcpy(buff,"value, dupa;"); pro_input(buff); madx_finish(); return result; } JNIEXPORT jint JNICALL Java_cern_ctfjmod_MADManager_ChangeWorkDir (JNIEnv * env, jclass, jstring path) { int result = 0; jboolean* makecopy = 0x0; const char* cpath = env->GetStringUTFChars(path, makecopy); int len = env->GetStringLength(path); printf("Processing: String length is %d \n",len); if (len == 0) { return 1; } result = chdir(cpath); env->ReleaseStringUTFChars(path,cpath); return result; }