This is x11test.c in view mode; [Download] [Up]
#include <X11/Xlib.h> #define __TYPES #include <math.h> #include <stdlib.h> #include <stdio.h> #include "hippo.h" static int width=600, height=600; static void doHandleEvents(); int main() { ntuple *nt_list; display d_list[9]; FILE *outfile; int nnt,i; /* * read in example ntuple */ if (h_read("example.hippo",d_list,&nt_list) != 0) { fprintf(stderr,"Error reading file example.hippo\n"); exit(1); } /* * check a few things */ for (nnt=0; nt_list[nnt] != NULL; nnt++); if (nnt != 1) { fprintf(stderr,"There are %d ntuples in the file\n",nnt); fprintf(stderr," There should only be 1!\n"); exit(1); } /* * create 9 displays */ if ((d_list[0] = h_newDisp(HISTOGRAM)) == NULL) { fprintf(stderr,"Error creating display\n"); exit(1); } if ((d_list[1] = h_newDisp(HISTOGRAM)) == NULL) { fprintf(stderr,"Error creating display\n"); exit(1); } if ((d_list[2] = h_newDisp(HISTOGRAM)) == NULL) { fprintf(stderr,"Error creating display\n"); exit(1); } if ((d_list[3] = h_newDisp(HISTOGRAM)) == NULL) { fprintf(stderr,"Error creating display\n"); exit(1); } if ((d_list[4] = h_newDisp(HISTOGRAM)) == NULL) { fprintf(stderr,"Error creating display\n"); exit(1); } if ((d_list[5] = h_newDisp(SCATTERPLOT)) == NULL) { fprintf(stderr,"Error creating display\n"); exit(1); } if ((d_list[6] = h_newDisp(COLORPLOT)) == NULL) { fprintf(stderr,"Error creating display\n"); exit(1); } if ((d_list[7] = h_newDisp(COLORPLOT)) == NULL) { fprintf(stderr,"Error creating display\n"); exit(1); } if ((d_list[8] = h_newDisp(LEGOPLOT)) == NULL) { fprintf(stderr,"Error creating display\n"); exit(1); } /* * set display attributes */ for (i=0; i<9; i++) { h_bindNtuple( d_list[i], nt_list[0] ); h_bind(d_list[i],XAXIS, 3); h_bind(d_list[i],YAXIS, 10); } h_setDrawType(d_list[1],ERRBAR); h_setDrawType(d_list[2],POINT+LINE); h_setDrawType(d_list[3],POINT+LINE); h_setPlotSym(d_list[3],TIMES); h_setLineStyle(d_list[3],DOTDASH); h_bind(d_list[3],WEIGHT,10); h_setDrawType(d_list[7],COLOR); h_setPlotDrvr(X11PLOT); /* * now create X output of display * we make one large window, then six sub-windows, one for each plot * */ { Display *disp = XOpenDisplay(NULL); Screen *scrn = XDefaultScreenOfDisplay(disp); GC gc = DefaultGCOfScreen(scrn); XSetWindowAttributes xswa; Window main, wind[10]; xswa.event_mask = ExposureMask | ButtonPressMask | StructureNotifyMask; xswa.background_pixel = WhitePixelOfScreen(scrn); main = XCreateWindow(disp,DefaultRootWindow(disp), 10,10,width,height,0, DefaultDepthOfScreen(scrn), InputOutput, DefaultVisualOfScreen(scrn), CWEventMask | CWBackPixel, &xswa); xswa.event_mask = ExposureMask | ButtonPressMask; for (i=0; i<9; i++) { wind[i] = XCreateWindow(disp,main, (i-i/3*3)*200,(i/3)*200,200,200,0, DefaultDepthOfScreen(scrn), InputOutput, DefaultVisualOfScreen(scrn), CWEventMask | CWBackPixel, &xswa); XMapWindow(disp,wind[i]); } XStoreName(disp, main, "X-Hippo example display"); XMapWindow(disp,main); wind[9]=main; doHandleEvents(d_list,disp,scrn,wind,gc); } } static void doHandleEvents(display disp[],Display *dpy,Screen *scrn,Window wind[],GC gc) { XEvent event; XAnyEvent *any = (XAnyEvent *) &event; XExposeEvent *expose = (XExposeEvent *) &event; XConfigureEvent *config = (XConfigureEvent *) &event; int i; for ( ; ; ) { XNextEvent(dpy, &event); for (i=0; i<9; i++) if (any->window==wind[i]) break; switch (event.type) { case Expose: if (expose->count==0) { printf("expose %d\n",i); if (i<9) h_plot(disp[i],dpy,scrn,wind[i],gc); if (i==4) { h_shade(disp[i],0. ,40. ); h_shade(disp[i],60.,100.); } } break; case ButtonPress: printf("Button press in window %d\n",i); break; case ConfigureNotify: if (config->width != width || config->height != height) { int x,y,w,h; height = config->height; width = config->width; w = width/3; h = height/3; x = 0; y = 0; for (i=0; i<9; i++) { XMoveResizeWindow(dpy,wind[i],x,y,w,h); x += w; if (i == 2 || i == 5) { x = 0; y += h; } } } break; } } }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.