/******************************************************* Mosel User Guide Example Problems ================================= file runprimeiodistr.c `````````````````````` Distributed computing: Running a model on a remote Mosel instance and retrieving output data. - Data saved on the remote machine running the Mosel model - (Submodel writing to "bin:shmem:" or "bin:tmp:") (c) 2013 Fair Isaac Corporation author: S. Heipcke, Jan. 2013 *******************************************************/ #include #include #include #include "xprd.h" #include "bindrv.h" #define STOPMOD 2 /* Identifier for "Stop submodel" user event */ #define MODREADY 3 /* Identifier for "Submodel ready" user event */ /*********************************/ /* Wrapper function for 'bindrv' */ /*********************************/ static size_t my_read(void *buf, size_t size, size_t nmemb, void *ctx) { size_t s,a; long t; s=size*nmemb; a=0; while(s>0) { t=XPRDfread(ctx,(char*)buf+a,s); if(t<=0) break; else { a+=t; s-=t; } } return a/size; } /********************************************************/ /* Using bindrv Decode the binary file and display its content */ /********************************************************/ void show_solution(size_t (*doread)(void *,size_t,size_t,void*), void *rctx) { s_bindrvctx bdrv; int *solarr; int size,i,n; char *str; bdrv=bindrv_newreader(doread,rctx); /* Initialize binreader */ i=size=0; solarr=NULL; while(bindrv_nexttoken(bdrv)>=0) { bindrv_getctrl(bdrv,&n); /* 'label' (marker) */ bindrv_getstring(bdrv,&str); /* Read a string */ if(strcmp(str,"NumP")==0) { free(str); bindrv_getint(bdrv,&size); /* Read an integer */ printf("( %d prime numbers)\n", size); if(size>0) /* Prepare array to receive values */ solarr=malloc(sizeof(int)*size); else break; } else if(strcmp(str,"SPrime")==0) { free(str); bindrv_getctrl(bdrv,&n); /* [ (start marker) */ while(bindrv_nexttoken(bdrv)==BINDRV_TYP_INT) { /* Read integers */ bindrv_getint(bdrv,&(solarr[i++])); } bindrv_getctrl(bdrv,&n); /* ] (end marker) */ } else { printf("Unexpected label: %s\n", str); free(str); exit(1); } } bindrv_delete(bdrv); /* Release bin reader */ /* Print the set of prime numbers */ printf("Prime numbers={"); for(i=0;i