v14i016: Device-independant graphics system, with drivers
Rich Salz
rsalz at bbn.com
Sat Apr 2 04:10:19 AEST 1988
Submitted-by: Joe Dellinger <joe at hanauma.STANFORD.EDU>
Posting-number: Volume 14, Issue 16
Archive-name: vplot/part11
#! /bin/sh
# This is a shell archive. Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file". To overwrite existing
# files, type "sh file -c". You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g.. If this archive is complete, you
# will see the following message at the end:
# "End of archive 11 (of 24)."
# Wrapped by rsalz at fig.bbn.com on Fri Mar 25 11:47:14 1988
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'RasterTek_device/rteklib/rtekraster.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'RasterTek_device/rteklib/rtekraster.c'\"
else
echo shar: Extracting \"'RasterTek_device/rteklib/rtekraster.c'\" \(3873 characters\)
sed "s/^X//" >'RasterTek_device/rteklib/rtekraster.c' <<'END_OF_FILE'
X/*
X * Copyright 1987 the Board of Trustees of the Leland Stanford Junior
X * University. Official permission to use this software is included in
X * the documentation. It authorizes you to use this file for any
X * non-commercial purpose, provided that this copyright notice is not
X * removed and that any modifications made to this file are commented
X * and dated in the style of my example below.
X */
X
X/*
X *
X * source file: ./filters/rteklib/rtekraster.c
X *
X * Joe Dellinger (SEP), June 11 1987
X * Inserted this sample edit history entry.
X * Please log any further modifications made to this file:
X */
X
X#include "rtekpen.h"
X
X/* Revised 4/19/87 Stewart A. Levin SEP added direct raster
X * for all orients
X *
X * For orient=1, simply switch nrows and ncols from orient=0
X * For orient=2, reverse raster line in core and write it out
X * For orient=3, same method as orient=2. Code also left in
X * to use rtek internal pixel functions to reverse
X * within the display using 3 XOR's. This is not
X * invoked on the Convex because it's slower.
X *
X * Joe Dellinger 6/12/87 need to set lost=YES after raster.
X * Joe Dellinger Feb 16 1988
X * Update to new order of arguments for dumb raster.
X */
extern int genraster ();
extern int lost;
X
rtekraster (count, out_of, xpos, ypos, length, orient, raster, dummy1, dummy2)
X int count, out_of, xpos, ypos, length, orient, dummy1, dummy2;
X char *raster;
X{
int hlen;
register char *ptr;
X
X switch (orient)
X {
X case 0:
X rtekplot (xpos, ypos, 0);
X CHKLEN (5 + length);
X byte (PIXEL8); /* cmdlen = 5 + length */
X word (1);
X word (length);
X fwrite (raster, 1, length, rtekfd);
X break;
X case 1:
X rtekplot (xpos, ypos, 0);
X CHKLEN (5 + length);
X byte (PIXEL8); /* cmdlen = 5 + length */
X word (length);
X word (1);
X fwrite (raster, 1, length, rtekfd);
X break;
X case 2:
X rtekplot (xpos - length + 1, ypos, 0);
X CHKLEN (5 + length);
X byte (PIXEL8);
X word (1);
X word (length);
X for (ptr = raster + length - 1; ptr >= raster; ptr--)
X putc (*ptr, rtekfd);
X break;
X case 3:
X rtekplot (xpos, ypos + length - 1, 0);
X CHKLEN (5 + length);
X byte (PIXEL8);
X word (length);
X word (1);
X for (ptr = raster + length - 1; ptr >= raster; ptr--)
X putc (*ptr, rtekfd);
X#ifdef undef
X /* this reverses rasters inside device */
X hlen = length >> 1;
X rtekplot (xpos, ypos + length - 1, 0);
X CHKLEN (5 + length); /* load rasters backwards */
X byte (PIXEL8);
X word (length);
X word (1);
X fwrite (raster, 1, length, rtekfd);
X CHKLEN (2); /* set to XOR pixel mode */
X byte (PIXFUN);
X byte (4);
X CHKLEN (6); /* define 2 half-length windows */
X byte (CLOAD);
X byte (11);
X word (xpos);
X word (ypos);
X CHKLEN (6);
X byte (CLOAD);
X byte (12);
X word (xpos);
X word (ypos + hlen - 1);
X CHKLEN (6);
X byte (CLOAD);
X byte (13);
X word (xpos);
X word (ypos + length - 1);
X CHKLEN (6);
X byte (CLOAD);
X byte (14);
X word (xpos);
X word (ypos + length - hlen);
X CHKLEN (1);
X byte (PIXMOV); /* perform XOR number 1 */
X CHKLEN (3);
X byte (CMOVE);
X byte (11);
X byte (13);
X CHKLEN (3);
X byte (CMOVE);
X byte (12);
X byte (14);
X CHKLEN (6);
X byte (CLOAD);
X byte (13);
X word (xpos);
X word (ypos);
X CHKLEN (6);
X byte (CLOAD);
X byte (14);
X word (xpos);
X word (ypos + hlen - 1);
X CHKLEN (1);
X byte (PIXMOV);
X CHKLEN (3);
X byte (CMOVE);
X byte (13);
X byte (11);
X CHKLEN (3);
X byte (CMOVE);
X byte (14);
X byte (12);
X CHKLEN (6);
X byte (CLOAD);
X byte (11);
X word (xpos);
X word (ypos);
X CHKLEN (6);
X byte (CLOAD);
X byte (12);
X word (xpos);
X word (ypos + hlen - 1);
X CHKLEN (1);
X byte (PIXMOV);
X CHKLEN (2);
X byte (PIXFUN); /* reset pixel to insert mode */
X byte (0);
X#endif undef
X break;
X default: /* this shouldn't happen */
X genraster (count, out_of, xpos, ypos, length, orient, raster, 0, 0);
X break;
X }
X lost = 1;
X}
END_OF_FILE
if test 3873 -ne `wc -c <'RasterTek_device/rteklib/rtekraster.c'`; then
echo shar: \"'RasterTek_device/rteklib/rtekraster.c'\" unpacked with wrong size!
fi
# end of 'RasterTek_device/rteklib/rtekraster.c'
fi
if test -f 'Regis_device/gigilib/gigiplot.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'Regis_device/gigilib/gigiplot.c'\"
else
echo shar: Extracting \"'Regis_device/gigilib/gigiplot.c'\" \(3046 characters\)
sed "s/^X//" >'Regis_device/gigilib/gigiplot.c' <<'END_OF_FILE'
X/*
X * Copyright 1987 the Board of Trustees of the Leland Stanford Junior
X * University. Official permission to use this software is included in
X * the documentation. It authorizes you to use this file for any
X * non-commercial purpose, provided that this copyright notice is not
X * removed and that any modifications made to this file are commented
X * and dated in the style of my example below.
X */
X
X/*
X *
X * source file: ./filters/gigilib/gigiplot.c
X *
X * Joe Dellinger (SEP), June 11 1987
X * Inserted this sample edit history entry.
X * Please log any further modifications made to this file:
X */
X
X#include <stdio.h>
X#include "gigi.h"
extern FILE *pltout;
extern int dev_xmax, dev_ymax, dev_xmin, dev_ymin;
int lost = 1; /* used by genvector */
X
gigiplot (xnew, ynew, draw)
X int xnew, ynew, draw;
X{
int ix, iy, dx, dy, gdx, gdy, adx, ady;
float slope, x, y, fdx, fdy;
static int xold, yold;
X
X gcon (&xnew, &ynew); /* Convert to Gigi's perverse coordinate
X * system */
X
X if (!in_a_poly)
X {
X if (!draw)
X {
X if (lastop != 'P')
X fprintf (pltout, "P at W");
X }
X else
X {
X if (lastop != 'V')
X fprintf (pltout, "V at W");
X }
X }
X
X if (lost == 0)
X {
X gdx = xnew - xold;
X gdy = ynew - yold;
X adx = (gdx > 0 ? gdx : -gdx);
X ady = (gdy > 0 ? gdy : -gdy);
X if (adx == 0 && ady == 0)
X goto done;
X }
X else
X {
X lost = 0;
X adx = 100;
X ady = 100;
X }
X /* general move, fast for long vectors */
X if (adx > 10 || ady > 10)
X {
X fprintf (pltout, "[%d,%d]", 2 * ynew, 2 * xnew);
X goto done;
X }
X /* equivalent move, fast for short vectors */
X fdx = gdx;
X fdy = gdy;
X if (adx >= ady)
X {
X slope = 1.0001 * fdy / fdx;
X slope = (gdx > 0. ? slope : -slope);
X iy = yold;
X y = yold;
X for (ix = 0; ix < adx; ix++)
X {
X y = y + slope;
X dy = y - iy;
X iy = iy + dy;
X if (dy == 0)
X {
X if (gdx > 0)
X fprintf (pltout, "6");
X else
X fprintf (pltout, "2");
X }
X else
X if (dy > 0)
X {
X if (gdx > 0)
X fprintf (pltout, "7");
X else
X fprintf (pltout, "1");
X }
X else
X {
X if (gdx > 0)
X fprintf (pltout, "5");
X else
X fprintf (pltout, "3");
X }
X }
X }
X else
X {
X slope = 1.0001 * fdx / fdy;
X slope = (gdy > 0. ? slope : -slope);
X ix = xold;
X x = xold;
X for (iy = 0; iy < ady; iy++)
X {
X x = x + slope;
X dx = x - ix;
X ix = ix + dx;
X if (dx == 0)
X {
X if (gdy > 0)
X fprintf (pltout, "0");
X else
X fprintf (pltout, "4");
X }
X else
X if (dx > 0)
X {
X if (gdy > 0)
X fprintf (pltout, "7");
X else
X fprintf (pltout, "5");
X }
X else
X {
X if (gdy > 0)
X fprintf (pltout, "1");
X else
X fprintf (pltout, "3");
X }
X }
X }
done:
X if (!in_a_poly)
X {
X if (!draw)
X {
X fprintf (pltout, "0V at W4");
X }
X lastop = 'V';
X }
X xold = xnew;
X yold = ynew;
X return;
X}
X
gcon (x, y)
X int *x, *y;
X{
int temp;
X
X temp = *x;
X *x = dev_ymin + dev_ymax - *y;
X *y = temp;
X}
END_OF_FILE
if test 3046 -ne `wc -c <'Regis_device/gigilib/gigiplot.c'`; then
echo shar: \"'Regis_device/gigilib/gigiplot.c'\" unpacked with wrong size!
fi
# end of 'Regis_device/gigilib/gigiplot.c'
fi
if test -f 'Tek_device/cteklib/ctekraster.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'Tek_device/cteklib/ctekraster.c'\"
else
echo shar: Extracting \"'Tek_device/cteklib/ctekraster.c'\" \(3690 characters\)
sed "s/^X//" >'Tek_device/cteklib/ctekraster.c' <<'END_OF_FILE'
X/*
X * Copyright 1987 the Board of Trustees of the Leland Stanford Junior
X * University. Official permission to use this software is included in
X * the documentation. It authorizes you to use this file for any
X * non-commercial purpose, provided that this copyright notice is not
X * removed and that any modifications made to this file are commented
X * and dated in the style of my example below.
X */
X
X/*
X *
X * source file: ./filters/cteklib/ctekraster.c
X *
X * Joe Dellinger (SEP), June 11 1987
X * Inserted this sample edit history entry.
X * Please log any further modifications made to this file:
X * Joe Dellinger Feb 16 1988
X * Updated raster call.
X */
X
X#include <stdio.h>
X#include "ctek.h"
X#include "../include/enum.h"
X#include "../include/extern.h"
extern FILE *pltout;
extern int need_devcolor, overlay;
extern int genraster1 ();
extern int lost;
X
X/*
X * IMPORTANT NOTE
X * We couldn't just change the raster line which is handed to us to
X * do the color mapping, because the same line MAY get handed to us
X * again, which creates havoc when it gets mapped TWICE.
X */
X
ctekraster (count, out_of, xpos, ypos, length, orient, raster, dummy1, dummy2)
X int count, out_of, xpos, ypos, length, orient, dummy1, dummy2;
X char *raster;
X{
register int ii, jj, kk;
int length2;
int pixel[6]; /* Most number pixels per one character */
static int pix_pak = 0;
int xbreak;
int failure_count;
X
X/* Why were we even called? */
X if (length == 0)
X return;
X
X/*
X * pixel stuff has to overwrite
X */
X overlay = NO;
X
X if (orient != 0)
X {
X genraster1 (count, out_of, xpos, ypos, length, raster, orient);
X return;
X }
X
X/*
X * If it is just a solid line (or nearly solid) of a few colors, better to use
X * genraster1.
X */
X xbreak = 0;
X failure_count = 0;
X for (jj = 1; jj < length; jj++)
X {
X if (raster[jj] != raster[jj - 1])
X {
X if (jj - xbreak < 10)
X {
X failure_count++;
X if (failure_count > 2)
X break;
X }
X xbreak = jj;
X }
X }
X if (jj == length)
X {
X genraster1 (0, 1, xpos, ypos, length, raster, orient);
X return;
X }
X
X
X/*
X * Probably "runlength write" would be more efficient here in many
X * circumstances. Anyone want to make this use that when it is faster?
X * -JAD
X */
X
X/* Do tek4105 Raster write */
X
X cteksetmode (TEK);
X
X/* See how many bits we need to use */
X jj = 0;
X for (ii = 0; ii < length; ii++)
X {
X kk = ctekcolmap ((int) raster[ii]);
X if (jj < kk)
X jj = kk;
X if (jj > 3)
X break;
X }
X switch (jj)
X {
X case 0:
X case 1:
X jj = 6;
X break;
X case 2:
X case 3:
X jj = 3;
X break;
X default:
X jj = 2;
X break;
X }
X
X if (pix_pak != jj)
X {
X pix_pak = jj; /* pix_pak is number of pixels per char */
X fprintf (pltout, "%cRU1", ESC); /* Begin Pixel Operations */
X tekipack (11); /* Replace whatever was there before */
X tekipack (6 / pix_pak); /* 6/pix_pak bits per pixel */
X }
X
X
X fprintf (pltout, "%cRH", ESC); /* position pixel beam */
X ctekxypack (xpos, ypos);
X
X/* length2 is number of characters needed to hold length pixels */
X length2 = length / pix_pak;
X if (length % pix_pak != 0)
X length2++;
X
X fprintf (pltout, "%cRP", ESC); /* raster write (one line) */
X tekipack (length); /* Number of pixels to set, */
X tekipack (length2); /* encoded into this many characters */
X
X for (jj = 0; jj < length; jj += pix_pak)
X {
X for (kk = 0; kk < pix_pak; kk++)
X {
X if (jj + kk >= length)
X {
X pixel[kk] = 0;
X break;
X }
X pixel[kk] = ctekcolmap ((int) raster[jj + kk]);
X }
X
X pixpack (pixel, pix_pak);
X }
X lost = 1;
X need_devcolor = YES;
X return;
X}
END_OF_FILE
if test 3690 -ne `wc -c <'Tek_device/cteklib/ctekraster.c'`; then
echo shar: \"'Tek_device/cteklib/ctekraster.c'\" unpacked with wrong size!
fi
# end of 'Tek_device/cteklib/ctekraster.c'
fi
if test -f 'Tek_device/teklib/tekopen.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'Tek_device/teklib/tekopen.c'\"
else
echo shar: Extracting \"'Tek_device/teklib/tekopen.c'\" \(3098 characters\)
sed "s/^X//" >'Tek_device/teklib/tekopen.c' <<'END_OF_FILE'
X/*
X * Copyright 1987 the Board of Trustees of the Leland Stanford Junior
X * University. Official permission to use this software is included in
X * the documentation. It authorizes you to use this file for any
X * non-commercial purpose, provided that this copyright notice is not
X * removed and that any modifications made to this file are commented
X * and dated in the style of my example below.
X */
X
X/*
X *
X * source file: ./filters/teklib/tekopen.c
X *
X * Joe Dellinger (SEP), June 11 1987
X * Inserted this sample edit history entry.
X * Please log any further modifications made to this file:
X */
X
X/*
X * Device open routine for tek4010 emulators (no-op for a real tek401x)
X * Devices supported:
X * graphon 140, 230, 235, 240
X * selanar hi-rez 100
X * digital engineering retrographics boards in dec vt102 and vt131
X * and televideo 950 terminals
X * seiko d-scan (gr-1104), in monochrome
X *
X * chuck karish 25 november 1986
X */
X
X#include <stdio.h>
X#include "../include/enum.h"
X#include "../include/extern.h"
X#include "../teklib/tek.h"
extern FILE *pltout;
extern char wstype[];
extern char callname[];
X
tekopen ()
X{
X/*
X * physical device parameters
X */
X dev_xmax = 1000;
X dev_ymax = 750;
X dev_xmin = 0;
X dev_ymin = 0;
X pixels_per_inch = 78.;
X aspect_ratio = 1.;
X
X/*
X * device capabilities
X */
X need_end_erase = NO;
X buffer_output = YES;
X smart_clip = NO;
X num_col = 0;
X
X if (!strcmp (wstype, "default"))
X {
X strcpy (wstype, "tek401X");
X }
X if ((!strcmp (wstype, "graphon")) ||
X (!strcmp (callname, "gopen")))
X {
X strcpy (wstype, "graphon");
X dev_xmax = 1023;
X dev_ymax = 780;
X pixels_per_inch = 128;
X need_end_erase = NO;
X
X fprintf (pltout, "\0331"); /* go into 4014 mode and stay there */
X fflush (stdout);
X endpause = YES;
X }
X
X else
X if ((!strcmp (wstype, "retrographics")) ||
X (!strcmp (callname, "retpen")) ||
X (!strcmp (callname, "ret")))
X {
X strcpy (wstype, "retrographics");
X dev_xmax = 1023;
X dev_ymax = 780;
X pixels_per_inch = 128;
X
X fprintf (pltout, "\035"); /*go into 4010 mode and stay there */
X fflush (stdout);
X }
X
X else
X if ((!strcmp (wstype, "selanar")) ||
X (!strcmp (callname, "selpen")))
X {
X strcpy (wstype, "selanar");
X dev_xmax = 1023;
X dev_ymax = 780;
X pixels_per_inch = 128;
X need_end_erase = YES;
X endpause = YES;
X/*
X * The text screen must be erased to keep fragments of the text
X * plane from flashing by while drawing is taking place.
X */
X fprintf (pltout, "\033[0;0H"); /* return cursor to home position */
X fprintf (pltout, "\033[2J"); /* erase text screen */
X fprintf (pltout, "\033[>0t"); /* turn off text video */
X fprintf (pltout, "\0331"); /* go to 4014 mode and stay there */
X fflush (stdout);
X }
X else
X if ((!strcmp (wstype, "dscan")) ||
X (!strcmp (callname, "dscanpen")))
X {
X strcpy (wstype, "dscan");
X dev_xmax = 1023;
X dev_ymax = 779;
X pixels_per_inch = 128;
X need_end_erase = NO;
X buffer_output = YES;
X smart_clip = NO;
X num_col = 0;
X
X fprintf (pltout, "\033*"); /* go into 4014 mode and stay there */
X fflush (stdout);
X endpause = YES;
X }
X}
END_OF_FILE
if test 3098 -ne `wc -c <'Tek_device/teklib/tekopen.c'`; then
echo shar: \"'Tek_device/teklib/tekopen.c'\" unpacked with wrong size!
fi
# end of 'Tek_device/teklib/tekopen.c'
fi
if test -f 'Virtual_device/raslib/rasopen.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'Virtual_device/raslib/rasopen.c'\"
else
echo shar: Extracting \"'Virtual_device/raslib/rasopen.c'\" \(3778 characters\)
sed "s/^X//" >'Virtual_device/raslib/rasopen.c' <<'END_OF_FILE'
X/*
X * Copyright 1987 the Board of Trustees of the Leland Stanford Junior
X * University. Official permission to use this software is included in
X * the documentation. It authorizes you to use this file for any
X * non-commercial purpose, provided that this copyright notice is not
X * removed and that any modifications made to this file are commented
X * and dated in the style of my example below.
X */
X
X/*
X *
X * source file: ./filters/raslib/rasopen.c
X *
X * Joe Dellinger (SEP), June 11 1987
X * Inserted this sample edit history entry.
X * Please log any further modifications made to this file:
X */
X
X#include <stdio.h>
X#include "../include/enum.h"
X#include "../include/extern.h"
X#include "../include/err.h"
X#include <strings.h>
X#ifdef SEP
X#include <ctype.h>
X#endif
X#define DEFAULT_OUT isatty(fileno(pltout))
X#include "raspen.h"
X
char *image;
extern char *malloc ();
extern float aspect_ratio;
extern float pixels_per_inch;
int color_mult, rasor = 0;
char colfile[60];
X
extern int num_col;
extern int rasvector2 ();
X
rasopen ()
X{
extern char **xargv;
extern FILE *pltout;
extern char *alloc ();
X#ifdef SEP
extern int headfd;
char headname[30], fname[80];
char path[50];
char *front, *tail, *ptr;
X#endif
char newpath[60];
X
X/*
X * physical device parameters
X */
X dev_xmax = 100;
X dev_ymax = 100;
X dev_xmin = 0;
X dev_ymin = 0;
X pixels_per_inch = 100.;
X aspect_ratio = 1.;
X
X/*
X * device capabilities
X */
X need_end_erase = YES;
X buffer_output = YES;
X smart_clip = NO;
X
X color_mult = 2;
X getpar ("colormult", "d", &color_mult);
X num_col = NCOLOR / color_mult;
X
X getpar ("or", "1", &rasor);
X if (rasor)
X {
X dev.vector = rasvector2;
X }
X
X dev_xmax = 1024;
X dev_ymax = 768;
X aspect_ratio = 1.;
X getpar ("n1", "d", &dev_xmax);
X getpar ("n2", "d", &dev_ymax);
X getpar ("aspect", "f", &aspect_ratio);
X pixels_per_inch /= ((float) 768 / (float) dev_ymax);
X getpar ("ppi", "d", &pixels_per_inch);
X#ifdef SEP
X Puthead ("\n\n# Raspen: VPLOT graphics via Movie,\n");
X Puthead ("#\tor any other byte-deep raster device.\n\n");
X Puthead ("\taspect_ratio=%f\n", aspect_ratio);
X Puthead ("\tesize=1\n");
X Puthead ("\tn1=%d\n", dev_xmax);
X Puthead ("\tn2=%d\n", dev_ymax);
X#endif
X
X
X /*
X * Allocate space for image
X */
X if ((image = malloc (dev_xmax * dev_ymax)) == NULL)
X {
X ERR (FATAL, name, "Can't allocate space for raster image\n");
X }
X
X if (DEFAULT_OUT)
X {
X#ifdef SEP
X datapath (path);
X/* Code stolen from output.c to get a reasonable raster file name. */
X if (0 < findnm (headfd, headname, sizeof (headname)))
X {
X /* modify slightly */
X strcpy (fname, "");
X front = rindex (headname, '/');
X if (front == ((char *) NULL))
X front = headname;
X else
X front++;
X if ((*front) == 'H')
X strcat (fname, ++front);
X else
X {
X tail = rindex (front, '.');
X if (tail == ((char *) NULL))
X strcat (fname, front);
X else
X {
X for (ptr = tail + 1; *ptr; ptr++)
X if (!isupper (*ptr))
X break;
X if (!(*ptr))/* drop suffix if all caps */
X *tail = '\0';
X (void) strcat (fname, front);
X }
X }
X (void) strcat (fname, ".raster");
X }
X else
X {
X strcpy (fname, "raster");
X }
X
X sprintf (newpath, "%s%s", path, fname);
X Puthead ("\tin=%s\n", newpath);
X#else
X sprintf (newpath, "%s", "raster_file");
X#endif
X pltout = fopen (newpath, "w");
X if (pltout == NULL)
X ERR (FATAL, name, "can't open file %s\n", newpath);
X
X strcpy (colfile, "colfile");
X getpar (colfile, "s", colfile);
X#ifdef SEP
X Puthead ("\tcolfile=%s\n", colfile);
X Puthead ("\tcolor=T\n");
X if (color_mult == 1)
X Puthead ("\tumask=255\n");
X#endif
X }
X}
END_OF_FILE
if test 3778 -ne `wc -c <'Virtual_device/raslib/rasopen.c'`; then
echo shar: \"'Virtual_device/raslib/rasopen.c'\" unpacked with wrong size!
fi
# end of 'Virtual_device/raslib/rasopen.c'
fi
if test -f 'Virtual_device/vplib/vptextT.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'Virtual_device/vplib/vptextT.c'\"
else
echo shar: Extracting \"'Virtual_device/vplib/vptextT.c'\" \(3424 characters\)
sed "s/^X//" >'Virtual_device/vplib/vptextT.c' <<'END_OF_FILE'
X/*
X * Copyright 1987 the Board of Trustees of the Leland Stanford Junior
X * University. Official permission to use this software is included in
X * the documentation. It authorizes you to use this file for any
X * non-commercial purpose, provided that this copyright notice is not
X * removed and that any modifications made to this file are commented
X * and dated in the style of my example below.
X */
X
X/*
X *
X * source file: ./filters/vplib/vptextT.c
X *
X * Joe Dellinger (SEP), Dec 19 1987
X * Inserted this sample edit history entry.
X * Please log any further modifications made to this file:
X */
X
X/*
X * THIS FILE SHOWS HOW TO DO TEXT USING THE VP_TEXT COMMAND.
X * I INCLUDE THIS AS AN EXAMPLE OF HOW TO SUPPORT HARDWARE
X * TEXT WELL ON DEVICES THAT CAN'T DO ARBITRARY TRANSFORMATIONS.
X */
X
X#include <stdio.h>
X#include <math.h>
X#include "../include/vplot.h"
X#include "../include/extern.h"
X#include "../include/enum.h"
X#include "../include/params.h"
X#include "../include/round.h"
X#include "./vp.h"
X
static double path_orient_dx, path_orient_dy;
static double up_orient_dx, up_orient_dy;
X
extern int
gentext (), nulldev ();
X
vptext (string, pathx, pathy, upx, upy)
X char *string;
X float pathx, pathy, upx, upy;
X{
double fpathx, fpathy, fupx, fupy;
double up, path;
int vpsize, vporient;
float dot, cross, aspect;
int (*savevector) ();
int (*saveattributes) ();
int (*savearea) ();
X
X vpsetflag = NO;
X lost = YES;
X
X if (*string == '\0')
X return;
X
X/*
X * Set the inital parameters
X */
X fpathx = (double) pathx;
X fpathy = (double) pathy;
X fupx = (double) upx;
X fupy = (double) upy;
X
X path = sqrt ((double) (fpathx * fpathx + fpathy * fpathy));
X up = sqrt ((double) (fupx * fupx + fupy * fupy));
X
X path_orient_dx = fpathx / path;
X path_orient_dy = fpathy / path;
X up_orient_dx = fupx / up;
X up_orient_dy = fupy / up;
X
X/*
X * Check for skewed coordinates
X *
X * If the path and orient vectors are scewed by more than 2
X * degrees, or if the height/width ratio is more than 1 percent
X * off, or if the letters are mirrored, then use vector text.
X */
X
X dot = path_orient_dx * up_orient_dx +
X path_orient_dy * up_orient_dy;
X
X cross = path_orient_dx * up_orient_dy -
X path_orient_dy * up_orient_dx;
X
X if (path != 0.)
X {
X aspect = up / path;
X }
X else
X {
X if (up == 0.)
X aspect = 1.;
X else
X aspect = 0.;
X }
X
X if (fabs (dot) > .01 || cross < 0. || fabs (aspect - 1.) > .01)
X {
X gentext (string, pathx, pathy, upx, upy);
X return;
X }
X
X/*
X * Set the font and size
X */
X vpsize = ROUND (TXPERIN * path / RPERIN);
X vporient = ROUND (acos (path_orient_dx) * 180 / 3.141592654);
X if (pathy < 0)
X vporient *= -1;
X
X vp_text ((float) xold / RPERIN, (float) yold / RPERIN,
X vpsize, vporient, string);
X
X/*
X * Now reset the pen position.
X * Do a dummy run through (if this indeed a gentext font)
X */
X if (txfont < NUMGENFONT)
X {
X savevector = dev.vector;
X saveattributes = dev.attributes;
X savearea = dev.area;
X
X/*
X * Disconnect everything except error messages
X */
X dev.vector = nulldev;
X dev.attributes = nulldev;
X dev.area = nulldev;
X
X gentext (string, pathx, pathy, upx, upy);
X
X dev.vector = savevector;
X dev.attributes = saveattributes;
X dev.area = savearea;
X
X vp_move ((float) xold / RPERIN, (float) yold / RPERIN);
X }
X}
END_OF_FILE
if test 3424 -ne `wc -c <'Virtual_device/vplib/vptextT.c'`; then
echo shar: \"'Virtual_device/vplib/vptextT.c'\" unpacked with wrong size!
fi
# end of 'Virtual_device/vplib/vptextT.c'
fi
if test -f 'Vplot_Kernel/filters/Tests/polytest.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'Vplot_Kernel/filters/Tests/polytest.c'\"
else
echo shar: Extracting \"'Vplot_Kernel/filters/Tests/polytest.c'\" \(3083 characters\)
sed "s/^X//" >'Vplot_Kernel/filters/Tests/polytest.c' <<'END_OF_FILE'
X/*
X * Copyright 1987 the Board of Trustees of the Leland Stanford Junior
X * University. Official permission to use this software is included in
X * the documentation. It authorizes you to use this file for any
X * non-commercial purpose, provided that this copyright notice is not
X * removed and that any modifications made to this file are commented
X * and dated in the style of my example below.
X */
X
X/*
X *
X * source file: ./filters/Tests/polytest.c
X *
X * Joe Dellinger (SEP), June 11 1987
X * Inserted this sample edit history entry.
X * Please log any further modifications made to this file:
X */
X
X#include <stdio.h>
X#include <vplot.h>
X#include <math.h>
X
X#define NP 10
X
main ()
X{
int mtype, msize;
float xarray[NP], yarray[NP];
float dash[2], gap[2];
int i, j;
int pattern[100];
X
X/*
X * Set up where you want the vplot output to go.
X */
X vp_filep (stdout);
X
X/*
X * Decide what "style" plot this is to be.
X */
X vp_style (STANDARD);
X
X/*
X * Draw polymarkers.
X */
X for (i = 0; i < NP; i++)
X {
X xarray[i] = 4.25 + i % 3;
X yarray[i] = (1. - (float) i / NP) * 8.;
X }
X msize = 20;
X mtype = 23;
X vp_color (RED);
X vp_pmark (NP, mtype, msize, xarray, yarray);
X
X/*
X * Draw dashed polyline.
X */
X dash[0] = (.5);
X dash[1] = (.1);
X gap[0] = (.1);
X gap[1] = (.1);
X vp_setdash (dash, gap, 2);
X vp_color (WHITE);
X
X for (i = 0; i < NP; i++)
X {
X xarray[i] = 4.25 + (i + 1) % 3;
X yarray[i] = (1. - (float) i / NP) * 8.;
X }
X vp_pline (xarray, yarray, NP);
X
X vp_color (BLUE);
X
X for (i = 0; i < NP; i++)
X {
X xarray[i] = 4.25 + (i + 2) % 3;
X yarray[i] = (1. - (float) i / NP) * 8.;
X }
X vp_pline (xarray, yarray, NP);
X
X for (i = 0; i < 10; i++)
X for (j = 0; j < 10; j++)
X {
X pattern[i + j * 10] = (int)
X (.25 * ((i - 6.) * (i - 3.) + (j - 6.) * (j - 3.)));
X if (pattern[i + j * 10] > 7 || pattern[i + j * 10] < 0)
X pattern[i + j * 10] = 7;
X }
X vp_patload (10, 10, 10, GREEN, pattern);
X
X i = 0;
X pattern[i++] = 1;
X pattern[i++] = RED;
X pattern[i++] = 0. * HATCHPERIN;
X pattern[i++] = (.5) * HATCHPERIN;
X
X pattern[i++] = 1;
X pattern[i++] = WHITE;
X pattern[i++] = (.25) * HATCHPERIN;
X pattern[i++] = (.5) * HATCHPERIN;
X
X pattern[i++] = 1;
X pattern[i++] = BLUE;
X pattern[i++] = 0. * HATCHPERIN;
X pattern[i++] = (.5) * HATCHPERIN;
X
X pattern[i++] = 1;
X pattern[i++] = WHITE;
X pattern[i++] = (.25) * HATCHPERIN;
X pattern[i++] = (.5) * HATCHPERIN;
X
X vp_hatchload (30, 2, RED, pattern);
X
X vp_color (GREEN);
X for (i = 0; i < NP; i++)
X {
X xarray[i] = 9. + 2. * cos (i * 2. * 3.14159 / NP);
X yarray[i] = 4. + 2. * sin (i * 2. * 3.14159 / NP);
X }
X vp_fill (xarray, yarray, NP);
X
X vp_color (RED);
X for (i = 0; i < NP; i++)
X {
X xarray[i] = 2. + 2. * cos (i * 2. * 3.14159 / NP);
X yarray[i] = 4. + 2. * sin (i * 2. * 3.14159 / NP);
X }
X vp_fill (xarray, yarray, NP);
X
X vp_fat (5);
X vp_setdash (NULL, NULL, 0);
X vp_pline (xarray, yarray, NP);
X
X/*
X * Finish up
X */
X vp_endplot ();
X}
END_OF_FILE
if test 3083 -ne `wc -c <'Vplot_Kernel/filters/Tests/polytest.c'`; then
echo shar: \"'Vplot_Kernel/filters/Tests/polytest.c'\" unpacked with wrong size!
fi
# end of 'Vplot_Kernel/filters/Tests/polytest.c'
fi
if test -f 'Vplot_Kernel/filters/genlib/vecarea.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'Vplot_Kernel/filters/genlib/vecarea.c'\"
else
echo shar: Extracting \"'Vplot_Kernel/filters/genlib/vecarea.c'\" \(3158 characters\)
sed "s/^X//" >'Vplot_Kernel/filters/genlib/vecarea.c' <<'END_OF_FILE'
X/*
X * Copyright 1987 the Board of Trustees of the Leland Stanford Junior
X * University. Official permission to use this software is included in
X * the documentation. It authorizes you to use this file for any
X * non-commercial purpose, provided that this copyright notice is not
X * removed and that any modifications made to this file are commented
X * and dated in the style of my example below.
X */
X
X/*
X *
X * source file: ./filters/genlib/vecarea.c
X *
X * Joe Dellinger (SEP), June 11 1987
X * Inserted this sample edit history entry.
X * Please log any further modifications made to this file:
X */
X
X#include <stdio.h>
X#include "../include/pat.h"
X#include "../include/vertex.h"
X#include "../include/params.h"
X#include "../include/extern.h"
X
extern char *malloc ();
X
vecarea (npts, head)
X int npts;
X struct vertex *head;
X{
register int x, y, i;
register int xstr, xend, ystr, yend;
int skip;
int ncross;
int vminx, vmaxx, vminy, vmaxy;
struct vertex *xhead, *yhead, *v;
int *crosses;
X
X /*
X * allocate storage for scan line cross points
X */
X crosses = (int *) malloc ((unsigned) npts * sizeof (int));
X
X /*
X * double link the vertices. (head) is set to the node with the maximum
X * x-value so that intersect() will not eliminate 'head' while casting
X * off vertices.
X */
X vminx = head->x;
X vmaxx = head->x;
X vminy = head->y;
X vmaxy = head->y;
X xhead = head;
X yhead = head;
X
X v = head;
X for (i = 0; i < npts; i++)
X {
X if (v->x > vmaxx)
X {
X vmaxx = v->x;
X xhead = v;
X }
X if (v->y > vmaxy)
X {
X vmaxy = v->y;
X yhead = v;
X }
X if (v->x < vminx)
X vminx = v->x;
X if (v->y < vminy)
X vminy = v->y;
X v++;
X }
X
X if (vmaxx > xwmax)
X vmaxx = xwmax;
X if (vminx < xwmin)
X vminx = xwmin;
X if (vmaxy > ywmax)
X vmaxy = ywmax;
X if (vminy < ywmin)
X vminy = ywmin;
X
X if ((pat[ipat] .ydim > 0) || (pat[ipat] .xdim == 1))
X {
X /* stretch polygon in y-direction */
X v = yhead;
X do
X {
X v->y = 2 * (v->y) + 1;
X v = v->next;
X } while (v != yhead);
X
X skip = (pat[ipat] .xdim == 1) ? 1 : pat[ipat] .ydim;
X for (y = vminy; y <= vmaxy; y += skip)
X {
X ncross = intersect (2 * y, crosses, yhead, 1);
X sort (crosses, ncross);
X for (i = 0; i < ncross; i += 2)
X {
X xstr = crosses[i];
X xend = crosses[i + 1];
X dev.vector (xstr, y, xend, y, 0, 0);
X }
X }
X /* shrink in y */
X v = yhead;
X do
X {
X v->y = ((v->y - 1) / 2);
X v = v->next;
X } while (v != yhead);
X }
X
X if ((pat[ipat] .xdim > 1) && (pat[ipat] .ydim > 1))
X {
X /*
X * expand in x
X */
X v = xhead;
X do
X {
X v->x = 2 * v->x + 1;
X v = v->next;
X } while (v != xhead);
X
X skip = pat[ipat] .xdim;
X for (x = vminx; x <= vmaxx; x += skip)
X {
X ncross = intersect (2 * x, crosses, xhead, 0);
X sort (crosses, ncross);
X for (i = 0; i < ncross; i += 2)
X {
X ystr = crosses[i];
X yend = crosses[i + 1];
X dev.vector (x, ystr, x, yend, 0, 0);
X }
X }
X
X /*
X * shrink in x
X */
X v = xhead;
X do
X {
X v->x = ((v->x - 1) / 2);
X v = v->next;
X } while (v != xhead);
X }
X free ((char *) crosses);
X}
END_OF_FILE
if test 3158 -ne `wc -c <'Vplot_Kernel/filters/genlib/vecarea.c'`; then
echo shar: \"'Vplot_Kernel/filters/genlib/vecarea.c'\" unpacked with wrong size!
fi
# end of 'Vplot_Kernel/filters/genlib/vecarea.c'
fi
if test -f 'Vplot_Kernel/filters/loclib/getpar_decode.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'Vplot_Kernel/filters/loclib/getpar_decode.c'\"
else
echo shar: Extracting \"'Vplot_Kernel/filters/loclib/getpar_decode.c'\" \(3753 characters\)
sed "s/^X//" >'Vplot_Kernel/filters/loclib/getpar_decode.c' <<'END_OF_FILE'
X/*
X *
X * source file: ./filters/loclib/getpar_decode.c
X *
X * Joe Dellinger (SEP), June 11 1987
X * Inserted this sample edit history entry.
X * Please log any further modifications made to this file:
X */
X
X/* Revised 3-8-86 stew Added timestamp to recover older functionality
X * when presented with multiple tags
X * Revised 9-18-86 joe Added '1' type ... y or 1 for yes, n or 0 for no
X */
X#include <stdio.h>
X#include "fastpar.h"
X
X/*
X * split off first tag "n1" from input tags "n1 nt ne"
X */
static int tag_split(tag,tlen,subtag,sublen)
register char *tag;
char **subtag;
register int tlen;
int *sublen;
X{
X register int i,j;
X
X for(i=0; i<tlen; i++) if(tag[i] != ' ') break;
X if(i == tlen) return(0); /* all bytes consumed */
X *subtag = tag+i;
X for(j=i+1; j<tlen; j++) if(tag[j] == ' ') break;
X *sublen = (j-i);
X return(1);
X}
X
X/*
X * take string "n1 nt ne" and look up stored parameters with those
X * names, returning value with most recent timestamp
X */
int getpar_decode(q,qlen,tag,type,val)
hash_item **q;
int qlen;
char *tag, *type;
MIXED val;
X{
X register char *next, *end;
X char *subtag;
X int sublen, count = 0 ;
X register hash_item *foundit, *saveit;
X extern hash_item *getpar_hash_lookup();
X register int bigtime = -1;
X
X next=tag; end = tag+strlen(tag);
X while(tag_split(next,end-next,&subtag,&sublen)) {
X foundit = getpar_hash_lookup(q,qlen,subtag,sublen);
X if(foundit != ((hash_item *) NULL))
X if(bigtime < foundit->timestamp) {
X bigtime = foundit->timestamp;
X saveit = foundit;
X }
X next = subtag+sublen;
X }
X if(bigtime >= 0) count = getpar_getval(saveit,type,val);
X return(count);
X }
X
X/*
X * return 1 if char c is not in string s; else return 0
X */
static int
getpar_neq(c,s)
register int c;
register char *s;
X{
X do {
X if(*s == c) {
X return(0);
X }
X }
X while(*s++);
X return(1);
X}
X
X/*
X * take stored string value and convert it according to "type" format
X * result stored at "ptr"
X *
X * type formats:
X * "i" or "d" to convert to integer
X * "r" or "f" to convert to real
X * "g" to convert to double precision
X * "s" to keep as a string value
X *
X * stored string values may specify a vector of numerics:
X *
X * 3.0,5x3.5,-1.0,3*2.2
X *
X * yields the result:
X *
X * 3.0,3.5,3.5,3.5,3.5,3.5,-1.0,2.2,2.2,2.2
X *
X * the function's return value will be the count (10) of items converted
X */
static int getpar_getval(foundit,type,ptr)
hash_item *foundit;
char *type;
MIXED ptr;
X{
X register char *sptr, *str;
X register int ival, jval;
X register int index, endindex;
X extern double atof();
X extern int atoi();
X float flt;
X double dubble;
X int integer;
X index=0;
X str = foundit->val;
X ival = foundit->vlen;
X
X while(ival > 0) {
X endindex= index+1;
X if(*type != 's') {
X sptr = str;
X jval = ival;
X while(jval && getpar_neq((int) (*sptr),"*x,"))
X { sptr++; jval--;}
X if(jval > 0)
X if(*sptr=='*' || *sptr=='x') {
X endindex= index+atoi(str);
X str= sptr+1;
X ival = jval-1;
X }
X }
X switch(*type) {
X case 'd':
X case 'i':
X integer= atoi(str);
X while(index<endindex) ptr.i[index++]= integer;
X break;
X case '1':
X if (str[0] == 'y' || str[0] == '1' || str[0] == 'Y')
X integer = 1;
X else
X integer = 0;
X while(index<endindex) ptr.i[index++]= integer;
X break;
X case 'f':
X case 'r':
X flt= atof(str);
X while(index<endindex) ptr.f[index++]= flt;
X break;
X case 'g':
X dubble= atof(str);
X while(index<endindex) ptr.g[index++]= dubble;
X break;
X case 's':
X bcopy(str,ptr.s,ival);
X ptr.s[ival]='\0';
X return(1);
X default:
X err("getpar() unknown conversion type %c\n",*type);
X }
X while((--ival) && ((*(str++)) != ',')); /* skip past next comma */
X }
X return(endindex);
X}
END_OF_FILE
if test 3753 -ne `wc -c <'Vplot_Kernel/filters/loclib/getpar_decode.c'`; then
echo shar: \"'Vplot_Kernel/filters/loclib/getpar_decode.c'\" unpacked with wrong size!
fi
# end of 'Vplot_Kernel/filters/loclib/getpar_decode.c'
fi
if test -f 'Vplot_Kernel/filters/proc_vplot.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'Vplot_Kernel/filters/proc_vplot.c'\"
else
echo shar: Extracting \"'Vplot_Kernel/filters/proc_vplot.c'\" \(3621 characters\)
sed "s/^X//" >'Vplot_Kernel/filters/proc_vplot.c' <<'END_OF_FILE'
X/*
X * Copyright 1987 the Board of Trustees of the Leland Stanford Junior
X * University. Official permission to use this software is included in
X * the documentation. It authorizes you to use this file for any
X * non-commercial purpose, provided that this copyright notice is not
X * removed and that any modifications made to this file are commented
X * and dated in the style of my example below.
X */
X
X/*
X *
X * source file: ./filters/proc_vplot.c
X *
X * Joe Dellinger (SEP), Feb 19 1988
X * Inserted this sample edit history entry.
X * Please log any further modifications made to this file:
X *
X * Joe Dellinger Feb 22 1988
X * Created INT_PAUSE to be separate from INT_GET_STRING.
X * Joe Dellinger Feb 27 1988
X * Interact option turns of endpausing.
X */
X
X#include <stdio.h>
X#include <math.h>
X#define GETPAR getpar
X
X
X#include <sys/ioctl.h>
X#include <sys/types.h>
X#include <sys/stat.h>
X#include <sgtty.h>
X#include <ctype.h>
X#include <strings.h>
X
X#include <vplot.h>
X
X#include "./include/params.h" /* for machine dependencies */
X#include "./include/enum.h"
X#include "./include/err.h"
X#include "./include/attrcom.h"
X#include "./include/intcom.h"
X#include "./include/mesgcom.h"
X#include "./include/erasecom.h"
X#include "./include/closestat.h"
X#include "./include/pat.h"
X#include "./include/vertex.h"
X#include "./include/round.h"
X#include "./include/extern.h"
X
extern struct sgttyb tty_clean_state;
extern int tty_clean_local_mode;
extern int need_end_erase;
extern int buffer_input;
extern int ever_called;
extern int out_isatty;
extern int nplots;
extern int endpause;
extern int allowecho;
extern int epause;
extern char interact[];
extern int pltoutfd;
extern int (*message) ();
extern FILE *pltin;
extern FILE *controltty;
extern FILE *pltinarray[];
extern char pltinname[][MAXFLEN + 1];
extern char pltname[];
extern int infileno;
extern int (*genreader) ();
X
FILE *fopen ();
X
X/*
X * This routine is responsible for processing the input files,
X * and performing the necessary pausing, etc, that may be needed
X * at the end before exiting.
X */
X
proc_vplot ()
X{
int ii;
char string[MAXFLEN + 1];
X
X/*
X * Finally, shove all the plot files off to be done!
X */
X
X if (!buffer_input)
X {
X for (ii = 0; ii < infileno; ii++)
X {
X setbuf (pltinarray[ii], (char *) NULL);
X }
X }
X
X (*genreader) (infileno, pltinarray, pltinname);
X
X/*
X * Normally, *genreader will be gen_do_dovplot, found in genlib
X */
X
X if (ever_called)
X {
X dev.close (CLOSE_FLUSH);
X if (epause > 0)
X {
X sleep ((unsigned) epause);
X }
X if (need_end_erase)
X {
X dev.erase (ERASE_END);
X }
X /*
X * Inquire point back from device. Skip endpause stuff if we do
X * interact, Since that's a pause in itself.
X */
X if (interact[0] != '\0')
X {
X getapoint ();
X }
X else
X {
X
X/*
X * Pause at the end if the user specifically asks us to on the command line,
X * even if we don't think we should because we think it's a file.
X */
X if (epause <= 0 &&
X (out_isatty || getpar ("endpause", "s", string))
X && endpause)
X {
X dev.close (CLOSE_PAUSE);
X dev.interact (INT_F_PAUSE, controltty, string);
X }
X }
X message (MESG_ON);
X dev.close (CLOSE_NORMAL);
X dev.close (CLOSE_DONE);
X nplots++;
X }
X else
X {
X dev.close (CLOSE_NOTHING);
X ERR (COMMENT, name, "No input?");
X dev.close (CLOSE_DONE);
X }
X
X /*
X * Done, let them see what they are doing again
X */
X if (!allowecho)
X {
X ioctl (pltoutfd, TIOCLSET, (char *) (&tty_clean_local_mode));
X ioctl (pltoutfd, TIOCSETN, (char *) (&tty_clean_state));
X }
X}
END_OF_FILE
if test 3621 -ne `wc -c <'Vplot_Kernel/filters/proc_vplot.c'`; then
echo shar: \"'Vplot_Kernel/filters/proc_vplot.c'\" unpacked with wrong size!
fi
# end of 'Vplot_Kernel/filters/proc_vplot.c'
fi
if test -f 'Vplot_Kernel/filters/utilities/error.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'Vplot_Kernel/filters/utilities/error.c'\"
else
echo shar: Extracting \"'Vplot_Kernel/filters/utilities/error.c'\" \(3578 characters\)
sed "s/^X//" >'Vplot_Kernel/filters/utilities/error.c' <<'END_OF_FILE'
X/*
X * Copyright 1987 the Board of Trustees of the Leland Stanford Junior
X * University. Official permission to use this software is included in
X * the documentation. It authorizes you to use this file for any
X * non-commercial purpose, provided that this copyright notice is not
X * removed and that any modifications made to this file are commented
X * and dated in the style of my example below.
X */
X
X/*
X *
X * source file: ./filters/utilities/error.c
X *
X * Joe Dellinger (SEP), June 11 1987
X * Inserted this sample edit history entry.
X * Please log any further modifications made to this file:
X * Stewart A. Levin (SEP), June 23 1987
X * Changed system("stty echo") to ioctl() to restore original tty
X * settings after we've deliberately forced echo off.
X * Stewart A. Levin (SEP), July 5,1987
X * Added reset of local mode word corresponding to frontend.c change.
X * Joe Dellinger, Nov 9, 1987
X * Stew's changes make it necessary to explicitly put "Carriage-Return
X * Line-Feed" instead of just "\n", since output stream may be
X * uncooked. "CRLF" is defined in mesgcom.h.
X * Joe Dellinger, Jan 10, 1988
X * Up to 8 arguments instead of just 3! This routine isn't very kosher.
X * Joe Dellinger, Feb 16, 1988
X * Use vsprintf on machines that have them.
X */
X
X/*
X * error reporting for VPLOT filters
X * To print text to the outside world, other routines must go through err,
X * which in turn must go through message.
X */
X
X#include <sys/ioctl.h>
X#include <sgtty.h>
X#include <stdio.h>
X#include "../include/err.h"
X#include "../include/closestat.h"
X#include "../include/mesgcom.h"
X#include "../include/extern.h"
extern int device_open;
extern struct sgttyb tty_clean_state;
extern int tty_clean_local_mode;
X
X#if defined (SUN) || defined (ULTRIX)
X
X#include <varargs.h>
X
ERR (va_alist)
va_dcl
X{
va_list apdum;
int type;
char *filter, *fmt;
X
char string[200];
char text[150];
extern char *sprintf (), *strcat ();
X
X va_start (apdum);
X type = va_arg (apdum, int);
X filter = va_arg (apdum, char *);
X fmt = va_arg (apdum, char *);
X
X (void) vsprintf (text, fmt, apdum);
X (void) sprintf (string, "%s: ", filter);
X
X va_end (apdum);
X
X#else
X
ERR (type, filter, fmt, a1, a2, a3, a4, a5, a6, a7, a8)
X int type;
X char *filter, *fmt;
X double a1, a2, a3, a4, a5, a6, a7, a8;
X{
char string[200];
char text[150];
extern char *sprintf (), *strcat ();
X
X (void) sprintf (text, fmt, a1, a2, a3, a4, a5, a6, a7, a8);
X (void) sprintf (string, "%s: ", filter);
X
X#endif
X
X message (MESG_READY);
X
X switch (type)
X {
X case WARN:
X (void) strcat (string, "(warning) ");
X (void) strcat (string, text);
X (void) strcat (string, CRLF);
X message (MESG_TEXT, string);
X message (MESG_DONE);
X break;
X case COMMENT:
X (void) strcat (string, " ");
X (void) strcat (string, text);
X (void) strcat (string, CRLF);
X message (MESG_TEXT, string);
X message (MESG_DONE);
X break;
X case FATAL:
X default:
X (void) strcat (string, "(fatal) ");
X (void) strcat (string, text);
X (void) strcat (string, CRLF);
X message (MESG_TEXT, string);
X message (MESG_DONE);
X if (device_open)
X {
X dev.close (CLOSE_ERROR);
X message (MESG_ON);
X dev.close (CLOSE_DONE);
X fflush (pltout);
X }
X if (!allowecho) /* restore terminal to original tty state */
X {
X (void) ioctl ((int) (fileno (pltout)), TIOCLSET,
X (char *) (&tty_clean_local_mode));
X (void) ioctl ((int) (fileno (pltout)), TIOCSETN,
X (char *) (&tty_clean_state));
X }
X exit (-1);
X }
X}
END_OF_FILE
if test 3578 -ne `wc -c <'Vplot_Kernel/filters/utilities/error.c'`; then
echo shar: \"'Vplot_Kernel/filters/utilities/error.c'\" unpacked with wrong size!
fi
# end of 'Vplot_Kernel/filters/utilities/error.c'
fi
if test -f 'Vplot_Kernel/filters/utilities/vptodev.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'Vplot_Kernel/filters/utilities/vptodev.c'\"
else
echo shar: Extracting \"'Vplot_Kernel/filters/utilities/vptodev.c'\" \(3185 characters\)
sed "s/^X//" >'Vplot_Kernel/filters/utilities/vptodev.c' <<'END_OF_FILE'
X/*
X * Copyright 1987 the Board of Trustees of the Leland Stanford Junior
X * University. Official permission to use this software is included in
X * the documentation. It authorizes you to use this file for any
X * non-commercial purpose, provided that this copyright notice is not
X * removed and that any modifications made to this file are commented
X * and dated in the style of my example below.
X */
X
X/*
X *
X * source file: ./filters/utilities/vptodev.c
X *
X * Joe Dellinger (SEP), June 11 1987
X * Inserted this sample edit history entry.
X * Please log any further modifications made to this file:
X */
X
X/*
X * convert vplot coordinates to device coordinates, or vice versa
X */
X#include <stdio.h>
X#include "../include/extern.h"
X#include "../include/round.h"
X
vptodevxy (x, y, outx, outy)
X int x, y;
X int *outx, *outy;
X{
float tempx, tempy, temp;
X
X
X tempx = (float) (x - xorigin) * xscale;
X tempy = (float) (y - yorigin) * yscale;
X
X temp = mxx * tempx + mxy * tempy;
X tempy = myx * tempx + myy * tempy;
X tempx = temp;
X
X tempx = tempx * hdevscale + dev_xmin + hshift;
X tempy = tempy * vdevscale + dev_ymin + vshift;
X
X *outx = ROUND (tempx);
X *outy = ROUND (tempy);
X}
X
vptodevw (x1, y1, x2, y2, x1out, y1out, x2out, y2out)
X int x1, y1, x2, y2;
X int *x1out, *y1out, *x2out, *y2out;
X{
int x11, y11, x12, y12, x21, y21, x22, y22, a, b;
X
X vptodevxy (x1, y1, &x11, &y11);
X vptodevxy (x1, y2, &x12, &y12);
X vptodevxy (x2, y1, &x21, &y21);
X vptodevxy (x2, y2, &x22, &y22);
X
X a = (x11 > x12 ? x11 : x12);
X b = (x22 > x21 ? x22 : x21);
X *x2out = (a > b ? a : b);
X
X a = (y11 > y12 ? y11 : y12);
X b = (y22 > y21 ? y22 : y21);
X *y2out = (a > b ? a : b);
X
X a = (x11 < x12 ? x11 : x12);
X b = (x22 < x21 ? x22 : x21);
X *x1out = (a < b ? a : b);
X
X a = (y11 < y12 ? y11 : y12);
X b = (y22 < y21 ? y22 : y21);
X *y1out = (a < b ? a : b);
X}
X
devtovpxy (x, y, outx, outy)
X int x, y;
X int *outx, *outy;
X{
float tempx, tempy, temp;
X
X tempx = (float) (x - dev_xmin - hshift) / hdevscale;
X tempy = (float) (y - dev_ymin - vshift) / vdevscale;
X
X temp = mxx * tempx - mxy * tempy;
X tempy = -myx * tempx + myy * tempy;
X tempx = temp;
X
X tempx = tempx / xscale + xorigin;
X tempy = tempy / yscale + yorigin;
X
X *outx = ROUND (tempx);
X *outy = ROUND (tempy);
X}
X
devtovpw (x1, y1, x2, y2, x1out, y1out, x2out, y2out)
X int x1, y1, x2, y2;
X int *x1out, *y1out, *x2out, *y2out;
X{
int x11, y11, x12, y12, x21, y21, x22, y22, a, b;
X
X devtovpxy (x1, y1, &x11, &y11);
X devtovpxy (x1, y2, &x12, &y12);
X devtovpxy (x2, y1, &x21, &y21);
X devtovpxy (x2, y2, &x22, &y22);
X
X a = (x11 > x12 ? x11 : x12);
X b = (x22 > x21 ? x22 : x21);
X *x2out = (a > b ? a : b);
X
X a = (y11 > y12 ? y11 : y12);
X b = (y22 > y21 ? y22 : y21);
X *y2out = (a > b ? a : b);
X
X a = (x11 < x12 ? x11 : x12);
X b = (x22 < x21 ? x22 : x21);
X *x1out = (a < b ? a : b);
X
X a = (y11 < y12 ? y11 : y12);
X b = (y22 < y21 ? y22 : y21);
X *y1out = (a < b ? a : b);
X}
END_OF_FILE
if test 3185 -ne `wc -c <'Vplot_Kernel/filters/utilities/vptodev.c'`; then
echo shar: \"'Vplot_Kernel/filters/utilities/vptodev.c'\" unpacked with wrong size!
fi
# end of 'Vplot_Kernel/filters/utilities/vptodev.c'
fi
if test -f 'Vplot_Kernel/lvplot/fixcplot' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'Vplot_Kernel/lvplot/fixcplot'\"
else
echo shar: Extracting \"'Vplot_Kernel/lvplot/fixcplot'\" \(3089 characters\)
sed "s/^X//" >'Vplot_Kernel/lvplot/fixcplot' <<'END_OF_FILE'
X#!/bin/csh
X# fixcplot: a sed script to change cplotlib function names to the
X# newer vplotlib names.
X#
X# keywords: vplot fix vplotlib update
X#
if ($#argv == 0) then
X echo "fixcplot, a shell to change archaic cplotlib function names"
X echo "to their new forms. The original file is kept in .Boriginal_file"
X echo "Usage: fixcplot file_name"
exit
endif
X
cp $1 .B$1
expand < .B$1 | sed \
X -e 's/ window[ ]*(/ vp_clip (/g'\
X -e 's/ windo[ ]*(/ vp_clip (/g'\
X -e 's/ where[ ]*(/ vp_where (/g'\
X -e 's/ uwindow[ ]*(/ vp_uclip (/g'\
X -e 's/ uwindo[ ]*(/ vp_uclip (/g'\
X -e 's/ setfn[ ]*(/ vp_file (/g'\
X -e 's/ setfp[ ]*(/ vp_filep (/g'\
X -e 's/ set0[ ]*(/ vp_orig (/g'\
X -e 's/ setu0[ ]*(/ vp_uorig (/g'\
X -e 's/ setcol[ ]*(/ vp_color (/g'\
X -e 's/ setscl[ ]*(/ vp_scale (/g'\
X -e 's/ setdash[ ]*(/ vp_dash (/g'\
X -e 's/ text[ ]*(\([^,]*\),\([^,]*\),\([^,]*\),\([^,]*\),\([^,]*\))/ vp_text (\1,\2,\3,90*(\4),\5)/g'\
X -e 's/ utext[ ]*(\([^,]*\),\([^,]*\),\([^,]*\),\([^,]*\),\([^,]*\))/ vp_utext (\1,\2,\3,90*(\4),\5)/g'\
X -e 's/ Text[ ]*(/ vp_text (/g'\
X -e 's/ uText[ ]*(/ vp_utext (/g'\
X -e 's/ arrow[ ]*(/ vp_arrow (/g'\
X -e 's/ uarrow[ ]*(/ vp_uarrow (/g'\
X -e 's/ area[ ]*(/ vp_area (/g'\
X -e 's/ uarea[ ]*(/ vp_uarea (/g'\
X -e 's/ draw[ ]*(/ vp_draw (/g'\
X -e 's/ udraw[ ]*(/ vp_udraw (/g'\
X -e 's/ endplot[ ]*(/ vp_endplot (/g'\
X -e 's/ endplt[ ]*(/ vp_endplot (/g'\
X -e 's/ erase[ ]*(/ vp_erase (/g'\
X -e 's/ move[ ]*(/ vp_move (/g'\
X -e 's/ umove[ ]*(/ vp_umove (/g'\
X -e 's/ pendn[ ]*(/ vp_pendn (/g'\
X -e 's/ upendn[ ]*(/ vp_upendn (/g'\
X -e 's/ penup[ ]*(/ vp_penup (/g'\
X -e 's/ plot[ ]*(/ vp_plot (/g'\
X -e 's/ uplot[ ]*(/ vp_uplot (/g'\
X -e 's/ purge_plot[ ]*(/ vp_purge (/g'\
X -e 's/ setfat[ ]*(/ vp_fat (/g'\
X -e 's/ setovl[ ]*(/ vp_overlay (/g' \
X -e 's/^window[ ]*(/vp_clip (/'\
X -e 's/^windo[ ]*(/vp_clip (/'\
X -e 's/^where[ ]*(/vp_where (/'\
X -e 's/^uwindow[ ]*(/vp_uclip (/'\
X -e 's/^uwindo[ ]*(/vp_uclip (/'\
X -e 's/^setfn[ ]*(/vp_file (/'\
X -e 's/^setfp[ ]*(/vp_filep (/'\
X -e 's/^set0[ ]*(/vp_orig (/'\
X -e 's/^setu0[ ]*(/vp_uorig (/'\
X -e 's/^setcol[ ]*(/vp_color (/'\
X -e 's/^setscl[ ]*(/vp_scale (/'\
X -e 's/^setdash[ ]*(/vp_dash (/'\
X -e 's/^text[ ]*(\([^,]*\),\([^,]*\),\([^,]*\),\([^,]*\),\([^,]*\))/vp_text (\1,\2,\3,90*(\4),\5)/'\
X -e 's/^utext[ ]*(\([^,]*\),\([^,]*\),\([^,]*\),\([^,]*\),\([^,]*\))/vp_utext (\1,\2,\3,90*(\4),\5)/'\
X -e 's/^Text[ ]*(/vp_text (/'\
X -e 's/^uText[ ]*(/vp_utext (/'\
X -e 's/^arrow[ ]*(/vp_arrow (/'\
X -e 's/^uarrow[ ]*(/vp_uarrow (/'\
X -e 's/^area[ ]*(/vp_area (/'\
X -e 's/^uarea[ ]*(/vp_uarea (/'\
X -e 's/^draw[ ]*(/vp_draw (/'\
X -e 's/^udraw[ ]*(/vp_udraw (/'\
X -e 's/^endplot[ ]*(/vp_endplot (/'\
X -e 's/^endplt[ ]*(/vp_endplot (/'\
X -e 's/^erase[ ]*(/vp_erase (/'\
X -e 's/^move[ ]*(/vp_move (/'\
X -e 's/^umove[ ]*(/vp_umove (/'\
X -e 's/^pendn[ ]*(/vp_pendn (/'\
X -e 's/^upendn[ ]*(/vp_upendn (/'\
X -e 's/^penup[ ]*(/vp_penup (/'\
X -e 's/^plot[ ]*(/vp_plot (/'\
X -e 's/^uplot[ ]*(/vp_uplot (/'\
X -e 's/^purge_plot[ ]*(/vp_purge (/'\
X -e 's/^setfat[ ]*(/vp_fat (/'\
X -e 's/^setovl[ ]*(/vp_overlay (/' \
X| unexpand > $1
END_OF_FILE
if test 3089 -ne `wc -c <'Vplot_Kernel/lvplot/fixcplot'`; then
echo shar: \"'Vplot_Kernel/lvplot/fixcplot'\" unpacked with wrong size!
fi
chmod +x 'Vplot_Kernel/lvplot/fixcplot'
# end of 'Vplot_Kernel/lvplot/fixcplot'
fi
if test -f 'Vplot_Kernel/lvplot/vp_plot.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'Vplot_Kernel/lvplot/vp_plot.c'\"
else
echo shar: Extracting \"'Vplot_Kernel/lvplot/vp_plot.c'\" \(3100 characters\)
sed "s/^X//" >'Vplot_Kernel/lvplot/vp_plot.c' <<'END_OF_FILE'
X/*
X * Copyright 1987 the Board of Trustees of the Leland Stanford Junior
X * University. Official permission to use this software is included in
X * the documentation. It authorizes you to use this file for any
X * non-commercial purpose, provided that this copyright notice is not
X * removed and that any modifications made to this file are commented
X * and dated in the style of my example below.
X */
X
X/*
X *
X * source file: ./lvplot/vp_plot.c
X *
X * Joe Dellinger (SEP), June 11 1987
X * Inserted this sample edit history entry.
X * Please log any further modifications made to this file:
X * Joe Dellinger Jan 14 1988
X * Do rounding (not truncation) before output.
X */
X
X#ifndef FORTRAN
X#include <stdio.h>
X#include <vplot.h>
X#include "round.h"
X#include "vp_pc.h"
X
PC vp_pc =
X{
X 0.0, 0.0,
X 0.0, 0.0,
X 1.0, 1.0,
X 0.0, 0.0,
X 0.0,
X 0.0, 0.0, 0.0, 0.0,
X 0,
X 0,
X stdout,
X TH_NORMAL, TV_NORMAL,
X NO_CHANGE, NO_CHANGE, NO_CHANGE,
X};
X
vp_plot (x, y, down)
X float x, y;
X int down;
X{
float dx, dy, dist, dpos, xp, yp, tonext, cosine, sine;
int i;
double p_fmod (), sqrt ();
X
X if (!down || !vp_pc._dashon) /* if move or no dashes */
X {
X p_pout (x, y, down, vp_pc._pltout); /* output a move or draw */
X vp_pc._xold = x;
X vp_pc._yold = y; /* save old x and y */
X vp_pc._dpos = 0.0; /* reset position in dashes */
X return;
X }
X dx = x - vp_pc._xold;
X dy = y - vp_pc._yold; /* change in x and y */
X dist = sqrt (dx * dx + dy * dy); /* distance */
X if (dist <= 0.)
X return; /* return if no change */
X cosine = dx / dist;
X sine = dy / dist;
X dpos = vp_pc._dpos; /* current position in dashes */
X vp_pc._dpos = p_fmod (dpos + dist, vp_pc._ddef[3]); /* next position in
X * dashes */
X for (i = 0; i < 4 && vp_pc._ddef[i] <= dpos; i++); /* index to dash def */
X xp = vp_pc._xold;
X yp = vp_pc._yold; /* initialize xp and yp */
X while (dist > 0.0)
X {
X tonext = vp_pc._ddef[i] - dpos; /* dist to next gap or dash */
X if (tonext > dist)
X tonext = dist;
X xp += tonext * cosine;
X yp += tonext * sine;
X p_pout (xp, yp, !(i % 2), vp_pc._pltout);
X dpos = vp_pc._ddef[i]; /* new position */
X i = (i + 1) % 4; /* i = 0,1,2, or 3 */
X if (i == 0)
X dpos = 0.0; /* back to start of dashes */
X dist -= tonext;
X }
X vp_pc._xold = xp;
X vp_pc._yold = yp;
X}
X
p_pout (xp, yp, down, plt)
X float xp, yp;
X int down;
X FILE *plt;
X{
int ix, iy;
X xp = (xp > VP_MAX) ? VP_MAX : xp;
X xp = (xp < -VP_MAX) ? -VP_MAX : xp;
X yp = (yp > VP_MAX) ? VP_MAX : yp;
X yp = (yp < -VP_MAX) ? -VP_MAX : yp;
X ix = ROUND (xp * RPERIN);
X iy = ROUND (yp * RPERIN);
X putc ((down ? VP_DRAW : VP_MOVE), plt);
X puth (ix, plt);
X puth (iy, plt);
X}
X
static double
p_fmod (x, y)
X float x, y;
X{
double floor ();
X return (x - floor (x / y) * y);
X}
X
X#else
X
X#include <stdio.h>
X#include <vplot.h>
X#include "vp_pc.h"
X
vpplot_ (x, y, down)
X float *x, *y;
X int *down;
X{
X vp_plot (*x, *y, *down);
X}
X#endif
END_OF_FILE
if test 3100 -ne `wc -c <'Vplot_Kernel/lvplot/vp_plot.c'`; then
echo shar: \"'Vplot_Kernel/lvplot/vp_plot.c'\" unpacked with wrong size!
fi
# end of 'Vplot_Kernel/lvplot/vp_plot.c'
fi
echo shar: End of archive 11 \(of 24\).
cp /dev/null ark11isdone
MISSING=""
for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 ; do
if test ! -f ark${I}isdone ; then
MISSING="${MISSING} ${I}"
fi
done
if test "${MISSING}" = "" ; then
echo You have unpacked all 24 archives.
rm -f ark[1-9]isdone ark[1-9][0-9]isdone
else
echo You still need to unpack the following archives:
echo " " ${MISSING}
fi
## End of shell archive.
exit 0
--
Please send comp.sources.unix-related mail to rsalz at uunet.uu.net.
More information about the Comp.sources.unix
mailing list