X-Git-Url: https://hackdaworld.org/gitweb/?p=physik%2Fnlsop.git;a=blobdiff_plain;f=nlsop_gui.c;h=477d2649af5c4e5d0d655dd937e20d2608b382bf;hp=0c56147ce2ba525925efea3ba6679635303c50ff;hb=6f7acbcafd89b6e3899b6bef51c7727a4c560221;hpb=5246e11671ef0cceef2086f1c9d75c35198683e2;ds=sidebyside diff --git a/nlsop_gui.c b/nlsop_gui.c index 0c56147..477d264 100644 --- a/nlsop_gui.c +++ b/nlsop_gui.c @@ -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;imax_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 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);