home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / x / volume4 / xplot / part01 next >
Internet Message Format  |  1989-07-23  |  32KB

  1. Path: uunet!island!argv
  2. From: argv@island.uu.net (Dan Heller)
  3. Newsgroups: comp.sources.x
  4. Subject: v04i081: Xplot, Part01/01
  5. Message-ID: <929@island.uu.net>
  6. Date: 23 Jul 89 17:19:03 GMT
  7. Organization: Island Graphics, Marin County, California
  8. Lines: 1234
  9. Approved: island!argv@sun.com
  10.  
  11. Submitted-by: sun!GARP.MIT.EDU!rochester!lassp!arthur
  12. Posting-number: Volume 4, Issue 81
  13. Archive-name: xplot/part01
  14.  
  15.  
  16.  
  17. The following is a very short and simple plot(5) filter for X. It
  18. brings up a graphics window which stays around until a button
  19. press after the end-of file is reached on input. It can draw
  20. interactively.
  21.  
  22.                 Arthur Smith
  23.  
  24. (arpanet)  arthur@helios.tn.cornell.edu
  25. (bitnet)   arthur@crnlassp
  26.  
  27. # This is a shell archive.  Remove anything before this line,
  28. # then unpack it by saving it in a file and typing "sh file".
  29. #
  30. # Wrapped by uttu!arthur on Sat Jul 22 04:52:57 EDT 1989
  31. # Contents:  xplot/ xplot/xlibplot/ xplot/Makefile xplot/xplot.c
  32. #    xplot/xlibplot/xlibplot.c xplot/xlibplot/Imakefile
  33. #    xplot/xlibplot/Makefile xplot/xplot.man xplot/Imakefile xplot/README
  34.  
  35. echo mkdir - xplot
  36. mkdir xplot
  37. chmod u=rwx,g=rx,o=rx xplot
  38.  
  39. echo x - xplot/Makefile
  40. sed 's/^@//' > "xplot/Makefile" <<'@//E*O*F xplot/Makefile//'
  41. # Makefile generated by imake - do not edit!
  42. # $XConsortium: imake.c,v 1.37 88/10/08 20:08:30 jim Exp $
  43. #
  44. # The cpp used on this machine replaces all newlines and multiple tabs and
  45. # spaces in a macro expansion with a single space.  Imake tries to compensate
  46. # for this, but is not always successful.
  47. #
  48.  
  49. ###########################################################################
  50. # X Window System Makefile generated from template file Imake.tmpl
  51. # $XConsortium: Imake.tmpl,v 1.91 88/10/23 22:37:10 jim Exp $
  52. #
  53. # Do not change the body of the imake template file.  Server-specific
  54. # parameters may be set in the appropriate .macros file; site-specific
  55. # parameters (but shared by all servers) may be set in site.def.  If you
  56. # make any changes, you'll need to rebuild the makefiles using
  57. # "make World" (at best) or "make Makefile; make Makefiles" (at least) in
  58. # the top level directory.
  59. #
  60. # If your C preprocessor doesn't define any unique symbols, you'll need
  61. # to set BOOTSTRAPCFLAGS when rebuilding imake (usually when doing
  62. # "make Makefile", "make Makefiles", or "make World").
  63. #
  64. # If you absolutely can't get imake to work, you'll need to set the
  65. # variables at the top of each Makefile as well as the dependencies at the
  66. # bottom (makedepend will do this automatically).
  67. #
  68.  
  69. ###########################################################################
  70. # platform-specific configuration parameters - edit Sun.macros to change
  71.  
  72. # platform:  $XConsortium: Sun.macros,v 1.52 88/10/23 11:00:55 jim Exp $
  73. # operating system:   SunOS 3.5
  74.  
  75. BOOTSTRAPCFLAGS =
  76.              AS = as
  77.              CC = cc
  78.             CPP = /lib/cpp
  79.              LD = ld
  80.            LINT = lint
  81.         INSTALL = install
  82.            TAGS = ctags
  83.              RM = rm -f
  84.              MV = mv
  85.              LN = ln -s
  86.          RANLIB = ranlib
  87. RANLIBINSTFLAGS = -t
  88.              AR = ar clq
  89.              LS = ls
  90.        LINTOPTS = -axz
  91.     LINTLIBFLAG = -C
  92.            MAKE = make
  93. STD_CPP_DEFINES =
  94.     STD_DEFINES =
  95.  
  96. ###########################################################################
  97. # site-specific configuration parameters - edit site.def to change
  98.  
  99. # site:  $XConsortium: site.def,v 1.16 88/10/12 10:30:24 jim Exp $
  100.  
  101. ###########################################################################
  102. # definitions common to all Makefiles - do not edit
  103.  
  104.           SHELL =  /bin/sh
  105.  
  106.         DESTDIR =
  107.       USRLIBDIR = $(DESTDIR)/usr/lib
  108.          BINDIR = $(DESTDIR)/usr/bin/X11
  109.          INCDIR = $(DESTDIR)/usr/include/X11
  110.          ADMDIR = $(DESTDIR)/usr/adm
  111.          LIBDIR = $(USRLIBDIR)/X11
  112.      LINTLIBDIR = $(USRLIBDIR)/lint
  113.         FONTDIR = $(LIBDIR)/fonts
  114.        XINITDIR = $(LIBDIR)/xinit
  115.          XDMDIR = $(LIBDIR)/xdm
  116.          UWMDIR = $(LIBDIR)/uwm
  117.          AWMDIR = $(LIBDIR)/awm
  118.          TWMDIR = $(LIBDIR)/twm
  119.         MANPATH = $(DESTDIR)/usr/man
  120.   MANSOURCEPATH = $(MANPATH)/man
  121.          MANDIR = $(MANSOURCEPATH)n
  122.       LIBMANDIR = $(MANSOURCEPATH)3
  123.     XAPPLOADDIR = $(LIBDIR)/app-defaults
  124.  
  125.    INSTBINFLAGS = -m 0755
  126.    INSTUIDFLAGS = -m 4755
  127.    INSTLIBFLAGS = -m 0664
  128.    INSTINCFLAGS = -m 0444
  129.    INSTMANFLAGS = -m 0444
  130.    INSTAPPFLAGS = -m 0444
  131.   INSTKMEMFLAGS = -m 4755
  132.         FCFLAGS = -t
  133.     CDEBUGFLAGS = -O -DPURDUE
  134.  
  135.         PATHSEP = /
  136.          DEPEND = $(DEPENDSRC)/makedepend
  137.           IMAKE = $(IMAKESRC)/imake
  138.             RGB = $(RGBSRC)/rgb
  139.              FC = $(BDFTOSNFSRC)/bdftosnf
  140.       MKFONTDIR = $(MKFONTDIRSRC)/mkfontdir
  141.       MKDIRHIER = $(SCRIPTSSRC)/mkdirhier.sh
  142.  
  143.          CFLAGS = $(CDEBUGFLAGS) $(INCLUDES) $(STD_DEFINES) $(DEFINES)
  144.       LINTFLAGS = $(LINTOPTS) $(INCLUDES) $(STD_DEFINES) $(DEFINES) -DLINT
  145.         LDFLAGS = $(CDEBUGFLAGS) $(SYS_LIBRARIES) $(SYSAUX_LIBRARIES)
  146.             TOP = /usr/src/X11
  147.       CLIENTSRC = $(TOP)/clients
  148.         DEMOSRC = $(TOP)/demos
  149.          LIBSRC = $(TOP)/lib
  150.         FONTSRC = $(TOP)/fonts
  151.      INCLUDESRC = $(TOP)/X11
  152.       SERVERSRC = $(TOP)/server
  153.         UTILSRC = $(TOP)/util
  154.      SCRIPTSSRC = $(UTILSRC)/scripts
  155.      EXAMPLESRC = $(TOP)/examples
  156.      CONTRIBSRC = $(TOP)/contrib
  157.          DOCSRC = $(TOP)/doc
  158.          RGBSRC = $(TOP)/rgb
  159.       DEPENDSRC = $(UTILSRC)/makedepend
  160.        IMAKESRC = $(UTILSRC)/imake
  161.        IRULESRC = $(UTILSRC)/imake.includes
  162.         XLIBSRC = $(LIBSRC)/X
  163.          XMUSRC = $(LIBSRC)/Xmu
  164.      TOOLKITSRC = $(LIBSRC)/Xt
  165.      AWIDGETSRC = $(LIBSRC)/Xaw
  166.      OLDXLIBSRC = $(LIBSRC)/oldX
  167.     BDFTOSNFSRC = $(FONTSRC)/bdftosnf
  168.    MKFONTDIRSRC = $(FONTSRC)/mkfontdir
  169.    EXTENSIONSRC = $(TOP)/extensions
  170.    EXTENSIONLIB = $(EXTENSIONSRC)/lib/libXext.a
  171.            XLIB = $(XLIBSRC)/libX11.a
  172.          XMULIB = $(XMUSRC)/libXmu.a
  173.         OLDXLIB = $(OLDXLIBSRC)/liboldX.a
  174.        XTOOLLIB = $(TOOLKITSRC)/libXt.a
  175.          XAWLIB = $(AWIDGETSRC)/libXaw.a
  176.        LINTXLIB = $(XLIBSRC)/llib-lX11.ln
  177.         LINTXMU = $(XMUSRC)/llib-lXmu.ln
  178.       LINTXTOOL = $(TOOLKITSRC)/llib-lXt.ln
  179.         LINTXAW = $(AWIDGETSRC)/llib-lXaw.ln
  180.        INCLUDES = -I$(TOP)
  181.       MACROFILE = Sun.macros
  182.    ICONFIGFILES = $(IRULESRC)/Imake.tmpl \
  183.             $(IRULESRC)/$(MACROFILE) $(IRULESRC)/site.def
  184.   IMAKE_DEFINES =
  185.       IMAKE_CMD = $(NEWTOP)$(IMAKE) -TImake.tmpl -I$(NEWTOP)$(IRULESRC) \
  186.             -s Makefile $(IMAKE_DEFINES)
  187.          RM_CMD = $(RM) *.CKP *.ln *.BAK *.bak *.o core errs ,* *~ *.a \
  188.             .emacs_* tags TAGS make.log MakeOut
  189.  
  190. ###########################################################################
  191. # rules:  $XConsortium: Imake.rules,v 1.71 88/10/23 22:46:34 jim Exp $
  192.  
  193. ###########################################################################
  194. # start of Imakefile
  195.  
  196.        INCLUDES = -I$(TOP)/usr/include -I$(TOP)/usr/include/X11
  197. LOCAL_LIBRARIES = $(XAWLIB) $(XMULIB) $(XTOOLLIB) $(XLIB)
  198.   SYS_LIBRARIES = -lm
  199.            SRCS = xplot.c
  200.            OBJS = xplot.o
  201.  
  202.  PROGRAM = xplot
  203.  
  204. all:: xplot
  205.  
  206. xplot: $(OBJS) $(LOCAL_LIBRARIES)
  207.     $(RM) $@
  208.     $(CC) -o $@ $(OBJS) $(LOCAL_LIBRARIES) $(LDFLAGS) $(SYSLAST_LIBRARIES)
  209.  
  210. relink::
  211.     $(RM) $(PROGRAM)
  212.     $(MAKE) $(MFLAGS) $(PROGRAM)
  213.  
  214. install:: xplot
  215.     $(INSTALL) -c $(INSTALLFLAGS) xplot $(BINDIR)
  216.  
  217. install.man:: xplot.man
  218.     $(INSTALL) -c $(INSTMANFLAGS) xplot.man $(MANDIR)/xplot.n
  219.  
  220. depend:: $(DEPEND)
  221.  
  222. depend::
  223.     $(DEPEND) -s "# DO NOT DELETE" -- $(CFLAGS) -- $(SRCS)
  224.  
  225. $(DEPEND):
  226.     @echo "making $@"; \
  227.     cd $(DEPENDSRC); $(MAKE)
  228.  
  229. clean::
  230.     $(RM) $(PROGRAM)
  231.  
  232. ###########################################################################
  233. # Imake.tmpl common rules for all Makefiles - do not edit
  234.  
  235. emptyrule::
  236.  
  237. clean::
  238.     $(RM_CMD) \#*
  239.  
  240. Makefile:: $(IMAKE)
  241.  
  242. Makefile:: Imakefile \
  243.     $(IRULESRC)/Imake.tmpl \
  244.     $(IRULESRC)/Imake.rules \
  245.     $(IRULESRC)/site.def \
  246.     $(IRULESRC)/$(MACROFILE)
  247.     -@if [ -f Makefile ]; then \
  248.     echo "$(RM) Makefile.bak; $(MV) Makefile Makefile.bak"; \
  249.     $(RM) Makefile.bak; $(MV) Makefile Makefile.bak; \
  250.     else exit 0; fi
  251.     $(IMAKE_CMD) -DTOPDIR=$(TOP)
  252.  
  253. $(IMAKE):
  254.     @echo "making $@"; \
  255.     cd $(IMAKESRC); $(MAKE) BOOTSTRAPCFLAGS=$(BOOTSTRAPCFLAGS)
  256.  
  257. tags::
  258.     $(TAGS) -w *.[ch]
  259.     $(TAGS) -xw *.[ch] > TAGS
  260.  
  261. ###########################################################################
  262. # empty rules for directories that do not have SUBDIRS - do not edit
  263.  
  264. install::
  265.     @echo "install done"
  266.  
  267. install.man::
  268.     @echo "install.man done"
  269.  
  270. Makefiles::
  271.  
  272. ###########################################################################
  273. # dependencies generated by makedepend
  274.  
  275. @//E*O*F xplot/Makefile//
  276. chmod u=rw,g=r,o=r xplot/Makefile
  277.  
  278. echo x - xplot/xplot.c
  279. sed 's/^@//' > "xplot/xplot.c" <<'@//E*O*F xplot/xplot.c//'
  280. #include <stdio.h>
  281. #include <math.h>
  282. #include <string.h>
  283. #include <sgtty.h>
  284. #include <fcntl.h>
  285. #include <errno.h>
  286. #include <X11/Xlib.h>
  287. #include <X11/Intrinsic.h>
  288. #include <X11/StringDefs.h>
  289. #include <X11/Label.h>
  290.  
  291. #define LINE 512
  292. char buf[LINE];
  293. char cptr[LINE];
  294. char *prog;
  295. char *index();
  296.  
  297. Display *dpy;
  298. Window widgetwin;
  299. Pixmap pixmap;
  300. GC gc;
  301. XGCValues gcv;
  302. XtInputId inid;
  303. /*XtAppContext app_context; */
  304. int rwidth = 500, rheight = 500;
  305.  
  306. short xmin, ymax;
  307. double xfactor, yfactor;
  308.  
  309. #define MAPX(x) (int) (((x) - xmin) * xfactor)
  310. #define MAPY(y) (int) ((ymax - (y)) * yfactor)
  311.  
  312. int spaceset = 0;
  313. short curpt[] = {0,0};
  314.  
  315. FILE *instrm = stdin;
  316. int len = 0;
  317. int endinp;
  318. char *curp;
  319.  
  320. Arg wargs[20];
  321. Widget toplevel;
  322. Widget child;
  323.  
  324. main(argc,argv)
  325. int argc;
  326. char **argv;
  327. {
  328.     struct sgttyb gp;
  329.     short old;
  330.     int fd;
  331.     int argf;
  332.  
  333.     prog = argv[0];
  334.     fd = fileno(instrm);
  335.  
  336.     gtty(fd,&gp);
  337.     old = gp.sg_flags;
  338.     gp.sg_flags |= (CBREAK);
  339.     stty(fd,&gp);
  340.  
  341.     fcntl(fd,F_GETFL,argf);
  342.     fcntl(fd,F_SETFL, argf|O_NDELAY);
  343.  
  344.     openpl(argc,argv);
  345.  
  346.     fcntl(fd,F_SETFL,argf);
  347.     gp.sg_flags = old;
  348.     stty(fd,&gp);
  349. }
  350.  
  351. doplot(client_data,fds,id)
  352. caddr_t client_data;
  353. int *fds; /* None of these arguments are actually used... */
  354. int *id;
  355. {
  356.     char c;
  357.     short x[6];
  358.     void buttonhandler();
  359.  
  360.     while(readit(instrm)){
  361.         while((len > 0) && (!endinp)){
  362.         len--;
  363.         c = *curp++;
  364. /*        printf("%c",c); */
  365.         switch(c){
  366.             case 'm': /* Move */
  367.                 if (getcoords(x,2,instrm))
  368.                     move(x[0],x[1]);
  369.                 break;
  370.             case 'n': /* Continue */
  371.                 if (getcoords(x,2,instrm))
  372.                     cont(x[0],x[1]);
  373.                 break;
  374.             case 'p': /* Plot */
  375.                 if (getcoords(x,2,instrm))
  376.                     point(x[0],x[1]);
  377.                 break;
  378.             case 'l': /* Draw Line */
  379.                 if (getcoords(x,4,instrm))
  380.                     line(x[0],x[1],x[2],x[3]);
  381.                 break;
  382.             case 't': /* Label */
  383.                 if (getstring(buf,instrm))
  384.                     label(buf);
  385.                 break;
  386.             case 'a': /* Arc */
  387.                 if (getcoords(x,6,instrm))
  388.                     arc(x[0],x[1],x[2],x[3],x[4],x[5]);
  389.                 break;
  390.             case 'c': /* Circle */
  391.                 if (getcoords(x,3,instrm))
  392.                     circle(x[0],x[1],x[2]);
  393.                 break;
  394.             case 'e': /* Erase */
  395.                 erase();
  396.                 break;
  397.             case 'f': /* Linemod */
  398.                 if (getstring(buf,instrm))
  399.                     linemod(buf);
  400.                 break;
  401.             case 's': /* Space */
  402.                 if (getcoords(x,4,instrm))
  403.                     space(x[0],x[1],x[2],x[3]);
  404.                 break;
  405.             default:
  406.                 printf("Error?: character = %d\n",c);
  407.                 break;
  408.         }
  409.         }
  410.     }
  411.     if (errno != EWOULDBLOCK){
  412.         if (fork()) exit(0);
  413.         XtRemoveInput(inid);
  414.         XtAddEventHandler(toplevel,ButtonPressMask,False,
  415.                         buttonhandler, NULL);
  416.     } 
  417.     XClearArea(dpy,widgetwin,0,0,0,0,True);
  418. }
  419.  
  420. void buttonhandler(w,client_data,event)
  421. Widget w;
  422. caddr_t client_data;
  423. XEvent *event;
  424. {
  425.     closepl();
  426.     exit(0);
  427. }
  428.  
  429. drawellipse(x,y,r1,r2)
  430. int x,y,r1,r2;
  431. {
  432. /*    XPoint *points;
  433.     int i,npoints;
  434.     double delta;
  435.  
  436.     npoints = 2 + abs(r1) + abs(r2);
  437.     points = (XPoint *) (malloc(npoints * sizeof(XPoint)));
  438.     delta = 2 * M_PI / (npoints - 1);
  439.     for (i=0;i<npoints-1;i++){
  440.         points[i].x = x + r1 * cos(i * delta);
  441.         points[i].y = y + r2 * sin(i * delta);
  442.     }
  443.     points[npoints-1].x = x + r1;
  444.     points[npoints-1].y = y ;
  445.     XDrawLines(dpy,pixmap,gc,points,npoints,CoordModeOrigin);
  446.     */
  447.     XDrawArc(dpy,pixmap,gc, x - r1, y - r2, 2 * r1, 2 * r2, 0,
  448.                     64 * 360 - 1);
  449. }
  450.  
  451. drawarc(x,y,x0,y0,x1,y1)
  452. int x,y,x0,y0,x1,y1;
  453. {
  454.     int a0,b0,a1,b1;
  455.     int a02,b02,a12,b12;
  456.     double ar,br,ar2,br2;
  457.     double theta0,theta1;
  458.  
  459.     a0 = x0 - x;
  460.     a02 = a0*a0;
  461.     a1 = x1 - x;
  462.     a12 = a1*a1;
  463.     b0 = y0 - y;
  464.     b02 = b0*b0;
  465.     b1 = y1 - y;
  466.     b12 = b1*b1;
  467.     if (b12 == b02) return 0;
  468.     ar2 = (a02*b12 - a12*b02)/(b12 - b02);
  469.     if (ar2 < 0) return 0;
  470.     ar = sqrt(ar2);
  471.     br2 = (b02*a12 - b12*a02)/(a12 - a02);
  472.     if (br2 < 0) return 0;
  473.     br = sqrt(br2);
  474.     theta0 = -atan2(b0/br,a0/ar);
  475.     theta1 = -atan2(b1/br,a1/ar);
  476.     if (theta0 > theta1) theta1 += 2 * M_PI;
  477.     if (theta0 < 0){
  478.         theta0 += 2 * M_PI;
  479.         theta1 += 2 * M_PI;
  480.     }
  481.     XDrawArc(dpy,pixmap,gc,(int) (x - ar), (int) (y - br),
  482.           (int)(2 * ar), (int) (2 * br), (int) (64* theta0
  483.           * 180/M_PI), (int) (64 * (theta1 - theta0) * 180/M_PI));
  484. }
  485.  
  486. /* Openpl is supposed to set up the X window stuff, by creating a
  487.    widget, in which the image is to be put in a background pixmap. */
  488.  
  489. openpl(argc,argv)
  490. int argc;
  491. char **argv;
  492. {
  493.     int i, dimset, narg;
  494.  
  495.     dimset = 0;
  496.     for (i=0;i<argc;i++){
  497.         if (strcmp(argv[i],"-geometry"))
  498.             continue;
  499.         else
  500.         {
  501.             dimset = 1;
  502.             rwidth = atoi(argv[i+1]);
  503.             rheight = atoi(1+index(argv[i+1],'x'));
  504.         }
  505.     }
  506.     toplevel = XtInitialize(argv[0], "xplot",NULL, 0, &argc, argv); 
  507.     dpy = XtDisplay(toplevel);
  508. /*    app_context = XtCreateApplicationContext(); */
  509.  
  510.     pixmap = XCreatePixmap(dpy,DefaultRootWindow(dpy), rwidth, rheight, 1);
  511.     gc = XCreateGC(dpy, pixmap, 0L, &gcv);
  512.     XSetForeground(dpy,gc,1);
  513.  
  514.     XtSetArg(wargs[0], XtNbitmap, pixmap);
  515.     narg = 1;
  516.     if (dimset == 0) {
  517.         XtSetArg(wargs[1], XtNheight, rheight);
  518.         XtSetArg(wargs[2], XtNwidth, rwidth);
  519.         narg = 3;
  520.     } 
  521.     child = XtCreateManagedWidget(prog, labelWidgetClass,
  522.                         toplevel, wargs, narg);
  523. /*    XtCreateManagedWidget(prog, labelWidgetClass, child, wargs, narg); */
  524.     XtRealizeWidget(toplevel);
  525.     widgetwin = XtWindow(child);
  526.     inid = XtAddInput(fileno(instrm), XtInputReadMask, doplot, NULL);
  527.     XtMainLoop();
  528. }
  529.  
  530. /* Erase should wait for the current page to be absorbed, before creating
  531.   a new one (presumably by erasing the pixmap and then redrawing the widget.*/
  532. erase()
  533. {
  534. /* Wait for button event */
  535. /* Clear pixmap */
  536.     XSetForeground(dpy,gc,0);
  537.     XFillRectangle(dpy,pixmap,gc,0,0,rwidth,rheight);
  538.     XSetForeground(dpy,gc,1);
  539. }
  540.  
  541. /* Don't know how I'm going to do this ! */
  542.  
  543. label(s)
  544. char *s;
  545. {
  546.     XDrawString(dpy,pixmap,gc,MAPX(curpt[0]),MAPY(curpt[1]),s,
  547.             strlen(s) - 1);
  548. }
  549.  
  550. line(x1,y1,x2,y2)
  551. short x1,y1,x2,y2;
  552. {
  553.     curpt[0] = x2;
  554.     curpt[1] = y2;
  555.     if (spaceset == 0) return;
  556.     XDrawLine(dpy,pixmap,gc, MAPX(x1), MAPY(y1), MAPX(x2), MAPY(y2));
  557. }
  558.  
  559. circle(x,y,r)
  560. short x,y,r;
  561. {
  562.  
  563.     if (spaceset == 0) return;
  564.     drawellipse(MAPX(x), MAPY(y), (int) (r * xfactor), (int) (r*yfactor));
  565. }
  566.  
  567.  
  568. arc(x,y,x0,y0,x1,y1)
  569. short x,y,x0,y0,x1,y1;
  570. {
  571.     if (spaceset == 0) return;
  572.     drawarc(MAPX(x), MAPY(y), MAPX(x0), MAPY(y0), MAPX(x1), MAPY(y1));
  573. }
  574.  
  575. move(x,y)
  576. short x,y;
  577. {
  578.     curpt[0] = x;
  579.     curpt[1] = y;
  580. }
  581.  
  582. cont(x,y)
  583. short x,y;
  584. {
  585.     line(curpt[0],curpt[1],x,y);
  586. }
  587.  
  588. point(x,y)
  589. short x,y;
  590. {
  591.     curpt[0] = x;
  592.     curpt[1] = y;
  593.     if (spaceset == 0) return;
  594.     XDrawPoint(dpy,pixmap,gc, MAPX(x), MAPY(y));
  595. }
  596.  
  597. linemod(s)
  598. char *s;
  599. {
  600.     int line_style;
  601.  
  602.     line_style = gcv.line_style;
  603.  
  604.     if (!strcmp(s,"solid\n"))
  605.         line_style = LineSolid;
  606.     else if ((!strcmp(s,"dotted\n"))||(!strcmp(s,"shortdashed\n")))
  607.         line_style = LineOnOffDash;
  608.     else if ((!strcmp(s, "longdashed\n"))||(!strcmp(s,"dotdashed\n")))
  609.         line_style = LineDoubleDash;
  610.     gcv.line_style = line_style;
  611.     XChangeGC(dpy, gc, GCLineStyle, &gcv);
  612. }
  613.  
  614. space(x0,y0,x1,y1)
  615. short x0,y0,x1,y1;
  616. {
  617.     spaceset = 1;
  618.     xmin = x0;
  619.     ymax = y1;
  620.     xfactor = ((double) rwidth)/(x1 + 1 - x0);
  621.     yfactor = ((double) rheight)/(y1 + 1 - y0);
  622. }
  623.  
  624. closepl()
  625. {
  626.     XFreeGC(dpy,gc);
  627.     XFreePixmap(dpy,pixmap);
  628.     XtDestroyWidget(toplevel);
  629. }
  630.  
  631. int getcoords(x,n,strm)
  632. short *x;
  633. int n;
  634. FILE *strm;
  635. {
  636.     unsigned char c,d;
  637.     int i;
  638.  
  639.     while (len < 2*n) {
  640.         len++;
  641.         curp--;
  642.         if (!readit(strm))
  643.             return 0;
  644.         len--;
  645.         curp++;
  646.     }
  647.     len -= 2 * n;
  648.     for (i=0;i< n;i++){
  649.         c = *curp++;
  650.         d = *curp++;
  651.         x[i] = (short) ((d << 8) | c);
  652. /*        printf(" %d",x[i]); */
  653.     }
  654. /*    printf("\n"); */
  655.     return 1;
  656. }
  657.  
  658. int getstring(ptr,strm)
  659. char *ptr;
  660. FILE *strm;
  661. {
  662.     char *cp;
  663.     int lenp;
  664.  
  665.     while ((cp = index(curp,'\n')) == NULL){
  666.         len++;
  667.         curp--;
  668.         if (!readit(strm))
  669.             return 0;
  670.         len--;
  671.         curp++;
  672.     }
  673.     lenp = cp - curp + 1;
  674.     bcopy(curp,ptr,lenp);
  675.     ptr[lenp] = 0;
  676.     len -= lenp;
  677.     curp += lenp;
  678. /*    printf("%s",ptr); */
  679.     return lenp;
  680. }
  681.  
  682. /* Have to do my own buffering: */
  683.  
  684. int readit(strm)
  685. FILE *strm;
  686. {
  687.     int lenp;
  688.  
  689.     endinp = 0;
  690.     if (len > 0)
  691.         bcopy(curp, cptr, len);
  692.     if ((lenp = fread(cptr+len, 1, LINE - len, strm)) == 0){
  693.         endinp = 1;
  694.         return 0;
  695.     }
  696.     len += lenp;
  697.     curp = cptr;
  698.     return 1;
  699. }
  700. @//E*O*F xplot/xplot.c//
  701. chmod u=rw,g=r,o=r xplot/xplot.c
  702.  
  703. echo mkdir - xplot/xlibplot
  704. mkdir xplot/xlibplot
  705. chmod u=rwx,g=rx,o=rx xplot/xlibplot
  706.  
  707. echo x - xplot/xlibplot/xlibplot.c
  708. sed 's/^@//' > "xplot/xlibplot/xlibplot.c" <<'@//E*O*F xplot/xlibplot/xlibplot.c//'
  709. #include <stdio.h>
  710. #include <string.h>
  711.  
  712. #define LINE 256
  713.  
  714. #define XPLOT "/usr/contrib/bin/xplot"
  715.  
  716. char xplotlib_buf[LINE];
  717.  
  718. FILE *xplotlib_outstrm;
  719.  
  720. openpl()
  721. {
  722.     xplotlib_outstrm = popen(XPLOT, "w");
  723. }
  724.  
  725. closepl()
  726. {
  727.     pclose(xplotlib_outstrm);
  728. }
  729.  
  730. erase()
  731. {
  732.     putentry('e',0);
  733. }
  734.  
  735. label(s)
  736. char *s;
  737. {
  738.     strcpy(xplotlib_buf,s);
  739.     putentry('t',strlen(xplotlib_buf));
  740. }
  741.  
  742. line(x1,y1,x2,y2)
  743. int x1,y1,x2,y2;
  744. {
  745.     short x[6];
  746.  
  747.     x[0] = x1;
  748.     x[1] = y1;
  749.     x[2] = x2;
  750.     x[3] = y2;
  751.     convertcoords(x,4);
  752.     putentry('l',8);
  753. }
  754.  
  755. circle(xin,y,r)
  756. int xin,y,r;
  757. {
  758.     short x[6];
  759.  
  760.     x[0] = xin;
  761.     x[1] = y;
  762.     x[2] = r;
  763.     convertcoords(x,3);
  764.     putentry('c',6);
  765. }
  766.  
  767. arc(xin,y,x0,y0,x1,y1)
  768. {
  769.     short x[6];
  770.     x[0] = xin;
  771.     x[1] = y;
  772.     x[2] = x0;
  773.     x[3] = y0;
  774.     x[4] = x1;
  775.     x[5] = y1;
  776.     convertcoords(x,6);
  777.     putentry('a',12);
  778. }
  779.  
  780. move(xin,y)
  781. int xin,y;
  782. {
  783.     short x[6];
  784.     x[0] = xin;
  785.     x[1] = y;
  786.     convertcoords(x,2);
  787.     putentry('m',4);
  788. }
  789.  
  790. cont(xin,y)
  791. int xin,y;
  792. {
  793.     short x[6];
  794.     x[0] = xin;
  795.     x[1] = y;
  796.     convertcoords(x,2);
  797.     putentry('n',4);
  798. }
  799.  
  800. point(xin,y)
  801. int xin,y;
  802. {
  803.     short x[6];
  804.     x[0] = xin;
  805.     x[1] = y;
  806.     convertcoords(x,2);
  807.     putentry('p',4);
  808. }
  809.  
  810. linemod(s)
  811. char *s;
  812. {
  813.     strcpy(xplotlib_buf,s);
  814.     putentry('f',strlen(xplotlib_buf));
  815. }
  816.  
  817. space(x0,y0,x1,y1)
  818. int x0,y0,x1,y1;
  819. {
  820.     short x[6];
  821.  
  822.     x[0] = x0;
  823.     x[1] = y0;
  824.     x[2] = x1;
  825.     x[3] = y1;
  826.     convertcoords(x,4);
  827.     putentry('s',8);
  828. }
  829.  
  830. convertcoords(x,n)
  831. short *x;
  832. int n;
  833. {
  834.     int i;
  835.  
  836.     for (i=0;i<n;i++){
  837.         xplotlib_buf[2*i] = (unsigned char) x[i];
  838.         xplotlib_buf[2*i+1] = (unsigned char) (x[i] >> 8) ;
  839.     }
  840. }
  841.  
  842. putentry(c,n)
  843. char c;
  844. int n;
  845. {
  846.     int i;
  847.  
  848.     putc(c,xplotlib_outstrm);
  849.     fwrite(xplotlib_buf, n, 1, xplotlib_outstrm);
  850.     fflush(xplotlib_outstrm);
  851. }
  852. @//E*O*F xplot/xlibplot/xlibplot.c//
  853. chmod u=rw,g=r,o=r xplot/xlibplot/xlibplot.c
  854.  
  855. echo x - xplot/xlibplot/Imakefile
  856. sed 's/^@//' > "xplot/xlibplot/Imakefile" <<'@//E*O*F xplot/xlibplot/Imakefile//'
  857. NormalLibraryObjectRule()
  858. NormalLibraryTarget(xplot,xlibplot.o)
  859. @//E*O*F xplot/xlibplot/Imakefile//
  860. chmod u=rw,g=r,o=r xplot/xlibplot/Imakefile
  861.  
  862. echo x - xplot/xlibplot/Makefile
  863. sed 's/^@//' > "xplot/xlibplot/Makefile" <<'@//E*O*F xplot/xlibplot/Makefile//'
  864. # Makefile generated by imake - do not edit!
  865. # $XConsortium: imake.c,v 1.37 88/10/08 20:08:30 jim Exp $
  866. #
  867. # The cpp used on this machine replaces all newlines and multiple tabs and
  868. # spaces in a macro expansion with a single space.  Imake tries to compensate
  869. # for this, but is not always successful.
  870. #
  871.  
  872. ###########################################################################
  873. # X Window System Makefile generated from template file Imake.tmpl
  874. # $XConsortium: Imake.tmpl,v 1.91 88/10/23 22:37:10 jim Exp $
  875. #
  876. # Do not change the body of the imake template file.  Server-specific
  877. # parameters may be set in the appropriate .macros file; site-specific
  878. # parameters (but shared by all servers) may be set in site.def.  If you
  879. # make any changes, you'll need to rebuild the makefiles using
  880. # "make World" (at best) or "make Makefile; make Makefiles" (at least) in
  881. # the top level directory.
  882. #
  883. # If your C preprocessor doesn't define any unique symbols, you'll need
  884. # to set BOOTSTRAPCFLAGS when rebuilding imake (usually when doing
  885. # "make Makefile", "make Makefiles", or "make World").
  886. #
  887. # If you absolutely can't get imake to work, you'll need to set the
  888. # variables at the top of each Makefile as well as the dependencies at the
  889. # bottom (makedepend will do this automatically).
  890. #
  891.  
  892. ###########################################################################
  893. # platform-specific configuration parameters - edit Sun.macros to change
  894.  
  895. # platform:  $XConsortium: Sun.macros,v 1.52 88/10/23 11:00:55 jim Exp $
  896. # operating system:   SunOS 3.5
  897.  
  898. BOOTSTRAPCFLAGS =
  899.              AS = as
  900.              CC = cc
  901.             CPP = /lib/cpp
  902.              LD = ld
  903.            LINT = lint
  904.         INSTALL = install
  905.            TAGS = ctags
  906.              RM = rm -f
  907.              MV = mv
  908.              LN = ln -s
  909.          RANLIB = ranlib
  910. RANLIBINSTFLAGS = -t
  911.              AR = ar clq
  912.              LS = ls
  913.        LINTOPTS = -axz
  914.     LINTLIBFLAG = -C
  915.            MAKE = make
  916. STD_CPP_DEFINES =
  917.     STD_DEFINES =
  918.  
  919. ###########################################################################
  920. # site-specific configuration parameters - edit site.def to change
  921.  
  922. # site:  $XConsortium: site.def,v 1.16 88/10/12 10:30:24 jim Exp $
  923.  
  924. ###########################################################################
  925. # definitions common to all Makefiles - do not edit
  926.  
  927.           SHELL =  /bin/sh
  928.  
  929.         DESTDIR =
  930.       USRLIBDIR = $(DESTDIR)/usr/lib
  931.          BINDIR = $(DESTDIR)/usr/bin/X11
  932.          INCDIR = $(DESTDIR)/usr/include/X11
  933.          ADMDIR = $(DESTDIR)/usr/adm
  934.          LIBDIR = $(USRLIBDIR)/X11
  935.      LINTLIBDIR = $(USRLIBDIR)/lint
  936.         FONTDIR = $(LIBDIR)/fonts
  937.        XINITDIR = $(LIBDIR)/xinit
  938.          XDMDIR = $(LIBDIR)/xdm
  939.          UWMDIR = $(LIBDIR)/uwm
  940.          AWMDIR = $(LIBDIR)/awm
  941.          TWMDIR = $(LIBDIR)/twm
  942.         MANPATH = $(DESTDIR)/usr/man
  943.   MANSOURCEPATH = $(MANPATH)/man
  944.          MANDIR = $(MANSOURCEPATH)n
  945.       LIBMANDIR = $(MANSOURCEPATH)3
  946.     XAPPLOADDIR = $(LIBDIR)/app-defaults
  947.  
  948.    INSTBINFLAGS = -m 0755
  949.    INSTUIDFLAGS = -m 4755
  950.    INSTLIBFLAGS = -m 0664
  951.    INSTINCFLAGS = -m 0444
  952.    INSTMANFLAGS = -m 0444
  953.    INSTAPPFLAGS = -m 0444
  954.   INSTKMEMFLAGS = -m 4755
  955.         FCFLAGS = -t
  956.     CDEBUGFLAGS = -O -DPURDUE
  957.  
  958.         PATHSEP = /
  959.          DEPEND = $(DEPENDSRC)/makedepend
  960.           IMAKE = $(IMAKESRC)/imake
  961.             RGB = $(RGBSRC)/rgb
  962.              FC = $(BDFTOSNFSRC)/bdftosnf
  963.       MKFONTDIR = $(MKFONTDIRSRC)/mkfontdir
  964.       MKDIRHIER = $(SCRIPTSSRC)/mkdirhier.sh
  965.  
  966.          CFLAGS = $(CDEBUGFLAGS) $(INCLUDES) $(STD_DEFINES) $(DEFINES)
  967.       LINTFLAGS = $(LINTOPTS) $(INCLUDES) $(STD_DEFINES) $(DEFINES) -DLINT
  968.         LDFLAGS = $(CDEBUGFLAGS) $(SYS_LIBRARIES) $(SYSAUX_LIBRARIES)
  969.             TOP = /usr/src/X11
  970.       CLIENTSRC = $(TOP)/clients
  971.         DEMOSRC = $(TOP)/demos
  972.          LIBSRC = $(TOP)/lib
  973.         FONTSRC = $(TOP)/fonts
  974.      INCLUDESRC = $(TOP)/X11
  975.       SERVERSRC = $(TOP)/server
  976.         UTILSRC = $(TOP)/util
  977.      SCRIPTSSRC = $(UTILSRC)/scripts
  978.      EXAMPLESRC = $(TOP)/examples
  979.      CONTRIBSRC = $(TOP)/contrib
  980.          DOCSRC = $(TOP)/doc
  981.          RGBSRC = $(TOP)/rgb
  982.       DEPENDSRC = $(UTILSRC)/makedepend
  983.        IMAKESRC = $(UTILSRC)/imake
  984.        IRULESRC = $(UTILSRC)/imake.includes
  985.         XLIBSRC = $(LIBSRC)/X
  986.          XMUSRC = $(LIBSRC)/Xmu
  987.      TOOLKITSRC = $(LIBSRC)/Xt
  988.      AWIDGETSRC = $(LIBSRC)/Xaw
  989.      OLDXLIBSRC = $(LIBSRC)/oldX
  990.     BDFTOSNFSRC = $(FONTSRC)/bdftosnf
  991.    MKFONTDIRSRC = $(FONTSRC)/mkfontdir
  992.    EXTENSIONSRC = $(TOP)/extensions
  993.    EXTENSIONLIB = $(EXTENSIONSRC)/lib/libXext.a
  994.            XLIB = $(XLIBSRC)/libX11.a
  995.          XMULIB = $(XMUSRC)/libXmu.a
  996.         OLDXLIB = $(OLDXLIBSRC)/liboldX.a
  997.        XTOOLLIB = $(TOOLKITSRC)/libXt.a
  998.          XAWLIB = $(AWIDGETSRC)/libXaw.a
  999.        LINTXLIB = $(XLIBSRC)/llib-lX11.ln
  1000.         LINTXMU = $(XMUSRC)/llib-lXmu.ln
  1001.       LINTXTOOL = $(TOOLKITSRC)/llib-lXt.ln
  1002.         LINTXAW = $(AWIDGETSRC)/llib-lXaw.ln
  1003.        INCLUDES = -I$(TOP)
  1004.       MACROFILE = Sun.macros
  1005.    ICONFIGFILES = $(IRULESRC)/Imake.tmpl \
  1006.             $(IRULESRC)/$(MACROFILE) $(IRULESRC)/site.def
  1007.   IMAKE_DEFINES =
  1008.       IMAKE_CMD = $(NEWTOP)$(IMAKE) -TImake.tmpl -I$(NEWTOP)$(IRULESRC) \
  1009.             -s Makefile $(IMAKE_DEFINES)
  1010.          RM_CMD = $(RM) *.CKP *.ln *.BAK *.bak *.o core errs ,* *~ *.a \
  1011.             .emacs_* tags TAGS make.log MakeOut
  1012.  
  1013. ###########################################################################
  1014. # rules:  $XConsortium: Imake.rules,v 1.71 88/10/23 22:46:34 jim Exp $
  1015.  
  1016. ###########################################################################
  1017. # start of Imakefile
  1018.  
  1019. @.c.o:
  1020.     $(RM) $@
  1021.     $(CC) -c $(CFLAGS) $*.c
  1022.  
  1023. all:: libxplot.a
  1024.  
  1025. libxplot.a: xlibplot.o
  1026.     $(RM) $@
  1027.     $(AR) $@ xlibplot.o
  1028.     $(RANLIB) $@
  1029.  
  1030. ###########################################################################
  1031. # Imake.tmpl common rules for all Makefiles - do not edit
  1032.  
  1033. emptyrule::
  1034.  
  1035. clean::
  1036.     $(RM_CMD) \#*
  1037.  
  1038. Makefile:: $(IMAKE)
  1039.  
  1040. Makefile:: Imakefile \
  1041.     $(IRULESRC)/Imake.tmpl \
  1042.     $(IRULESRC)/Imake.rules \
  1043.     $(IRULESRC)/site.def \
  1044.     $(IRULESRC)/$(MACROFILE)
  1045.     -@if [ -f Makefile ]; then \
  1046.     echo "$(RM) Makefile.bak; $(MV) Makefile Makefile.bak"; \
  1047.     $(RM) Makefile.bak; $(MV) Makefile Makefile.bak; \
  1048.     else exit 0; fi
  1049.     $(IMAKE_CMD) -DTOPDIR=$(TOP)
  1050.  
  1051. $(IMAKE):
  1052.     @echo "making $@"; \
  1053.     cd $(IMAKESRC); $(MAKE) BOOTSTRAPCFLAGS=$(BOOTSTRAPCFLAGS)
  1054.  
  1055. tags::
  1056.     $(TAGS) -w *.[ch]
  1057.     $(TAGS) -xw *.[ch] > TAGS
  1058.  
  1059. ###########################################################################
  1060. # empty rules for directories that do not have SUBDIRS - do not edit
  1061.  
  1062. install::
  1063.     @echo "install done"
  1064.  
  1065. install.man::
  1066.     @echo "install.man done"
  1067.  
  1068. Makefiles::
  1069.  
  1070. ###########################################################################
  1071. # dependencies generated by makedepend
  1072.  
  1073. @//E*O*F xplot/xlibplot/Makefile//
  1074. chmod u=rw,g=r,o=r xplot/xlibplot/Makefile
  1075.  
  1076. echo x - xplot/xplot.man
  1077. sed 's/^@//' > "xplot/xplot.man" <<'@//E*O*F xplot/xplot.man//'
  1078. @.TH XPLOT 1 "13 October 1988" "X Version 11"
  1079. @.SH NAME
  1080. xplot - plot(5) filter for X
  1081. @.SH SYNOPSIS
  1082. @.B xplot
  1083. [-\fItoolkitoption\fP ...] [-option ...]
  1084. @.SH DESCRIPTION
  1085. The
  1086. @.I xplot 
  1087. program brings up a window for viewing plot(5) output, for example
  1088. from the
  1089. @.I axis
  1090. program.
  1091. The program works interactively, continuing to
  1092. accept input from stdin and plotting as it goes, until it reaches
  1093. an end of file, at which point it waits around for a mouse button
  1094. press to kill the window.
  1095. @.SH OPTIONS
  1096. @.I Xplot
  1097. accepts all of the standard X toolkit command line options, and the initial
  1098. geometry specification determines the resolution, with a default
  1099. geometry of 500x500 pixels.
  1100. @.PP
  1101. The following standard X Toolkit command line arguments may be used with 
  1102. @.I xplot:
  1103. @.TP 8
  1104. @.B \-bg \fIcolor\fP
  1105. This option specifies the color to use for the background of the window.  
  1106. The default is \fIwhite\fP.
  1107. @.TP 8
  1108. @.B \-bd \fIcolor\fP
  1109. This option specifies the color to use for the border of the window.
  1110. The default is \fIblack\fP.
  1111. @.TP 8
  1112. @.B \-bw \fInumber\fP
  1113. This option specifies the width in pixels of the border surrounding the window.
  1114. @.TP 8
  1115. @.B \-fg \fIcolor\fP
  1116. This option specifies the color to use for displaying text.  The default is 
  1117. \fIblack\fP.
  1118. @.TP 8
  1119. @.B \-fn \fIfont\fP
  1120. This option specifies the font to be used for displaying normal text.  The
  1121. default is \fI6x10\fP.
  1122. @.TP 8
  1123. @.B \-rv
  1124. This option indicates that reverse video should be simulated by swapping
  1125. the foreground and background colors.
  1126. @.TP 8
  1127. @.B \-geometry \fIgeometry\fP
  1128. This option specifies the prefered size and position of the clock window.
  1129. @.TP 8
  1130. @.B \-display \fIhost\fP:\fIdisplay\fP
  1131. This option specifies the X server to contact.
  1132. @.TP 8
  1133. @.B \-xrm \fIresourcestring\fP
  1134. This option specifies a resource string to be used.
  1135. @.SH X DEFAULTS
  1136. This program uses the 
  1137. @.I Label
  1138. widget in the X Toolkit.  It understands all of the core resource names and
  1139. classes as well as:
  1140. @.PP
  1141. @.TP 8
  1142. @.B width (\fPclass\fB Width)
  1143. Specifies the width of the clock.  The default for analog clocks is 164
  1144. pixels; the default for digital clocks is whatever is needed to hold the 
  1145. clock when displayed in the chosen font.
  1146. @.TP 8
  1147. @.B height (\fPclass\fB Height)
  1148. Specifies the height of the clock.  The default for analog clocks is 164
  1149. pixels; the default for digital clocks is whatever is needed to hold the
  1150. clock when displayed in the chosen font.
  1151. @.TP 8
  1152. @.B reverseVideo (\fPclass\fB ReverseVideo)
  1153. Specifies that the foreground and background colors should be reversed.
  1154. @.SH "SEE ALSO"
  1155. X(1), plot(5), psun(1), axis(1), Athena Label widget
  1156. @.SH BUGS
  1157. @.I Xplot
  1158. works fine. No bugs at all. Right. Actually there are several things
  1159. that ought to be changed, for example the reversed byte order in
  1160. plot(5) format (NOT MY FAULT), and maybe it will soon be extended
  1161. to the superplot format (I'll have to look over that stuff carefully
  1162. though), and probably also to return mouse position and anything
  1163. else the locals feel they need.
  1164. @.PP
  1165. @.SH AUTHORS
  1166. Arthur Smith (Lassp, Cornell University)
  1167. @//E*O*F xplot/xplot.man//
  1168. chmod u=rw,g=r,o=r xplot/xplot.man
  1169.  
  1170. echo x - xplot/Imakefile
  1171. sed 's/^@//' > "xplot/Imakefile" <<'@//E*O*F xplot/Imakefile//'
  1172.        INCLUDES = -I$(TOP)/usr/include -I$(TOP)/usr/include/X11
  1173. LOCAL_LIBRARIES = $(XAWLIB) $(XMULIB) $(XTOOLLIB) $(XLIB)
  1174.   SYS_LIBRARIES = -lm
  1175.            SRCS = xplot.c
  1176.            OBJS = xplot.o
  1177.  
  1178. ComplexProgramTarget(xplot)
  1179. @//E*O*F xplot/Imakefile//
  1180. chmod u=rw,g=r,o=r xplot/Imakefile
  1181.  
  1182. echo x - xplot/README
  1183. sed 's/^@//' > "xplot/README" <<'@//E*O*F xplot/README//'
  1184. RATIONALE
  1185.  
  1186.    Why xplot, when we already have so many graphics programs?
  1187. Well, first of all it is a simple, straightforward, plot (5)
  1188. filter. No fancy buttons or options or silly syntax. Just
  1189. a plain old filter. However, it is implemented as an Athena
  1190. Labelwidget, so of course all the usual XToolkit options are
  1191. available.
  1192.    When first called, it immediately brings up a blank window,
  1193. and as plot(5) data appears on the input stream it draws
  1194. the stuff right away (it uses CBREAK mode). This means it
  1195. can be used either interactively, with a pipe, or with
  1196. a preprocessed file. We have used it here with the data
  1197. processing program "dra", which allows interective plotting
  1198. and manipulation of the data. Xplot draws in the background
  1199. pixmap of the window, so that redrawing is very fast (compared
  1200. with an xterm tektronix window for example). The disadvantage
  1201. of this, of course (there had to be one) is that on resizing,
  1202. the plot does not resize with the window, but retains its
  1203. original shape (it is properly centered though). Xplot is in general
  1204. much more convenient than the standard Tek window, since several
  1205. different windows can be maintained at once, to compare different
  1206. sets of data, for example. And you don't lose control of your
  1207. window. Each xplot window is destroyed by a mouse button press
  1208. anywhere, but not until EOF has been reached on the input stream.
  1209.  
  1210. PLOT (3X) LIBRARY
  1211.  
  1212.     The subdirectory xlibplot contains the standard plot(3x)
  1213. routines so that xplot can be called up from within any
  1214. C program, just by linking to this library.
  1215.  
  1216.  
  1217. COMPILATION
  1218.  
  1219.     Just make Makefile, then make xplot. If you don't have imake
  1220. and the X util sources you may have to edit the Makefile, but it
  1221. should be clear what to do.
  1222. @//E*O*F xplot/README//
  1223. chmod u=rw,g=r,o=r xplot/README
  1224.  
  1225. echo Inspecting for damage in transit...
  1226. temp=/tmp/shar$$; dtemp=/tmp/.shar$$
  1227. trap "rm -f $temp $dtemp; exit" 0 1 2 3 15
  1228. cat > $temp <<\!!!
  1229.      234     800    7270 Makefile
  1230.      420    1047    7851 xplot.c
  1231.      143     213    1632 xlibplot.c
  1232.        2       2      64 Imakefile
  1233.      209     738    6675 Makefile
  1234.       89     501    2986 xplot.man
  1235.        7      20     225 Imakefile
  1236.       38     295    1723 README
  1237.     1142    3616   28426 total
  1238. !!!
  1239. wc  xplot/Makefile xplot/xplot.c xplot/xlibplot/xlibplot.c xplot/xlibplot/Imakefile xplot/xlibplot/Makefile xplot/xplot.man xplot/Imakefile xplot/README | sed 's=[^ ]*/==' | diff -b $temp - >$dtemp
  1240. if [ -s $dtemp ]
  1241. then echo "Ouch [diff of wc output]:" ; cat $dtemp
  1242. else echo "No problems found."
  1243. fi
  1244. exit 0
  1245.