PetscErrorCode PetscViewerMathematicaSetupConnection_Private(PetscViewer v) { PetscViewer_Mathematica *vmath = (PetscViewer_Mathematica*) v->data; #if defined(MATHEMATICA_3_0) int argc = 6; char *argv[6]; #else int argc = 5; char *argv[5]; #endif char hostname[256]; long lerr; PetscErrorCode ierr; PetscFunctionBegin; /* Link name */ argv[0] = "-linkname"; if (!vmath->linkname) argv[1] = "math -mathlink"; else argv[1] = vmath->linkname; /* Link host */ argv[2] = "-linkhost"; if (!vmath->linkhost) { ierr = PetscGetHostName(hostname, 255); CHKERRQ(ierr); argv[3] = hostname; } else argv[3] = vmath->linkhost; /* Link mode */ #if defined(MATHEMATICA_3_0) argv[4] = "-linkmode"; switch (vmath->linkmode) { case MATHEMATICA_LINK_CREATE: argv[5] = "Create"; break; case MATHEMATICA_LINK_CONNECT: argv[5] = "Connect"; break; case MATHEMATICA_LINK_LAUNCH: argv[5] = "Launch"; break; } #else switch (vmath->linkmode) { case MATHEMATICA_LINK_CREATE: argv[4] = "-linkcreate"; break; case MATHEMATICA_LINK_CONNECT: argv[4] = "-linkconnect"; break; case MATHEMATICA_LINK_LAUNCH: argv[4] = "-linklaunch"; break; } #endif vmath->link = MLOpenInEnv(mathematicaEnv, argc, argv, &lerr); #endif PetscFunctionReturn(0); }
static int setupConnection(MLENV *env, MLINK *link, const char *linkhost, LinkMode linkmode) { int argc = 5; char *argv[5]; char hostname[256]; long lerr; int ierr; PetscFunctionBegin; /* Link name */ argv[0] = "-linkname"; argv[1] = "8001"; /* Link host */ argv[2] = "-linkhost"; if (!linkhost) { ierr = PetscGetHostName(hostname, 255);CHKERRQ(ierr); argv[3] = hostname; } else argv[3] = (char*) linkhost; /* Link mode */ switch (linkmode) { case MATHEMATICA_LINK_CREATE: argv[4] = "-linkcreate"; break; case MATHEMATICA_LINK_CONNECT: argv[4] = "-linkconnect"; break; case MATHEMATICA_LINK_LAUNCH: argv[4] = "-linklaunch"; break; } *env = MLInitialize(0); for (lerr = 0; lerr < argc; lerr++) printf("argv[%ld] = %s\n", lerr, argv[lerr]); *link = MLOpenInEnv(*env, argc, argv, &lerr); printf("lerr = %ld\n", lerr); PetscFunctionReturn(0); }