4 #include <sys/sysinfo.h>
21 #include "dataserv.bmp"
26 #define DATASPREAD 0.000001
65 static int block_for_event();
117 long frame_mask = KeyPressMask | ExposureMask | StructureNotifyMask;
130 log_msg(
"To HELPER: '%s'", buf);
144 log_msg(
"To XGRAPHIC: %s", buf);
157 n = get_nprocs_conf();
161 log_msg(
"%d processors configured, %d processors available.", n, na);
171 char *cp,
tfile[256];
188 if(!strncmp(argv[1],
"-sock", 5))
199 signal(SIGTERM, (__sighandler_t)signalHandler);
205 cp = getenv(
"LPSESSION");
209 sprintf(tfile,
"LOGDIR=/tmp/%s", cp);
227 setpgid( (pid_t)0, (pid_t)0);
231 cp = getenv(
"TOPDIR");
237 cp = getenv(
"FIXDAT");
241 sprintf(
fixeddir,
"/home/data4/fixed");
243 cp = getenv(
"_3DDIR");
247 sprintf(
_3ddir,
"/home/data1/3d");
249 cp = getenv(
"DISPLAY");
255 if((server=(
struct XGR_ *)calloc(1,
sizeof(
struct XGR_)))==NULL)
257 log_msg(
"error in calloc for main server");
270 if((server->
dpy = XOpenDisplay(
localHost)) == (Display *)NULL)
296 strcpy(title,
"Dataserv");
320 log_msg(
"Server %s caused IO Trap", DisplayString(display));
325 log_msg(
"Server: Unknown Server caused IO Trap");
339 log_msg(
"Server %s caused Xlib Error", DisplayString(display));
344 log_msg(
"Server: Unknown Server caused Xlib Error");
360 s = (
struct XGR_ *)p;
363 log_msg(
"Signal: Shuting Down Server %s", DisplayString(s->
dpy));
365 XCloseDisplay(s->
dpy);
374 log_msg(
"Exiting with status %d", status);
392 XComposeStatus compose;
396 if(event->type == KeyPress)
398 XLookupString((XKeyEvent *)event, buffer, bufsize, &keysym, &compose);
399 if(keysym == XK_p && event->xkey.state == ControlMask)
401 log_msg(
"Stand-by, Making Copy of Dataserv Window.");
403 log_msg(
"Copy of Dataserv Window sent to Printer.");
410 #define WINDOW_PLOT 1
418 int cw, ch, xpos, ypos, bg,
usPixmap, which;
420 unsigned long value_mask;
421 XSetWindowAttributes attr;
422 XSizeHints size_hints;
425 XTextProperty *wi, *ic;
427 if((w = (
struct WINDOW *)calloc(1,
sizeof(
struct WINDOW ))) == NULL)
429 log_msg(
"error in calloc for main Plot window");
440 w->
win = XCreateSimpleWindow(s->dpy, RootWindow(s->dpy,s->scr_num),
441 xpos, ypos, (
unsigned int)w->
canw,
442 (
unsigned int)w->
canh,
447 w->
gc = XCreateGC(s->dpy, RootWindow(s->dpy, s->scr_num), (
unsigned long)0, (XGCValues *)NULL);
451 if(!(w->
pixmap = XCreatePixmap(s->dpy, w->
win, (
unsigned int)w->
canw, (
unsigned int)w->
canh, s->depth)))
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);
461 XSelectInput(s->dpy, w->
win,
frame_mask | ButtonPressMask | Button1MotionMask);
463 size_hints.flags = PPosition | PSize | PMinSize;
464 size_hints.min_width = cw;
465 size_hints.min_height = ch;
471 w->
icon = XCreateBitmapFromData(s->dpy, w->
win, dataserv_bmp_bits, dataserv_bmp_width, dataserv_bmp_height);
473 XSetStandardProperties(s->dpy, w->
win, w->
frameTitle, (
char *)NULL, w->
icon, (
char **)NULL, 0, &size_hints);
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;
484 XSetWMProperties(s->dpy, w->
win, wi, ic, NULL, 0, &size_hints, &wm_hints, NULL);
487 if(DoesBackingStore(XDefaultScreenOfDisplay(s->dpy)))
491 log_msg(
"createWindow(): Setting Backing Store for Plot Window");
494 value_mask = CWBackingStore;
495 attr.backing_store = WhenMapped;
496 XChangeWindowAttributes(s->dpy, w->
win, value_mask, &attr);
499 XMapWindow(s->dpy, w->
win);
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);
515 int cw, ch, xpos, ypos, bg,
usPixmap;
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));
524 s->xfd = XConnectionNumber(s->dpy);
525 s->scr_num = DefaultScreen(s->dpy);
528 s->windows.prev = s->windows.next = &s->windows;
529 s->depth = XDefaultDepthOfScreen(XDefaultScreenOfDisplay(s->dpy));
530 s->userXimage = NULL;
573 return(strncmp(s1, s2, l1) == 0);
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");
644 log_msg(
"To Monitor: %s", buf);
692 int i, modeid, be, foundOne=0;
702 ifNumber = ifnums[i];
713 ifNumber = ifnums[i];
724 ifNumber = ifnums[i];
734 ifNumber = ifnums[i];
745 ifNumber = ifnums[i];
764 ifNumber = ifnums[i];
810 register struct exception *x;
816 if(!
strcmp(x->name,
"sqrt"))
818 log_msg(
"Domain exception in %s", x->name);
821 x->retval = sqrt(-x->arg1);
825 log_msg(
"domain exception in %s", x->name);
831 log_msg(
"Overflow exception in %s(%f)", x->name, x->arg1);
836 log_msg(
"Underflow exception in %s(%f)", x->name, x->arg1);
860 s = (
struct XGR_ *)p;
875 f = (
struct XGR_ *)p2;
880 xfd = block_for_event(xfds, n);
884 f = (
struct XGR_ *)p2;
888 if(XPending(f->
dpy) == 0)
893 log_msg(
"Removeing %s in destoryFunc", DisplayString(f->
dpy));
916 while(XPending(s->dpy))
918 XNextEvent(s->dpy, &event);
924 while (XCheckTypedWindowEvent(s->dpy, event.xany.window, Expose, &event))
933 case ConfigureNotify:
936 while (XCheckTypedWindowEvent(s->dpy, event.xany.window, ConfigureNotify, &event))
941 if(event.xconfigure.window && !event.xconfigure.send_event)
943 xgr_reSizeProc(event.xconfigure.window, event.xconfigure.width, event.xconfigure.height);
981 static int block_for_event(
xfd, n)
990 fprintf(stderr,
"dataserv> ");
1019 (*sock_callback)(
inMsg, len);
1044 s = (
struct XGR_ *)p;
1046 XSynchronize(s->
dpy, v);
1088 log_msg(
"determine_min_max(): Scan #%7.2f is all %.4f", scan,
datamin);
1115 log_msg(
"do_filename(): Missing arg for filename");
1124 if(v > 0 && v < 999)
1126 log_msg(
"Setting internal version to: %d", v);
1151 log_msg(
"do_gfilename(): Missing arg for gfilename");
1177 del.tv_sec = (int)dc;
1178 del.tv_usec = (dc - (int)dc) * 1e6;
1183 if(select(1, &a, NULL, NULL, &del))
1193 t = (int)(dc * 10.0);
1199 if((sel =
sock_sel(message, &len, NULL, 0, -1, 1)) > 0)
1201 sel =
sock_sel(message, &len, NULL, 0, 1, 1);
1205 if(!strncmp(message,
"done", 4))
1218 if((sel =
sock_sel(message, &len, NULL, 0, -1, 0)) > 0)
1220 sel =
sock_sel(message, &len, NULL, 0, 1, 1);
1224 if(!strncmp(message,
"done", 4))
struct WINDOW_HEAD * prev
int pthread_setname_np(pthread_t thread, const char *name)
char * strcmprs(char *str)
int myErrorHandler(Display *display, XErrorEvent *myerr)
int to_monitor(char *buf)
int freeDataPointers(void)
int determine_min_max(float *ydata, int dl, double scan)
struct WINDOW_HEAD windows
int verifyScanDone(int scn)
int log_eventdEnable(int enable)
int xgr_freeWindows(struct XGR_ *s)
int otfGridDisplaySpec(XEvent *event, unsigned int mask)
int mainFrameRepaint(void)
int do_diagHarCopyServ(void)
int do_gfilename(char *buf)
int doOtfGridRePaint(void)
int dummieEventProc(XEvent *event)
int sock_bufct(int bufct)
int log_msg(const char *fmt,...)
int found_scans[MAX_BACKENDS *MAX_PARTS]
int smart_log_open(char *name, int offset)
int sock_send(struct SOCK *s, char *message)
int do_filename(char *buf)
int doOtfGridReSize(void)
int do_printData(char *buf)
int xgr_graphInit(struct XGR_ *s)
int xgr_reSizeProc(Window window, int width, int height)
int sock_sel(char *message, int *l, int *p, int n, int tim, int rd_in)
int xgr_eventProc(XEvent *event, Window window, unsigned int mask)
int do_toggleFixData(char *buf)
struct HEADER gainshead01
int argmatch(char *s1, char *s2, int atleast)
int set_sock_callback(int(*call)(void))
int readMail(char *buf, int len)
int peekScan(double scan, char *filename, int *be, int *modeid, struct HEADER *head)
struct BOUND * sock_bind(char *mbname)
int myIOErrorHandler(Display *display, XErrorEvent *myerr)
struct SOCK * sock_connect(char *mbname)
int setCactusEnvironment(void)
char ** findFixedFonts(Display *dpy, int *num)
int to_xgraphic(char *buf)
float ydata[MAX_ATM_ELEMENTS]
struct WINDOW * createWindow(struct XGR_ *s, char *title, int cw, int ch, int xpos, int ypos, int bg, int usPixmap, int which)
int xgr_mapUnmapWindow(char *name, int map)
int xgr_rePaintProc(Window window)
int log_open(char *name, int how)
int createWindows(struct XGR_ *s, char *title, int cw, int ch, int xpos, int ypos, int bg, int usPixmap)
int processEvent(struct XGR_ *s)