+ if(min!=0) {
+ printf("d: distributing jobs ...\n");
+ printf("%d queued jobs, %d idle clients\n\n",count_j,count_c);
+ }
+
+ list_reset(&(priv.job));
+ list_reset(&(priv.client));
+
+ while(min) {
+ j=(t_job *)priv.job.current->data;
+ c=(t_client *)priv.client.current->data;
+ while(c->status!=IDLE) {
+ list_next(&(priv.client));
+ c=(t_client *)priv.client.current->data;
+ }
+ while(j->status!=IN_QUEUE) {
+ list_next(&(priv.job));
+ j=(t_job *)priv.job.current->data;
+ }
+
+ /* direct current job to current client */
+ if(j->step==0) data=NLSOP_NJOB;
+ else data=NLSOP_CJOB;
+
+ c->status=WORK;
+ j->channel=c->channel;
+ j->status=IN_WORK;
+
+ d3l.max_x=j->x;
+ d3l.max_y=j->y;
+ d3l.max_z=j->z;
+
+ network_send_chan(&(priv.net),c->channel,&data,sizeof(unsigned char));
+ network_send_chan(&(priv.net),c->channel,(unsigned char *)&d3l,
+ sizeof(d3_lattice));
+ network_send_chan(&(priv.net),c->channel,(unsigned char *)&(j->info),
+ sizeof(info));
+
+ if(data==NLSOP_CJOB) {
+ network_send_chan(&(priv.net),c->channel,j->ac,
+ j->size*sizeof(unsigned char));
+ network_receive_chan(&(priv.net),c->channel,&data,sizeof(unsigned char));
+ network_send_chan(&(priv.net),c->channel,(unsigned char *)&(j->cc),
+ j->size*sizeof(int));
+ network_receive_chan(&(priv.net),c->channel,&data,sizeof(unsigned char));
+ network_send_chan(&(priv.net),c->channel,(unsigned char *)&(j->step),
+ sizeof(int));
+ network_receive_chan(&(priv.net),c->channel,&data,sizeof(unsigned char));
+ }