home *** CD-ROM | disk | FTP | other *** search
- Path: uunet!island!argv
- From: argv@island.uu.net (Dan Heller)
- Newsgroups: comp.sources.x
- Subject: v04i081: Xplot, Part01/01
- Message-ID: <929@island.uu.net>
- Date: 23 Jul 89 17:19:03 GMT
- Organization: Island Graphics, Marin County, California
- Lines: 1234
- Approved: island!argv@sun.com
-
- Submitted-by: sun!GARP.MIT.EDU!rochester!lassp!arthur
- Posting-number: Volume 4, Issue 81
- Archive-name: xplot/part01
-
-
-
- The following is a very short and simple plot(5) filter for X. It
- brings up a graphics window which stays around until a button
- press after the end-of file is reached on input. It can draw
- interactively.
-
- Arthur Smith
-
- (arpanet) arthur@helios.tn.cornell.edu
- (bitnet) arthur@crnlassp
-
- # This is a shell archive. Remove anything before this line,
- # then unpack it by saving it in a file and typing "sh file".
- #
- # Wrapped by uttu!arthur on Sat Jul 22 04:52:57 EDT 1989
- # Contents: xplot/ xplot/xlibplot/ xplot/Makefile xplot/xplot.c
- # xplot/xlibplot/xlibplot.c xplot/xlibplot/Imakefile
- # xplot/xlibplot/Makefile xplot/xplot.man xplot/Imakefile xplot/README
-
- echo mkdir - xplot
- mkdir xplot
- chmod u=rwx,g=rx,o=rx xplot
-
- echo x - xplot/Makefile
- sed 's/^@//' > "xplot/Makefile" <<'@//E*O*F xplot/Makefile//'
- # Makefile generated by imake - do not edit!
- # $XConsortium: imake.c,v 1.37 88/10/08 20:08:30 jim Exp $
- #
- # The cpp used on this machine replaces all newlines and multiple tabs and
- # spaces in a macro expansion with a single space. Imake tries to compensate
- # for this, but is not always successful.
- #
-
- ###########################################################################
- # X Window System Makefile generated from template file Imake.tmpl
- # $XConsortium: Imake.tmpl,v 1.91 88/10/23 22:37:10 jim Exp $
- #
- # Do not change the body of the imake template file. Server-specific
- # parameters may be set in the appropriate .macros file; site-specific
- # parameters (but shared by all servers) may be set in site.def. If you
- # make any changes, you'll need to rebuild the makefiles using
- # "make World" (at best) or "make Makefile; make Makefiles" (at least) in
- # the top level directory.
- #
- # If your C preprocessor doesn't define any unique symbols, you'll need
- # to set BOOTSTRAPCFLAGS when rebuilding imake (usually when doing
- # "make Makefile", "make Makefiles", or "make World").
- #
- # If you absolutely can't get imake to work, you'll need to set the
- # variables at the top of each Makefile as well as the dependencies at the
- # bottom (makedepend will do this automatically).
- #
-
- ###########################################################################
- # platform-specific configuration parameters - edit Sun.macros to change
-
- # platform: $XConsortium: Sun.macros,v 1.52 88/10/23 11:00:55 jim Exp $
- # operating system: SunOS 3.5
-
- BOOTSTRAPCFLAGS =
- AS = as
- CC = cc
- CPP = /lib/cpp
- LD = ld
- LINT = lint
- INSTALL = install
- TAGS = ctags
- RM = rm -f
- MV = mv
- LN = ln -s
- RANLIB = ranlib
- RANLIBINSTFLAGS = -t
- AR = ar clq
- LS = ls
- LINTOPTS = -axz
- LINTLIBFLAG = -C
- MAKE = make
- STD_CPP_DEFINES =
- STD_DEFINES =
-
- ###########################################################################
- # site-specific configuration parameters - edit site.def to change
-
- # site: $XConsortium: site.def,v 1.16 88/10/12 10:30:24 jim Exp $
-
- ###########################################################################
- # definitions common to all Makefiles - do not edit
-
- SHELL = /bin/sh
-
- DESTDIR =
- USRLIBDIR = $(DESTDIR)/usr/lib
- BINDIR = $(DESTDIR)/usr/bin/X11
- INCDIR = $(DESTDIR)/usr/include/X11
- ADMDIR = $(DESTDIR)/usr/adm
- LIBDIR = $(USRLIBDIR)/X11
- LINTLIBDIR = $(USRLIBDIR)/lint
- FONTDIR = $(LIBDIR)/fonts
- XINITDIR = $(LIBDIR)/xinit
- XDMDIR = $(LIBDIR)/xdm
- UWMDIR = $(LIBDIR)/uwm
- AWMDIR = $(LIBDIR)/awm
- TWMDIR = $(LIBDIR)/twm
- MANPATH = $(DESTDIR)/usr/man
- MANSOURCEPATH = $(MANPATH)/man
- MANDIR = $(MANSOURCEPATH)n
- LIBMANDIR = $(MANSOURCEPATH)3
- XAPPLOADDIR = $(LIBDIR)/app-defaults
-
- INSTBINFLAGS = -m 0755
- INSTUIDFLAGS = -m 4755
- INSTLIBFLAGS = -m 0664
- INSTINCFLAGS = -m 0444
- INSTMANFLAGS = -m 0444
- INSTAPPFLAGS = -m 0444
- INSTKMEMFLAGS = -m 4755
- FCFLAGS = -t
- CDEBUGFLAGS = -O -DPURDUE
-
- PATHSEP = /
- DEPEND = $(DEPENDSRC)/makedepend
- IMAKE = $(IMAKESRC)/imake
- RGB = $(RGBSRC)/rgb
- FC = $(BDFTOSNFSRC)/bdftosnf
- MKFONTDIR = $(MKFONTDIRSRC)/mkfontdir
- MKDIRHIER = $(SCRIPTSSRC)/mkdirhier.sh
-
- CFLAGS = $(CDEBUGFLAGS) $(INCLUDES) $(STD_DEFINES) $(DEFINES)
- LINTFLAGS = $(LINTOPTS) $(INCLUDES) $(STD_DEFINES) $(DEFINES) -DLINT
- LDFLAGS = $(CDEBUGFLAGS) $(SYS_LIBRARIES) $(SYSAUX_LIBRARIES)
- TOP = /usr/src/X11
- CLIENTSRC = $(TOP)/clients
- DEMOSRC = $(TOP)/demos
- LIBSRC = $(TOP)/lib
- FONTSRC = $(TOP)/fonts
- INCLUDESRC = $(TOP)/X11
- SERVERSRC = $(TOP)/server
- UTILSRC = $(TOP)/util
- SCRIPTSSRC = $(UTILSRC)/scripts
- EXAMPLESRC = $(TOP)/examples
- CONTRIBSRC = $(TOP)/contrib
- DOCSRC = $(TOP)/doc
- RGBSRC = $(TOP)/rgb
- DEPENDSRC = $(UTILSRC)/makedepend
- IMAKESRC = $(UTILSRC)/imake
- IRULESRC = $(UTILSRC)/imake.includes
- XLIBSRC = $(LIBSRC)/X
- XMUSRC = $(LIBSRC)/Xmu
- TOOLKITSRC = $(LIBSRC)/Xt
- AWIDGETSRC = $(LIBSRC)/Xaw
- OLDXLIBSRC = $(LIBSRC)/oldX
- BDFTOSNFSRC = $(FONTSRC)/bdftosnf
- MKFONTDIRSRC = $(FONTSRC)/mkfontdir
- EXTENSIONSRC = $(TOP)/extensions
- EXTENSIONLIB = $(EXTENSIONSRC)/lib/libXext.a
- XLIB = $(XLIBSRC)/libX11.a
- XMULIB = $(XMUSRC)/libXmu.a
- OLDXLIB = $(OLDXLIBSRC)/liboldX.a
- XTOOLLIB = $(TOOLKITSRC)/libXt.a
- XAWLIB = $(AWIDGETSRC)/libXaw.a
- LINTXLIB = $(XLIBSRC)/llib-lX11.ln
- LINTXMU = $(XMUSRC)/llib-lXmu.ln
- LINTXTOOL = $(TOOLKITSRC)/llib-lXt.ln
- LINTXAW = $(AWIDGETSRC)/llib-lXaw.ln
- INCLUDES = -I$(TOP)
- MACROFILE = Sun.macros
- ICONFIGFILES = $(IRULESRC)/Imake.tmpl \
- $(IRULESRC)/$(MACROFILE) $(IRULESRC)/site.def
- IMAKE_DEFINES =
- IMAKE_CMD = $(NEWTOP)$(IMAKE) -TImake.tmpl -I$(NEWTOP)$(IRULESRC) \
- -s Makefile $(IMAKE_DEFINES)
- RM_CMD = $(RM) *.CKP *.ln *.BAK *.bak *.o core errs ,* *~ *.a \
- .emacs_* tags TAGS make.log MakeOut
-
- ###########################################################################
- # rules: $XConsortium: Imake.rules,v 1.71 88/10/23 22:46:34 jim Exp $
-
- ###########################################################################
- # start of Imakefile
-
- INCLUDES = -I$(TOP)/usr/include -I$(TOP)/usr/include/X11
- LOCAL_LIBRARIES = $(XAWLIB) $(XMULIB) $(XTOOLLIB) $(XLIB)
- SYS_LIBRARIES = -lm
- SRCS = xplot.c
- OBJS = xplot.o
-
- PROGRAM = xplot
-
- all:: xplot
-
- xplot: $(OBJS) $(LOCAL_LIBRARIES)
- $(RM) $@
- $(CC) -o $@ $(OBJS) $(LOCAL_LIBRARIES) $(LDFLAGS) $(SYSLAST_LIBRARIES)
-
- relink::
- $(RM) $(PROGRAM)
- $(MAKE) $(MFLAGS) $(PROGRAM)
-
- install:: xplot
- $(INSTALL) -c $(INSTALLFLAGS) xplot $(BINDIR)
-
- install.man:: xplot.man
- $(INSTALL) -c $(INSTMANFLAGS) xplot.man $(MANDIR)/xplot.n
-
- depend:: $(DEPEND)
-
- depend::
- $(DEPEND) -s "# DO NOT DELETE" -- $(CFLAGS) -- $(SRCS)
-
- $(DEPEND):
- @echo "making $@"; \
- cd $(DEPENDSRC); $(MAKE)
-
- clean::
- $(RM) $(PROGRAM)
-
- ###########################################################################
- # Imake.tmpl common rules for all Makefiles - do not edit
-
- emptyrule::
-
- clean::
- $(RM_CMD) \#*
-
- Makefile:: $(IMAKE)
-
- Makefile:: Imakefile \
- $(IRULESRC)/Imake.tmpl \
- $(IRULESRC)/Imake.rules \
- $(IRULESRC)/site.def \
- $(IRULESRC)/$(MACROFILE)
- -@if [ -f Makefile ]; then \
- echo "$(RM) Makefile.bak; $(MV) Makefile Makefile.bak"; \
- $(RM) Makefile.bak; $(MV) Makefile Makefile.bak; \
- else exit 0; fi
- $(IMAKE_CMD) -DTOPDIR=$(TOP)
-
- $(IMAKE):
- @echo "making $@"; \
- cd $(IMAKESRC); $(MAKE) BOOTSTRAPCFLAGS=$(BOOTSTRAPCFLAGS)
-
- tags::
- $(TAGS) -w *.[ch]
- $(TAGS) -xw *.[ch] > TAGS
-
- ###########################################################################
- # empty rules for directories that do not have SUBDIRS - do not edit
-
- install::
- @echo "install done"
-
- install.man::
- @echo "install.man done"
-
- Makefiles::
-
- ###########################################################################
- # dependencies generated by makedepend
-
- @//E*O*F xplot/Makefile//
- chmod u=rw,g=r,o=r xplot/Makefile
-
- echo x - xplot/xplot.c
- sed 's/^@//' > "xplot/xplot.c" <<'@//E*O*F xplot/xplot.c//'
- #include <stdio.h>
- #include <math.h>
- #include <string.h>
- #include <sgtty.h>
- #include <fcntl.h>
- #include <errno.h>
- #include <X11/Xlib.h>
- #include <X11/Intrinsic.h>
- #include <X11/StringDefs.h>
- #include <X11/Label.h>
-
- #define LINE 512
- char buf[LINE];
- char cptr[LINE];
- char *prog;
- char *index();
-
- Display *dpy;
- Window widgetwin;
- Pixmap pixmap;
- GC gc;
- XGCValues gcv;
- XtInputId inid;
- /*XtAppContext app_context; */
- int rwidth = 500, rheight = 500;
-
- short xmin, ymax;
- double xfactor, yfactor;
-
- #define MAPX(x) (int) (((x) - xmin) * xfactor)
- #define MAPY(y) (int) ((ymax - (y)) * yfactor)
-
- int spaceset = 0;
- short curpt[] = {0,0};
-
- FILE *instrm = stdin;
- int len = 0;
- int endinp;
- char *curp;
-
- Arg wargs[20];
- Widget toplevel;
- Widget child;
-
- main(argc,argv)
- int argc;
- char **argv;
- {
- struct sgttyb gp;
- short old;
- int fd;
- int argf;
-
- prog = argv[0];
- fd = fileno(instrm);
-
- gtty(fd,&gp);
- old = gp.sg_flags;
- gp.sg_flags |= (CBREAK);
- stty(fd,&gp);
-
- fcntl(fd,F_GETFL,argf);
- fcntl(fd,F_SETFL, argf|O_NDELAY);
-
- openpl(argc,argv);
-
- fcntl(fd,F_SETFL,argf);
- gp.sg_flags = old;
- stty(fd,&gp);
- }
-
- doplot(client_data,fds,id)
- caddr_t client_data;
- int *fds; /* None of these arguments are actually used... */
- int *id;
- {
- char c;
- short x[6];
- void buttonhandler();
-
- while(readit(instrm)){
- while((len > 0) && (!endinp)){
- len--;
- c = *curp++;
- /* printf("%c",c); */
- switch(c){
- case 'm': /* Move */
- if (getcoords(x,2,instrm))
- move(x[0],x[1]);
- break;
- case 'n': /* Continue */
- if (getcoords(x,2,instrm))
- cont(x[0],x[1]);
- break;
- case 'p': /* Plot */
- if (getcoords(x,2,instrm))
- point(x[0],x[1]);
- break;
- case 'l': /* Draw Line */
- if (getcoords(x,4,instrm))
- line(x[0],x[1],x[2],x[3]);
- break;
- case 't': /* Label */
- if (getstring(buf,instrm))
- label(buf);
- break;
- case 'a': /* Arc */
- if (getcoords(x,6,instrm))
- arc(x[0],x[1],x[2],x[3],x[4],x[5]);
- break;
- case 'c': /* Circle */
- if (getcoords(x,3,instrm))
- circle(x[0],x[1],x[2]);
- break;
- case 'e': /* Erase */
- erase();
- break;
- case 'f': /* Linemod */
- if (getstring(buf,instrm))
- linemod(buf);
- break;
- case 's': /* Space */
- if (getcoords(x,4,instrm))
- space(x[0],x[1],x[2],x[3]);
- break;
- default:
- printf("Error?: character = %d\n",c);
- break;
- }
- }
- }
- if (errno != EWOULDBLOCK){
- if (fork()) exit(0);
- XtRemoveInput(inid);
- XtAddEventHandler(toplevel,ButtonPressMask,False,
- buttonhandler, NULL);
- }
- XClearArea(dpy,widgetwin,0,0,0,0,True);
- }
-
- void buttonhandler(w,client_data,event)
- Widget w;
- caddr_t client_data;
- XEvent *event;
- {
- closepl();
- exit(0);
- }
-
- drawellipse(x,y,r1,r2)
- int x,y,r1,r2;
- {
- /* XPoint *points;
- int i,npoints;
- double delta;
-
- npoints = 2 + abs(r1) + abs(r2);
- points = (XPoint *) (malloc(npoints * sizeof(XPoint)));
- delta = 2 * M_PI / (npoints - 1);
- for (i=0;i<npoints-1;i++){
- points[i].x = x + r1 * cos(i * delta);
- points[i].y = y + r2 * sin(i * delta);
- }
- points[npoints-1].x = x + r1;
- points[npoints-1].y = y ;
- XDrawLines(dpy,pixmap,gc,points,npoints,CoordModeOrigin);
- */
- XDrawArc(dpy,pixmap,gc, x - r1, y - r2, 2 * r1, 2 * r2, 0,
- 64 * 360 - 1);
- }
-
- drawarc(x,y,x0,y0,x1,y1)
- int x,y,x0,y0,x1,y1;
- {
- int a0,b0,a1,b1;
- int a02,b02,a12,b12;
- double ar,br,ar2,br2;
- double theta0,theta1;
-
- a0 = x0 - x;
- a02 = a0*a0;
- a1 = x1 - x;
- a12 = a1*a1;
- b0 = y0 - y;
- b02 = b0*b0;
- b1 = y1 - y;
- b12 = b1*b1;
- if (b12 == b02) return 0;
- ar2 = (a02*b12 - a12*b02)/(b12 - b02);
- if (ar2 < 0) return 0;
- ar = sqrt(ar2);
- br2 = (b02*a12 - b12*a02)/(a12 - a02);
- if (br2 < 0) return 0;
- br = sqrt(br2);
- theta0 = -atan2(b0/br,a0/ar);
- theta1 = -atan2(b1/br,a1/ar);
- if (theta0 > theta1) theta1 += 2 * M_PI;
- if (theta0 < 0){
- theta0 += 2 * M_PI;
- theta1 += 2 * M_PI;
- }
- XDrawArc(dpy,pixmap,gc,(int) (x - ar), (int) (y - br),
- (int)(2 * ar), (int) (2 * br), (int) (64* theta0
- * 180/M_PI), (int) (64 * (theta1 - theta0) * 180/M_PI));
- }
-
- /* Openpl is supposed to set up the X window stuff, by creating a
- widget, in which the image is to be put in a background pixmap. */
-
- openpl(argc,argv)
- int argc;
- char **argv;
- {
- int i, dimset, narg;
-
- dimset = 0;
- for (i=0;i<argc;i++){
- if (strcmp(argv[i],"-geometry"))
- continue;
- else
- {
- dimset = 1;
- rwidth = atoi(argv[i+1]);
- rheight = atoi(1+index(argv[i+1],'x'));
- }
- }
- toplevel = XtInitialize(argv[0], "xplot",NULL, 0, &argc, argv);
- dpy = XtDisplay(toplevel);
- /* app_context = XtCreateApplicationContext(); */
-
- pixmap = XCreatePixmap(dpy,DefaultRootWindow(dpy), rwidth, rheight, 1);
- gc = XCreateGC(dpy, pixmap, 0L, &gcv);
- XSetForeground(dpy,gc,1);
-
- XtSetArg(wargs[0], XtNbitmap, pixmap);
- narg = 1;
- if (dimset == 0) {
- XtSetArg(wargs[1], XtNheight, rheight);
- XtSetArg(wargs[2], XtNwidth, rwidth);
- narg = 3;
- }
- child = XtCreateManagedWidget(prog, labelWidgetClass,
- toplevel, wargs, narg);
- /* XtCreateManagedWidget(prog, labelWidgetClass, child, wargs, narg); */
- XtRealizeWidget(toplevel);
- widgetwin = XtWindow(child);
- inid = XtAddInput(fileno(instrm), XtInputReadMask, doplot, NULL);
- XtMainLoop();
- }
-
- /* Erase should wait for the current page to be absorbed, before creating
- a new one (presumably by erasing the pixmap and then redrawing the widget.*/
- erase()
- {
- /* Wait for button event */
- /* Clear pixmap */
- XSetForeground(dpy,gc,0);
- XFillRectangle(dpy,pixmap,gc,0,0,rwidth,rheight);
- XSetForeground(dpy,gc,1);
- }
-
- /* Don't know how I'm going to do this ! */
-
- label(s)
- char *s;
- {
- XDrawString(dpy,pixmap,gc,MAPX(curpt[0]),MAPY(curpt[1]),s,
- strlen(s) - 1);
- }
-
- line(x1,y1,x2,y2)
- short x1,y1,x2,y2;
- {
- curpt[0] = x2;
- curpt[1] = y2;
- if (spaceset == 0) return;
- XDrawLine(dpy,pixmap,gc, MAPX(x1), MAPY(y1), MAPX(x2), MAPY(y2));
- }
-
- circle(x,y,r)
- short x,y,r;
- {
-
- if (spaceset == 0) return;
- drawellipse(MAPX(x), MAPY(y), (int) (r * xfactor), (int) (r*yfactor));
- }
-
-
- arc(x,y,x0,y0,x1,y1)
- short x,y,x0,y0,x1,y1;
- {
- if (spaceset == 0) return;
- drawarc(MAPX(x), MAPY(y), MAPX(x0), MAPY(y0), MAPX(x1), MAPY(y1));
- }
-
- move(x,y)
- short x,y;
- {
- curpt[0] = x;
- curpt[1] = y;
- }
-
- cont(x,y)
- short x,y;
- {
- line(curpt[0],curpt[1],x,y);
- }
-
- point(x,y)
- short x,y;
- {
- curpt[0] = x;
- curpt[1] = y;
- if (spaceset == 0) return;
- XDrawPoint(dpy,pixmap,gc, MAPX(x), MAPY(y));
- }
-
- linemod(s)
- char *s;
- {
- int line_style;
-
- line_style = gcv.line_style;
-
- if (!strcmp(s,"solid\n"))
- line_style = LineSolid;
- else if ((!strcmp(s,"dotted\n"))||(!strcmp(s,"shortdashed\n")))
- line_style = LineOnOffDash;
- else if ((!strcmp(s, "longdashed\n"))||(!strcmp(s,"dotdashed\n")))
- line_style = LineDoubleDash;
- gcv.line_style = line_style;
- XChangeGC(dpy, gc, GCLineStyle, &gcv);
- }
-
- space(x0,y0,x1,y1)
- short x0,y0,x1,y1;
- {
- spaceset = 1;
- xmin = x0;
- ymax = y1;
- xfactor = ((double) rwidth)/(x1 + 1 - x0);
- yfactor = ((double) rheight)/(y1 + 1 - y0);
- }
-
- closepl()
- {
- XFreeGC(dpy,gc);
- XFreePixmap(dpy,pixmap);
- XtDestroyWidget(toplevel);
- }
-
- int getcoords(x,n,strm)
- short *x;
- int n;
- FILE *strm;
- {
- unsigned char c,d;
- int i;
-
- while (len < 2*n) {
- len++;
- curp--;
- if (!readit(strm))
- return 0;
- len--;
- curp++;
- }
- len -= 2 * n;
- for (i=0;i< n;i++){
- c = *curp++;
- d = *curp++;
- x[i] = (short) ((d << 8) | c);
- /* printf(" %d",x[i]); */
- }
- /* printf("\n"); */
- return 1;
- }
-
- int getstring(ptr,strm)
- char *ptr;
- FILE *strm;
- {
- char *cp;
- int lenp;
-
- while ((cp = index(curp,'\n')) == NULL){
- len++;
- curp--;
- if (!readit(strm))
- return 0;
- len--;
- curp++;
- }
- lenp = cp - curp + 1;
- bcopy(curp,ptr,lenp);
- ptr[lenp] = 0;
- len -= lenp;
- curp += lenp;
- /* printf("%s",ptr); */
- return lenp;
- }
-
- /* Have to do my own buffering: */
-
- int readit(strm)
- FILE *strm;
- {
- int lenp;
-
- endinp = 0;
- if (len > 0)
- bcopy(curp, cptr, len);
- if ((lenp = fread(cptr+len, 1, LINE - len, strm)) == 0){
- endinp = 1;
- return 0;
- }
- len += lenp;
- curp = cptr;
- return 1;
- }
- @//E*O*F xplot/xplot.c//
- chmod u=rw,g=r,o=r xplot/xplot.c
-
- echo mkdir - xplot/xlibplot
- mkdir xplot/xlibplot
- chmod u=rwx,g=rx,o=rx xplot/xlibplot
-
- echo x - xplot/xlibplot/xlibplot.c
- sed 's/^@//' > "xplot/xlibplot/xlibplot.c" <<'@//E*O*F xplot/xlibplot/xlibplot.c//'
- #include <stdio.h>
- #include <string.h>
-
- #define LINE 256
-
- #define XPLOT "/usr/contrib/bin/xplot"
-
- char xplotlib_buf[LINE];
-
- FILE *xplotlib_outstrm;
-
- openpl()
- {
- xplotlib_outstrm = popen(XPLOT, "w");
- }
-
- closepl()
- {
- pclose(xplotlib_outstrm);
- }
-
- erase()
- {
- putentry('e',0);
- }
-
- label(s)
- char *s;
- {
- strcpy(xplotlib_buf,s);
- putentry('t',strlen(xplotlib_buf));
- }
-
- line(x1,y1,x2,y2)
- int x1,y1,x2,y2;
- {
- short x[6];
-
- x[0] = x1;
- x[1] = y1;
- x[2] = x2;
- x[3] = y2;
- convertcoords(x,4);
- putentry('l',8);
- }
-
- circle(xin,y,r)
- int xin,y,r;
- {
- short x[6];
-
- x[0] = xin;
- x[1] = y;
- x[2] = r;
- convertcoords(x,3);
- putentry('c',6);
- }
-
- arc(xin,y,x0,y0,x1,y1)
- {
- short x[6];
- x[0] = xin;
- x[1] = y;
- x[2] = x0;
- x[3] = y0;
- x[4] = x1;
- x[5] = y1;
- convertcoords(x,6);
- putentry('a',12);
- }
-
- move(xin,y)
- int xin,y;
- {
- short x[6];
- x[0] = xin;
- x[1] = y;
- convertcoords(x,2);
- putentry('m',4);
- }
-
- cont(xin,y)
- int xin,y;
- {
- short x[6];
- x[0] = xin;
- x[1] = y;
- convertcoords(x,2);
- putentry('n',4);
- }
-
- point(xin,y)
- int xin,y;
- {
- short x[6];
- x[0] = xin;
- x[1] = y;
- convertcoords(x,2);
- putentry('p',4);
- }
-
- linemod(s)
- char *s;
- {
- strcpy(xplotlib_buf,s);
- putentry('f',strlen(xplotlib_buf));
- }
-
- space(x0,y0,x1,y1)
- int x0,y0,x1,y1;
- {
- short x[6];
-
- x[0] = x0;
- x[1] = y0;
- x[2] = x1;
- x[3] = y1;
- convertcoords(x,4);
- putentry('s',8);
- }
-
- convertcoords(x,n)
- short *x;
- int n;
- {
- int i;
-
- for (i=0;i<n;i++){
- xplotlib_buf[2*i] = (unsigned char) x[i];
- xplotlib_buf[2*i+1] = (unsigned char) (x[i] >> 8) ;
- }
- }
-
- putentry(c,n)
- char c;
- int n;
- {
- int i;
-
- putc(c,xplotlib_outstrm);
- fwrite(xplotlib_buf, n, 1, xplotlib_outstrm);
- fflush(xplotlib_outstrm);
- }
- @//E*O*F xplot/xlibplot/xlibplot.c//
- chmod u=rw,g=r,o=r xplot/xlibplot/xlibplot.c
-
- echo x - xplot/xlibplot/Imakefile
- sed 's/^@//' > "xplot/xlibplot/Imakefile" <<'@//E*O*F xplot/xlibplot/Imakefile//'
- NormalLibraryObjectRule()
- NormalLibraryTarget(xplot,xlibplot.o)
- @//E*O*F xplot/xlibplot/Imakefile//
- chmod u=rw,g=r,o=r xplot/xlibplot/Imakefile
-
- echo x - xplot/xlibplot/Makefile
- sed 's/^@//' > "xplot/xlibplot/Makefile" <<'@//E*O*F xplot/xlibplot/Makefile//'
- # Makefile generated by imake - do not edit!
- # $XConsortium: imake.c,v 1.37 88/10/08 20:08:30 jim Exp $
- #
- # The cpp used on this machine replaces all newlines and multiple tabs and
- # spaces in a macro expansion with a single space. Imake tries to compensate
- # for this, but is not always successful.
- #
-
- ###########################################################################
- # X Window System Makefile generated from template file Imake.tmpl
- # $XConsortium: Imake.tmpl,v 1.91 88/10/23 22:37:10 jim Exp $
- #
- # Do not change the body of the imake template file. Server-specific
- # parameters may be set in the appropriate .macros file; site-specific
- # parameters (but shared by all servers) may be set in site.def. If you
- # make any changes, you'll need to rebuild the makefiles using
- # "make World" (at best) or "make Makefile; make Makefiles" (at least) in
- # the top level directory.
- #
- # If your C preprocessor doesn't define any unique symbols, you'll need
- # to set BOOTSTRAPCFLAGS when rebuilding imake (usually when doing
- # "make Makefile", "make Makefiles", or "make World").
- #
- # If you absolutely can't get imake to work, you'll need to set the
- # variables at the top of each Makefile as well as the dependencies at the
- # bottom (makedepend will do this automatically).
- #
-
- ###########################################################################
- # platform-specific configuration parameters - edit Sun.macros to change
-
- # platform: $XConsortium: Sun.macros,v 1.52 88/10/23 11:00:55 jim Exp $
- # operating system: SunOS 3.5
-
- BOOTSTRAPCFLAGS =
- AS = as
- CC = cc
- CPP = /lib/cpp
- LD = ld
- LINT = lint
- INSTALL = install
- TAGS = ctags
- RM = rm -f
- MV = mv
- LN = ln -s
- RANLIB = ranlib
- RANLIBINSTFLAGS = -t
- AR = ar clq
- LS = ls
- LINTOPTS = -axz
- LINTLIBFLAG = -C
- MAKE = make
- STD_CPP_DEFINES =
- STD_DEFINES =
-
- ###########################################################################
- # site-specific configuration parameters - edit site.def to change
-
- # site: $XConsortium: site.def,v 1.16 88/10/12 10:30:24 jim Exp $
-
- ###########################################################################
- # definitions common to all Makefiles - do not edit
-
- SHELL = /bin/sh
-
- DESTDIR =
- USRLIBDIR = $(DESTDIR)/usr/lib
- BINDIR = $(DESTDIR)/usr/bin/X11
- INCDIR = $(DESTDIR)/usr/include/X11
- ADMDIR = $(DESTDIR)/usr/adm
- LIBDIR = $(USRLIBDIR)/X11
- LINTLIBDIR = $(USRLIBDIR)/lint
- FONTDIR = $(LIBDIR)/fonts
- XINITDIR = $(LIBDIR)/xinit
- XDMDIR = $(LIBDIR)/xdm
- UWMDIR = $(LIBDIR)/uwm
- AWMDIR = $(LIBDIR)/awm
- TWMDIR = $(LIBDIR)/twm
- MANPATH = $(DESTDIR)/usr/man
- MANSOURCEPATH = $(MANPATH)/man
- MANDIR = $(MANSOURCEPATH)n
- LIBMANDIR = $(MANSOURCEPATH)3
- XAPPLOADDIR = $(LIBDIR)/app-defaults
-
- INSTBINFLAGS = -m 0755
- INSTUIDFLAGS = -m 4755
- INSTLIBFLAGS = -m 0664
- INSTINCFLAGS = -m 0444
- INSTMANFLAGS = -m 0444
- INSTAPPFLAGS = -m 0444
- INSTKMEMFLAGS = -m 4755
- FCFLAGS = -t
- CDEBUGFLAGS = -O -DPURDUE
-
- PATHSEP = /
- DEPEND = $(DEPENDSRC)/makedepend
- IMAKE = $(IMAKESRC)/imake
- RGB = $(RGBSRC)/rgb
- FC = $(BDFTOSNFSRC)/bdftosnf
- MKFONTDIR = $(MKFONTDIRSRC)/mkfontdir
- MKDIRHIER = $(SCRIPTSSRC)/mkdirhier.sh
-
- CFLAGS = $(CDEBUGFLAGS) $(INCLUDES) $(STD_DEFINES) $(DEFINES)
- LINTFLAGS = $(LINTOPTS) $(INCLUDES) $(STD_DEFINES) $(DEFINES) -DLINT
- LDFLAGS = $(CDEBUGFLAGS) $(SYS_LIBRARIES) $(SYSAUX_LIBRARIES)
- TOP = /usr/src/X11
- CLIENTSRC = $(TOP)/clients
- DEMOSRC = $(TOP)/demos
- LIBSRC = $(TOP)/lib
- FONTSRC = $(TOP)/fonts
- INCLUDESRC = $(TOP)/X11
- SERVERSRC = $(TOP)/server
- UTILSRC = $(TOP)/util
- SCRIPTSSRC = $(UTILSRC)/scripts
- EXAMPLESRC = $(TOP)/examples
- CONTRIBSRC = $(TOP)/contrib
- DOCSRC = $(TOP)/doc
- RGBSRC = $(TOP)/rgb
- DEPENDSRC = $(UTILSRC)/makedepend
- IMAKESRC = $(UTILSRC)/imake
- IRULESRC = $(UTILSRC)/imake.includes
- XLIBSRC = $(LIBSRC)/X
- XMUSRC = $(LIBSRC)/Xmu
- TOOLKITSRC = $(LIBSRC)/Xt
- AWIDGETSRC = $(LIBSRC)/Xaw
- OLDXLIBSRC = $(LIBSRC)/oldX
- BDFTOSNFSRC = $(FONTSRC)/bdftosnf
- MKFONTDIRSRC = $(FONTSRC)/mkfontdir
- EXTENSIONSRC = $(TOP)/extensions
- EXTENSIONLIB = $(EXTENSIONSRC)/lib/libXext.a
- XLIB = $(XLIBSRC)/libX11.a
- XMULIB = $(XMUSRC)/libXmu.a
- OLDXLIB = $(OLDXLIBSRC)/liboldX.a
- XTOOLLIB = $(TOOLKITSRC)/libXt.a
- XAWLIB = $(AWIDGETSRC)/libXaw.a
- LINTXLIB = $(XLIBSRC)/llib-lX11.ln
- LINTXMU = $(XMUSRC)/llib-lXmu.ln
- LINTXTOOL = $(TOOLKITSRC)/llib-lXt.ln
- LINTXAW = $(AWIDGETSRC)/llib-lXaw.ln
- INCLUDES = -I$(TOP)
- MACROFILE = Sun.macros
- ICONFIGFILES = $(IRULESRC)/Imake.tmpl \
- $(IRULESRC)/$(MACROFILE) $(IRULESRC)/site.def
- IMAKE_DEFINES =
- IMAKE_CMD = $(NEWTOP)$(IMAKE) -TImake.tmpl -I$(NEWTOP)$(IRULESRC) \
- -s Makefile $(IMAKE_DEFINES)
- RM_CMD = $(RM) *.CKP *.ln *.BAK *.bak *.o core errs ,* *~ *.a \
- .emacs_* tags TAGS make.log MakeOut
-
- ###########################################################################
- # rules: $XConsortium: Imake.rules,v 1.71 88/10/23 22:46:34 jim Exp $
-
- ###########################################################################
- # start of Imakefile
-
- @.c.o:
- $(RM) $@
- $(CC) -c $(CFLAGS) $*.c
-
- all:: libxplot.a
-
- libxplot.a: xlibplot.o
- $(RM) $@
- $(AR) $@ xlibplot.o
- $(RANLIB) $@
-
- ###########################################################################
- # Imake.tmpl common rules for all Makefiles - do not edit
-
- emptyrule::
-
- clean::
- $(RM_CMD) \#*
-
- Makefile:: $(IMAKE)
-
- Makefile:: Imakefile \
- $(IRULESRC)/Imake.tmpl \
- $(IRULESRC)/Imake.rules \
- $(IRULESRC)/site.def \
- $(IRULESRC)/$(MACROFILE)
- -@if [ -f Makefile ]; then \
- echo "$(RM) Makefile.bak; $(MV) Makefile Makefile.bak"; \
- $(RM) Makefile.bak; $(MV) Makefile Makefile.bak; \
- else exit 0; fi
- $(IMAKE_CMD) -DTOPDIR=$(TOP)
-
- $(IMAKE):
- @echo "making $@"; \
- cd $(IMAKESRC); $(MAKE) BOOTSTRAPCFLAGS=$(BOOTSTRAPCFLAGS)
-
- tags::
- $(TAGS) -w *.[ch]
- $(TAGS) -xw *.[ch] > TAGS
-
- ###########################################################################
- # empty rules for directories that do not have SUBDIRS - do not edit
-
- install::
- @echo "install done"
-
- install.man::
- @echo "install.man done"
-
- Makefiles::
-
- ###########################################################################
- # dependencies generated by makedepend
-
- @//E*O*F xplot/xlibplot/Makefile//
- chmod u=rw,g=r,o=r xplot/xlibplot/Makefile
-
- echo x - xplot/xplot.man
- sed 's/^@//' > "xplot/xplot.man" <<'@//E*O*F xplot/xplot.man//'
- @.TH XPLOT 1 "13 October 1988" "X Version 11"
- @.SH NAME
- xplot - plot(5) filter for X
- @.SH SYNOPSIS
- @.B xplot
- [-\fItoolkitoption\fP ...] [-option ...]
- @.SH DESCRIPTION
- The
- @.I xplot
- program brings up a window for viewing plot(5) output, for example
- from the
- @.I axis
- program.
- The program works interactively, continuing to
- accept input from stdin and plotting as it goes, until it reaches
- an end of file, at which point it waits around for a mouse button
- press to kill the window.
- @.SH OPTIONS
- @.I Xplot
- accepts all of the standard X toolkit command line options, and the initial
- geometry specification determines the resolution, with a default
- geometry of 500x500 pixels.
- @.PP
- The following standard X Toolkit command line arguments may be used with
- @.I xplot:
- @.TP 8
- @.B \-bg \fIcolor\fP
- This option specifies the color to use for the background of the window.
- The default is \fIwhite\fP.
- @.TP 8
- @.B \-bd \fIcolor\fP
- This option specifies the color to use for the border of the window.
- The default is \fIblack\fP.
- @.TP 8
- @.B \-bw \fInumber\fP
- This option specifies the width in pixels of the border surrounding the window.
- @.TP 8
- @.B \-fg \fIcolor\fP
- This option specifies the color to use for displaying text. The default is
- \fIblack\fP.
- @.TP 8
- @.B \-fn \fIfont\fP
- This option specifies the font to be used for displaying normal text. The
- default is \fI6x10\fP.
- @.TP 8
- @.B \-rv
- This option indicates that reverse video should be simulated by swapping
- the foreground and background colors.
- @.TP 8
- @.B \-geometry \fIgeometry\fP
- This option specifies the prefered size and position of the clock window.
- @.TP 8
- @.B \-display \fIhost\fP:\fIdisplay\fP
- This option specifies the X server to contact.
- @.TP 8
- @.B \-xrm \fIresourcestring\fP
- This option specifies a resource string to be used.
- @.SH X DEFAULTS
- This program uses the
- @.I Label
- widget in the X Toolkit. It understands all of the core resource names and
- classes as well as:
- @.PP
- @.TP 8
- @.B width (\fPclass\fB Width)
- Specifies the width of the clock. The default for analog clocks is 164
- pixels; the default for digital clocks is whatever is needed to hold the
- clock when displayed in the chosen font.
- @.TP 8
- @.B height (\fPclass\fB Height)
- Specifies the height of the clock. The default for analog clocks is 164
- pixels; the default for digital clocks is whatever is needed to hold the
- clock when displayed in the chosen font.
- @.TP 8
- @.B reverseVideo (\fPclass\fB ReverseVideo)
- Specifies that the foreground and background colors should be reversed.
- @.SH "SEE ALSO"
- X(1), plot(5), psun(1), axis(1), Athena Label widget
- @.SH BUGS
- @.I Xplot
- works fine. No bugs at all. Right. Actually there are several things
- that ought to be changed, for example the reversed byte order in
- plot(5) format (NOT MY FAULT), and maybe it will soon be extended
- to the superplot format (I'll have to look over that stuff carefully
- though), and probably also to return mouse position and anything
- else the locals feel they need.
- @.PP
- @.SH AUTHORS
- Arthur Smith (Lassp, Cornell University)
- @//E*O*F xplot/xplot.man//
- chmod u=rw,g=r,o=r xplot/xplot.man
-
- echo x - xplot/Imakefile
- sed 's/^@//' > "xplot/Imakefile" <<'@//E*O*F xplot/Imakefile//'
- INCLUDES = -I$(TOP)/usr/include -I$(TOP)/usr/include/X11
- LOCAL_LIBRARIES = $(XAWLIB) $(XMULIB) $(XTOOLLIB) $(XLIB)
- SYS_LIBRARIES = -lm
- SRCS = xplot.c
- OBJS = xplot.o
-
- ComplexProgramTarget(xplot)
- @//E*O*F xplot/Imakefile//
- chmod u=rw,g=r,o=r xplot/Imakefile
-
- echo x - xplot/README
- sed 's/^@//' > "xplot/README" <<'@//E*O*F xplot/README//'
- RATIONALE
-
- Why xplot, when we already have so many graphics programs?
- Well, first of all it is a simple, straightforward, plot (5)
- filter. No fancy buttons or options or silly syntax. Just
- a plain old filter. However, it is implemented as an Athena
- Labelwidget, so of course all the usual XToolkit options are
- available.
- When first called, it immediately brings up a blank window,
- and as plot(5) data appears on the input stream it draws
- the stuff right away (it uses CBREAK mode). This means it
- can be used either interactively, with a pipe, or with
- a preprocessed file. We have used it here with the data
- processing program "dra", which allows interective plotting
- and manipulation of the data. Xplot draws in the background
- pixmap of the window, so that redrawing is very fast (compared
- with an xterm tektronix window for example). The disadvantage
- of this, of course (there had to be one) is that on resizing,
- the plot does not resize with the window, but retains its
- original shape (it is properly centered though). Xplot is in general
- much more convenient than the standard Tek window, since several
- different windows can be maintained at once, to compare different
- sets of data, for example. And you don't lose control of your
- window. Each xplot window is destroyed by a mouse button press
- anywhere, but not until EOF has been reached on the input stream.
-
- PLOT (3X) LIBRARY
-
- The subdirectory xlibplot contains the standard plot(3x)
- routines so that xplot can be called up from within any
- C program, just by linking to this library.
-
-
- COMPILATION
-
- Just make Makefile, then make xplot. If you don't have imake
- and the X util sources you may have to edit the Makefile, but it
- should be clear what to do.
- @//E*O*F xplot/README//
- chmod u=rw,g=r,o=r xplot/README
-
- echo Inspecting for damage in transit...
- temp=/tmp/shar$$; dtemp=/tmp/.shar$$
- trap "rm -f $temp $dtemp; exit" 0 1 2 3 15
- cat > $temp <<\!!!
- 234 800 7270 Makefile
- 420 1047 7851 xplot.c
- 143 213 1632 xlibplot.c
- 2 2 64 Imakefile
- 209 738 6675 Makefile
- 89 501 2986 xplot.man
- 7 20 225 Imakefile
- 38 295 1723 README
- 1142 3616 28426 total
- !!!
- 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
- if [ -s $dtemp ]
- then echo "Ouch [diff of wc output]:" ; cat $dtemp
- else echo "No problems found."
- fi
- exit 0
-