jgraph-83.orig/ 42775 1750 50 0 6273277667 12007 5ustar osirissrcjgraph-83.orig/MSDOS.help100664 1750 50 501 6273276347 13607 0ustar osirissrcThis from Alan S. Raskin: You may be interested in knowing what it takes to get jgraph to compile MS-DOS/MS-QuickC: 1) Ignore all of the "function should return a value" warnings. :-) 2) Use the blank VMS templates for popen and pclose in token.c 3) Define float=double to avoid math-overflow run-time errors. -Alan jgraph-83.orig/NeXT.help100664 1750 50 422 6273276347 13542 0ustar osirissrcTo compile jgraph on the NeXT machines, compile with -DLCC. This will define LCC in jgraph.h and token.c so that will be included. Otherwise, the compilation will go fine, but there will be type conversion errors in token.c which will give bogus output. Jim jgraph-83.orig/README100664 1750 50 4203 6273276347 12753 0ustar osirissrc$Revision: 8.3 $ Jgraph takes the description of a graph or graphs in the standard input, and produces a postscript file on the standard output. Jgraph is ideal for plotting any mixture of scatter point graphs, line graphs, and/or bar graphs, and embedding the output into LaTeX, or any other text processing system which can read postscript. The graph description language is simple enough to get nice looking graphs with a minimum of effort, yet powerful enough to give the user the flexibility to tailor the appearance of the graph to his or her individual preferences. This includes plotting multiple graphs and laying them out separately on the page (or pages). The program is written in C, and shouldn't take anything too fancy or machine-dependent. It has been tested on DECstations, sun3's, and sparc's (and is being used on many other types of machines, including those running VMS and DOS). There is a makefile, a man page (in jgraph.1), source code, and example graphs. Jgraph is available via anonymous ftp to princeton.edu, in the file pub/jgraph.Z. This file is a compressed shell bundle file. Jgraph is also available from netlib, a mail archive server. To acquire jgraph from netlib, send a mail message to netlib@ornl.gov with nothing but the text: send jgraph.shar from misc It will respond by mailing you messages which comprise the file jgraph.shar. To extract jgraph.shar from these messages, first save each one into a file. Then for each of these files, strip off all the lines up to but not including the '#!/bin/sh' line. Then run /bin/sh on each file. When you're done, you should be left with the file jgraph.shar, upon which you then run /bin/sh -- this will produce all the jgraph source files. There is also a mailing list in which I inform users directly about bug fixes. This is for those who don't read comp.sources.misc, or those who would like to hear about minor bug fixes which I haven't posted as a patch to comp.sources.misc. Please send me comments and/or bug reports. Author: Jim Plank Email: jsp@princeton.edu USmail: Department of Computer Science Princeton University 35 Olden St. Princeton, NJ 08544-2087 jgraph-83.orig/acc.jgr100664 1750 50 1321 6273276347 13323 0ustar osirissrc(* Graph #6: Kbytes processed each second *) newgraph yaxis size 2.5 min 0 max 100 label fontsize 8 : Percentage of bus utilization xaxis size 1.8 min 0 max 5 no_draw_hash_marks no_draw_axis_label no_draw_hash_labels (* 100% of utilization == 6510.4166 Kb/sec *) newcurve label : DB marktype xbar fill .9 marksize .4 pts 1 3.3573 (* 218.5792 Kb/sec *) newcurve label : QS marktype xbar fill .6 marksize .4 pts 2 8.0665 (* 525.1688 Kb/sec *) newcurve label : GE marktype xbar fill .3 pattern stripe 40 marksize .4 pts 3 27.9602 (* 518.2473 Kb/sec *) newcurve label : RNG marktype xbar fill 0 pattern stripe marksize .4 pts 4 8.2876 (* 539.5619 Kb/sec *) jgraph-83.orig/acc.tex100664 1750 50 250 6273276347 13321 0ustar osirissrc \documentstyle[12pt]{report} \input{psfig} \begin{document} A sample bar graph \begin{figure}[h] \centerline{\psfig{figure=acc.eps}} \end{figure} \end{document} jgraph-83.orig/ad.jgr100664 1750 50 732 6273276347 13146 0ustar osirissrcnewgraph xaxis min 0 max 5.5 size 5.5 nodraw yaxis min 0 max 2.8 size 2.8 nodraw (* newcurve eps cube.eps marksize 1.25 2.8 pts .6 1.4 newcurve eps disk.eps marksize .8 .8 pts *) newcurve eps cube.eps marksize 0 0 pts .6 1.4 newcurve eps disk.eps marksize 0 0 pts 4.7 1.6 4.5 1.3 4.3 1 4.1 0.7 newline asize .2 .1 linethickness 3 rarrow pts 1.4 1.5 4.0 1.6 copycurve pts 1.4 1.4 3.8 1.3 copycurve pts 1.4 1.3 3.6 1.0 copycurve pts 1.4 1.2 3.4 0.7 jgraph-83.orig/alb.jgr100664 1750 50 40225 6273276347 13361 0ustar osirissrcnewgraph xaxis min 1 max 25 size 6.000 nodraw yaxis min .25 max 5 size 1.14 nodraw newstring x 12.5 y .25 vjc hjc : (a) newcurve linetype solid marktype circle marksize 0.200 0.200 pts 1 5 1 4 1 3 1 2 1 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 2 5 3 4 3 3 3 2 3 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 2 4 3 3 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 2 3 3 2 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 2 2 3 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 2 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 3 5 3 4 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 4 5 3 4 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 4 4 3 3 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 4 3 3 2 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 4 2 3 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 4 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 5 5 7 4 7 3 7 2 7 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 5 4 7 3 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 5 3 7 2 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 5 2 7 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 5 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 6 5 7 4 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 6 4 7 3 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 6 3 7 2 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 6 2 7 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 6 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 7 5 7 4 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 8 5 7 4 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 8 4 7 3 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 8 3 7 2 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 8 2 7 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 8 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 9 5 7 4 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 9 4 7 3 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 9 3 7 2 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 9 2 7 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 9 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 10 5 13 4 13 3 13 2 13 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 10 4 13 3 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 10 3 13 2 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 10 2 13 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 10 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 11 5 13 4 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 11 4 13 3 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 11 3 13 2 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 11 2 13 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 11 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 12 5 13 4 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 12 4 13 3 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 12 3 13 2 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 12 2 13 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 12 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 13 5 13 4 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 14 5 13 4 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 14 4 13 3 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 14 3 13 2 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 14 2 13 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 14 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 15 5 13 4 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 15 4 13 3 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 15 3 13 2 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 15 2 13 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 15 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 16 5 13 4 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 16 4 13 3 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 16 3 13 2 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 16 2 13 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 16 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 17 5 21 4 21 3 21 2 21 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 17 4 21 3 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 17 3 21 2 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 17 2 21 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 17 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 18 5 21 4 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 18 4 21 3 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 18 3 21 2 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 18 2 21 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 18 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 19 5 21 4 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 19 4 21 3 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 19 3 21 2 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 19 2 21 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 19 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 20 5 21 4 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 20 4 21 3 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 20 3 21 2 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 20 2 21 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 20 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 21 5 21 4 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 22 5 21 4 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 22 4 21 3 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 22 3 21 2 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 22 2 21 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 22 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 23 5 21 4 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 23 4 21 3 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 23 3 21 2 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 23 2 21 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 23 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 24 5 21 4 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 24 4 21 3 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 24 3 21 2 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 24 2 21 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 24 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 25 5 21 4 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 25 4 21 3 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 25 3 21 2 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 25 2 21 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 25 1 newgraph xaxis min 1 max 25 size 6.000 nodraw yaxis min .25 max 5 size 1.14 nodraw y_translate -1.5 newstring x 12.5 y .25 vjc hjc : (b) newcurve linetype solid marktype circle marksize 0.200 0.200 pts 1 5 21 4 21 3 21 2 21 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 1 4 3 3 7 2 13 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 1 3 3 2 7 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 1 2 3 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 1 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 2 5 3 4 7 3 13 2 21 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 2 4 3 3 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 2 3 3 2 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 2 2 3 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 2 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 3 5 3 4 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 4 5 3 4 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 4 4 3 3 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 4 3 3 2 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 4 2 3 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 4 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 5 5 7 4 13 3 21 2 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 5 4 7 3 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 5 3 7 2 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 5 2 7 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 5 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 6 5 7 4 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 6 4 7 3 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 6 3 7 2 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 6 2 7 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 6 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 7 5 7 4 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 8 5 7 4 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 8 4 7 3 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 8 3 7 2 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 8 2 7 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 8 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 9 5 7 4 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 9 4 7 3 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 9 3 7 2 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 9 2 7 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 9 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 10 5 13 4 21 3 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 10 4 13 3 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 10 3 13 2 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 10 2 13 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 10 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 11 5 13 4 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 11 4 13 3 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 11 3 13 2 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 11 2 13 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 11 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 12 5 13 4 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 12 4 13 3 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 12 3 13 2 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 12 2 13 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 12 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 13 5 13 4 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 14 5 13 4 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 14 4 13 3 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 14 3 13 2 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 14 2 13 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 14 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 15 5 13 4 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 15 4 13 3 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 15 3 13 2 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 15 2 13 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 15 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 16 5 13 4 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 16 4 13 3 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 16 3 13 2 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 16 2 13 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 16 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 17 5 21 4 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 17 4 21 3 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 17 3 21 2 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 17 2 21 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 17 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 18 5 21 4 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 18 4 21 3 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 18 3 21 2 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 18 2 21 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 18 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 19 5 21 4 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 19 4 21 3 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 19 3 21 2 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 19 2 21 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 19 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 20 5 21 4 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 20 4 21 3 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 20 3 21 2 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 20 2 21 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 20 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 21 5 21 4 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 22 5 21 4 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 22 4 21 3 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 22 3 21 2 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 22 2 21 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 22 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 23 5 21 4 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 23 4 21 3 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 23 3 21 2 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 23 2 21 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 23 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 24 5 21 4 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 24 4 21 3 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 24 3 21 2 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 24 2 21 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 24 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 25 5 21 4 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 25 4 21 3 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 25 3 21 2 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 25 2 21 1 newcurve linetype solid marktype circle marksize 0.200 0.200 pts 25 1 jgraph-83.orig/bailey.jgr100664 1750 50 764 6273276347 14034 0ustar osirissrc (* Example of Unix spline(1) to smooth a curve. This is a file to draw sin(i) for i going from -pi to pi *) newgraph yaxis min -1 max 1 label : sin(i) xaxis label : i grid_lines border title : Example Unix spline(1) to interpolate points (* Plot the sin curve *) newline label : data pts include bailey.pts copycurve label : splined linetype dotted pts shell : spline < bailey.pts (* bailey.pts file: -3.1416 0.0 -1.81 -0.9715 -0.55 -0.5226 0.71 0.6518 1.97 0.9213 3.1416 0.0 *) jgraph-83.orig/bailey.pts100664 1750 50 120 6273276347 14042 0ustar osirissrc-3.1416 0.0 -1.81 -0.9715 -0.55 -0.5226 0.71 0.6518 1.97 0.9213 3.1416 0.0 jgraph-83.orig/cube.jgr100664 1750 50 2032 6273276347 13513 0ustar osirissrc(* Drawing of the hypercube: Dimensions = 1.25 * 2.55 *) newgraph xaxis min 0 max 1.25 size 1.25 nodraw yaxis min -0.30 max 2.25 size 2.55 nodraw (* Legs *) newline poly pfill 0 pts 0.50 0.00 0.75 0.00 0.75 -0.20 0.50 -0.20 copycurve pts 0.75 -0.20 1.20 -0.30 1.23 -0.28 0.75 -0.10 copycurve pts 0.50 -0.20 0.05 -0.30 0.02 -0.28 0.50 -0.10 copycurve pts 0.75 -0.05 1.20 0.03 1.23 0.02 0.75 -0.13 copycurve pts 0.50 -0.05 0.05 0.03 0.02 0.02 0.50 -0.13 (* Box *) newline poly pfill 1 pts 0.00 0.00 1.00 0.00 1.00 2.00 0.00 2.00 copycurve pfill .80 pts 0.00 2.00 0.25 2.20 1.25 2.20 1.00 2.00 copycurve pfill .9 pts 1.00 2.00 1.25 2.20 1.25 0.25 1.00 0.00 newline poly pfill 0 pts 0.60 0.70 0.60 1.80 0.90 1.80 0.90 0.70 newcurve marktype box marksize .03 .08 fill 1 pts shell : awk ' BEGIN { for (i = 0.65; i < 0.90; i += 0.05) {\ for (j = 0.80; j < 1.70; j += 0.15) {\ printf("%f %f\n", i, j); } } }' jgraph-83.orig/data.txt100664 1750 50 4231 6273276347 13546 0ustar osirissrcNumber of records = 0 Time = 0 Number of records = 5000 Time = 2 Number of records = 10000 Time = 3 Number of records = 15000 Time = 4 Number of records = 20000 Time = 6 Number of records = 25000 Time = 9 Number of records = 30000 Time = 10 Number of records = 35000 Time = 11 Number of records = 40000 Time = 13 Number of records = 45000 Time = 15 Number of records = 50000 Time = 16 Number of records = 55000 Time = 18 Number of records = 60000 Time = 21 Number of records = 65000 Time = 21 Number of records = 70000 Time = 23 Number of records = 75000 Time = 26 Number of records = 80000 Time = 27 Number of records = 85000 Time = 28 Number of records = 90000 Time = 31 Number of records = 95000 Time = 32 Number of records = 100000 Time = 33 Number of records = 105000 Time = 36 Number of records = 110000 Time = 38 Number of records = 115000 Time = 38 Number of records = 120000 Time = 41 Number of records = 125000 Time = 45 Number of records = 130000 Time = 44 Number of records = 135000 Time = 46 Number of records = 140000 Time = 48 Number of records = 145000 Time = 49 Number of records = 150000 Time = 51 Number of records = 155000 Time = 52 Number of records = 160000 Time = 54 Number of records = 165000 Time = 56 Number of records = 170000 Time = 58 Number of records = 175000 Time = 61 Number of records = 180000 Time = 61 Number of records = 185000 Time = 63 Number of records = 190000 Time = 69 Number of records = 195000 Time = 66 Number of records = 200000 Time = 69 Number of records = 210000 Time = 73 Number of records = 220000 Time = 77 Number of records = 230000 Time = 78 Number of records = 240000 Time = 88 Number of records = 250000 Time = 86 Number of records = 260000 Time = 89 Number of records = 270000 Time = 94 Number of records = 280000 Time = 96 Number of records = 290000 Time = 102 Number of records = 300000 Time = 104 Number of records = 310000 Time = 106 Number of records = 320000 Time = 111 Number of records = 330000 Time = 113 Number of records = 340000 Time = 120 Number of records = 350000 Time = 122 Number of records = 360000 Time = 124 Number of records = 370000 Time = 133 Number of records = 380000 Time = 131 Number of records = 390000 Time = 134 jgraph-83.orig/descrip.mms100664 1750 50 2331 6273276347 14242 0ustar osirissrc# VMS MMS makefile # # In the link you will get a warning because of the multiple definition # of exit(). This may be ignored; in order to get MMS completing without # trouble you will have to call MMS as follows: # $ MMS/IGNORE # .ifdef DEBUG CFLAGS=/INCLUDE=(SYS$DISK:[],SYS$SHARE:)/noopt/debug LFLAGS=/debug .else CFLAGS=/INCLUDE=(SYS$DISK:[],SYS$SHARE:) LFLAGS= .endif OBJS = draw.obj, \ edit.obj, \ jgraph.obj, \ list.obj, \ printline.obj, \ prio_list.obj, \ process.obj, \ show.obj, \ token.obj, \ exit.obj all : jgraph.exe ! done # Do not link against the shareable image VAXCRTL.EXE, or you will # miss the reference to the local exit() routine. # EXIT will be reported as being multiply defined - ignore that. jgraph.exe : $(OBJS) link $(LFLAGS) /exe=jgraph $(OBJS),sys$library:vaxcrtl/libr ### draw.obj : draw.c jgraph.h list.h prio_list.h edit.obj : edit.c jgraph.h list.h prio_list.h jgraph.obj : jgraph.c jgraph.h list.h prio_list.h list.obj : list.c list.h printline.obj : printline.c jgraph.h list.h prio_list.h prio_list.obj : prio_list.c list.h prio_list.h process.obj : process.c jgraph.h list.h prio_list.h show.obj : show.c jgraph.h list.h prio_list.h token.obj : token.c list.h exit.obj : exit.c jgraph-83.orig/disk.jgr100664 1750 50 551 6273276347 13513 0ustar osirissrcnewgraph xaxis min 0 max 0.4 nodraw yaxis min 0 max 0.4 nodraw (* Picture of a disk: 0 0 to 0.4 0.4 *) newcurve marktype ellipse fill .5 marksize 0.4 0.2 pts 0.2 0.1 newcurve marktype box fill .5 gray .5 marksize 0.4 0.2 pts 0.2 0.2 newline pts 0.0 0.1 0.0 0.3 newline pts 0.4 0.1 0.4 0.3 newcurve marktype ellipse fill 1 marksize 0.4 0.2 pts 0.2 0.3 jgraph-83.orig/draw.c100664 1750 50 53104 6273276350 13212 0ustar osirissrc/* * $Source: /tmp_mnt/n/fs/grad1/jsp/src/jgraph/RCS/draw.c,v $ * $Revision: 8.3 $ * $Date: 92/11/30 11:42:10 $ * $Author: jsp $ */ #include "jgraph.h" #include #include static char real_eof = EOF; float ctop(val, axis) float val; Axis axis; { if (axis->is_lg) { if (val <= 0.0) { error_header(); fprintf(stderr, "Value of %f is at negative infinity with logrhythmic %c axis\n", val, (axis->is_x) ? 'x' : 'y'); exit(1); } return (log(val) / axis->logfactor - axis->logmin) * axis->factor; } else { return (val - axis->min) * axis->factor; } } float disttop(val, axis) float val; Axis axis; { if (axis->is_lg) { return FCPI * val; } else { return (val) * axis->factor; } } float intop(val) float val; { return FCPI * val; } #define MAXIMUM(a,b) ((a > b) ? a : b) draw_axis(a, other) Axis a, other; { char orientation; Hash h; String s; orientation = (a->is_x) ? 'x' : 'y'; setlinewidth(1.0); comment("Drawing Axis"); if (a->grid_lines) { comment("Drawing Grid lines"); gsave(); setgray(a->gr_graytype, a->gr_gray); for (h = first(a->hash_lines); h != nil(a->hash_lines); h = next(h)) { if (h->major) { printline(h->loc, 0.0, h->loc, other->psize, orientation); } } grestore(); } if (a->mgrid_lines) { comment("Drawing Minor Grid lines"); gsave(); setgray(a->mgr_graytype, a->mgr_gray); for (h = first(a->hash_lines); h != nil(a->hash_lines); h = next(h)) { if (!h->major) { printline(h->loc, 0.0, h->loc, other->psize, orientation); } } grestore(); } gsave(); setgray(a->graytype, a->gray); if (a->draw_axis_line) { printline(0.0, a->draw_at, a->psize, a->draw_at, orientation); } if (a->draw_hash_marks) { comment("Drawing Hash Marks"); for (h = first(a->hash_lines); h != nil(a->hash_lines); h = next(h)) { printline(h->loc, a->draw_hash_marks_at, h->loc, a->draw_hash_marks_at + (h->size * a->hash_scale), orientation); } } if (a->draw_hash_labels) { comment("Drawing Hash Labels"); for (s = first(a->hash_labels); s != nil(a->hash_labels); s = next(s)) { a->hl->label = s->s->label; if (a->is_x) { a->hl->x = s->s->x; } else { a->hl->y = s->s->y; } draw_label(a->hl); } } if (a->draw_axis_label) { comment("Drawing Axis Label"); draw_label(a->label); } grestore(); printf("\n"); } draw_label(l) Label l; { if (l->label == CNULL) return; comment(l->label); print_label(l); } set_clip(g) Graph g; { comment("Setting Clip"); printf("newpath\n"); printf(" 0 0 moveto 0 %f lineto %f %f lineto %f 0 lineto\n", g->y_axis->psize, g->x_axis->psize, g->y_axis->psize, g->x_axis->psize); printf(" closepath clip newpath\n"); } draw_curves(g) Graph g; { Curve c; gsave(); printf("\n"); if (g->clip) set_clip(g); for(c = first(g->curves); c != nil(g->curves); c = next(c)) { draw_curve(c, g); } grestore(); printf("\n"); } draw_curve(c, g) Curve c; Graph g; { Point p, px, py; int i, j; float this_x, this_y, last_x, last_y, x, y; gsave(); setgray(c->graytype, c->gray); if (c->clip) set_clip(g); if (first(c->xepts) != nil(c->xepts) || first(c->yepts) != nil(c->yepts)) { comment("Drawing Epts"); px = first(c->xepts); py = first(c->yepts); setlinewidth(c->linethick); setlinestyle('s', (Flist)0); for (p = first(c->pts); p != nil(c->pts); p = next(p)) { if (p->e == 'x') { x = ctop(p->x, g->x_axis); y = ctop(p->y, g->y_axis); print_ebar(x, y, ctop(px->x, g->x_axis), c->marksize[1]/2.0, 'x'); px = next(px); print_ebar(x, y, ctop(px->x, g->x_axis), c->marksize[1]/2.0, 'x'); px = next(px); } else if (p->e == 'y') { x = ctop(p->x, g->x_axis); y = ctop(p->y, g->y_axis); print_ebar(y, x, ctop(py->y, g->y_axis), c->marksize[0]/2.0, 'y'); py = next(py); print_ebar(y, x, ctop(py->y, g->y_axis), c->marksize[0]/2.0, 'y'); py = next(py); } } } comment("Drawing Curve"); if (c->linetype != '0' || c->poly) { if (c->bezier) { i = 0; j = 0; if (c->poly) printf("newpath "); for (p = first(c->pts); p != nil(c->pts); p = next(p)) { if (j == 0 && i == 0) { start_line(ctop(p->x, g->x_axis), ctop(p->y, g->y_axis), c); j++; } else if (i != 0) { bezier_control(ctop(p->x, g->x_axis), ctop(p->y, g->y_axis)); } else { bezier_end(ctop(p->x, g->x_axis), ctop(p->y, g->y_axis)); j++; } if (!c->poly && j == 30 && i == 0) { end_line(); p = prev(p); j = 0; i = 0; } else i = (i + 1) % 3; } if (j != 0) { if (c->poly) { printf("closepath "); setfill(0.0, 0.0, c->pfilltype, c->pfill, c->ppattern, c->pparg); } end_line(); } } else { i = 0; if (c->poly) printf("newpath "); for (p = first(c->pts); p != nil(c->pts); p = next(p)) { if (i == 0) { start_line(ctop(p->x, g->x_axis), ctop(p->y, g->y_axis), c); } else { cont_line(ctop(p->x, g->x_axis), ctop(p->y, g->y_axis)); } if (!c->poly && i == 100 && next(p)) { end_line(); p = prev(p); i = 0; } else i++; } if (i != 0) { if (c->poly) { printf("closepath "); setfill(0.0, 0.0, c->pfilltype, c->pfill, c->ppattern, c->pparg); } end_line(); } } } comment("Drawing Curve points"); i = 0; for (p = first(c->pts); p != nil(c->pts); p = next(p)) { this_x = ctop(p->x, g->x_axis); this_y = ctop(p->y, g->y_axis); if (!c->bezier || i == 0) draw_mark(this_x, this_y, c, g); if (p != first(c->pts)) { if (c->rarrows || (c->rarrow && p == last(c->pts))) { if (!c->bezier || i == 0) draw_arrow(this_x, this_y, last_x, last_y, c); } if (c->larrows || (c->larrow && prev(p) == first(c->pts))) { if (!c->bezier || i == 1) draw_arrow(last_x, last_y, this_x, this_y, c); } } last_x = this_x; last_y = this_y; i = (i + 1) % 3; } grestore(); printf("\n"); } draw_mark(x, y, c, g) float x, y; Curve c; Graph g; { Point p; float ms0, ms1, scx, scy, trx, try; int i, j; FILE *f; char ch; int done, newline; char inp[100]; int bb[4]; if (c->marktype == 'n') return; ms0 = c->marksize[0] / 2.0; ms1 = c->marksize[1] / 2.0; gsave(); printf(" %f %f translate %f rotate\n", x, y, c->mrotate); switch (c->marktype) { case 'n': break; case 'E': if (c->eps == CNULL) break; f = fopen(c->eps, "r"); if (f == NULL) { fprintf(stderr, "Error: eps file %s couldn't be opened\n", c->eps); exit(1); } /* Get bbox */ newline = 1; done = 0; while(!done) { while(!newline) { ch = getc(f); if (ch == real_eof) { fprintf(stderr, "Error: Eps file '%s' has %s\n", c->eps, "no bounding box"); exit(1); } newline = (ch == '\n'); } fscanf(f, "%s", inp); if (strcmp(inp, "%%BoundingBox:") == 0) done = 1; } for (i = 0; i < 4; i++) { if (fscanf(f, "%d", &(bb[i])) == NULL) { fprintf(stderr, "Error: Eps file '%s': eof in %s\n", c->eps, "bounding box"); exit(1); } } if (bb[2] - bb[0] == 0) { scx = ms0; trx = 0.0; } else { scx = ms0 * 2.0/(float)(bb[2] - bb[0]); trx = -(float)(bb[2] - bb[0])/2.0 - bb[0]; } if (bb[3] - bb[1] == 0) { scy = ms1; try = 0.0; } else { scy = ms1 * 2.0/(float)(bb[3] - bb[1]); try = -(float)(bb[3] - bb[1])/2.0 - bb[1]; } /* Don't scale if ms == 0 0 */ if (ms0 == 0.0 && ms1 == 0.0) { scx = 1.0; scy = 1.0; } sprintf(inp, "Including eps file %s", c->eps); comment(inp); /* Use bbox to scale and translate */ printf("%f %f scale %f %f translate\n", scx, scy, trx, try); /* Include the rest of the file */ for (ch = getc(f); ch != real_eof; ch = getc(f)) putchar(ch); putchar('\n'); fclose(f); break; case 'p': if (c->postscript == CNULL) break; if (ms0 != 0.0 || ms1 != 0.0) { printf("%f %f scale\n", ms0, ms1); } if (!c->postfile) { printf("%s\n", c->postscript); } else { f = fopen(c->postscript, "r"); if (f == NULL) { fprintf(stderr, "Error: postscript file %s couldn't be opened\n", c->postscript); exit(1); } for (ch = getc(f); ch != real_eof; ch = getc(f)) putchar(ch); putchar('\n'); fclose(f); } break; case 'c': printline(-ms0, 0.0, ms0, 0.0, 'x'); printline(-ms1, 0.0, ms1, 0.0, 'y'); break; case 'b': start_poly(-ms0, -ms1); cont_poly(ms0, -ms1); cont_poly(ms0, ms1); cont_poly(-ms0, ms1); end_poly(x, y, c->filltype, c->fill, c->pattern, c->parg); break; case 'd': start_poly(-ms0, 0.0); cont_poly(0.0, -ms1); cont_poly(ms0, 0.0); cont_poly(0.0, ms1); end_poly(x, y, c->filltype, c->fill, c->pattern, c->parg); break; case 'g': p = first(c->general_marks); if (p == nil(c->general_marks)) break; if (next(p) == nil(c->general_marks)) break; start_poly(p->x*ms0, p->y*ms1); for(p = next(p); p != nil(c->general_marks); p = next(p)) cont_poly(p->x*ms0, p->y*ms1); end_poly(x, y, c->filltype, c->fill, c->pattern, c->parg); break; case 'G': i = 0; for (p = first(c->general_marks); p != nil(c->general_marks); p = next(p)) { if (i == 0) { printf("%f %f moveto ", p->x*ms0, p->y*ms1); } else { printf("%f %f lineto\n", p->x*ms0, p->y*ms1); } if (i == 100) { printf("stroke\n"); p = prev(p); i = 0; } else i++; } if (i != 0) printf("stroke\n"); break; case 'B': i = 0; j = 0; for (p = first(c->general_marks); p != nil(c->general_marks); p = next(p)) { if (j == 0 && i == 0) { printf("%f %f moveto ", p->x*ms0, p->y*ms1); j++; } else if (i != 0) { printf("%f %f ", p->x*ms0, p->y*ms1); } else { printf("%f %f curveto\n", p->x*ms0, p->y*ms1); j++; } if (j == 30 && i == 0) { printf(" stroke\n"); p = prev(p); j = 0; i = 0; } else i = (i + 1) % 3; } if (j != 0) printf(" stroke\n"); if (! ((i == 1) || (i == 0 && j == 0))) { fprintf(stderr, "Error: curve %d, %s\n", c->num, "wrong number of points for bezier marktype\n"); exit(1); } break; case 'Z': i = 0; j = 0; for (p = first(c->general_marks); p != nil(c->general_marks); p = next(p)) { if (i == 0 && j == 0) { printf("newpath %f %f moveto ", p->x*ms0, p->y*ms1); j++; } else if (i != 0) { printf("%f %f ", p->x*ms0, p->y*ms1); } else { printf("%f %f curveto\n", p->x*ms0, p->y*ms1); } i = (i + 1) % 3; } printf("closepath "); setfill(x, y, c->filltype, c->fill, c->pattern, c->parg); printf("stroke\n"); if (i != 1) { fprintf(stderr, "Error: curve %d, %s\n", c->num, "wrong number of points for bezier marktype\n"); exit(1); } break; case 'x': printline(-ms0, -ms1, ms0, ms1, 'x'); printline(-ms0, ms1, ms0, -ms1, 'x'); break; case 'o': printellipse(x, y, ms0, ms0, c->filltype, c->fill, c->pattern, c->parg); break; case 'e': printellipse(x, y, ms0, ms1, c->filltype, c->fill, c->pattern, c->parg); break; case 't': start_poly(ms0, -ms1); cont_poly(0.0, ms1); cont_poly(-ms0, -ms1); end_poly(x, y, c->filltype, c->fill, c->pattern, c->parg); break; case 'X': start_poly(ms0, 0.0); cont_poly(-ms0, 0.0); cont_poly(-ms0, g->x_axis->draw_at - y); cont_poly(ms0, g->x_axis->draw_at - y); end_poly(x, y, c->filltype, c->fill, c->pattern, c->parg); break; case 'Y': start_poly(0.0, ms1); cont_poly(0.0, -ms1); cont_poly(g->y_axis->draw_at - x, -ms1); cont_poly(g->y_axis->draw_at - x, ms1); end_poly(x, y, c->filltype, c->fill, c->pattern, c->parg); break; case 'l': draw_label(c->lmark); break; default: error_header(); fprintf(stderr, "Unknown mark: %c\n", c->marktype); break; } grestore(); } draw_arrow(x1, y1, x2, y2, c) float x1, y1, x2, y2; Curve c; { float dx, dy; float ms0; float theta, ct, st; if (c->marktype == 'o') { dx = x1 - x2; dy = y1 - y2; if (dx == 0.0 && dy == 0.0) return; ms0 = c->marksize[0] / 2.0; if (dx == 0.0) theta = asin(1.0); else theta = atan(dy/dx); if (theta < 0.0) theta = -theta; ct = cos(theta)*ms0; st = sin(theta)*ms0; x1 = x1 + ct*(dx > 0.0 ? -1.0 : 1.0); y1 = y1 + st*(dy > 0.0 ? -1.0 : 1.0); if ( ((x1 - x2 > 0) != (dx > 0)) || ((y1 - y2 > 0) != (dy > 0)) ) return; } dx = x1 - x2; dy = y1 - y2; if (dx == 0.0 && dy == 0.0) return; gsave(); printf("%f %f translate %f %f atan rotate\n", x1, y1, dy, dx); start_poly(0.0, 0.0); cont_poly(-(c->asize[0]), (c->asize[1])); cont_poly(-(c->asize[0]), -(c->asize[1])); end_poly(0.0, 0.0, c->afilltype, c->afill, c->apattern, c->aparg); grestore(); printf("\n"); } draw_legend(g) Graph g; { Curve c; Legend l; float x, y; char tmpmktype; l = g->legend; comment("Drawing legend"); if (l->type == 'n' || l->anylines < 0) return; gsave(); if (l->type == 'u') { printf("%f %f translate %f rotate\n", l->l->x, l->l->y, l->l->rotate); } for (c = first(g->curves); c != nil(g->curves); c = next(c)) { if (c->l->label != CNULL) { gsave(); setgray(c->graytype, c->gray); y = (c->l->ymax + c->l->ymin) / 2.0; if (l->anylines) { if (c->linetype != '0' && l->linelength != 0) { if (l->type == 'c' && c->l->hj == 'r') { x = c->l->x + l->midspace; } else { x = c->l->x - l->midspace - l->linelength; } start_line(x, y, c); cont_line(x+l->linelength, y); end_line(); } tmpmktype = c->marktype; c->marktype = 'n'; if (c->larrows || c->larrow) draw_arrow(x, y, x+l->linelength, y, c); if (c->rarrows || c->rarrow) draw_arrow(x+l->linelength, y, x, y, c); c->marktype = tmpmktype; if (l->type == 'c' && c->l->hj == 'r') { x = c->l->x + l->midspace + l->linelength / 2.0; } else { x = c->l->x - l->midspace - l->linelength / 2.0; } } else if (l->type == 'c' && c->l->hj == 'r') { x = c->l->x + l->midspace; } else { x = c->l->x - l->midspace; } if (c->marktype == 'X' || c->marktype == 'Y') { char old; old = c->marktype; c->marktype = 'b'; draw_mark(x, y, c, g); c->marktype = old; } else { draw_mark(x, y, c, g); } grestore(); printf("\n"); draw_label(c->l); } } grestore(); printf("\n"); } draw_strings(g) Graph g; { String s; comment("Drawing strings"); for (s = first(g->strings); s != nil(g->strings); s = next(s)) draw_label(s->s); } draw_graph(g) Graph g; { comment("Drawing New Graph"); printf("%f %f translate\n", g->x_translate, g->y_translate); if (g->border) { printline(0.0, 0.0, 0.0, g->y_axis->psize, 'x'); printline(0.0, 0.0, 0.0, g->x_axis->psize, 'y'); printline(g->x_axis->psize, 0.0, g->x_axis->psize, g->y_axis->psize, 'x'); printline(g->y_axis->psize, 0.0, g->y_axis->psize, g->x_axis->psize, 'y'); } draw_axis(g->x_axis, g->y_axis); draw_axis(g->y_axis, g->x_axis); draw_label(g->title); draw_curves(g); draw_legend(g); draw_strings(g); printf("%f %f translate\n", - g->x_translate, - g->y_translate); } draw_graphs(gs, pp, landscape) Graphs gs; int pp; int landscape; { Graphs gs_p; Graph g; for (gs_p = first(gs); gs_p != nil(gs); gs_p = next(gs_p)) { draw_header(gs_p, pp, landscape); for (g = first(gs_p->g); g != nil(gs_p->g); g = next(g)) { draw_graph(g); } draw_footer(gs_p, pp); } } draw_header(gs, pp, landscape) Graphs gs; int pp; int landscape; { FILE *f; char c; if (gs->page == 1) printf("%%!PS-Adobe-2.0 EPSF-1.2\n"); printf("%%%%Page: %d %d\n", gs->page, gs->page); if (landscape) { printf("%%%%BoundingBox: %d %d %d %d\n", gs->bb[1], gs->bb[0], gs->bb[3], gs->bb[2]); } else { printf("%%%%BoundingBox: %d %d %d %d\n", gs->bb[0], gs->bb[1], gs->bb[2], gs->bb[3]); } printf("%%%%EndComments\n"); if (landscape) { printf("-90 rotate\n"); } if (pp) { if (landscape) { printf("%f 0 translate\n", -(11.0 * FCPI)); printf("%f %f translate\n", (((11.0 * FCPI) - (gs->bb[2] - gs->bb[0])) / 2.0) - gs->bb[0], (((8.5 * FCPI) - (gs->bb[3] - gs->bb[1])) / 2.0) - gs->bb[1]); } else { printf("%f %f translate\n", (((8.5 * FCPI) - (gs->bb[2] - gs->bb[0])) / 2.0) - gs->bb[0], (((11.0 * FCPI) - (gs->bb[3] - gs->bb[1])) / 2.0) - gs->bb[1]); } } else if (landscape) { printf("%f 0 translate\n", -gs->bb[2] - gs->bb[0]); } printf("1 setlinecap 1 setlinejoin\n"); printf("0.700 setlinewidth\n"); printf("0.00 setgray\n"); printf("\n"); printf("/Jrnd { exch cvi exch cvi dup 3 1 roll idiv mul } def\n"); printf("/JDEdict 8 dict def\n"); printf("JDEdict /mtrx matrix put\n"); printf("/JDE {\n"); printf(" JDEdict begin\n"); printf(" /yrad exch def\n"); printf(" /xrad exch def\n"); printf(" /savematrix mtrx currentmatrix def\n"); printf(" xrad yrad scale\n"); printf(" 0 0 1 0 360 arc\n"); printf(" savematrix setmatrix\n"); printf(" end\n"); printf("} def\n"); printf("/JSTR {\n"); printf(" gsave 1 eq { gsave 1 setgray fill grestore } if\n"); printf(" exch neg exch neg translate \n"); printf(" clip \n"); printf(" rotate \n"); printf(" 4 dict begin\n"); printf(" pathbbox /&top exch def\n"); printf(" /&right exch def\n"); printf(" /&bottom exch def\n"); printf(" &right sub /&width exch def\n"); printf(" newpath\n"); printf(" currentlinewidth mul round dup \n"); printf(" &bottom exch Jrnd exch &top \n"); printf(" 4 -1 roll currentlinewidth mul setlinewidth \n"); printf(" { &right exch moveto &width 0 rlineto stroke } for \n"); printf(" end\n"); printf(" grestore\n"); printf(" newpath\n"); printf("} bind def\n"); gsave(); setfont("Times-Roman", 9.00); if (gs->preamble != CNULL) { if (gs->prefile) { f = fopen(gs->preamble, "r"); if (f == NULL) { fprintf(stderr, "Error: preamble file %s couldn't be opened\n", gs->preamble); exit(1); } for (c = getc(f); c != real_eof; c = getc(f)) putchar(c); putchar('\n'); fclose(f); } else { printf("%s\n", gs->preamble); } } } draw_footer(gs, pp) Graphs gs; int pp; { FILE *f; char c; if (gs->epilogue != CNULL) { if (gs->epifile) { f = fopen(gs->epilogue, "r"); if (f == NULL) { fprintf(stderr, "Error: epilogue file %s couldn't be opened\n", gs->epilogue); exit(1); } for (c = getc(f); c != real_eof; c = getc(f)) putchar(c); putchar('\n'); fclose(f); } else { printf("%s\n", gs->epilogue); } } grestore(); if (pp) printf("showpage\n"); else printf("\n"); } jgraph-83.orig/ebars.jgr100664 1750 50 1135 6273276350 13666 0ustar osirissrc(* This graph shows the use of y_epts to get error bars onto the graph. It plots the curve y = 2x plus or minus x/2 for integer x values from from 1 to 10 *) newgraph xaxis min 0 max 10 label : x yaxis min 0 max 25 label : y = 2x +- x/2 newcurve marktype circle linetype dotted (* These points could equally be generated by: y_epts shell : echo "" |\ awk '{ for (i = 1; i < 11; i++) print i, 2*i, 2*i-i/2.0, 2*i+i/2.0}' *) y_epts 1 2 1.5 2.5 2 4 3 5 3 6 4.5 7.5 4 8 6 10 5 10 7.5 12.5 6 12 9 15 7 14 10.5 17.5 8 16 12 20 9 18 13.5 22.5 10 20 15 25 jgraph-83.orig/edit.c100664 1750 50 103011 6273276350 13213 0ustar osirissrc/* * $Source: /tmp_mnt/n/fs/grad1/jsp/src/jgraph/RCS/edit.c,v $ * $Revision: 8.3 $ * $Date: 92/11/30 11:42:12 $ * $Author: jsp $ */ #include #include "jgraph.h" #define MAX(a,b) ((a > b) ? a : b) #define MIN(a,b) ((a < b) ? a : b) edit_label(l) Label l; { char *txt, inp_str[80]; float f; int i; while ( getstring(inp_str) ) { if (strcmp(inp_str, ":") == 0) { if ((txt = getlabel()) == CNULL) return; l->label = txt; } else if (strcmp(inp_str, "x") == 0) { if (!getfloat(&f)) rejecttoken(); else l->x = f; } else if (strcmp(inp_str, "y") == 0) { if (!getfloat(&f)) rejecttoken(); else l->y = f; } else if (strcmp(inp_str, "fontsize") == 0) { if (!getfloat(&f)) rejecttoken(); else l->fontsize = f; } else if (strcmp(inp_str, "linesep") == 0) { if (!getfloat(&f)) rejecttoken(); else l->linesep = f; } else if (strcmp(inp_str, "hjl") == 0) { l->hj = 'l'; } else if (strcmp(inp_str, "hjc") == 0) { l->hj = 'c'; } else if (strcmp(inp_str, "hjr") == 0) { l->hj = 'r'; } else if (strcmp(inp_str, "vjc") == 0) { l->vj = 'c'; } else if (strcmp(inp_str, "vjt") == 0) { l->vj = 't'; } else if (strcmp(inp_str, "vjb") == 0) { l->vj = 'b'; } else if (strcmp(inp_str, "font") == 0) { if (!getstring(inp_str)) return; txt = (char *) malloc (sizeof(char)*strlen(inp_str)+2); strcpy(txt, inp_str); l->font = txt; } else if (strcmp(inp_str, "rotate") == 0) { if (!getfloat(&f)) rejecttoken(); else l->rotate = f; } else if (strcmp(inp_str, "lgray") == 0) { if (!getfloat(&f)) rejecttoken(); else { l->graytype = 'g'; l->gray[0] = f; } } else if (strcmp(inp_str, "lcolor") == 0) { l->graytype = 'c'; for( i = 0 ; i < 3 ; i++ ) { if(!getfloat(&f)) { rejecttoken(); l->graytype = 'n'; break ; } else l->gray[i] = f ; } } else { rejecttoken(); return; } } } copy_curve(c1, c2) /* Copies curve c2 to c1 */ Curve c1, c2; { Flist f, newf; Point p, newp; copy_label(c1->l, c2->l); copy_label(c1->lmark, c2->lmark); c1->l->label = CNULL; c1->clip = c2->clip; for (f = first(c2->gen_linetype); f != nil(c2->gen_linetype); f = next(f)) { newf = (Flist) get_node(c1->gen_linetype); newf->f = f->f; insert(newf, c1->gen_linetype); } c1->pattern = c2->pattern; c1->apattern = c2->apattern; c1->ppattern = c2->ppattern; c1->parg = c2->parg; c1->aparg = c2->aparg; c1->pparg = c2->pparg; c1->marktype = c2->marktype; c1->linetype = c2->linetype; c1->linethick = c2->linethick; c1->marksize[0] = c2->marksize[0]; c1->marksize[1] = c2->marksize[1]; c1->mrotate = c2->mrotate; for (p = first(c2->general_marks); p != nil(c2->general_marks); p = next(p)) { newp = (Point) get_node(c1->general_marks); newp->x = p->x; newp->y = p->y; insert(newp, c1->general_marks); } c1->graytype = c2->graytype; c1->gray[0] = c2->gray[0]; c1->gray[1] = c2->gray[1]; c1->gray[2] = c2->gray[2]; c1->filltype = c2->filltype; c1->fill[0] = c2->fill[0]; c1->fill[1] = c2->fill[1]; c1->fill[2] = c2->fill[2]; c1->poly = c2->poly; c1->pfilltype = c2->pfilltype; c1->pfill[0] = c2->pfill[0]; c1->pfill[1] = c2->pfill[1]; c1->pfill[2] = c2->pfill[2]; c1->afilltype = c2->afilltype; c1->afill[0] = c2->afill[0]; c1->afill[1] = c2->afill[1]; c1->afill[2] = c2->afill[2]; c1->postscript = c2->postscript; c1->postfile = c2->postfile; c1->eps = c2->eps; c1->rarrow = c2->rarrow; c1->larrow = c2->larrow; c1->rarrows = c2->rarrows; c1->larrows = c2->larrows; c1->asize[0] = c2->asize[0]; c1->asize[1] = c2->asize[1]; c1->bezier = c2->bezier; } copy_label(l1, l2) /* Copies label l2 to l1 */ Label l1, l2; { l1->label = l2->label; l1->x = l2->x; l1->y = l2->y; l1->rotate = l2->rotate; l1->font = l2->font; l1->fontsize = l2->fontsize; l1->hj = l2->hj; l1->vj = l2->vj; l1->graytype = l2->graytype; l1->gray[0] = l2->gray[0]; l1->gray[1] = l2->gray[1]; l1->gray[2] = l2->gray[2]; l1->linesep = l2->linesep; } copy_axis(a1, a2) /* Copies axis a2 to a1 */ Axis a1, a2; { copy_label(a1->label, a2->label); copy_label(a1->hl, a2->hl); a1->max = a2->max; a1->min = a2->min; a1->pmax = a2->pmax; a1->pmin = a2->pmin; a1->size = a2->size; a1->hash_interval = a2->hash_interval; a1->hash_start = a2->hash_start; a1->log_base = a2->log_base; a1->draw_hash_marks_at = a2->draw_hash_marks_at; a1->draw_hash_labels_at = a2->draw_hash_labels_at; a1->draw_at = a2->draw_at; a1->draw_hash_labels = a2->draw_hash_labels; a1->draw_axis_line = a2->draw_axis_line; a1->draw_hash_marks = a2->draw_hash_marks; a1->draw_axis_label = a2->draw_axis_label; a1->auto_hash_labels = a2->auto_hash_labels; a1->auto_hash_marks = a2->auto_hash_marks; a1->minor_hashes = a2->minor_hashes; a1->hash_scale = a2->hash_scale; a1->hash_format = a2->hash_format; a1->graytype = a2->graytype; a1->gray[0] = a2->gray[0]; a1->gray[1] = a2->gray[1]; a1->gray[2] = a2->gray[2]; a1->mgr_graytype = a2->mgr_graytype; a1->mgr_gray[0] = a2->mgr_gray[0]; a1->mgr_gray[1] = a2->mgr_gray[1]; a1->mgr_gray[2] = a2->mgr_gray[2]; a1->gr_graytype = a2->gr_graytype; a1->gr_gray[0] = a2->gr_gray[0]; a1->gr_gray[1] = a2->gr_gray[1]; a1->gr_gray[2] = a2->gr_gray[2]; a1->grid_lines = a2->grid_lines; a1->mgrid_lines = a2->mgrid_lines; a1->precision = a2->precision; a1->start_given = a2->start_given; a1->is_lg = a2->is_lg; a1->is_x = a2->is_x; } Curve do_copy_curve(g, gs, all_gs) Graph g; Graphs gs; Graphs all_gs; { Curve lastc, newc; Graph oldg; Graphs oldgs; int num; if (!getint(&num)) { rejecttoken(); oldg = g; oldgs = gs; while(gs != nil(all_gs)) { if (gs != oldgs) g = last(gs->g); while(g != nil(gs->g)) { if (first(g->curves) == nil(g->curves)) g = prev(g); else { lastc = last(g->curves); if (first(oldg->curves) == nil(oldg->curves)) newc = new_curve(oldg->curves, 0); else newc = new_curve(oldg->curves, last(oldg->curves)->num + 1); copy_curve(newc, lastc); return newc; } } gs = prev(gs); } error_header(); fprintf(stderr, "Cannot perform copycurve on first curve\n"); exit(1); } else { if (first(g->curves) == nil(g->curves)) newc = new_curve(g->curves, 0); else newc = new_curve(g->curves, last(g->curves)->num + 1); lastc = g->curves; while(1) { lastc = prev(lastc); if (lastc == nil(g->curves) || lastc->num < num) { error_header(); fprintf(stderr, "copycurve: curve #%d not found\n", num); exit(1); } if (lastc->num == num) { copy_curve(newc, lastc); return newc; } } } return newc; /* To shut lint up */ } Label do_copy_string(g, gs, all_gs) Graph g; Graphs gs; Graphs all_gs; { String lastl, newl; Graph oldg; Graphs oldgs; int num; if (!getint(&num)) { rejecttoken(); oldgs = gs; oldg = g; while(gs != nil(all_gs)) { if (gs != oldgs) g = last(gs->g); while(g != nil(gs->g)) { if (first(g->strings) == nil(g->strings)) g = prev(g); else { lastl = last(g->strings); if (first(oldg->strings) == nil(oldg->strings)) newl = new_string(oldg->strings, 0); else newl = new_string(oldg->strings, last(oldg->strings)->num + 1); copy_label(newl->s, lastl->s); return newl->s; } } gs = prev(gs); } error_header(); fprintf(stderr, "Cannot perform copystring on first string\n"); exit(1); return newl->s; /* To shut lint up */ } else { if (first(g->strings) == nil(g->strings)) newl = new_string(g->strings, 0); else newl = new_string(g->strings, last(g->strings)->num + 1); lastl = g->strings; while(1) { lastl = prev(lastl); if (lastl == nil(g->strings) || lastl->num < num) { error_header(); fprintf(stderr, "copystring: string #%d not found\n", num); exit(1); } if (lastl->num == num) { copy_label(newl->s, lastl->s); return newl->s; } } } } Graph last_graph(g, gs, all_gs) Graph g; Graphs gs; Graphs all_gs; { Graph lastg; lastg = prev(g); while(lastg == nil(gs->g)) { if (prev(gs) == nil(all_gs)) { error_header(); fprintf(stderr, "First graph cannot inherit axes\n"); exit(1); } else { gs = prev(gs); lastg = last(gs->g); } } return lastg; } copy_legend(l1, l2) Legend l1, l2; { l1->linelength = l2->linelength; l1->linebreak = l2->linebreak; l1->midspace = l2->midspace; l1->type = l2->type; copy_label(l1->l, l2->l); } inherit_axes(g, lastg) Graph g; Graph lastg; { char *s; copy_axis(g->x_axis, lastg->x_axis); copy_axis(g->y_axis, lastg->y_axis); g->x_translate = lastg->x_translate; g->y_translate = lastg->y_translate; g->clip = lastg->clip; g->border = lastg->border; copy_legend(g->legend, lastg->legend); s = g->title->label; copy_label(g->title, lastg->title); g->title->label = s; } getpattern(inp_str, key, p, a) char *inp_str, *key, *p; float *a; { int i; float f; if (!getstring(inp_str)) return; for (i = 0; i < NPATTERNS; i++) { if (strcmp(inp_str, PATTERNS[i]) == 0) { *p = PTYPES[i]; if (getfloat(&f)) { *a = f; } else { rejecttoken(); } i = NPATTERNS + 1; } } if (i == NPATTERNS) { error_header(); fprintf(stderr, "Bad %s: %s\n", key, inp_str); error_header(); fprintf(stderr, " Valid %ss are:", key); for (i = 0; i < NPATTERNS; i++) fprintf(stderr, " %s", PATTERNS[i]); fprintf(stderr, "\n"); exit(1); } return; } edit_curve(c, g) Curve c; Graph g; { char inp_str[256], *txt; float x, y, f, e1, e2; float xh, yh, xl, yl; Point p, p1, p2; Flist fl; FILE *fi; int i; char e; while ( getstring(inp_str) ) { if (strcmp(inp_str, "y_epts") == 0 || strcmp(inp_str, "pts") == 0 || strcmp(inp_str, "x_epts") == 0) { e = inp_str[0]; while (getfloat(&x)) { if (e == 'p') { if (!getfloat(&y)) { error_header(); fprintf(stderr, "Reading Points, no y value for x=%f\n", x); exit(1); } } else { if (!getfloat(&y) || !getfloat(&e1) || !getfloat(&e2)) { error_header(); fprintf(stderr, "Reading %s, need 4 values per data point\n", inp_str); exit(1); } } p = (Point) get_node(c->pts); p->x = x; p->y = y; p->e = e; insert(p, c->pts); c->npts++; if (e == 'x') { p1 = (Point) get_node(c->xepts); p1->x = e1; p1->y = y; p2 = (Point) get_node(c->xepts); p2->x = e2; p2->y = y; insert(p1, c->xepts); insert(p2, c->xepts); xh = MAX(e1, e2); xh = MAX(xh, x); xl = MIN(e1, e2); xl = MIN(xl, x); yh = y; yl = y; } else if (e == 'y') { p1 = (Point) get_node(c->yepts); p1->y = e1; p1->x = x; p2 = (Point) get_node(c->yepts); p2->y = e2; p2->x = x; insert(p1, c->yepts); insert(p2, c->yepts); yh = MAX(e1, e2); yh = MAX(yh, y); yl = MIN(e1, e2); yl = MIN(yl, y); xh = x; xl = x; } else { xh = x; xl = x; yh = y; yl = y; } if (g->x_axis->pmax == FSIG) { g->x_axis->pmax = xh; g->x_axis->pmin = xl; g->y_axis->pmax = yh; g->y_axis->pmin = yl; } else { g->x_axis->pmax = MAX(g->x_axis->pmax, xh); g->x_axis->pmin = MIN(g->x_axis->pmin, xl); g->y_axis->pmax = MAX(g->y_axis->pmax, yh); g->y_axis->pmin = MIN(g->y_axis->pmin, yl); } } rejecttoken(); } else if (strcmp(inp_str, "label") == 0) { edit_label(c->l); } else if (strcmp(inp_str, "marksize") == 0) { if (!getfloat(&f)) rejecttoken(); else { c->marksize[0] = f; if (!getfloat(&f)) rejecttoken(); else c->marksize[1] = f; } } else if (strcmp(inp_str, "gmarks") == 0) { while (getfloat(&x)) { if (!getfloat(&y)) { error_header(); fprintf(stderr, "Reading GMarks, no y value for x=%f\n", x); exit(1); } p = (Point) get_node(c->general_marks); p->x = x; p->y = y; insert(p, c->general_marks); } rejecttoken(); } else if (strcmp(inp_str, "pfill") == 0) { if (!getfloat(&f)) rejecttoken(); else { /* grey fill */ c->pfilltype = 'g'; c->pfill[0] = f; } } else if (strcmp(inp_str, "pcfill") == 0) { /* color fill */ c->pfilltype = 'c'; for( i = 0 ; i < 3 ; i++ ) { if(!getfloat(&f)) { rejecttoken(); c->pfilltype = 'n'; break ; } else c->pfill[i] = f ; } } else if (strcmp(inp_str, "fill") == 0) { if (!getfloat(&f)) rejecttoken(); else { /* grey fill */ c->filltype = 'g'; c->fill[0] = f; } } else if (strcmp(inp_str, "cfill") == 0) { /* color fill */ c->filltype = 'c'; for( i = 0 ; i < 3 ; i++ ) { if(!getfloat(&f)) { rejecttoken(); c->filltype = 'n'; break ; } else c->fill[i] = f ; } } else if (strcmp(inp_str, "afill") == 0) { if (!getfloat(&f)) rejecttoken(); else { c->afilltype = 'g'; c->afill[0] = f; } } else if (strcmp(inp_str, "acfill") == 0) { c->afilltype = 'c'; for( i = 0 ; i < 3 ; i++ ) { if(!getfloat(&f)) { rejecttoken(); c->afilltype = 'n'; break ; } else c->afill[i] = f ; } } else if (strcmp(inp_str, "marktype") == 0) { if (!getstring(inp_str)) return; for (i = 0; i < NMARKTYPES && strcmp(inp_str, MARKTYPESTRS[i]) != 0; i++) ; if (i == NMARKTYPES) { error_header(); fprintf(stderr, "Bad mark: %s\n", inp_str); fprintf(stderr, " Valid marks are:"); for (i = 0; i < NMARKTYPES; i++) { fprintf(stderr, " %s", MARKTYPESTRS[i]); } fprintf(stderr, "\n"); exit(1); } else { c->marktype = MARKTYPES[i]; if (c->marktype == 'l') edit_label(c->lmark); } } else if (strcmp(inp_str, "glines") == 0) { while (getfloat(&f)) { fl = (Flist) get_node (c->gen_linetype); fl->f = f; insert(fl, c->gen_linetype); } rejecttoken(); } else if (strcmp(inp_str, "pattern") == 0) { getpattern(inp_str, "pattern", &(c->pattern), &(c->parg)); } else if (strcmp(inp_str, "apattern") == 0) { getpattern(inp_str, "apattern", &(c->apattern), &(c->aparg)); } else if (strcmp(inp_str, "ppattern") == 0) { getpattern(inp_str, "ppattern", &(c->ppattern), &(c->pparg)); } else if (strcmp(inp_str, "linetype") == 0) { if (!getstring(inp_str)) return; if (strcmp(inp_str, "none") == 0) c->linetype = '0'; else if (strcmp(inp_str, "solid") == 0) c->linetype = 's'; else if (strcmp(inp_str, "dotted") == 0) c->linetype = '.'; else if (strcmp(inp_str, "dashed") == 0) c->linetype = '-'; else if (strcmp(inp_str, "longdash") == 0) c->linetype = 'l'; else if (strcmp(inp_str, "dotdash") == 0) c->linetype = 'd'; else if (strcmp(inp_str, "dotdotdash") == 0) c->linetype = 'D'; else if (strcmp(inp_str, "dotdotdashdash") == 0) c->linetype = '2'; else if (strcmp(inp_str, "general") == 0) c->linetype = 'g'; else { error_header(); fprintf(stderr, "Bad line type: %s\n", inp_str); error_header(); fprintf(stderr, " Valid marks are %s\n", "solid, dotted, dashed, longdash, dotdash,"); error_header(); fprintf(stderr, " %s.\n", "dotdotdash, dotdotdashdash, none"); exit(1); } } else if (strcmp(inp_str, "linethickness") == 0) { if (!getfloat(&f)) rejecttoken(); else c->linethick = f; } else if (strcmp(inp_str, "gray") == 0) { if (!getfloat(&f)) rejecttoken(); else { c->graytype = 'g'; c->gray[0] = f; } } else if (strcmp(inp_str, "color") == 0) { c->graytype = 'c'; for( i = 0 ; i < 3 ; i++ ) { if(!getfloat(&f)) { rejecttoken(); c->graytype = 'n'; break ; } else c->gray[i] = f ; } } else if (strcmp(inp_str, "mrotate") == 0) { if (!getfloat(&f)) rejecttoken(); else { c->mrotate = f; } } else if (strcmp(inp_str, "eps") == 0) { if (!getstring(inp_str)) { error_header(); fprintf(stderr, "eps token must be followed by an %s\n", "encapsulated postscript file\n"); exit(1); } c->marktype = 'E'; c->eps = (char *) malloc ((strlen(inp_str)+1)*sizeof(char)); strcpy(c->eps, inp_str); fi = fopen(c->eps, "r"); if (fi == NULL) { error_header(); fprintf(stderr, "couldn't open eps file '%s'\n", c->eps); exit(1); } fclose(fi); } else if (strcmp(inp_str, "postscript") == 0) { if (!getstring(inp_str)) return; c->marktype = 'p'; if (strcmp(inp_str, ":") == 0) { c->postfile = 0; if ((txt = getmultiline()) == CNULL) return; c->postscript = txt; } else { c->postfile = 1; c->postscript = (char *) malloc ((strlen(inp_str)+1)*sizeof(char)); strcpy(c->postscript, inp_str); fi = fopen(c->postscript, "r"); if (fi == NULL) { error_header(); fprintf(stderr, "couldn't open postscript file '%s'\n", c->postscript); exit(1); } fclose(fi); } } else if (strcmp(inp_str, "poly") == 0) { c->poly = 1; } else if (strcmp(inp_str, "nopoly") == 0) { c->poly = 0; } else if (strcmp(inp_str, "larrow") == 0) { c->larrow = 1; } else if (strcmp(inp_str, "nolarrow") == 0) { c->larrow = 0; } else if (strcmp(inp_str, "rarrow") == 0) { c->rarrow = 1; } else if (strcmp(inp_str, "norarrow") == 0) { c->rarrow = 0; } else if (strcmp(inp_str, "larrows") == 0) { c->larrows = 1; } else if (strcmp(inp_str, "nolarrows") == 0) { c->larrows = 0; } else if (strcmp(inp_str, "rarrows") == 0) { c->rarrows = 1; } else if (strcmp(inp_str, "norarrows") == 0) { c->rarrows = 0; } else if (strcmp(inp_str, "bezier") == 0) { c->bezier = 1; } else if (strcmp(inp_str, "nobezier") == 0) { c->bezier = 0; } else if (strcmp(inp_str, "asize") == 0) { if (!getfloat(&f)) rejecttoken(); else { c->asize[0] = f; if (!getfloat(&f)) rejecttoken(); else c->asize[1] = f; } } else if (strcmp(inp_str, "clip") == 0) { c->clip = 1; } else if (strcmp(inp_str, "noclip") == 0) { c->clip = 0; } else { rejecttoken(); return; } } } edit_hash_label(a) Axis a; { float at, f; char *s; char inp_str[256]; String st; int done; s = CNULL; at = (first(a->hash_lines) == nil(a->hash_lines)) ? FSIG : first(a->hash_lines)->loc; while(1) { done = 0; if (getstring(inp_str)) { if (strcmp(inp_str, ":") == 0) { if ((s = getlabel()) == CNULL) return; } else if (strcmp(inp_str, "at") == 0) { if (getfloat(&f)) { at = f; } else { rejecttoken(); done = 1; } } else { rejecttoken(); done = 1; } } else { done = 1; } if (done) { if (s == CNULL) return; if (at == FSIG) { error_header(); fprintf(stderr, "hash_label either needs \"at\" or an associated \"hash_at\"\n"); exit(1); } st = (String) get_node(a->hash_labels); st->s = new_label(); st->s->label = s; st->s->x = at; st->s->y = at; insert(st, a->hash_labels); return; } } } edit_axis(a) Axis a; { char inp_str[256]; float f; int i; Hash h; while ( getstring(inp_str) ) { if (strcmp(inp_str, "size") == 0) { if ( getfloat(&f)) a->size = f; else rejecttoken(); } else if (strcmp(inp_str, "max") == 0) { if ( getfloat(&f)) a->max = f; else rejecttoken(); } else if (strcmp(inp_str, "min") == 0) { if ( getfloat(&f)) a->min = f; else rejecttoken(); } else if (strcmp(inp_str, "hash") == 0) { if ( getfloat(&f)) a->hash_interval = f; else rejecttoken(); } else if (strcmp(inp_str, "shash") == 0) { if ( getfloat(&f)) { a->hash_start = f; a->start_given = 1; } else rejecttoken(); } else if (strcmp(inp_str, "mhash") == 0) { if (getint(&i)) a->minor_hashes = i; else rejecttoken(); } else if (strcmp(inp_str, "precision") == 0) { if (getint(&i)) a->precision = i; else rejecttoken(); } else if (strcmp(inp_str, "label") == 0) { edit_label(a->label); } else if (strcmp(inp_str, "hash_format") == 0) { if (!getstring(inp_str)) return; if (strcmp(inp_str, "g") == 0) { a->hash_format = 'g'; } else if (strcmp(inp_str, "G") == 0) { a->hash_format = 'G'; } else if (strcmp(inp_str, "E") == 0) { a->hash_format = 'E'; } else if (strcmp(inp_str, "e") == 0) { a->hash_format = 'e'; } else if (strcmp(inp_str, "f") == 0) { a->hash_format = 'f'; } else { error_header(); fprintf(stderr, "Invalid hash_style %s. Must be f, g, G, e or E\n", inp_str); exit(1); } } else if (strcmp(inp_str, "hash_labels") == 0) { edit_label(a->hl); } else if (strcmp(inp_str, "log_base") == 0) { if (getfloat(&f)) { if (f <= 1.0) { error_header(); fprintf(stderr, "\"log_base %f\": log_base must be > 1.0\n", f); exit(1); } else a->log_base = f; } else rejecttoken(); } else if (strcmp(inp_str, "draw_at") == 0) { if ( getfloat(&f)) a->draw_at = f; else rejecttoken(); } else if (strcmp(inp_str, "log") == 0) { a->is_lg = 1; } else if (strcmp(inp_str, "linear") == 0) { a->is_lg = 0; } else if (strcmp(inp_str, "nodraw") == 0) { a->draw_hash_labels = 0; a->draw_axis_line = 0; a->draw_hash_marks = 0; a->draw_axis_label = 0; } else if (strcmp(inp_str, "draw") == 0) { a->draw_hash_labels = 1; a->draw_axis_line = 1; a->draw_hash_marks = 1; a->draw_axis_label = 1; } else if (strcmp(inp_str, "hash_at") == 0 || strcmp(inp_str, "mhash_at") == 0) { if (getfloat(&f)) { h = (Hash) get_node (a->hash_lines); h->loc = f; h->major = (inp_str[0] == 'h'); h->size = h->major ? HASH_SIZE : MHASH_SIZE; insert(h, a->hash_lines); } else rejecttoken(); } else if (strcmp(inp_str, "hash_label") == 0) { edit_hash_label(a); } else if (strcmp(inp_str, "hash_scale") == 0) { if ( getfloat(&f)) a->hash_scale = f; else rejecttoken(); } else if (strcmp(inp_str, "auto_hash_marks") == 0) { a->auto_hash_marks = 1; } else if (strcmp(inp_str, "no_auto_hash_marks") == 0) { a->auto_hash_marks = 0; } else if (strcmp(inp_str, "auto_hash_labels") == 0) { a->auto_hash_labels = 1; } else if (strcmp(inp_str, "no_auto_hash_labels") == 0) { a->auto_hash_labels = 0; } else if (strcmp(inp_str, "draw_hash_labels_at") == 0) { if (getfloat(&f)) a->draw_hash_labels_at = f; else rejecttoken(); } else if (strcmp(inp_str, "draw_hash_marks_at") == 0) { if (getfloat(&f)) a->draw_hash_marks_at = f; else rejecttoken(); } else if (strcmp(inp_str, "no_draw_hash_labels") == 0) { a->draw_hash_labels = 0; } else if (strcmp(inp_str, "draw_hash_labels") == 0) { a->draw_hash_labels = 1; } else if (strcmp(inp_str, "no_draw_axis_line") == 0) { a->draw_axis_line = 0; } else if (strcmp(inp_str, "draw_axis_line") == 0) { a->draw_axis_line = 1; } else if (strcmp(inp_str, "no_draw_axis") == 0) { a->draw_axis_line = 0; } else if (strcmp(inp_str, "draw_axis") == 0) { a->draw_axis_line = 1; } else if (strcmp(inp_str, "no_draw_hash_marks") == 0) { a->draw_hash_marks = 0; } else if (strcmp(inp_str, "draw_hash_marks") == 0) { a->draw_hash_marks = 1; } else if (strcmp(inp_str, "no_draw_axis_label") == 0) { a->draw_axis_label = 0; } else if (strcmp(inp_str, "draw_axis_label") == 0) { a->draw_axis_label = 1; } else if (strcmp(inp_str, "no_grid_lines") == 0) { a->grid_lines = 0; } else if (strcmp(inp_str, "grid_lines") == 0) { a->grid_lines = 1; } else if (strcmp(inp_str, "no_mgrid_lines") == 0) { a->mgrid_lines = 0; } else if (strcmp(inp_str, "mgrid_lines") == 0) { a->mgrid_lines = 1; } else if (strcmp(inp_str, "gray") == 0) { if (!getfloat(&f)) rejecttoken(); else { a->graytype = 'g'; a->gray[0] = f; } } else if (strcmp(inp_str, "color") == 0) { a->graytype = 'c'; for( i = 0 ; i < 3 ; i++ ) { if(!getfloat(&f)) { rejecttoken(); a->graytype = 'n'; break ; } else a->gray[i] = f ; } } else if (strcmp(inp_str, "grid_gray") == 0) { if (!getfloat(&f)) rejecttoken(); else { a->gr_graytype = 'g'; a->gr_gray[0] = f; } } else if (strcmp(inp_str, "grid_color") == 0) { a->gr_graytype = 'c'; for( i = 0 ; i < 3 ; i++ ) { if(!getfloat(&f)) { rejecttoken(); a->gr_graytype = 'n'; break ; } else a->gr_gray[i] = f ; } } else if (strcmp(inp_str, "mgrid_gray") == 0) { if (!getfloat(&f)) rejecttoken(); else { a->mgr_graytype = 'g'; a->mgr_gray[0] = f; } } else if (strcmp(inp_str, "mgrid_color") == 0) { a->mgr_graytype = 'c'; for( i = 0 ; i < 3 ; i++ ) { if(!getfloat(&f)) { rejecttoken(); a->mgr_graytype = 'n'; break ; } else a->mgr_gray[i] = f ; } } else { rejecttoken(); return; } } } edit_legend(l) Legend l; { char inp_str[256]; float f; while ( getstring(inp_str) ) { if (strcmp(inp_str, "x") == 0) { if (!getfloat(&f)) rejecttoken(); else { l->l->x = f; l->l->hj = 'l'; l->l->vj = 't'; l->type = 'u'; } } else if (strcmp(inp_str, "y") == 0) { if (!getfloat(&f)) rejecttoken(); else { l->l->y = f; l->l->hj = 'l'; l->l->vj = 't'; l->type = 'u'; } } else if (strcmp(inp_str, "right") == 0 || strcmp(inp_str, "on") == 0) { l->type = 'u'; l->l->y = FSIG; l->l->x = FSIG; l->l->hj = 'l'; l->l->vj = 'c'; } else if (strcmp(inp_str, "left") == 0) { l->type = 'u'; l->l->y = FSIG; l->l->x = FSIG; l->l->hj = 'r'; l->l->vj = 'c'; } else if (strcmp(inp_str, "off") == 0) { l->type = 'n'; } else if (strcmp(inp_str, "top") == 0) { l->type = 'u'; l->l->y = FSIG; l->l->x = FSIG; l->l->hj = 'l'; l->l->vj = 'b'; } else if (strcmp(inp_str, "bottom") == 0) { l->type = 'u'; l->l->y = FSIG; l->l->x = FSIG; l->l->hj = 'l'; l->l->vj = 't'; } else if (strcmp(inp_str, "custom") == 0) { l->type = 'c'; } else if (strcmp(inp_str, "linelength") == 0) { if (!getfloat(&f)) rejecttoken(); else l->linelength = f; } else if (strcmp(inp_str, "linebreak") == 0) { if (!getfloat(&f)) rejecttoken(); else l->linebreak = f; } else if (strcmp(inp_str, "midspace") == 0) { if (!getfloat(&f)) rejecttoken(); else l->midspace = f; } else if (strcmp(inp_str, "defaults") == 0) { edit_label(l->l); } else { rejecttoken(); return; } } } edit_graph(g, gs, all_gs) Graph g; Graphs gs; Graphs all_gs; { char inp_str[80]; int num; String s; float f; while ( getstring(inp_str) ) { if (strcmp(inp_str, "xaxis") == 0) edit_axis(g->x_axis); else if (strcmp(inp_str, "yaxis") == 0) edit_axis(g->y_axis); else if (strcmp(inp_str, "curve") == 0) { if (!getint(&num)) { error_header(); fprintf(stderr, "\"curve\" not followed by number\n"); exit(1); } edit_curve(get_curve(g->curves, num), g); } else if (strcmp(inp_str, "newcurve") == 0) { if (first(g->curves) == nil(g->curves)) edit_curve(new_curve(g->curves, 0), g); else edit_curve(new_curve(g->curves, last(g->curves)->num + 1), g); } else if (strcmp(inp_str, "copycurve") == 0) { edit_curve(do_copy_curve(g, gs, all_gs), g); } else if (strcmp(inp_str, "newline") == 0) { if (first(g->curves) == nil(g->curves)) edit_curve(new_line(g->curves, 0), g); else edit_curve(new_line(g->curves, last(g->curves)->num + 1), g); } else if (strcmp(inp_str, "title") == 0) { edit_label(g->title); } else if (strcmp(inp_str, "legend") == 0) { edit_legend(g->legend); } else if (strcmp(inp_str, "x_translate") == 0) { if (!getfloat(&f)) rejecttoken(); else g->x_translate = f; } else if (strcmp(inp_str, "y_translate") == 0) { if (!getfloat(&f)) rejecttoken(); else g->y_translate = f; } else if (strcmp(inp_str, "string") == 0) { if (!getint(&num)) { error_header(); fprintf(stderr, "\"string\" not followed by number\n"); exit(1); } s = get_string(g->strings, num); edit_label(s->s); } else if (strcmp(inp_str, "newstring") == 0) { if (first(g->strings) == nil(g->strings)) s = new_string(g->strings, 0); else s = new_string(g->strings, last(g->strings)->num + 1); edit_label(s->s); } else if (strcmp(inp_str, "copystring") == 0 || strcmp(inp_str, "copyline") == 0) { edit_label(do_copy_string(g, gs, all_gs)); } else if (strcmp(inp_str, "inherit_axes") == 0) { inherit_axes(g, last_graph(g, gs, all_gs)); } else if (strcmp(inp_str, "Y") == 0) { if (!getfloat(&f)) rejecttoken(); else gs->height = f; } else if (strcmp(inp_str, "X") == 0) { if (!getfloat(&f)) rejecttoken(); else gs->width = f; } else if (strcmp(inp_str, "border") == 0) { g->border = 1; } else if (strcmp(inp_str, "noborder") == 0) { g->border = 0; } else if (strcmp(inp_str, "clip") == 0) { g->clip = 1; } else if (strcmp(inp_str, "noclip") == 0) { g->clip = 0; } else { rejecttoken(); return; } } } edit_graphs(gs) Graphs gs; { Graphs the_g; Graph g, tmp_g; char inp_str[80]; float f; int num, i, ok, j; the_g = first(gs); while ( getstring(inp_str) ) { if (strcmp(inp_str, "graph") == 0) { if (!getint(&num)) { error_header(); fprintf(stderr, "\"graph\" not followed by number\n"); exit(1); } edit_graph(get_graph(the_g->g, num), the_g, gs); } else if (strcmp(inp_str, "newgraph") == 0) { if (first(the_g->g) == nil(the_g->g)) edit_graph(new_graph(the_g->g, 0), the_g, gs); else edit_graph(new_graph(the_g->g, last(the_g->g)->num + 1), the_g, gs); } else if (strcmp(inp_str, "copygraph") == 0) { if (first(the_g->g) == nil(the_g->g)) g = new_graph(the_g->g, 0); else g = new_graph(the_g->g, last(the_g->g)->num + 1); if (!getint(&num)) { rejecttoken(); inherit_axes(g, last_graph(g, the_g, gs)); } else { ok = 0; tmp_g = the_g->g; while(!ok) { tmp_g = prev(tmp_g); if (tmp_g == nil(the_g->g) || tmp_g->num < num) { error_header(); fprintf(stderr, "copygraph: no graph #%d\n", num); exit(1); } ok = (tmp_g->num == num); } inherit_axes(g, tmp_g); } edit_graph(g, the_g, gs); } else if (strcmp(inp_str, "Y") == 0) { if (!getfloat(&f)) rejecttoken(); else the_g->height = f; } else if (strcmp(inp_str, "X") == 0) { if (!getfloat(&f)) rejecttoken(); else the_g->width = f; } else if (strcmp(inp_str, "newpage") == 0) { new_graphs(gs); the_g = last(gs); } else if (strcmp(inp_str, "bbox") == 0) { for (i = 0; i < 4; i++) { if (!getint(&j)) { error_header(); fprintf(stderr, "Bbox definition must have four integers\n"); exit(1); } else { the_g->bb[i] = j; } } } else if (strcmp(inp_str, "preamble") == 0) { if (!getstring(inp_str)) return; if (strcmp(inp_str, ":") != 0) { the_g->prefile = 1; the_g->preamble = (char *) malloc (sizeof(char)*(strlen(inp_str)+1)); strcpy(the_g->preamble, inp_str); } else { the_g->prefile = 0; the_g->preamble = getmultiline(); if (the_g->preamble == CNULL) return; } } else if (strcmp(inp_str, "epilogue") == 0) { if (!getstring(inp_str)) return; if (strcmp(inp_str, ":") != 0) { the_g->epifile = 1; the_g->epilogue = (char *) malloc (sizeof(char)*(strlen(inp_str)+1)); strcpy(the_g->epilogue, inp_str); } else { the_g->epifile = 0; the_g->epilogue = getmultiline(); if (the_g->epilogue == CNULL) return; } } else { error_header(); fprintf(stderr, "Bad token: %s\n", inp_str); exit(1); } } } jgraph-83.orig/ex1.jgr100664 1750 50 1672 6273276350 13275 0ustar osirissrc(* This is a graph for Figure 1 of the USENIX jgraph abstract. It shows three simple curves plotted with jgraph. There are two graphs plotted -- the first is the actual jgraph. The second is a text string showing the input for the graph. Print it out -- you'll see what I mean. *) newgraph xaxis size 2 yaxis size 1.5 newcurve pts 0 6 1 9 2 11 3 14 4 18 5 20 newcurve marktype triangle linetype solid pts 0 3 1 4 2 7 3 9 4 10 5 13 newcurve marktype none linetype dashed pts 0 0 1 2 2 3 3 5 4 6 5 9 copygraph x_translate -3.5 border xaxis nodraw min 0 max 1 size 2.8 yaxis nodraw min 0 max 1 newstring hjl vjc x .05 y .5 font Courier fontsize 7 : newgraph\ newcurve \ pts 0 6 1 9 2 11 3 14 4 18 5 20\ newcurve \ marktype triangle \ linetype solid\ pts 0 3 1 4 2 7 3 9 4 10 5 13\ newcurve \ marktype none \ linetype dashed\ pts 0 0 1 2 2 3 3 5 4 6 5 9 jgraph-83.orig/ex2.jgr100664 1750 50 2702 6273276350 13271 0ustar osirissrc(* This is a graph for Figure 2 of the USENIX jgraph abstract. It shows how to extract points from a data file with awk, and how to use awk to plot a function to match the data (the function that is plot here is (n/k)log(n), where k is expermentally chosen to be 35000. There are two graphs plotted -- the first is the actual jgraph. The second is a text string showing the input for the graph. Print it out -- you'll see what I mean. *) newgraph xaxis size 2.5 hash_labels font Helvetica label : Number of indexed Records (N) yaxis size 2.1 label : Running time (seconds) hash_labels font Helvetica newcurve marktype cross label : Data pts shell : awk '{print $5, $8}' data.txt newcurve marktype none linetype solid label : N log N / 35000 pts shell : nawk \ ' $5 != 0 { \ print $5, $5 * log($5) / 35000}' \ data.txt copygraph x_translate -3.1 border xaxis nodraw min 0 max 1 size 2.3 yaxis nodraw min 0 max 1 newstring hjl vjc x .03 y .5 font Courier fontsize 6 : xaxis size 2.5 \ hash_labels font Helvetica\ label : Number of indexed Records (N)\ yaxis size 2.1 \ label : Running time (seconds)\ hash_labels font Helvetica\ \ newcurve \ marktype cross\ label : Data\ pts shell : awk '{print $5, $8}' data.txt\ \ newcurve\ marktype none linetype solid\ label : N log N / 35000\ pts shell : nawk \\ ' $5 != 0 { \\ print $5, $5 * log($5) / 35000}' \\ data.txt\ jgraph-83.orig/exit.c100664 1750 50 2107 6273276350 13203 0ustar osirissrc/* **++ ** FUNCTIONAL DESCRIPTION: ** ** Exit is a VMS replacement for the standard Unix exit function ** ** FORMAL PARAMETERS: ** ** error_code integer passed by value (optional) ** ** SIDE EFFECTS: ** ** Exit will never return to calling program ** VMS exit status ($STATUS) will be set **-- **/ #include exit(va_alist) va_dcl { int nargs; va_list va; int exit_code = 0; /* * Pick up the argument, if present */ va_count(nargs); va_start(va); if (nargs > 0) exit_code = va_arg(va,int); /* * Set the VMS $STATUS to the appropriate value: * if exit_code == 0 then $STATUS := success * if exit_code > 0 then $STATUS := error * if exit_code < 0 then $STATUS := severe_error * and perform exit. * * Note: * the %X10000000 added to the actual success/error indicator * will prevent DCL from printing a message. * A 'on error' will be obeyed however. */ if (exit_code == 0) /* success */ sys$exit(0x10000001); else if (exit_code > 0) /* error */ sys$exit(0x10000002); else /* severe error */ sys$exit(0x10000004); } jgraph-83.orig/g8.jgr100664 1750 50 1744 6273276350 13116 0ustar osirissrc(* $Log: g8.jgr,v $ * Revision 1.1 90/10/12 17:33:33 jsp * Initial revision * *) Y 3 (* Graph #8: Frequency of Traps. This graph shows examples of plotting * character strings. *) newgraph yaxis size 1.9 min 0 max 10 hash 1 mhash 0 hash_labels fontsize 7 label fontsize 8 : Traps per 0.1 second Interval xaxis size 2.14 min 0 max 2.6001 hash .5 mhash 4 precision 1 hash_labels fontsize 7 label fontsize 8 : Starting Time of 0.1 second interval (sec) title fontsize 10 : Graph 8: Frequency of Traps. newcurve marktype circle fill 0 linetype none pts 0.0 9 0.1 3 0.2 5 0.3 6 0.4 6 0.5 5 0.6 6 0.7 6 0.8 6 0.9 6 1.0 6 1.1 4 1.2 5 1.3 3 1.4 4 1.5 5 1.6 3 1.7 5 1.8 5 1.9 4 2.0 3 2.1 4 2.2 5 2.3 5 2.4 4 2.5 0 2.6 0 newstring : Average Trap Time = 0.015 seconds x 2.6 y 10 hjr vjc fontsize 7 newstring : ... x 2.7 y 0 hjl vjb fontsize 7 jgraph-83.orig/g8col.jgr100664 1750 50 2056 6273276350 13611 0ustar osirissrc(* $Log: g8.jgr,v $ * Revision 1.1 90/10/12 17:33:33 jsp * Initial revision * *) Y 3 (* Graph #8: Frequency of Traps. This graph shows examples of plotting * character strings. *) newgraph yaxis size 1.9 min 0 max 10 hash 1 mhash 0 hash_labels fontsize 7 label fontsize 8 : Traps per 0.1 second Interval xaxis size 2.14 min 0 max 2.6001 hash .5 mhash 4 precision 1 hash_labels fontsize 7 label fontsize 8 : Starting Time of 0.1 second interval (sec) newcurve marktype box cfill 1 1 0 marksize 11 60 pts 1.3 5 copygraph title fontsize 10 : Graph 8: Frequency of Traps. newcurve marktype circle fill 0 linetype none pts 0.0 9 0.1 3 0.2 5 0.3 6 0.4 6 0.5 5 0.6 6 0.7 6 0.8 6 0.9 6 1.0 6 1.1 4 1.2 5 1.3 3 1.4 4 1.5 5 1.6 3 1.7 5 1.8 5 1.9 4 2.0 3 2.1 4 2.2 5 2.3 5 2.4 4 2.5 0 2.6 0 newstring : Average Trap Time = 0.015 seconds x 2.6 y 10 hjr vjc fontsize 7 newstring : ... x 2.7 y 0 hjl vjb fontsize 7 jgraph-83.orig/g9n10.jgr100664 1750 50 7432 6273276351 13437 0ustar osirissrc(* This file plots two graphs side by side with a tricky legend format: * There are 5 legend entries, one of which is of a curve containing a * line. The desire is to make the legend have two columns, the first * with the first three legend entries, and the second with the last * two. * * The way that this is done is to actually plot four graphs -- two sets * of two graphs superimposed on each other. The first of the two * graphs has the first three curves, and the second has the last two. * Thus, the first can set its legend to be the first column, and the * second can set its legend to be the second column. * * To get the two columns is pretty simple. In each graph, the * x and y coordinates of the legends are explicitly set. For the * first column, the x coordinate is 0, and for the second column, * the x coordinate is 5.5. * * A potential problem with this graph is that in the first set of * legends, there is a line (the "Merge Sort" curve), while in the * second set there is not. Thus, if nothing is done with the midspace * and linelength paramters, the second columns marks will appear closer * to the text than in the first column. The solution to this was to * explicitly set the linelength and midspace in the first legend to * be .80 and .25 respectively. This means that in the first legend, the * marks are 0.65 units away from the text (in the presence of a line, * the marks are (midspace + linelength/2) away from the text. In * the absence of a line, the marks are simply (midspace) away from the * text. Thus, midspace is set to be 0.65 in the second legend column. *) (* Set up the axes of the first graph. Translate it to the left of the * page *) newgraph x_translate -1.37 yaxis size 1.9 min 0 max 40 precision 0 hash 10 mhash 1 label : Time (sec) fontsize 8 xaxis size 2.14 min 0 max 10 hash 2 mhash 1 label : Heap Size (MBytes) fontsize 8 title : Graph 9: Checkpoint Time of Other Benchmarks. fontsize 10 (* Draw the first three curves *) newcurve label : Merge Sort marktype circle fill 0.0 linetype solid pts .789 5.5414 2.985 13.9958 3.962 17.2362 4.938 21.0804 7.868 32.4082 9.821 39.8312 newcurve label : Travelling Salesman marktype triangle fill 0 linetype none pts .064 2.359 newcurve label : Pattern Match marktype diamond fill 1.0 linetype none pts 1.233 6.374 (* set the legend *) legend linelength .8 midspace .25 x 0 y 47.5 defaults fontsize 7 (* Now make a second graph for the second curve with the same axes *) copygraph xaxis nodraw yaxis nodraw (* Draw the last two curves *) newcurve label : Bubble Sort marktype cross fill 1.0 linetype none pts .513 3.91 newcurve label : Matrix Multiplication marktype box fill 1 linetype none pts 3 14.71 (* set the second legend to be a second column from the first *) legend x 5.5 midspace .65 (* The second of these graphs is just like the first only it is translated to the right *) copygraph x_translate 1.7 xaxis draw yaxis draw yaxis min 0 max 5 hash 1 mhash 1 title : Graph 10: Checkpoint Overhead of Other Benchmarks. fontsize 10 newcurve label : Merge Sort marktype circle fill 0.0 linetype solid pts .789 0.5954 2.985 3.8368 3.962 3.3598 4.938 3.6288 7.868 4.3096 9.821 4.377 newcurve label : Travelling Salesman marktype triangle fill 0 linetype none pts .064 0.17 newcurve label : Pattern Match marktype diamond fill 1.0 linetype none pts 1.233 0.07 legend linelength .8 midspace .25 x 0 y 5.9 defaults fontsize 7 copygraph xaxis nodraw yaxis nodraw newcurve label : Bubble Sort marktype cross fill 1.0 linetype none pts .513 0.07 newcurve label : Matrix Multiplication marktype box fill 1 linetype none pts 3 0.75 legend x 5.5 midspace .65 jgraph-83.orig/gpaper.jgr100664 1750 50 326 6273276351 14032 0ustar osirissrcnewgraph xaxis size 7 min 0 max 7 hash 1 mhash 9 yaxis size 9 min 0 max 9 hash 1 mhash 9 copygraph xaxis hash_scale 1 grid_lines mgrid_lines mgrid_gray .5 yaxis hash_scale 1 grid_lines mgrid_lines mgrid_gray .5 jgraph-83.orig/hypercube.jgr100664 1750 50 2720 6273276351 14562 0ustar osirissrc(* * $Source: /n/fs/vd/jsp/papers/dckp/RCS/hypercube.jgr,v $ * $Revision: 4.4 $ * $Date: 91/10/03 13:56:21 $ * $Author: jsp $ * * Jgraph file containing a picture of a 3-D hypercube. *) Y 2.3 newgraph xaxis size 2.5 min 0 max 2.5 nodraw yaxis size 2 min 0 max 2 nodraw legend x 2.8 y 1.25 linelength 0.5 (* The links are drawn first, so that the nodes will be drawn over them. *) newline linethickness 2 pts 0 0 1.5 0 copycurve pts 0 1.5 1.5 1.5 copycurve pts .5 .5 2.0 .5 copycurve pts 2 2 .5 2 label fontsize 12 : Dimension 0 links newline linethickness 2 linetype dotted pts 0 0 0 1.5 copycurve pts 1.5 0 1.5 1.5 copycurve pts .5 .5 .5 2.0 copycurve pts 2 2 2 .5 label fontsize 12 : Dimension 1 links newline linethickness 2 linetype dashed pts 0 0 .5 .5 copycurve pts 0 1.5 .5 2 copycurve pts 1.5 0 2.0 .5 copycurve pts 1.5 1.5 2 2 label fontsize 12 : Dimension 2 links (* Now draw the nodes with fill 0 so that they will draw white over the * link overlap *) newcurve pts 0 0 0 1.5 1.5 0 1.5 1.5 marksize .35 marktype circle fill 1 newcurve pts .5 .5 .5 2 2 .5 2 2 marksize .27 marktype circle fill 1 (* Now draw the node labels inside the nodes *) newstring x 0 y 0 fontsize 12 hjc vjc : 000 copystring x 1.5 y 0 : 001 copystring x 0 y 1.5 : 010 copystring x 1.5 y 1.5 : 011 copystring x 0.5 y 0.5 fontsize 10 : 100 copystring x 2.0 y 0.5 : 101 copystring x 0.5 y 2.0 : 110 copystring x 2.0 y 2.0 : 111 jgraph-83.orig/jgraph.1100664 1750 50 135010 6273276351 13464 0ustar osirissrc.\" SCCSID: @(#)jgraph.1 1.1 10/23/89 .\" SCCSID: @(#)jgraph.1 1.1 10/23/89 .TH jgraph 1 .SH NAME jgraph \- filter for graph plotting to postscript .SH SYNTAX .B jgraph [\-\fIp\fR\|] [\-\fIP\fR\|] [\-\fIL\fR\|] [\-\fIcomments\fR\|] [\fIfilename\fR ...\|] .SH DESCRIPTION \fBJgraph\fR takes the description of a graph or graphs and produces a postscript file on the standard output. \fBJgraph\fR is ideal for plotting any mixture of scatter point graphs, line graphs, and/or bar graphs, and embedding the output into LaTeX, or any other text processing system which can read postscript. .sp \fBJgraph\fR reads its input from the specified files. If no files are specified, then it reads from standard input. .sp The graph description language is simple enough to get nice looking graphs with a minimum of effort, yet powerful enough to give the user the flexibility to tailor the appearance of the graph to his or her individual preferences. This includes plotting multiple graphs and laying them out separately on the page (or pages). .sp As an example, if the user wanted to simply plot the points (2,3), (4,5), (1,6), the following would be enough of a specification file: .PP .nf newgraph newcurve pts 2 3 4 5 1 6 .fi .PP Now, if the user wanted to spruce the graph up by adding labels to the axes, connecting the points, and titling the graph, then the input could change to: .PP .nf newgraph newcurve pts 2 3 4 5 1 6 linetype solid xaxis label : X axis yaxis label : Y axis title : This is an example graph .fi .PP If the user instead wanted this to be a bar graph with different endpoints on the axes, he/she could simply change the input to: .PP .nf newgraph xaxis min 0 max 5 label : X axis yaxis min 0 max 6 label : Y axis newcurve pts 2 3 4 5 1 6 marktype xbar title : This is an example bar graph .fi .PP There are many more features of the description language, which are described below in the next section. Features which are not embedded within the description language are: line and function interpolation, function plotting, and pie graphs. The latter is impossible to do with the aid of \fBjgraph, \fR however, the others can be effected with \fBjgraph \fR mixed with awk or c. See FUNCTION PLOTTING AND OTHER NON-INHERENT FEATURES below. .sp Also below is a section HINTS AND EXAMPLE GRAPHS, which may give good ideas on how to use \fBjgraph \fR more effectively. .SH OPTIONS .TP .B \-P The \fB\-P\fR option produces postscript which can be piped directly to \fBlpr,\fR which can be displayed in an Xwindows environment with \fBgs\fR (ghostscript). Without this option, the output should be embedded within \fBLaTeX\fR or a similar text processing system. .TP .B \-L The \fB\-L\fR option produces a landscape plot. .TP .B \-p The \fB\-p\fR option re-prints the input on the standard output, only with all the defaults made explicit. This is useful for letting the user do his/her own special formatting, as it shows the explicit values that the defaults assume, so that they can be manipulated. .TP .B \-comments This option makes jgraph put comments into the output postscript. These make it easier for the user to wade through the final postscript if necessary. .SH THE DESCRIPTION LANGUAGE The description language is essentially keywords followed by attributes. All keywords and attributes except for string attributes are tokens -- non-white-space characters surrounded by white-space. Special tokens are ``(*'', ``*)'', ``include'', ``:'', and ``shell'', which denote comments, include-file statements, string identifiers, and shell-include statements: .TP .B Comments Comments are surrounded by the tokens ``(*'' ``*)'' as in Modula-2 (except that here, the tokens must be surrounded by white- space). Comments may be nested. If the comment runs to the end of a file, the last ``*)'' may be omitted. .TP .B Include\-file statements The token following an ``include'' token is expected to be a file name. The result of the statement is to include the contents of the file at that point. Include-file statments can be nested within included files, and within shell includes. .TP .B Strings In places where strings are required (as in graph and curve labels), they are denoted by the token ``:''. The second character after the ``:'' starts the string, and the next newline character terminates it. Thus, the string ``Graph #1'' can be denoted as: .nf : Graph #1 or : Graph #1 .fi One can get multiline strings by making a backslash the last character before the newline on all but the last line. Notice that in strings white-space is not ignored. This way of denoting strings allows the user to embed leading and trailing spaces, as well as the null string. For example, the null string ``'' is represented by: .nf : .fi Once a string has been started, it may contain any character. Specifically, it may contain the sequence ``(*'', ``shell'', or ``include'' without starting a comment or including a file. Each line of a string must contain less than 1000 characters. Otherwise string sizes are limited only by the size of memory. .TP .B Shell\-include statements Shell include statements are of the form ``shell'', ``:'', and then a string. The result of the statement is that the string is executed (using popen, which passes the string to sh), and the standard output is included at that point. Shell-includes can be freely nested within include-files and other shell-includes. Shell commands may be more than one line, but must not exceed 1000 characters. The shell statement is not (yet) available on VMS. .TP .B Notation In the descriptions below: .RS .TP \fBtk \|{\fIinteger\fB\|}\fR means that token \fBtk \fR must be followed by an integer. .TP \fBtk \|[\fIinteger\fB\|]\fR means that \fBtk\fR may be followed by an integer, but doesn't have to. In most cases, if \fBtk\fR is not followed by an integer, then the command denoted by \fBtk \fR is ignored. .TP \fBtk \|[\|{\fIinteger\fB\|} \|{\fIinteger\fB\|}\|]* means that \fBtk\fR must be followed by an even number of integers. .PD .LP Supported types other than integer are: \fB\|{\fIfloat\fB\|} \fR for floating point entries, \fB\|{\fItoken\fB\|} \fR for any token, and \fB\|{\fIstring\fB\|} \fR for a string as defined above. .RE .TP .B TOP-LEVEL DESCRIPTION COMMANDS .RS .TP .B newgraph This starts editing a new graph (see GRAPH EDITING COMMANDS). Note that multiple graphs may be drawn on the same page. .TP \fBgraph \|{\fIinteger\fB\|}\fR This edits the graph denoted by \fB\|{\fIinteger\fB\|}. \fR If the graph doesn't exist, then this command creates it and starts editing it. \fBNewgraph\fR is simply an abbreviation for \fB\fIgraph\fB \fIn\fB\fR where n=0 if this is the first graph, otherwise n=m+1, where m is the largest number of any graph so far. .TP \fBcopygraph \|[\fIinteger\fB\|]\fR This creates a new graph, and copies all the attributes from the graph \fB\|[\fIinteger\fB\|]'s\fR x and y axes, as well as its \fB\fIx_translate\fB\fR and \fB\fIy_translate\fB\fR values, the clipping, the legend defaults, and the title defaults. If the \fB\|[\fIinteger\fB\|]\fR is omitted, then it copies its values from the ``previous'' graph, which is defined to be the graph with the largest number less than the currrent graph's number. If the current graph has the smallest number, then it will take the last graph from the previous page of graphs. If there is no previous page, then an error will be flagged. (copygraph does not copy the values of the \fB\fIhash_at\fB, \fImhash_at\fB,\fR and \fB\fI\fIhash_label\fB\fR attributes). .TP .B newpage This command is for plotting graphs on multiple pages. After a \fBnewpage,\fR the graphs that the user enters will be plotted on a new page. New graphs and strings will be numbered starting with 0. Essentially, \fB\fInewpage\fB\fR is the same as appending together the output of separate calls of jgraph on the text before the \fB\fInewpage,\fB\fR and on the text after the \fB\fInewpage.\fB\fR \fB\fINewpage\fB\fR will most likely produce bizarre results if the \fB\-P\fR option is not specified. .TP \fBX \|[\fIfloat\fB\|]\fR .br .ns .TP \fBY \|[\fIfloat\fB\|]\fR Postscript files to be embedded in LaTeX (and some other programs) contain a ``bounding box'' which defines the area which LaTeX will allocate for the postscript. Other programs use this bounding box as well, sometimes using it to define where to clip the postscript image. \fBJgraph \fR uses the axis lines and labels, and the title to generate its bounding box. Most of the time that's good enough to work in LaTeX. The \fB\fIY\fB\fR and \fB\fIX\fB\fR commands say to make the height and width of the bounding box at least \fB\fIY\fB\fR and \fB\fIX\fB\fR inches, respectively, but to maintain the current centering of the graph. If you still need further control over the bounding box (e.g. to change the centering), try the \fB\fIbbox\fB\fR command. If there's more than one page in the jgraph file, \fB\fIY,\fB\fR \fB\fIX\fB\fR and \fB\fIbbox\fB\fR values can be given for each graph. .TP \fBbbox \fIfloat\fB \fIfloat\fB \fIfloat\fB \fIfloat\fB\fR If the \fB\fIY\fB\fR and \fB\fIX\fB\fR commands aren't enough to help you define a good bounding box, this command lets you explicitly enter one which will go directly into the jgraph output. Its units are the final postscript units. It's probably best to use the \fB\-p\FR option to see what the bounding box is that jgraph produces, and then alter that accordingly with \fB\fIbbox.\fB\fR The main use for this is to change the automatic centering that jgraph performs: Usually the center of the bounding box that jgraph computes is put at the center of the page. Changing the bbox changes this center. .TP \fBpreamble : \|{\fIstring\fB\|}\fR .br .ns .TP \fBpreamble {\fItoken\fB\|}\fR .br .ns .TP \fBepilogue : \|{\fIstring\fB\|}\fR .br .ns .TP \fBepilogue {\fItoken\fB\|}\fR These two commands allow the user to include strings or files (the token specifies the filename) which will be copied directly into jgraph's output. The \fIpreamble\fB is included at the beginning of the output (after some initial postscript to set things up for jgraph), and the \fIepilogue\fB is included at the end. A good use for the \fIpreamble\fB is to set up a postscript dictionary if you're using postscript marks. .PD .RE .LP .TP .B GRAPH EDITING COMMANDS These commands act on the current graph. Graph editing is terminated when one of the top-level description commands is given. .RS .TP \fBxaxis\fR .br .ns .TP \fByaxis\fR Edit the x or y axis (see AXIS EDITING COMMANDS) .TP \fBnewcurve\fR This starts editing a new curve of the graph (see CURVE EDITING COMMANDS). .TP \fBcurve \|{\fIinteger\fB\|}\fR This edits the curve denoted by \fB\|{\fIinteger\fB\|}. \fR If the curve doesn't exist, then this command creates it and starts editing it. \fINewcurve\fB and \fIcurve\fB interact as \fInewgraph\fB and \fIgraph\fB do. .TP \fBnewline\fR This is an abbreviation for: .PP .nf newcurve marktype none linetype solid .fi .PP .TP \fBcopycurve \|[\fIinteger\fB\|]\fR This starts editing a new curve of the graph, and copies all its values except for the points from curve \fB\|[\fIinteger.\fB\|]\fR If the \fB\|[\fIinteger\fB\|]\fR is omitted, then it copies its values from the last curve in this graph. If this graph currently has no curves, then it searches backwards from the previous graph. .TP \fBtitle\fR This edits the title of the graph (see LABEL EDITING COMMANDS). The title is given a default location centered beneath the graph, and a default font size of 12, however, as with all labels, this can be changed. .TP \fBlegend\fR The edits the legend of the graph (see LEGEND EDITING COMMANDS). As a default, the graph will contain a legend if any of its curves have labels. .TP \fBnewstring\fR This edits a new text string (see LABEL EDITING COMMANDS). This is useful as it allows the user to plot text on the graph as well as curves. .TP \fBstring \|{\fIinteger\fB\|}\fR .br .ns .TP \fBcopystring \|[\fIinteger\fB\|]\fR \fIString\fB and \fIcopystring\fB are to \fInewstring\fB as \fIcurve\fB and \fIcopycurve\fB are to \fInewcurve.\fB .TP \fBborder\fR .br .ns .TP \fBnoborder\fR \fIBorder\fR\fB draws a square border around the area defined by the axes. \fINoborder\fB specifies no border. \fINoborder\fB is the default. .TP \fBclip\fR .br .ns .TP \fBnoclip\fR \fIClip\fB specifies that all curves in the graph will be clipped -- that is, no points outside of the of axes will be plotted. Clipping can also be specified on a per-curve basis. The default is \fInoclip.\fB .TP \fBinherit_axes\fR This is an old command which is kept for backward compatibility. \fICopycurve.\fB is equivalent to: .PP .nf newgraph inherit_axes .fi .PP .TP \fBx_translate \|[\fIfloat\fB\|]\fR .br .ns .TP \fBy_translate \|[\fIfloat\fB\|]\fR By default, the bottom left-hand corner of each graph is at point (0,0) (final postscript units). \fIX_translate\fB and \fIY_translate\fB translate the bottom left-hand corner of the graph \fB\|[\fIfloat\fB\|] \fR inches. The main use of this is to draw more than one graph on a page. Note that jgraph considers all the graphs drawn on the page when it computes its bounding box for centering. Thus, if only one graph is drawn, it will always be centered on the page, regardless of its \fIX_translate\fB and \fIY_translate\fB values. These values are used for relative placement of the graphs. To change the centering of the graphs, use \fIbbox.\fB .TP \fBX \|[\fIfloat\fB\|]\fR .br .ns .TP \fBY \|[\fIfloat\fB\|]\fR These are the same as \fIX\fB and \fIY\fB in the Top-level commands, except that they let the user continue editing the current graph. .PD .RE .LP .TP .B SIMPLE AXIS EDITING COMMANDS These commands act on the current axis as chosen by \fIxaxis\fB or \fIyaxis\fB (see GRAPH EDITING COMMANDS). Axis editing terminates when a graph or top-level command is given. There are more advanced axis editing commands given below which have to do with moving the hash marks, adding new hash marks and labels, etc. See ADVANCED AXIS EDITING COMMANDS. .RS .TP \fBlinear\fR .br .ns .TP .B log Set the axis to be linear or logarithmic. The default is linear. If the axis is set to be logarithmic, then values <= 0.0 will be disallowed, as they are at negative infinity on the axis. .TP \fBmin \|[\fIfloat\fB\|]\fR .br .ns .TP \fBmax \|[\fIfloat\fB\|]\fR Set the minimum and maximum values of this axis. Defaults depend on the points given. They can be seen by using the \fB\-p \fR option. Unless stated, all units (for example point plotting, string plotting, etc.) will be in terms of the \fImin\fB and \fImax\fB values of the x and y axes. .TP \fBsize \|[\fIfloat\fB\|]\fR Set the size of this axis in inches. .TP \fBlog_base \|[\fIfloat\fB\|]\fR Set the base of the logarithmic axis. Default = 10. This is the value which determines which hash marks and hash labels are automatically produced. .TP \fBhash \|[\fIfloat\fB\|]\fR Hash marks will be \fB\|[\fIfloat\fB\|] \fR units apart. Default = -1. If this value equals 0, then there will be no hash marks. If this value is less than 0, then the hash marks will be automatically set by \fBjgraph \fR (see \fB\-p \fR for the value). By default, each hash mark will be labeled with its value. \fIHash\fB and \fIshash\fB are ignored if the axes are logarithmic. .TP \fBshash \|[\fIfloat\fB\|]\fR Make sure there is a hash mark at the point \fB\|[\fIfloat\fB\|] \fR along the axis. The default is set by \fBjgraph\fR if \fBhash\fR = -1. If \fIhash\fB is set by the user, \fIshash\fB is defaulted to the \fImin\fB value of the axis. .TP \fBmhash \|[\fIinteger\fB\|]\fR Put \fB\|[\fIinteger\fB\|] \fR minor hash marks between the above hash marks. Default = -1. If this value equals 0, then there will be no minor hash marks. If this value is negative, then the value will be chosen by \fBjgraph \fR (see \fB\-p\fR for the value). .TP \fBprecision \|[\fIinteger\fB\|]\fR .TP \fBhash_format \fItoken\fB\fR These control how jgraph formats the automatic hash labels. The user shouldn't have to worry about these values, except in extreme cases. Jgraph uses \fBprintf\fR to format the labels. If \fBhash_format\fR is ``f'' (the default), then the value of a hash label is printed with .PP .nf printf("%.*f", precision, value). .fi .PP Other valid \fBhash_format\fR values are ``G'', ``g'', ``E'', and ``e''. ``G'' is a good generic format which converts to scientific notation if the value becomes too big or too small. If the precision is negative, then jgraph chooses a default: For ``g'' and ``G'', the default is 6. For ``e'' and ``E'', the default is 0, and for ``f'', jgraph tries to determine a reasonable default. Please read the man page of \fBprinf(1)\fR for a complete description of how it formats floating point numbers. .TP \fBlabel\fR Edit the label of this axis (see LABEL EDITING COMMANDS). By default, the label is in font ``Times-Bold'', and has a font size of 10. If the user doesn't change any of the plotting attributes of the label, \fBjgraph \fR chooses an appropriate place for the axis label. .TP \fBdraw_at \|[\fIfloat\fB\|]\fR Draw the axis line at this point on the other axis. The default is usually the other axis's \fImin, \fB however if \fIhash_scale \fB is positive (see \fIhash_scale \fB under ADVANCED AXIS EDITING), it will be the other axis's \fImax.\fB .TP \fBnodraw\fR Do not draw the axis, the hash marks or any labels. This is useful for plotting points with no axes, and for overlaying graphs on top of one another with no clashes. This is equivalent to \fIno_draw_axis,\fB \fIno_draw_axis_label,\fB \fIno_draw_hash_marks,\fB and \fIno_draw_hash_labels.\fB .TP \fBdraw\fR Cancels the effect of \fInodraw. \fB Default = \fIdraw.\fB This is equivalent to \fIdraw_axis,\fB \fIdraw_axis_label,\fB \fIdraw_hash_marks,\fB and \fIdraw_hash_labels.\fB .TP \fBgrid_lines\fR .br .ns .TP \fBno_grid_lines\fR \fIGrid_lines\fB specifies to plot a grid line at each major hash mark on this axis. The default is \fIno_grid_lines.\fB .TP \fBmgrid_lines\fR .br .ns .TP \fBno_mgrid_lines\fR \fIMgrid_lines\fB specifies to plot a grid line at each minor hash mark on this axis. The default is \fIno_mgrid_lines.\fB .PD .RE .LP .TP .B CURVE EDITING COMMANDS These commands act on the current curve as chosen by \fInewcurve\fB or \fIcurve\fB (see GRAPH EDITING COMMANDS). Curve editing terminates when a graph or top-level command is given. .RS .TP \fBpts \|[\|{\fIfloat\fB\|} \|{\fIfloat\fB\|}\|]*\fR This sets the points to plot in this curve. The first \fIfloat\fB is the x value, and the second \fIfloat\fB is the y value of the point. Points are plotted in the order specified. This command stops reading points when a non-float is given. The user can specify this command multiple times within a curve -- each time, simply more points are added to the curve. .TP \fBx_epts \|[\|{\fIfloat\fB\|} \|{\fIfloat\fB\|} \|{\fIfloat\fB\|} \|{\fIfloat\fB\|}\|]*\fR .br .ns .TP \fBy_epts \|[\|{\fIfloat\fB\|} \|{\fIfloat\fB\|} \|{\fIfloat\fB\|} \|{\fIfloat\fB\|}\|]*\fR This allows the user to specify points and ``confidence values'' (otherwise known as ``error bars''). The first two \fIfloats\fB specify the x and y values of the point, as above. If \fBx_epts\fR is specified, then the second two \fIfloats\fB specify range or confidence values for the x value of the point. Error bars will be printed to each of these x values (using the original point's y value) from the original point. Similarly, \fIy_epts\fB specifies range or confidence values for the y value of the point. \fIpts\fB \fIx_epts\fB and \fIy_epts\fB can all be intermixed. .TP \fBmarktype\fR This sets the kind of mark that is plotted for this curve. Valid marks are: \fIcircle\fR, \fIbox\fR, \fIdiamond\fR, \fItriangle\fR, \fIx\fR, \fIcross\fR, \fIellipse\fR, \fIxbar\fR, \fIybar\fR, \fItext\fR, \fIpostscript\fR, \fIeps\fR, \fInone\fR, and variants of \fIgeneral\fR. Most of these are self-explanatory, except for the last few: \fIXbar\fR makes the curve into a bar graph with the bars going to the x axis. \fIYbar\fR has the bars going to the y axis. \fIText\fR lets the user plot text instead of a mark. The text is editted as a label (see LABEL EDITING COMMANDS) immediately following the \fItext\fR command. The x and y fields of the label have special meanings here: They define where the label is to be printed in relation to the curve points. For example, if they are both 0, the label will be printed directly on the curve points. If x is 1.0 and y is -1.0, then the label will be printed one unit to the right and one unit below the curve points (units are units of the x and y axes). Default label values are 0 for x and y, and center justification. \fIPostscript:\fR See the \fIpostscript\fB token below. \fIEps:\fR See the \fIeps\fB token below. \fINone\fR means that no mark will be plotted (this is useful for drawing lines). There are four types of \fIgeneral\fR marks, which work using the \fIgmarks\fB command described below. The four marktypes are \fIgeneral\fR, \fIgeneral_nf\fR, \fIgeneral_bez\fR, and \fIgeneral_bez_nf\fR. By default, a new mark is chosen for each curve. .TP \fBmarksize \|[\fIfloat\fB\|] \|[\fIfloat\fB\|]\fR This sets the size of the mark. The first \fB\|[\fIfloat\fB\|] \fR is the width of the mark, and the second is the height. Units are those of the x and y axes respectively, unless that axis is logarithmic, in which case the units are inches. Negative marksizes are allowed (e.g. a negative height will flip a \fItriangle\fR mark). The default mark size can be determined using the \fB\-p\fR option of \fBjgraph\fR .TP \fBmrotate \|[\fIfloat\fB\|]\fR This allows the user to rotate the mark \fB\|[\fIfloat\fB\|] \fR degrees. Default is zero. .TP \fBgray \|[\fIfloat\fB\|]\fR .br .ns .TP \fBcolor \|[\fIfloat\fB \fIfloat\fB \fIfloat\fB\|]\fR These specify either the grayness of the curve or its color. Values for \fIgray\fR should be from 0 (black) to 1 (white). Values for \fIcolor\fR\fB should also be from 0 to 1. They are RGB values, and thus define the amount of red, green and blue in the curve respectively. Specifying color nullifies the gray value, and vice versa. The default is \fIgray 0\fB .TP \fBfill \|[\fIfloat\fB\|]\fR .br .ns .TP \fBcfill \|[\fIfloat\fB\| \|\fIfloat\fB\| \|\fIfloat\fB\|]\fR This sets the filling of marks which define an area to fill (e.g. \fIbox\fR, \fIcircle\fR, \fIxbar\fR). \fIfill\fB defines a gray value, and \fIcfill\fB defines a color value (see \fIgray\fB and \fIcolor\fB above for a description of the units). The default is \fIfill 0\fB (black). .TP \fBpattern \fItoken\fB \|[\fIfloat\fB\|]\fR This defines the how the mark is to be filled. \fIToken\fR may be \fIsolid\fR (the default), \fIstripe\fR, or \fIestripe\fR. If \fIsolid\fR, then the \fIfloat\fR is ignored, and the mark is completely filled in with either the gray value defined by \fIfill\fR or the color value defined by \fIcfill\fR. If \fIstripe\fR, then the mark will be filled with stripes of either the gray value defined by \fIfill\fR or the color defined by \fIcfill\fR. The stripes will be rotated by \fIfloat\fR degrees. \fIEstripe\fR differs from \fIstripe\fR only in that \fIstripe\fR draws stripes on a white background, while \fIestripe\fR simply draws the stripes on an empty background. .TP \fBpoly\fR .br .ns .TP \fBnopoly\fR .br .ns .TP \fBpfill \|[\fIfloat\fB\|]\fR .br .ns .TP \fBpcfill \|[\fIfloat\fB\| \|\fIfloat\fB\| \|\fIfloat\fB\|]\fR .br .ns .TP \fBppattern \fItoken\fB \|[\fIfloat\fB\|]\fR \fIPoly\fB allows the user to make jgraph treat the curve as a closed polygon (or in the case of a bezier, a closed bezier curve). \fIpfill\fB, \fIpcfill\fB and \fIppattern\fB specify the filling of the polygon, and work like \fIfill\fB, \fIcfill\fB and \fIpattern\fB above. The default is \fInopoly\fB. .TP \fBgmarks \|[\|{\fIfloat\fB\|} \|{\fIfloat\fB\|}\|]*\fR \fIGmarks\fB is a way for the user to define custom marks. For each mark on \fI(x,y),\fB Each pair of \fB\|{\fIfloat_x\fB\|}, \|{\fIfloat_y\fB\|}, \fR will define a point on the mark (x + \fB(\fIfloat_x\fB * \fImarksize_x\fB / 2), y + (\fIfloat_y\fB * \fImarksize_y\fB / 2)).\fR Thus, for example, the \fIbox\fR mark could be defined as .PP .nf gmarks -1 -1 -1 1 1 1 1 -1 marktype general .fi .PP The marktypes \fIgeneral\fR, \fIgeneral_nf\fR, \fIgeneral_bez\fR, and \fIgeneral_bez_nf\fR, allow the gmarks points to define a closed polygon, a line, a closed bezier curve and a regular bezier curve respectively (the ``nf'' stands for ``non-filled''). .TP \fBpostscript : \|{\fIstring\fB\|}\fR .br .ns .TP \fBpostscript {\fItoken\fB\|}\fR This allows the user to enter direct postscript as a mark. It automatically sets the marktype to \fIpostscript\fR. If a string is entered, then that string is used as the mark in the jgraph output. If a token is entered, then that token must stand for a filename, which will be copied to the output once for every mark. The postscript will be set up so that when the string or file is put to the output, (0, 0) of the the axes is in the middle of the mark, it is rotated by \fImrotate\fB degrees, and scaled by (\fImarksize_x\fB / 2), \fImarksize_y\fB / 2). Thus, the \fIbox\fR mark could be defined as: .PP .nf postscript : 1 setlinewidth -1 -1 moveto -1 1 lineto \\ 1 1 lineto 1 -1 lineto -1 -1 lineto stroke .fi .PP If the \fImarksize_x\fB is defined to be (0, 0), then jgraph does no scaling. This is useful when the postscript has strings, and the user does not want the strings to be scaled. .TP \fBeps {\fItoken\fB\|}\fR This allows the user to include an encapsulated postscript file and treat it as a mark. It automatically sets the marktype to \fIeps\fB. The file will be scaled so that the bounding box is \fImarksize\fR units. Among other things, this allows the user to include whole jgraph files as marks. Please see ad.jgr, explained in HINTS AND EXAMPLE GRAPHS below for an example of this feature. .TP \fBlarrows\fR .br .ns .TP \fBrarrows\fR .br .ns .TP \fBnolarrows\fR .br .ns .TP \fBnorarrows\fR \fIRarrows\fB specifies to draw an arrow at the end of every line segment in the curve. \fILarrows\fB specifies to draw an arrow at the beginning of every line segment. The size of the arrows can be changed by using \fIasize.\fB The default is \fInolarrows\fB and \fInorarrows\fB. Arrows always go exactly to the point specified, with the exception of when the marktype is ``circle''. In this case, the arrow goes to the edge of the circle. .TP \fBlarrow\fR .br .ns .TP \fBrarrow\fR .br .ns .TP \fBnolarrow\fR .br .ns .TP \fBnorarrow\fR This is analgous to the above, except that with \fIlarrow\fB, the only arrow drawn is to the beginning of the first segment in the curve, and with \fIrarrow\fB, the only arrow drawn is to the end of the last segment. .TP \fBasize \|[\fIfloat\fB\|] \|[\fIfloat\fB\|]\fR This sets the size of the arrows. The first \fB\|[\fIfloat\fB\|] \fR controls the arrow's width. Its units are those of the x-axis. The second \fB\|[\fIfloat\fB\|] \fR controls the arrow's height. It is in the units of the y-axis. Use the -p option of jgraph to see the default values. .TP \fBafill \|[\fIfloat\fB\|]\fR .br .ns .TP \fBafill \|[\fIfloat\fB\|]\fR .br .ns .TP \fBapattern \fItoken\fB \|[\fIfloat\fB\|]\fR These control the grayness or color of arrowheads. \fIAfill\fB, \fIacfill\fB and \fIapattern\fB work in the same way as \fIfill\fB, \fIcfill\fB and \fIpattern\fB described above. The default is \fIafill 0\fB (black). .TP \fBlinetype \|[\fItoken\fB\|]\fR This defines the type of the line connecting the points. Valid entries are \fIsolid\fR, \fIdotted\fR, \fIdashed\fR, \fIlongdash\fR, \fIdotdash\fR, \fIdotdotdash\fR, \fIdotdotdashdash\fR, \fIgeneral\fR, and \fInone\fR. The default is \fInone\fR. \fIGeneral\fR lets the user define his own linetype using the \fIglines\fB command described below. Points are connected in the order in which they are inserted using the \fIpts\fB command. .TP \fBglines \|[\fIfloat\fB\|]*\fR This lets the user specify the exact dashing of a line. The format is as in postscript -- the first number is the length of the first dash, the second is the length of the space after the first dash, etc. For example, \fIdotdash\fB could be defined as ``\fIglines\fB 5 3 1 3''. .TP \fBlinethickness \|[\fIfloat\fB\|]\fR This defines the line thickness (in absolute postscript units) of the connecting line. Default = 1.0. .TP \fBbezier\fR .br .ns .TP \fBnobezier\fR .br .ns \fIBezier\fB specifies to use the curve's points to define successive bezier curves. The first point is the starting point. The next two are control points for the bezier curve and the next point is the ending point. If there is another bezier, this ending point is also the beginning point of the next curve. The next two points are again control points, and the next point is the ending point. Thus, a bezier must have a total of (3n + 1) points, where n is at least 1. In bezier curves, marks and arrows only apply to every third point. \fINobezier\fB is the default. .TP \fBclip\fR This specifies that this curve will be clipped -- that is, no points outside of the of axes will be plotted. .TP \fBnoclip\fR This turns off clipping. If clipping was specified for the entire graph, then \fInoclip\fB has no effect. \fINoclip\fB is the default. .TP \fBlabel\fR This edits the label of this curve for the purposed of drawing a legend. (see LABEL EDITING COMMANDS and LEGEND EDITING COMMANDS). Unless the legend entry is \fIcustom\fB, setting any label attribute except for the text itself will have no effect. .PD .RE .LP .TP .B LABEL EDITING COMMANDS The following commands are used for editing labels. Unless stated otherwise, the defaults are written with each command. Label editing terminates when one of these tokens is not given. .RS .TP \fB: \|{\fIstring\fB\|}\fR This sets the string of the label. If no string is set, the label will not be printed. .TP \fBx \|[\fIfloat\fB\|]\fR .br .ns .TP \fBy \|[\fIfloat\fB\|]\fR This sets the x or y coordinate of the label. Units are the units of the x and y axes respectively. .TP \fBfont \|[\fItoken\fB\|]\fR This sets the font. Default is usually ``Times-Roman''. .TP \fBfontsize \|[\fIfloat\fB\|]\fR This sets the fontsize in points. Default is usually 9. .TP \fBlinesep \|[\fIfloat\fB\|]\fR This sets the distance between lines in multilined labels. Units are points. The default is the fontsize. .TP \fBhjl\fR .br .ns .TP \fBhjc\fR .br .ns .TP \fBhjr\fR These set the horizontal justification to left, center, and right, respectively. Default = \fIhjc.\fB .TP \fBvjt\fR .br .ns .TP \fBvjc\fR .br .ns .TP \fBvjb\fR These set the vertical justification to top center, and bottom, respectively. Default = \fIvjb.\fB .TP \fBrotate \|[\fIfloat\fB\|]\fR This will rotate the string \fB\|[\fIfloat\fB\|] \fR degrees. The point of rotation is defined by the \fIvj\fB and \fIhj\fB commands. For example, to rotate 90 degrees about the center of a string, one would use \fIvjc hjc rotate 90.\fB .TP \fBlgray \|[\fIfloat\fB\|]\fR .br .ns .TP \fBlcolor \|[\fIfloat\fB \fIfloat\fB \fIfloat\fB\|]\fR These control the color or the grayness of the label. It works just as \fIgray\fB and \fIcolor\fB do for curves and axes. The default depends on the context. For example, for strings and the title, the default is black. For axis labels and hash labels, the default is the color of the axis. For text as marks, the default is the curve color. .PD .RE .LP .TP .B LEGEND EDITING COMMANDS These commands allow the user to alter the appearance of the legend. Legends are printed out for each curve having a non-null label. The legend entries are printed out in the order of ascending curve numbers. Legend editing terminates when a graph command or top level command is issued. In earlier versions of jgraph (before version 8.0), the characteristics of each legend entry were set in the label portion of the entry's curve. Thus, for example, if you wanted each entry's fontsize to be 18, you had to set it in each entry's curve. Now, default legend entry characteristics are set using the \fIdefaults\fB keyword. Unless a \fIcustom\fB legend is specified, these default values override any values set in the entry's curve. Thus, to get all entries to have a fontsize of 18, it must be set using \fIdefaults fontsize 18.\fB If legend editing seems cryptic, try the following example: .PP .nf newgraph newcurve marktype box linetype solid label : Solid box pts 0 0 1 1 2 1 3 1 newcurve marktype circle linetype dotted label : Dotted circle pts 0 1 1 2 2 2 3 2 newcurve marktype x linetype dashed label : Dashed x pts 0 2 1 3 2 3 3 3 legend defaults font Times-Italic fontsize 14 x 1.5 y 3.5 hjc vjb .fi .PP The legend of this graph should be centered over the top of the graph, and all legend entries should be 14pt Times-Italic. .RS .TP \fBon\fR .br .ns .TP \fBoff\R These turn printing of the legend on and off. The default is on (but, of course, if there are no curve labels defined, there will be no legend). .TP \fBlinelength \|[\fIfloat\fB\|]\fR This sets the length of the line printed in front of legend entries corresponding to curves which have lines. Units are those of the x axis, unless the x axis is logarithmic, in which case the units are inches. The default may be gotten using the \fB\-p\fR option. .TP \fBlinebreak \|[\fIfloat\fB\|]\fR This sets the vertical distance between individual legend entries. Units are those of the y axis, unless the y axis is logarithmic, in which case the units are inches. The default may be gotten using the \fB\-p\fR option. .TP \fBmidspace \|[\fIfloat\fB\|]\fR This sets one of two things. If any of the legend entries have lines in them, then this sets the distance between the end of the line and the legend entry text. Otherwise, this sets the distance between center of the mark and the legend entry text. Units are those of the x axis, unless the x axis is logarithmic, in which case the units are inches. The default may be gotten using the \fB\-p\fR option. .TP \fBdefaults\fR This lets the user change the attributes of all legend entries. The defaults are editted as a label (see LABEL EDITING COMMANDS). A few of the label fields have special meanings: The \fI:\fR field is ignored. The \fIx\fR and \fIy\fR fields define where the label will be printed. The \fIhj\fR and \fIvj\fR fields define the justification of the legend about the \fIx\fR and \fIy\fR point. Thus, if \fIx\fR is 10 and \fIy\fR is 15, and \fIhjc vjb\fR are specified, then the legend will be centered horizontally about x=10, and the bottom of the legend will be placed on y=15. This is analagous to label plotting. The \fIrotate\fR field is also analagous to label plotting. Defaults are as follows. \fIRotate\fR is 0. \fIfont\fR is ``Times-Roman'' and \fIfontsize\fR is 9. The color is black. Default justification is \fIhjl\fR and \fIvjc\fR. The default \fIx\fR and \fIy\fR values are set according to the \fIhj\fR and \fIvj\fR fields. See the \fB\-p\fR option. .TP \fBleft\fR .br .ns .TP \fIright\fB These will automatically produce a legend to the left or the right of the graph. \fILeft\fB is equivalent to \fIdefaults hjr vjc\fB and \fIright\fB is equivalent to \fIdefaults hjl vjc.\fB .TP \fBtop\fR .br .ns .TP \fBbottom\fR These will automatically produce a legend on the top or the bottom of the graph. \fITop\fB is equivalent to \fIdefaults hjl vjb\fB and \fIbottom\fB is equivalent to \fIdefaults hjl vjt.\fB .TP \fBx \|[\fIfloat\fB\|]\fR .br .ns .TP \fBy \|[\fIfloat\fB\|]\fR These are included mainly for backward compatability to earlier versions of jgraph. Setting \fIx\fB and \fIy\fB is equivalent to ``defaults x \fIfloat\fB y \fIfloat\fB hjl vjt'' .TP \fBcustom\fR This lets the user control where each individual legend entry goes. The values of the \fIdefaults\fB fields are ignored, and instead, the values of the curve's labels are used. All justifications have defined results, except for \fIhjc\fB. Similarly, rotation other than 0 is likely to produce bad effects. .PD .RE .LP .TP .B ADVANCED AXIS EDITING These are more advanced commands for editing an axis. This includes drawing explicit hash marks and labels, moving the hash marks, axes, and labels, not drawing the hash marks, labels, axes, etc. .RS .TP \fBgray \|[\fIfloat\fB\|]\fR .br .ns .TP \fBcolor \|[\fIfloat\fB \fIfloat\fB \fIfloat\fB\|]\fR These specify either the grayness of the axis or its color. Values for \fIgray\fB should be from 0 (black) to 1 (white). Values for \fIcolor\fB should also be from 0 to 1. They are RGB values, and thus define the amount of red, green and blue in the axis respectively. Specifying color nullifies the gray value, and vice versa. The default is \fIgray 0\fB. These values affect every part of the axis: the label, the hash marks and labels, the axis line and the grid lines. .TP \fBgrid_gray \|[\fIfloat\fB\|]\fR .br .ns .TP \fBgrid_color \|[\fIfloat\fB \fIfloat\fB \fIfloat\fB\|]\fR .br .ns .TP \fBmgrid_gray \|[\fIfloat\fB\|]\fR .br .ns .TP \fBmgrid_color \|[\fIfloat\fB \fIfloat\fB \fIfloat\fB\|]\fR These allow the user to define the grayness or color of the gridlines and the mgridlines to be different from those of the axis lines. The default \fIgrid_gray\fB and \fIgrid_color\fB is the same as the axis's \fIgray\fB and \fIcolor\fB. The default \fImgrid_gray\fB and \fImgrid_color\fB is the same as \fIgrid_gray\fB and \fIgrid_color\fB. .TP \fBhash_at \|[\fIfloat\fB\|]\fR Draw a hash mark at this point. No label is made for this hash mark. .TP \fBmhash_at \|[\fIfloat\fB\|]\fR Draw a minor hash mark at this point. .TP \fBhash_label\fR Edit a hash label (see HASH LABEL EDITING COMMANDS). .TP \fBhash_labels\fR Edit the default characteristics of the hash labels. This is so that the user can change the fontsize, justification, etc., of the hash labels. Editing \fIhash_labels \fB is just like editing normal labels (see LABEL EDITING COMMANDS), except that the \fI:,\fB \fIx,\fB and \fIy\fB values are all ignored. Defaults for hash labels are as follows: Fontsize=9, Font=``Times-Roman'', Justification is dependent on whether it is the x or y axis and whether \fIhash_scale\fB is positive or negative. .TP \fBhash_scale \|[\fIfloat\fB\|]\fR This is to change the size and orientation of the hash marks. Default = -1.0. Changing this to -2.0 will double the length of the hash marks. Changing this to +1.0 will make the hash marks come above or to the right of the axis. .TP \fBdraw_hash_marks_at \|[\fIfloat\fB\|]\fR By default, the hash marks are drawn either above or below the axis. This command changes where they are drawn. \fIHash_scale\fB still determines whether they are drawn above or below this point, and their size. .TP \fBdraw_hash_labels_at \|[\fIfloat\fB\|]\fR By default, the hash labels are drawn either above or below the hash marks (again, this is dependent on \fIhash_scale\fB). This command changes where they are drawn. Justification and fontsize, etc., can be changed with the \fIhash_labels\fB command. .TP \fBauto_hash_marks\fR .br .ns .TP \fBno_auto_hash_marks\fR This toggles whether or not \fBjgraph \fR will automatically create hash marks according to \fIhash,\fB \fImhash\fB and \fIshash\fB (or \fIlog_base\fB and \fImhash\fB for logarithmic axes). The default is \fIauto_hash_marks.\fB .TP \fBauto_hash_labels\fR .br .ns .TP \fBno_auto_hash_labels\fR This toggles whether or not \fBjgraph \fR will automatically create hash labels for the \fIauto_hash_marks\fB. Default = \fIauto_hash_labels\fB. .TP \fBdraw_axis\fR .br .ns .TP \fBno_draw_axis\fR This toggles whether or not the axis line is drawn. Default = \fIdraw_axis.\fB .TP \fBdraw_axis_label\fR .br .ns .TP \fBno_draw_axis_label\fR This toggles whether or not the axis label (as editted by the \fIlabel\fB command) is drawn. Default = \fIdraw_axis_label.\fB .TP \fBdraw_hash_marks\fR .br .ns .TP \fBno_draw_hash_marks\fR This toggles whether or not the hash marks (both automatic and those created with \fIhash_at\fB and \fImhash_at\fB) are drawn. Default = \fIdraw_hash_marks.\fB .TP \fBdraw_hash_labels\fR .br .ns .TP \fBno_draw_hash_labels\fR This toggles whether or not the hash labels are drawn. Default = \fIdraw_hash_labels.\fB .PD .RE .LP .TP .B HASH LABEL EDITING COMMANDS Hash labels are simply strings printed along the appropriate axis. As a default, they are printed at the place denoted by the most recent \fIhash_at\fB or \fImhash_at\fB for this axis, but this can be changed by the \fIat\fB command. If there has been no \fIhash_at\fB or \fImhash_at,\fB then an \fIat\fB command must be given, or there will be an error. Hash editing terminates when either one of these commands is not given. .RS .TP \fB: \|{\fIstring\fB\|}\fR This sets the string of the hash label (see \fBStrings\fR above under THE DESCRIPTION LANGUAGE). .TP \fBat \|[\fIfloat\fB\|]\fR This sets the location of the hash label along the current axis. .PD .RE .LP .SH FUNCTION PLOTTING AND OTHER NON-INHERENT FEATURES Although \fBjgraph \fR doesn't have any built-in functions for interpolation or function plotting, both can be effected in \fBjgraph \fR with a little outside help: .TP \fBFunction plotting\fR With the \fIinclude\fB and \fIshell\fB statement, it's easy to create a file of points of a function with a c or awk program, and include it into a graph. See the section HINTS AND EXAMPLE GRAPHS for an example of a sin graph produced in this manner. .TP \fBPoint interpolation\fR Point interpolation is essentially the same as function plotting, and therefore is left out of \fBjgraph. \fR The UNIX spline(1) routine is a simple way to get interpolation between points. See bailey.jgr described below. Maybe in a future release. .SH HINTS AND EXAMPLE GRAPHS \fBJgraph \fR should be able to draw any kind of scatter/line/bar graph that a user desires. To embellish the graph with extra text, axes, lines, etc., it is helpful to use \fIcopygraph.\fB The following example graphs show a few examples of different features of jgraph. They should be in the directory JGRAPH_DIR. .sp - acc.jgr is a simple bar graph. Acc.tex is also included to show how one can include the output of jgraph in a LaTeX file. To get this to work, you might have to substitute the entire pathname of the file acc.jps in the acc.tex file. .sp - g8.jgr is a simple graph with some plotted text. - g8col.jgr shows how to produce a color background -- it is the same as g8.jgr only all on a yellow background. - ebars.jgr is a simple graph with error bars. - sin.jgr shows how a sin function can be plotted using a simple c program to produce the sin wave. Moreover, this file shows a use of \fIcopygraph\fB to plot an extra x and y axis at the 0 point. .sp - sin1.jgr is a further extension of sin.jgr only with one x and y axis at 0, but with the axis labels at the left and the bottom of the graph. .sp - sin2.jgr is a different sin wave with a logarithmic x axis. .sp - sin3.jgr shows how a bizarre effect can be gotten by sorting the points in a different manner. .sp - bailey.jgr shows how to use the UNIX spline(1) routine to get interpolation between points. .sp - gpaper.jgr shows how you can get jgraph to easily produce graph paper. .sp - g9n10.jgr contains two graphs with complicated legends. It contains a description of how the legend was created. .sp - ex1.jgr and ex2.jgr are two examples which were figures 1 and two in an extended abstract for a paper about jgraph. .sp - mab2.jgr is a graph created by Matt Blaze which shows how a complicated output graph can be quite concisely and simply stated. In this graph, the x axis is a time line. It shows usage of the \fIhash_label\fB and \fIhash_labels\fB commands, as well as displaying how jgraph lets you extract data from output files with awk. .sp - nr.jgr is an example of a rather complicated bar graph with stripe-filled bars. It was created by Norman Ramsey. .sp - hypercube.jgr shows an interesting use of jgraph for picture-drawing. .sp - ad.jgr is an example which shows how one can include jgraph output as jgraph input. The file uses the \fIeps\fR token to include cube.jgr, a jgraph drawing of an Intel hypercube, and disk.jgr, a jgraph drawing of a disk, in a picture. .sp - alb.jgr is another use of jgraph for picture drawing. This file was created by an awk script which Adam Buchsbaum wrote to draw trees and graphs. .sp - wortman.jgr is a neat graph of processor utilization written by Dave Wortman for SIGPLAN '92. It was created by an awk script, which processed the data and emitted the jgraph. .sp To view these graphs, use jgraph -P, and view the resulting output file with \fIgs,\fB or a similar postscript viewer. To make a hard copy of these graphs, pipe the output of jgraph -P directly to \fIlpr.\fB .SH USING JGRAPH TO DRAW PICTURES As hypercube.jgr and alb.jgr show, jgraph can be used as a postscript preprocessor to make drawings. There are two advantages using jgraph to draw pictures instead of using standard drawing tools like \fIxfig\fB, \fIfigtool\fB, or \fIidraw\fB. The first is that with jgraph, you know exactly where strings, lines, boxes, etc, will end up, because you plot them explicitly. The second advantage is that for iterative drawings, with lots of patters, you can combine jgraph with awk or c or any other programming language to get complex output in a simple way. Most what-you-see-is-what-you-get (WYSIWYG) drawing tools cannot do this. The major disadvantage of using jgraph to draw pictures is that jgraph is not WYSIWYG. You have to set up axes and plot points, lines and strings. It's all a matter of taste. If you'd like to see some more complex pictures drawn with jgraph, as well as some hints to make picture-drawing easier, send me email (jsp@princeton.edu). .SH EMBEDDING THE OUTPUT IN LATEX I haven't read the manuals, but the way I've been loading these files into LaTeX has been as follows: .PP .nf 1. Toward the beginning of my LaTeX file, I've had ``\\input{psfig}'' 2. Where I've wanted my file, I've put: \\begin{figure} \\centerline{\\psfig{figure=/}} \\end{figure} Some versions of dvips or dvi2ps work without the path-name. Others require that the path-name be present. 3. After running latex on the file, do lpr -d file.dvi 4. If that doesn't work, try dvips-ing the file and printing the postscript. .fi .PP .SH BUGS Logarithmic axes cannot contain points <= 0. If I have enough complaints to convince me that this is a bug, I'll try to fix it. .sp There is no real way to make the axes such that they decrease from left to right or low to high -- or at least not without writing your own hash labels. .sp There may well be loads of other bugs. Send to jsp@princeton.edu. .sp This is $Revision: 8.3 $. jgraph-83.orig/jgraph.c100664 1750 50 17240 6273276352 13533 0ustar osirissrc/* * $Source: /tmp_mnt/n/fs/grad1/jsp/src/jgraph/RCS/jgraph.c,v $ * $Revision: 8.3 $ * $Date: 92/11/30 11:42:21 $ * $Author: jsp $ */ #include #ifdef VMS #include #endif #include "jgraph.h" int NMARKTYPES = 17; int NORMALMARKTYPES = 6; char *MARKTYPESTRS[] = { "circle", "box", "diamond", "triangle", "x", "cross", "ellipse", "general", "general_nf", "general_bez", "general_bez_nf", "postscript", "eps", "xbar", "ybar", "none", "text"}; char MARKTYPES[] = { 'o', 'b', 'd', 't', 'x', 'c', 'e', 'g', 'G', 'Z', 'B', 'p', 'E', 'X', 'Y', 'n', 'l' }; int NPATTERNS = 3; char *PATTERNS[] = { "solid", "stripe", "estripe" }; char PTYPES[] = { 's', '/', 'e' }; Label new_label() { Label l; int i; l = (Label) malloc (sizeof(struct label)); l->label = CNULL; l->hj = 'c'; l->vj = 'b'; l->font = "Times-Roman"; l->fontsize = 9.0; l->rotate = 0; l->graytype = 'n'; for (i = 0; i < 3; i++) l->gray[i] = 0.0; l->linesep = FSIG; return l; } Curve new_curve(c, num) Curve c; int num; { Curve new_c; int i; new_c = (Curve) get_node(c); new_c->num = num; new_c->l = new_label(); new_c->l->vj = 't'; new_c->lmark = new_label(); new_c->lmark->hj = 'c'; new_c->lmark->vj = 'c'; new_c->clip = 0; new_c->pattern = 's'; new_c->parg = FSIG; new_c->apattern = 's'; new_c->aparg = FSIG; new_c->ppattern = 's'; new_c->pparg = FSIG; new_c->graytype = 'n'; for (i = 0; i < 3; i++) new_c->gray[i] = 0.0; new_c->afilltype = 'g'; for (i = 0; i < 3; i++) new_c->afill[i] = 0.0; new_c->pts = (Point) make_list(sizeof(struct point)); new_c->yepts = (Point) make_list(sizeof(struct point)); new_c->xepts = (Point) make_list(sizeof(struct point)); new_c->npts = 0; new_c->gen_linetype = (Flist) make_list(sizeof(struct flist)); new_c->marktype = MARKTYPES[num % NORMALMARKTYPES]; new_c->linetype = '0'; new_c->linethick = 1.0; new_c->marksize[0] = FSIG; new_c->marksize[1] = FSIG; new_c->mrotate = 0.0; new_c->general_marks = (Point) make_list(sizeof(struct point)); new_c->filltype = 'n'; for (i = 0; i < 3; i++) new_c->fill[i] = 0.0; new_c->pfilltype = 'n'; for (i = 0; i < 3; i++) new_c->pfill[i] = 0.0; new_c->poly = 0; new_c->rarrow = 0; new_c->larrow = 0; new_c->rarrows = 0; new_c->larrows = 0; new_c->asize[0] = FSIG; new_c->asize[1] = FSIG; new_c->bezier = 0; new_c->postscript = CNULL; new_c->postfile = 0; new_c->eps = CNULL; prio_insert(new_c, c, 0); return new_c; } Curve new_line(c, num) Curve c; int num; { Curve new_c; new_c = new_curve(c, num); new_c->linetype = 's'; new_c->marktype = 'n'; return new_c; } Curve get_curve(c, num) Curve c; int num; { Curve new_c; for(new_c = last(c); new_c != nil(c) && new_c->num > num; new_c = prev(new_c)); if (new_c == nil(c) || new_c->num < num) return new_curve(c, num); return new_c; } Axis new_axis(is_x) int is_x; { int i; Axis a; a = (Axis) malloc (sizeof(struct axis)); a->label = new_label(); a->label->x = FSIG; a->label->y = FSIG; a->label->font = "Times-Bold"; a->label->fontsize = 10.0; a->label->rotate = FSIG; a->label->hj = '0'; a->label->vj = '0'; a->size = 3.0; a->max = FSIG; a->min = FSIG; a->pmax = FSIG; a->pmin = FSIG; a->hash_interval = -1.0; a->log_base = 10.0; a->minor_hashes = -1; a->precision = -1; a->hl = new_label(); a->hl->label = ""; a->hl->font = "Times-Roman"; a->hl->fontsize = 9.0; a->hl->rotate = 0.0; a->hl->hj = '0'; a->hl->vj = '0'; a->hash_format = 'f'; a->draw_at = FSIG; a->draw_hash_marks_at = FSIG; a->draw_hash_labels_at = FSIG; a->draw_hash_labels = 1; a->draw_axis_line = 1; a->draw_hash_marks = 1; a->draw_axis_label = 1; a->auto_hash_labels = 1; a->auto_hash_marks = 1; a->start_given = 0; a->hash_scale = -1.0; a->grid_lines = 0; a->mgrid_lines = 0; a->graytype = 'n'; for (i = 0; i < 3; i++) a->gray[i] = 0.0; a->gr_graytype = '0'; for (i = 0; i < 3; i++) a->gr_gray[i] = 0.0; a->mgr_graytype = '0'; for (i = 0; i < 3; i++) a->mgr_gray[i] = 0.0; a->is_x = is_x; a->is_lg = 0; a->hash_labels = (String) make_list (sizeof(struct string)); a->hash_lines = (Hash) make_list (sizeof(struct hash)); return a; } Legend new_legend() { Legend l; l = (Legend) malloc (sizeof(struct legend)); l->linelength = FSIG; l->linebreak = FSIG; l->midspace = FSIG; l->type = 'u'; l->l = new_label(); l->l->label = ""; l->l->hj = 'l'; l->l->vj = 'c'; l->l->x = FSIG; l->l->y = FSIG; return l; } Label new_title() { Label t; t = new_label(); t->x = FSIG; t->y = FSIG; t->rotate = 0.0; t->hj = 'c'; t->vj = 't'; t->fontsize = 12.0; return t; } String new_string(s, num) String s; int num; { String new_s; new_s = (String) get_node(s); new_s->num = num; new_s->s = new_label(); prio_insert(new_s, s, 0); return new_s; } String get_string(s, num) String s; int num; { String new_s; for(new_s = last(s); new_s != nil(s) && new_s->num > num; new_s = prev(new_s)); if (new_s == nil(s) || new_s->num < num) return new_string(s, num); return new_s; } /* Default new_default() { Default new_d; new_d = (Default) malloc (sizeof(default)); new_d->rotate = FSIG; new_d->fontsize = FSIG; new_d->general_marks = GMNULL; new_d->fill = FSIG; new_d->linethick = FSIG; new_d->font = CNULL; new_d->hj = '!'; new_d->vj = '!'; new_d->marktype = '!'; new_d->linetype = '!'; new_d->marksize[0] = FSIG; new_d->marksize[1] = FSIG; } */ Graph new_graph(gs, num) Graph gs; int num; { Graph g; g = (Graph) get_node(gs); g->num = num; g->xminval = 0.0; g->yminval = 0.0; g->xmaxval = 0.0; g->ymaxval = 0.0; g->x_axis = new_axis(1); g->y_axis = new_axis(0); g->x_translate = 0.0; g->y_translate = 0.0; g->curves = (Curve) make_list(sizeof(struct curve)); g->strings = (String) make_list(sizeof(struct string)); g->title = new_title(); g->clip = 0; g->border = 0; g->legend = new_legend(); /* g->def = new_default(); */ prio_insert(g, gs, 0); return g; } Graph get_graph(g, num) Graph g; int num; { Graph new_g; for(new_g = last(g); new_g != nil(g) && new_g->num > num; new_g = prev(new_g)); if (new_g == nil(g) || new_g->num < num) return new_graph(g, num); return new_g; } new_graphs(gs) Graphs gs; { Graphs newg; newg = (Graphs) get_node(gs); newg->g = (Graph) make_list(sizeof(struct graph)); newg->height = 0.0; newg->width = 0.0; newg->bb[0] = ISIG; newg->bb[1] = ISIG; newg->bb[2] = ISIG; newg->bb[3] = ISIG; newg->preamble = CNULL; newg->epilogue = CNULL; newg->prefile = 0; newg->epifile = 0; if (first(gs) == nil(gs)) newg->page = 1; else newg->page = last(gs)->page+1; insert(newg, gs); } main(argc, argv) int argc; char **argv; { Graphs gs; int i; int show, pp; int landscape; int comments; int nfiles; #ifdef VMS IOSTREAM = stdin; /* for token.c -hdd */ #endif show = 0; pp = 0; comments = 0; landscape = 0; nfiles = 0; for (i = 1; i < argc; i++) { if (strcmp(argv[i], "-p") == 0) show = 1; else if (strcmp(argv[i], "-comments") == 0) comments = 1; else if (strcmp(argv[i], "-P") == 0) pp = 1; else if (strcmp(argv[i], "-L") == 0) landscape = 1; else { nfiles++; set_input_file(argv[i]); } } if (nfiles == 0) set_input_file(CNULL); gs = (Graphs) make_list(sizeof(struct graphs)); set_comment(comments); new_graphs(gs); edit_graphs(gs); process_graphs(gs); if (show) show_graphs(gs); else draw_graphs(gs, pp, landscape); exit(0); return 0; } jgraph-83.orig/jgraph.com100664 1750 50 2541 6273276352 14045 0ustar osirissrc$! JGRAPH.COM: Execute jgraph on VMS. $ SAVE_VER = 'F$VERIFY( F$TRNLNM( "JGRAPH_VERIFY"))' $ ! How to use this procedure: $ ! (1) define a symbol to execute the command file $ ! $ JGRAPH :== @dev:[directory]JGRAPH.COM $ ! We will assume that both this jgraph.com and jgraph.exe reside $ ! in dev:[directory]. $ ! (2) Then, to run the program with say the HYPERCUBE.JGR file, $ ! $ JGRAPH HYPERCUBE ! (Yes you can leave off the .JGR extension) $ ! To generate a stand-alone PostScript file that can be sent directly $ ! to the printer, use: $ ! $ JGRAPH HYPERCUBE "-P" $ ! or simply $ ! $ JGRAPH HYPERCUBE -P $ ! If you really want lowercase to reprint input in expanded form: $ ! $ JGRAPH HYPERCUBE "-p" $ ! The resulting output file will have a ".jps" extension. $! $ ON ERROR THEN GOTO EXIT $ ON CONTROL_Y THEN GOTO EXIT $! $L1: $ P1 = F$SEARCH( F$PARSE( P1, ".JGR")) $ IF P1 .NES. "" THEN GOTO L2 $ INQUIRE /LOCAL P1 "Input File : " $ GOTO L1 $L2: $ JPS_FILE = F$PARSE( P1,,, "NAME") + ".JPS" $ THIS_FILE = F$ENVIRONMENT("PROCEDURE") $ HERE = F$PARSE(THIS_FILE,,,"DEVICE",) + F$PARSE(THIS_FILE,,,"DIRECTORY",) $ RUN_JGRAPH := $'HERE'JGRAPH $! $ TMP = F$VERIFY( 1) $ RUN_JGRAPH <'p1' >'jps_file' "''P2'" $ $status = $STATUS $ TMP = 'F$VERIFY( TMP) $! $EXIT: $ EXIT $status + 0*F$VERIFY( SAVE_VER) jgraph-83.orig/jgraph.h100664 1750 50 10211 6273276352 13527 0ustar osirissrc/* * $Source: /tmp_mnt/n/fs/grad1/jsp/src/jgraph/RCS/jgraph.h,v $ * $Revision: 8.3 $ * $Date: 92/11/30 11:42:24 $ * $Author: jsp $ */ #include "list.h" #include "prio_list.h" #ifdef LCC #include #endif #define PPI 120 #define FPPI 120.0 #define CPI 72.0 #define FCPI 72.0 #define CNULL ((char *)0) #define GMNULL ((Point)0) #define FSIG -10010.0 #define ISIG -11111111 #define HASH_SIZE 5.0 #define MHASH_SIZE 2.0 typedef struct point { struct point *flink; struct point *blink; float x; float y; char e; /* 'x' for x_ebars, 'y' for y_ebars, 'p' for neither */ } *Point; typedef struct flist { struct flist *flink; struct flist *blink; float f; } *Flist; typedef struct label { char *label; float x; float y; float rotate; char *font; float fontsize; char hj; char vj; float gray[3]; char graytype; float linesep; float xmin; float xmax; float ymin; float ymax; int nlines; } *Label; typedef struct curve { struct curve *flink; struct curve *blink; int num; Label l; Label lmark; Point pts; Point yepts; Point xepts; int npts; Point general_marks; float marksize[2]; float fill[3]; float gray[3]; float afill[3]; float pfill[3]; float linethick; float mrotate; Flist gen_linetype; char graytype ; char filltype ; char afilltype; char pfilltype; char pattern; float parg; char apattern; float aparg; char ppattern; float pparg; char marktype; char linetype; char *postscript; char *eps; int postfile; int rarrow; int larrow; int rarrows; int larrows; int bezier; int poly; float asize[2]; int clip; } *Curve; typedef struct string { struct string *flink; struct string *blink; int num; Label s; } *String; typedef struct hash { struct hash *flink; struct hash *blink; float loc; float size; int major; } *Hash; typedef struct deflt { float rotate; float fontsize; Point general_marks; float fill; float linethick; float marksize[2]; char *font; char hj; char vj; char marktype; } *Default; typedef struct axis { Label label; Label hl; float max; float min; float pmax; float pmin; float logmin; float logfactor; float size; float psize; float factor; float hash_interval; float hash_start; float hash_scale; float log_base; float draw_hash_marks_at; float draw_hash_labels_at; float draw_at; float gray[3]; char graytype; float gr_gray[3]; char gr_graytype; float mgr_gray[3]; char mgr_graytype; char hash_format; int grid_lines; int mgrid_lines; int draw_hash_labels; int draw_axis_line; int draw_hash_marks; int draw_axis_label; int auto_hash_labels; int auto_hash_marks; int minor_hashes; int precision; int start_given; String hash_labels; Hash hash_lines; int is_x; int is_lg; } *Axis; typedef struct legend { float linelength; float linebreak; int anylines; float midspace; char type; /* 'n' = off, 'u' = userdefined (use Label), 'c' = custom */ Label l; } *Legend; typedef struct graph { struct graph *flink; struct graph *blink; int num; float xminval; float yminval; float xmaxval; float ymaxval; float x_translate; float y_translate; Axis x_axis; Axis y_axis; Curve curves; Legend legend; String strings; Label title; int clip; int border; Default def; } *Graph; typedef struct graphs { struct graphs *flink; struct graphs *blink; Graph g; float height; float width; int bb[4]; /* Bounding box */ char *preamble; char *epilogue; int prefile; int epifile; int page; } *Graphs; extern float ctop(); extern float disttop(); extern float intop(); extern float ptoc(); extern float ptodist(); extern char *getlabel(); extern char *getmultiline(); /* Stuff defined in jgraph.c */ extern Curve new_line(); extern Curve new_curve(); extern Curve get_curve(); extern Graph new_graph(); extern Graph get_graph(); extern String new_string(); extern String get_string(); extern Label new_label(); extern char *MARKTYPESTRS[]; extern char MARKTYPES[]; extern int NMARKTYPES; extern int NORMALMARKTYPES; extern char *PATTERNS[]; extern char PTYPES[]; extern int NPATTERNS; jgraph-83.orig/jmalloc.c100664 1750 50 26405 6273276352 13704 0ustar osirissrc#include #include /* Each memory block has 8 extra 32-bit values associated with it. If malloc returns the pointer p to you, the state really looks like: jmal(p)------> |------------------------------------------------------------| | flink (next malloc block in absolute order) | |------------------------------------------------------------| | blink (prev malloc block in absolute order) | |------------------------------------------------------------| | nextfree (next free malloc block - no particular order) | |------------------------------------------------------------| | prevfree (next free malloc block - no particular order) | |------------------------------------------------------------| | size (size of memory allocated) | |------------------------------------------------------------| | cs2 (pointer to the second checksum, which is right after | | the mem block) | |------------------------------------------------------------| | cs (checksum right before mem block. used to determine if | | there is an error of writing around the memory block) | p------------> |------------------------------------------------------------| | space: the memory block | | ... | | ... | |------------------------------------------------------------| | the second checksum | |------------------------------------------------------------| */ typedef struct jmalloc { struct jmalloc *flink; struct jmalloc *blink; struct jmalloc *nextfree; struct jmalloc *prevfree; int size; int *cs2; int cs; char *space; } *Jmalloc; #define JMSZ (sizeof(struct jmalloc)) #define PTSZ (sizeof(char *)) /* Also assuming its > sizeof int */ #define CHUNK_SIZE (16384 - JMSZ) /* 16K */ #define MASK 0x17826a9b #define JNULL ((Jmalloc) 0) static struct jmalloc j_head; static Jmalloc memlist; static int nfree = 0; static int nblocks = 0; static int init = 0; static Jmalloc start; static int free_called = 0; static int malloc_called = 0; static int used_mem = 0; static int free_mem = 0; static int used_blocks = 0; static int free_blocks = 0; #define cksum(p) (((int) &(p->cs)) - 1) #define jloc(l) ((char *) (&l->space)) #define jmal(l) ((Jmalloc) (((char *)l) - JMSZ + PTSZ)) #define isfree(l) (l->nextfree != JNULL) #define do_init() \ if (!init) {\ memlist = &j_head;\ memlist->flink = memlist;\ memlist->blink = memlist;\ memlist->nextfree = memlist;\ memlist->prevfree = memlist;\ memlist->size = 0;\ memlist->cs = cksum(memlist);\ memlist->cs2 = &memlist->cs;\ memlist->space = (char *) 0;\ start = memlist;\ init = 1;\ } dump_core() { memlist->space[0] = 0; } char *set_used(l) Jmalloc l; { start = l->nextfree; l->prevfree->nextfree = l->nextfree; l->nextfree->prevfree = l->prevfree; l->prevfree = JNULL; l->nextfree = JNULL; used_mem += l->size; free_mem -= l->size; used_blocks++; free_blocks--; return jloc(l); } void *malloc(size) int size; { int redo; int done; Jmalloc l; char *tmp; Jmalloc newl; int newsize; do_init(); malloc_called++; if (size <= 0) { fprintf(stderr, "Error: Malloc(%d) called\n", size); /* Dump core */ dump_core(); } if (size % PTSZ != 0) size += PTSZ - (size % PTSZ); done = 0; l = start; while(!done) { if (l->size >= size) { done = 1; redo = 0; } else { l = l->nextfree; done = (l == start); redo = done; } } if (redo) { if (size > CHUNK_SIZE) newsize = size + JMSZ; else newsize = CHUNK_SIZE + JMSZ; newl = (Jmalloc) sbrk(newsize); while (newl == (Jmalloc) -1 && newsize > size + JMSZ) { newsize /= 2; if (newsize < size + JMSZ) newsize = size + JMSZ; newl = (Jmalloc) sbrk(newsize); } if (newl == (Jmalloc) -1) { /* fprintf(stderr, "Jmalloc: out of memory\n"); */ /* fprintf(stderr, "Used bytes = %d, Free bytes = %d\n", */ /* used_mem, free_mem); */ /* fprintf(stderr, "Trying to get %d bytes (chunk of %d)\n", */ /* size, newsize); */ return NULL; } newl->flink = memlist; newl->blink = memlist->blink; newl->flink->blink = newl; newl->blink->flink = newl; newl->nextfree = memlist; newl->prevfree = memlist->prevfree; newl->nextfree->prevfree = newl; newl->prevfree->nextfree = newl; newl->size = ((char *) sbrk(0)) - jloc(newl) - PTSZ; free_mem += newl->size; newl->cs = cksum(newl); newl->cs2 = ((int *) (jloc(newl) + newl->size)); *(newl->cs2) = cksum(newl); if(newl->size < size) { fprintf(stderr, "Newl->size(%d) < size(%d)\n", newl->size, size); exit(1); } free_blocks++; l = newl; } if (l->size - size < JMSZ) { return set_used(l); } else { tmp = jloc(l); newl = (Jmalloc) (tmp + size + PTSZ); newl->flink = l->flink; newl->blink = l; newl->flink->blink = newl; newl->blink->flink = newl; newl->nextfree = l->nextfree; newl->prevfree = l; newl->nextfree->prevfree = newl; newl->prevfree->nextfree = newl; newl->size = l->size - size - JMSZ; newl->cs = cksum(newl); newl->cs2 = (int *) (jloc(newl) + newl->size); *(newl->cs2) = cksum(newl); free_mem += size + newl->size - l->size; free_blocks++; l->size = size; l->cs2 = ((int *) (jloc(l) + l->size)); *(l->cs2) = cksum(l); return set_used(l); } } jmalloc_print_mem() { Jmalloc l; int done; char *bufs[100]; int sizes[100]; int mc; int fc; int i, j; do_init(); mc = malloc_called; fc = free_called; if (jmal(jloc(memlist)) != memlist) { fprintf(stderr, "TROUBLE: memlist=0x%x, jmal(jloc(memlist))=0x%x)\n", memlist, jmal(jloc(memlist))); exit(1); } done = 0; l = start; i = 0; while (!done) { if (cksum(l) != l->cs) { printf("Memory location 0x%x corrupted\n", jloc(l)); exit(1); } else if (cksum(l) != *(l->cs2)) { printf("Memory location 0x%x corrupted\n", jloc(l)); exit(1); } bufs[i] = jloc(l); sizes[i] = l->size; if (l->nextfree == 0) sizes[i] = -sizes[i]; i++; l = l->flink; done = ((l == start) || i >= 100); } printf("Malloc called %d times\n", mc); printf("Free called %d times\n", fc); for (j = 0; j < i; j++) { printf("Loc = 0x%x, size = %d, free = %d\n", bufs[j], (sizes[j] > 0) ? sizes[j] : -sizes[j], (sizes[j] >= 0)); } } jmalloc_check_mem() { Jmalloc l; int done; done = 0; l = start; while (!done) { if (cksum(l) != l->cs) { fprintf(stderr, "Memory chunk violated: 0x%x: %s 0x%x. %s 0x%x\n", jloc(l), "Checksum 1 is ", l->cs, "It should be", cksum(l)); dump_core(); } else if (cksum(l) != *(l->cs2)) { fprintf(stderr, "Memory chunk violated: 0x%x: %s 0x%x. %s 0x%x\n", jloc(l), "Checksum 2 is ", *(l->cs2), "It should be", cksum(l)); dump_core(); } l = l->flink; done = (l == start); } } void free(loc) char *loc; { Jmalloc l; Jmalloc pl, nl; do_init(); free_called++; l = jmal(loc); if (cksum(l) != l->cs) { fprintf(stderr, "Error on free: memory chunk violated: 0x%x\n", loc); dump_core(); } else if (cksum(l) != *(l->cs2)) { fprintf(stderr, "Error on free: memory chunk violated: 0x%x\n", loc); dump_core(); } used_mem -= l->size; free_mem += l->size; free_blocks++; used_blocks--; pl = l->blink; nl = l->flink; if (isfree(pl) && (jloc(pl)+pl->size + PTSZ == (char *) l)) { free_mem += JMSZ; pl->size += l->size + JMSZ; pl->flink = nl; pl->flink->blink = pl; l = pl; free_blocks--; } else { l->prevfree = start; l->nextfree = start->nextfree; l->nextfree->prevfree = l; l->prevfree->nextfree = l; } if (isfree(nl) && jloc(l)+l->size + PTSZ == (char *) nl) { free_mem += JMSZ; l->size += nl->size + JMSZ; l->flink = nl->flink; l->flink->blink = l; free_blocks--; nl->nextfree->prevfree = nl->prevfree; nl->prevfree->nextfree = nl->nextfree; } start = l; } void *realloc(loc, size) char *loc; int size; { Jmalloc l; Jmalloc l2, nl; char *loc2; int i; Jmalloc newl; do_init(); if (size <= 0) { fprintf(stderr, "Error: Malloc(%d) called\n", size); /* Dump core */ dump_core(); } if (size % PTSZ != 0) size += PTSZ - (size % PTSZ); l = jmal(loc); if (cksum(l) != l->cs) { fprintf(stderr, "Error on realloc: memory chunk violated: 0x%x\n", loc); dump_core(); } else if (cksum(l) != *(l->cs2)) { fprintf(stderr, "Error on realloc: memory chunk violated: 0x%x\n", loc); dump_core(); } if (size < l->size) { if (l->size - size < JMSZ + 4) return loc; newl = (Jmalloc) (loc + size + PTSZ); newl->flink = l->flink; newl->blink = l; newl->flink->blink = newl; newl->blink->flink = newl; newl->nextfree = start->nextfree; newl->prevfree = start; newl->nextfree->prevfree = newl; newl->prevfree->nextfree = newl; newl->size = l->size - size - JMSZ; newl->cs = cksum(newl); newl->cs2 = (int *) (jloc(newl) + newl->size); *(newl->cs2) = cksum(newl); used_mem += size - l->size; free_mem += newl->size; free_blocks++; l->size = size; l->cs2 = ((int *) (jloc(l) + l->size)); *(l->cs2) = cksum(l); start = newl; return loc; } nl = l->flink; if (isfree(nl) && (jloc(l)+l->size + PTSZ == (char *) nl) && l->size + JMSZ + nl->size >= size) { start = nl; i = size - l->size - JMSZ; if (i < 0) i = 4; loc2 = malloc(i); l2 = jmal(loc2); if (l2 != nl) { fprintf(stderr, "Realloc internal error: l2 != nl\n"); dump_core(); } nl->flink->blink = nl->blink; nl->blink->flink = nl->flink; free_mem -= nl->size; used_mem += nl->size + JMSZ; free_blocks--; l->size += nl->size + JMSZ; l->cs2 = ((int *) (jloc(l) + l->size)); *(l->cs2) = cksum(l); return loc; } else { loc2 = malloc(size); for (i = 0; i < l->size; i++) loc2[i] = loc[i]; free(loc); return loc2; } } char *calloc(nelem, elsize) int nelem, elsize; { int *iptr; char *ptr; int sz; int i; sz = nelem*elsize; ptr = malloc(sz); iptr = (int *) ptr; for (i = 0; i < sz/sizeof(int); i++) iptr[i] = 0; for (i = i * sizeof(int); i < sz; i++) ptr[i] = 0; return ptr; } int mallopt(cmd, value) int cmd, value; { fprintf(stderr, "Mallopt is not defined...\n"); exit(1); } jmalloc_usage() { fprintf(stderr, "Jmalloc: %d %s %d block%s. %d %s %d block%s\n", used_mem, "bytes used in", used_blocks, (used_blocks == 1) ? "" : "s", free_mem, "bytes free in", free_blocks, (free_blocks == 1) ? "" : "s"); } jgraph-83.orig/list.c100664 1750 50 4265 6273276352 13216 0ustar osirissrc/* * $Source: /tmp_mnt/n/fs/grad1/jsp/src/jgraph/RCS/list.c,v $ * $Revision: 8.3 $ * $Date: 92/11/30 11:42:25 $ * $Author: jsp $ */ #include /* Basic includes and definitions */ #include "list.h" #define boolean int #define TRUE 1 #define FALSE 0 /*---------------------------------------------------------------------* * PROCEDURES FOR MANIPULATING DOUBLY LINKED LISTS * Each list contains a sentinal node, so that * the first item in list l is l->flink. If l is * empty, then l->flink = l->blink = l. * The sentinal contains extra information so that these operations * can work on lists of any size and type. * Memory management is done explicitly to avoid the slowness of * malloc and free. The node size and the free list are contained * in the sentinal node. *---------------------------------------------------------------------*/ typedef struct int_list { /* Information held in the sentinal node */ struct int_list *flink; struct int_list *blink; int size; List free_list; } *Int_list; insert(item, list) /* Inserts to the end of a list */ List item; List list; { List last_node; last_node = list->blink; list->blink = item; last_node->flink = item; item->blink = last_node; item->flink = list; } delete_item(item) /* Deletes an arbitrary iterm */ List item; { item->flink->blink = item->blink; item->blink->flink = item->flink; } List make_list(size) /* Creates a new list */ int size; { Int_list l; l = (Int_list) malloc(sizeof(struct int_list)); l->flink = l; l->blink = l; l->size = size; l->free_list = (List) malloc (sizeof(struct list)); l->free_list->flink = l->free_list; return (List) l; } List get_node(list) /* Allocates a node to be inserted into the list */ List list; { Int_list l; List to_return; l = (Int_list) list; if (l->free_list->flink == l->free_list) { return (List) malloc(l->size); } else { to_return = l->free_list; l->free_list = to_return->flink; return to_return; } } free_node(node, list) /* Deallocates a node from the list */ List node; List list; { Int_list l; l = (Int_list) list; node->flink = l->free_list; l->free_list = node; } jgraph-83.orig/list.h100664 1750 50 1737 6273276352 13224 0ustar osirissrc/* * $Source: /tmp_mnt/n/fs/grad1/jsp/src/jgraph/RCS/list.h,v $ * $Revision: 8.3 $ * $Date: 92/11/30 11:42:27 $ * $Author: jsp $ */ /* This is the header file for the list manipulation routines in list.c. * Any struct can be turned into a list as long as its first two fields are * flink and blink. */ typedef struct list { struct list *flink; struct list *blink; } *List; /* Nil, first, next, and prev are macro expansions for list traversal * primitives. */ #define nil(l) (l) #define first(l) (l->flink) #define last(l) (l->blink) #define next(n) (n->flink) #define prev(n) (n->blink) /* These are the routines for manipluating lists */ /* void insert(node list); Inserts a node to the end of a list */ /* void delete_item(node); Deletes an arbitrary node */ /* List make_list(node_size); Creates a new list */ /* List get_node(list); Allocates a node to be inserted into the list */ /* void free_node(node, list); Deallocates a node from the list */ jgraph-83.orig/mab2.jgr100664 1750 50 1000 6273276352 13404 0ustar osirissrcnewgraph legend x 15 y 6000 newcurve pts shell : awk -F'|' '{printf "%d %d\n",NR,($2/2)}' mab2.times linetype dotted marktype none label : Writes newcurve pts shell : awk -F'|' '{printf "%d %d\n", NR,($3+$4)/2}' mab2.times linetype solid marktype none label : Reads (all) yaxis label : Reads/Writes per hour xaxis size 4.75 no_auto_hash_labels no_auto_hash_marks hash_labels rotate -90 vjt hjl shell : awk -F'|' '(NR%3 == 1) {printf "hash_at %d hash_label at %d : %s\n",NR,NR,$1}' mab2.times hash_label at 1 : jgraph-83.orig/mab2.times100664 1750 50 5007 6273276352 13756 0ustar osirissrcThu 00:00 | 746 | 397 | 787 Thu 02:00 | 625 | 85 | 1066 Thu 04:00 | 844 | 170 | 903 Thu 06:00 | 779 | 169 | 638 Thu 08:00 | 1168 | 978 | 3219 Thu 10:00 | 2269 | 1599 | 5515 Thu 12:00 | 1983 | 1963 | 5478 Thu 14:00 | 2822 | 2077 | 7526 Thu 16:00 | 1926 | 1730 | 5588 Thu 18:00 | 1256 | 904 | 2559 Thu 20:00 | 1110 | 672 | 2728 Thu 22:00 | 1699 | 1414 | 4502 Fri 00:00 | 919 | 418 | 1714 Fri 02:00 | 793 | 131 | 1778 Fri 04:00 | 785 | 114 | 1419 Fri 06:00 | 685 | 84 | 285 Fri 08:00 | 1382 | 795 | 3309 Fri 10:00 | 2186 | 1485 | 5984 Fri 12:00 | 1425 | 1212 | 4021 Fri 14:00 | 1831 | 1884 | 4378 Fri 16:00 | 1736 | 1243 | 4205 Fri 18:00 | 1231 | 506 | 2768 Fri 20:00 | 915 | 273 | 1224 Fri 22:00 | 987 | 456 | 1411 Sat 00:00 | 668 | 138 | 540 Sat 02:00 | 766 | 120 | 1342 Sat 04:00 | 781 | 129 | 648 Sat 06:00 | 725 | 90 | 431 Sat 08:00 | 687 | 169 | 519 Sat 10:00 | 768 | 268 | 1013 Sat 12:00 | 1513 | 977 | 1965 Sat 14:00 | 1294 | 584 | 2318 Sat 16:00 | 1337 | 699 | 2491 Sat 18:00 | 1191 | 479 | 1662 Sat 20:00 | 1249 | 497 | 1470 Sat 22:00 | 1056 | 538 | 1467 Sun 00:00 | 808 | 413 | 627 Sun 02:00 | 914 | 97 | 1331 Sun 04:00 | 654 | 60 | 493 Sun 06:00 | 657 | 51 | 453 Sun 08:00 | 780 | 216 | 755 Sun 10:00 | 945 | 429 | 1304 Sun 12:00 | 698 | 261 | 884 Sun 14:00 | 345 | 135 | 684 Sun 16:00 | 1157 | 406 | 1836 Sun 18:00 | 1231 | 782 | 1710 Sun 20:00 | 1229 | 386 | 1844 Sun 22:00 | 1270 | 301 | 1882 Mon 00:00 | 864 | 442 | 1309 Mon 02:00 | 783 | 668 | 1444 Mon 04:00 | 887 | 173 | 895 Mon 06:00 | 801 | 164 | 756 Mon 08:00 | 1370 | 682 | 3020 Mon 10:00 | 1839 | 1083 | 8333 Mon 12:00 | 1980 | 1205 | 10969 Mon 14:00 | 1810 | 1546 | 6967 Mon 16:00 | 2110 | 1793 | 5441 Mon 18:00 | 2397 | 1763 | 7879 Mon 20:00 | 1426 | 573 | 2943 Mon 22:00 | 983 | 467 | 1686 Tue 00:00 | 701 | 172 | 665 Tue 02:00 | 998 | 161 | 1765 Tue 04:00 | 814 | 157 | 892 Tue 06:00 | 537 | 55 | 354 Tue 08:00 | 701 | 588 | 3944 Tue 10:00 | 1248 | 1038 | 3637 Tue 12:00 | 2089 | 1170 | 4042 Tue 14:00 | 3054 | 1694 | 7062 Tue 16:00 | 4524 | 1642 | 8415 Tue 18:00 | 1380 | 1491 | 2491 Tue 20:00 | 1845 | 1530 | 2655 Tue 22:00 | 1504 | 1513 | 2460 Wed 00:00 | 863 | 467 | 686 Wed 02:00 | 3833 | 428 | 4074 Wed 04:00 | 860 | 196 | 767 Wed 06:00 | 850 | 164 | 1568 Wed 08:00 | 1574 | 1421 | 3551 Wed 10:00 | 2692 | 2135 | 6666 Wed 12:00 | 2041 | 2033 | 4309 Wed 14:00 | 1882 | 2069 | 4106 Wed 16:00 | 2403 | 2359 | 4947 Wed 18:00 | 1632 | 1420 | 2779 Wed 20:00 | 1984 | 1888 | 3410 Wed 22:00 | 936 | 640 | 950 jgraph-83.orig/makefile100664 1750 50 3474 6273276352 13600 0ustar osirissrc# If you're running this on a NeXT machine (or with an ansi-c compiler), # you should make sure that # cc is run with -DLCC. This makes sure that macro LCC is defined, and # should make sure that is included. # Also, before installing, you should change the string "JGRAPH_DIR" in # jgraph.1 to be the directory containing the example jgraphs. CC = cc OBJS = draw.o \ edit.o \ jgraph.o \ list.o \ printline.o \ prio_list.o \ process.o \ show.o \ token.o EXAMPLES = \ acc.jps \ acc.eps \ alb.jps \ ad.jps \ bailey.jps \ ebars.jps \ ex1.jps \ ex2.jps \ g8.jps \ g8col.jps \ g9n10.jps \ gpaper.jps \ hypercube.jps \ mab2.jps \ nr.jps \ sin.jps \ sin1.jps \ sin2.jps \ sin3.jps \ tree1.jps \ tree2.jps \ wortman.jps all: jgraph examples: $(EXAMPLES) .SUFFIXES: .c .o .h .jgr .jps .eps .tex .dvi .jgr.jps: jgraph -P < $*.jgr > $*.jps .jgr.eps: jgraph < $*.jgr > $*.eps .tex.dvi: latex $*.tex .c.o: $(CC) -c -g $*.c jgraph: $(OBJS) $(CC) -g $(OBJS) -lm -o jgraph sin: sin.o cc -o sin sin.o -lm ad.jps: cube.eps disk.eps bailey.jps: bailey.pts ex2.jps: data.txt mab2.jps: mab2.times sin.jps: sin sin2.jps: sin2.pts sin3.jps: sin3.pts tree1.jps: tree.awk ( echo "4 3" | nawk -f tree.awk ; echo "xaxis size 5.4" ) | \ jgraph -P > tree1.jps tree2.jps: tree.awk ( echo "5 2" | nawk -f tree.awk ; echo "xaxis size 5.4" ) | \ jgraph -P > tree2.jps ### draw.o: draw.c jgraph.h list.h prio_list.h edit.o: edit.c jgraph.h list.h prio_list.h jgraph.o: jgraph.c jgraph.h list.h prio_list.h list.o: list.c list.h printline.o: printline.c jgraph.h list.h prio_list.h prio_list.o: prio_list.c list.h prio_list.h process.o: process.c jgraph.h list.h prio_list.h show.o: show.c jgraph.h list.h prio_list.h token.o: token.c list.h clean: rm -f *.o a.out *.jps jgraph-83.orig/nr.jgr100664 1750 50 6705 6273276352 13223 0ustar osirissrc(* Bar graph from Norman Ramsey's PhD dissertation *) newgraph xaxis size 6.0 min 0 hash 100 label : Number of lines yaxis min -4.625 max -0.375 size 2.5 yaxis no_auto_hash_labels no_draw_hash_marks no_draw_axis_label (* MIPS *) yaxis hash_label at -1 : MIPS newcurve pts 545 -1 marktype ybar fill 0.3 marksize 75 0.75 pattern stripe -45 newcurve pts 458 -1 marktype ybar fill 0.75 marksize 75 0.75 pattern stripe -45 newcurve pts 411 -1 marktype ybar fill 0.1 marksize 75 0.75 pattern stripe -45 newcurve pts 338 -1 marktype ybar fill 1.0 marksize 75 0.75 pattern solid newcurve pts 303 -1 marktype ybar fill 0.2 marksize 75 0.75 pattern solid newcurve pts 246 -1 marktype ybar fill 0.85 marksize 75 0.75 pattern stripe 45 newcurve pts 171 -1 marktype ybar fill 0.5 marksize 75 0.75 pattern stripe 45 newcurve pts 66 -1 marktype ybar fill 0 marksize 75 0.75 pattern stripe 45 (* SPARC *) yaxis hash_label at -2 : SPARC newcurve pts 535 -2 marktype ybar fill 0.3 marksize 75 0.75 pattern stripe -45 newcurve pts 386 -2 marktype ybar fill 0.75 marksize 75 0.75 pattern stripe -45 newcurve pts 330 -2 marktype ybar fill 0.1 marksize 75 0.75 pattern stripe -45 newcurve pts 208 -2 marktype ybar fill 1.0 marksize 75 0.75 pattern solid newcurve pts 190 -2 marktype ybar fill 0.2 marksize 75 0.75 pattern solid newcurve pts 174 -2 marktype ybar fill 0.5 marksize 75 0.75 pattern stripe 45 newcurve pts 74 -2 marktype ybar fill 0 marksize 75 0.75 pattern stripe 45 (* VAX *) yaxis hash_label at -3 : VAX newcurve pts 213 -3 marktype ybar fill 1.0 marksize 75 0.75 pattern solid newcurve pts 200 -3 marktype ybar fill 0.2 marksize 75 0.75 pattern solid newcurve pts 135 -3 marktype ybar fill 0.5 marksize 75 0.75 pattern stripe 45 newcurve pts 52 -3 marktype ybar fill 0 marksize 75 0.75 pattern stripe 45 (* 68020 *) yaxis hash_label at -4 : 68020 newcurve pts 185 -4 marktype ybar fill 1.0 marksize 75 0.75 pattern solid newcurve pts 169 -4 marktype ybar fill 0.2 marksize 75 0.75 pattern solid newcurve pts 98 -4 marktype ybar fill 0.5 marksize 75 0.75 pattern stripe 45 newcurve pts 53 -4 marktype ybar fill 0 marksize 75 0.75 pattern stripe 45 xaxis max 600 (* first column of legend *) newcurve marktype ybar fill 0 marksize 50 0.75 pattern stripe 45 label : configuration newcurve marktype ybar fill 0.5 marksize 50 0.75 pattern stripe 45 label : stack walking newcurve marktype ybar fill 0.85 marksize 50 0.75 pattern stripe 45 label : runtime procedure table newcurve marktype ybar fill 0.2 marksize 50 0.75 pattern solid label : nub code legend bottom defaults hjl linelength 75 x 50 y -6.0 copygraph xaxis nodraw yaxis nodraw (* for second legend *) (* second column of legend *) legend bottom defaults hjl x 250.0 y -6.0 newcurve marktype ybar fill 1.0 marksize 50 0.75 pattern solid label : PostScript newcurve marktype ybar fill 0.1 marksize 50 0.75 pattern stripe -45 label : instruction-set specification newcurve marktype ybar fill 0.75 marksize 50 0.75 pattern stripe -45 label : follow sets newcurve marktype ybar fill 0.3 marksize 50 0.75 pattern stripe -45 label : disassembler (* top X axis *) copygraph xaxis draw hash -1 hash_scale +1.0 min 0 max 4.457652303 label : percentage of total size jgraph-83.orig/printline.c100664 1750 50 15201 6273276352 14257 0ustar osirissrc/* * $Source: /tmp_mnt/n/fs/grad1/jsp/src/jgraph/RCS/printline.c,v $ * $Revision: 8.3 $ * $Date: 92/11/30 11:42:31 $ * $Author: jsp $ */ #include "jgraph.h" #include #define LINEWIDTHFACTOR 0.700 #define MAX(a, b) ((a > b) ? (a) : (b)) typedef struct fontlist { struct fontlist *flink; struct fontlist *blink; int level; float s; char *f; } *Fontlist; static Fontlist Jgraph_fonts; static int Jgraph_gsave_level = -100; static int Jgraph_comment; gsave() { if (Jgraph_gsave_level == -100) { Jgraph_gsave_level = 0; Jgraph_fonts = (Fontlist) make_list(sizeof(struct fontlist)); } Jgraph_gsave_level++; printf(" gsave "); } grestore() { Fontlist l; if (last(Jgraph_fonts) != nil(Jgraph_fonts)) { l = last(Jgraph_fonts); if (l->level == Jgraph_gsave_level) { delete_item(l); free_node(l, Jgraph_fonts); } } Jgraph_gsave_level--; printf(" grestore "); } setfont(f, s) char *f; float s; { Fontlist l; int ins; if (last(Jgraph_fonts) != nil(Jgraph_fonts)) { l = last(Jgraph_fonts); ins = (strcmp(l->f, f) != 0 || s != l->s); if (ins) { delete_item(l); free_node(l, Jgraph_fonts); } } else { ins = 1; } if (ins) { l = (Fontlist) get_node(Jgraph_fonts); l->level = Jgraph_gsave_level; l->s = s; l->f = f; insert(l, Jgraph_fonts); printf("/%s findfont %f scalefont setfont\n", f, s); } } setfill( x, y, t, f, p, a) char t, p ; float x, y; float f[], a ; { /* fprintf(stderr, "Hello? %c %f %c %f\n", t, f[0], p, a); */ if (t == 'g' && f[0] < 0.0) return; printf("gsave "); if ( t == 'g' ) { if( f[0] >= 0.0 ) printf("%f setgray ", f[0] ); } else if ( t == 'c' ) { printf("%f %f %f setrgbcolor ", f[0], f[1], f[2] ); } if (p == 's') { printf(" fill"); } else if (p == '/') { printf(" 6.1 10 %f %f %f 1 JSTR", a, x, y); } else if (p == 'e') { printf(" 6.1 10 %f %f %f 0 JSTR", a, x, y); } printf(" grestore\n"); } setgray( t, f) char t ; float f[] ; { if ( t == 'g' ) { if( f[0] >= 0.0 ) printf("%f setgray\n", f[0] ); } else if ( t == 'c' ) { printf("%f %f %f setrgbcolor\n", f[0], f[1], f[2] ); } } printline(x1, y1,x2, y2, orientation) float x1, y1, x2, y2; char orientation; { if (orientation == 'x') printf("newpath %f %f moveto %f %f lineto stroke\n", x1, y1, x2, y2); else printf("newpath %f %f moveto %f %f lineto stroke\n", y1, x1, y2, x2); fflush(stdout); } print_ebar(x1, y1, x2, ms, orientation) float x1, y1, x2, ms; char orientation; { printline(x1, y1, x2, y1, orientation); printline(x2, y1-ms, x2, y1+ms, orientation); } start_line(x1, y1, c) float x1, y1; Curve c; { setlinewidth(c->linethick); setlinestyle(c->linetype, c->gen_linetype); printf("%f %f moveto ", x1, y1); } cont_line(x1, y1) float x1, y1; { printf(" %f %f lineto\n", x1, y1); } end_line() { printf("stroke\n"); setlinewidth(1.0); setlinestyle('s', (Flist) 0); fflush(stdout); } bezier_control(x1, y1) float x1, y1; { printf(" %f %f ", x1, y1); } bezier_end(x1, y1) float x1, y1; { printf(" %f %f curveto\n", x1, y1); } start_poly(x1, y1) float x1, y1; { printf(" newpath %f %f moveto", x1, y1); } cont_poly(x1, y1) float x1, y1; { printf(" %f %f lineto\n", x1, y1); } end_poly(x, y, ftype, fill, pattern, parg) float x, y; char ftype, pattern ; float fill[], parg; { printf("closepath "); setfill( x, y, ftype, fill, pattern, parg ); printf("stroke\n"); fflush(stdout); } /* Ellipse at 0, 0 -- assumes that you've already translated to x, y */ printellipse(x, y, radius1, radius2, ftype, fill, pattern, parg) char ftype, pattern; float x, y, radius1, radius2, fill[], parg; { printf("newpath %f %f JDE\n", radius1, radius2); setfill( x, y, ftype, fill, pattern, parg ); printf("stroke\n"); fflush(stdout); } set_comment(c) int c; { Jgraph_comment = c; } comment(s) char *s; { if (Jgraph_comment) printf("%% %s\n", s); } printline_c(x1, y1, x2, y2, g) float x1, y1, x2, y2; Graph g; { printline(ctop(x1, g->x_axis), ctop(y1, g->y_axis), ctop(x2, g->x_axis), ctop(y2, g->y_axis), 'x'); } print_label(l) Label l; { int f, i, nlines; float fnl; char *s; if (l->label == CNULL) return; nlines = 0; for (i = 0; l->label[i] != '\0'; i++) { if (l->label[i] == '\n') { l->label[i] = '\0'; nlines++; } } fnl = (float) nlines; setfont(l->font, l->fontsize); printf("gsave %f %f translate %f rotate\n", l->x, l->y, l->rotate); if (l->graytype == 'g') { printf(" %f setgray\n", l->gray[0]); } else if (l->graytype == 'c') { printf(" %f %f %f setrgbcolor\n", l->gray[0], l->gray[1], l->gray[2]); } if (l->vj == 'b') { printf("0 %f translate ", fnl * (l->fontsize + l->linesep) * FCPI / FPPI); } else if (l->vj == 'c') { if (nlines % 2 == 0) { printf("0 %f translate ", (fnl/2.0*(l->fontsize + l->linesep) - l->fontsize/2.0) * FCPI / FPPI); } else { printf("0 %f translate ", ((fnl-1.0)/2.0*(l->fontsize + l->linesep) + l->linesep/2.0) * FCPI / FPPI); } } else { printf("0 %f translate ", -l->fontsize * FCPI / FPPI); } s = l->label; for (i = 0; i <= nlines; i++) { printf("(%s) dup stringwidth pop ", s); if (l->hj == 'c') { printf("2 div neg 0 moveto\n"); } else if (l->hj == 'r') { printf("neg 0 moveto\n"); } else { printf("pop 0 0 moveto\n"); } /* I would put string blanking in here if I had the time... */ if (i != nlines) { f = strlen(s); s[f] = '\n'; s = &(s[f+1]); printf("show 0 %f translate\n", - (l->fontsize + l->linesep) * FCPI / FPPI); } else { printf("show\n"); } } printf("grestore\n"); } setlinewidth(size) float size; { printf("%f setlinewidth ", size * LINEWIDTHFACTOR); } setlinestyle(style, glist) char style; Flist glist; { Flist fl; switch(style) { case '0': printf(" [0 2] setdash\n"); break; case 's': printf(" [] 0 setdash\n"); break; case '.': printf(" [1 3.200000] 0 setdash\n"); break; case '-': printf(" [4.00000] 0 setdash\n"); break; case 'l': printf(" [7 2] 0 setdash\n"); break; case 'd': printf(" [5 3 1 3] 0 setdash\n"); break; case 'D': printf(" [5 3 1 2 1 3] 0 setdash\n"); break; case '2': printf(" [5 3 5 3 1 2 1 3] 0 setdash\n"); break; case 'g': printf(" ["); for (fl = first(glist); fl != nil(glist); fl = next(fl)) printf("%f ", fl->f); printf("] 0 setdash\n"); break; default: fprintf(stderr, "Error: Unknown line type: %c\n", style); exit(1); break; } } jgraph-83.orig/prio_list.c100664 1750 50 3405 6273276353 14243 0ustar osirissrc/* * $Source: /tmp_mnt/n/fs/grad1/jsp/src/jgraph/RCS/prio_list.c,v $ * $Revision: 8.3 $ * $Date: 92/11/30 11:42:32 $ * $Author: jsp $ */ #include "list.h" #include "prio_list.h" #include typedef int Boolean; /* A prioirity list is any list with the first three fields being flink, * blink and prio. Use the routines of list.c to do everything except * insertion */ typedef struct prio_list { struct prio_list *flink; struct prio_list *blink; int prio; } *Prio_list; /* Prio_insert inserts nodes into their proper places in priority lists. It first * checks for inserting into the head or tail, and then proceeds sequentially. * Thus, it is worst case linear, but for most cases constant time (right). */ prio_insert(node, list, desc) Prio_list node; Prio_list list; Boolean desc; { Prio_list p; /* Check nil and head of list */ if (first(list) == nil(list) || (!desc && first(list)->prio >= node->prio) || (desc && first(list)->prio <= node->prio) ) { node->blink = list; node->flink = list->flink; list->flink->blink = node; list->flink = node; return; } /* Check tail of list */ if ((desc && last(list)->prio >= node->prio) || (!desc && last(list)->prio <= node->prio) ) { node->flink = list; node->blink = list->blink; list->blink->flink = node; list->blink = node; return; } /* Check the rest of the list sequentially */ for(p = next(first(list)); ; p = next(p)) { if (p == nil(list)) fprintf(stderr, "inserting into tail did not work\n"); if ((!desc && p->prio >= node->prio) || (desc && p->prio <= node->prio)) { node->flink = p; node->blink = p->blink; p->blink->flink = node; p->blink = node; return; } } } jgraph-83.orig/prio_list.h100664 1750 50 1440 6273276353 14245 0ustar osirissrc/* * $Source: /tmp_mnt/n/fs/grad1/jsp/src/jgraph/RCS/prio_list.h,v $ * $Revision: 8.3 $ * $Date: 92/11/30 11:42:34 $ * $Author: jsp $ */ /* Priority lists are just like normal lists of list.h and list.c, except * that their third field is a (int) prioriy. The routines of list.c should all * be used except for insert, because it will always put an item at the * end of a list. Instead, use prio_insert, which will put the item * into its proper place in the list. The last argument of prio_insert should * be TRUE if the list is to be kept in descending order; it should be FALSE * for ascending order. * Priority list should be: struct prio_list { struct prio_list *flink; struct prio_list *blink; int prio; ... } */ /* void prio_insert(node, list, descending); */ jgraph-83.orig/process.c100664 1750 50 56456 6273276353 13753 0ustar osirissrc/* * $Source: /tmp_mnt/n/fs/grad1/jsp/src/jgraph/RCS/process.c,v $ * $Revision: 8.3 $ * $Date: 92/11/30 11:42:35 $ * $Author: jsp $ */ #include #include #include "jgraph.h" #define ABS(a) ((a > 0.0) ? (a) : (-a)) #define MAX(a, b) ((a > b) ? (a) : (b)) #define MIN(a, b) ((a < b) ? (a) : (b)) #define AXIS_CHAR(a) ((a->is_x) ? 'x' : 'y') #define HASH_DIR(a) ((a->hash_scale > 0.0) ? 1 : -1) static double Pi; process_title(g) Graph g; { float ytitleloc; if (g->title->x == FSIG) g->title->x = g->x_axis->psize / 2.0; else g->title->x = ctop(g->title->x, g->x_axis); if (g->title->y != FSIG) g->title->y = ctop(g->title->y, g->y_axis); else { ytitleloc = 0.0; if (g->x_axis->draw_axis_label && g->x_axis->label->label != CNULL) ytitleloc = MIN(ytitleloc, g->x_axis->label->ymin); if (g->x_axis->draw_hash_labels) ytitleloc = MIN(ytitleloc, g->x_axis->hl->ymin); if (g->x_axis->draw_hash_marks) ytitleloc = MIN(ytitleloc, g->x_axis->draw_hash_marks_at - HASH_SIZE); if (g->legend->type == 'u') ytitleloc = MIN(ytitleloc, g->legend->l->ymin); g->title->y = ytitleloc - 10.0; } process_label(g->title, g, 0); } process_legend(g) Graph g; { Legend l; int anything; float height, hdist, y, x, width, maxmark, maxmarky; Curve c; char *s; l = g->legend; if (l->type == 'n') return; if (l->l->linesep == FSIG) l->l->linesep = l->l->fontsize; l->anylines = 0; maxmark = 0.0; maxmarky = 0.0; anything = 0; for (c = first(g->curves); c != nil(g->curves); c = next(c)) { if (c->l->label != CNULL) { anything = 1; if (c->marktype == 'l') { maxmark = MAX(maxmark, c->lmark->xmax - c->lmark->xmin); maxmarky = MAX(maxmarky, c->lmark->ymax - c->lmark->ymin); } else if (c->marktype != 'n') { maxmark = MAX(maxmark, ABS(c->marksize[0])); maxmarky = MAX(maxmarky, ABS(c->marksize[1])); } if (c->linetype != '0') l->anylines = 1; } } if (l->linelength == FSIG) l->linelength = (l->anylines) ? (MAX(maxmark + 6.0, 24.0)) : 0.0; else l->linelength = disttop(l->linelength, g->x_axis); if (l->midspace == FSIG) l->midspace = (l->anylines) ? 4.0 : (maxmark / 2.0) + 4.0; else l->midspace = disttop(l->midspace, g->x_axis); if (l->linebreak == FSIG) l->linebreak = MAX(l->l->linesep * FCPI / FPPI, maxmarky); else l->linebreak = disttop(l->linebreak, g->y_axis); if (l->type == 'c') { for (c = first(g->curves); c != nil(g->curves); c = next(c)) { if (c->l->label != CNULL) process_label(c->l, g, 1); } return; } if (!anything) { l->anylines = -1; return; } width = 0.0; height = -l->linebreak; for (c = first(g->curves); c != nil(g->curves); c = next(c)) { if (c->l->label != CNULL) { s = c->l->label; copy_label(c->l, l->l); c->l->x = 0.0; c->l->y = 0.0; c->l->rotate = 0.0; c->l->hj = 'l'; c->l->vj = 'b'; c->l->label = s; process_label(c->l, g, 0); height += c->l->ymax + l->linebreak; width = MAX(width, c->l->xmax); } } hdist = (l->anylines) ? l->midspace + l->linelength : l->midspace; width += hdist; if (l->l->x == FSIG) { if (l->l->hj == 'c') { l->l->x = g->x_axis->psize / 2; } else if (l->l->hj == 'l') { if (l->l->vj == 'c') { l->l->x = g->x_axis->psize; if (g->y_axis->draw_axis_label) l->l->x = MAX(l->l->x, g->y_axis->label->xmax); if (g->y_axis->draw_hash_labels) l->l->x = MAX(l->l->x, g->y_axis->hl->xmax); if (g->y_axis->draw_hash_marks) { l->l->x = MAX(l->l->x, g->y_axis->draw_hash_marks_at); l->l->x = MAX(l->l->x, g->y_axis->draw_hash_marks_at + HASH_DIR(g->y_axis) * HASH_SIZE); } l->l->x += 15.0; } else { l->l->x = 0.0; } } else { if (l->l->vj == 'c') { l->l->x = 0.0; if (g->y_axis->draw_axis_label) l->l->x = MIN(l->l->x, g->y_axis->label->xmin); if (g->y_axis->draw_hash_labels) l->l->x = MIN(l->l->x, g->y_axis->hl->xmin); if (g->y_axis->draw_hash_marks) { l->l->x = MIN(l->l->x, g->y_axis->draw_hash_marks_at); l->l->x = MIN(l->l->x, g->y_axis->draw_hash_marks_at + HASH_DIR(g->y_axis) * HASH_SIZE); } l->l->x = l->l->x - 15.0; } else { l->l->x = g->x_axis->psize; } } } else { l->l->x = ctop(l->l->x, g->x_axis); } if (l->l->y == FSIG) { if (l->l->vj == 'c') { l->l->y = g->y_axis->psize / 2.0; } else if (l->l->vj == 'b') { l->l->y = g->y_axis->psize; if (g->x_axis->draw_axis_label) l->l->y = MAX(l->l->y, g->x_axis->label->ymax); if (g->x_axis->draw_hash_labels) l->l->y = MAX(l->l->y, g->x_axis->hl->ymax); if (g->x_axis->draw_hash_marks) { l->l->y = MAX(l->l->y, g->x_axis->draw_hash_marks_at); l->l->y = MAX(l->l->y, g->x_axis->draw_hash_marks_at + HASH_DIR(g->x_axis) * HASH_SIZE); } l->l->y += 15.0; } else { l->l->y = 0.0; if (g->x_axis->draw_axis_label) l->l->y = MIN(l->l->y, g->x_axis->label->ymin); if (g->x_axis->draw_hash_labels) l->l->y = MIN(l->l->y, g->x_axis->hl->ymin); if (g->x_axis->draw_hash_marks) { l->l->y = MIN(l->l->y, g->x_axis->draw_hash_marks_at); l->l->y = MIN(l->l->y, g->x_axis->draw_hash_marks_at + HASH_DIR(g->x_axis) * HASH_SIZE); } l->l->y -= 15.0; } } else { l->l->y = ctop(l->l->y, g->y_axis); } if (l->l->hj == 'l') x = 0.0; else if (l->l->hj == 'c') x = - width/2.0; else x = -width; if (l->l->vj == 't') y = 0.0; else if (l->l->vj == 'c') y = height / 2.0; else y = height; for (c = first(g->curves); c != nil(g->curves); c = next(c)) { if (c->l->label != CNULL) { c->l->x = hdist + x; c->l->y = y; c->l->vj = 't'; c->l->hj = 'l'; c->l->rotate = 0.0; process_label(c->l, g, 0); y = c->l->ymin - l->linebreak; } } process_label_max_n_mins(l->l, width, height); } float find_reasonable_hash_interval(a) Axis a; { float s, d; if (a->is_lg) return 0.0; s = a->max - a->min; d = 1.0; if (s > 5.0) { while(1) { if (s / d < 6.0) return d; d *= 2.0; if (s / d < 6.0) return d; d *= 2.5; if (s / d < 6.0) return d; d *= 2.0; } } else { while(1) { if (s / d > 2.0) return d; d /= 2.0; if (s / d > 2.0) return d; d /= 2.5; if (s / d > 2.0) return d; d /= 2.0; } } } float find_reasonable_hash_start(a) Axis a; { int i; if (a->is_lg) return 0.0; if (a->max > 0.0 && a->min < 0.0) return 0.0; i = ((int) (a->min / a->hash_interval)); return ((float) i) * a->hash_interval; } int find_reasonable_precision(a) Axis a; { int i, b, b2, done; float x, x2, tolerance; if (a->hash_format == 'g' || a->hash_format == 'G') return 6; if (a->hash_format == 'e' || a->hash_format == 'E') return 0; if (a->is_lg) return 0; tolerance = 0.000001; b = 0; x = a->hash_interval; done = 0; while(b < 6 && !done) { i = (int) (x + 0.4); x2 = i; if (x2 - x < tolerance && x - x2 < tolerance) done = 1; else { b++; x *= 10.0; tolerance *= 10.0; } } tolerance = 0.000001; b2 = 0; x = a->hash_start; done = 0; while(b2 < 6 && !done) { i = (int) (x + 0.4); x2 = i; if (x2 - x < tolerance && x - x2 < tolerance) done = 1; else { b2++; x *= 10.0; tolerance *= 10.0; } } return MAX(b, b2); } int find_reasonable_minor_hashes(a) Axis a; { float d; int i; if (a->is_lg) { d = a->log_base; while(d > 10.0) d /= 10.0; while(d <= 1.0) d *= 10.0; i = (int) d; return MAX((i - 2), 0); } else { d = a->hash_interval; if (d == 0.0) return 0; while(d > 10.0) d /= 10.0; while(d <= 1.0) d *= 10.0; i = (int) d; if (((float) i) != d) return 0; return i-1; } } process_axis1(a, g) Axis a; Graph g; { float tmp; int i; if (a->min == FSIG) { if (a->pmin == FSIG) { error_header(); fprintf(stderr, "Graph %d: %c axis has no minimum, and cannot derive one\n", g->num, AXIS_CHAR(a)); fprintf(stderr, " Use %caxis min\n", AXIS_CHAR(a)); exit(1); } else if (a->pmin <= 0.0 && a->is_lg) { error_header(); fprintf(stderr, "Trying to derive %c axis\n", AXIS_CHAR(a)); fprintf(stderr, " Minimum value %f will be -infinity with log axes\n", a->pmin); exit(1); } else a->min = a->pmin; } if (a->max == FSIG) { if (a->pmax == FSIG) { error_header(); fprintf(stderr, "Graph %d: %c axis has no maximum, and cannot derive one\n", g->num, AXIS_CHAR(a)); fprintf(stderr, " Use %caxis max\n", AXIS_CHAR(a)); exit(1); } else if (a->pmax <= 0.0 && a->is_lg) { error_header(); fprintf(stderr, "Trying to derive %c axis\n", AXIS_CHAR(a)); fprintf(stderr, " Maximum value %f will be -infinity with log axes\n", a->pmax); exit(1); } else a->max = a->pmax; } if (a->max < a->min) { tmp = a->max; a->max = a->min; a->min = tmp; } else if (a->max == a->min) { if (!a->is_lg) a->min -= 1; a->max += 1; } a->psize = intop(a->size); if (a->is_lg) { if (a->min <= 0.0) { error_header(); fprintf(stderr, "Graph %d, %c axis: Min value = %f. This is -infinity with logrhythmic axes\n", g->num, (a->is_x) ? 'x' : 'y', a->min); exit(1); } a->logfactor = log(a->log_base); a->logmin = log(a->min) / a->logfactor; a->factor = a->psize / (log(a->max) / a->logfactor - a->logmin); } else { a->factor = a->psize / (a->max - a->min); } if (a->gr_graytype == '0') { a->gr_graytype = a->graytype; for (i = 0; i < 3; i++) a->gr_gray[i] = a->gray[i]; } if (a->mgr_graytype == '0') { a->mgr_graytype = a->gr_graytype; for (i = 0; i < 3; i++) a->mgr_gray[i] = a->gr_gray[i]; } } process_axis2(a, g) Axis a; Graph g; { float t1, t2, t3, minor_hashes, hloc, tmp; float ymin, ymax, xmin, xmax; int prec, i1; Hash h; String s; Axis other; other = (a->is_x) ? g->y_axis : g->x_axis; if (a->draw_at == FSIG) a->draw_at = (HASH_DIR(a) == -1) ? 0.0 : other->psize; else a->draw_at = ctop(a->draw_at, other); if (a->hash_interval < 0.0) { a->hash_interval = find_reasonable_hash_interval(a); if (!a->start_given) a->hash_start = find_reasonable_hash_start(a); } else if (!a->start_given) a->hash_start = a->min; if (a->minor_hashes < 0) { a->minor_hashes = find_reasonable_minor_hashes(a); } if (a->precision < 0) a->precision = find_reasonable_precision(a); for (h = first(a->hash_lines) ; h != nil(a->hash_lines); h = next(h)) { h->loc = ctop(h->loc, a); } for (s = first(a->hash_labels); s != nil(a->hash_labels); s = next(s)) { s->s->x = ctop(s->s->x, a); s->s->y = ctop(s->s->y, a); } if (((a->hash_interval != 0.0 && !a->is_lg) || a->is_lg) && a->auto_hash_marks) { if (a->is_lg) { for (t1 = 1.0; t1 > a->min; t1 /= a->log_base) ; t2 = t1 * a->log_base - t1; } else { for (t1 = a->hash_start; t1 > a->min; t1 -= a->hash_interval) ; t2 = a->hash_interval; } while (t1 <= a->max) { hloc = ctop(t1, a); if (hloc > -.05 && hloc < a->psize + .05) { h = (Hash) get_node(a->hash_lines); h->loc = hloc; h->size = HASH_SIZE; h->major = 1; insert(h, a->hash_lines); if (a->auto_hash_labels) { s = (String) get_node (a->hash_labels); s->s = new_label(); s->s->x = hloc; s->s->y = hloc; s->s->label = (char *) malloc (80); if (a->precision >= 0) { prec = a->precision; } else { if (ABS(t1) >= 1.0 || t1 == 0.0) prec = 0; else { tmp = ABS(t1); prec = -1; while(tmp < 1.0) {tmp *= 10.0; prec++;} } } switch(a->hash_format) { case 'G': sprintf(s->s->label, "%.*G", prec, t1); break; case 'g': sprintf(s->s->label, "%.*g", prec, t1); break; case 'E': sprintf(s->s->label, "%.*E", prec, t1); break; case 'e': sprintf(s->s->label, "%.*e", prec, t1); break; case 'f': sprintf(s->s->label, "%.*f", prec, t1); break; default: fprintf(stderr, "Internal jgraph error: hl_st\n"); exit(1); } insert(s, a->hash_labels); } } minor_hashes = t2 / ((float) (a->minor_hashes + 1)); t3 = t1; for (i1 = 1; i1 <= a->minor_hashes; i1++) { t3 += minor_hashes; hloc = ctop(t3, a); if (hloc > -.05 && hloc < a->psize + .05) { h = (Hash) get_node(a->hash_lines); h->loc = hloc; h->size = MHASH_SIZE; h->major = 0; insert(h, a->hash_lines); } } if (a->is_lg) { t1 *= a->log_base; t2 = t1 * a->log_base - t1; } else t1 += t2; } } if (a->draw_hash_marks_at == FSIG) a->draw_hash_marks_at = a->draw_at; else a->draw_hash_marks_at = ctop(a->draw_hash_marks_at, other); if (a->draw_hash_labels_at == FSIG) a->draw_hash_labels_at = a->draw_hash_marks_at + a->hash_scale * HASH_SIZE + HASH_DIR(a) * 3.0; else a->draw_hash_labels_at = ctop(a->draw_hash_labels_at, other); if (a->is_x) { a->hl->y = a->draw_hash_labels_at; if (a->hl->hj == '0') a->hl->hj = 'c'; if (a->hl->vj == '0') a->hl->vj = (HASH_DIR(a) == -1) ? 't' : 'b'; } else { a->hl->x = a->draw_hash_labels_at; if (a->hl->vj == '0') a->hl->vj = 'c'; if (a->hl->hj == '0') a->hl->hj = (HASH_DIR(a) == -1) ? 'r' : 'l'; } ymin = (a->is_x) ? a->hl->y : 0; ymax = (a->is_x) ? a->hl->y : a->psize; xmin = (!a->is_x) ? a->hl->x : 0; xmax = (!a->is_x) ? a->hl->x : a->psize; for (s = first(a->hash_labels); s != nil(a->hash_labels); s = next(s)) { if (a->is_x) a->hl->x = s->s->x; else a->hl->y = s->s->y; a->hl->label = s->s->label; process_label(a->hl, g, 0); xmin = MIN(a->hl->xmin, xmin); ymin = MIN(a->hl->ymin, ymin); xmax = MAX(a->hl->xmax, xmax); ymax = MAX(a->hl->ymax, ymax); } a->hl->xmin = xmin; a->hl->ymin = ymin; a->hl->xmax = xmax; a->hl->ymax = ymax; /* HERE -- now either test or continue */ if (a->is_x) { if (a->label->x == FSIG) a->label->x = a->psize / 2.0; else a->label->x = ctop(a->label->x, g->x_axis); if (a->label->y == FSIG) { ymin = 0.0; ymax = other->psize; if (a->draw_hash_labels) { ymin = MIN(ymin, a->hl->ymin); ymax = MAX(ymax, a->hl->ymax); } if (a->draw_hash_marks) { ymin = MIN(ymin, a->draw_hash_marks_at); ymin = MIN(ymin, a->draw_hash_marks_at + a->hash_scale * HASH_SIZE); ymax = MAX(ymax, a->draw_hash_marks_at); ymax = MAX(ymax, a->draw_hash_marks_at + a->hash_scale * HASH_SIZE); } a->label->y = (HASH_DIR(a) == -1) ? ymin - 8.0 : ymax + 8.0 ; } else a->label->y = ctop(a->label->y, g->y_axis); if (a->label->hj == '0') a->label->hj = 'c'; if (a->label->vj == '0') a->label->vj = (HASH_DIR(a) == -1) ? 't' : 'b' ; if (a->label->rotate == FSIG) a->label->rotate = 0.0; } else { if (a->label->y == FSIG) a->label->y = a->psize / 2.0; else a->label->y = ctop(a->label->y, g->y_axis); if (a->label->x == FSIG) { xmin = 0.0; xmax = other->psize; if (a->draw_hash_labels) { xmin = MIN(xmin, a->hl->xmin); xmax = MAX(xmax, a->hl->xmax); } if (a->draw_hash_marks) { xmin = MIN(xmin, a->draw_hash_marks_at); xmin = MIN(xmin, a->draw_hash_marks_at + a->hash_scale * HASH_SIZE); xmax = MAX(xmax, a->draw_hash_marks_at); xmax = MAX(xmax, a->draw_hash_marks_at + a->hash_scale * HASH_SIZE); } a->label->x = (HASH_DIR(a) == -1) ? xmin - 8.0 : xmax + 8.0 ; } else a->label->x = ctop(a->label->x, g->x_axis); if (a->label->hj == '0') a->label->hj = 'c'; if (a->label->vj == '0') a->label->vj = 'b'; if (a->label->rotate == FSIG) a->label->rotate = (HASH_DIR(a) == -1) ? 90.0 : -90.0; } process_label (a->label, g, 0); } process_label(l, g, adjust) Label l; Graph g; int adjust; { float len, height; int f, i; float fnl, tmp; char *s; if (l->label == CNULL) return; if (adjust) { l->x = ctop(l->x, g->x_axis); l->y = ctop(l->y, g->y_axis); } if (l->linesep == FSIG) l->linesep = l->fontsize; l->nlines = 0; for (i = 0; l->label[i] != '\0'; i++) { if (l->label[i] == '\n') { l->label[i] = '\0'; l->nlines++; } } fnl = (float) l->nlines; len = 0.0; s = l->label; for (i = 0; i <= l->nlines; i++) { tmp = l->fontsize * FCPI / FPPI * strlen(s) * 0.8; len = MAX(len, tmp); if (i != l->nlines) { f = strlen(s); s[f] = '\n'; s = &(s[f+1]); } } height = (l->fontsize * (fnl+1) + l->linesep * fnl) * FCPI / FPPI; process_label_max_n_mins(l, len, height); } process_label_max_n_mins(l, len, height) Label l; float len; float height; { float xlen, ylen, xheight, yheight; float x, y; xlen = len * cos(l->rotate * Pi / 180.00); ylen = height * cos((l->rotate + 90.0) * Pi / 180.00); xheight = len * sin(l->rotate * Pi / 180.00); yheight = height * sin((l->rotate + 90.0) * Pi / 180.00); x = l->x; y = l->y; if (l->hj == 'c') { x -= xlen / 2.0; y -= xheight / 2.0; } else if (l->hj == 'r') { x -= xlen; y -= xheight; } if (l->vj == 'c') { x -= ylen / 2.0; y -= yheight / 2.0; } else if (l->vj == 't') { x -= ylen; y -= yheight; } l->xmin = MIN(x, x + xlen); l->xmin = MIN(l->xmin, x + xlen + ylen); l->xmin = MIN(l->xmin, x + ylen); l->ymin = MIN(y, y + xheight); l->ymin = MIN(l->ymin, y + yheight); l->ymin = MIN(l->ymin, y + xheight + yheight); l->xmax = MAX(x, x + xlen); l->xmax = MAX(l->xmax, x + xlen + ylen); l->xmax = MAX(l->xmax, x + ylen); l->ymax = MAX(y, y + xheight); l->ymax = MAX(l->ymax, y + yheight); l->ymax = MAX(l->ymax, y + xheight + yheight); } process_strings(g) Graph g; { String s; for(s = first(g->strings); s != nil(g->strings); s = next(s)) { process_label(s->s, g, 1); } } process_curve(c, g) Curve c; Graph g; { if (c->bezier && (c->npts < 4 || (c->npts % 3 != 1))) { error_header(); fprintf(stderr, " Graph %d Curve %d:\n", g->num, c->num); fprintf(stderr, " Curve has %d points\n", c->npts); fprintf(stderr, " Bezier must have 3n + 1 points (n > 0)\n"); exit(1); } c->marksize[0] = (c->marksize[0] == FSIG) ? 4.0 : disttop(c->marksize[0], g->x_axis); c->marksize[1] = (c->marksize[1] == FSIG) ? 4.0 : disttop(c->marksize[1], g->y_axis); if (c->marktype == 'o') c->marksize[1] = c->marksize[0]; c->asize[0] = (c->asize[0] == FSIG) ? 6.0 : disttop(c->asize[0], g->x_axis); c->asize[1] = (c->asize[1] == FSIG) ? 2.0 : disttop(c->asize[1], g->y_axis) / 2.0; c->lmark->x = disttop(c->lmark->x, g->x_axis); c->lmark->y = disttop(c->lmark->y, g->y_axis); process_label(c->lmark, g, 0); if (c->parg == FSIG) c->parg = 0.0; if (c->aparg == FSIG) c->aparg = 0.0; if (c->pparg == FSIG) c->pparg = 0.0; } process_curves(g) Graph g; { Curve c; for(c = first(g->curves); c != nil(g->curves); c = next(c)) { process_curve(c, g); } } process_extrema(g) /* This finds all the minval/maxvals for bbox calc */ Graph g; { Curve c; String s; Axis xa, ya; xa = g->x_axis; ya = g->y_axis; g->xminval = 0.0; g->yminval = 0.0; g->xmaxval = xa->psize; g->ymaxval = ya->psize; if (xa->draw_axis_label) process_label_extrema(xa->label, g); if (ya->draw_axis_label) process_label_extrema(ya->label, g); if (xa->draw_hash_labels) process_label_extrema(xa->hl, g); if (ya->draw_hash_labels) process_label_extrema(ya->hl, g); if (xa->draw_hash_marks) { g->yminval = MIN(g->yminval, xa->draw_hash_marks_at); g->yminval = MIN(g->yminval, xa->draw_hash_marks_at + HASH_DIR(xa) * HASH_SIZE); g->ymaxval = MAX(g->ymaxval, xa->draw_hash_marks_at); g->ymaxval = MAX(g->ymaxval, xa->draw_hash_marks_at + HASH_DIR(xa) * HASH_SIZE); } if (ya->draw_hash_marks) { g->xminval = MIN(g->xminval, ya->draw_hash_marks_at); g->xminval = MIN(g->xminval, ya->draw_hash_marks_at + HASH_DIR(ya) * HASH_SIZE); g->xmaxval = MAX(g->xmaxval, ya->draw_hash_marks_at); g->xmaxval = MAX(g->xmaxval, ya->draw_hash_marks_at + HASH_DIR(ya) * HASH_SIZE); } process_label_extrema(g->title, g); if (g->legend->type == 'c') { for (c = first(g->curves); c != nil(g->curves); c = next(c)) { process_label_extrema(c->l, g); } } else if (g->legend->type == 'u' && g->legend->anylines >= 0) { process_label_extrema(g->legend->l, g); } for(s = first(g->strings); s != nil(g->strings); s = next(s)) { process_label_extrema(s->s, g); } } process_label_extrema(l, g) Label l; Graph g; { if (l->label == CNULL) return; g->yminval = MIN(g->yminval, l->ymin); g->ymaxval = MAX(g->ymaxval, l->ymax); g->xminval = MIN(g->xminval, l->xmin); g->xmaxval = MAX(g->xmaxval, l->xmax); } process_graph(g) Graph g; { g->x_translate = intop(g->x_translate); g->y_translate = intop(g->y_translate); process_axis1(g->x_axis, g); process_axis1(g->y_axis, g); process_axis2(g->x_axis, g); process_axis2(g->y_axis, g); process_curves(g); process_legend(g); process_strings(g); process_title(g); process_extrema(g); } process_graphs(gs) Graphs gs; { Graphs the_g; Graph g; float diff, max_y, min_y, max_x, min_x; int do_bb, i; Pi = acos(-1.0); for (the_g = first(gs); the_g != nil(gs); the_g = next(the_g)) { for (g = first(the_g->g); g != nil(the_g->g); g = next(g)) process_graph(g); max_x = 0.0; min_x = 0.0; max_y = 0.0; min_y = 0.0; for (g = first(the_g->g); g != nil(the_g->g); g = next(g)) { max_y = MAX(max_y, g->y_translate + g->ymaxval); min_y = MIN(min_y, g->y_translate + g->yminval); max_x = MAX(max_x, g->x_translate + g->xmaxval); min_x = MIN(min_x, g->x_translate + g->xminval); } if (the_g->height >= 0.00) { the_g->height *= FCPI; if (the_g->height > max_y - min_y) { diff = (the_g->height - max_y + min_y) / 2.0; max_y += diff; min_y -= diff; } else { the_g->height = max_y - min_y; } } else { the_g->height = max_y - min_y; } if (the_g->width >= 0.00) { the_g->width *= FCPI; if (the_g->width > max_x - min_x) { diff = (the_g->width - max_x + min_x) / 2.0; max_x += diff; min_x -= diff; } else { the_g->width = max_x - min_x; } } else { the_g->width = max_x - min_x; } do_bb = 1; for (i = 0; i < 4; i++) do_bb = (do_bb && the_g->bb[i] == ISIG); if (do_bb) { the_g->bb[0] = (int) (min_x - 1.0); the_g->bb[1] = (int) (min_y - 1.0); the_g->bb[2] = (int) (max_x + 1.0); the_g->bb[3] = (int) (max_y + 1.0); } } } jgraph-83.orig/redexp.vms100664 1750 50 45464 6273276353 14144 0ustar osirissrc/* --redexp.vms-- This 'C' module may be included prior to the ``main'' programs on VMS in order to allow 'C' arguments to contain redirection symbols (<,>,>>) and VMS wild cards (*,%, ...], [-). By including this module, two programs redirect() and expand() are run prior to turning control over to your main() entry point. redirect-- Gregg Townsend circa 1983, expand-- John Campbell circa 1987 This code is public domain, others may use it freely. Credit, however, to Gregg Townsend (who wrote ``redirect()'') and John Campbell (who followed with ``expand()'') would be appreciated. If someone writes the next logical successor ``pipe()'', please email a copy to ...!arizona!naucse!jdc (John Campbell) (Gregg works on unix :-). HISTORY */ #include /* No easy way to tell if this has already been included. */ #ifndef ERANGE #include /* Include only if missing. */ #endif #ifndef __FILE #include /* Include only if missing. */ #endif #include /* Added for conversion to lower case */ #ifndef __STRING_LOADED #include #endif /* !__STRING_LOADED */ /* Expansion of wild cards is done using RMS. */ struct NAMBLK { struct NAM nam; /* VMS nam block structure */ char es[NAM$C_MAXRSS], /* Extended string */ rs[NAM$C_MAXRSS]; /* Resultant string */ }; #define ErrorExit 1 /* Allow the user to override _N_FARGS or _E_FLAG if they wish. */ #ifndef _N_FARGS #define _N_FARGS 0 /* no automatic redirection please */ #endif #ifndef _E_FLAG #define _E_FLAG 4 /* only include dev and dir if different from default */ #endif /* Since the following will possibly be included in a single module, try hard to avoid name conflicts. (Just being static doesn't cut it if compiled in the same module.) */ #define redirect _r_edirect #define filearg _f_ilearg #define expand _e_xpand #define wild_found _w_ild_found #define wild_expand _w_ild_expand /* forward protypes */ static void redirect(int *argc, char *argv[], int nfargs); char **expand (int *argc, const char *argv[], const int flag); main(int argc, char *argv[], char *envp[]) { redirect (&argc, argv, _N_FARGS); argv = expand (&argc, argv, _E_FLAG); /* Make the user's main entry point this routine's entry point. */ #define main _user_main _user_main (argc, argv, envp); } /* ------------------------ REDIRECT code ------------------------ */ /* * redirect(&argc,argv,nfargs) - redirect standard I/O * int *argc number of command arguments (from call to main) * char *argv[] command argument list (from call to main) * int nfargs number of filename arguments to process * * argc and argv will be adjusted by redirect. * * redirect processes a program's command argument list and handles redirection * of stdin, and stdout. Any arguments which redirect I/O are removed from the * argument list, and argc is adjusted accordingly. redirect would typically be * called as the first statement in the main program. * * Files are redirected based on syntax or position of command arguments. * Arguments of the following forms always redirect a file: * * file redirects standard output to write to the given file * >>file redirects standard output to append to the given file * * It is often useful to allow alternate input and output files as the * first two command arguments without requiring the file * syntax. If the nfargs argument to redirect is 2 or more then the * first two command arguments, if supplied, will be interpreted in this * manner: the first argument replaces stdin and the second stdout. * A filename of "-" may be specified to occupy a position without * performing any redirection. * * If nfargs is 1, only the first argument will be considered and will * replace standard input if given. Any arguments processed by setting * nfargs > 0 will be removed from the argument list, and again argc will * be adjusted. Positional redirection follows syntax-specified * redirection and therefore overrides it. * */ /* forward prototype for local routine */ static void filearg(int *argc, char *argv[], int n, int i, FILE *fp, char mode[]); static void redirect(int *argc, char *argv[], int nfargs) { int i; i = 1; while (i < *argc) { /* for every command argument... */ switch (argv[i][0]) { /* check first character */ case '<': /* ': /* >file or >>file redirects stdout */ if (argv[i][1] == '>') filearg(argc,argv,i,2,stdout,"a"); else filearg(argc,argv,i,1,stdout,"w"); break; default: /* not recognized, go on to next arg */ i++; } } if (nfargs >= 1 && *argc > 1) /* if positional redirection & 1 arg */ filearg(argc,argv,1,0,stdin,"r"); /* then redirect stdin */ if (nfargs >= 2 && *argc > 1) /* likewise for 2nd arg if wanted */ filearg(argc,argv,1,0,stdout,"w");/* redirect stdout */ } /* local routine for redirect() */ /* filearg(&argc,argv,n,i,fp,mode) - redirect and remove file argument * int *argc number of command arguments (from call to main) * char *argv[] command argument list (from call to main) * int n argv entry to use as file name and then delete * int i first character of file name to use (skip '<' etc.) * FILE *fp file pointer for file to reopen (typically stdin etc.) * char mode[] file access mode (see freopen spec) */ static void filearg(int *argc, char *argv[], int n, int i, FILE *fp, char mode[]) { if (strcmp(argv[n]+i,"-")) /* alter file if arg not "-" */ fp = freopen(argv[n]+i,mode,fp,"mbf=8","mbc=16"); if (fp == NULL) { /* abort on error */ fprintf(stderr,"%%can't open %s",argv[n]+i); exit(ErrorExit); } for ( ; n < *argc; n++) /* move down following arguments */ argv[n] = argv[n+1]; *argc = *argc - 1; /* decrement argument count */ } /* ------------------------ EXPAND code ------------------------ */ /*- ``expand()'' is a routine to expand wild-cards to file specifications. This routine is often used in conjunction with ``redirect()'' to provide both wild card expansion and standard file redirection prior to doing any real work in a 'C' program. Normal usage is to include the following line prior to using argc or argv in main(): argv = expand (&argc, argv, 0); ``argc'' will be adjusted by ``expand()'', the return value from expand will replace ``argv''. ``expand()'' processes a program's command argument list and expands any wild cards into zero or more argv entries. Only arguments that posses VMS wild-cards are expanded. Wild cards searched for are ``*'', ``%'', ``...]'', and ``[-''. If the wild-card is found inside a single or double quote ("*" or '%') then they are not counted as wild-cards. Be aware that the expansion of a VMS wild card will match all VMS files, including directory files (".DIR;1"). NOTE: The use of quotes in VMS requires thinking about how the CLI expands things before handing the argument line over to your program. Do not expect "*" to avoid expansion, use """*""" instead. Likewise, expression substitution precludes the use of (') to quote wild cards: $ A := HELLO $ ECHO 'a' ! 'C' program that calls ``expand()'' hello The easiest way to escape a wild-card may be "'*'". The point is that ``expand()'' will only recognize quotes passed into main(). Note: I have added '\' as an escape character -hdd. ``expand()'' references the VMS runtime routines, you will need to link with the 'C' RTL whenever expand is used. Parameters: argc: Pointer to the number of command arguments (from main), the contents of this parameter are modified. argv: Pointer to the initial command argument list (from main), the contents are copied into a new array which is returned from this routine. flag: Flag indicating how to expand wild-cards: 0 - Complete file name expansion 1 - only file name (no directory or version). 2 - directory info and file name (no version). 3 - file name and version info (no directory). 4 - omit fields that are the same as RMS default. -*/ /* Local prototypes. */ int wild_found (char *string); char **wild_expand (const char *string, char **argv, int *argc, int extra, int flag); /* General note: removing the prototyping and const keywords should allow this code to compile with VMS 'C' compilers prior to version 2.3-024. */ char **expand (int *argc, const char *argv[], const int flag) { int i, nargc; char **nargv; char *s1; /* Get an initial amount of memory for the master nargv array. */ if ((nargv = (char **)malloc ((*argc+1) * sizeof (char *))) == NULL) { fprintf (stderr, "Not enough memory to expand argument list\n"); exit (ErrorExit); } /* Copy the command name (0th argument), but only the name of the exe */ nargv[0] = strchr(argv[0],']'); if (nargv[0] != NULL) { nargv[0]++; if ((s1=strrchr(nargv[0],'.')) != NULL) *s1 = '\0'; } else { nargv[0] = argv[0]; /* if nothing suitable take original */ } /* Copy all other arguments, expanding those that have wild characters. */ for (nargc = i = 1; i < *argc; i++) { if (wild_found(argv[i])) nargv = wild_expand(argv[i], nargv, &nargc, *argc-i, flag); else nargv[nargc++] = argv[i]; } *argc = nargc; nargv[nargc] = NULL; /* realloc always 0 fills, but... */ return nargv; } static int wild_found (char *string) /* Routine to search the given string for a VMS wild-card pattern. Returns 1 if "*", "%", "[-", or "...]" is found. (This may not be all VMS wild-cards but it is enough for now--anyone that wants to recognize others can change this code.) Parameter: string: '\0' terminated character array. */ { int state = 0; /* State of 0 is "rest" state. State 1 on our way to [-, states 2-4 on our way to ...], negative states indicate the two quotes (' -10, " -1). */ for ( ;*string; string++) { switch (*string) { case '*': case '%': if (state >= 0) return 1; /* Unquoted % or * found. */ break; case '[': if (state >= 0) state = 1; break; case ']': if (state == 4) return 1; /* Unquoted ...] found. */ else if (state >= 0) state = 0; break; case '-': if (state == 1) return 1; /* Unquoted [- found. */ else if (state >= 0) state = 0; break; case '.': if (state == 1 || state == 0) state = 2; /* First '.' */ else if (state > 1 && state < 5) state++; /* ... == states 2, 3, 4 */ else if (state >= 0) state = 0; break; case '\'': if (state <= -10) state += 10; /* One ', possibly one " also */ else if (state < 0) state -= 10; /* 0 ', possibly one " */ else state = -10; /* No ' or " prior to this ' */ break; case '"': if (state == -11) state = -10; /* Both " and ' prior to this. */ else if (state == -10) state = -11; /* A ' prior to this. */ else if (state == -1) state = 0; /* A " prior to this. */ else state = -1; /* No ' or " prior to this " */ break; case '\\': string = strcpy(string, string+1); state = 0; break; } } return 0; } static char **wild_expand(const char *wild, char **argv, int *argc, int extra, int flag) /* Routine to expand wild into new arguments appended to the end of argv[*argc]. This routine must realloc in order to make room for the individual arguments and malloc for enough space for each of the arguments. The return value is a new **argv. Parameters: wild: '\0' terminated string that needs to be expanded. argv: initial starting address of the argv array. argc: pointer to an integer that tells the current end of the argument list. extra: The number of extra pointers that the returned argv must have available for future assignments. flag: Flag indicating how to expand wild-card: 0 - Complete file name expansion 1 - only file name (no directory or version). 2 - directory info and file name (no version) 3 - file name and version info (no directory). 4 - omit fields that are the same as RMS default. */ { int more_to_go = 1, err, length, status, len_wild, i, ddev_l, ddir_l; char *namptr; struct FAB fab_blk; struct NAMBLK nam_blk; char path[256]; char *ddevice = &path[0]; /* default device and directory */ char *ddirectory, *ppath; char *env = getenv("PATH"); ppath = &path[0]; while (*env) { char *p = env++; if ((*ppath++ = _toupper(*p)) == ':') { ddev_l = ppath - &path[0]; *ppath++ = 0; ddirectory = ppath; } } *ppath++ = 0; ddir_l = ppath - ddirectory - 1; len_wild = strlen(wild); /* Initialize all the fab and nam fields needed for parse and search */ fab_blk = cc$rms_fab; /* Initialize FAB structure */ nam_blk.nam = cc$rms_nam; /* Initialize NAM structure */ fab_blk.fab$l_dna = ".*"; /* Default file specif. */ fab_blk.fab$b_dns = 2; /* Length of default spec. */ fab_blk.fab$l_nam = &nam_blk.nam; /* Set address of NAM in FAB*/ nam_blk.nam.nam$b_ess = NAM$C_MAXRSS; /* Set extended string size*/ nam_blk.nam.nam$l_esa = nam_blk.es; /* and address */ nam_blk.nam.nam$b_rss = NAM$C_MAXRSS; /* Set resultant string size*/ nam_blk.nam.nam$l_rsa = nam_blk.rs; /* and address */ nam_blk.nam.nam$l_rlf = NULL; /* No related file address */ fab_blk.fab$l_fna = wild; /* Address of file name string */ fab_blk.fab$b_fns = len_wild; /* Length of file name string */ /* Prepare to enter the search loop, parse fab. */ err = SYS$PARSE (&fab_blk); /* Catch the directory not found error and return no files found. */ if (err != RMS$_NORMAL) exit(err); while (more_to_go) { err = SYS$SEARCH (&fab_blk); if (err == RMS$_NMF || err == RMS$_FNF) more_to_go = 0; /* Done, no more files found */ else if (err != RMS$_NORMAL) exit (err); else { /* Count that we now have this many arguments. */ (*argc)++; /* Make sure there is room for a new pointer. */ if ((argv = realloc (argv, (*argc + extra)*sizeof(char *))) == NULL) { fprintf (stderr, "Not enough memory to expand argument list\n"); exit(ErrorExit); } /* Move the right name into the list. */ switch (flag) { case 0: /* Complete file name */ length = nam_blk.nam.nam$b_rsl; namptr = nam_blk.rs; break; case 1: /* File name only (no directory or version). */ length = nam_blk.nam.nam$b_name + nam_blk.nam.nam$b_type; namptr = nam_blk.nam.nam$l_name; break; case 2: /* directory and file name (no version) */ length = nam_blk.nam.nam$b_rsl - nam_blk.nam.nam$b_ver; namptr = nam_blk.rs; break; case 3: /* File name and version (no directory). */ length = nam_blk.nam.nam$b_name + nam_blk.nam.nam$b_type + nam_blk.nam.nam$b_ver; namptr = nam_blk.nam.nam$l_name; break; case 4: /* Remove redundant fields, no version */ length = nam_blk.nam.nam$b_rsl - nam_blk.nam.nam$b_ver; namptr = nam_blk.rs; if ((nam_blk.nam.nam$b_dev==ddev_l) && !strncmp(namptr, ddevice, nam_blk.nam.nam$b_dev)) { length -= nam_blk.nam.nam$b_dev; namptr += nam_blk.nam.nam$b_dev; if ((nam_blk.nam.nam$b_dir==ddir_l) && !strncmp(namptr, ddirectory, nam_blk.nam.nam$b_dir)) { length -= nam_blk.nam.nam$b_dir; namptr += nam_blk.nam.nam$b_dir; } } break; default: fprintf (stderr, "illegal flag used in VMS expand call\n"); exit (ErrorExit); } /* end of switch */ /* Copy the requested string into the argument array. */ if ((argv[*argc-1] = malloc (length+1)) == NULL) { fprintf (stderr, "Not enough memory to expand argument list\n"); exit (ErrorExit); } /* Copy the string, translate to lower case */ /* strncpy (argv[*argc-1], namptr, length); */ for (i=0; i /* here come the 3 lines that make this Unix program into a VMS one: */ #ifdef VMS #include #endif /* This main program allows you to run experiments with redexp.vms. Try $ echo *.*, $ echo -f1 [-...]*.*, $ echo -f[0-3] *.*. Questions about using "%", "\", etc. may be answered by testing with this version of echo. To use this, cut from the "#if 0" above up to the last #endif, and put the text in echo.c. Assuming you have defined VAXC$INCLUDE to also look in the directory where you put redexp.VMS, you should be able to compile and link echo. Define a symbol echo as echo :== $sys$disk:[]echo and you are ready to run. */ main(argc, argv) int argc; char *argv[]; { int i = 0; while (i < argc) { printf("argv[%d]: %s\n", i, argv[i]); i++; } } /* ------------------------ ECHO sample code end --------------------- */ #endif /* if 0 */ jgraph-83.orig/show.c100664 1750 50 27056 6273276354 13250 0ustar osirissrc/* * $Source: /tmp_mnt/n/fs/grad1/jsp/src/jgraph/RCS/show.c,v $ * $Revision: 8.3 $ * $Date: 92/11/30 11:42:40 $ * $Author: jsp $ */ #include #include #include "jgraph.h" static spaces(nsp) int nsp; { while(nsp-- > 0) putchar(' '); } float ptoin(p) float p; { return p / FCPI; } float ptoc(p, a) float p; Axis a; { if (a->is_lg) { return (float) exp((p / a->factor + a->logmin) * a->logfactor); } else { return (p / a->factor) + a->min; } } float ptodist(p, a) float p; Axis a; { if (a->is_lg) { return p / FCPI; } else { return (p / a->factor); } } static show_mltiline(s) char *s; { int i; if (s != CNULL) { for (i = 0; s[i] != '\0'; i++) { if (s[i] == '\n') putchar('\\'); putchar(s[i]); } } putchar('\n'); } show_string(s) char *s; { int i; if (s != CNULL) { printf(": "); for (i = 0; s[i] != '\0'; i++) { if (s[i] == '\n') putchar('\\'); if (s[i] == '\\') i++; putchar(s[i]); } } putchar('\n'); } show_label(l, nsp, g) Label l; int nsp; Graph g; { spaces(nsp); show_string(l->label); spaces(nsp); printf("x %f ", ptoc(l->x, g->x_axis)); printf("y %f\n", ptoc(l->y, g->y_axis)); spaces(nsp); printf("hj%c vj%c ", l->hj, l->vj); printf("rotate %f\n", l->rotate); spaces(nsp); printf("font %s ", l->font); printf("fontsize %f ", l->fontsize); printf("linesep %f\n", l->linesep); if (l->graytype == 'g') { spaces(nsp); printf("lgray %f\n", l->gray[0]); } else if (l->graytype == 'c') { spaces(nsp); printf("lcolor %f %f %f\n", l->gray[0], l->gray[1], l->gray[2]); } return; } show_lmark(l, nsp, g) Label l; int nsp; Graph g; { spaces(nsp); show_string(l->label); spaces(nsp); printf("x %f ", ptodist(l->x, g->x_axis)); printf("y %f\n", ptodist(l->y, g->y_axis)); spaces(nsp); printf("hj%c vj%c ", l->hj, l->vj); printf("rotate %f\n", l->rotate); spaces(nsp); printf("font %s ", l->font); printf("fontsize %f\n", l->fontsize); return; } show_curve(c, nsp, g) Curve c; int nsp; Graph g; { Point p; Point px; Point py; int i; Flist fl; if (c->l->label != CNULL) { spaces(nsp); printf("label\n"); spaces(nsp+2); printf("(* unless , this label\'s x\'s and y\'s will be ignored *)\n"); show_label(c->l, nsp+2, g); } px = first(c->xepts); py = first(c->yepts); for(p = first(c->pts); p != nil(c->pts); p = next(p)) { if (p->e == 'p') { spaces(nsp); printf("pts %f %f\n", p->x, p->y); } else if (p->e == 'x') { spaces(nsp); printf("x_epts %f %f %f %f\n", p->x, p->y, px->x, next(px)->x); px = next(next(px)); } else if (p->e == 'y') { spaces(nsp); printf("y_epts %f %f %f %f\n", p->y, p->y, py->y, next(py)->y); py = next(next(py)); } else { fprintf(stderr, "Internal error: p->e == %c\n", p->e); exit(1); } } if (c->eps != CNULL) { spaces(nsp); printf("eps %s\n", c->eps); } if (c->postscript != CNULL) { spaces(nsp); printf("postscript "); if (!c->postfile) printf(": "); show_mltiline(c->postscript); } spaces(nsp); printf("marktype "); for (i = 0; i < NMARKTYPES && c->marktype != MARKTYPES[i]; i++) ; if (i == NMARKTYPES) { error_header(); fprintf(stderr, "Unknown mark type %c\n", c->marktype); exit(1); } else printf("%s ", MARKTYPESTRS[i]); if (c->marktype == 'l') { show_lmark(c->lmark, nsp+2, g); spaces(nsp); } printf("marksize %f %f ", ptodist(c->marksize[0], g->x_axis), ptodist(c->marksize[1], g->y_axis)); printf("mrotate %f ", c->mrotate); if (c->filltype == 'g') { printf("fill %f\n", c->fill[0] ); } else if (c->filltype == 'c') { printf("cfill %f %f %f\n", c->fill[0], c->fill[1], c->fill[2] ); } if (first(c->general_marks) != c->general_marks) { spaces(nsp); printf("gmarks"); for(p = first(c->general_marks); p != nil(c->general_marks); p = next(p)) printf(" %f %f ", p->x, p->y); } printf("\n"); spaces(nsp); if(!c->poly) printf("no"); printf("poly "); if (c->pfilltype == 'g') { printf("pfill %f", c->pfill[0] ); } else if (c->pfilltype == 'c') { printf("pcfill %f %f %f", c->pfill[0], c->pfill[1], c->pfill[2] ); } printf("\n"); spaces(nsp); printf("linetype "); if (c->linetype == '0') printf("none "); else if (c->linetype == 's') printf("solid "); else if (c->linetype == '.') printf("dotted "); else if (c->linetype == '-') printf("dashed "); else if (c->linetype == 'l') printf("longdash "); else if (c->linetype == 'd') printf("dotdash "); else if (c->linetype == 'D') printf("dotdotdash "); else if (c->linetype == '2') printf("dotdotdashdash "); else if (c->linetype == 'g') { printf("general\n"); spaces(nsp+2); printf("glines "); i = 0; for (fl = first(c->gen_linetype); fl != nil(c->gen_linetype); fl = next(fl)) { if (i == 6) { printf("\n"); spaces(nsp + 9); i = 0; } printf("%f ", fl->f); i++; } printf("\n"); spaces(nsp); } printf("linethickness %f\n", c->linethick); spaces(nsp); if (c->graytype == 'g') { printf("gray %f ", c->gray[0]); } else if (c->graytype == 'c') { printf("color %f %f %f ", c->gray[0], c->gray[1], c->gray[2]); } if(!c->clip) printf("no"); printf("clip\n"); spaces(nsp); for (i = 0; i < NPATTERNS && PTYPES[i] != c->pattern; i++) ; printf("pattern %s %f ", PATTERNS[i], c->parg); for (i = 0; i < NPATTERNS && PTYPES[i] != c->ppattern; i++) ; printf("ppattern %s %f ", PATTERNS[i], c->pparg); for (i = 0; i < NPATTERNS && PTYPES[i] != c->apattern; i++) ; printf("apattern %s %f\n", PATTERNS[i], c->aparg); spaces(nsp); if(!c->rarrow) printf("no"); printf("rarrow "); if(!c->larrow) printf("no"); printf("larrow "); if(!c->rarrows) printf("no"); printf("rarrows "); if(!c->larrows) printf("no"); printf("larrows "); if (c->afilltype == 'g') { printf("afill %f\n", c->afill[0] ); } else if (c->afilltype == 'c') { printf("acfill %f %f %f\n", c->afill[0], c->afill[1], c->afill[2] ); } spaces(nsp); if(!c->bezier) printf("no"); printf("bezier "); printf("asize %f %f\n", ptodist(c->asize[0], g->x_axis), ptodist(c->asize[1], g->y_axis) * 2.0); } show_axis(a, nsp, g) Axis a; int nsp; Graph g; { Axis other; Hash h; String s; if (a->is_x) other = g->y_axis; else other = g->x_axis; spaces(nsp); printf("size %f\n", a->size); spaces(nsp); printf("min %f max %f %s\n", a->min, a->max, (a->is_lg) ? "log" : "linear"); if (!(a->draw_hash_labels || a->draw_axis_line || a->draw_hash_marks || a->draw_axis_label)) { spaces(nsp); printf("nodraw\n"); return; } spaces(nsp); printf("draw_at %f\n", ptoc(a->draw_at, other)); if (a->label->label != CNULL) { spaces(nsp); printf("label\n"); show_label(a->label, nsp+2, g); } spaces(nsp); printf("%sdraw_hash_labels\n", (a->draw_hash_labels) ? "" : "no_"); spaces(nsp); printf("%sdraw_axis_line\n", (a->draw_axis_line) ? "" : "no_"); spaces(nsp); printf("%sdraw_hash_marks\n", (a->draw_hash_marks) ? "" : "no_"); spaces(nsp); printf("%sgrid_lines\n", (a->grid_lines) ? "" : "no_"); spaces(nsp); printf("%smgrid_lines\n", (a->mgrid_lines) ? "" : "no_"); spaces(nsp); printf("%sdraw_axis_label\n", (a->draw_axis_label) ? "" : "no_"); spaces(nsp); if (a->graytype == 'g') { printf("gray %f\n", a->gray[0]); } else if (a->graytype == 'c') { printf("color %f %f %f\n", a->gray[0], a->gray[1], a->gray[2]); } spaces(nsp); if (a->gr_graytype == 'g') { printf("gr_gray %f ", a->gr_gray[0]); } else if (a->gr_graytype == 'c') { printf("color %f %f %f ", a->gr_gray[0], a->gr_gray[1], a->gr_gray[2]); } if (a->mgr_graytype == 'g') { printf("mgr_gray %f\n", a->mgr_gray[0]); } else if (a->mgr_graytype == 'c') { printf("color %f %f %f\n", a->mgr_gray[0], a->mgr_gray[1], a->mgr_gray[2]); } spaces(nsp); printf("(* The real settings for generating auto_hash_labels:\n"); spaces(nsp+5); printf("%sauto_hash_marks ", (a->auto_hash_marks) ? "" : "no_"); printf("%sauto_hash_labels\n", (a->auto_hash_labels) ? "" : "no_"); spaces(nsp+5); printf("hash %f shash %f mhash %d hash_format %c\n", a->hash_interval, a->hash_start, a->minor_hashes, a->hash_format); spaces(nsp+5); if (a->is_lg) { printf("log_base %f ", a->log_base); } printf("hash_scale %f ", a->hash_scale); printf("precision %d\n", a->precision); spaces(nsp+3); printf("The following are explicit and implicit hash marks and labels *)\n"); spaces(nsp); printf("hash 0 draw_hash_marks_at %f draw_hash_labels_at %f\n", ptoc(a->draw_hash_marks_at, other), ptoc(a->draw_hash_labels_at, other)); spaces(nsp); printf("hash_labels (* The :, x, and y values are ignored *)\n"); show_label(a->hl, nsp + 2, g); for (h = first(a->hash_lines); h != nil(a->hash_lines); h = next(h)) { spaces(nsp); printf("%s %f\n", ((h->size == HASH_SIZE) ? "hash_at" : "mhash_at"), ptoc(h->loc, a)); } for (s = first(a->hash_labels); s != nil(a->hash_labels); s = next(s)) { spaces(nsp); printf("hash_label at %f ", ptoc(s->s->x, a)); show_string(s->s->label); } } show_legend(l, nsp, g) Legend l; int nsp; Graph g; { if (l->type == 'c') { spaces(nsp); printf("custom\n"); } else if (l->type == 'n') { spaces(nsp); printf("off\n"); } spaces(nsp); printf("linelength %f linebreak %f midspace %f\n", ptodist(l->linelength, g->x_axis), ptodist(l->linebreak, g->y_axis), ptodist(l->midspace, g->x_axis)); if (l->type == 'u') { spaces(nsp); printf("defaults"); show_label(l->l, nsp+2, g); } } show_graph(g, nsp) Graph g; int nsp; { Curve c; String s; spaces(nsp); printf("x_translate %f y_translate %f\n", ptoin(g->x_translate), ptoin(g->y_translate)); spaces(nsp); printf("xaxis\n"); show_axis(g->x_axis, nsp+2, g); spaces(nsp); printf("yaxis\n"); show_axis(g->y_axis, nsp+2, g); spaces(nsp); if(!g->clip) printf("no"); printf("clip "); if(!g->border) printf("no"); printf("border\n"); for (c = first(g->curves); c != nil(g->curves); c = next(c)) { spaces(nsp); printf("curve %d\n", c->num); show_curve(c, nsp+2, g); } spaces(nsp); printf("legend\n"); show_legend(g->legend, nsp+2, g); if (g->title->label != CNULL) { spaces(nsp); printf("title\n"); show_label(g->title, nsp+2, g); } for (s = first(g->strings); s != nil(g->strings); s = next(s)) { spaces(nsp); printf("string %d\n", s->num); show_label(s->s, nsp+2, g); } } show_graphs(gs) Graphs gs; { Graphs the_g; Graph g; char started; int i; started = 0; for (the_g = first(gs); the_g != nil(gs); the_g = next(the_g)) { if (started) printf("\nnewpage\n"); started = 1; printf("X %f Y %f\n", ptoin(the_g->width), ptoin(the_g->height)); if (the_g->preamble != CNULL) { printf("preamble "); if (!the_g->prefile) printf(": "); show_mltiline(the_g->preamble); } if (the_g->epilogue != CNULL) { printf("epilogue "); if (!the_g->epifile) printf(": "); show_mltiline(the_g->epilogue); } printf("bbox"); for (i = 0; i < 4; i++) printf(" %d", the_g->bb[i]); printf("\n"); for (g = first(the_g->g); g != nil(the_g->g); g = next(g)) { printf("graph %d\n", g->num); show_graph(g, 2); } } } jgraph-83.orig/sin.c100664 1750 50 217 6273276354 13007 0ustar osirissrc#include main() { double x; for (x = -10.0; x < 10.0; x += .03) printf("%f %f\n", x, sin(x)); } jgraph-83.orig/sin.jgr100664 1750 50 1013 6273276354 13362 0ustar osirissrc(* This is a file to draw sin(i) for i going from -10 to 10. The actual * points were created by a c program which is included below. *) newgraph yaxis min -1 max 1 label : sin(i) xaxis min -10 max 10 label : i (* Plot the sin curve *) curve 1 marktype none linetype solid pts shell : ./sin (* sin is the executable of the following c program: #include main(); { double x; for (x = -10.0; x < 10.0; x += .03) printf("%f %f\n", x, sin(x)); } *) jgraph-83.orig/sin.pts100664 1750 50 30601 6273276354 13433 0ustar osirissrc-10.000000 0.544021 -9.970000 0.518608 -9.940000 0.492728 -9.910000 0.466405 -9.880000 0.439662 -9.850000 0.412523 -9.820000 0.385013 -9.790000 0.357157 -9.760000 0.328979 -9.730000 0.300505 -9.700000 0.271761 -9.670000 0.242772 -9.640000 0.213564 -9.610000 0.184165 -9.580000 0.154599 -9.550000 0.124895 -9.520000 0.095078 -9.490000 0.065176 -9.460000 0.035215 -9.430000 0.005222 -9.400000 -0.024775 -9.370000 -0.054751 -9.340000 -0.084676 -9.310000 -0.114526 -9.280000 -0.144273 -9.250000 -0.173889 -9.220000 -0.203350 -9.190000 -0.232627 -9.160000 -0.261695 -9.130000 -0.290527 -9.100000 -0.319098 -9.070000 -0.347382 -9.040000 -0.375353 -9.010000 -0.402987 -8.980000 -0.430257 -8.950000 -0.457141 -8.920000 -0.483613 -8.890000 -0.509650 -8.860000 -0.535228 -8.830000 -0.560325 -8.800000 -0.584917 -8.770000 -0.608983 -8.740000 -0.632501 -8.710000 -0.655450 -8.680000 -0.677809 -8.650000 -0.699557 -8.620000 -0.720677 -8.590000 -0.741147 -8.560000 -0.760951 -8.530000 -0.780070 -8.500000 -0.798487 -8.470000 -0.816185 -8.440000 -0.833149 -8.410000 -0.849363 -8.380000 -0.864813 -8.350000 -0.879484 -8.320000 -0.893364 -8.290000 -0.906440 -8.260000 -0.918701 -8.230000 -0.930134 -8.200000 -0.940731 -8.170000 -0.950480 -8.140000 -0.959375 -8.110000 -0.967406 -8.080000 -0.974566 -8.050000 -0.980850 -8.020000 -0.986251 -7.990000 -0.990764 -7.960000 -0.994385 -7.930000 -0.997112 -7.900000 -0.998941 -7.870000 -0.999872 -7.840000 -0.999902 -7.810000 -0.999033 -7.780000 -0.997265 -7.750000 -0.994599 -7.720000 -0.991038 -7.690000 -0.986585 -7.660000 -0.981244 -7.630000 -0.975021 -7.600000 -0.967920 -7.570000 -0.959947 -7.540000 -0.951111 -7.510000 -0.941419 -7.480000 -0.930880 -7.450000 -0.919503 -7.420000 -0.907299 -7.390000 -0.894278 -7.360000 -0.880452 -7.330000 -0.865834 -7.300000 -0.850437 -7.270000 -0.834274 -7.240000 -0.817361 -7.210000 -0.799712 -7.180000 -0.781343 -7.150000 -0.762271 -7.120000 -0.742513 -7.090000 -0.722087 -7.060000 -0.701011 -7.030000 -0.679305 -7.000000 -0.656987 -6.970000 -0.634077 -6.940000 -0.610597 -6.910000 -0.586568 -6.880000 -0.562011 -6.850000 -0.536948 -6.820000 -0.511401 -6.790000 -0.485395 -6.760000 -0.458951 -6.730000 -0.432095 -6.700000 -0.404850 -6.670000 -0.377240 -6.640000 -0.349291 -6.610000 -0.321028 -6.580000 -0.292476 -6.550000 -0.263660 -6.520000 -0.234607 -6.490000 -0.205344 -6.460000 -0.175895 -6.430000 -0.146288 -6.400000 -0.116549 -6.370000 -0.086706 -6.340000 -0.056784 -6.310000 -0.026811 -6.280000 0.003185 -6.250000 0.033179 -6.220000 0.063143 -6.190000 0.093051 -6.160000 0.122874 -6.130000 0.152587 -6.100000 0.182163 -6.070000 0.211574 -6.040000 0.240795 -6.010000 0.269800 -5.980000 0.298562 -5.950000 0.327055 -5.920000 0.355254 -5.890000 0.383133 -5.860000 0.410667 -5.830000 0.437832 -5.800000 0.464602 -5.770000 0.490955 -5.740000 0.516865 -5.710000 0.542311 -5.680000 0.567269 -5.650000 0.591716 -5.620000 0.615630 -5.590000 0.638991 -5.560000 0.661776 -5.530000 0.683966 -5.500000 0.705540 -5.470000 0.726480 -5.440000 0.746765 -5.410000 0.766379 -5.380000 0.785303 -5.350000 0.803520 -5.320000 0.821014 -5.290000 0.837769 -5.260000 0.853771 -5.230000 0.869004 -5.200000 0.883455 -5.170000 0.897111 -5.140000 0.909959 -5.110000 0.921989 -5.080000 0.933189 -5.050000 0.943549 -5.020000 0.953060 -4.990000 0.961713 -4.960000 0.969501 -4.930000 0.976416 -4.900000 0.982453 -4.870000 0.987605 -4.840000 0.991869 -4.810000 0.995240 -4.780000 0.997715 -4.750000 0.999293 -4.720000 0.999971 -4.690000 0.999749 -4.660000 0.998628 -4.630000 0.996608 -4.600000 0.993691 -4.570000 0.989880 -4.540000 0.985178 -4.510000 0.979589 -4.480000 0.973119 -4.450000 0.965773 -4.420000 0.957558 -4.390000 0.948481 -4.360000 0.938551 -4.330000 0.927776 -4.300000 0.916166 -4.270000 0.903732 -4.240000 0.890484 -4.210000 0.876435 -4.180000 0.861597 -4.150000 0.845984 -4.120000 0.829609 -4.090000 0.812488 -4.060000 0.794636 -4.030000 0.776068 -4.000000 0.756802 -3.970000 0.736856 -3.940000 0.716246 -3.910000 0.694991 -3.880000 0.673111 -3.850000 0.650625 -3.820000 0.627554 -3.790000 0.603918 -3.760000 0.579738 -3.730000 0.555037 -3.700000 0.529836 -3.670000 0.504159 -3.640000 0.478027 -3.610000 0.451466 -3.580000 0.424498 -3.550000 0.397148 -3.520000 0.369441 -3.490000 0.341401 -3.460000 0.313054 -3.430000 0.284426 -3.400000 0.255541 -3.370000 0.226427 -3.340000 0.197108 -3.310000 0.167612 -3.280000 0.137966 -3.250000 0.108195 -3.220000 0.078327 -3.190000 0.048388 -3.160000 0.018406 -3.130000 -0.011592 -3.100000 -0.041581 -3.070000 -0.071532 -3.040000 -0.101418 -3.010000 -0.131213 -2.980000 -0.160890 -2.950000 -0.190423 -2.920000 -0.219784 -2.890000 -0.248947 -2.860000 -0.277886 -2.830000 -0.306575 -2.800000 -0.334988 -2.770000 -0.363100 -2.740000 -0.390885 -2.710000 -0.418318 -2.680000 -0.445375 -2.650000 -0.472031 -2.620000 -0.498262 -2.590000 -0.524044 -2.560000 -0.549355 -2.530000 -0.574172 -2.500000 -0.598472 -2.470000 -0.622234 -2.440000 -0.645435 -2.410000 -0.668056 -2.380000 -0.690075 -2.350000 -0.711473 -2.320000 -0.732231 -2.290000 -0.752331 -2.260000 -0.771753 -2.230000 -0.790480 -2.200000 -0.808496 -2.170000 -0.825785 -2.140000 -0.842330 -2.110000 -0.858118 -2.080000 -0.873133 -2.050000 -0.887362 -2.020000 -0.900793 -1.990000 -0.913413 -1.960000 -0.925212 -1.930000 -0.936177 -1.900000 -0.946300 -1.870000 -0.955572 -1.840000 -0.963983 -1.810000 -0.971527 -1.780000 -0.978197 -1.750000 -0.983986 -1.720000 -0.988890 -1.690000 -0.992904 -1.660000 -0.996024 -1.630000 -0.998248 -1.600000 -0.999574 -1.570000 -1.000000 -1.540000 -0.999526 -1.510000 -0.998152 -1.480000 -0.995881 -1.450000 -0.992713 -1.420000 -0.988652 -1.390000 -0.983701 -1.360000 -0.977865 -1.330000 -0.971148 -1.300000 -0.963558 -1.270000 -0.955101 -1.240000 -0.945784 -1.210000 -0.935616 -1.180000 -0.924606 -1.150000 -0.912764 -1.120000 -0.900100 -1.090000 -0.886627 -1.060000 -0.872355 -1.030000 -0.857299 -1.000000 -0.841471 -0.970000 -0.824886 -0.940000 -0.807558 -0.910000 -0.789504 -0.880000 -0.770739 -0.850000 -0.751280 -0.820000 -0.731146 -0.790000 -0.710353 -0.760000 -0.688921 -0.730000 -0.666870 -0.700000 -0.644218 -0.670000 -0.620986 -0.640000 -0.597195 -0.610000 -0.572867 -0.580000 -0.548024 -0.550000 -0.522687 -0.520000 -0.496880 -0.490000 -0.470626 -0.460000 -0.443948 -0.430000 -0.416871 -0.400000 -0.389418 -0.370000 -0.361615 -0.340000 -0.333487 -0.310000 -0.305059 -0.280000 -0.276356 -0.250000 -0.247404 -0.220000 -0.218230 -0.190000 -0.188859 -0.160000 -0.159318 -0.130000 -0.129634 -0.100000 -0.099833 -0.070000 -0.069943 -0.040000 -0.039989 -0.010000 -0.010000 0.020000 0.019999 0.050000 0.049979 0.080000 0.079915 0.110000 0.109778 0.140000 0.139543 0.170000 0.169182 0.200000 0.198669 0.230000 0.227978 0.260000 0.257081 0.290000 0.285952 0.320000 0.314567 0.350000 0.342898 0.380000 0.370920 0.410000 0.398609 0.440000 0.425939 0.470000 0.452886 0.500000 0.479426 0.530000 0.505533 0.560000 0.531186 0.590000 0.556361 0.620000 0.581035 0.650000 0.605186 0.680000 0.628793 0.710000 0.651834 0.740000 0.674288 0.770000 0.696135 0.800000 0.717356 0.830000 0.737931 0.860000 0.757843 0.890000 0.777072 0.920000 0.795602 0.950000 0.813416 0.980000 0.830497 1.010000 0.846832 1.040000 0.862404 1.070000 0.877201 1.100000 0.891207 1.130000 0.904412 1.160000 0.916803 1.190000 0.928369 1.220000 0.939099 1.250000 0.948985 1.280000 0.958016 1.310000 0.966185 1.340000 0.973485 1.370000 0.979908 1.400000 0.985450 1.430000 0.990105 1.460000 0.993868 1.490000 0.996738 1.520000 0.998710 1.550000 0.999784 1.580000 0.999958 1.610000 0.999232 1.640000 0.997606 1.670000 0.995083 1.700000 0.991665 1.730000 0.987354 1.760000 0.982154 1.790000 0.976071 1.820000 0.969109 1.850000 0.961275 1.880000 0.952576 1.910000 0.943020 1.940000 0.932615 1.970000 0.921371 2.000000 0.909297 2.030000 0.896406 2.060000 0.882707 2.090000 0.868215 2.120000 0.852940 2.150000 0.836899 2.180000 0.820104 2.210000 0.802571 2.240000 0.784316 2.270000 0.765355 2.300000 0.745705 2.330000 0.725384 2.360000 0.704411 2.390000 0.682803 2.420000 0.660581 2.450000 0.637765 2.480000 0.614374 2.510000 0.590431 2.540000 0.565956 2.570000 0.540972 2.600000 0.515501 2.630000 0.489567 2.660000 0.463191 2.690000 0.436399 2.720000 0.409214 2.750000 0.381661 2.780000 0.353764 2.810000 0.325549 2.840000 0.297041 2.870000 0.268266 2.900000 0.239249 2.930000 0.210017 2.960000 0.180596 2.990000 0.151013 3.020000 0.121293 3.050000 0.091465 3.080000 0.061554 3.110000 0.031587 3.140000 0.001593 3.170000 -0.028404 3.200000 -0.058374 3.230000 -0.088292 3.260000 -0.118131 3.290000 -0.147863 3.320000 -0.177462 3.350000 -0.206902 3.380000 -0.236155 3.410000 -0.265196 3.440000 -0.293998 3.470000 -0.322536 3.500000 -0.350783 3.530000 -0.378715 3.560000 -0.406306 3.590000 -0.433531 3.620000 -0.460366 3.650000 -0.486787 3.680000 -0.512769 3.710000 -0.538291 3.740000 -0.563327 3.770000 -0.587857 3.800000 -0.611858 3.830000 -0.635308 3.860000 -0.658186 3.890000 -0.680473 3.920000 -0.702146 3.950000 -0.723188 3.980000 -0.743579 4.010000 -0.763301 4.040000 -0.782336 4.070000 -0.800667 4.100000 -0.818277 4.130000 -0.835151 4.160000 -0.851273 4.190000 -0.866630 4.220000 -0.881206 4.250000 -0.894989 4.280000 -0.907967 4.310000 -0.920128 4.340000 -0.931461 4.370000 -0.941955 4.400000 -0.951602 4.430000 -0.960392 4.460000 -0.968319 4.490000 -0.975373 4.520000 -0.981550 4.550000 -0.986844 4.580000 -0.991249 4.610000 -0.994763 4.640000 -0.997381 4.670000 -0.999102 4.700000 -0.999923 4.730000 -0.999845 4.760000 -0.998867 4.790000 -0.996990 4.820000 -0.994216 4.850000 -0.990547 4.880000 -0.985986 4.910000 -0.980538 4.940000 -0.974208 4.970000 -0.967001 5.000000 -0.958924 5.030000 -0.949984 5.060000 -0.940189 5.090000 -0.929548 5.120000 -0.918070 5.150000 -0.905767 5.180000 -0.892648 5.210000 -0.878725 5.240000 -0.864012 5.270000 -0.848522 5.300000 -0.832267 5.330000 -0.815264 5.360000 -0.797527 5.390000 -0.779073 5.420000 -0.759917 5.450000 -0.740077 5.480000 -0.719572 5.510000 -0.698418 5.540000 -0.676637 5.570000 -0.654246 5.600000 -0.631267 5.630000 -0.607719 5.660000 -0.583625 5.690000 -0.559005 5.720000 -0.533882 5.750000 -0.508279 5.780000 -0.482218 5.810000 -0.455724 5.840000 -0.428819 5.870000 -0.401529 5.900000 -0.373877 5.930000 -0.345888 5.960000 -0.317589 5.990000 -0.289003 6.020000 -0.260157 6.050000 -0.231078 6.080000 -0.201790 6.110000 -0.172321 6.140000 -0.142697 6.170000 -0.112944 6.200000 -0.083089 6.230000 -0.053160 6.260000 -0.023183 6.290000 0.006815 6.320000 0.036806 6.350000 0.066765 6.380000 0.096664 6.410000 0.126475 6.440000 0.156173 6.470000 0.185730 6.500000 0.215120 6.530000 0.244316 6.560000 0.273293 6.590000 0.302024 6.620000 0.330482 6.650000 0.358644 6.680000 0.386483 6.710000 0.413973 6.740000 0.441092 6.770000 0.467813 6.800000 0.494113 6.830000 0.519969 6.860000 0.545357 6.890000 0.570254 6.920000 0.594637 6.950000 0.618486 6.980000 0.641778 7.010000 0.664493 7.040000 0.686609 7.070000 0.708108 7.100000 0.728969 7.130000 0.749174 7.160000 0.768705 7.190000 0.787545 7.220000 0.805675 7.250000 0.823081 7.280000 0.839746 7.310000 0.855655 7.340000 0.870794 7.370000 0.885149 7.400000 0.898708 7.430000 0.911458 7.460000 0.923388 7.490000 0.934487 7.520000 0.944745 7.550000 0.954152 7.580000 0.962701 7.610000 0.970384 7.640000 0.977193 7.670000 0.983123 7.700000 0.988168 7.730000 0.992324 7.760000 0.995587 7.790000 0.997954 7.820000 0.999423 7.850000 0.999992 7.880000 0.999662 7.910000 0.998431 7.940000 0.996303 7.970000 0.993277 8.000000 0.989358 8.030000 0.984549 8.060000 0.978853 8.090000 0.972277 8.120000 0.964825 8.150000 0.956506 8.180000 0.947325 8.210000 0.937292 8.240000 0.926415 8.270000 0.914705 8.300000 0.902172 8.330000 0.888827 8.360000 0.874681 8.390000 0.859749 8.420000 0.844043 8.450000 0.827577 8.480000 0.810367 8.510000 0.792427 8.540000 0.773774 8.570000 0.754425 8.600000 0.734397 8.630000 0.713708 8.660000 0.692377 8.690000 0.670422 8.720000 0.647865 8.750000 0.624724 8.780000 0.601021 8.810000 0.576777 8.840000 0.552014 8.870000 0.526755 8.900000 0.501021 8.930000 0.474836 8.960000 0.448224 8.990000 0.421209 9.020000 0.393815 9.050000 0.366066 9.080000 0.337988 9.110000 0.309605 9.140000 0.280944 9.170000 0.252031 9.200000 0.222890 9.230000 0.193549 9.260000 0.164033 9.290000 0.134370 9.320000 0.104586 9.350000 0.074708 9.380000 0.044763 9.410000 0.014777 9.440000 -0.015221 9.470000 -0.045207 9.500000 -0.075151 9.530000 -0.105028 9.560000 -0.134810 9.590000 -0.164471 9.620000 -0.193984 9.650000 -0.223323 9.680000 -0.252460 9.710000 -0.281371 9.740000 -0.310028 9.770000 -0.338406 9.800000 -0.366479 9.830000 -0.394223 9.860000 -0.421612 9.890000 -0.448621 9.920000 -0.475227 9.950000 -0.501405 9.980000 -0.527132 jgraph-83.orig/sin1.jgr100664 1750 50 2155 6273276354 13453 0ustar osirissrc(* This is an extension of sin.jgr only this time, the axes are at x = 0 and y = 0. The hash labels are printed at the left and bottom. *) newgraph yaxis min -1 max 1 label : sin(i) no_draw_hash_marks no_draw_axis_line xaxis min -10 max 10 label : i no_draw_hash_marks no_draw_axis_line (* Plot the sin curve *) curve 1 marktype none linetype solid pts include sin.pts (* sin.pts was created by the following c program: #include main(); { double x; for (x = -10.0; x < 10.0; x += .03) printf("%f %f\n", x, sin(x)); } *) (* Now, create a new graph with the same dimensions, but with the * x & y axes in a different place, and with no axis or hash labels. * Also, make the hash marks smaller. *) newgraph inherit_axes xaxis draw draw_at 0 hash_scale -.5 no_draw_hash_labels no_draw_axis_label yaxis draw draw_at 0 hash_scale -.5 no_draw_hash_labels no_draw_axis_label (* Finally, we want the hash marks to be centered around the axes, * so draw them again with a scaling of +5. *) newgraph inherit_axes xaxis hash_scale .5 yaxis hash_scale .5 jgraph-83.orig/sin2.c100664 1750 50 216 6273276354 13070 0ustar osirissrc#include main() { double x; for (x = 0.1; x < 100.0; x += .03) printf("%f %f\n", x, sin(x)); } jgraph-83.orig/sin2.jgr100664 1750 50 725 6273276354 13435 0ustar osirissrc(* Now this is a sin wave from 0.1 to 100 with logarithmic axes *) newgraph yaxis min -1 max 1 label : sin(i) xaxis log label : i title : I vs sin(i); (* Plot the sin curve *) curve 1 marktype none linetype solid pts include sin2.pts (* sin2.pts was created by the following c program: #include main(); { double x; for (x = 0.1; x < 100.0; x += .03) printf("%f %f\n", x, sin(x)); } *) jgraph-83.orig/sin2.pts100664 1750 50 176125 6273276355 13552 0ustar osirissrc0.100000 0.099833 0.130000 0.129634 0.160000 0.159318 0.190000 0.188859 0.220000 0.218230 0.250000 0.247404 0.280000 0.276356 0.310000 0.305059 0.340000 0.333487 0.370000 0.361615 0.400000 0.389418 0.430000 0.416871 0.460000 0.443948 0.490000 0.470626 0.520000 0.496880 0.550000 0.522687 0.580000 0.548024 0.610000 0.572867 0.640000 0.597195 0.670000 0.620986 0.700000 0.644218 0.730000 0.666870 0.760000 0.688921 0.790000 0.710353 0.820000 0.731146 0.850000 0.751280 0.880000 0.770739 0.910000 0.789504 0.940000 0.807558 0.970000 0.824886 1.000000 0.841471 1.030000 0.857299 1.060000 0.872355 1.090000 0.886627 1.120000 0.900100 1.150000 0.912764 1.180000 0.924606 1.210000 0.935616 1.240000 0.945784 1.270000 0.955101 1.300000 0.963558 1.330000 0.971148 1.360000 0.977865 1.390000 0.983701 1.420000 0.988652 1.450000 0.992713 1.480000 0.995881 1.510000 0.998152 1.540000 0.999526 1.570000 1.000000 1.600000 0.999574 1.630000 0.998248 1.660000 0.996024 1.690000 0.992904 1.720000 0.988890 1.750000 0.983986 1.780000 0.978197 1.810000 0.971527 1.840000 0.963983 1.870000 0.955572 1.900000 0.946300 1.930000 0.936177 1.960000 0.925212 1.990000 0.913413 2.020000 0.900793 2.050000 0.887362 2.080000 0.873133 2.110000 0.858118 2.140000 0.842330 2.170000 0.825785 2.200000 0.808496 2.230000 0.790480 2.260000 0.771753 2.290000 0.752331 2.320000 0.732231 2.350000 0.711473 2.380000 0.690075 2.410000 0.668056 2.440000 0.645435 2.470000 0.622234 2.500000 0.598472 2.530000 0.574172 2.560000 0.549355 2.590000 0.524044 2.620000 0.498262 2.650000 0.472031 2.680000 0.445375 2.710000 0.418318 2.740000 0.390885 2.770000 0.363100 2.800000 0.334988 2.830000 0.306575 2.860000 0.277886 2.890000 0.248947 2.920000 0.219784 2.950000 0.190423 2.980000 0.160890 3.010000 0.131213 3.040000 0.101418 3.070000 0.071532 3.100000 0.041581 3.130000 0.011592 3.160000 -0.018406 3.190000 -0.048388 3.220000 -0.078327 3.250000 -0.108195 3.280000 -0.137966 3.310000 -0.167612 3.340000 -0.197108 3.370000 -0.226427 3.400000 -0.255541 3.430000 -0.284426 3.460000 -0.313054 3.490000 -0.341401 3.520000 -0.369441 3.550000 -0.397148 3.580000 -0.424498 3.610000 -0.451466 3.640000 -0.478027 3.670000 -0.504159 3.700000 -0.529836 3.730000 -0.555037 3.760000 -0.579738 3.790000 -0.603918 3.820000 -0.627554 3.850000 -0.650625 3.880000 -0.673111 3.910000 -0.694991 3.940000 -0.716246 3.970000 -0.736856 4.000000 -0.756802 4.030000 -0.776068 4.060000 -0.794636 4.090000 -0.812488 4.120000 -0.829609 4.150000 -0.845984 4.180000 -0.861597 4.210000 -0.876435 4.240000 -0.890484 4.270000 -0.903732 4.300000 -0.916166 4.330000 -0.927776 4.360000 -0.938551 4.390000 -0.948481 4.420000 -0.957558 4.450000 -0.965773 4.480000 -0.973119 4.510000 -0.979589 4.540000 -0.985178 4.570000 -0.989880 4.600000 -0.993691 4.630000 -0.996608 4.660000 -0.998628 4.690000 -0.999749 4.720000 -0.999971 4.750000 -0.999293 4.780000 -0.997715 4.810000 -0.995240 4.840000 -0.991869 4.870000 -0.987605 4.900000 -0.982453 4.930000 -0.976416 4.960000 -0.969501 4.990000 -0.961713 5.020000 -0.953060 5.050000 -0.943549 5.080000 -0.933189 5.110000 -0.921989 5.140000 -0.909959 5.170000 -0.897111 5.200000 -0.883455 5.230000 -0.869004 5.260000 -0.853771 5.290000 -0.837769 5.320000 -0.821014 5.350000 -0.803520 5.380000 -0.785303 5.410000 -0.766379 5.440000 -0.746765 5.470000 -0.726480 5.500000 -0.705540 5.530000 -0.683966 5.560000 -0.661776 5.590000 -0.638991 5.620000 -0.615630 5.650000 -0.591716 5.680000 -0.567269 5.710000 -0.542311 5.740000 -0.516865 5.770000 -0.490955 5.800000 -0.464602 5.830000 -0.437832 5.860000 -0.410667 5.890000 -0.383133 5.920000 -0.355254 5.950000 -0.327055 5.980000 -0.298562 6.010000 -0.269800 6.040000 -0.240795 6.070000 -0.211574 6.100000 -0.182163 6.130000 -0.152587 6.160000 -0.122874 6.190000 -0.093051 6.220000 -0.063143 6.250000 -0.033179 6.280000 -0.003185 6.310000 0.026811 6.340000 0.056784 6.370000 0.086706 6.400000 0.116549 6.430000 0.146288 6.460000 0.175895 6.490000 0.205344 6.520000 0.234607 6.550000 0.263660 6.580000 0.292476 6.610000 0.321028 6.640000 0.349291 6.670000 0.377240 6.700000 0.404850 6.730000 0.432095 6.760000 0.458951 6.790000 0.485395 6.820000 0.511401 6.850000 0.536948 6.880000 0.562011 6.910000 0.586568 6.940000 0.610597 6.970000 0.634077 7.000000 0.656987 7.030000 0.679305 7.060000 0.701011 7.090000 0.722087 7.120000 0.742513 7.150000 0.762271 7.180000 0.781343 7.210000 0.799712 7.240000 0.817361 7.270000 0.834274 7.300000 0.850437 7.330000 0.865834 7.360000 0.880452 7.390000 0.894278 7.420000 0.907299 7.450000 0.919503 7.480000 0.930880 7.510000 0.941419 7.540000 0.951111 7.570000 0.959947 7.600000 0.967920 7.630000 0.975021 7.660000 0.981244 7.690000 0.986585 7.720000 0.991038 7.750000 0.994599 7.780000 0.997265 7.810000 0.999033 7.840000 0.999902 7.870000 0.999872 7.900000 0.998941 7.930000 0.997112 7.960000 0.994385 7.990000 0.990764 8.020000 0.986251 8.050000 0.980850 8.080000 0.974566 8.110000 0.967406 8.140000 0.959375 8.170000 0.950480 8.200000 0.940731 8.230000 0.930134 8.260000 0.918701 8.290000 0.906440 8.320000 0.893364 8.350000 0.879484 8.380000 0.864813 8.410000 0.849363 8.440000 0.833149 8.470000 0.816185 8.500000 0.798487 8.530000 0.780070 8.560000 0.760951 8.590000 0.741147 8.620000 0.720677 8.650000 0.699557 8.680000 0.677809 8.710000 0.655450 8.740000 0.632501 8.770000 0.608983 8.800000 0.584917 8.830000 0.560325 8.860000 0.535228 8.890000 0.509650 8.920000 0.483613 8.950000 0.457141 8.980000 0.430257 9.010000 0.402987 9.040000 0.375353 9.070000 0.347382 9.100000 0.319098 9.130000 0.290527 9.160000 0.261695 9.190000 0.232627 9.220000 0.203350 9.250000 0.173889 9.280000 0.144273 9.310000 0.114526 9.340000 0.084676 9.370000 0.054751 9.400000 0.024775 9.430000 -0.005222 9.460000 -0.035215 9.490000 -0.065176 9.520000 -0.095078 9.550000 -0.124895 9.580000 -0.154599 9.610000 -0.184165 9.640000 -0.213564 9.670000 -0.242772 9.700000 -0.271761 9.730000 -0.300505 9.760000 -0.328979 9.790000 -0.357157 9.820000 -0.385013 9.850000 -0.412523 9.880000 -0.439662 9.910000 -0.466405 9.940000 -0.492728 9.970000 -0.518608 10.000000 -0.544021 10.030000 -0.568945 10.060000 -0.593356 10.090000 -0.617234 10.120000 -0.640556 10.150000 -0.663302 10.180000 -0.685450 10.210000 -0.706982 10.240000 -0.727878 10.270000 -0.748118 10.300000 -0.767686 10.330000 -0.786562 10.360000 -0.804731 10.390000 -0.822175 10.420000 -0.838880 10.450000 -0.854829 10.480000 -0.870010 10.510000 -0.884407 10.540000 -0.898009 10.570000 -0.910802 10.600000 -0.922775 10.630000 -0.933919 10.660000 -0.944221 10.690000 -0.953674 10.720000 -0.962269 10.750000 -0.969998 10.780000 -0.976854 10.810000 -0.982830 10.840000 -0.987923 10.870000 -0.992126 10.900000 -0.995436 10.930000 -0.997851 10.960000 -0.999367 10.990000 -0.999984 11.020000 -0.999702 11.050000 -0.998519 11.080000 -0.996438 11.110000 -0.993461 11.140000 -0.989589 11.170000 -0.984826 11.200000 -0.979178 11.230000 -0.972648 11.260000 -0.965243 11.290000 -0.956969 11.320000 -0.947834 11.350000 -0.937846 11.380000 -0.927014 11.410000 -0.915348 11.440000 -0.902858 11.470000 -0.889555 11.500000 -0.875452 11.530000 -0.860561 11.560000 -0.844896 11.590000 -0.828470 11.620000 -0.811299 11.650000 -0.793398 11.680000 -0.774782 11.710000 -0.755470 11.740000 -0.735477 11.770000 -0.714823 11.800000 -0.693525 11.830000 -0.671603 11.860000 -0.649077 11.890000 -0.625967 11.920000 -0.602293 11.950000 -0.578077 11.980000 -0.553342 12.010000 -0.528108 12.040000 -0.502399 12.070000 -0.476237 12.100000 -0.449647 12.130000 -0.422653 12.160000 -0.395278 12.190000 -0.367548 12.220000 -0.339486 12.250000 -0.311119 12.280000 -0.282473 12.310000 -0.253571 12.340000 -0.224442 12.370000 -0.195111 12.400000 -0.165604 12.430000 -0.135948 12.460000 -0.106170 12.490000 -0.076296 12.520000 -0.046354 12.550000 -0.016370 12.580000 0.013629 12.610000 0.043616 12.640000 0.073563 12.670000 0.103444 12.700000 0.133232 12.730000 0.162900 12.760000 0.192422 12.790000 0.221770 12.820000 0.250919 12.850000 0.279842 12.880000 0.308513 12.910000 0.336907 12.940000 0.364997 12.970000 0.392759 13.000000 0.420167 13.030000 0.447197 13.060000 0.473825 13.090000 0.500027 13.120000 0.525778 13.150000 0.551056 13.180000 0.575838 13.210000 0.600103 13.240000 0.623827 13.270000 0.646989 13.300000 0.669570 13.330000 0.691548 13.360000 0.712903 13.390000 0.733617 13.420000 0.753671 13.450000 0.773046 13.480000 0.791726 13.510000 0.809693 13.540000 0.826932 13.570000 0.843426 13.600000 0.859162 13.630000 0.874124 13.660000 0.888300 13.690000 0.901676 13.720000 0.914240 13.750000 0.925982 13.780000 0.936891 13.810000 0.946957 13.840000 0.956170 13.870000 0.964523 13.900000 0.972008 13.930000 0.978618 13.960000 0.984347 13.990000 0.989190 14.020000 0.993144 14.050000 0.996203 14.080000 0.998366 14.110000 0.999631 14.140000 0.999996 14.170000 0.999461 14.200000 0.998027 14.230000 0.995694 14.260000 0.992466 14.290000 0.988344 14.320000 0.983333 14.350000 0.977436 14.380000 0.970661 14.410000 0.963011 14.440000 0.954495 14.470000 0.945121 14.500000 0.934895 14.530000 0.923828 14.560000 0.911930 14.590000 0.899211 14.620000 0.885683 14.650000 0.871358 14.680000 0.856249 14.710000 0.840369 14.740000 0.823733 14.770000 0.806355 14.800000 0.788252 14.830000 0.769440 14.860000 0.749935 14.890000 0.729755 14.920000 0.708918 14.950000 0.687444 14.980000 0.665351 15.010000 0.642659 15.040000 0.619388 15.070000 0.595561 15.100000 0.571197 15.130000 0.546319 15.160000 0.520950 15.190000 0.495112 15.220000 0.468828 15.250000 0.442122 15.280000 0.415019 15.310000 0.387542 15.340000 0.359716 15.370000 0.331566 15.400000 0.303118 15.430000 0.274398 15.460000 0.245430 15.490000 0.216242 15.520000 0.186858 15.550000 0.157307 15.580000 0.127614 15.610000 0.097807 15.640000 0.067911 15.670000 0.037954 15.700000 0.007963 15.730000 -0.022035 15.760000 -0.052013 15.790000 -0.081945 15.820000 -0.111802 15.850000 -0.141560 15.880000 -0.171189 15.910000 -0.200665 15.940000 -0.229960 15.970000 -0.259048 16.000000 -0.287903 16.030000 -0.316499 16.060000 -0.344810 16.090000 -0.372811 16.120000 -0.400476 16.150000 -0.427781 16.180000 -0.454701 16.210000 -0.481212 16.240000 -0.507290 16.270000 -0.532911 16.300000 -0.558052 16.330000 -0.582692 16.360000 -0.606807 16.390000 -0.630375 16.420000 -0.653377 16.450000 -0.675791 16.480000 -0.697596 16.510000 -0.718774 16.540000 -0.739304 16.570000 -0.759170 16.600000 -0.778352 16.630000 -0.796834 16.660000 -0.814599 16.690000 -0.831630 16.720000 -0.847913 16.750000 -0.863433 16.780000 -0.878177 16.810000 -0.892129 16.840000 -0.905279 16.870000 -0.917615 16.900000 -0.929124 16.930000 -0.939797 16.960000 -0.949625 16.990000 -0.958598 17.020000 -0.966708 17.050000 -0.973948 17.080000 -0.980312 17.110000 -0.985794 17.140000 -0.990388 17.170000 -0.994092 17.200000 -0.996900 17.230000 -0.998811 17.260000 -0.999824 17.290000 -0.999937 17.320000 -0.999150 17.350000 -0.997463 17.380000 -0.994880 17.410000 -0.991400 17.440000 -0.987029 17.470000 -0.981769 17.500000 -0.975626 17.530000 -0.968605 17.560000 -0.960712 17.590000 -0.951954 17.620000 -0.942340 17.650000 -0.931878 17.680000 -0.920577 17.710000 -0.908448 17.740000 -0.895501 17.770000 -0.881748 17.800000 -0.867202 17.830000 -0.851876 17.860000 -0.835782 17.890000 -0.818937 17.920000 -0.801354 17.950000 -0.783051 17.980000 -0.764043 18.010000 -0.744347 18.040000 -0.723981 18.070000 -0.702964 18.100000 -0.681314 18.130000 -0.659051 18.160000 -0.636195 18.190000 -0.612766 18.220000 -0.588786 18.250000 -0.564276 18.280000 -0.539258 18.310000 -0.513755 18.340000 -0.487790 18.370000 -0.461385 18.400000 -0.434566 18.430000 -0.407355 18.460000 -0.379778 18.490000 -0.351859 18.520000 -0.323623 18.550000 -0.295096 18.580000 -0.266303 18.610000 -0.237271 18.640000 -0.208026 18.670000 -0.178593 18.700000 -0.148999 18.730000 -0.119271 18.760000 -0.089436 18.790000 -0.059521 18.820000 -0.029552 18.850000 0.000444 18.880000 0.030439 18.910000 0.060407 18.940000 0.090321 18.970000 0.120153 19.000000 0.149877 19.030000 0.179466 19.060000 0.208894 19.090000 0.238134 19.120000 0.267159 19.150000 0.295944 19.180000 0.324463 19.210000 0.352690 19.240000 0.380599 19.270000 0.408166 19.300000 0.435365 19.330000 0.462173 19.360000 0.488565 19.390000 0.514517 19.420000 0.540006 19.450000 0.565009 19.480000 0.589504 19.510000 0.613468 19.540000 0.636880 19.570000 0.659718 19.600000 0.681964 19.630000 0.703595 19.660000 0.724593 19.690000 0.744939 19.720000 0.764615 19.750000 0.783603 19.780000 0.801885 19.810000 0.819446 19.840000 0.836270 19.870000 0.852340 19.900000 0.867644 19.930000 0.882167 19.960000 0.895896 19.990000 0.908819 20.020000 0.920924 20.050000 0.932200 20.080000 0.942637 20.110000 0.952226 20.140000 0.960958 20.170000 0.968825 20.200000 0.975821 20.230000 0.981938 20.260000 0.987171 20.290000 0.991516 20.320000 0.994969 20.350000 0.997526 20.380000 0.999186 20.410000 0.999946 20.440000 0.999807 20.470000 0.998768 20.500000 0.996830 20.530000 0.993995 20.560000 0.990265 20.590000 0.985644 20.620000 0.980136 20.650000 0.973747 20.680000 0.966480 20.710000 0.958345 20.740000 0.949346 20.770000 0.939493 20.800000 0.928795 20.830000 0.917261 20.860000 0.904902 20.890000 0.891728 20.920000 0.877751 20.950000 0.862985 20.980000 0.847442 21.010000 0.831137 21.040000 0.814083 21.070000 0.796297 21.100000 0.777794 21.130000 0.758591 21.160000 0.738706 21.190000 0.718156 21.220000 0.696959 21.250000 0.675136 21.280000 0.652704 21.310000 0.629686 21.340000 0.606100 21.370000 0.581970 21.400000 0.557315 21.430000 0.532159 21.460000 0.506524 21.490000 0.480433 21.520000 0.453910 21.550000 0.426978 21.580000 0.399662 21.610000 0.371987 21.640000 0.343977 21.670000 0.315657 21.700000 0.287053 21.730000 0.258190 21.760000 0.229096 21.790000 0.199795 21.820000 0.170314 21.850000 0.140680 21.880000 0.110920 21.910000 0.081060 21.940000 0.051126 21.970000 0.021147 22.000000 -0.008851 22.030000 -0.038842 22.060000 -0.068797 22.090000 -0.098691 22.120000 -0.128495 22.150000 -0.158184 22.180000 -0.187731 22.210000 -0.217109 22.240000 -0.246291 22.270000 -0.275252 22.300000 -0.303965 22.330000 -0.332404 22.360000 -0.360544 22.390000 -0.388360 22.420000 -0.415827 22.450000 -0.442919 22.480000 -0.469612 22.510000 -0.495883 22.540000 -0.521708 22.570000 -0.547063 22.600000 -0.571926 22.630000 -0.596274 22.660000 -0.620085 22.690000 -0.643339 22.720000 -0.666013 22.750000 -0.688088 22.780000 -0.709544 22.810000 -0.730362 22.840000 -0.750522 22.870000 -0.770007 22.900000 -0.788798 22.930000 -0.806880 22.960000 -0.824236 22.990000 -0.840850 23.020000 -0.856707 23.050000 -0.871793 23.080000 -0.886095 23.110000 -0.899599 23.140000 -0.912294 23.170000 -0.924168 23.200000 -0.935210 23.230000 -0.945410 23.260000 -0.954760 23.290000 -0.963250 23.320000 -0.970874 23.350000 -0.977624 23.380000 -0.983494 23.410000 -0.988479 23.440000 -0.992574 23.470000 -0.995776 23.500000 -0.998082 23.530000 -0.999490 23.560000 -0.999998 23.590000 -0.999606 23.620000 -0.998315 23.650000 -0.996126 23.680000 -0.993040 23.710000 -0.989060 23.740000 -0.984190 23.770000 -0.978434 23.800000 -0.971798 23.830000 -0.964288 23.860000 -0.955909 23.890000 -0.946671 23.920000 -0.936580 23.950000 -0.925647 23.980000 -0.913880 24.010000 -0.901291 24.040000 -0.887891 24.070000 -0.873692 24.100000 -0.858707 24.130000 -0.842949 24.160000 -0.826432 24.190000 -0.809172 24.220000 -0.791183 24.250000 -0.772483 24.280000 -0.753087 24.310000 -0.733013 24.340000 -0.712280 24.370000 -0.690906 24.400000 -0.668910 24.430000 -0.646312 24.460000 -0.623132 24.490000 -0.599392 24.520000 -0.575112 24.550000 -0.550315 24.580000 -0.525022 24.610000 -0.499257 24.640000 -0.473043 24.670000 -0.446403 24.700000 -0.419361 24.730000 -0.391942 24.760000 -0.364170 24.790000 -0.336070 24.820000 -0.307668 24.850000 -0.278989 24.880000 -0.250059 24.910000 -0.220904 24.940000 -0.191550 24.970000 -0.162024 25.000000 -0.132352 25.030000 -0.102561 25.060000 -0.072677 25.090000 -0.042728 25.120000 -0.012741 25.150000 0.017258 25.180000 0.047241 25.210000 0.077182 25.240000 0.107053 25.270000 0.136828 25.300000 0.166480 25.330000 0.195982 25.360000 0.225308 25.390000 0.254430 25.420000 0.283324 25.450000 0.311963 25.480000 0.340321 25.510000 0.368373 25.540000 0.396094 25.570000 0.423458 25.600000 0.450441 25.630000 0.477018 25.660000 0.503166 25.690000 0.528862 25.720000 0.554081 25.750000 0.578802 25.780000 0.603002 25.810000 0.626659 25.840000 0.649752 25.870000 0.672261 25.900000 0.694165 25.930000 0.715444 25.960000 0.736079 25.990000 0.756051 26.020000 0.775343 26.050000 0.793938 26.080000 0.811818 26.110000 0.828967 26.140000 0.845371 26.170000 0.861013 26.200000 0.875881 26.230000 0.889961 26.260000 0.903239 26.290000 0.915705 26.320000 0.927347 26.350000 0.938154 26.380000 0.948117 26.410000 0.957226 26.440000 0.965474 26.470000 0.972854 26.500000 0.979358 26.530000 0.984980 26.560000 0.989716 26.590000 0.993562 26.620000 0.996513 26.650000 0.998567 26.680000 0.999723 26.710000 0.999979 26.740000 0.999335 26.770000 0.997792 26.800000 0.995351 26.830000 0.992014 26.860000 0.987785 26.890000 0.982666 26.920000 0.976663 26.950000 0.969782 26.980000 0.962027 27.010000 0.953407 27.040000 0.943928 27.070000 0.933601 27.100000 0.922433 27.130000 0.910435 27.160000 0.897617 27.190000 0.883992 27.220000 0.869571 27.250000 0.854368 27.280000 0.838396 27.310000 0.821669 27.340000 0.804203 27.370000 0.786014 27.400000 0.767116 27.430000 0.747529 27.460000 0.727269 27.490000 0.706354 27.520000 0.684803 27.550000 0.662637 27.580000 0.639874 27.610000 0.616535 27.640000 0.592641 27.670000 0.568214 27.700000 0.543276 27.730000 0.517848 27.760000 0.491955 27.790000 0.465619 27.820000 0.438864 27.850000 0.411714 27.880000 0.384193 27.910000 0.356327 27.940000 0.328140 27.970000 0.299658 28.000000 0.270906 28.030000 0.241910 28.060000 0.212697 28.090000 0.183292 28.120000 0.153722 28.150000 0.124014 28.180000 0.094194 28.210000 0.064290 28.240000 0.034327 28.270000 0.004334 28.300000 -0.025663 28.330000 -0.055637 28.360000 -0.085561 28.390000 -0.115408 28.420000 -0.145152 28.450000 -0.174764 28.480000 -0.204219 28.510000 -0.233491 28.540000 -0.262552 28.570000 -0.291377 28.600000 -0.319940 28.630000 -0.348215 28.660000 -0.376176 28.690000 -0.403799 28.720000 -0.431059 28.750000 -0.457931 28.780000 -0.484390 28.810000 -0.510414 28.840000 -0.535978 28.870000 -0.561060 28.900000 -0.585637 28.930000 -0.609687 28.960000 -0.633189 28.990000 -0.656120 29.020000 -0.678461 29.050000 -0.700192 29.080000 -0.721292 29.110000 -0.741743 29.140000 -0.761527 29.170000 -0.780626 29.200000 -0.799021 29.230000 -0.816698 29.260000 -0.833640 29.290000 -0.849832 29.320000 -0.865259 29.350000 -0.879907 29.380000 -0.893763 29.410000 -0.906815 29.440000 -0.919051 29.470000 -0.930460 29.500000 -0.941031 29.530000 -0.950756 29.560000 -0.959625 29.590000 -0.967630 29.620000 -0.974765 29.650000 -0.981022 29.680000 -0.986397 29.710000 -0.990884 29.740000 -0.994479 29.770000 -0.997179 29.800000 -0.998982 29.830000 -0.999886 29.860000 -0.999889 29.890000 -0.998994 29.920000 -0.997199 29.950000 -0.994506 29.980000 -0.990919 30.010000 -0.986440 30.040000 -0.981073 30.070000 -0.974823 30.100000 -0.967696 30.130000 -0.959698 30.160000 -0.950837 30.190000 -0.941119 30.220000 -0.930555 30.250000 -0.919154 30.280000 -0.906925 30.310000 -0.893880 30.340000 -0.880031 30.370000 -0.865389 30.400000 -0.849969 30.430000 -0.833784 30.460000 -0.816849 30.490000 -0.799178 30.520000 -0.780788 30.550000 -0.761696 30.580000 -0.741918 30.610000 -0.721473 30.640000 -0.700378 30.670000 -0.678653 30.700000 -0.656317 30.730000 -0.633390 30.760000 -0.609894 30.790000 -0.585848 30.820000 -0.561276 30.850000 -0.536198 30.880000 -0.510638 30.910000 -0.484618 30.940000 -0.458162 30.970000 -0.431294 31.000000 -0.404038 31.030000 -0.376418 31.060000 -0.348459 31.090000 -0.320187 31.120000 -0.291626 31.150000 -0.262803 31.180000 -0.233744 31.210000 -0.204474 31.240000 -0.175020 31.270000 -0.145409 31.300000 -0.115667 31.330000 -0.085821 31.360000 -0.055897 31.390000 -0.025924 31.420000 0.004073 31.450000 0.034067 31.480000 0.064030 31.510000 0.093935 31.540000 0.123755 31.570000 0.153465 31.600000 0.183036 31.630000 0.212442 31.660000 0.241657 31.690000 0.270655 31.720000 0.299409 31.750000 0.327894 31.780000 0.356084 31.810000 0.383953 31.840000 0.411476 31.870000 0.438630 31.900000 0.465388 31.930000 0.491728 31.960000 0.517626 31.990000 0.543057 32.020000 0.568000 32.050000 0.592431 32.080000 0.616330 32.110000 0.639674 32.140000 0.662442 32.170000 0.684614 32.200000 0.706169 32.230000 0.727090 32.260000 0.747356 32.290000 0.766949 32.320000 0.785853 32.350000 0.804049 32.380000 0.821521 32.410000 0.838254 32.440000 0.854233 32.470000 0.869443 32.500000 0.883870 32.530000 0.897503 32.560000 0.910327 32.590000 0.922332 32.620000 0.933507 32.650000 0.943842 32.680000 0.953328 32.710000 0.961956 32.740000 0.969718 32.770000 0.976607 32.800000 0.982618 32.830000 0.987744 32.860000 0.991981 32.890000 0.995326 32.920000 0.997775 32.950000 0.999326 32.980000 0.999977 33.010000 0.999729 33.040000 0.998581 33.070000 0.996534 33.100000 0.993591 33.130000 0.989753 33.160000 0.985025 33.190000 0.979410 33.220000 0.972914 33.250000 0.965542 33.280000 0.957302 33.310000 0.948199 33.340000 0.938244 33.370000 0.927444 33.400000 0.915810 33.430000 0.903351 33.460000 0.890079 33.490000 0.876007 33.520000 0.861146 33.550000 0.845510 33.580000 0.829113 33.610000 0.811970 33.640000 0.794096 33.670000 0.775508 33.700000 0.756222 33.730000 0.736255 33.760000 0.715625 33.790000 0.694352 33.820000 0.672454 33.850000 0.649950 33.880000 0.626862 33.910000 0.603210 33.940000 0.579014 33.970000 0.554298 34.000000 0.529083 34.030000 0.503391 34.060000 0.477247 34.090000 0.450673 34.120000 0.423694 34.150000 0.396333 34.180000 0.368615 34.210000 0.340566 34.240000 0.312211 34.270000 0.283574 34.300000 0.254682 34.330000 0.225561 34.360000 0.196237 34.390000 0.166737 34.420000 0.137086 34.450000 0.107312 34.480000 0.077442 34.510000 0.047501 34.540000 0.017518 34.570000 -0.012480 34.600000 -0.042468 34.630000 -0.072417 34.660000 -0.102302 34.690000 -0.132094 34.720000 -0.161767 34.750000 -0.191294 34.780000 -0.220650 34.810000 -0.249807 34.840000 -0.278739 34.870000 -0.307420 34.900000 -0.335825 34.930000 -0.363927 34.960000 -0.391702 34.990000 -0.419124 35.020000 -0.446170 35.050000 -0.472813 35.080000 -0.499032 35.110000 -0.524801 35.140000 -0.550097 35.170000 -0.574899 35.200000 -0.599183 35.230000 -0.622929 35.260000 -0.646113 35.290000 -0.668716 35.320000 -0.690718 35.350000 -0.712097 35.380000 -0.732836 35.410000 -0.752915 35.440000 -0.772317 35.470000 -0.791024 35.500000 -0.809019 35.530000 -0.826286 35.560000 -0.842809 35.590000 -0.858574 35.620000 -0.873566 35.650000 -0.887772 35.680000 -0.901179 35.710000 -0.913775 35.740000 -0.925548 35.770000 -0.936489 35.800000 -0.946587 35.830000 -0.955833 35.860000 -0.964219 35.890000 -0.971737 35.920000 -0.978381 35.950000 -0.984144 35.980000 -0.989021 36.010000 -0.993009 36.040000 -0.996103 36.070000 -0.998300 36.100000 -0.999599 36.130000 -0.999999 36.160000 -0.999498 36.190000 -0.998098 36.220000 -0.995800 36.250000 -0.992606 36.280000 -0.988518 36.310000 -0.983541 36.340000 -0.977678 36.370000 -0.970936 36.400000 -0.963320 36.430000 -0.954837 36.460000 -0.945495 36.490000 -0.935302 36.520000 -0.924267 36.550000 -0.912401 36.580000 -0.899713 36.610000 -0.886216 36.640000 -0.871921 36.670000 -0.856841 36.700000 -0.840991 36.730000 -0.824383 36.760000 -0.807034 36.790000 -0.788958 36.820000 -0.770173 36.850000 -0.750694 36.880000 -0.730540 36.910000 -0.709728 36.940000 -0.688277 36.970000 -0.666208 37.000000 -0.643538 37.030000 -0.620290 37.060000 -0.596483 37.090000 -0.572139 37.120000 -0.547281 37.150000 -0.521930 37.180000 -0.496109 37.210000 -0.469842 37.240000 -0.443152 37.270000 -0.416063 37.300000 -0.388600 37.330000 -0.360787 37.360000 -0.332650 37.390000 -0.304213 37.420000 -0.275502 37.450000 -0.246543 37.480000 -0.217363 37.510000 -0.187987 37.540000 -0.158441 37.570000 -0.128753 37.600000 -0.098950 37.630000 -0.069057 37.660000 -0.039102 37.690000 -0.009112 37.720000 0.020887 37.750000 0.050866 37.780000 0.080800 37.810000 0.110661 37.840000 0.140423 37.870000 0.170058 37.900000 0.199540 37.930000 0.228842 37.960000 0.257939 37.990000 0.286803 38.020000 0.315410 38.050000 0.343732 38.080000 0.371745 38.110000 0.399424 38.140000 0.426743 38.170000 0.453678 38.200000 0.480205 38.230000 0.506299 38.260000 0.531938 38.290000 0.557099 38.320000 0.581758 38.350000 0.605893 38.380000 0.629483 38.410000 0.652507 38.440000 0.674944 38.470000 0.696773 38.500000 0.717975 38.530000 0.738530 38.560000 0.758422 38.590000 0.777630 38.620000 0.796139 38.650000 0.813932 38.680000 0.830992 38.710000 0.847304 38.740000 0.862853 38.770000 0.877627 38.800000 0.891610 38.830000 0.904791 38.860000 0.917157 38.890000 0.928699 38.920000 0.939404 38.950000 0.949264 38.980000 0.958270 39.010000 0.966414 39.040000 0.973687 39.070000 0.980085 39.100000 0.985600 39.130000 0.990229 39.160000 0.993966 39.190000 0.996809 39.220000 0.998755 39.250000 0.999802 39.280000 0.999949 39.310000 0.999196 39.340000 0.997545 39.370000 0.994995 39.400000 0.991550 39.430000 0.987213 39.460000 0.981987 39.490000 0.975877 39.520000 0.968890 39.550000 0.961030 39.580000 0.952306 39.610000 0.942724 39.640000 0.932294 39.670000 0.921025 39.700000 0.908927 39.730000 0.896012 39.760000 0.882290 39.790000 0.867774 39.820000 0.852477 39.850000 0.836412 39.880000 0.819595 39.910000 0.802041 39.940000 0.783765 39.970000 0.764783 40.000000 0.745113 40.030000 0.724773 40.060000 0.703780 40.090000 0.682154 40.120000 0.659914 40.150000 0.637080 40.180000 0.613673 40.210000 0.589714 40.240000 0.565224 40.270000 0.540225 40.300000 0.514740 40.330000 0.488792 40.360000 0.462404 40.390000 0.435600 40.420000 0.408404 40.450000 0.380840 40.480000 0.352933 40.510000 0.324709 40.540000 0.296193 40.570000 0.267410 40.600000 0.238387 40.630000 0.209149 40.660000 0.179723 40.690000 0.150135 40.720000 0.120412 40.750000 0.090580 40.780000 0.060667 40.810000 0.030700 40.840000 0.000704 40.870000 -0.029291 40.900000 -0.059261 40.930000 -0.089177 40.960000 -0.119013 40.990000 -0.148742 41.020000 -0.178336 41.050000 -0.207771 41.080000 -0.237018 41.110000 -0.266052 41.140000 -0.294847 41.170000 -0.323376 41.200000 -0.351615 41.230000 -0.379537 41.260000 -0.407117 41.290000 -0.434331 41.320000 -0.461154 41.350000 -0.487562 41.380000 -0.513532 41.410000 -0.539039 41.440000 -0.564061 41.470000 -0.588575 41.500000 -0.612560 41.530000 -0.635994 41.560000 -0.658855 41.590000 -0.681123 41.620000 -0.702778 41.650000 -0.723801 41.680000 -0.744173 41.710000 -0.763874 41.740000 -0.782889 41.770000 -0.801199 41.800000 -0.818787 41.830000 -0.835639 41.860000 -0.851739 41.890000 -0.867072 41.920000 -0.881626 41.950000 -0.895385 41.980000 -0.908339 42.010000 -0.920476 42.040000 -0.931784 42.070000 -0.942253 42.100000 -0.951875 42.130000 -0.960640 42.160000 -0.968540 42.190000 -0.975569 42.220000 -0.981720 42.250000 -0.986987 42.280000 -0.991366 42.310000 -0.994853 42.340000 -0.997445 42.370000 -0.999139 42.400000 -0.999934 42.430000 -0.999829 42.460000 -0.998824 42.490000 -0.996921 42.520000 -0.994120 42.550000 -0.990424 42.580000 -0.985838 42.610000 -0.980364 42.640000 -0.974007 42.670000 -0.966775 42.700000 -0.958672 42.730000 -0.949706 42.760000 -0.939886 42.790000 -0.929220 42.820000 -0.917718 42.850000 -0.905390 42.880000 -0.892247 42.910000 -0.878301 42.940000 -0.863565 42.970000 -0.848051 43.000000 -0.831775 43.030000 -0.814750 43.060000 -0.796991 43.090000 -0.778516 43.120000 -0.759339 43.150000 -0.739480 43.180000 -0.718955 43.210000 -0.697783 43.240000 -0.675983 43.270000 -0.653574 43.300000 -0.630578 43.330000 -0.607014 43.360000 -0.582903 43.390000 -0.558268 43.420000 -0.533131 43.450000 -0.507514 43.480000 -0.481440 43.510000 -0.454933 43.540000 -0.428017 43.570000 -0.400715 43.600000 -0.373053 43.630000 -0.345055 43.660000 -0.316746 43.690000 -0.288153 43.720000 -0.259300 43.750000 -0.230214 43.780000 -0.200920 43.810000 -0.171446 43.840000 -0.141817 43.870000 -0.112061 43.900000 -0.082204 43.930000 -0.052273 43.960000 -0.022295 43.990000 0.007703 44.020000 0.037694 44.050000 0.067651 44.080000 0.097547 44.110000 0.127356 44.140000 0.157050 44.170000 0.186603 44.200000 0.215987 44.230000 0.245178 44.260000 0.274147 44.290000 0.302870 44.320000 0.331321 44.350000 0.359473 44.380000 0.387302 44.410000 0.414782 44.440000 0.441889 44.470000 0.468598 44.500000 0.494885 44.530000 0.520727 44.560000 0.546101 44.590000 0.570983 44.620000 0.595351 44.650000 0.619184 44.680000 0.642459 44.710000 0.665156 44.740000 0.687255 44.770000 0.708735 44.800000 0.729577 44.830000 0.749762 44.860000 0.769273 44.890000 0.788092 44.920000 0.806201 44.950000 0.823585 44.980000 0.840228 45.010000 0.856114 45.040000 0.871230 45.070000 0.885562 45.100000 0.899097 45.130000 0.911823 45.160000 0.923729 45.190000 0.934803 45.220000 0.945035 45.250000 0.954418 45.280000 0.962941 45.310000 0.970598 45.340000 0.977381 45.370000 0.983285 45.400000 0.988304 45.430000 0.992434 45.460000 0.995670 45.490000 0.998010 45.520000 0.999452 45.550000 0.999995 45.580000 0.999638 45.610000 0.998381 45.640000 0.996226 45.670000 0.993174 45.700000 0.989229 45.730000 0.984393 45.760000 0.978671 45.790000 0.972069 45.820000 0.964591 45.850000 0.956246 45.880000 0.947040 45.910000 0.936982 45.940000 0.926081 45.970000 0.914346 46.000000 0.901788 46.030000 0.888419 46.060000 0.874250 46.090000 0.859295 46.120000 0.843566 46.150000 0.827078 46.180000 0.809846 46.210000 0.791885 46.240000 0.773211 46.270000 0.753842 46.300000 0.733794 46.330000 0.713086 46.360000 0.691736 46.390000 0.669763 46.420000 0.647188 46.450000 0.624030 46.480000 0.600311 46.510000 0.576051 46.540000 0.551273 46.570000 0.525999 46.600000 0.500252 46.630000 0.474054 46.660000 0.447430 46.690000 0.420403 46.720000 0.392998 46.750000 0.365239 46.780000 0.337152 46.810000 0.308761 46.840000 0.280092 46.870000 0.251171 46.900000 0.222024 46.930000 0.192677 46.960000 0.163157 46.990000 0.133490 47.020000 0.103703 47.050000 0.073823 47.080000 0.043876 47.110000 0.013889 47.140000 -0.016109 47.170000 -0.046094 47.200000 -0.076037 47.230000 -0.105911 47.260000 -0.135690 47.290000 -0.165347 47.320000 -0.194856 47.350000 -0.224188 47.380000 -0.253320 47.410000 -0.282223 47.440000 -0.310872 47.470000 -0.339241 47.500000 -0.367305 47.530000 -0.395039 47.560000 -0.422417 47.590000 -0.449415 47.620000 -0.476008 47.650000 -0.502173 47.680000 -0.527887 47.710000 -0.553125 47.740000 -0.577865 47.770000 -0.602085 47.800000 -0.625764 47.830000 -0.648879 47.860000 -0.671410 47.890000 -0.693337 47.920000 -0.714641 47.950000 -0.735301 47.980000 -0.755299 48.010000 -0.774618 48.040000 -0.793239 48.070000 -0.811147 48.100000 -0.828324 48.130000 -0.844757 48.160000 -0.860429 48.190000 -0.875326 48.220000 -0.889436 48.250000 -0.902746 48.280000 -0.915243 48.310000 -0.926916 48.340000 -0.937756 48.370000 -0.947751 48.400000 -0.956893 48.430000 -0.965175 48.460000 -0.972587 48.490000 -0.979125 48.520000 -0.984781 48.550000 -0.989551 48.580000 -0.993431 48.610000 -0.996416 48.640000 -0.998505 48.670000 -0.999695 48.700000 -0.999986 48.730000 -0.999377 48.760000 -0.997868 48.790000 -0.995461 48.820000 -0.992158 48.850000 -0.987963 48.880000 -0.982878 48.910000 -0.976909 48.940000 -0.970061 48.970000 -0.962340 49.000000 -0.953753 49.030000 -0.944307 49.060000 -0.934012 49.090000 -0.922876 49.120000 -0.910909 49.150000 -0.898123 49.180000 -0.884529 49.210000 -0.870138 49.240000 -0.854965 49.270000 -0.839022 49.300000 -0.822324 49.330000 -0.804885 49.360000 -0.786723 49.390000 -0.767853 49.420000 -0.748291 49.450000 -0.728056 49.480000 -0.707166 49.510000 -0.685640 49.540000 -0.663496 49.570000 -0.640756 49.600000 -0.617439 49.630000 -0.593566 49.660000 -0.569159 49.690000 -0.544240 49.720000 -0.518831 49.750000 -0.492955 49.780000 -0.466635 49.810000 -0.439896 49.840000 -0.412760 49.870000 -0.385253 49.900000 -0.357400 49.930000 -0.329225 49.960000 -0.300753 49.990000 -0.272011 50.020000 -0.243024 50.050000 -0.213819 50.080000 -0.184421 50.110000 -0.154857 50.140000 -0.125153 50.170000 -0.095337 50.200000 -0.065436 50.230000 -0.035475 50.260000 -0.005482 50.290000 0.024515 50.320000 0.054491 50.350000 0.084417 50.380000 0.114267 50.410000 0.144015 50.440000 0.173633 50.470000 0.203095 50.500000 0.232374 50.530000 0.261444 50.560000 0.290278 50.590000 0.318852 50.620000 0.347138 50.650000 0.375112 50.680000 0.402748 50.710000 0.430022 50.740000 0.456909 50.770000 0.483385 50.800000 0.509426 50.830000 0.535008 50.860000 0.560109 50.890000 0.584706 50.920000 0.608777 50.950000 0.632299 50.980000 0.655253 51.010000 0.677617 51.040000 0.699371 51.070000 0.720496 51.100000 0.740973 51.130000 0.760782 51.160000 0.779907 51.190000 0.798330 51.220000 0.816035 51.250000 0.833005 51.280000 0.849226 51.310000 0.864682 51.340000 0.879361 51.370000 0.893247 51.400000 0.906330 51.430000 0.918598 51.460000 0.930038 51.490000 0.940642 51.520000 0.950399 51.550000 0.959301 51.580000 0.967340 51.610000 0.974508 51.640000 0.980799 51.670000 0.986208 51.700000 0.990728 51.730000 0.994358 51.760000 0.997092 51.790000 0.998929 51.820000 0.999868 51.850000 0.999906 51.880000 0.999044 51.910000 0.997284 51.940000 0.994626 51.970000 0.991073 52.000000 0.986628 52.030000 0.981295 52.060000 0.975079 52.090000 0.967985 52.120000 0.960020 52.150000 0.951192 52.180000 0.941507 52.210000 0.930975 52.240000 0.919606 52.270000 0.907408 52.300000 0.894394 52.330000 0.880575 52.360000 0.865964 52.390000 0.850574 52.420000 0.834418 52.450000 0.817511 52.480000 0.799868 52.510000 0.781505 52.540000 0.762440 52.570000 0.742688 52.600000 0.722267 52.630000 0.701197 52.660000 0.679496 52.690000 0.657183 52.720000 0.634279 52.750000 0.610804 52.780000 0.586779 52.810000 0.562226 52.840000 0.537167 52.870000 0.511625 52.900000 0.485622 52.930000 0.459183 52.960000 0.432330 52.990000 0.405088 53.020000 0.377482 53.050000 0.349535 53.080000 0.321275 53.110000 0.292725 53.140000 0.263911 53.170000 0.234861 53.200000 0.205598 53.230000 0.176151 53.260000 0.146545 53.290000 0.116808 53.320000 0.086965 53.350000 0.057044 53.380000 0.027072 53.410000 -0.002925 53.440000 -0.032919 53.470000 -0.062883 53.500000 -0.092791 53.530000 -0.122616 53.560000 -0.152330 53.590000 -0.181906 53.620000 -0.211320 53.650000 -0.240543 53.680000 -0.269549 53.710000 -0.298313 53.740000 -0.326809 53.770000 -0.355010 53.800000 -0.382892 53.830000 -0.410429 53.860000 -0.437597 53.890000 -0.464372 53.920000 -0.490728 53.950000 -0.516642 53.980000 -0.542092 54.010000 -0.567054 54.040000 -0.591506 54.070000 -0.615425 54.100000 -0.638790 54.130000 -0.661581 54.160000 -0.683776 54.190000 -0.705356 54.220000 -0.726301 54.250000 -0.746592 54.280000 -0.766212 54.310000 -0.785142 54.340000 -0.803365 54.370000 -0.820866 54.400000 -0.837627 54.430000 -0.853635 54.460000 -0.868875 54.490000 -0.883333 54.520000 -0.896995 54.550000 -0.909851 54.580000 -0.921888 54.610000 -0.933095 54.640000 -0.943462 54.670000 -0.952981 54.700000 -0.961642 54.730000 -0.969437 54.760000 -0.976360 54.790000 -0.982404 54.820000 -0.987564 54.850000 -0.991836 54.880000 -0.995214 54.910000 -0.997698 54.940000 -0.999283 54.970000 -0.999969 55.000000 -0.999755 55.030000 -0.998642 55.060000 -0.996629 55.090000 -0.993720 55.120000 -0.989917 55.150000 -0.985222 55.180000 -0.979641 55.210000 -0.973179 55.240000 -0.965841 55.270000 -0.957633 55.300000 -0.948564 55.330000 -0.938641 55.360000 -0.927873 55.390000 -0.916270 55.420000 -0.903843 55.450000 -0.890602 55.480000 -0.876560 55.510000 -0.861729 55.540000 -0.846123 55.570000 -0.829755 55.600000 -0.812640 55.630000 -0.794794 55.660000 -0.776233 55.690000 -0.756973 55.720000 -0.737032 55.750000 -0.716427 55.780000 -0.695178 55.810000 -0.673303 55.840000 -0.650823 55.870000 -0.627757 55.900000 -0.604125 55.930000 -0.579950 55.960000 -0.555254 55.990000 -0.530057 56.020000 -0.504383 56.050000 -0.478256 56.080000 -0.451698 56.110000 -0.424734 56.140000 -0.397387 56.170000 -0.369683 56.200000 -0.341646 56.230000 -0.313302 56.260000 -0.284675 56.290000 -0.255793 56.320000 -0.226680 56.350000 -0.197363 56.380000 -0.167869 56.410000 -0.138224 56.440000 -0.108454 56.470000 -0.078587 56.500000 -0.048649 56.530000 -0.018667 56.560000 0.011332 56.590000 0.041320 56.620000 0.071272 56.650000 0.101159 56.680000 0.130955 56.710000 0.160633 56.740000 0.190167 56.770000 0.219530 56.800000 0.248695 56.830000 0.277636 56.860000 0.306327 56.890000 0.334743 56.920000 0.362857 56.950000 0.390645 56.980000 0.418081 57.010000 0.445141 57.040000 0.471801 57.070000 0.498036 57.100000 0.523823 57.130000 0.549138 57.160000 0.573959 57.190000 0.598263 57.220000 0.622030 57.250000 0.645236 57.280000 0.667862 57.310000 0.689886 57.340000 0.711290 57.370000 0.732054 57.400000 0.752159 57.430000 0.771587 57.460000 0.790321 57.490000 0.808343 57.520000 0.825638 57.550000 0.842190 57.580000 0.857984 57.610000 0.873006 57.640000 0.887242 57.670000 0.900680 57.700000 0.913307 57.730000 0.925113 57.760000 0.936085 57.790000 0.946216 57.820000 0.955495 57.850000 0.963914 57.880000 0.971465 57.910000 0.978142 57.940000 0.983939 57.970000 0.988851 58.000000 0.992873 58.030000 0.996001 58.060000 0.998233 58.090000 0.999566 58.120000 1.000000 58.150000 0.999534 58.180000 0.998168 58.210000 0.995904 58.240000 0.992744 58.270000 0.988691 58.300000 0.983748 58.330000 0.977919 58.360000 0.971210 58.390000 0.963628 58.420000 0.955178 58.450000 0.945869 58.480000 0.935708 58.510000 0.924705 58.540000 0.912870 58.570000 0.900214 58.600000 0.886747 58.630000 0.872483 58.660000 0.857433 58.690000 0.841612 58.720000 0.825033 58.750000 0.807712 58.780000 0.789664 58.810000 0.770905 58.840000 0.751452 58.870000 0.731323 58.900000 0.710537 58.930000 0.689110 58.960000 0.667064 58.990000 0.644417 59.020000 0.621190 59.050000 0.597404 59.080000 0.573081 59.110000 0.548242 59.140000 0.522909 59.170000 0.497106 59.200000 0.470856 59.230000 0.444181 59.260000 0.417107 59.290000 0.389658 59.320000 0.361858 59.350000 0.333733 59.380000 0.305307 59.410000 0.276606 59.440000 0.247656 59.470000 0.218484 59.500000 0.189115 59.530000 0.159575 59.560000 0.129892 59.590000 0.100093 59.620000 0.070203 59.650000 0.040250 59.680000 0.010260 59.710000 -0.019738 59.740000 -0.049719 59.770000 -0.079655 59.800000 -0.109519 59.830000 -0.139285 59.860000 -0.168926 59.890000 -0.198414 59.920000 -0.227724 59.950000 -0.256829 59.980000 -0.285703 60.010000 -0.314319 60.040000 -0.342653 60.070000 -0.370679 60.100000 -0.398370 60.130000 -0.425704 60.160000 -0.452654 60.190000 -0.479197 60.220000 -0.505309 60.250000 -0.530966 60.280000 -0.556145 60.310000 -0.580823 60.340000 -0.604979 60.370000 -0.628591 60.400000 -0.651636 60.430000 -0.674096 60.460000 -0.695948 60.490000 -0.717175 60.520000 -0.737756 60.550000 -0.757673 60.580000 -0.776908 60.610000 -0.795444 60.640000 -0.813264 60.670000 -0.830352 60.700000 -0.846693 60.730000 -0.862272 60.760000 -0.877075 60.790000 -0.891089 60.820000 -0.904301 60.850000 -0.916699 60.880000 -0.928272 60.910000 -0.939010 60.940000 -0.948902 60.970000 -0.957941 61.000000 -0.966118 61.030000 -0.973425 61.060000 -0.979856 61.090000 -0.985405 61.120000 -0.990068 61.150000 -0.993840 61.180000 -0.996717 61.210000 -0.998697 61.240000 -0.999778 61.270000 -0.999960 61.300000 -0.999242 61.330000 -0.997624 61.360000 -0.995109 61.390000 -0.991698 61.420000 -0.987395 61.450000 -0.982203 61.480000 -0.976128 61.510000 -0.969173 61.540000 -0.961347 61.570000 -0.952655 61.600000 -0.943107 61.630000 -0.932709 61.660000 -0.921472 61.690000 -0.909406 61.720000 -0.896521 61.750000 -0.882830 61.780000 -0.868344 61.810000 -0.853076 61.840000 -0.837041 61.870000 -0.820253 61.900000 -0.802726 61.930000 -0.784477 61.960000 -0.765523 61.990000 -0.745879 62.020000 -0.725564 62.050000 -0.704596 62.080000 -0.682993 62.110000 -0.660777 62.140000 -0.637965 62.170000 -0.614580 62.200000 -0.590641 62.230000 -0.566171 62.260000 -0.541191 62.290000 -0.515725 62.320000 -0.489794 62.350000 -0.463422 62.380000 -0.436633 62.410000 -0.409452 62.440000 -0.381902 62.470000 -0.354008 62.500000 -0.325796 62.530000 -0.297290 62.560000 -0.268517 62.590000 -0.239502 62.620000 -0.210272 62.650000 -0.180852 62.680000 -0.151270 62.710000 -0.121552 62.740000 -0.091724 62.770000 -0.061814 62.800000 -0.031848 62.830000 -0.001853 62.860000 0.028143 62.890000 0.058114 62.920000 0.088033 62.950000 0.117872 62.980000 0.147606 63.010000 0.177206 63.040000 0.206647 63.070000 0.235902 63.100000 0.264945 63.130000 0.293749 63.160000 0.322289 63.190000 0.350539 63.220000 0.378474 63.250000 0.406068 63.280000 0.433296 63.310000 0.460135 63.340000 0.486559 63.370000 0.512546 63.400000 0.538071 63.430000 0.563112 63.460000 0.587646 63.490000 0.611652 63.520000 0.635107 63.550000 0.657990 63.580000 0.680282 63.610000 0.701961 63.640000 0.723008 63.670000 0.743405 63.700000 0.763133 63.730000 0.782174 63.760000 0.800511 63.790000 0.818127 63.820000 0.835008 63.850000 0.851137 63.880000 0.866500 63.910000 0.881083 63.940000 0.894873 63.970000 0.907858 64.000000 0.920026 64.030000 0.931366 64.060000 0.941868 64.090000 0.951522 64.120000 0.960320 64.150000 0.968254 64.180000 0.975316 64.210000 0.981500 64.240000 0.986802 64.270000 0.991215 64.300000 0.994736 64.330000 0.997362 64.360000 0.999091 64.390000 0.999920 64.420000 0.999849 64.450000 0.998879 64.480000 0.997010 64.510000 0.994243 64.540000 0.990582 64.570000 0.986030 64.600000 0.980589 64.630000 0.974267 64.660000 0.967068 64.690000 0.958998 64.720000 0.950065 64.750000 0.940278 64.780000 0.929644 64.810000 0.918174 64.840000 0.905877 64.870000 0.892765 64.900000 0.878850 64.930000 0.864143 64.960000 0.848659 64.990000 0.832412 65.020000 0.815415 65.050000 0.797684 65.080000 0.779236 65.110000 0.760086 65.140000 0.740252 65.170000 0.719752 65.200000 0.698605 65.230000 0.676828 65.260000 0.654443 65.290000 0.631469 65.320000 0.607926 65.350000 0.583836 65.380000 0.559221 65.410000 0.534102 65.440000 0.508503 65.470000 0.482447 65.500000 0.455956 65.530000 0.429054 65.560000 0.401767 65.590000 0.374118 65.620000 0.346133 65.650000 0.317835 65.680000 0.289252 65.710000 0.260409 65.740000 0.231331 65.770000 0.202045 65.800000 0.172577 65.830000 0.142954 65.860000 0.113203 65.890000 0.083349 65.920000 0.053420 65.950000 0.023444 65.980000 -0.006554 66.010000 -0.036546 66.040000 -0.066505 66.070000 -0.096404 66.100000 -0.126217 66.130000 -0.155916 66.160000 -0.185474 66.190000 -0.214866 66.220000 -0.244064 66.250000 -0.273042 66.280000 -0.301775 66.310000 -0.330237 66.340000 -0.358401 66.370000 -0.386242 66.400000 -0.413736 66.430000 -0.440858 66.460000 -0.467583 66.490000 -0.493887 66.520000 -0.519747 66.550000 -0.545138 66.580000 -0.570040 66.610000 -0.594428 66.640000 -0.618281 66.670000 -0.641578 66.700000 -0.664298 66.730000 -0.686420 66.760000 -0.707924 66.790000 -0.728791 66.820000 -0.749002 66.850000 -0.768539 66.880000 -0.787384 66.910000 -0.805521 66.940000 -0.822933 66.970000 -0.839604 67.000000 -0.855520 67.030000 -0.870666 67.060000 -0.885028 67.090000 -0.898594 67.120000 -0.911351 67.150000 -0.923288 67.180000 -0.934394 67.210000 -0.944659 67.240000 -0.954074 67.270000 -0.962631 67.300000 -0.970321 67.330000 -0.977138 67.360000 -0.983075 67.390000 -0.988128 67.420000 -0.992292 67.450000 -0.995563 67.480000 -0.997937 67.510000 -0.999414 67.540000 -0.999991 67.570000 -0.999668 67.600000 -0.998446 67.630000 -0.996325 67.660000 -0.993308 67.690000 -0.989396 67.720000 -0.984594 67.750000 -0.978906 67.780000 -0.972338 67.810000 -0.964894 67.840000 -0.956582 67.870000 -0.947408 67.900000 -0.937383 67.930000 -0.926514 67.960000 -0.914810 67.990000 -0.902284 68.020000 -0.888946 68.050000 -0.874808 68.080000 -0.859882 68.110000 -0.844183 68.140000 -0.827723 68.170000 -0.810519 68.200000 -0.792586 68.230000 -0.773939 68.260000 -0.754596 68.290000 -0.734574 68.320000 -0.713890 68.350000 -0.692565 68.380000 -0.670616 68.410000 -0.648063 68.440000 -0.624927 68.470000 -0.601229 68.500000 -0.576990 68.530000 -0.552231 68.560000 -0.526976 68.590000 -0.501246 68.620000 -0.475065 68.650000 -0.448457 68.680000 -0.421445 68.710000 -0.394054 68.740000 -0.366308 68.770000 -0.338233 68.800000 -0.309853 68.830000 -0.281194 68.860000 -0.252283 68.890000 -0.223144 68.920000 -0.193804 68.950000 -0.164290 68.980000 -0.134628 69.010000 -0.104845 69.040000 -0.074968 69.070000 -0.045023 69.100000 -0.015038 69.130000 0.014961 69.160000 0.044946 69.190000 0.074891 69.220000 0.104769 69.250000 0.134552 69.280000 0.164214 69.310000 0.193729 69.340000 0.223069 69.370000 0.252208 69.400000 0.281121 69.430000 0.309780 69.460000 0.338161 69.490000 0.366237 69.520000 0.393983 69.550000 0.421376 69.580000 0.448388 69.610000 0.474998 69.640000 0.501180 69.670000 0.526911 69.700000 0.552167 69.730000 0.576927 69.760000 0.601168 69.790000 0.624867 69.820000 0.648005 69.850000 0.670559 69.880000 0.692509 69.910000 0.713837 69.940000 0.734522 69.970000 0.754546 70.000000 0.773891 70.030000 0.792539 70.060000 0.810474 70.090000 0.827680 70.120000 0.844141 70.150000 0.859843 70.180000 0.874770 70.210000 0.888911 70.240000 0.902251 70.270000 0.914779 70.300000 0.926485 70.330000 0.937356 70.360000 0.947384 70.390000 0.956559 70.420000 0.964874 70.450000 0.972320 70.480000 0.978891 70.510000 0.984581 70.540000 0.989385 70.570000 0.993299 70.600000 0.996318 70.630000 0.998442 70.660000 0.999666 70.690000 0.999991 70.720000 0.999416 70.750000 0.997942 70.780000 0.995570 70.810000 0.992301 70.840000 0.988140 70.870000 0.983089 70.900000 0.977154 70.930000 0.970339 70.960000 0.962652 70.990000 0.954097 71.020000 0.944684 71.050000 0.934421 71.080000 0.923317 71.110000 0.911383 71.140000 0.898628 71.170000 0.885064 71.200000 0.870704 71.230000 0.855560 71.260000 0.839646 71.290000 0.822977 71.320000 0.805567 71.350000 0.787432 71.380000 0.768588 71.410000 0.749053 71.440000 0.728843 71.470000 0.707978 71.500000 0.686476 71.530000 0.664355 71.560000 0.641637 71.590000 0.618342 71.620000 0.594490 71.650000 0.570103 71.680000 0.545203 71.710000 0.519812 71.740000 0.493954 71.770000 0.467651 71.800000 0.440927 71.830000 0.413806 71.860000 0.386313 71.890000 0.358472 71.920000 0.330309 71.950000 0.301849 71.980000 0.273116 72.010000 0.244138 72.040000 0.214941 72.070000 0.185549 72.100000 0.155991 72.130000 0.126293 72.160000 0.096481 72.190000 0.066582 72.220000 0.036623 72.250000 0.006631 72.280000 -0.023367 72.310000 -0.053344 72.340000 -0.083272 72.370000 -0.113126 72.400000 -0.142878 72.430000 -0.172502 72.460000 -0.201970 72.490000 -0.231256 72.520000 -0.260335 72.550000 -0.289179 72.580000 -0.317763 72.610000 -0.346061 72.640000 -0.374047 72.670000 -0.401697 72.700000 -0.428985 72.730000 -0.455887 72.760000 -0.482379 72.790000 -0.508437 72.820000 -0.534038 72.850000 -0.559157 72.880000 -0.583774 72.910000 -0.607865 72.940000 -0.631409 72.970000 -0.654385 73.000000 -0.676772 73.030000 -0.698550 73.060000 -0.719699 73.090000 -0.740201 73.120000 -0.760036 73.150000 -0.779188 73.180000 -0.797638 73.210000 -0.815371 73.240000 -0.832369 73.270000 -0.848619 73.300000 -0.864105 73.330000 -0.878813 73.360000 -0.892730 73.390000 -0.905844 73.420000 -0.918143 73.450000 -0.929616 73.480000 -0.940252 73.510000 -0.950042 73.540000 -0.958976 73.570000 -0.967048 73.600000 -0.974250 73.630000 -0.980574 73.660000 -0.986017 73.690000 -0.990572 73.720000 -0.994235 73.750000 -0.997004 73.780000 -0.998876 73.810000 -0.999848 73.840000 -0.999921 73.870000 -0.999094 73.900000 -0.997368 73.930000 -0.994744 73.960000 -0.991225 73.990000 -0.986814 74.020000 -0.981515 74.050000 -0.975333 74.080000 -0.968273 74.110000 -0.960341 74.140000 -0.951546 74.170000 -0.941894 74.200000 -0.931394 74.230000 -0.920056 74.260000 -0.907890 74.290000 -0.894907 74.320000 -0.881119 74.350000 -0.866538 74.380000 -0.851177 74.410000 -0.835050 74.440000 -0.818172 74.470000 -0.800557 74.500000 -0.782222 74.530000 -0.763182 74.560000 -0.743456 74.590000 -0.723061 74.620000 -0.702016 74.650000 -0.680338 74.680000 -0.658048 74.710000 -0.635166 74.740000 -0.611713 74.770000 -0.587709 74.800000 -0.563176 74.830000 -0.538136 74.860000 -0.512612 74.890000 -0.486626 74.920000 -0.460203 74.950000 -0.433365 74.980000 -0.406138 75.010000 -0.378545 75.040000 -0.350611 75.070000 -0.322362 75.100000 -0.293823 75.130000 -0.265019 75.160000 -0.235977 75.190000 -0.206722 75.220000 -0.177282 75.250000 -0.147682 75.280000 -0.117948 75.310000 -0.088109 75.340000 -0.058191 75.370000 -0.028220 75.400000 0.001776 75.430000 0.031771 75.460000 0.061737 75.490000 0.091648 75.520000 0.121476 75.550000 0.151194 75.580000 0.180777 75.610000 0.210197 75.640000 0.239428 75.670000 0.268443 75.700000 0.297217 75.730000 0.325723 75.760000 0.353936 75.790000 0.381831 75.820000 0.409382 75.850000 0.436564 75.880000 0.463354 75.910000 0.489727 75.940000 0.515659 75.970000 0.541127 76.000000 0.566108 76.030000 0.590579 76.060000 0.614519 76.090000 0.637906 76.120000 0.660719 76.150000 0.682937 76.180000 0.704541 76.210000 0.725511 76.240000 0.745828 76.270000 0.765473 76.300000 0.784430 76.330000 0.802681 76.360000 0.820209 76.390000 0.836999 76.420000 0.853036 76.450000 0.868306 76.480000 0.882794 76.510000 0.896487 76.540000 0.909374 76.570000 0.921442 76.600000 0.932681 76.630000 0.943081 76.660000 0.952632 76.690000 0.961326 76.720000 0.969154 76.750000 0.976111 76.780000 0.982189 76.810000 0.987383 76.840000 0.991688 76.870000 0.995102 76.900000 0.997619 76.930000 0.999239 76.960000 0.999959 76.990000 0.999780 77.020000 0.998701 77.050000 0.996723 77.080000 0.993848 77.110000 0.990079 77.140000 0.985418 77.170000 0.979871 77.200000 0.973443 77.230000 0.966138 77.260000 0.957963 77.290000 0.948927 77.320000 0.939036 77.350000 0.928301 77.380000 0.916730 77.410000 0.904334 77.440000 0.891124 77.470000 0.877112 77.500000 0.862311 77.530000 0.846734 77.560000 0.830395 77.590000 0.813309 77.620000 0.795490 77.650000 0.776956 77.680000 0.757723 77.710000 0.737807 77.740000 0.717228 77.770000 0.696003 77.800000 0.674152 77.830000 0.651694 77.860000 0.628650 77.890000 0.605040 77.920000 0.580886 77.950000 0.556208 77.980000 0.531031 78.010000 0.505375 78.040000 0.479264 78.070000 0.452723 78.100000 0.425773 78.130000 0.398441 78.160000 0.370750 78.190000 0.342725 78.220000 0.314392 78.250000 0.285776 78.280000 0.256903 78.310000 0.227799 78.340000 0.198489 78.370000 0.169001 78.400000 0.139361 78.430000 0.109596 78.460000 0.079732 78.490000 0.049796 78.520000 0.019815 78.550000 -0.010183 78.580000 -0.040173 78.610000 -0.070126 78.640000 -0.100016 78.670000 -0.129816 78.700000 -0.159500 78.730000 -0.189039 78.760000 -0.218409 78.790000 -0.247582 78.820000 -0.276532 78.850000 -0.305234 78.880000 -0.333660 78.910000 -0.361787 78.940000 -0.389587 78.970000 -0.417038 79.000000 -0.444113 79.030000 -0.470788 79.060000 -0.497040 79.090000 -0.522844 79.120000 -0.548178 79.150000 -0.573018 79.180000 -0.597343 79.210000 -0.621130 79.240000 -0.644358 79.270000 -0.667006 79.300000 -0.689055 79.330000 -0.710483 79.360000 -0.731271 79.390000 -0.751402 79.420000 -0.770856 79.450000 -0.789616 79.480000 -0.807666 79.510000 -0.824990 79.540000 -0.841570 79.570000 -0.857394 79.600000 -0.872445 79.630000 -0.886712 79.660000 -0.900180 79.690000 -0.912839 79.720000 -0.924676 79.750000 -0.935681 79.780000 -0.945844 79.810000 -0.955155 79.840000 -0.963607 79.870000 -0.971192 79.900000 -0.977903 79.930000 -0.983734 79.960000 -0.988679 79.990000 -0.992735 80.020000 -0.995897 80.050000 -0.998164 80.080000 -0.999531 80.110000 -1.000000 80.140000 -0.999568 80.170000 -0.998237 80.200000 -0.996008 80.230000 -0.992882 80.260000 -0.988862 80.290000 -0.983953 80.320000 -0.978158 80.350000 -0.971483 80.380000 -0.963934 80.410000 -0.955517 80.440000 -0.946241 80.470000 -0.936112 80.500000 -0.925142 80.530000 -0.913339 80.560000 -0.900713 80.590000 -0.887278 80.620000 -0.873043 80.650000 -0.858024 80.680000 -0.842231 80.710000 -0.825681 80.740000 -0.808388 80.770000 -0.790368 80.800000 -0.771636 80.830000 -0.752210 80.860000 -0.732106 80.890000 -0.711344 80.920000 -0.689942 80.950000 -0.667919 80.980000 -0.645295 81.010000 -0.622090 81.040000 -0.598325 81.070000 -0.574022 81.100000 -0.549202 81.130000 -0.523888 81.160000 -0.498102 81.190000 -0.471869 81.220000 -0.445210 81.250000 -0.418151 81.280000 -0.390716 81.310000 -0.362929 81.340000 -0.334815 81.370000 -0.306400 81.400000 -0.277709 81.430000 -0.248769 81.460000 -0.219604 81.490000 -0.190242 81.520000 -0.160709 81.550000 -0.131031 81.580000 -0.101235 81.610000 -0.071348 81.640000 -0.041397 81.670000 -0.011409 81.700000 0.018590 81.730000 0.048572 81.760000 0.078510 81.790000 0.108378 81.820000 0.138148 81.850000 0.167793 81.880000 0.197288 81.910000 0.226605 81.940000 0.255719 81.970000 0.284602 82.000000 0.313229 82.030000 0.341574 82.060000 0.369612 82.090000 0.397317 82.120000 0.424664 82.150000 0.451630 82.180000 0.478189 82.210000 0.504317 82.240000 0.529992 82.270000 0.555190 82.300000 0.579888 82.330000 0.604064 82.360000 0.627697 82.390000 0.650765 82.420000 0.673247 82.450000 0.695123 82.480000 0.716374 82.510000 0.736980 82.540000 0.756923 82.570000 0.776184 82.600000 0.794747 82.630000 0.812595 82.660000 0.829712 82.690000 0.846082 82.720000 0.861690 82.750000 0.876523 82.780000 0.890567 82.810000 0.903810 82.840000 0.916240 82.870000 0.927844 82.900000 0.938614 82.930000 0.948539 82.960000 0.957611 82.990000 0.965821 83.020000 0.973161 83.050000 0.979626 83.080000 0.985209 83.110000 0.989906 83.140000 0.993712 83.170000 0.996623 83.200000 0.998638 83.230000 0.999753 83.260000 0.999970 83.290000 0.999286 83.320000 0.997703 83.350000 0.995222 83.380000 0.991845 83.410000 0.987576 83.440000 0.982418 83.470000 0.976376 83.500000 0.969456 83.530000 0.961663 83.560000 0.953004 83.590000 0.943488 83.620000 0.933123 83.650000 0.921918 83.680000 0.909883 83.710000 0.897029 83.740000 0.883369 83.770000 0.868913 83.800000 0.853675 83.830000 0.837669 83.860000 0.820909 83.890000 0.803411 83.920000 0.785189 83.950000 0.766261 83.980000 0.746643 84.010000 0.726354 84.040000 0.705410 84.070000 0.683832 84.100000 0.661638 84.130000 0.638849 84.160000 0.615485 84.190000 0.591568 84.220000 0.567117 84.250000 0.542157 84.280000 0.516708 84.310000 0.490795 84.340000 0.464440 84.370000 0.437666 84.400000 0.410499 84.430000 0.382963 84.460000 0.355082 84.490000 0.326881 84.520000 0.298386 84.550000 0.269623 84.580000 0.240617 84.610000 0.211395 84.640000 0.181982 84.670000 0.152405 84.700000 0.122692 84.730000 0.092868 84.760000 0.062960 84.790000 0.032996 84.820000 0.003002 84.850000 -0.026995 84.880000 -0.056967 84.910000 -0.086889 84.940000 -0.116732 84.970000 -0.146470 85.000000 -0.176076 85.030000 -0.205523 85.060000 -0.234786 85.090000 -0.263837 85.120000 -0.292651 85.150000 -0.321202 85.180000 -0.349463 85.210000 -0.377410 85.240000 -0.405018 85.270000 -0.432261 85.300000 -0.459115 85.330000 -0.485555 85.360000 -0.511559 85.390000 -0.537103 85.420000 -0.562163 85.450000 -0.586717 85.480000 -0.610743 85.510000 -0.634219 85.540000 -0.657125 85.570000 -0.679439 85.600000 -0.701142 85.630000 -0.722214 85.660000 -0.742636 85.690000 -0.762390 85.720000 -0.781458 85.750000 -0.799822 85.780000 -0.817466 85.810000 -0.834375 85.840000 -0.850533 85.870000 -0.865926 85.900000 -0.880539 85.930000 -0.894360 85.960000 -0.907376 85.990000 -0.919575 86.020000 -0.930947 86.050000 -0.941481 86.080000 -0.951168 86.110000 -0.959999 86.140000 -0.967966 86.170000 -0.975062 86.200000 -0.981280 86.230000 -0.986615 86.260000 -0.991062 86.290000 -0.994618 86.320000 -0.997278 86.350000 -0.999041 86.380000 -0.999905 86.410000 -0.999869 86.440000 -0.998933 86.470000 -0.997098 86.500000 -0.994366 86.530000 -0.990739 86.560000 -0.986220 86.590000 -0.980814 86.620000 -0.974525 86.650000 -0.967359 86.680000 -0.959323 86.710000 -0.950423 86.740000 -0.940668 86.770000 -0.930067 86.800000 -0.918628 86.830000 -0.906363 86.860000 -0.893282 86.890000 -0.879397 86.920000 -0.864721 86.950000 -0.849266 86.980000 -0.833048 87.010000 -0.816079 87.040000 -0.798377 87.070000 -0.779955 87.100000 -0.760832 87.130000 -0.741024 87.160000 -0.720549 87.190000 -0.699426 87.220000 -0.677674 87.250000 -0.655311 87.280000 -0.632359 87.310000 -0.608837 87.340000 -0.584768 87.370000 -0.560173 87.400000 -0.535073 87.430000 -0.509492 87.460000 -0.483452 87.490000 -0.456978 87.520000 -0.430092 87.550000 -0.402819 87.580000 -0.375183 87.610000 -0.347210 87.640000 -0.318924 87.670000 -0.290352 87.700000 -0.261518 87.730000 -0.232448 87.760000 -0.203170 87.790000 -0.173709 87.820000 -0.144091 87.850000 -0.114344 87.880000 -0.084493 87.910000 -0.054567 87.940000 -0.024592 87.970000 0.005406 88.000000 0.035398 88.030000 0.065359 88.060000 0.095261 88.090000 0.125077 88.120000 0.154781 88.150000 0.184345 88.180000 0.213744 88.210000 0.242950 88.240000 0.271937 88.270000 0.300680 88.300000 0.329152 88.330000 0.357328 88.360000 0.385183 88.390000 0.412690 88.420000 0.439827 88.450000 0.466567 88.480000 0.492888 88.510000 0.518765 88.540000 0.544175 88.570000 0.569096 88.600000 0.593504 88.630000 0.617378 88.660000 0.640697 88.690000 0.663439 88.720000 0.685584 88.750000 0.707112 88.780000 0.728004 88.810000 0.748240 88.840000 0.767803 88.870000 0.786676 88.900000 0.804840 88.930000 0.822280 88.960000 0.838980 88.990000 0.854925 89.020000 0.870100 89.050000 0.884493 89.080000 0.898089 89.110000 0.910878 89.140000 0.922846 89.170000 0.933984 89.200000 0.944282 89.230000 0.953730 89.260000 0.962319 89.290000 0.970043 89.320000 0.976893 89.350000 0.982864 89.380000 0.987951 89.410000 0.992149 89.440000 0.995454 89.470000 0.997863 89.500000 0.999374 89.530000 0.999985 89.560000 0.999697 89.590000 0.998509 89.620000 0.996423 89.650000 0.993440 89.680000 0.989562 89.710000 0.984794 89.740000 0.979140 89.770000 0.972605 89.800000 0.965195 89.830000 0.956916 89.860000 0.947775 89.890000 0.937782 89.920000 0.926945 89.950000 0.915274 89.980000 0.902779 90.010000 0.889471 90.040000 0.875363 90.070000 0.860468 90.100000 0.844798 90.130000 0.828367 90.160000 0.811192 90.190000 0.793286 90.220000 0.774666 90.250000 0.755349 90.280000 0.735353 90.310000 0.714694 90.340000 0.693393 90.370000 0.671467 90.400000 0.648937 90.430000 0.625824 90.460000 0.602147 90.490000 0.577928 90.520000 0.553189 90.550000 0.527952 90.580000 0.502240 90.610000 0.476076 90.640000 0.449483 90.670000 0.422487 90.700000 0.395109 90.730000 0.367377 90.760000 0.339313 90.790000 0.310945 90.820000 0.282296 90.850000 0.253394 90.880000 0.224263 90.910000 0.194931 90.940000 0.165423 90.970000 0.135766 91.000000 0.105988 91.030000 0.076113 91.060000 0.046171 91.090000 0.016186 91.120000 -0.013813 91.150000 -0.043799 91.180000 -0.073746 91.210000 -0.103627 91.240000 -0.133414 91.270000 -0.163081 91.300000 -0.192602 91.330000 -0.221949 91.360000 -0.251097 91.390000 -0.280018 91.420000 -0.308688 91.450000 -0.337079 91.480000 -0.365168 91.510000 -0.392928 91.540000 -0.420334 91.570000 -0.447362 91.600000 -0.473987 91.630000 -0.500186 91.660000 -0.525934 91.690000 -0.551209 91.720000 -0.575989 91.750000 -0.600250 91.780000 -0.623970 91.810000 -0.647129 91.840000 -0.669706 91.870000 -0.691680 91.900000 -0.713032 91.930000 -0.733742 91.960000 -0.753791 91.990000 -0.773163 92.020000 -0.791838 92.050000 -0.809801 92.080000 -0.827035 92.110000 -0.843525 92.140000 -0.859256 92.170000 -0.874213 92.200000 -0.888384 92.230000 -0.901755 92.260000 -0.914315 92.290000 -0.926052 92.320000 -0.936955 92.350000 -0.947016 92.380000 -0.956224 92.410000 -0.964571 92.440000 -0.972051 92.470000 -0.978655 92.500000 -0.984379 92.530000 -0.989217 92.560000 -0.993165 92.590000 -0.996219 92.620000 -0.998377 92.650000 -0.999636 92.680000 -0.999995 92.710000 -0.999455 92.740000 -0.998015 92.770000 -0.995677 92.800000 -0.992443 92.830000 -0.988316 92.860000 -0.983299 92.890000 -0.977398 92.920000 -0.970616 92.950000 -0.962962 92.980000 -0.954441 93.010000 -0.945060 93.040000 -0.934830 93.070000 -0.923758 93.100000 -0.911855 93.130000 -0.899131 93.160000 -0.885598 93.190000 -0.871268 93.220000 -0.856154 93.250000 -0.840269 93.280000 -0.823628 93.310000 -0.806247 93.340000 -0.788139 93.370000 -0.769322 93.400000 -0.749813 93.430000 -0.729629 93.460000 -0.708789 93.490000 -0.687310 93.520000 -0.665213 93.550000 -0.642518 93.580000 -0.619244 93.610000 -0.595413 93.640000 -0.571046 93.670000 -0.546165 93.700000 -0.520793 93.730000 -0.494952 93.760000 -0.468666 93.790000 -0.441957 93.820000 -0.414852 93.850000 -0.387372 93.880000 -0.359544 93.910000 -0.331393 93.940000 -0.302943 93.970000 -0.274221 94.000000 -0.245252 94.030000 -0.216062 94.060000 -0.186678 94.090000 -0.157126 94.120000 -0.127432 94.150000 -0.097624 94.180000 -0.067728 94.210000 -0.037771 94.240000 -0.007780 94.270000 0.022219 94.300000 0.052197 94.330000 0.082128 94.360000 0.111985 94.390000 0.141741 94.420000 0.171370 94.450000 0.200845 94.480000 0.230139 94.510000 0.259226 94.540000 0.288079 94.570000 0.316673 94.600000 0.344983 94.630000 0.372982 94.660000 0.400645 94.690000 0.427947 94.720000 0.454865 94.750000 0.481373 94.780000 0.507448 94.810000 0.533066 94.840000 0.558205 94.870000 0.582841 94.900000 0.606953 94.930000 0.630518 94.960000 0.653516 94.990000 0.675926 95.020000 0.697728 95.050000 0.718901 95.080000 0.739428 95.110000 0.759289 95.140000 0.778467 95.170000 0.796945 95.200000 0.814705 95.230000 0.831732 95.260000 0.848011 95.290000 0.863526 95.320000 0.878264 95.350000 0.892212 95.380000 0.905357 95.410000 0.917688 95.440000 0.929192 95.470000 0.939860 95.500000 0.949682 95.530000 0.958650 95.560000 0.966755 95.590000 0.973990 95.620000 0.980349 95.650000 0.985825 95.680000 0.990414 95.710000 0.994111 95.740000 0.996914 95.770000 0.998820 95.800000 0.999827 95.830000 0.999935 95.860000 0.999142 95.890000 0.997450 95.920000 0.994861 95.950000 0.991376 95.980000 0.986999 96.010000 0.981734 96.040000 0.975586 96.070000 0.968559 96.100000 0.960661 96.130000 0.951898 96.160000 0.942279 96.190000 0.931811 96.220000 0.920506 96.250000 0.908371 96.280000 0.895419 96.310000 0.881662 96.340000 0.867111 96.370000 0.851779 96.400000 0.835681 96.430000 0.818831 96.460000 0.801244 96.490000 0.782937 96.520000 0.763924 96.550000 0.744224 96.580000 0.723854 96.610000 0.702833 96.640000 0.681179 96.670000 0.658913 96.700000 0.636053 96.730000 0.612621 96.760000 0.588637 96.790000 0.564124 96.820000 0.539103 96.850000 0.513597 96.880000 0.487629 96.910000 0.461222 96.940000 0.434400 96.970000 0.407187 97.000000 0.379608 97.030000 0.351687 97.060000 0.323449 97.090000 0.294920 97.120000 0.266126 97.150000 0.237093 97.180000 0.207846 97.210000 0.178412 97.240000 0.148817 97.270000 0.119089 97.300000 0.089253 97.330000 0.059337 97.360000 0.029368 97.390000 -0.000628 97.420000 -0.030623 97.450000 -0.060591 97.480000 -0.090504 97.510000 -0.120335 97.540000 -0.150059 97.570000 -0.179647 97.600000 -0.209074 97.630000 -0.238312 97.660000 -0.267336 97.690000 -0.296120 97.720000 -0.324637 97.750000 -0.352862 97.780000 -0.380769 97.810000 -0.408334 97.840000 -0.435531 97.870000 -0.462336 97.900000 -0.488725 97.930000 -0.514674 97.960000 -0.540160 97.990000 -0.565160 98.020000 -0.589652 98.050000 -0.613613 98.080000 -0.637021 98.110000 -0.659856 98.140000 -0.682098 98.170000 -0.703726 98.200000 -0.724720 98.230000 -0.745062 98.260000 -0.764734 98.290000 -0.783717 98.320000 -0.801995 98.350000 -0.819551 98.380000 -0.836370 98.410000 -0.852436 98.440000 -0.867735 98.470000 -0.882254 98.500000 -0.895978 98.530000 -0.908895 98.560000 -0.920995 98.590000 -0.932266 98.620000 -0.942698 98.650000 -0.952282 98.680000 -0.961009 98.710000 -0.968871 98.740000 -0.975861 98.770000 -0.981972 98.800000 -0.987200 98.830000 -0.991540 98.860000 -0.994987 98.890000 -0.997539 98.920000 -0.999193 98.950000 -0.999948 98.980000 -0.999803 99.010000 -0.998759 99.040000 -0.996815 99.070000 -0.993975 99.100000 -0.990240 99.130000 -0.985613 99.160000 -0.980100 99.190000 -0.973705 99.220000 -0.966433 99.250000 -0.958292 99.280000 -0.949288 99.310000 -0.939431 99.340000 -0.928727 99.370000 -0.917188 99.400000 -0.904823 99.430000 -0.891645 99.460000 -0.877663 99.490000 -0.862892 99.520000 -0.847345 99.550000 -0.831034 99.580000 -0.813976 99.610000 -0.796186 99.640000 -0.777679 99.670000 -0.758472 99.700000 -0.738582 99.730000 -0.718028 99.760000 -0.696828 99.790000 -0.675000 99.820000 -0.652565 99.850000 -0.629543 99.880000 -0.605954 99.910000 -0.581820 99.940000 -0.557163 99.970000 -0.532003 jgraph-83.orig/sin3.jgr100664 1750 50 1166 6273276355 13457 0ustar osirissrc(* This is the same as sin.jgr only a different include file of points is used: This one orders the points by ascending y value instead of ascending x value. The graph looks quite different *) newgraph yaxis min -1 max 1 label : sin(i) xaxis min -10 max 10 label : i (* Plot the sin curve *) curve 1 marktype none linetype solid pts include sin3.pts (* sin.pts was created by the following c program: #include main(); { double x; for (x = -10.0; x < 10.0; x += .03) printf("%f %f\n", x, sin(x)); } * and then the output was piped through sort -n +1 *) jgraph-83.orig/sin3.pts100664 1750 50 30601 6273276355 13517 0ustar osirissrc-1.570000 -1.000000 4.700000 -0.999923 -7.840000 -0.999902 -7.870000 -0.999872 4.730000 -0.999845 -1.600000 -0.999574 -1.540000 -0.999526 4.670000 -0.999102 -7.810000 -0.999033 -7.900000 -0.998941 4.760000 -0.998867 -1.630000 -0.998248 -1.510000 -0.998152 4.640000 -0.997381 -7.780000 -0.997265 -7.930000 -0.997112 4.790000 -0.996990 -1.660000 -0.996024 -1.480000 -0.995881 4.610000 -0.994763 -7.750000 -0.994599 -7.960000 -0.994385 4.820000 -0.994216 -1.690000 -0.992904 -1.450000 -0.992713 4.580000 -0.991249 -7.720000 -0.991038 -7.990000 -0.990764 4.850000 -0.990547 -1.720000 -0.988890 -1.420000 -0.988652 4.550000 -0.986844 -7.690000 -0.986585 -8.020000 -0.986251 4.880000 -0.985986 -1.750000 -0.983986 -1.390000 -0.983701 4.520000 -0.981550 -7.660000 -0.981244 -8.050000 -0.980850 4.910000 -0.980538 -1.780000 -0.978197 -1.360000 -0.977865 4.490000 -0.975373 -7.630000 -0.975021 -8.080000 -0.974566 4.940000 -0.974208 -1.810000 -0.971527 -1.330000 -0.971148 4.460000 -0.968319 -7.600000 -0.967920 -8.110000 -0.967406 4.970000 -0.967001 -1.840000 -0.963983 -1.300000 -0.963558 4.430000 -0.960392 -7.570000 -0.959947 -8.140000 -0.959375 5.000000 -0.958924 -1.870000 -0.955572 -1.270000 -0.955101 4.400000 -0.951602 -7.540000 -0.951111 -8.170000 -0.950480 5.030000 -0.949984 -1.900000 -0.946300 -1.240000 -0.945784 4.370000 -0.941955 -7.510000 -0.941419 -8.200000 -0.940731 5.060000 -0.940189 -1.930000 -0.936177 -1.210000 -0.935616 4.340000 -0.931461 -7.480000 -0.930880 -8.230000 -0.930134 5.090000 -0.929548 -1.960000 -0.925212 -1.180000 -0.924606 4.310000 -0.920128 -7.450000 -0.919503 -8.260000 -0.918701 5.120000 -0.918070 -1.990000 -0.913413 -1.150000 -0.912764 4.280000 -0.907967 -7.420000 -0.907299 -8.290000 -0.906440 5.150000 -0.905767 -2.020000 -0.900793 -1.120000 -0.900100 4.250000 -0.894989 -7.390000 -0.894278 -8.320000 -0.893364 5.180000 -0.892648 -2.050000 -0.887362 -1.090000 -0.886627 4.220000 -0.881206 -7.360000 -0.880452 -8.350000 -0.879484 5.210000 -0.878725 -2.080000 -0.873133 -1.060000 -0.872355 4.190000 -0.866630 -7.330000 -0.865834 -8.380000 -0.864813 5.240000 -0.864012 -2.110000 -0.858118 -1.030000 -0.857299 4.160000 -0.851273 -7.300000 -0.850437 -8.410000 -0.849363 5.270000 -0.848522 -2.140000 -0.842330 -1.000000 -0.841471 4.130000 -0.835151 -7.270000 -0.834274 -8.440000 -0.833149 5.300000 -0.832267 -2.170000 -0.825785 -0.970000 -0.824886 4.100000 -0.818277 -7.240000 -0.817361 -8.470000 -0.816185 5.330000 -0.815264 -2.200000 -0.808496 -0.940000 -0.807558 4.070000 -0.800667 -7.210000 -0.799712 -8.500000 -0.798487 5.360000 -0.797527 -2.230000 -0.790480 -0.910000 -0.789504 4.040000 -0.782336 -7.180000 -0.781343 -8.530000 -0.780070 5.390000 -0.779073 -2.260000 -0.771753 -0.880000 -0.770739 4.010000 -0.763301 -7.150000 -0.762271 -8.560000 -0.760951 5.420000 -0.759917 -2.290000 -0.752331 -0.850000 -0.751280 3.980000 -0.743579 -7.120000 -0.742513 -8.590000 -0.741147 5.450000 -0.740077 -2.320000 -0.732231 -0.820000 -0.731146 3.950000 -0.723188 -7.090000 -0.722087 -8.620000 -0.720677 5.480000 -0.719572 -2.350000 -0.711473 -0.790000 -0.710353 3.920000 -0.702146 -7.060000 -0.701011 -8.650000 -0.699557 5.510000 -0.698418 -2.380000 -0.690075 -0.760000 -0.688921 3.890000 -0.680473 -7.030000 -0.679305 -8.680000 -0.677809 5.540000 -0.676637 -2.410000 -0.668056 -0.730000 -0.666870 3.860000 -0.658186 -7.000000 -0.656987 -8.710000 -0.655450 5.570000 -0.654246 -2.440000 -0.645435 -0.700000 -0.644218 3.830000 -0.635308 -6.970000 -0.634077 -8.740000 -0.632501 5.600000 -0.631267 -2.470000 -0.622234 -0.670000 -0.620986 3.800000 -0.611858 -6.940000 -0.610597 -8.770000 -0.608983 5.630000 -0.607719 -2.500000 -0.598472 -0.640000 -0.597195 3.770000 -0.587857 -6.910000 -0.586568 -8.800000 -0.584917 5.660000 -0.583625 -2.530000 -0.574172 -0.610000 -0.572867 3.740000 -0.563327 -6.880000 -0.562011 -8.830000 -0.560325 5.690000 -0.559005 -2.560000 -0.549355 -0.580000 -0.548024 3.710000 -0.538291 -6.850000 -0.536948 -8.860000 -0.535228 5.720000 -0.533882 9.980000 -0.527132 -2.590000 -0.524044 -0.550000 -0.522687 3.680000 -0.512769 -6.820000 -0.511401 -8.890000 -0.509650 5.750000 -0.508279 9.950000 -0.501405 -2.620000 -0.498262 -0.520000 -0.496880 3.650000 -0.486787 -6.790000 -0.485395 -8.920000 -0.483613 5.780000 -0.482218 9.920000 -0.475227 -2.650000 -0.472031 -0.490000 -0.470626 3.620000 -0.460366 -6.760000 -0.458951 -8.950000 -0.457141 5.810000 -0.455724 9.890000 -0.448621 -2.680000 -0.445375 -0.460000 -0.443948 3.590000 -0.433531 -6.730000 -0.432095 -8.980000 -0.430257 5.840000 -0.428819 9.860000 -0.421612 -2.710000 -0.418318 -0.430000 -0.416871 3.560000 -0.406306 -6.700000 -0.404850 -9.010000 -0.402987 5.870000 -0.401529 9.830000 -0.394223 -2.740000 -0.390885 -0.400000 -0.389418 3.530000 -0.378715 -6.670000 -0.377240 -9.040000 -0.375353 5.900000 -0.373877 9.800000 -0.366479 -2.770000 -0.363100 -0.370000 -0.361615 3.500000 -0.350783 -6.640000 -0.349291 -9.070000 -0.347382 5.930000 -0.345888 9.770000 -0.338406 -2.800000 -0.334988 -0.340000 -0.333487 3.470000 -0.322536 -6.610000 -0.321028 -9.100000 -0.319098 5.960000 -0.317589 9.740000 -0.310028 -2.830000 -0.306575 -0.310000 -0.305059 3.440000 -0.293998 -6.580000 -0.292476 -9.130000 -0.290527 5.990000 -0.289003 9.710000 -0.281371 -2.860000 -0.277886 -0.280000 -0.276356 3.410000 -0.265196 -6.550000 -0.263660 -9.160000 -0.261695 6.020000 -0.260157 9.680000 -0.252460 -2.890000 -0.248947 -0.250000 -0.247404 3.380000 -0.236155 -6.520000 -0.234607 -9.190000 -0.232627 6.050000 -0.231078 9.650000 -0.223323 -2.920000 -0.219784 -0.220000 -0.218230 3.350000 -0.206902 -6.490000 -0.205344 -9.220000 -0.203350 6.080000 -0.201790 9.620000 -0.193984 -2.950000 -0.190423 -0.190000 -0.188859 3.320000 -0.177462 -6.460000 -0.175895 -9.250000 -0.173889 6.110000 -0.172321 9.590000 -0.164471 -2.980000 -0.160890 -0.160000 -0.159318 3.290000 -0.147863 -6.430000 -0.146288 -9.280000 -0.144273 6.140000 -0.142697 9.560000 -0.134810 -3.010000 -0.131213 -0.130000 -0.129634 3.260000 -0.118131 -6.400000 -0.116549 -9.310000 -0.114526 6.170000 -0.112944 9.530000 -0.105028 -3.040000 -0.101418 -0.100000 -0.099833 3.230000 -0.088292 -6.370000 -0.086706 -9.340000 -0.084676 6.200000 -0.083089 9.500000 -0.075151 -3.070000 -0.071532 -0.070000 -0.069943 3.200000 -0.058374 -6.340000 -0.056784 -9.370000 -0.054751 6.230000 -0.053160 9.470000 -0.045207 -3.100000 -0.041581 -0.040000 -0.039989 3.170000 -0.028404 -6.310000 -0.026811 -9.400000 -0.024775 6.260000 -0.023183 9.440000 -0.015221 -3.130000 -0.011592 -0.010000 -0.010000 3.140000 0.001593 -6.280000 0.003185 -9.430000 0.005222 6.290000 0.006815 9.410000 0.014777 -3.160000 0.018406 0.020000 0.019999 3.110000 0.031587 -6.250000 0.033179 -9.460000 0.035215 6.320000 0.036806 9.380000 0.044763 -3.190000 0.048388 0.050000 0.049979 3.080000 0.061554 -6.220000 0.063143 -9.490000 0.065176 6.350000 0.066765 9.350000 0.074708 -3.220000 0.078327 0.080000 0.079915 3.050000 0.091465 -6.190000 0.093051 -9.520000 0.095078 6.380000 0.096664 9.320000 0.104586 -3.250000 0.108195 0.110000 0.109778 3.020000 0.121293 -6.160000 0.122874 -9.550000 0.124895 6.410000 0.126475 9.290000 0.134370 -3.280000 0.137966 0.140000 0.139543 2.990000 0.151013 -6.130000 0.152587 -9.580000 0.154599 6.440000 0.156173 9.260000 0.164033 -3.310000 0.167612 0.170000 0.169182 2.960000 0.180596 -6.100000 0.182163 -9.610000 0.184165 6.470000 0.185730 9.230000 0.193549 -3.340000 0.197108 0.200000 0.198669 2.930000 0.210017 -6.070000 0.211574 -9.640000 0.213564 6.500000 0.215120 9.200000 0.222890 -3.370000 0.226427 0.230000 0.227978 2.900000 0.239249 -6.040000 0.240795 -9.670000 0.242772 6.530000 0.244316 9.170000 0.252031 -3.400000 0.255541 0.260000 0.257081 2.870000 0.268266 -6.010000 0.269800 -9.700000 0.271761 6.560000 0.273293 9.140000 0.280944 -3.430000 0.284426 0.290000 0.285952 2.840000 0.297041 -5.980000 0.298562 -9.730000 0.300505 6.590000 0.302024 9.110000 0.309605 -3.460000 0.313054 0.320000 0.314567 2.810000 0.325549 -5.950000 0.327055 -9.760000 0.328979 6.620000 0.330482 9.080000 0.337988 -3.490000 0.341401 0.350000 0.342898 2.780000 0.353764 -5.920000 0.355254 -9.790000 0.357157 6.650000 0.358644 9.050000 0.366066 -3.520000 0.369441 0.380000 0.370920 2.750000 0.381661 -5.890000 0.383133 -9.820000 0.385013 6.680000 0.386483 9.020000 0.393815 -3.550000 0.397148 0.410000 0.398609 2.720000 0.409214 -5.860000 0.410667 -9.850000 0.412523 6.710000 0.413973 8.990000 0.421209 -3.580000 0.424498 0.440000 0.425939 2.690000 0.436399 -5.830000 0.437832 -9.880000 0.439662 6.740000 0.441092 8.960000 0.448224 -3.610000 0.451466 0.470000 0.452886 2.660000 0.463191 -5.800000 0.464602 -9.910000 0.466405 6.770000 0.467813 8.930000 0.474836 -3.640000 0.478027 0.500000 0.479426 2.630000 0.489567 -5.770000 0.490955 -9.940000 0.492728 6.800000 0.494113 8.900000 0.501021 -3.670000 0.504159 0.530000 0.505533 2.600000 0.515501 -5.740000 0.516865 -9.970000 0.518608 6.830000 0.519969 8.870000 0.526755 -3.700000 0.529836 0.560000 0.531186 2.570000 0.540972 -5.710000 0.542311 -10.000000 0.544021 6.860000 0.545357 8.840000 0.552014 -3.730000 0.555037 0.590000 0.556361 2.540000 0.565956 -5.680000 0.567269 6.890000 0.570254 8.810000 0.576777 -3.760000 0.579738 0.620000 0.581035 2.510000 0.590431 -5.650000 0.591716 6.920000 0.594637 8.780000 0.601021 -3.790000 0.603918 0.650000 0.605186 2.480000 0.614374 -5.620000 0.615630 6.950000 0.618486 8.750000 0.624724 -3.820000 0.627554 0.680000 0.628793 2.450000 0.637765 -5.590000 0.638991 6.980000 0.641778 8.720000 0.647865 -3.850000 0.650625 0.710000 0.651834 2.420000 0.660581 -5.560000 0.661776 7.010000 0.664493 8.690000 0.670422 -3.880000 0.673111 0.740000 0.674288 2.390000 0.682803 -5.530000 0.683966 7.040000 0.686609 8.660000 0.692377 -3.910000 0.694991 0.770000 0.696135 2.360000 0.704411 -5.500000 0.705540 7.070000 0.708108 8.630000 0.713708 -3.940000 0.716246 0.800000 0.717356 2.330000 0.725384 -5.470000 0.726480 7.100000 0.728969 8.600000 0.734397 -3.970000 0.736856 0.830000 0.737931 2.300000 0.745705 -5.440000 0.746765 7.130000 0.749174 8.570000 0.754425 -4.000000 0.756802 0.860000 0.757843 2.270000 0.765355 -5.410000 0.766379 7.160000 0.768705 8.540000 0.773774 -4.030000 0.776068 0.890000 0.777072 2.240000 0.784316 -5.380000 0.785303 7.190000 0.787545 8.510000 0.792427 -4.060000 0.794636 0.920000 0.795602 2.210000 0.802571 -5.350000 0.803520 7.220000 0.805675 8.480000 0.810367 -4.090000 0.812488 0.950000 0.813416 2.180000 0.820104 -5.320000 0.821014 7.250000 0.823081 8.450000 0.827577 -4.120000 0.829609 0.980000 0.830497 2.150000 0.836899 -5.290000 0.837769 7.280000 0.839746 8.420000 0.844043 -4.150000 0.845984 1.010000 0.846832 2.120000 0.852940 -5.260000 0.853771 7.310000 0.855655 8.390000 0.859749 -4.180000 0.861597 1.040000 0.862404 2.090000 0.868215 -5.230000 0.869004 7.340000 0.870794 8.360000 0.874681 -4.210000 0.876435 1.070000 0.877201 2.060000 0.882707 -5.200000 0.883455 7.370000 0.885149 8.330000 0.888827 -4.240000 0.890484 1.100000 0.891207 2.030000 0.896406 -5.170000 0.897111 7.400000 0.898708 8.300000 0.902172 -4.270000 0.903732 1.130000 0.904412 2.000000 0.909297 -5.140000 0.909959 7.430000 0.911458 8.270000 0.914705 -4.300000 0.916166 1.160000 0.916803 1.970000 0.921371 -5.110000 0.921989 7.460000 0.923388 8.240000 0.926415 -4.330000 0.927776 1.190000 0.928369 1.940000 0.932615 -5.080000 0.933189 7.490000 0.934487 8.210000 0.937292 -4.360000 0.938551 1.220000 0.939099 1.910000 0.943020 -5.050000 0.943549 7.520000 0.944745 8.180000 0.947325 -4.390000 0.948481 1.250000 0.948985 1.880000 0.952576 -5.020000 0.953060 7.550000 0.954152 8.150000 0.956506 -4.420000 0.957558 1.280000 0.958016 1.850000 0.961275 -4.990000 0.961713 7.580000 0.962701 8.120000 0.964825 -4.450000 0.965773 1.310000 0.966185 1.820000 0.969109 -4.960000 0.969501 7.610000 0.970384 8.090000 0.972277 -4.480000 0.973119 1.340000 0.973485 1.790000 0.976071 -4.930000 0.976416 7.640000 0.977193 8.060000 0.978853 -4.510000 0.979589 1.370000 0.979908 1.760000 0.982154 -4.900000 0.982453 7.670000 0.983123 8.030000 0.984549 -4.540000 0.985178 1.400000 0.985450 1.730000 0.987354 -4.870000 0.987605 7.700000 0.988168 8.000000 0.989358 -4.570000 0.989880 1.430000 0.990105 1.700000 0.991665 -4.840000 0.991869 7.730000 0.992324 7.970000 0.993277 -4.600000 0.993691 1.460000 0.993868 1.670000 0.995083 -4.810000 0.995240 7.760000 0.995587 7.940000 0.996303 -4.630000 0.996608 1.490000 0.996738 1.640000 0.997606 -4.780000 0.997715 7.790000 0.997954 7.910000 0.998431 -4.660000 0.998628 1.520000 0.998710 1.610000 0.999232 -4.750000 0.999293 7.820000 0.999423 7.880000 0.999662 -4.690000 0.999749 1.550000 0.999784 1.580000 0.999958 -4.720000 0.999971 7.850000 0.999992 jgraph-83.orig/token.c100664 1750 50 17321 6273276355 13403 0ustar osirissrc/* * $Source: /tmp_mnt/n/fs/grad1/jsp/src/jgraph/RCS/token.c,v $ * $Revision: 8.3 $ * $Date: 92/11/30 11:42:42 $ * $Author: jsp $ */ #include #include #ifdef LCC #include #endif #ifdef VMS #include #include #endif #include "list.h" #define CNULL ((char *)0) typedef struct iostack { struct iostack *flink; struct iostack *blink; char *filename; FILE *stream; int oldcharvalid; char oldchar; char pipe; int line; } *Iostack; static char INPUT[1000]; static int getnew = 1; static char oldchar = '\0'; static oldcharvalid = 0; static char pipe = 0; static int eof = 0; static int init = 0; static Iostack stack; static char real_eof = EOF; static FILE *IOSTREAM; static char FILENAME[300]; static int line = 1; #ifdef VMS /* On VMS, there are no popen() and pclose(), so we provide dummies here. */ FILE *popen(command, type) char *command, *type; { return(NULL); } int pclose(stream) FILE *stream; { return(-1); } #endif /*VMS*/ set_input_file(s) char *s; { FILE *f; Iostack n; if (init == 0) { stack = (Iostack) make_list(sizeof(struct iostack)); if (s == CNULL) { IOSTREAM = stdin; strcpy(FILENAME, ""); } else { IOSTREAM = fopen(s, "r"); if (IOSTREAM == NULL) { fprintf(stderr, "Error: cannot open file \"%s\"\n", s); exit(1); } strcpy(FILENAME, s); } init = 1; } else { n = (Iostack) get_node(stack); n->stream = NULL; n->filename = (char *) malloc (sizeof(char)*(strlen(s)+2)); strcpy(n->filename, s); n->oldchar = oldchar; n->oldcharvalid = oldcharvalid; n->pipe = pipe; n->line = line; insert(n, stack->flink); } } error_header() { fprintf(stderr, "%s,%d: ", FILENAME, line); } int gettokenchar() { if (oldcharvalid == 0) oldchar = getc(IOSTREAM); oldcharvalid = 0; if (oldchar == '\n') line++; return oldchar; } ungettokenchar() { oldcharvalid = 1; if (oldchar == '\n') line--; } int gettoken(s) char *s; { int i; char c; for (c = gettokenchar(); c == ' ' || c == '\t' || c == '\n'; c = gettokenchar()) ; for (i = 0; c != real_eof && c != ' ' && c != '\t' && c != '\n'; c = gettokenchar()) { s[i++] = c; } s[i] = '\0'; ungettokenchar(); return i; } get_comment() { if (eof) return; while (1) { if (gettoken(INPUT) == 0) return; else if (strcmp(INPUT, "(*") == 0) get_comment(); else if (strcmp(INPUT, "*)") == 0) return; } } static int iostackempty() { return (first(stack) == nil(stack)); } static push_iostack(p) int p; { Iostack n; n = (Iostack) get_node(stack); n->stream = IOSTREAM; n->filename = (char *) malloc (sizeof(char)*(strlen(FILENAME)+2)); n->oldchar = oldchar; n->oldcharvalid = oldcharvalid; n->pipe = pipe; n->line = line; strcpy(n->filename, FILENAME); insert(n, stack); if (p) { IOSTREAM = (FILE *) popen(INPUT, "r"); } else { IOSTREAM = fopen(INPUT, "r"); } pipe = p; line = 1; if (IOSTREAM == NULL) { error_header(); fprintf(stderr, "Include file \"%s\" does not exist\n", INPUT); exit(1); } strcpy(FILENAME, INPUT); } static pop_iostack() { Iostack n; fflush(IOSTREAM); if (pipe) { if (pclose(IOSTREAM)) { /*error_header(); fprintf(stderr, "\n\nPipe returned a non-zero error code.\n"); exit(1); */ } } else { fclose(IOSTREAM); } n = last(stack); if (n->stream == NULL) { n->stream = fopen(n->filename, "r"); if (n->stream == NULL) { fprintf(stderr, "Error: cannot open file \"%s\"\n", n->stream); exit(1); } } IOSTREAM = n->stream; strcpy(FILENAME, n->filename); free(n->filename); pipe = n->pipe; line = n->line; oldchar = n->oldchar; oldcharvalid = n->oldcharvalid; delete_item(n); free_node(n, stack); } static nexttoken() { if (eof) return; if (getnew) { while (1) { if (gettoken(INPUT) == 0) { if (iostackempty()) { eof = 1; getnew = 0; return; } else { pop_iostack(); } } else if (strcmp(INPUT, "(*") == 0) { get_comment(); } else if (strcmp(INPUT, "include") == 0) { if (gettoken(INPUT) == 0) { error_header(); fprintf(stderr, "Empty include statement\n"); exit(1); } else { push_iostack(0); } } else if (strcmp(INPUT, "shell") == 0) { #ifdef VMS fprintf(stderr, "No shell option on VMS, sorry.\n"); exit(1); #endif /*VMS*/ if (gettoken(INPUT) == 0 || strcmp(INPUT, ":") != 0) { error_header(); fprintf(stderr, "'shell' must be followed by ':'\n"); exit(1); } if (getsystemstring() == 0) { fprintf(stderr, "Empty shell statement\n"); exit(1); } push_iostack(1); } else { getnew = 1; return; } } } getnew = 1; return; } int getstring(s) char *s; { nexttoken(); if (eof) return 0; strcpy(s, INPUT); return 1; } int getint(i) int *i; { int j; nexttoken(); if (eof) return 0; *i = atoi(INPUT); if (*i == 0) { for (j = 0; INPUT[j] != '\0'; j++) if (INPUT[j] != '0') return 0; } return 1; } int getfloat(f) float *f; { int j; nexttoken(); if (eof) return 0; *f = (float) atof(INPUT); if (*f == 0.0) { for (j = 0; INPUT[j] == '-'; j++); while (INPUT[j] == '0') j++; if (INPUT[j] == '.') j++; while (INPUT[j] == '0') j++; if (INPUT[j] == 'e' || INPUT[j] == 'E') { j++; if (INPUT[j] == '+' || INPUT[j] == '-') j++; while (INPUT[j] == '0') j++; } return (INPUT[j] == '\0'); } else return 1; } static char *new_printable_text(s) char *s; { char *new_s; int to_pad, i, j; to_pad = 0; for (i = 0; s[i] != '\0'; i++) { if (s[i] == '\\' || s[i] == ')' || s[i] == '(') { to_pad++; } } j = sizeof(char) * (i + to_pad + 2); if ((j % 8) != 0) j += 8 - j % 8; new_s = (char *) malloc (j); j = 0; for (i = 0; s[i] != '\0'; i++) { if (s[i] == '\\' || s[i] == ')' || s[i] == '(') { new_s[j++] = '\\'; } new_s[j++] = s[i]; } new_s[j] = '\0'; /* added: tie off -hdd */ return new_s; } char *getmultiline() { char c; int i, j, done, len, started; char *out_str; if (getnew == 0) return CNULL; c = gettokenchar(); if (c == real_eof) { ungettokenchar(); return CNULL; } done = 0; started = 0; while (!done) { i = 0; for (c = gettokenchar(); c != real_eof && c != '\n'; c = gettokenchar()) { INPUT[i++] = c; } INPUT[i] = '\0'; if (!started) { out_str = (char *) malloc (sizeof(char)*(i+1)); strcpy(out_str, INPUT); len = i; started = 1; } else { out_str = (char *) realloc(out_str, (len + i + 3) * sizeof(char)); sprintf(&(out_str[len]), "\n%s", INPUT); len += i+1; } if (c == '\n' && len != 0 && out_str[len-1] == '\\') { len--; } else { done = 1; } } ungettokenchar(); return out_str; } char *getlabel() { char c; char *txt, *new; int i; txt = getmultiline(); if (txt == CNULL) return CNULL; new = new_printable_text(txt); free(txt); return new; } int getsystemstring() { char c; int i; int done; if (getnew == 0) return 0; c = gettokenchar(); if (c == real_eof) { ungettokenchar(); return 0; } i = 0; done = 0; while (!done) { for (c = gettokenchar(); c != real_eof && c != '\n'; c = gettokenchar()) { INPUT[i++] = c; } if (c == '\n' && i > 0 && INPUT[i-1] == '\\') { INPUT[i++] = '\n'; } else { done = 1; } } ungettokenchar(); INPUT[i] = '\0'; return 1; } rejecttoken() { getnew = 0; } jgraph-83.orig/tree.awk100664 1750 50 2435 6273276355 13542 0ustar osirissrc# This is an nawk script for plotting m-level n-ary trees in jgraph. # For each line of input, it will produce a new jgraph. The line must # contain two numbers: m and n, separated by white-space. # # Two nice outputs of this are: # # ( echo "4 3" | nawk -f tree.awk ; echo "xaxis size 5.4" ) | jgraph -P # # and # ( echo "5 2" | nawk -f tree.awk ; echo "xaxis size 5" ) | jgraph -P # { m = $1 n = $2 printf("newgraph xaxis nodraw yaxis nodraw\n") k = 0 for (j = 0; j < m; j++) { if (j == 0) { numleaves = n ^ (m - 1) for (i = 0; i < numleaves; i++) newleafloc[i] = i } else { numleaves = numleaves / n for (i = 0; i < numleaves; i++) { newleafloc[i] = (oldleafloc[i*n] + oldleafloc[i*n+n-1]) / 2.0 } } for (i = 0; i < numleaves; i++) { printf("newcurve marktype box marksize 0.6 0.4 fill 1 pts %f %f\n", newleafloc[i], j) printf("newstring x %f y %f hjc vjc fontsize 6 : %d\n", newleafloc[i], j, ++k) if (j > 0) { for (l = 0; l < n; l++) { printf("newcurve marktype none linetype solid pts %f %f %f %f\n", newleafloc[i], j-.2, oldleafloc[i*n+l], j-.8) } } } for (i = 0; i < numleaves; i++) { oldleafloc[i] = newleafloc[i] } } } jgraph-83.orig/wortman.jgr100664 1750 50 53747 6273276356 14327 0ustar osirissrc(* From dw@dragon.fly.toronto.edu Fri Jul 17 12:02:25 1992 Received: from Princeton.EDU by fs.Princeton.EDU (4.1/1.105) id AA19140; Fri, 17 Jul 92 12:02:22 EDT Received: from dragon.fly.toronto.edu by Princeton.EDU (5.65b/2.93/princeton) id AA18519; Fri, 17 Jul 92 12:01:51 -0400 Received: by dragon.fly.toronto.edu id <39023>; Fri, 17 Jul 1992 12:01:33 -0400 From: Dave Wortman To: jsp@Princeton.EDU Subject: jgraph source for Wortman PLDI92 activity bar figure Cc: dw@dragon.fly.toronto.edu Message-Id: <92Jul17.120133edt.39023@dragon.fly.toronto.edu> Date: Fri, 17 Jul 1992 12:01:32 -0400 Status: R Here is the source for the final version of the figure. FYI it was generated by an awk program that post processed trace data generated by the concurrent compiler. ============================================================================ *) newgraph yaxis size 7.5 min 0 max 8.500000 gray 0.000000 hash 0.0 label fontsize 16 : Processor hash_labels fontsize 18 hash_label at 1.0 : 1 hash_label at 2.0 : 2 hash_label at 3.0 : 3 hash_label at 4.0 : 4 hash_label at 5.0 : 5 hash_label at 6.0 : 6 hash_label at 7.0 : 7 hash_label at 8.0 : 8 xaxis size 7.5 min 0 max 4232 gray 0 label fontsize 16 : Time (clock ticks) legend custom linelength 500.0 newcurve marktype box fill 0.2 marksize 300.0 0.4 label vjt hjl x 500.0 y -1.0 fontsize 12 : Lexical Analysis newcurve marktype box fill 0.5 marksize 300.0 0.4 label vjt hjl x 500.0 y -1.5 fontsize 12 : Import newcurve marktype box fill 0.95 marksize 300.0 0.4 label vjt hjl x 1800.0 y -1.0 fontsize 12 : Splitter newcurve marktype box fill 0.7 marksize 300.0 0.4 label vjt hjl x 1800.0 y -1.5 fontsize 12 : Parse/Dcl Analysis newcurve marktype box fill 0.4 marksize 300.0 0.4 label vjt hjl x 3100.0 y -1.0 fontsize 12 : Stmt Processing newcurve marktype box fill 0.8 marksize 300.0 0.4 label vjt hjl x 3100.0 y -1.5 fontsize 12 : Merge newcurve marktype box fill 0.200000 linethickness 0.0 marksize 1350 0.400000 pts 714 1 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 53 0.400000 pts 1651 1.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 28 0.400000 pts 1693 1.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 183 0.400000 pts 1799 1.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 36 0.400000 pts 1911 1.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 71 0.400000 pts 1966 1.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 30 0.400000 pts 2018 1.000000 newcurve marktype box fill 0.400000 linethickness 0.0 marksize 782 0.400000 pts 2426 1.000000 newcurve marktype box fill 0.400000 linethickness 0.0 marksize 101 0.400000 pts 2868 1.000000 newcurve marktype box fill 0.400000 linethickness 0.0 marksize 63 0.400000 pts 2950 1.000000 newcurve marktype box fill 0.400000 linethickness 0.0 marksize 140 0.400000 pts 3054 1.000000 newcurve marktype box fill 0.400000 linethickness 0.0 marksize 159 0.400000 pts 3204 1.000000 newcurve marktype box fill 0.400000 linethickness 0.0 marksize 99 0.400000 pts 3334 1.000000 newcurve marktype box fill 0.400000 linethickness 0.0 marksize 181 0.400000 pts 3475 1.000000 newcurve marktype box fill 0.400000 linethickness 0.0 marksize 64 0.400000 pts 3599 1.000000 newcurve marktype box fill 0.400000 linethickness 0.0 marksize 135 0.400000 pts 3699 1.000000 newcurve marktype box fill 0.400000 linethickness 0.0 marksize 368 0.400000 pts 3953 1.000000 newcurve marktype box fill 0.800000 linethickness 0.0 marksize 72 0.400000 pts 4174 1.000000 newcurve marktype box fill 0.200000 linethickness 0.0 marksize 114 0.400000 pts 154 2 newcurve marktype box fill 0.200000 linethickness 0.0 marksize 91 0.400000 pts 256 2 newcurve marktype box fill 0.200000 linethickness 0.0 marksize 101 0.400000 pts 354 2 newcurve marktype box fill 0.500000 linethickness 0.0 marksize 8 0.400000 pts 411 2.000000 newcurve marktype box fill 0.500000 linethickness 0.0 marksize 8 0.400000 pts 420 2.000000 newcurve marktype box fill 0.500000 linethickness 0.0 marksize 9 0.400000 pts 429 2.000000 newcurve marktype box fill 0.500000 linethickness 0.0 marksize 25 0.400000 pts 447 2.000000 newcurve marktype box fill 0.200000 linethickness 0.0 marksize 50 0.400000 pts 485 2 newcurve marktype box fill 0.500000 linethickness 0.0 marksize 8 0.400000 pts 515 2.000000 newcurve marktype box fill 0.500000 linethickness 0.0 marksize 6 0.400000 pts 522 2.000000 newcurve marktype box fill 0.500000 linethickness 0.0 marksize 28 0.400000 pts 539 2.000000 newcurve marktype box fill 0.200000 linethickness 0.0 marksize 59 0.400000 pts 583 2 newcurve marktype box fill 0.200000 linethickness 0.0 marksize 70 0.400000 pts 650 2 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 6 0.400000 pts 689 2.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 82 0.400000 pts 737 2.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 110 0.400000 pts 835 2.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 67 0.400000 pts 1249 2.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 30 0.400000 pts 1655 2.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 16 0.400000 pts 1679 2.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 33 0.400000 pts 1704 2.000000 newcurve marktype box fill 0.400000 linethickness 0.0 marksize 80 0.400000 pts 1765 2.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 16 0.400000 pts 1816 2.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 10 0.400000 pts 1830 2.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 6 0.400000 pts 1839 2.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 7 0.400000 pts 1847 2.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 9 0.400000 pts 1855 2.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 33 0.400000 pts 1877 2.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 15 0.400000 pts 1902 2.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 18 0.400000 pts 1921 2.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 31 0.400000 pts 1946 2.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 54 0.400000 pts 1992 2.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 61 0.400000 pts 2051 2.000000 newcurve marktype box fill 0.400000 linethickness 0.0 marksize 916 0.400000 pts 2542 2.000000 newcurve marktype box fill 0.400000 linethickness 0.0 marksize 144 0.400000 pts 3073 2.000000 newcurve marktype box fill 0.400000 linethickness 0.0 marksize 178 0.400000 pts 3235 2.000000 newcurve marktype box fill 0.400000 linethickness 0.0 marksize 181 0.400000 pts 3415 2.000000 newcurve marktype box fill 0.400000 linethickness 0.0 marksize 147 0.400000 pts 3581 2.000000 newcurve marktype box fill 0.400000 linethickness 0.0 marksize 137 0.400000 pts 3724 2.000000 newcurve marktype box fill 0.500000 linethickness 0.0 marksize 44 0.400000 pts 149 3.000000 newcurve marktype box fill 0.200000 linethickness 0.0 marksize 142 0.400000 pts 243 3 newcurve marktype box fill 0.500000 linethickness 0.0 marksize 5 0.400000 pts 317 3.000000 newcurve marktype box fill 0.200000 linethickness 0.0 marksize 105 0.400000 pts 372 3 newcurve marktype box fill 0.500000 linethickness 0.0 marksize 5 0.400000 pts 428 3.000000 newcurve marktype box fill 0.200000 linethickness 0.0 marksize 67 0.400000 pts 465 3 newcurve marktype box fill 0.500000 linethickness 0.0 marksize 9 0.400000 pts 504 3.000000 newcurve marktype box fill 0.200000 linethickness 0.0 marksize 82 0.400000 pts 550 3 newcurve marktype box fill 0.200000 linethickness 0.0 marksize 74 0.400000 pts 631 3 newcurve marktype box fill 0.500000 linethickness 0.0 marksize 6 0.400000 pts 672 3.000000 newcurve marktype box fill 0.200000 linethickness 0.0 marksize 41 0.400000 pts 696 3 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 28 0.400000 pts 732 3.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 17 0.400000 pts 755 3.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 72 0.400000 pts 802 3.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 25 0.400000 pts 852 3.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 8 0.400000 pts 872 3.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 2 0.400000 pts 1328 3.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 538 0.400000 pts 1792 3.000000 newcurve marktype box fill 0.400000 linethickness 0.0 marksize 840 0.400000 pts 2486 3.000000 newcurve marktype box fill 0.400000 linethickness 0.0 marksize 486 0.400000 pts 3150 3.000000 newcurve marktype box fill 0.400000 linethickness 0.0 marksize 178 0.400000 pts 3484 3.000000 newcurve marktype box fill 0.400000 linethickness 0.0 marksize 54 0.400000 pts 3602 3.000000 newcurve marktype box fill 0.400000 linethickness 0.0 marksize 121 0.400000 pts 3690 3.000000 newcurve marktype box fill 0.400000 linethickness 0.0 marksize 176 0.400000 pts 3840 3.000000 newcurve marktype box fill 0.200000 linethickness 0.0 marksize 174 0.400000 pts 226 4 newcurve marktype box fill 0.500000 linethickness 0.0 marksize 6 0.400000 pts 317 4.000000 newcurve marktype box fill 0.500000 linethickness 0.0 marksize 11 0.400000 pts 327 4.000000 newcurve marktype box fill 0.200000 linethickness 0.0 marksize 42 0.400000 pts 355 4 newcurve marktype box fill 0.200000 linethickness 0.0 marksize 79 0.400000 pts 416 4 newcurve marktype box fill 0.200000 linethickness 0.0 marksize 73 0.400000 pts 494 4 newcurve marktype box fill 0.200000 linethickness 0.0 marksize 73 0.400000 pts 568 4 newcurve marktype box fill 0.200000 linethickness 0.0 marksize 48 0.400000 pts 630 4 newcurve marktype box fill 0.500000 linethickness 0.0 marksize 6 0.400000 pts 658 4.000000 newcurve marktype box fill 0.500000 linethickness 0.0 marksize 16 0.400000 pts 670 4.000000 newcurve marktype box fill 0.500000 linethickness 0.0 marksize 8 0.400000 pts 683 4.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 35 0.400000 pts 705 4.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 25 0.400000 pts 736 4.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 3 0.400000 pts 751 4.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 15 0.400000 pts 763 4.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 48 0.400000 pts 798 4.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 9 0.400000 pts 828 4.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 27 0.400000 pts 849 4.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 59 0.400000 pts 893 4.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 26 0.400000 pts 1645 4.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 14 0.400000 pts 1667 4.000000 newcurve marktype box fill 0.400000 linethickness 0.0 marksize 120 0.400000 pts 1736 4.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 12 0.400000 pts 1803 4.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 21 0.400000 pts 1819 4.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 6 0.400000 pts 1834 4.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 7 0.400000 pts 1841 4.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 9 0.400000 pts 1852 4.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 6 0.400000 pts 1861 4.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 12 0.400000 pts 1871 4.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 22 0.400000 pts 1889 4.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 16 0.400000 pts 1909 4.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 8 0.400000 pts 1921 4.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 109 0.400000 pts 1980 4.000000 newcurve marktype box fill 0.400000 linethickness 0.0 marksize 765 0.400000 pts 2419 4.000000 newcurve marktype box fill 0.400000 linethickness 0.0 marksize 283 0.400000 pts 2945 4.000000 newcurve marktype box fill 0.400000 linethickness 0.0 marksize 190 0.400000 pts 3184 4.000000 newcurve marktype box fill 0.400000 linethickness 0.0 marksize 272 0.400000 pts 3417 4.000000 newcurve marktype box fill 0.400000 linethickness 0.0 marksize 55 0.400000 pts 3582 4.000000 newcurve marktype box fill 0.400000 linethickness 0.0 marksize 112 0.400000 pts 3667 4.000000 newcurve marktype box fill 0.400000 linethickness 0.0 marksize 65 0.400000 pts 3757 4.000000 newcurve marktype box fill 0.200000 linethickness 0.0 marksize 448 0.400000 pts 365 5 newcurve marktype box fill 0.200000 linethickness 0.0 marksize 70 0.400000 pts 625 5 newcurve marktype box fill 0.500000 linethickness 0.0 marksize 13 0.400000 pts 669 5.000000 newcurve marktype box fill 0.500000 linethickness 0.0 marksize 6 0.400000 pts 681 5.000000 newcurve marktype box fill 0.500000 linethickness 0.0 marksize 6 0.400000 pts 688 5.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 7 0.400000 pts 695 5.000000 newcurve marktype box fill 0.500000 linethickness 0.0 marksize 10 0.400000 pts 709 5.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 84 0.400000 pts 819 5.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 33 0.400000 pts 879 5.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 18 0.400000 pts 1663 5.000000 newcurve marktype box fill 0.400000 linethickness 0.0 marksize 152 0.400000 pts 1749 5.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 10 0.400000 pts 1831 5.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 9 0.400000 pts 1841 5.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 95 0.400000 pts 1894 5.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 12 0.400000 pts 1948 5.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 15 0.400000 pts 1962 5.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 123 0.400000 pts 2032 5.000000 newcurve marktype box fill 0.400000 linethickness 0.0 marksize 849 0.400000 pts 2519 5.000000 newcurve marktype box fill 0.400000 linethickness 0.0 marksize 544 0.400000 pts 3218 5.000000 newcurve marktype box fill 0.400000 linethickness 0.0 marksize 145 0.400000 pts 3564 5.000000 newcurve marktype box fill 0.400000 linethickness 0.0 marksize 103 0.400000 pts 3689 5.000000 newcurve marktype box fill 0.400000 linethickness 0.0 marksize 119 0.400000 pts 3801 5.000000 newcurve marktype box fill 0.200000 linethickness 0.0 marksize 282 0.400000 pts 287 6 newcurve marktype box fill 0.500000 linethickness 0.0 marksize 5 0.400000 pts 431 6.000000 newcurve marktype box fill 0.500000 linethickness 0.0 marksize 5 0.400000 pts 437 6.000000 newcurve marktype box fill 0.500000 linethickness 0.0 marksize 6 0.400000 pts 444 6.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 4 0.400000 pts 452 6.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 9 0.400000 pts 463 6.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 41 0.400000 pts 491 6.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 11 0.400000 pts 519 6.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 12 0.400000 pts 533 6.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 150 0.400000 pts 616 6.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 9 0.400000 pts 697 6.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 54 0.400000 pts 732 6.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 455 0.400000 pts 988 6.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 108 0.400000 pts 1273 6.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 67 0.400000 pts 1362 6.000000 newcurve marktype box fill 0.400000 linethickness 0.0 marksize 270 0.400000 pts 1793 6.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 18 0.400000 pts 1938 6.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 46 0.400000 pts 1970 6.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 20 0.400000 pts 2003 6.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 8 0.400000 pts 2018 6.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 10 0.400000 pts 2028 6.000000 newcurve marktype box fill 0.400000 linethickness 0.0 marksize 395 0.400000 pts 2231 6.000000 newcurve marktype box fill 0.400000 linethickness 0.0 marksize 514 0.400000 pts 2688 6.000000 newcurve marktype box fill 0.400000 linethickness 0.0 marksize 127 0.400000 pts 3009 6.000000 newcurve marktype box fill 0.400000 linethickness 0.0 marksize 243 0.400000 pts 3196 6.000000 newcurve marktype box fill 0.400000 linethickness 0.0 marksize 64 0.400000 pts 3352 6.000000 newcurve marktype box fill 0.400000 linethickness 0.0 marksize 122 0.400000 pts 3445 6.000000 newcurve marktype box fill 0.400000 linethickness 0.0 marksize 153 0.400000 pts 3583 6.000000 newcurve marktype box fill 0.400000 linethickness 0.0 marksize 99 0.400000 pts 3710 6.000000 newcurve marktype box fill 0.400000 linethickness 0.0 marksize 79 0.400000 pts 3800 6.000000 newcurve marktype box fill 0.200000 linethickness 0.0 marksize 132 0.400000 pts 216 7 newcurve marktype box fill 0.200000 linethickness 0.0 marksize 194 0.400000 pts 380 7 newcurve marktype box fill 0.950000 linethickness 0.0 marksize 913 0.400000 pts 934 7.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 33 0.400000 pts 1681 7.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 10 0.400000 pts 1704 7.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 14 0.400000 pts 1717 7.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 131 0.400000 pts 1789 7.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 13 0.400000 pts 1862 7.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 14 0.400000 pts 1877 7.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 20 0.400000 pts 1894 7.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 16 0.400000 pts 1913 7.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 7 0.400000 pts 1925 7.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 30 0.400000 pts 1945 7.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 58 0.400000 pts 1990 7.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 53 0.400000 pts 2049 7.000000 newcurve marktype box fill 0.400000 linethickness 0.0 marksize 898 0.400000 pts 2526 7.000000 newcurve marktype box fill 0.400000 linethickness 0.0 marksize 279 0.400000 pts 3118 7.000000 newcurve marktype box fill 0.400000 linethickness 0.0 marksize 137 0.400000 pts 3327 7.000000 newcurve marktype box fill 0.400000 linethickness 0.0 marksize 148 0.400000 pts 3471 7.000000 newcurve marktype box fill 0.400000 linethickness 0.0 marksize 87 0.400000 pts 3590 7.000000 newcurve marktype box fill 0.400000 linethickness 0.0 marksize 49 0.400000 pts 3659 7.000000 newcurve marktype box fill 0.400000 linethickness 0.0 marksize 102 0.400000 pts 3737 7.000000 newcurve marktype box fill 0.200000 linethickness 0.0 marksize 76 0.400000 pts 192 8 newcurve marktype box fill 0.200000 linethickness 0.0 marksize 163 0.400000 pts 312 8 newcurve marktype box fill 0.200000 linethickness 0.0 marksize 26 0.400000 pts 408 8 newcurve marktype box fill 0.500000 linethickness 0.0 marksize 8 0.400000 pts 426 8.000000 newcurve marktype box fill 0.500000 linethickness 0.0 marksize 5 0.400000 pts 433 8.000000 newcurve marktype box fill 0.500000 linethickness 0.0 marksize 8 0.400000 pts 441 8.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 13 0.400000 pts 452 8.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 6 0.400000 pts 464 8.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 71 0.400000 pts 506 8.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 18 0.400000 pts 553 8.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 148 0.400000 pts 641 8.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 60 0.400000 pts 748 8.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 75 0.400000 pts 816 8.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 8 0.400000 pts 860 8.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 13 0.400000 pts 871 8.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 7 0.400000 pts 1219 8.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 128 0.400000 pts 1460 8.000000 newcurve marktype box fill 0.400000 linethickness 0.0 marksize 282 0.400000 pts 1811 8.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 10 0.400000 pts 1958 8.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 59 0.400000 pts 1995 8.000000 newcurve marktype box fill 0.700000 linethickness 0.0 marksize 80 0.400000 pts 2066 8.000000 newcurve marktype box fill 0.400000 linethickness 0.0 marksize 517 0.400000 pts 2365 8.000000 newcurve marktype box fill 0.400000 linethickness 0.0 marksize 327 0.400000 pts 2788 8.000000 newcurve marktype box fill 0.400000 linethickness 0.0 marksize 460 0.400000 pts 3183 8.000000 newcurve marktype box fill 0.400000 linethickness 0.0 marksize 192 0.400000 pts 3510 8.000000 newcurve marktype box fill 0.400000 linethickness 0.0 marksize 90 0.400000 pts 3652 8.000000 newcurve marktype box fill 0.400000 linethickness 0.0 marksize 137 0.400000 pts 3767 8.000000 jgraph-83.orig/complex-examples/ 42775 1750 50 0 6273277711 15260 5ustar osirissrcjgraph-83.orig/complex-examples/README100664 1750 50 5422 6273277711 16236 0ustar osirissrcThis directory contains a few examples of using jgraph to draw figures. They range from relatively simple to quite complex. I can't claim that jgraph is a better way to draw pictures than normal WYSIWYG editors like MacDraw or xfig or idraw. However, it has a few advantages. First, because of jgraph's string justification and rotation commands, jgraph plots text more reliably than other tools. Since you must specify exact points with jgraph, arrows are guaranteed to go to the right places and so on. Although it's more cumbersome, it is also more precise. Second, because jgraph is essentially a programming language, it makes it easier to use tools like awk and nawk and sed to draw pictures which have iterative structure. This is a failing of most WYSIWYG editors. Drawing a picture like those in tree.awk would be quite difficult and tedious in your standard WYSIWYG editor. The files are: from simplest to most complex: ---- Straight jgraph files mlti.jgr -- A graph plotting a simple multicomputer incterconnection timeline.jgr -- A graph plotting a time line of three computers sending messages to one another wedmap.jgr -- A map made with jgraph ---- Jgraph mixed with awk/nawk/sh tree.awk -- This is an nawk file which will create a jgraph for any m-level n-ary tree, where m and n are specified in the command line arguments grtoj.sh -- This is a shell script mixed with nawk written by Adam Buchsbaum at Princeton which is a jgraph preprocessor for drawing graphs (the kind with nodes and edges, not the kind with points and hash marks). He hasn't written up a man page for it, but you can see how much of it works with the example file grex.gtj. diskarray.jgr -- This is a jgraph file which shows a very neat mixture of jgraph and awk. First, there is the file convert.awk, which takes a jgraph file, and converts it into an awk file. This awk file takes as input a pair of x and y coordinates on the command line arguments, and then produces the jgraph to plot the original jgraph file at those coordinates in the new jgraph file. In this file, disk.jgr is plotted 6 times to make a disk array. ckpov.jgr -- This is a similar jgraph file, which uses the more complex file srm.jgr, depicting a computer screen to make a nice picture. seq.jgr conc.jgr cow.jgr cll.jgr alg.jgr -- These are all files which comprise alg.jgr. Note that they are standalone pictures. Alg.jgr simply plots all of them together. Thus they show a neat way that jgraph makes it easy to not duplicate work when duplicating pictures. jgraph-83.orig/complex-examples/alg.jgr100664 1750 50 3001 6273277711 16614 0ustar osirissrc(* This is a very complex jgraph picture used in a paper on checkpointing. Basically, it is a graphic representation of four checkpointing algorithms. The four algorithms are in the files seq.jgr, conc.jgr, cow.jgr, and cll.jgr. This file lays those four algorithms out on the page, gives them titles, and then draws a legend at the bottom. It ends up calling the shell construct 24 times, forking off 72 processes, which might seem like a lot, but it only takes 9 seconds to produce the output on a DECstation 5000. Note that in this file, the y-axis if the drawings is shrunk, so that they all fit better on the page. *) include seq.jgr yaxis size 1.5 title y -.5 : Sequential Algorithm x_translate -1.5 y_translate 2.5 include conc.jgr yaxis size 1.5 x_translate 1.5 y_translate 2.5 title y -.5 : Main Memory Algorithm include cow.jgr yaxis size 1.5 title y -.5 : Copy-on-write Algorithm x_translate -1.5 include cll.jgr yaxis size 1.5 title y -.5 : CLL Algorithm x_translate 1.5 newgraph y_translate -1.9 x_translate -1 xaxis max 2 min 0 size 2 nodraw yaxis max 2 min 0 size 2 nodraw newline linetype solid rarrow asize .07 .04 label fontsize 10 : Bytes copied / written when all processors are frozen newline linetype dotted rarrow asize .07 .04 label fontsize 10 : Bytes copied / written after the processors are restarted newline linetype longdash rarrow asize .07 .04 label fontsize 10 : Bytes written after the main memory checkpoint is complete legend on x 0 y 1 linelength 1 jgraph-83.orig/complex-examples/ckpov.jgr100664 1750 50 3744 6273277711 17211 0ustar osirissrc(* This is a pretty ugly file, which prints an overview of checkpointing. It's interesting because like diskarray.jgr, it makes use of convert.awk to plot disk drives, and computer screens (from srm.awk) *) (* Draw the top time line *) newgraph xaxis min 0 max 13 size 6 nodraw yaxis min 0 max 4 size 2.5 nodraw shell : echo "0 1.5" | awk -f srm.awk newcurve marktype box fill .8 marksize .8 .7 pts 0.9 3.15 newline linethickness 3 pts 2.5 2.5 3.0 3.0 3.5 3.0 4.0 3.2 4.5 3.0 5.0 3.5 5.5 3.2 6.0 2.7 6.5 2.8 7.0 2.5 7.5 2.8 8.0 3.2 8.5 2.9 9.0 3.1 9.5 2.8 10.0 2.7 newline linethickness 3 rarrows asize .3 .2 pts 10.0 2.7 10.5 2.5 shell : echo "11 1.5" | awk -f srm.awk (* Draw the middle time line, with checkpoints and a failure *) copygraph y_translate -2.2 shell : echo "0 1.5" | awk -f srm.awk newcurve marktype box fill .8 marksize .8 .7 pts 0.9 3.15 newline linethickness 3 pts 2.5 2.5 3.0 3.0 3.5 3.0 4.0 3.2 4.5 3.0 5.0 3.5 5.5 3.2 6.0 2.7 6.5 2.8 7.0 2.5 7.5 2.8 8.0 3.2 newline linethickness 3 rarrows asize .3 .2 pts 8.0 3.2 8.5 2.9 newstring x 8.8 y 2.9 hjl vjc fontsize 14 : Failure newline rarrows pts 3.5 3.0 3.4 1.6 shell : echo "3.2 1.1" | awk -f disk.awk newline rarrows pts 5.5 3.2 5.4 1.6 shell : echo "5.2 1.1" | awk -f disk.awk newline rarrows pts 7.5 2.8 7.4 1.6 shell : echo "7.2 1.1" | awk -f disk.awk newstring x 5.5 y 4.5 fontsize 12 hjc vjb : Checkpoints newline rarrows pts 5.5 4.3 3.6 3.2 newline rarrows pts 5.5 4.3 5.5 3.4 newline rarrows pts 5.5 4.3 7.4 3.0 (* Draw the bottom time line, which recovers from the checkpoint *) copygraph y_translate -4.4 newline linethickness 3 pts 7.5 2.8 8.0 3.2 8.5 2.9 9.0 3.1 9.5 2.8 10.0 2.7 newline linethickness 3 rarrows asize .3 .2 pts 10.0 2.7 10.5 2.5 shell : echo "11 1.5" | awk -f srm.awk newline larrows pts 7.5 2.7 7.4 1.6 shell : echo "7.2 1.2" | awk -f disk.awk newstring fontsize 12 hjr vjc x 7.3 y 2.8 : Recover jgraph-83.orig/complex-examples/cll.jgr100664 1750 50 4276 6273277711 16642 0ustar osirissrc(* This is a picture of the Concurrent, low-latency checkpointing algorithm. *) newgraph xaxis min 0 max 3 size 2.5 nodraw yaxis min 0 max 2.0 size 2.0 nodraw (* Draw the address space *) newstring fontsize 9 hjc vjt x 0.25 y -0.07 : Address\ Space newcurve marktype ellipse marksize 0.1 .14 fill 1 pts shell : echo "" | awk '{ for (i = 0.67; i < 1.37; i += 0.14) printf("0.5 %f\n", i, i);}' newcurve marktype box fill 1 marksize 0.5 0.6 pts 0.25 0.3 newcurve marktype box fill 0.5 marksize 0.5 0.14 pts shell : echo "" | awk '{ for (i = 0.67; i < 1.37; i += 0.14) printf("0.25 %f\n", i);}' copycurve fill 1 pts shell : echo "" | awk '{ for (i = 1.37; i < 2.00; i += 0.14) printf("0.25 %f\n", i);}' (* Draw the registers *) newline pts 0.0 0.6 0.5 0.6 shell : echo "0.7 0" | awk -f regs.awk newstring hjc vjc fontsize 7 x 1.3 y 0.3 : . . . newstring fontsize 9 hjc vjt x 1.05 y -0.07 : CPU\ States (* Draw the pool of page buffers *) newcurve marktype ellipse fill 1 marksize 0.1 0.14 pts shell : echo "" | awk '{ for (i = 0.67; i < 1.09; i += 0.14) printf("2.2 %f\n", i);}' newcurve marktype box marksize 0.5 0.14 fill 1 pts shell : echo "" | awk '{ for (i = 0.67; i < 1.09; i += 0.14) printf("1.95 %f\n", i);}' shell : echo "" | awk '{ for (i = 1.51; i < 1.79; i += 0.14) printf("1.95 %f\n", i);}' copycurve fill .5 pts shell : echo "" | awk '{ for (i = 1.09; i < 1.51; i += 0.14) printf("1.95 %f\n", i);}' newstring fontsize 9 hjc vjt x 1.95 y 0.53 : Page\ Pool (* Draw arrows *) newcurve marktype text hjl vjc x 0 y 0 rotate 90 fontsize 7 : . . . pts 0.9 1.35 2.5 1.05 shell : echo "" | awk '{ for (i = 0.67; i < 1.37; i += 0.14) printf("newline linetype dotted rarrow asize .07 .04 pts 0.55 %f 1.6 %f\n", i, i+.14);}' newline pts 1.3 0.635 1.22 0.4 newline pts 1.3 0.635 1.3 0.4 newline pts 1.3 0.635 1.38 0.4 newline rarrow asize .07 .04 pts 1.0 0.6 1.3 0.635 1.6 0.67 (* Draw the bezier to disk *) newline linetype dotted shell : echo "" | awk '{ for (i = 0.67; i < 1.09; i += 0.14) printf("copycurve bezier pts 2.25 %f 2.6 %f 2.7 %f 2.7 %f\n", i, i+.1, i, i-.1);}' copycurve nobezier rarrow asize .07 .04 pts 2.7 0.85 2.7 0.45 (* Draw the disk *) shell : echo "2.5 0.0" | awk -f disk.awk jgraph-83.orig/complex-examples/conc.jgr100664 1750 50 2342 6273277711 17002 0ustar osirissrc(* This is a picture of the concurrent checkpointing algorithm. *) newgraph xaxis min 0 max 3 size 2.5 nodraw yaxis min 0 max 2.0 size 2 nodraw (* Draw the address space *) newstring fontsize 9 hjc vjt x 0.25 y -0.07 : Address\ Space newcurve fill 1 marktype ellipse marksize 0.2 1.4 pts 0.5 1.3 newcurve marktype box fill 1 marksize 0.5 2.0 pts 0.25 1 newline pts 0.0 0.6 0.5 0.6 (* Draw the registers *) shell : echo "0.7 0" | awk -f regs.awk newstring hjc vjc fontsize 7 x 1.3 y 0.3 : . . . newstring fontsize 9 hjc vjt x 1.05 y -0.07 : CPU\ States (* Draw the second address space *) newcurve fill 1 marktype ellipse marksize 0.2 1.5 pts 2.2 1.25 newcurve marktype box marksize 0.5 2.0 fill 1 pts 1.95 1 copycurve marksize 0.5 1.4 fill .5 pts 1.95 1.3 copycurve marksize 0.5 0.1 pts 1.95 0.55 newstring fontsize 9 hjc vjt x 1.95 y -0.07 : New Address\ Space (* Draw all the arrows *) newline rarrow asize .07 .04 pts 0.6 1.3 1.60 1.3 newline pts 1.3 0.575 1.22 0.4 newline pts 1.3 0.575 1.3 0.4 newline pts 1.3 0.575 1.38 0.4 newline rarrow asize .07 .04 pts 1.0 0.6 1.3 0.575 1.6 0.55 newline linetype longdash rarrow asize .07 .04 pts 2.3 1.25 2.6 0.45 (* Draw the disk *) shell : echo "2.5 0.0" | awk -f disk.awk jgraph-83.orig/complex-examples/convert.awk100664 1750 50 2400 6273277711 17533 0ustar osirissrcBEGIN { printf("{ x = $1; y = $2; \\\n"); } { inpts = 0; instr = 0; npts = 0; inx = 0; \ iny = 0;\ printf(" printf(\"");\ for (i = 1; i <= NF; i++) {\ if (instr) { \ printf(" %s", $i); \ } else if (inpts > 0) {\ printf(" %%f");\ pts[npts] = $i;\ if (inpts % 2) x[npts] = "x"; else x[npts] = "y";\ inpts++;\ npts++;\ } else if (inx) {\ printf(" %%f");\ pts[npts] = $i;\ x[npts] = "x";\ npts++;\ inx = 0;\ } else if (iny) {\ printf(" %%f");\ pts[npts] = $i;\ x[npts] = "y";\ npts++;\ iny = 0;\ } else {\ printf(" %s", $i);\ if ($i == ":") instr = 1;\ if ($i == "x") inx = 1;\ if ($i == "y") iny = 1;\ if ($i == "pts") inpts = 1; \ }\ }\ printf("\\n\"");\ if (npts > 0) {\ for (i = 0; i < npts; i++) {\ printf(", %s + %f", x[i], pts[i]);\ }\ }\ printf(");\\\n");\ } END { printf("}\n"); } jgraph-83.orig/complex-examples/cow.jgr100664 1750 50 3302 6273277711 16645 0ustar osirissrc(* This is a picture of the Copy-on-write checkpointing algorithm. *) newgraph xaxis min 0 max 3 size 2.5 nodraw yaxis min 0 max 2.0 size 2 nodraw (* Draw the address space *) newstring fontsize 9 hjc vjt x 0.25 y -0.07 : Address\ Space (* Draw the page boundaries with awk *) newcurve marktype ellipse marksize 0.1 .14 fill 1 pts shell : echo "" | awk '{ for (i = 0.67; i < 2.0; i += 0.14) printf("0.5 %f\n", i, i);}' newcurve marktype box fill 1 marksize 0.5 2.0 pts 0.25 1 shell : echo "" | awk '{ for (i = 0.6; i < 2.0; i += 0.14) printf("newline pts 0 %f 0.5 %f\n", i, i);}' (* Draw the registers *) newline pts 0.0 0.6 0.5 0.6 shell : echo "0.7 0" | awk -f regs.awk newstring hjc vjc fontsize 7 x 1.3 y 0.3 : . . . newstring fontsize 9 hjc vjt x 1.05 y -0.07 : CPU\ States (* Draw the second address space *) newcurve fill 1 marktype ellipse marksize 0.2 1.5 pts 2.2 1.25 newcurve marktype box marksize 0.5 2.0 fill 1 pts 1.95 1 copycurve marksize 0.5 1.4 fill .5 pts 1.95 1.3 copycurve marksize 0.5 0.1 pts 1.95 0.55 (* Draw the second address space's page boundaries *) shell : echo "" | awk '{ for (i = 0.6; i < 2.0; i += 0.14) printf("newline pts 1.7 %f 2.2 %f\n", i, i);}' shell : echo "" | awk '{ for (i = 0.67; i < 2.0; i += 0.14) printf("newline linetype dotted rarrow asize .07 .04 pts 0.55 %f 1.65 %f\n", i, i);}' newstring fontsize 9 hjc vjt x 1.95 y -0.07 : New Address\ Space (* Draw the arrows *) newline pts 1.3 0.575 1.22 0.4 newline pts 1.3 0.575 1.3 0.4 newline pts 1.3 0.575 1.38 0.4 newline rarrow asize .07 .04 pts 1.0 0.6 1.3 0.575 1.6 0.55 newline linetype longdash rarrow asize .07 .04 pts 2.3 1.25 2.6 0.45 (* Draw the disk *) shell : echo "2.5 0.0" | awk -f disk.awk jgraph-83.orig/complex-examples/disk.jgr100664 1750 50 451 6273277711 16771 0ustar osirissrc(* Picture of a disk: 0 0 to 0.4 0.4 *) newcurve marktype ellipse fill .5 marksize 0.4 0.2 pts 0.2 0.1 newcurve marktype box fill .5 gray .5 marksize 0.4 0.2 pts 0.2 0.2 newline pts 0.0 0.1 0.0 0.3 newline pts 0.4 0.1 0.4 0.3 newcurve marktype ellipse fill 1 marksize 0.4 0.2 pts 0.2 0.3 jgraph-83.orig/complex-examples/diskarray.jgr100664 1750 50 1464 6273277711 20055 0ustar osirissrc(* This is an example of using convert.awk to convert a jgraph file to an awk script and then use that awk script to plot several instances of the original jgraph file. Here, disk.awk is used to plot a disk drive 6 times. *) newgraph xaxis size 4 min 0 max 5.4 nodraw yaxis size 2 min 0 max 2 nodraw newcurve marktype box marksize 2 .5 fill 1 pts 2.75 1.5 shell : echo "0 0" | awk -f disk.awk shell : echo "1 0" | awk -f disk.awk shell : echo "2 0" | awk -f disk.awk shell : echo "3 0" | awk -f disk.awk shell : echo "4 0" | awk -f disk.awk shell : echo "5 0" | awk -f disk.awk shell : echo "" | \ awk ' {for (i = 0; i < 6; i++) { \ printf("newline rarrows pts 2.75 1.25 %d.2 .4\n", i) }} ' newstring hjc vjc fontsize 12 x 2.75 y 1.5 : Controller title fontsize 16 : Disk Array jgraph-83.orig/complex-examples/grex.gtj100664 1750 50 2760 6273277711 17033 0ustar osirissrclab 0 marksize .05 .05 fill 0 xs 1.25 ys 1.25 3.4 3 3.1 2.7 3.4 2.7 3.7 2.7 2.9 2.4 3.1 2.4 3.3 2.4 3.5 2.4 3.7 2.4 3.9 2.4 3 2.1 3.2 2.1 3.6 2.1 3.8 2.1 4.95 3 4.5 2.7 4.8 2.7 5.1 2.7 5.4 2.7 4.7 2.4 4.9 2.4 5.2 2.4 5.4 2.4 5.6 2.4 4.6 2.1 4.8 2.1 5.3 2.1 5.5 2.1 6.8 3 6.2 2.7 6.5 2.7 6.8 2.7 7.1 2.7 7.4 2.7 6.4 2.4 6.6 2.4 7.2 2.4 7.4 2.4 7.6 2.4 7.3 2.1 7.5 2.1 edges 0 1 0 2 0 3 1 4 1 5 1 6 5 10 5 11 3 7 3 8 3 9 8 12 8 13 14 15 14 16 14 17 14 18 16 19 16 20 19 24 19 25 18 21 18 22 18 23 22 26 22 27 28 29 28 30 28 31 28 32 28 33 30 34 30 35 33 36 33 37 33 38 37 39 37 40 raw yaxis min 2 max 3 size 1.25 nodraw newstring x 2.9 y 2.3 vjc hjc fontsize 10 : a copystring x 3 y 2 : b copystring x 3.2 y 2 : c copystring x 3.3 y 2.3 : d copystring x 3.4 y 2.6 : e copystring x 3.5 y 2.3 : f copystring x 3.6 y 2 : g copystring x 3.8 y 2 : h copystring x 3.9 y 2.3 : i copystring x 4.5 y 2.6 : a copystring x 4.6 y 2 : b copystring x 4.8 y 2 : c copystring x 4.9 y 2.3 : d copystring x 5.1 y 2.6 : e copystring x 5.2 y 2.3 : f copystring x 5.3 y 2 : g copystring x 5.5 y 2 : h copystring x 5.6 y 2.3 : i copystring x 6.2 y 2.6 : a copystring x 6.4 y 2.3 : b copystring x 6.6 y 2.3 : c copystring x 6.8 y 2.6 : d copystring x 7.1 y 2.6 : e copystring x 7.2 y 2.3 : f copystring x 7.3 y 2 : g copystring x 7.5 y 2 : h copystring x 7.6 y 2.3 : i newline marktype none rarrows asize .1 .05 pts 4 2.55 4.4 2.55 copycurve pts 5.7 2.55 6.1 2.55 newstring x 4.2 y 2.65 vjc hjc fontsize 10 : pull copystring x 5.9 jgraph-83.orig/complex-examples/grtoj.sh100664 1750 50 5772 6273277711 17047 0ustar osirissrc#!/bin/sh nawk ' BEGIN { xmarksize = ymarksize = .3 marktype = "circle" vfont = "Times-Roman" vfontsize = 8 efont = "Times-Roman" efontsize = 8 fill = 1. xs = ys = 1. xmin = ymin = 999999. xmax = ymax = -999999. n = 0 m = 0 mode = 0 NOLABEL = "_NOLABEL" pi = 3.141593 deg90 = pi / 2. elabdist = .1 vlab = elab = 1 larrows = rarrows = 0 } NF == 0 || substr($1, 1, 1) == "#" { next } $1 == "xmarksize" { xmarksize = $2 ; next } $1 == "ymarksize" { ymarksize = $2 ; next } $1 == "marksize" { xmarksize = ymarksize = $2 ; next } $1 == "marktype" { marktype = $2 ; next } $1 == "vfont" { vfont = $2 ; next } $1 == "vfontsize" { vfontsize = $2 ; next } $1 == "efont" { efont = $2 ; next } $1 == "efontsize" { efontsize = $2 ; next } $1 == "font" { vfont = efont = $2 ; next } $1 == "fontsize" { vfontsize = efontsize = $2 ; next } $1 == "fill" { fill = $2 ; next } $1 == "xs" { xs = $2 ; next } $1 == "ys" { ys = $2 ; next } $1 == "scale" { xs = ys = $2 ; next } $1 == "elabdist" { elabdist = $2 ; next } $1 == "vlab" { vlab = $2 ; next } $1 == "elab" { elab = $2 ; next } $1 == "lab" { vlab = elab = $2 ; next } $1 == "larrows" { larrows = $2 ; next } $1 == "rarrows" { rarrows = $2 ; next } $1 == "arrows" { larrows = rarrows = $2 ; next } $1 == "edges" { mode = 1 printf "newgraph\n" printf "xaxis min %f max %f size %f nodraw\n", xmin, xmax, (xmax - xmin) * xs printf "yaxis min %f max %f size %f nodraw\n\n", ymin, ymax, (ymax - ymin) * ys next } $1 == "raw" { mode = 2 ; next } { if (!mode) { x[n] = $1 y[n] = $2 vlabel[n] = (NF == 3 ? $3 : n) if (x[n] < xmin) xmin = x[n] else if (x[n] > xmax) xmax = x[n] if (y[n] < ymin) ymin = y[n] else if (y[n] > ymax) ymax = y[n] n++ } else if (mode == 1) { src[m] = label_to_node($1) dst[m] = label_to_node($2) elabel[m] = (NF == 3 ? $3 : NOLABEL) m++ } else print $0 } END { printf "\n" for (i = 0; i < n; i++) { printf "newline marktype %s marksize %f %f fill %f pts %f %f\n", marktype, xmarksize, ymarksize, fill, x[i], y[i] if (vlab) printf "newstring x %f y %f vjc hjc font %s fontsize %d : %s\n", x[i], y[i], vfont, vfontsize, vlabel[i] } printf "\n" for (i = 0; i < m; i++) { printf "newline marktype %s marksize %f %f fill %f pts %f %f %f %f ", marktype, xmarksize, ymarksize, fill, x[src[i]], y[src[i]], x[dst[i]], y[dst[i]] if (larrows) printf "larrows " if (rarrows) printf "rarrows " printf "\n" if (elab && elabel[i] != NOLABEL) { midx = (x[src[i]] + x[dst[i]]) / 2. midy = (y[src[i]] + y[dst[i]]) / 2. ang = atan2(y[dst[i]] - y[src[i]], x[dst[i]] - x[src[i]]) nang = ang - deg90 px = midx + elabdist * cos(nang) py = midy + elabdist * sin(nang) rot = ang * 180. / pi rot = (rot < 0. ? rot + 360. : rot) rot = (rot >= 90. && rot <= 270. ? rot + 180. : rot); printf "newstring x %f y %f vjc hjc rotate %f font %s fontsize %d : %s\n", px, py, rot, efont, efontsize, elabel[i] } } } function label_to_node(label) { for (i = 0; i < n; i++) if (vlabel[i] == label) return(i) return(-1) } ' jgraph-83.orig/complex-examples/makefile100664 1750 50 1712 6273277711 17054 0ustar osirissrcALL = \ seq.jps \ conc.jps \ cow.jps \ cll.jps \ alg.jps \ tree1.jps \ tree2.jps \ wedmap.jps \ diskarray.jps \ mlti.jps \ ckpov.jps \ timeline.jps \ grex.jps TMPFILES = \ regs.awk \ srm.awk \ disk.awk all: $(ALL) clean: rm -f $(ALL) $(TMPFILES) seq.jps: regs.awk convert.awk disk.awk conc.jps: regs.awk convert.awk disk.awk cow.jps: regs.awk convert.awk disk.awk cll.jps: regs.awk convert.awk disk.awk alg.jps: convert.awk regs.awk cow.jgr cll.jgr seq.jgr conc.jgr disk.awk diskarray.jps: disk.awk convert.awk ckpov.jps: srm.awk disk.awk convert.awk tree1.jps: tree.awk ( echo "4 3" | nawk -f tree.awk ; echo "xaxis size 5.4" ) |\ jgraph -P > tree1.jps ( echo "5 2" | nawk -f tree.awk ; echo "xaxis size 5" ) |\ jgraph -P > tree2.jps .SUFFIXES: .gtj .jgr .jps .awk .jgr.jps: jgraph -P < $*.jgr > $*.jps .jgr.awk: sed 's/\\/\\\\/g' $*.jgr | awk -f convert.awk > $*.awk .gtj.jps: sh grtoj.sh < $*.gtj | jgraph -P > $*.jps jgraph-83.orig/complex-examples/mlti.jgr100664 1750 50 1133 6273277711 17022 0ustar osirissrc(* Jgraph file for the simple multicomputer picture: Pc--P1--P2 *) newgraph xaxis size 1.5 min 0 max 2 nodraw yaxis size 0.4 min 0 max 1 nodraw (* Draw the lines connecting the processors *) newcurve marktype none linetype solid pts 0 0 1 0 2 0 (* Draw circles for the processors on top of the lines *) newcurve marktype circle marksize .3 linetype none fill 1 pts 0 0 1 0 2 0 (* Draw the labels for the processors *) newstring fontsize 9 x 0 y 0 hjc vjc : Pc newstring fontsize 9 x 1 y 0 hjc vjc : P1 newstring fontsize 9 x 2 y 0 hjc vjc : P2 jgraph-83.orig/complex-examples/regs.jgr100664 1750 50 512 6273277711 16775 0ustar osirissrc(* Picture of process state: 0 0.0 to 0.3 0.6 *) newcurve marktype box fill 1 marksize 0.3 0.6 pts 0.15 0.3 newline pts 0.0 0.15 0.3 0.15 newline pts 0.0 0.30 0.3 0.30 newline pts 0.0 0.45 0.3 0.45 newstring fontsize 7 hjc vjc x 0.15 y 0.075 : PC copystring y 0.225 : . . . copystring y 0.375 : R1 copystring y 0.525 : R0 jgraph-83.orig/complex-examples/seq.jgr100664 1750 50 2120 6273277711 16642 0ustar osirissrc(* This is a picture of the sequential checkpointing algorithm. *) newgraph xaxis min 0 max 3 size 2.5 nodraw yaxis min 0 max 2.0 size 2 nodraw newstring fontsize 7 hjc vjc x 0.25 y 0.3 : Code copystring y 1.3 : Globals,\ Heap\ &\ Stack newstring fontsize 9 hjc vjt x 0.25 y -0.07 : Address\ Space (* Draw the address space *) newcurve fill 1 marktype ellipse marksize 0.2 1.4 pts 0.5 1.3 newcurve marktype box fill 1 marksize 0.5 2.0 pts 0.25 1 newline pts 0.0 0.6 0.5 0.6 (* Draw the registers *) shell : echo "0.7 0" | awk -f regs.awk shell : echo "1.1 0" | awk -f regs.awk shell : echo "1.5 0" | awk -f regs.awk shell : echo "2.1 0" | awk -f regs.awk newstring hjc vjc fontsize 7 x 1.95 y 0.3 : . . . newstring fontsize 9 hjc vjt x 1.55 y -0.07 : CPU\ States (* Draw the disk *) shell : echo "2.1 1.6" | awk -f disk.awk (* Draw the arrows to the disk *) newline rarrow asize .07 .04 pts 0.6 1.3 2.0 1.8 newline rarrow asize .07 .04 pts 1.45 0.9 2.15 1.57 newline pts 1.0 0.6 1.45 0.9 newline pts 1.4 0.6 1.45 0.9 newline pts 1.5 0.6 1.45 0.9 newline pts 2.1 0.6 1.45 0.9 jgraph-83.orig/complex-examples/srm.jgr100664 1750 50 4547 6273277711 16672 0ustar osirissrc(* newgraph *) (* xaxis min 0 max 2 size 2 nodraw *) (* yaxis min 0 max 2.5 size 2.5 nodraw *) (* This is a picture of the SRM for the hypercube *) newcurve linetype solid linethickness .7 marktype none pts 0.00 0.95 0.00 0.50 1.75 0.50 1.75 0.95 0.00 0.95 pts 0.25 1.45 0.40 1.45 newcurve linetype solid linethickness .7 marktype none pts 1.55 1.45 2.00 1.45 2.00 1.00 1.75 0.50 1.75 0.95 pts 2.00 1.45 (* Knobs *) newcurve marktype circle fill 0 marksize .07 linetype none pts 0.15 0.60 0.25 0.60 0.35 0.60 newcurve marktype box fill 0 marksize .5 .45 pts .80 0.725 newcurve marktype circle fill 1 marksize .07 linetype none pts 0.95 0.85 newcurve marktype box fill 0 marksize .4 .025 linetype none pts 1.40 0.80 1.40 0.70 (* Terminal *) newcurve marktype box fill 1 marksize 1 1 pts .9 1.6 newcurve marktype box fill .8 marksize .8 .7 pts .9 1.65 newline pts 0.60 1.90 1.20 1.90 newline pts 0.60 1.85 1.00 1.85 newline pts 0.60 1.80 0.70 1.80 newline pts 0.60 1.75 1.00 1.75 newline pts 0.60 1.70 0.80 1.70 newline pts 0.60 1.65 1.20 1.65 newline pts 0.60 1.60 0.60 1.60 newline pts 0.60 1.55 0.80 1.55 newline pts 0.60 1.50 0.80 1.50 newline pts 0.60 1.45 1.10 1.45 newline pts 0.60 1.40 1.10 1.40 newcurve linetype solid linethickness .7 marktype none pts 0.40 2.10 0.55 2.30 1.55 2.30 1.55 1.30 1.40 1.10 pts 1.40 2.10 1.55 2.30 newcurve marktype circle fill 0 marksize .07 linetype none pts 1.00 1.20 1.10 1.20 1.20 1.20 (* Keyboard *) newcurve linetype solid linethickness .7 marktype none pts 0.20 0.05 0.20 0.00 1.30 0.00 1.30 0.05 0.20 0.05 pts 0.35 0.35 1.45 0.35 1.45 0.30 1.30 0.00 1.30 0.05 pts 1.45 0.35 newcurve linetype solid linethickness .7 marktype none pts 0.30 0.12 0.38 0.28 1.28 0.28 1.20 0.12 0.30 0.12 newcurve linetype solid linethickness .7 marktype none pts 0.3267 0.1733 1.2267 0.1733 newcurve linetype solid linethickness .7 marktype none pts 0.3533 0.2267 1.2533 0.2267 newcurve linetype solid linethickness .7 marktype none pts 0.40 0.12 0.48 0.28 0.58 0.28 0.50 0.12 pts 0.60 0.12 0.68 0.28 0.78 0.28 0.70 0.12 pts 0.80 0.12 0.88 0.28 0.98 0.28 0.90 0.12 pts 1.00 0.12 1.08 0.28 1.18 0.28 1.10 0.12 newcurve linetype solid linethickness .7 marktype none pts 0.31 0.27 0.01 0.30 0.00 0.31 -0.10 0.60 0.00 0.90 jgraph-83.orig/complex-examples/timeline.jgr100664 1750 50 4510 6273277711 17665 0ustar osirissrc(* This is a jgraph of the sending of messages in a multicomputer over a period of time. It is a good mixture of picture drawing and graph- drawing: Note that hash marks and a legend is employed, as is the drawing of multiple arrowed lines, and some text. *) newgraph (* Draw the three time lines with hash ticks. Only draw hash labels on the bottom-most one *) yaxis size 1.6 min 0 max 2 nodraw xaxis size 4.5 min 0.5 max 10.5 nodraw draw_hash_marks draw_hash_labels draw_axis_label hash 1 mhash 0 shash 0 hash_scale -.4 label : Time copygraph xaxis draw_at 1 nodraw draw_hash_marks copygraph xaxis draw_at 2 (* Reset the axes to draw the picture *) copygraph xaxis size 4.5 min 99.5 max 109.5 nodraw (* Define the legend entries *) newline linethickness .5 linetype dashed rarrows asize 0.19 0.04 label font Times-Italic : mCL Marker copycurve linetype dotdash label : mNSmarker copycurve linetype dotted label : mS Message copycurve linetype solid label : Normal Message legend linelength 1 (* Draw each process's time line arrow *) newline linethickness .5 rarrows pts 99.5 0 109.5 0 copycurve pts 99.5 1 109.5 1 copycurve pts 99.5 2 109.5 2 (* Draw the time line processor labels *) newstring fontsize 9 hjl vjc x 99 y 2 : Pc copystring y 1 : P1 copystring y 0 : P2 (* Draw the initial broadcast of mcl messages *) newline linethickness .5 linetype dashed rarrows asize 0.19 0.04 pts 100 2 102 1 copycurve pts 100 2 102 0 (* Draw Message from p2 -> p1 *) copycurve linetype solid pts 101 0 103 1 (* Draw mns messages to p1 *) copycurve linetype dotdash pts 100 2 104 1 copycurve pts 102 0 104 1 (* Draw Message from p2 -> pc *) copycurve linetype dashed pts 105 0 106 2 copycurve linetype solid pts 105.1 0 106.1 2 (* Draw mns messages from p1 *) copycurve linetype dotdash pts 104 1 107 0 copycurve pts 104 1 107 2 (* Draw mc's -> pc *) copycurve linetype dotted pts 104 1 108 2 copycurve pts 107 0 108 2 (* Draw mc from pc *) copycurve pts 108 2 109 1 copycurve pts 108 2 109 0 (* Draw labels for m and m' *) newstring fontsize 9 font Times-Italic x 102.05 y .5 hjl vjt : m copystring x 105.6 y .75 hjl vjc : m' copystring x 105.6 y 2.15 hjr vjc : Pc doesn't log m' copystring x 103.4 y 1.35 hjl vjb : P1 logs m copycurve linetype solid pts 105.7 2.15 106.1 2 copycurve pts 103.38 1.32 103 1 jgraph-83.orig/complex-examples/tree.awk100664 1750 50 2577 6273277711 17031 0ustar osirissrc# This is an nawk script for plotting m-level n-ary trees in jgraph. # For each line of input, it will produce a new jgraph. The line must # contain two numbers: m and n, separated by white-space. # # Two nice outputs of this are: # # ( echo "4 3" | nawk -f tree.awk ; echo "xaxis size 5.4" ) | jgraph -P # # and # ( echo "5 2" | nawk -f tree.awk ; echo "xaxis size 5" ) | jgraph -P # { m = $1 n = $2 printf("newgraph xaxis nodraw yaxis nodraw\n") k = 0 for (j = 0; j < m; j++) { # Calculate node locations if (j == 0) { numleaves = n ^ (m - 1) for (i = 0; i < numleaves; i++) newleafloc[i] = i } else { numleaves = numleaves / n for (i = 0; i < numleaves; i++) { newleafloc[i] = (oldleafloc[i*n] + oldleafloc[i*n+n-1]) / 2.0 } } # Print the nodes and labels for (i = 0; i < numleaves; i++) { printf("newcurve marktype box marksize 0.6 0.4 fill 1 pts %f %f\n", newleafloc[i], j) printf("newstring x %f y %f hjc vjc fontsize 6 : %d\n", newleafloc[i], j, ++k) # Print the arcs to children nodes if (j > 0) { for (l = 0; l < n; l++) { printf("newcurve marktype none linetype solid pts %f %f %f %f\n", newleafloc[i], j-.2, oldleafloc[i*n+l], j-.8) } } } for (i = 0; i < numleaves; i++) { oldleafloc[i] = newleafloc[i] } } } jgraph-83.orig/complex-examples/wedmap.jgr100664 1750 50 16040 6273277711 17355 0ustar osirissrc(* This is a jgraph file which draws a map to some major places in New Jersey (the Princeton Quaker Meeting House and the Griggstown Fire House). I can't say that this would have been harder to draw with a WYSIWYG editor, but the result is very nice. I drew this by plotting it first on graph paper, and then transferring it to jgraph. The whole process took a bit more than an hour. *) newgraph xaxis size 7 min 0 max 7 hash .5 mhash 4 nodraw yaxis size 9 min 0 max 9 hash .5 mhash 4 nodraw (* (* If this portion is uncommented, it will print a grid, to help lay out points *) newgraph inherit_axes xaxis hash .5 mhash 4 draw grid_lines grid_gray .5 mgrid_lines mgrid_gray .8 yaxis hash .5 mhash 4 draw grid_lines grid_gray .5 mgrid_lines mgrid_gray .8 copygraph xaxis hash_scale 1 no_grid_lines no_mgrid_lines yaxis hash_scale 1 no_grid_lines no_mgrid_lines *) (* I-95 *) newcurve marktype none linetype solid larrows linethickness 2.2 pts 1.72 1.00 1.86 1.30 newcurve marktype none linetype solid linethickness 2.2 pts 1.86 1.30 2.05 1.50 2.25 1.65 2.67 1.74 3.10 1.70 3.50 1.55 3.75 1.25 3.90 1.00 newcurve marktype none linetype solid rarrows linethickness 2.2 pts 3.90 1.00 3.95 0.75 (* Route 206 *) newcurve marktype none linetype solid pts 2.67 1.74 2.82 2.70 newcurve marktype none linetype dotted pts 2.82 2.70 3.20 3.50 newcurve marktype none linetype solid pts 3.20 3.50 3.40 3.80 3.72 4.22 4.18 4.65 4.00 4.92 newcurve marktype none linetype dotted pts 4.00 4.92 3.77 5.30 newcurve marktype none linetype solid pts 3.77 5.30 3.45 5.80 3.08 6.35 (* Route 27 *) newcurve marktype none linetype solid pts 4.18 4.65 4.24 4.70 5.30 5.69 (* Route 1 *) newcurve marktype none linetype solid linethickness 1.5 pts 3.50 1.55 3.77 1.90 newcurve marktype none linetype dotted linethickness 1.5 pts 3.77 1.90 4.05 2.30 newcurve marktype none linetype solid linethickness 1.5 pts 4.05 2.30 4.47 2.87 4.70 3.15 5.25 3.90 newcurve rarrows marktype none linetype solid linethickness 1.5 pts 5.25 3.90 5.48 4.20 (* Mercer Road/Princeton Pike *) newcurve marktype none linetype solid pts 3.10 1.70 3.20 2.08 newcurve marktype none linetype dotted pts 3.20 2.08 3.33 2.60 newcurve marktype none linetype solid pts 3.33 2.60 3.55 3.45 3.65 3.55 3.78 3.55 3.85 3.60 3.87 3.67 4.00 4.08 4.22 4.60 4.24 4.70 (* Lover's Lane *) newcurve marktype none linetype solid pts 3.72 4.22 4.00 4.08 (* Quakerbridge Road, etc *) newcurve marktype none linetype solid linethickness 0.6 pts 3.85 3.60 3.92 3.60 3.90 3.65 3.87 3.68 newcurve marktype none linetype solid pts 3.92 3.60 4.00 3.60 4.40 3.32 4.47 3.17 4.30 2.95 4.10 2.70 newcurve marktype none linetype solid pts 4.30 2.95 4.47 2.87 4.90 2.70 (* The Bridge *) newcurve marktype none linetype solid linethickness 0.4 pts 3.65 3.59 3.66 3.57 3.77 3.57 3.78 3.59 newcurve marktype none linetype solid linethickness 0.4 pts 3.65 3.51 3.66 3.53 3.77 3.53 3.78 3.51 (* The Meeting House *) newcurve marktype none linetype solid linethickness 0.6 pts 3.90 3.65 4.0 3.72 newcurve marktype box fill 1 linetype none marksize .1 .1 pts 4.05 3.78 (* D&R Canal, minus Lake Carnegie *) newcurve marktype none linetype dotted linethickness 0.6 pts 4.60 7.82 4.90 6.40 4.90 6.28 newcurve marktype none linetype dotted linethickness 0.6 pts 4.90 6.22 4.90 6.10 4.93 5.95 (* D&R Bridge *) newcurve marktype none linetype solid linethickness 0.5 pts 4.75 6.19 4.77 6.22 5.03 6.22 5.05 6.19 newcurve marktype none linetype solid linethickness 0.5 pts 4.75 6.31 4.77 6.28 5.03 6.28 5.05 6.31 (* Route 518 *) newcurve marktype none linetype solid pts 2.95 5.68 3.45 5.80 4.00 6.00 newcurve marktype none linetype dotted pts 4.00 6.00 4.50 6.20 newcurve marktype none linetype solid pts 4.50 6.20 4.70 6.25 5.10 6.25 5.20 6.27 5.50 6.40 (* Canal Road *) newcurve marktype none linetype solid pts 5.20 6.27 5.00 7.50 4.95 7.80 newcurve marktype none linetype solid pts 4.85 7.50 5.00 7.50 (* Fire House *) newcurve marktype box fill 1 linetype none marksize .15 .1 pts 5.12 7.70 (* Alexander Road *) newcurve marktype none linetype solid pts 4.22 4.60 5.25 3.90 (* Exits *) newcurve marktype box linetype none fill 1 pts 5.25 3.90 (* Alexander Road / Rt 1 *) 4.47 2.87 (* Quakerbridge / Rt 1 *) 2.67 1.74 (* 206 / I95 *) 3.10 1.70 (* Princeton Pike / I95 *) 3.50 1.55 (* Rt 1 / I95 *) (* Traffic Lights *) newcurve marktype box linetype none fill 1 marksize .1 .2 pts 3.10 6.00 3.80 4.60 newcurve marktype circle linetype none fill 0 marksize .03 pts 3.10 6.00 3.80 4.60 3.10 6.06 3.80 4.66 3.10 5.94 3.80 4.54 newcurve marktype none linetype solid rarrows linethickness .04 pts 3.17 5.97 3.40 5.83 newcurve marktype none linetype solid rarrows linethickness .04 pts 3.87 4.60 4.14 4.65 (* Labels *) newstring hjc vjb fontsize 9 rotate 64 x 2.97 y 3.1 : US Rt. 206 copystring rotate -57 x 3.82 y 5.3 : US Rt. 206 copystring font Times-Italic rotate -57 vjt x 3.75 y 5.27 : 3-4 miles copystring font Times-Bold fontsize 10 vjb rotate 37 x 2.02 y 1.52 : I-95 copystring rotate -52 x 3.70 y 1.39 : I-295 copystring rotate 55 x 3.88 y 2.13 : US Rt. 1 copystring font Times-Roman fontsize 9 rotate 76 x 3.31 y 2.68 : Princeton Pike / Mercer Rd. copystring font Times-Italic vjt rotate 76 x 3.38 y 2.63 : 3-4 miles copystring font Times-Roman vjb rotate 21 x 4.10 y 6.07 : Rt. 518 copystring font Times-Italic vjt x 4.12 y 6.0 : 2-4 miles copystring font Times-Roman vjb rotate -34 x 4.7 y 4.31 : Alexander Rd. copystring hjl rotate 43 x 4.22 y 4.72 : Rt. 27 / Nassau Street copystring font Times-Italic hjc vjt rotate -78 x 4.71 y 7.0 : D & R Canal copystring font Times-Roman vjb rotate -80 x 5.13 y 7.0 : Canal Rd. copystring font Times-Italic vjt rotate -80 x 5.04 y 7.0 : 3.5 miles copystring font Times-Roman rotate 0 fontsize 12 linesep 7 x 4.17 y 3.80 hjl vjc : Meeting\ House copystring x 5.25 y 7.70 : Griggstown\ Fire\ House copystring fontsize 9 x 4.90 y 3.00 hjl vjc : Quakerbridge Rd. newcurve marktype none linetype solid rarrows linethickness .04 pts 4.86 3.00 4.50 3.18 newcurve marktype none linetype solid rarrows linethickness .04 pts 4.86 3.00 4.70 2.80 copystring x 3.40 y 4.10 hjr : Lovers Lane newcurve marktype none linetype solid rarrows linethickness .04 pts 3.44 4.10 3.82 4.15 copystring font Times-Italic x 3.45 y 6.2 hjc vjb : Wawa newcurve marktype none linetype solid rarrows linethickness .04 pts 3.45 6.16 3.43 5.85 newstring fontsize 9 x 1.70 y 0.84 hjc vjc linesep 5 : Philadelphia\ ~30 miles copystring x 3.95 y 0.58 : Trenton\ ~5 miles copystring hjl vjc x 5.60 y 4.37 linesep : NJ Turnpike\ Exit 9\ ~20 miles newstring font Times-Italic fontsize 10 x 4.45 y 4.75 hjl vjc : PRINCETON newstring font Times-Italic fontsize 10 x 5.50 y 1.80 hjc vjb : N newcurve marktype none linetype solid rarrows linethickness .04 pts 5.50 1.14 5.50 1.76