Linuxpops  3.01.04
Spectral Anaysis Package for Single Dish Data
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
dataserv.c
Go to the documentation of this file.
1 #include "ds_extern.h"
2 #include "ds_proto.h"
3 
4 #include <sys/sysinfo.h>
5 
6 int pthread_setname_np(pthread_t thread, const char *name);
7 
8 
9 #ifdef GALACTIC
10 #undef GALACTIC
11 #endif
12 
13 #ifdef AZEL
14 #undef AZEL
15 #endif
16 
17 #ifdef USERDEF
18 #undef USERDEF
19 #endif
20 
21 #include "dataserv.bmp"
22 //#include "datagrid.bmp"
23 
24 #define TRUE 1
25 #define FALSE 0
26 #define DATASPREAD 0.000001
27 
28 int (*sock_callback)() = NULL;
29 char inMsg[16384];
30 
32 
33 int datalen = 0,
37  sockmode = 0,
41  version = 1,
42  numOfCPUs = 0;
43 
44 float datamax,
45  datamin,
46  scanNum = -1.0;
47 
48 
49 char filename[256];
50 char gfilename[256];
51 
52 char initials[256], source[SRCLEN+1], oldBuf[16384], tempBuf[16384],
53  prgName[80], errBuf[512], manInitials[80], localHost[80],
54  deadServer[80], saveBuf[16384], manVersion[80], mainFrameTitle[80],
55  tailFileName[80], datadir[128], fixeddir[128], _3ddir[128];
56 
57 
59 
60 
61 int scansDone[100];
62 int scansDoneInx = 0;
63 int scanDone = 0;
64 
65 static int block_for_event();
66 
68 /*
69 , onhead02, onhead03,
70  onhead04, onhead05, onhead06,
71  onhead07, onhead08, onhead09,
72  onhead10, onhead11, onhead12,
73  onhead13, onhead14, onhead15,
74  onhead16;
75  */
76 
82  *ondata16;
83 
85 
91  *offdata16;
92 
94 
100  *gainsdata16;
101 
102 extern int _Xdebug;
103 
104 int fitFail = 0;
106 
107 extern int lockScale, wasOn;
109 extern float offScanNum;
110 
111 extern struct XGR_HEAD xgr_head;
112 struct XGR_ *server;
113 
114 int PID;
115 
116  /* DO NOT FORGET TO ADD A HANDLER FOR ANY EXTRA MASKS ADDED, processEvent() */
117 long frame_mask = KeyPressMask | ExposureMask | StructureNotifyMask;
118 
119 int istty;
121 
122 extern int insque(), remque();
123 
124 
125 int to_helper(buf)
126 char *buf;
127 {
128  if(buf && sockmode)
129  {
130  log_msg("To HELPER: '%s'", buf);
131 
132  sock_send(helper, buf);
133  }
134 
135  return(0);
136 }
137 
138 
139 int to_xgraphic(buf)
140 char *buf;
141 {
142  if(buf && sockmode)
143  {
144  log_msg("To XGRAPHIC: %s", buf);
145 
146  sock_send(xgraphic, buf);
147  }
148 
149  return(0);
150 }
151 
152 
154 {
155  int n, na;
156 
157  n = get_nprocs_conf();
158  na = get_nprocs();
159 
160  numOfCPUs = na;
161  log_msg("%d processors configured, %d processors available.", n, na);
162 
163  return(0);
164 }
165 
166 
167 int main(argc,argv)
168 int argc;
169 char *argv[];
170 {
171  char *cp, tfile[256];
172  int cw, ch, bg;
173  int xpos, ypos;
174  char title[80];
175 
177 
178  otfInit();
179 
180  do_etimeInit();
181 
182  sockmode = 0;
183  manualInitials = 1;
184  strcpy(manInitials, "ssk");
185 
186  if(argc >= 2)
187  {
188  if(!strncmp(argv[1], "-sock", 5))
189  {
190  sockmode = 1;
191  }
192  }
193 
194  istty = isatty(0);
195 
196  atexit((void *)exitProc);
197 
198  signal(SIGINT, (__sighandler_t)signalHandler);
199  signal(SIGTERM, (__sighandler_t)signalHandler);
200 
201  strcpy(prgName, "DATASERV");
202 
203  if(sockmode)
204  {
205  cp = getenv("LPSESSION");
206 
207  if(cp)
208  {
209  sprintf(tfile, "LOGDIR=/tmp/%s", cp);
210 
211  putenv(tfile);
212  }
213  else
214  {
215  strcpy(tailFileName, "databrowse");
216  }
217 
218  log_open("dataserv", 4);
219 
221  }
222  else
223  {
224  smart_log_open("dataserv", 3);
225  }
226 
227  setpgid( (pid_t)0, (pid_t)0); /* divorce myself from parents */
228 
229  PID = getpid();
230 
231  cp = getenv("TOPDIR");
232  if(cp)
233  sprintf(datadir,"%s",cp);
234  else
235  sprintf(datadir,"/home/data");
236 
237  cp = getenv("FIXDAT");
238  if(cp)
239  sprintf(fixeddir,"%s",cp);
240  else
241  sprintf(fixeddir,"/home/data4/fixed");
242 
243  cp = getenv("_3DDIR");
244  if(cp)
245  sprintf(_3ddir,"%s",cp);
246  else
247  sprintf(_3ddir,"/home/data1/3d");
248 
249  cp = getenv("DISPLAY");
250  if(cp)
251  sprintf(localHost,"%s",cp);
252 
254 
255  if((server=(struct XGR_ *)calloc(1,sizeof(struct XGR_)))==NULL)
256  {
257  log_msg("error in calloc for main server");
258  return(1);
259  }
260 
261  insque(server, xgr_head.prev);
262 
263  cw = 650;
264  ch = 790;
265  xpos = 10;
266  ypos = 10;
267 
268  strcpy(server->serverName, localHost);
269 
270  if((server->dpy = XOpenDisplay(localHost)) == (Display *)NULL)
271  {
272  log_msg("Unable to open display %s", localHost);
273  return(0);
274  }
275 
276  if(!sockmode)
277  {
278  sock_bind("ANONYMOUS");
279  }
280  else
281  {
282  sock_bind("LINUXPOPS_DATASERV");
283 // log_eventdEnable(1); /* enable loging to the event daemon */
284  }
285 
286  master = sock_connect("LINUXPOPS_MASTER");
287  helper = sock_connect("LINUXPOPS_HELPER");
288  xgraphic = sock_connect("LINUXPOPS_XGRAPHIC");
289  specplot = sock_connect("LINUXPOPS_SPECPLOT");
290  specdata = sock_connect("LINUXPOPS_SPECDATA");
291 
292  set_sock_callback( (int (*)(void))readMail );
293 
294  sock_bufct(sizeof(struct DS_IMAGE_INFO)+256);
295 
296  strcpy(title,"Dataserv");
297  strcpy(mainFrameTitle,"Dataserv");
298 
299  bg = BLACK;
300 
301  createWindows(server, title, cw, ch, xpos, ypos, bg, globalUsPixmap);
302 
303  XSetErrorHandler(myErrorHandler);
304  XSetIOErrorHandler((XIOErrorHandler)myIOErrorHandler);
305 
306  xgr_reSizeProc(server->cur->win, server->cur->canw, server->cur->canh);
307 
308  main_loop();
309 
310  return(0);
311 }
312 
313 
314 int myIOErrorHandler(display, myerr)
315 Display *display;
316 XErrorEvent *myerr;
317 {
318  if(display)
319  {
320  log_msg("Server %s caused IO Trap", DisplayString(display));
321  strcpy(deadServer, DisplayString(display));
322  }
323  else
324  {
325  log_msg("Server: Unknown Server caused IO Trap");
326  strcpy(deadServer, "Unknown Server");
327  }
328  exit(2);
329 }
330 
331 
332 
333 int myErrorHandler(display, myerr)
334 Display *display;
335 XErrorEvent *myerr;
336 {
337  if(display)
338  {
339  log_msg("Server %s caused Xlib Error", DisplayString(display));
340  strcpy(deadServer, DisplayString(display));
341  }
342  else
343  {
344  log_msg("Server: Unknown Server caused Xlib Error");
345  strcpy(deadServer, "Unknown Server");
346  }
347  return(0);
348 }
349 
350 
352 {
353  struct XGR_HEAD *p;
354  struct XGR_ *s;
355 
356  exit(1);
357 
358  for(p=xgr_head.next;p!=&xgr_head;p=p->next)
359  {
360  s = (struct XGR_ *)p;
361  if(s->dpy)
362  {
363  log_msg("Signal: Shuting Down Server %s", DisplayString(s->dpy));
364  XFlush(s->dpy);
365  XCloseDisplay(s->dpy);
366  }
367  }
368 }
369 
370 
371 int exitProc(status)
372 int status;
373 {
374  log_msg("Exiting with status %d", status);
375 
376  /* kill the spec viewer */
377 
378  sockWriteNoBitch = 1;
379  sock_send(specplot, "quit");
380  sock_send(specdata, "quit");
381  sockWriteNoBitch = 0;
382 
383  return(status);
384 }
385 
386 
387 
388 int dummieEventProc(event)
389 XEvent *event;
390 {
391  KeySym keysym;
392  XComposeStatus compose;
393  char buffer[1];
394  int bufsize=1;
395 
396  if(event->type == KeyPress)
397  {
398  XLookupString((XKeyEvent *)event, buffer, bufsize, &keysym, &compose);
399  if(keysym == XK_p && event->xkey.state == ControlMask)
400  {
401  log_msg("Stand-by, Making Copy of Dataserv Window.");
403  log_msg("Copy of Dataserv Window sent to Printer.");
404  }
405  }
406  return(0);
407 }
408 
409 
410 #define WINDOW_PLOT 1
411 #define WINDOW_OTF 2
412 
413 /* Create individual window */
414 
415 struct WINDOW *createWindow(s, title, cw, ch, xpos, ypos, bg, usPixmap, which)
416 struct XGR_ *s;
417 char *title;
418 int cw, ch, xpos, ypos, bg, usPixmap, which;
419 {
420  unsigned long value_mask;
421  XSetWindowAttributes attr;
422  XSizeHints size_hints;
423  struct WINDOW *w;
424  XWMHints wm_hints;
425  XTextProperty *wi, *ic;
426 
427  if((w = (struct WINDOW *)calloc(1, sizeof(struct WINDOW ))) == NULL)
428  {
429  log_msg("error in calloc for main Plot window");
430  exit(1);
431  }
432 
433  insque(w, s->windows.prev);
434 
435  strcpy(w->frameTitle, title);
436  w->canw = cw;
437  w->canh = ch;
438  w->background = bg;
439  w->first = 1;
440  w->win = XCreateSimpleWindow(s->dpy, RootWindow(s->dpy,s->scr_num),
441  xpos, ypos, (unsigned int)w->canw,
442  (unsigned int)w->canh,
443  1, s->colors[WHITE],
444  s->colors[BLACK]);
445  w->usPixmap = usPixmap;
446 
447  w->gc = XCreateGC(s->dpy, RootWindow(s->dpy, s->scr_num), (unsigned long)0, (XGCValues *)NULL);
448 
449  if(w->usPixmap)
450  {
451  if(!(w->pixmap = XCreatePixmap(s->dpy, w->win, (unsigned int)w->canw, (unsigned int)w->canh, s->depth)))
452  {
453  log_msg("%s: Error in create of off screen pixmap\n", prgName);
454  exit(1);
455  }
456 
457  XSetForeground(s->dpy, w->gc, s->colors[BLACK]);
458  XFillRectangle(s->dpy, w->pixmap, w->gc, 0, 0, (unsigned int)cw, (unsigned int)ch);
459  }
460 
461  XSelectInput(s->dpy, w->win, frame_mask | ButtonPressMask | Button1MotionMask);
462 
463  size_hints.flags = PPosition | PSize | PMinSize/* | PAspect*/;
464  size_hints.min_width = cw;
465  size_hints.min_height = ch;
466  size_hints.x = xpos;
467  size_hints.y = ypos;
468 
469  w->invalid = 1;
470 
471  w->icon = XCreateBitmapFromData(s->dpy, w->win, dataserv_bmp_bits, dataserv_bmp_width, dataserv_bmp_height);
472 
473  XSetStandardProperties(s->dpy, w->win, w->frameTitle, (char *)NULL, w->icon, (char **)NULL, 0, &size_hints);
474 
475  wi = NULL;
476  ic = NULL;
477 
478  wm_hints.initial_state = NormalState;
479  wm_hints.input = True;
480  wm_hints.icon_pixmap = 0;
481  wm_hints.flags = StateHint | InputHint | WindowGroupHint;
482  wm_hints.window_group = w->win;
483 
484  XSetWMProperties(s->dpy, w->win, wi, ic, NULL, 0, &size_hints, &wm_hints, NULL);
485 
486 
487  if(DoesBackingStore(XDefaultScreenOfDisplay(s->dpy)))
488  {
489  if(debug)
490  {
491  log_msg("createWindow(): Setting Backing Store for Plot Window");
492  }
493 
494  value_mask = CWBackingStore;
495  attr.backing_store = WhenMapped;
496  XChangeWindowAttributes(s->dpy, w->win, value_mask, &attr);
497  }
498 
499  XMapWindow(s->dpy, w->win);
500  w->mapped = 1;
501 
502  XSetWindowBackground(s->dpy, w->win, s->colors[w->background]);
503  XSetBackground(s->dpy, w->gc, s->colors[w->background]);
504  XClearWindow(s->dpy, w->win);
505 
506  s->cur = w;
507 
508  return(w);
509 }
510 
511 
512 int createWindows(s, title, cw, ch, xpos, ypos, bg, usPixmap)
513 struct XGR_ *s;
514 char *title;
515 int cw, ch, xpos, ypos, bg, usPixmap;
516 {
517  int x, y, w, h;
518  struct WINDOW *win;
519 
520  log_msg("DisplayInfo for %s - %s major %d minor %d release %d",
521  DisplayString(s->dpy), ServerVendor(s->dpy), ProtocolVersion(s->dpy),
522  ProtocolRevision(s->dpy), VendorRelease(s->dpy));
523 
524  s->xfd = XConnectionNumber(s->dpy);
525  s->scr_num = DefaultScreen(s->dpy);
526  s->numFonts = XGR_MAX_FONTS;
527  s->fontNames = findFixedFonts(s->dpy, &s->numFonts);
528  s->windows.prev = s->windows.next = &s->windows;
529  s->depth = XDefaultDepthOfScreen(XDefaultScreenOfDisplay(s->dpy));
530  s->userXimage = NULL;
531 
532  x = 670;
533  y = 28;
534  w = 860;
535  h = 780;
536  /* create OTF gridder window */
537  win = createWindow(s, "OTF Gridder", w, h, x, y, bg, usPixmap, XGR_OTF_WIN);
538 
539  log_msg("OTF Window = %p", win->win);
540  log_msg("OTF Pixmap = %p", win->pixmap);
541 
545 
546  s->otfwin = win;
547  s->cur = s->otfwin;
548 
549  xgr_graphInit(s);
550 
551  xgr_mapUnmapWindow("OTF Gridder", 1);
552 
553  return(0);
554 }
555 
556 
557 
558 
559 int argmatch(s1, s2, atleast)
560 char *s1;
561 char *s2;
562 int atleast;
563 {
564  int l1 = strlen(s1);
565  int l2 = strlen(s2);
566 
567  if(l1 < atleast)
568  return 0;
569 
570  if(l1 > l2)
571  return 0;
572 
573  return(strncmp(s1, s2, l1) == 0);
574 }
575 
576 
577 int usage(progname)
578 char *progname;
579 {
580  fprintf(stderr, "\nUsage of '%s' command line arguments: \n", progname);
581  fprintf(stderr, "-ws x y Set Window size to x y\n");
582  fprintf(stderr, "-anon Set dataserv in command-line mode\n");
583  fprintf(stderr, "-nopixmap Set dataserv in non-pixmap mapping mode\n");
584  fprintf(stderr, "-obs initials Set initials to display; defaults to current observer\n");
585  fprintf(stderr, "-ver n dir Set datafile ver to n, located on disk dir;\n");
586  fprintf(stderr, " defaults to current observers version\n");
587  fprintf(stderr, "-maxcolors [16|32|64|128] Set max colors of image display; default 64\n");
588  fprintf(stderr, "-color [GRAY|PSEUDO|FLAME] Set color mode of image display; default PSEUDO\n");
589  fprintf(stderr, "-usage This message\n");
590  exit(0);
591 }
592 
593 
595 {
596  thisIsaRefresh = 1;
597 
598  strcpy(tempBuf,oldBuf);
599 
600  readMail(tempBuf, strlen(tempBuf));
601 
602  return(0);
603 }
604 
605 
607 int scn;
608 {
609  int i;
610 
611  for(i=0;i<100;i++)
612  {
613  if(scn == scansDone[i])
614  {
615  scanDone = 1;
616  return(0);
617  }
618  }
619  insertScan(scn);
620  scanDone = 0;
621 
622  return(1);
623 }
624 
625 
626 
627 int insertScan(scn)
628 int scn;
629 {
630  scansDoneInx++;
631  if(scansDoneInx > 99)
632  scansDoneInx = 0;
633 
634  scansDone[scansDoneInx] = scn;
635 
636  return(0);
637 }
638 
639 
640 
641 int to_monitor(buf)
642 char *buf;
643 {
644  log_msg("To Monitor: %s", buf);
645 
646  return(0);
647 }
648 
649 
650 int to_rambo(buf)
651 char *buf;
652 {
653  log_msg("To Rambo: %s", buf);
654 
655  return(0);
656 }
657 
658 int to_exec(buf)
659 char *buf;
660 {
661  log_msg("To Exec: %s", buf);
662 
663  return(0);
664 }
665 
667 char *buf;
668 {
669  if(buf)
670  useFixData = atoi(buf);
671  else
672  useFixData = 0;
673 
674  log_msg("Setting use of fixed data to %d", useFixData);
675 
676  return(0);
677 }
678 
679 
681 {
682  showDisplay();
684 
685  return(0);
686 }
687 
688 
689 
691 {
692  int i, modeid, be, foundOne=0;
693  extern float ifNumber;
694  char *cp;
695  extern float ifnums[];
696 
697  bzero((char*)&found_scans, sizeof(found_scans));
698 
699  cp = filename;
700  for(i=0;i<4;i++)
701  {
702  ifNumber = ifnums[i];
703  if(!peekScan(scanNum + ifNumber, cp, &be, &modeid, &onhead01))
704  {
705  found_scans[DBEA+i] = 1;
706  foundOne++;
707  }
708  }
709 
710  cp = filename;
711  for(i=0;i<8;i++)
712  {
713  ifNumber = ifnums[i];
714  if(!peekScan(scanNum + ifNumber, cp, &be, &modeid, &onhead01))
715  {
716  found_scans[FFBA+i] = 1;
717  foundOne++;
718  }
719  }
720 
721  cp = filename;
722  for(i=0;i<4;i++)
723  {
724  ifNumber = ifnums[i];
725  if(!peekScan(scanNum + ifNumber, cp, &be, &modeid, &onhead01))
726  {
727  found_scans[AOSA+i] = 1;
728  foundOne++;
729  }
730  }
731 
732  for(i=4;i<5;i++)
733  {
734  ifNumber = ifnums[i];
735  if(!peekScan(scanNum + ifNumber, cp, &be, &modeid, &onhead01))
736  {
737  found_scans[AOSC] = 1;
738  foundOne++;
739  }
740  }
741 
742  cp = filename;
743  for(i=0;i<4;i++)
744  {
745  ifNumber = ifnums[i];
746  if(!peekScan(scanNum + ifNumber, cp, &be, &modeid, &onhead01))
747  {
748  found_scans[CTSA+i] = 1;
749  foundOne++;
750  }
751  }
752 
753  if(!foundOne)
754  {
755  log_msg("No scan found for scan %.0f", scanNum);
756 
757  return(0);
758  }
759 
760  for(i=0;i<20;i++) /* set the ifNumber to the first scan found */
761  {
762  if(found_scans[i])
763  {
764  ifNumber = ifnums[i];
765  break;
766  }
767  }
768 
769 // log_msg("Found %d scan(s), ifnum %.2f, BE = %d, modeid = %d",
770 // foundOne, ifNumber, be, modeid);
771 
772  wasOn = 1;
773  switch(be)
774  {
775  case SPECTRAL_BE:
776  switch(modeid)
777  {
778  case TP_OFF:
779  case TPM_OFF:
780 // do_linetotalmapoff();
781  wasOn = 0;
782  break;
783  case OTF:
784  do_lineotf();
785  break;
786  default:
787 // do_linedefault();
788  break;
789  }
790  break;
791 
792  default:
793  return(0);
794  break;
795  }
796 
797 // xgr_pixmapToWindow("OTF Gridder");
798  xgr_mapUnmapWindow("OTF Gridder", 1);
799 
800 // xgr_pixmapToWindow(mainFrameTitle);
801 // xgr_mapUnmapWindow(mainFrameTitle, 1);
802 
803  return(0);
804 }
805 
806 
807 
808 #ifdef TOMMIE
809 int matherr(x)
810 register struct exception *x;
811 {
812  log_msg("Math Exception");
813  switch(x->type)
814  {
815  case DOMAIN: /* change sqrt to return sqrt(-arg1), not NaN */
816  if(!strcmp(x->name, "sqrt"))
817  {
818  log_msg("Domain exception in %s", x->name);
819  log_msg("Filename scanNum %d", (int)scanNum);
820  log_msg("Command %s", oldBuf);
821  x->retval = sqrt(-x->arg1);
822  return (0); /* print message and set errno */
823  } /* fall through */
824  case SING:/* all other domain or sing exceptions, print message and abort */
825  log_msg("domain exception in %s", x->name);
826  log_msg("Filename scanNum %d", (int)scanNum);
827  log_msg("Command %s", oldBuf);
828  abort( );
829  break;
830  case OVERFLOW:
831  log_msg("Overflow exception in %s(%f)", x->name, x->arg1);
832  log_msg("Filename scanNum %d", (int)scanNum);
833  log_msg("Command %s", oldBuf);
834  break;
835  case UNDERFLOW:
836  log_msg("Underflow exception in %s(%f)", x->name, x->arg1);
837  log_msg("Filename scanNum %d", (int)scanNum);
838  log_msg("Command %s", oldBuf);
839  break;
840  }
841  return(0);
842 }
843 #endif
844 
845 
846 
848 {
849  struct XGR_HEAD *p, *p2;
850  struct XGR_ *s, *f;
851  int count, n, xfd;
852  int xfds[256];
853 
854  while (1)
855  {
856  count=0;
857 
858  for(p=xgr_head.next;p!=&xgr_head;p=p->next)
859  {
860  s = (struct XGR_ *)p;
861 
862  if(XPending(s->dpy))
863  {
864  processEvent(s);
865  count++;
866  }
867  }
868 
869  if(!count)
870  {
871  n=0;
872 
873  for(p2=xgr_head.next;p2!=&xgr_head;p2=p2->next)
874  {
875  f = (struct XGR_ *)p2;
876  xfds[n] = f->xfd;
877  n++;
878  }
879 
880  xfd = block_for_event(xfds, n);
881 
882  for(p2=xgr_head.next;p2!=&xgr_head;p2=p2->next)
883  {
884  f = (struct XGR_ *)p2;
885 
886  if(xfd == f->xfd)
887  {
888  if(XPending(f->dpy) == 0)
889  {
890  if(f->dpy == server->dpy) /* is it the main one */
891  exit(0);
892 
893  log_msg("Removeing %s in destoryFunc", DisplayString(f->dpy));
894  remque(f);
895  xgr_freeWindows(f);
896 
897  break;
898  }
899  }
900  }
901  }
902  }
903 
904  return(0);
905 }
906 
907 
909 struct XGR_ *s;
910 {
911  XEvent event;
912 /*
913  struct WINDOW *xgr_getWin();
914  */
915 
916  while(XPending(s->dpy))
917  {
918  XNextEvent(s->dpy, &event);
919 
920  switch( event.type )
921  {
922  case Expose:
923  /* Filter down to the last Expose event */
924  while (XCheckTypedWindowEvent(s->dpy, event.xany.window, Expose, &event))
925  {
926  ;
927  }
928 
929  xgr_rePaintProc(event.xexpose.window);
930 
931  break;
932 
933  case ConfigureNotify:
934 
935  /* Filter down to the last ConfigureNotify event */
936  while (XCheckTypedWindowEvent(s->dpy, event.xany.window, ConfigureNotify, &event))
937  {
938  ;
939  }
940 
941  if(event.xconfigure.window && !event.xconfigure.send_event)
942  {
943  xgr_reSizeProc(event.xconfigure.window, event.xconfigure.width, event.xconfigure.height);
944  }
945 
946  break;
947 
948  case ButtonPress:
949  xgr_eventProc(&event, event.xbutton.window, ButtonPress);
950  break;
951 
952  case MotionNotify:
953  xgr_eventProc(&event, event.xbutton.window, MotionNotify);
954  break;
955 
956  case KeyPress:
957  xgr_eventProc(&event, event.xbutton.window, KeyPress);
958  break;
959 
960  case UnmapNotify:
961  break;
962 
963  case DestroyNotify:
964  log_msg("Destroy");
965 
966  exit((int)3);
967 
968  break;
969 
970  default:
971  break;
972  }
973  }
974 
975  return(0);
976 }
977 
978 
979 
980 
981 static int block_for_event(xfd, n)
982 int *xfd;
983 int n;
984 {
985  int len, i;
986  static int sel = 1;
987 
988  if(istty && !sockmode && sel == 0)
989  {
990  fprintf(stderr, "dataserv> ");
991  fflush(stderr);
992  }
993 
994  if(sockmode == 0)
995  {
996  sel = sock_sel(inMsg, &len, xfd, n, 0, 1);
997  }
998  else
999  if(sockmode == 1)
1000  {
1001  sel = sock_sel(inMsg, &len, xfd, n, 10, 0);
1002  }
1003 
1004  if( sel == -1 )
1005  { /* timeout */
1006  return(sel);
1007  }
1008 
1009  for(i=0;i<n;i++)
1010  {
1011  if(sel == xfd[i])
1012  {
1013  return(sel);
1014  }
1015  }
1016 
1017  if(sock_callback)
1018  {
1019  (*sock_callback)(inMsg, len);
1020  }
1021 
1022  return(sel);
1023 }
1024 
1025 
1027 int (*call)();
1028 {
1029  sock_callback = call;
1030 
1031  return(0);
1032 }
1033 
1034 
1035 
1037 int v;
1038 {
1039  struct XGR_HEAD *p;
1040  struct XGR_ *s;
1041 
1042  for(p=xgr_head.next;p!=&xgr_head;p=p->next)
1043  {
1044  s = (struct XGR_ *)p;
1045 
1046  XSynchronize(s->dpy, v);
1047  }
1048 
1049  return(0);
1050 }
1051 
1052 
1054 char *buf;
1055 {
1056  if(buf)
1057  printDataLines = atoi(buf);
1058 
1059  if(printDataLines > 100)
1060  printDataLines = 0;
1061 
1062  return(0);
1063 }
1064 
1066 float *ydata;
1067 int dl;
1068 float scan;
1069 {
1070  int i;
1071 
1072  if(ydata == NULL)
1073  return(1);
1074  /* redetermine min and max */
1075  datamax = -9999999999.9;
1076  datamin = 9999999999.0;
1077 
1078  for(i=0;i<dl;i++)
1079  {
1080  if(ydata[i] > datamax)
1081  datamax = ydata[i];
1082  if(ydata[i] < datamin)
1083  datamin = ydata[i];
1084  }
1085 
1086  if(fabs(datamax - datamin) < DATASPREAD)
1087  {
1088  log_msg("determine_min_max(): Scan #%7.2f is all %.4f", scan, datamin);
1089 
1090  datamin -= 1.0;
1091  datamax += 1.0;
1092 
1093  return(1);
1094  }
1095  return(0);
1096 }
1097 
1098 
1099 
1100 int do_filename(buf)
1101 char *buf;
1102 {
1103  int n, v;
1104 
1105  if(buf)
1106  {
1107  strcmprs(buf);
1108 
1109  strcpy(filename, buf);
1110 
1111  log_msg("do_filename() filename set to %s", filename);
1112  }
1113  else
1114  {
1115  log_msg("do_filename(): Missing arg for filename");
1116 
1117  return(1);
1118  }
1119 
1120  n = strlen(filename);
1121 
1122  v = atoi(filename+(n-3));
1123 
1124  if(v > 0 && v < 999)
1125  {
1126  log_msg("Setting internal version to: %d", v);
1127  version = v;
1128  }
1129  else
1130  {
1131  log_msg("Problem parseing version number from %s", filename);
1132  }
1133 
1134  return(0);
1135 }
1136 
1137 
1139 char *buf;
1140 {
1141  if(buf)
1142  {
1143  strcmprs(buf);
1144 
1145  strcpy(gfilename, buf);
1146 
1147  log_msg("do_gfilename() gfilename set to %s", gfilename);
1148  }
1149  else
1150  {
1151  log_msg("do_gfilename(): Missing arg for gfilename");
1152 
1153  return(1);
1154  }
1155 
1156  return(0);
1157 }
1158 
1159 
1160 /* ds_DELAY() -- Custom delay routine that uses select to time out. delays in
1161  * units of 22 - 44 usec can be had. returns 0 for a good delay.
1162  * any key board hit will stop delay and return true.
1163  *
1164  * Checks stdin if we are using interactive mode;
1165  * Checks sockets if in sockmode.
1166  */
1167 int ds_delay(dc)
1168 double dc;
1169 {
1170  int i, t, sel, len;
1171  char message[4096];
1172  struct timeval del;
1173  fd_set a;
1174 
1175  if(!sockmode)
1176  {
1177  del.tv_sec = (int)dc;
1178  del.tv_usec = (dc - (int)dc) * 1e6;
1179 
1180  FD_ZERO(&a);
1181  FD_SET(0, &a);
1182 
1183  if(select(1, &a, NULL, NULL, &del))
1184  {
1185  /* ioctl(0,TCFLSH,0); clear out keyborad buffer */
1186  return(1);
1187  }
1188 
1189  return(0);
1190  }
1191  else /* Can only sleep in whole units of seconds */
1192  {
1193  t = (int)(dc * 10.0); /* convert to units of 1/10th sec */
1194 
1195  if(t) /* Actual delay */
1196  {
1197  for(i=0;i<t;i++)
1198  {
1199  if((sel = sock_sel(message, &len, NULL, 0, -1, 1)) > 0) /* Poll for a message */
1200  {
1201  sel = sock_sel(message, &len, NULL, 0, 1, 1); /* Poll for a message */
1202 
1203  strcmprs(message);
1204 
1205  if(!strncmp(message, "done", 4))
1206  {
1207  return(1);
1208  }
1209  }
1210 
1211  usleep(100000);
1212  }
1213 
1214  return(0);
1215  }
1216  else /* t == 0.0, so just poll */
1217  {
1218  if((sel = sock_sel(message, &len, NULL, 0, -1, 0)) > 0) /* Poll for a message */
1219  {
1220  sel = sock_sel(message, &len, NULL, 0, 1, 1); /* Poll for a message */
1221 
1222  strcmprs(message);
1223 
1224  if(!strncmp(message, "done", 4))
1225  {
1226  return(1);
1227  }
1228  }
1229  else
1230  {
1231  return(0);
1232  }
1233  }
1234  }
1235 
1236  return(0);
1237 }
struct SOCK * xgraphic
Definition: linuxpops.c:75
char tailFileName[80]
Definition: dataserv.c:52
struct WINDOW_HEAD * prev
Definition: xgr.h:44
float * ondata10
Definition: dataserv.c:77
int to_rambo(char *buf)
Definition: dataserv.c:650
#define SRCLEN
Definition: defines.h:9
int main(void)
Definition: gsl_try_2.c:176
int pthread_setname_np(pthread_t thread, const char *name)
float * offdata07
Definition: dataserv.c:86
float * offdata11
Definition: dataserv.c:86
int first
Definition: xgr.h:66
int initialsChanged
Definition: dataserv.c:38
#define LOG_TO_LOGGER
Definition: loglib.h:3
char saveBuf[16384]
Definition: dataserv.c:52
int PID
Definition: dataserv.c:114
char * strcmprs(char *str)
float * offdata03
Definition: dataserv.c:86
int do_etimeInit(void)
Definition: etime.c:149
char tfile[256]
Definition: specplot.c:34
int lockScale
Definition: xgr.c:31
#define OTF
Definition: observing_par.h:63
Pixmap icon
Definition: xgr.h:55
int sockmode
Definition: dataserv.c:37
float * gainsdata08
Definition: dataserv.c:95
int myErrorHandler(Display *display, XErrorEvent *myerr)
Definition: dataserv.c:333
float * ondata07
Definition: dataserv.c:77
char serverName[80]
Definition: xgr.h:78
int to_monitor(char *buf)
Definition: dataserv.c:641
float * ondata11
Definition: dataserv.c:77
#define TPM_OFF
Definition: observing_par.h:38
int scan
int datalen
Definition: dataserv.c:33
float * ondata15
Definition: dataserv.c:77
char localHost[80]
Definition: dataserv.c:52
char source[SRCLEN+1]
Definition: dataserv.c:52
int freeDataPointers(void)
Definition: obsmodes.c:330
int determine_min_max(float *ydata, int dl, double scan)
int do_lineotf(void)
Definition: obsmodes.c:163
struct WINDOW_HEAD windows
Definition: xgr.h:49
#define AOSC
Definition: spectra.h:21
char filename[256]
Definition: dataserv.c:49
int verifyScanDone(int scn)
Definition: dataserv.c:606
Definition: header.h:13
int log_eventdEnable(int enable)
struct HEADER onhead01
Definition: dataserv.c:67
float * ondata13
Definition: dataserv.c:77
int manualInitials
Definition: dataserv.c:34
float * offdata04
Definition: dataserv.c:86
struct XGR_HEAD * next
Definition: xgr.h:36
struct XGR_HEAD * prev
Definition: xgr.h:37
float * offdata14
Definition: dataserv.c:86
struct SOCK * master
Definition: xgraphic.c:84
float * ondata01
Definition: dataserv.c:77
char tempBuf[16384]
Definition: dataserv.c:52
int xgr_freeWindows(struct XGR_ *s)
Definition: xgr.c:348
int mapped
Definition: xgr.h:67
#define WHITE
Definition: colors.h:11
int xfd
Definition: xgr.h:80
int version
Definition: dataserv.c:41
int to_exec(char *buf)
Definition: dataserv.c:658
#define remque(e)
Definition: xgr.c:60
#define insque(e, p)
Definition: xgr.c:51
char deadServer[80]
Definition: dataserv.c:52
int otfGridDisplaySpec(XEvent *event, unsigned int mask)
Definition: otf.c:3553
int scanDone
Definition: dataserv.c:63
float * gainsdata01
Definition: dataserv.c:95
int sockWriteNoBitch
long frame_mask
Definition: dataserv.c:117
float * ondata02
Definition: dataserv.c:77
float * gainsdata06
Definition: dataserv.c:95
int mainFrameRepaint(void)
Definition: dataserv.c:594
int useFixData
Definition: dataserv.c:40
int do_diagHarCopyServ(void)
Definition: mailparse.c:604
float * offdata08
Definition: dataserv.c:86
float * gainsdata07
Definition: dataserv.c:95
int do_gfilename(char *buf)
Definition: dataserv.c:1138
char inMsg[16384]
Definition: dataserv.c:29
#define XGR_MAX_FONTS
Definition: xgr.h:33
int debug
Definition: mailparse.c:29
char oldBuf[16384]
Definition: dataserv.c:52
float * offdata13
Definition: dataserv.c:86
float * ondata06
Definition: dataserv.c:77
int getNProcs(void)
Definition: dataserv.c:153
int doOtfGridRePaint(void)
Definition: otf.c:1104
int usPixmap
Definition: xgr.h:53
#define DATASPREAD
Definition: dataserv.c:26
int scansDone[100]
Definition: dataserv.c:61
Display * dpy
Definition: xgr.h:79
float * ondata08
Definition: dataserv.c:77
int(* resize_proc)()
Definition: xgr.h:69
float * ondata09
Definition: dataserv.c:77
int dummieEventProc(XEvent *event)
Definition: dataserv.c:388
int(* repaint_proc)()
Definition: xgr.h:68
float * offdata06
Definition: dataserv.c:86
int sock_bufct(int bufct)
int log_msg(const char *fmt,...)
int found_scans[MAX_BACKENDS *MAX_PARTS]
Definition: dataserv.c:58
float * gainsdata16
Definition: dataserv.c:95
#define AOSA
Definition: spectra.h:19
struct SOCK * helper
Definition: linuxpops.c:75
char initials[256]
Definition: dataserv.c:52
struct SOCK * specdata
Definition: dataserv.c:31
Definition: xgr.h:35
char gfilename[256]
Definition: dataserv.c:50
Definition: sock.h:30
float * gainsdata04
Definition: dataserv.c:95
int doColor
Definition: xgr.c:13
double datamin
Definition: dataserv.c:44
int smart_log_open(char *name, int offset)
struct HEADER offhead01
Definition: dataserv.c:84
float * ondata04
Definition: dataserv.c:77
int sock_send(struct SOCK *s, char *message)
float * gainsdata05
Definition: dataserv.c:95
char datadir[128]
Definition: dataserv.c:52
float * offdata16
Definition: dataserv.c:86
float offScanNum
int(* sock_callback)()
Definition: dataserv.c:28
char fixeddir[128]
Definition: dataserv.c:52
#define XGR_OTF_WIN
Definition: xgr.h:20
float * ondata05
Definition: dataserv.c:77
int doNotSaveConfig
Definition: dataserv.c:105
#define CTSA
Definition: spectra.h:24
int globalUsPixmap
Definition: dataserv.c:120
int manualVersion
Definition: dataserv.c:35
int numOfCPUs
Definition: dataserv.c:42
int otfInit(int init)
Definition: otf.c:423
float * offhead10
Definition: dataserv.c:86
char errBuf[512]
Definition: dataserv.c:52
int exitProc(int status)
Definition: dataserv.c:371
float * gainsdata13
Definition: dataserv.c:95
int scansDoneInx
Definition: dataserv.c:62
float * ondata16
Definition: dataserv.c:77
Definition: xgr.h:48
int strcmp()
struct WINDOW * cur
Definition: xgr.h:95
Definition: xgr.h:75
float * offdata09
Definition: dataserv.c:86
int do_filename(char *buf)
Definition: dataserv.c:1100
int printDataLines
Definition: dataserv.c:39
int startNewResultFile
float * offdata05
Definition: dataserv.c:86
int doOtfGridReSize(void)
Definition: otf.c:1186
int do_printData(char *buf)
Definition: dataserv.c:1053
float * offdata15
Definition: dataserv.c:86
char _3ddir[128]
Definition: dataserv.c:52
float * offdata12
Definition: dataserv.c:86
int xgr_graphInit(struct XGR_ *s)
Definition: xgr.c:71
char title[256]
Definition: specplot.c:34
int xgr_reSizeProc(Window window, int width, int height)
Definition: xgr.c:698
int sock_sel(char *message, int *l, int *p, int n, int tim, int rd_in)
char mainFrameTitle[80]
Definition: dataserv.c:52
float * offdata01
Definition: dataserv.c:86
#define DBEA
Definition: spectra.h:29
int xgr_eventProc(XEvent *event, Window window, unsigned int mask)
Definition: xgr.c:762
float ifNumber
Definition: obsmodes.c:131
int main_loop(void)
Definition: dataserv.c:847
float * offdata02
Definition: dataserv.c:86
int usage(char *name)
Definition: linuxpops.c:1473
int do_toggleFixData(char *buf)
Definition: dataserv.c:666
int fitFail
Definition: dataserv.c:104
Window win
Definition: xgr.h:52
struct HEADER gainshead01
Definition: dataserv.c:93
char manVersion[80]
Definition: dataserv.c:52
int insertScan(int scn)
Definition: dataserv.c:627
int _Xdebug
int argmatch(char *s1, char *s2, int atleast)
Definition: dataserv.c:559
float * ondata12
Definition: dataserv.c:77
double datamax
Definition: dataserv.c:44
int synchronize(int v)
Definition: dataserv.c:1036
int xfd
Definition: linuxpops.c:83
char frameTitle[80]
Definition: xgr.h:50
int wasOn
Definition: spectra.c:35
#define MAX_PARTS
Definition: backends.h:15
#define MAX_BACKENDS
Definition: backends.h:14
int set_sock_callback(int(*call)(void))
Pixmap pixmap
Definition: xgr.h:54
float * gainsdata15
Definition: dataserv.c:95
float * gainsdata03
Definition: dataserv.c:95
float * gainsdata10
Definition: dataserv.c:95
int thisIsaRefresh
Definition: dataserv.c:36
float scanNum
Definition: dataserv.c:46
struct XGR_HEAD xgr_head
Definition: xgr.c:36
int background
Definition: xgr.h:60
GC gc
Definition: xgr.h:56
int readMail(char *buf, int len)
Definition: mailparse.c:223
#define TP_OFF
Definition: observing_par.h:32
int peekScan(double scan, char *filename, int *be, int *modeid, struct HEADER *head)
float * ondata03
Definition: dataserv.c:77
float * gainsdata12
Definition: dataserv.c:95
#define BLACK
Definition: colors.h:4
float * gainsdata14
Definition: dataserv.c:95
struct BOUND * sock_bind(char *mbname)
char prgName[80]
Definition: dataserv.c:52
int myIOErrorHandler(Display *display, XErrorEvent *myerr)
Definition: dataserv.c:314
struct SOCK * sock_connect(char *mbname)
int canw
Definition: xgr.h:57
float ifnums[]
Definition: obsmodes.c:124
struct SOCK * specplot
Definition: dataserv.c:31
int max_gray_scale
Definition: xgr.c:66
int setCactusEnvironment(void)
float * ondata14
Definition: dataserv.c:77
char ** findFixedFonts(Display *dpy, int *num)
Definition: xgr.c:2351
int(* event_proc)()
Definition: xgr.h:70
int invalid
Definition: xgr.h:65
int to_xgraphic(char *buf)
Definition: dataserv.c:139
float ydata[MAX_ATM_ELEMENTS]
Definition: atm.c:91
int showDisplay(void)
Definition: dataserv.c:690
struct WINDOW * createWindow(struct XGR_ *s, char *title, int cw, int ch, int xpos, int ypos, int bg, int usPixmap, int which)
Definition: dataserv.c:415
int ds_delay(double dc)
Definition: dataserv.c:1167
int xgr_mapUnmapWindow(char *name, int map)
Definition: xgr.c:568
void signalHandler(void)
Definition: dataserv.c:351
float * gainsdata02
Definition: dataserv.c:95
int newMaxGrayScale
Definition: xgr.c:67
int show_display(void)
Definition: dataserv.c:680
#define FFBA
Definition: spectra.h:9
int to_helper(char *buf)
Definition: dataserv.c:125
int xgr_rePaintProc(Window window)
Definition: xgr.c:794
int log_open(char *name, int how)
int istty
Definition: dataserv.c:119
float * gainsdata11
Definition: dataserv.c:95
float * gainsdata09
Definition: dataserv.c:95
char manInitials[80]
Definition: dataserv.c:52
int createWindows(struct XGR_ *s, char *title, int cw, int ch, int xpos, int ypos, int bg, int usPixmap)
Definition: dataserv.c:512
int canh
Definition: xgr.h:57
struct XGR_ * server
Definition: dataserv.c:112
#define SPECTRAL_BE
Definition: defines.h:17
int processEvent(struct XGR_ *s)
Definition: dataserv.c:908