untested finished nlsop* binaries - configure script needs to get adjusted.
[physik/nlsop.git] / nlsop_gui.c
index 0c56147..477d264 100644 (file)
@@ -47,6 +47,7 @@
 #include "network.h"
 #include "event.h"
 #include "display.h"
+#include "input.h"
 
 #include "nlsop_general.h"
 
@@ -65,11 +66,70 @@ int usage(char *prog)
 
 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;
 }
 
@@ -80,9 +140,9 @@ int send_job(t_net *net,t_input *input,t_display *display) {
   info info;
 
   /* default values */
-  x=X;
-  y=Y;
-  z=Z;
+  x=_X;
+  y=_Y;
+  z=_Z;
   info.cc=CC;
   info.steps=STEPS;
   info.range=RANGE;
@@ -146,7 +206,7 @@ int send_job(t_net *net,t_input *input,t_display *display) {
   }
 
   command[0]=GUI_ADDJOB;
-  network_send_chan(net,0,data,1);
+  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));
@@ -163,8 +223,6 @@ int get_command(t_event *event,void *allineed) {
   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));
@@ -174,7 +232,7 @@ int get_command(t_event *event,void *allineed) {
       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 */
@@ -182,7 +240,7 @@ int get_command(t_event *event,void *allineed) {
       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");
@@ -255,7 +313,7 @@ int main(int argc,char **argv)
   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);
@@ -272,6 +330,8 @@ int main(int argc,char **argv)
   /* 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);
@@ -281,10 +341,14 @@ int main(int argc,char **argv)
   }
   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);