#include "network.h"
#include "event.h"
#include "display.h"
+#include "input.h"
#include "nlsop_general.h"
int display_new_line(t_display *display,char *text) {
+ int x,y;
+ int ptr;
+ int i;
+
+ unsigned char *tmp;
+
+ x=display->max_x-1;
+ y=display->max_y-1;
+
+ tmp=(unsigned char *)malloc(display->max_x);
+ memset(tmp,0x20,display->max_x);
+
+ display_line(display,0,0,x,0,'#');
+ display_string(display,1,y-y/2-17,"nlsop gui (C) 2004 Frank Zirkelbach",35);
+ display_line(display,0,2,x,2,'#');
+ display_line(display,0,y-1,x,y-1,'#');
+ display_string(display,0,y,"prompt: ",8);
+ display_string(display,8,y,tmp,x-8);
+ display_set_cursor(display,8,y);
+
+ ptr=3*display->max_x;
+ for(i=0;i<display->max_x-6;i++) {
+ memcpy(display->screen+ptr,display->screen+ptr+display->max_x,
+ display->max_x);
+ ptr+=display->max_x;
+ }
+
+ display_draw(display);
+
return 1;
}
int send_and_wait_for_answer(t_net *net,t_display *display) {
+ int i,count;
+ t_job job;
+ char data;
+ char string[MAX_CONTENT];
+
+ data=GUI_INFO;
+
+ /* request information */
+ network_send_chan(net,0,&data,sizeof(unsigned char));
+
+ /* receive information */
+ network_receive_chan(net,0,&data,sizeof(unsigned char));
+ if(data!=GUI_INFO) {
+ display_new_line(display,"no gui info answer, ignored");
+ return -1;
+ }
+
+ network_receive_chan(net,0,(unsigned char *)&count,sizeof(int));
+ for(i=0;i<count;i++) {
+ network_receive_chan(net,0,(unsigned char *)&job,sizeof(t_job));
+ snprintf(string,MAX_CONTENT,
+ "channel %d %c => b=%f c=%f s=%f | d: %d %f | %d",
+ job.channel,job.status&IN_WORK?'a':'q',
+ job.info.b,job.info.c,job.info.s,
+ job.info.diff_rate,job.info.dr_ac,job.progress);
+ display_new_line(display,string);
+ }
+
+ display_new_line(display,"done");
+
return 1;
}
int send_job(t_net *net,t_input *input,t_display *display) {
+ char command[MAX_CONTENT];
+ int x,y,z;
+ info info;
+
+ /* default values */
+ x=_X;
+ y=_Y;
+ z=_Z;
+ info.cc=CC;
+ info.steps=STEPS;
+ info.range=RANGE;
+ info.diff_rate=DIFF_RATE;
+ info.cpi=CPI;
+ info.s_rate=S_RATE;
+ info.save_rate=RESAVE;
+ info.s=S_D;
+ info.b=B_D;
+ info.c=C_D;
+ info.dr_ac=DR_AC;
+
+ strncpy(command,input->content,MAX_CONTENT);
+
+ strtok(command," ");
+ while(strtok(NULL," ")!=NULL) {
+ switch(command[0]) {
+ case 'b':
+ info.b=atof(command+1);
+ break;
+ case 'c':
+ info.c=atof(command+1);
+ break;
+ case 's':
+ info.s=atof(command+1);
+ break;
+ case 'd':
+ info.diff_rate=atoi(command+1);
+ break;
+ case 'D':
+ info.dr_ac=atof(command+1);
+ break;
+ case 'S':
+ info.steps=atoi(command+1);
+ break;
+ case 'C':
+ info.cpi=atoi(command+1);
+ break;
+ case 'r':
+ info.range=atoi(command+1);
+ break;
+ case 'R':
+ info.s_rate=atoi(command+1);
+ break;
+ case 'x':
+ info.save_rate=atoi(command+1);
+ break;
+ case 'X':
+ x=atoi(command+1);
+ break;
+ case 'Y':
+ y=atoi(command+1);
+ break;
+ case 'Z':
+ z=atoi(command+1);
+ break;
+ default:
+ display_new_line(display,"unknown command");
+ break;
+ }
+ }
+
+ command[0]=GUI_ADDJOB;
+ network_send_chan(net,0,command,1);
+
+ network_send_chan(net,0,(unsigned char *)&x,sizeof(int));
+ network_send_chan(net,0,(unsigned char *)&y,sizeof(int));
+ network_send_chan(net,0,(unsigned char *)&z,sizeof(int));
+
+ network_send_chan(net,0,(unsigned char *)&info,sizeof(info));
+
return 1;
}
t_display *display;
t_input *input;
- unsigned char data[64];
-
net=(t_net *)allineed;
display=(t_display *)(allineed+sizeof(t_net));
input=(t_input *)(allineed+sizeof(t_net)+sizeof(t_display));
send_and_wait_for_answer(net,display);
break;
case GUI_ADDJOB:
- send_job(net,input,display)
+ send_job(net,input,display);
break;
case GUI_QUIT:
/* stop everything */
network_shutdown(net);
display_shutdown(display);
input_shutdown(input);
- event_shutdown(event);
+ event_stop(event);
return 2;
default:
display_new_line(display,"unknown gui command");
allyouneed=malloc(sizeof(t_net)+sizeof(t_display)+sizeof(t_input));
memcpy(allyouneed,&net,sizeof(t_net));
memcpy(allyouneed+sizeof(t_net),&display,sizeof(t_display));
- memcpy(allyouneed+sizeof(t_net)+sizeof(t_display),sizeof(t_input));
+ memcpy(allyouneed+sizeof(t_net)+sizeof(t_display),&input,sizeof(t_input));
/* input init */
input_init(&input,fd);
/* user interaction */
event_math(0,&event,READ,ADD);
+ display_new_line(&display,"welcome to nlsop gui! :)");
+
/* connect to server */
network_init(&net,fd);
network_set_connection_info(&net,0,server_ip,port);
}
network_select(&net,0);
+ display_new_line(&display,"successfully connected to server");
+
/* tell server: i am a client, i may work for you */
data=NLSOP_GUI;
network_send(net.connection[0].fd,&data,1);
+ display_new_line(&display,"send data to server, waiting for input ...");
+
/* wait for job */
event_start(&event,allyouneed,get_command,NULL);