home *** CD-ROM | disk | FTP | other *** search
- From: hot@integow.uucp (Roland van Hout)
- Newsgroups: alt.sources
- Subject: PD plot(4) librarys (and hercules driver for interactive 386) part 8 of 9
- Message-ID: <1396@integow.uucp>
- Date: 28 Oct 90 03:58:19 GMT
-
-
-
- #!/bin/sh
- # This is part 08 of a multipart archive
- if touch 2>&1 | fgrep '[-amc]' > /dev/null
- then TOUCH=touch
- else TOUCH=true
- fi
- # ============= herc/herc.h ==============
- echo "x - extracting herc/herc.h (Text)"
- sed 's/^X//' << 'SHAR_EOF' > herc/herc.h &&
- Xstatic char SCCS_HERCH[] = "%W% %G% %U%";
- X/*
- X++++
- X herc.h
- X
- X PURPOSE : Hercules Graphics constants and macros
- X
- X AUTHOR : W. Hatch
- X
- X COMPANY : Computational Engineering
- X 14504 Greenview Drive Suite 500
- X Laurel, Maryland 20708
- X 301-470-3839
- X usrnet: uunet!bts!bill
- X
- X DATE : 2/4/90
- X
- X CREDITS : I got useful information from all of the following
- X sources which I wish to acknowledge and thank.
- X
- X 1.) David B. Dotty, "Programmers Guide To The Hercules
- X Graphics Card", Addison-Wesley, 1988,
- X
- X 2.) Dan Schechter, "How To Access The Hercules Graphics
- X Plane", The C Users Journal, August, 1988,
- X
- X 3.) geb, port (sample Hercules graphics driver)
- X 1988, Reynolds Metals Co., PO Box 1200,
- X Sheffield, Al. 35660, (205)-386-9657,
- X
- X 4.) David T. Lewis, mode.c from gnuplot, 7/13/87,
- X
- X 5.) Jeffery A. Turner, setmode.c, (Hercules mode set for
- X Everix), 5/20/87,
- X
- X 6.) Janet I. Egan and Thomas J. Teixeira, "Writing a Unix
- X Device Driver", Wiley, 1988,
- X
- X 7.) "Software Development System Volume I", Microport
- X V386/3.0e,
- X
- X 8.) Microport Tech Support System V386 Dos Merge 386
- X Version 1.1.1U, 12/15/88,
- X
- X 9.) Microport documentation on Display(7) forwarded
- X by Bob Courtney, uunet!agc!courtney, August, 1989,
- X
- X 10.) Cliff Flint, sample Hercules driver code,
- X uunet!ames!mailrus!umix!clif!clif, April, 1989,
- X
- X 11.) Machael Gordon and Colon Kelly, hercgraph.asm,
- X Hercules graphics code for MS-DOS gnuplot,
- X December, 1986.
- X
- X---*/
- X/*
- X------------------------------------------------------------------------
- X MODIFICATIONS
- XDATE-PROGRAMMER DESCRIPTION
- X------------------------------------------------------------------------
- X*/
- X#include <sys/types.h>
- X#include <sys/dir.h>
- X#include <sys/signal.h>
- X#include <sys/param.h>
- X#include <stdio.h>
- X#include <sys/user.h>
- X#include <fcntl.h>
- X#include <sys/file.h>
- X#include <sys/ioctl.h>
- X#ifndef IX386
- X#include <sys/io_op.h>
- X#endif
- X/*----------------------------------------------------------------------*/
- X/* values returned by driver functions */
- X/*----------------------------------------------------------------------*/
- X#define SUCCESS 0
- X#define FAILURE (-1)
- X
- X/*----------------------------------------------------------------------*/
- X/* system constants used by kernel functions */
- X/*----------------------------------------------------------------------*/
- X#define IPC_FLAG (IPC_CREAT|00666)
- X#define PG_P 0x00000001 /* page present bit */
- X
- X/*----------------------------------------------------------------------*/
- X/* herc page physical base addresses and sizes in units of 4096 bytes */
- X/*----------------------------------------------------------------------*/
- X#define HERC_TEXT_PAGE 176
- X#define HERC_PAGE_0 176
- X#define HERC_PAGE_1 184
- X#define HERC_SIZE 8
- X
- X/*----------------------------------------------------------------------*/
- X/* herc base addresses and sizes in bytes */
- X/*----------------------------------------------------------------------*/
- X#define HERC_TEXT_BUF 0xB000
- X#define HERC_P0_BUF 0xB000
- X#define HERC_P1_BUF 0xB800
- X
- X#define HERC_PAGE_BYTES 32768
- X
- X/*----------------------------------------------------------------------*/
- X/* error message macro */
- X/*----------------------------------------------------------------------*/
- X#define KERROR(a) printf("ERROR herc: %s\n",a);
- X
- X/*----------------------------------------------------------------------*/
- X/* herc ioctl commands and data structure for ioctl(dev, cmd, arg) */
- X/*----------------------------------------------------------------------*/
- X /* cmd values */
- X# define SET_PIXEL 2
- X# define CLEAR_PIXEL 3
- X# define REVERSE_PIXEL 4
- X# define CLEAR_SCREEN_0 5
- X# define CLEAR_SCREEN_1 6
- X# define SWITCH_SCREEN_0 7
- X# define SWITCH_SCREEN_1 8
- X
- X /* HERC arg (a data structure) */
- X typedef struct s_hercio {
- X int cmd;
- X int phys_x;
- X int phys_y;
- X } HERC;
- X# define NO_HERC (HERC *)0
- X# define VALIDHERC(a) ((a) != NO_HERC)
- X
- X/*----------------------------------------------------------------------*/
- X/* ports and byte values to put to ports */
- X/*----------------------------------------------------------------------*/
- X#define CONFIG_SWITCH 0x3bf
- X# define CF_TEXT_ONLY 0 /* default, prevents graphics */
- X# define CF_PAGE_0 01 /* enable page 0 only */
- X# define CF_PAGE_1 03 /* enable both pages */
- X
- X#define INDEX_REG_6845 0x3b4 /* 6845 index register */
- X#define DATA_REG_6845 0x3b5 /* 6845 data register */
- X
- X#define DMC_PORT 0x3b8 /* display mode control port */
- X# define DMC_TEXT 00 /* default, text display mode */
- X# define DMC_GRAPHICS 02 /* graphics display mode */
- X# define DMC_OFF_SCREEN 000
- X# define DMC_ON_SCREEN 010
- X# define DMC_ON_BLINK 040
- X# define DMC_OFF_BLINK 000
- X# define DMC_PAGE_0 000 /* dmc show page 0 */
- X# define DMC_PAGE_1 0200 /* dmc show page 1 */
- X
- X/* text mode */
- X# define NORMAL 007
- X# define INTENSITY 010
- X# define BLANK 000
- X# define UNDERLINE 001
- X# define REVERSE_VIDEO 0160
- X# define BLINK 0200
- X
- X#define DS_PORT 0x3ba /* display status port */
- X# define DS_RETRACE 0x80 /* retrace is when bit 7 is 0 */
- X/*----------------------------------------------------------------------*/
- X/* graphics memory byte location and bit manipulation */
- X/*----------------------------------------------------------------------*/
- X /* physical screen dimensions */
- X /*--------------------------------------------------------------*/
- X# define PHYS_X_MIN 0
- X# define PHYS_X_MAX 719
- X# define PHYS_Y_MIN 0
- X# define PHYS_Y_MAX 347
- X /*--------------------------------------------------------------*/
- X /* given x, y coordinates, determine byte offset within screen */
- X /* memory */
- X /*--------------------------------------------------------------*/
- X# define BYTE_OFFSET(x,y) (unsigned)(0x2000 * ((y)%4) + \
- X 90 * ((y)/4) + (x)/8)
- X
- X /*--------------------------------------------------------------*/
- X /* for given x coordinate, generate a byte with the correct */
- X /* bit set */
- X /*--------------------------------------------------------------*/
- X# define X_BIT(x) (1 << (7-((x)%8)))
- X
- X /*--------------------------------------------------------------*/
- X /* set, clear, reverse bit for given x within a given byte */
- X /*--------------------------------------------------------------*/
- X# define SET_BIT(byte,x) ((byte) |= (X_BIT((x))))
- X# define CLEAR_BIT(byte,x) ((byte) &= (unsigned char)0xff ^ (X_BIT(x)))
- X# define REVERSE_BIT(byte,x) ((byte) ^= (X_BIT(x) ))
- SHAR_EOF
- $TOUCH -am 1014123490 herc/herc.h &&
- chmod 0644 herc/herc.h ||
- echo "restore of herc/herc.h failed"
- set `wc -c herc/herc.h`;Wc_c=$1
- if test "$Wc_c" != "6396"; then
- echo original size 6396, current size $Wc_c
- fi
- # ============= herc/test.c ==============
- echo "x - extracting herc/test.c (Text)"
- sed 's/^X//' << 'SHAR_EOF' > herc/test.c &&
- X/*======================================================================*/
- X/* test - test features of herc driver */
- X/* W Hatch 2/17/90 */
- X/*======================================================================*/
- X#include <stdio.h>
- X#include "herc.h"
- X#define delay sleep
- X
- Xint hercfd;
- Xmain()
- X{
- X int i;
- X int j;
- X HERC Herc;
- X char buffer[4];
- X if((hercfd = open("/dev/herc", O_WRONLY)) < 0)
- X {
- X perror("main: open /dev/herc failed");
- X exit(2);
- X }
- X /*--------------------------------------------------------------*/
- X /* test SET_PIXEL with a pattern */
- X /*--------------------------------------------------------------*/
- X Herc.cmd = SET_PIXEL;
- X pattern(&Herc);
- X sleep(5);
- X /*--------------------------------------------------------------*/
- X /* test CLEAR_PIXEL by removing test pattern */
- X /*--------------------------------------------------------------*/
- X Herc.cmd = CLEAR_PIXEL;
- X pattern(&Herc);
- X sleep(5);
- X /*--------------------------------------------------------------*/
- X /* test REVERSE_PIXEL with same pattern */
- X /*--------------------------------------------------------------*/
- X Herc.cmd = REVERSE_PIXEL;
- X pattern(&Herc);
- X sleep(5);
- X pattern(&Herc);
- X sleep(5);
- X close(hercfd);
- X printf("hercfd: %d\n",hercfd);
- X exit(0);
- X
- X}
- Xpattern(Herc)
- XHERC *Herc;
- X{
- X int i,j;
- X for(j=100; j< 200 ; j++)
- X {
- X for(i=100; i< 110; i++)
- X {
- X Herc->phys_x = j;
- X Herc->phys_y = i;
- X if(write(hercfd, Herc, sizeof(HERC)) < 0)
- X {
- X perror("main: write hercfd failed");
- X exit(2);
- X }
- X }
- X for(i=100; i< 110; i++)
- X {
- X Herc->phys_y = j;
- X Herc->phys_x = i;
- X if(write(hercfd, Herc, sizeof(HERC)) < 0)
- X {
- X perror("main: write hercfd failed");
- X exit(2);
- X }
- X }
- X }
- X}
- SHAR_EOF
- $TOUCH -am 1013182190 herc/test.c &&
- chmod 0644 herc/test.c ||
- echo "restore of herc/test.c failed"
- set `wc -c herc/test.c`;Wc_c=$1
- if test "$Wc_c" != "1690"; then
- echo original size 1690, current size $Wc_c
- fi
- # ============= herc/ix386/n_herc ==============
- if test ! -d 'herc/ix386'; then
- echo "x - creating directory herc/ix386"
- mkdir 'herc/ix386'
- fi
- echo "x - extracting herc/ix386/n_herc (Text)"
- sed 's/^X//' << 'SHAR_EOF' > herc/ix386/n_herc &&
- Xherc herc c 0
- SHAR_EOF
- $TOUCH -am 1014120790 herc/ix386/n_herc &&
- chmod 0644 herc/ix386/n_herc ||
- echo "restore of herc/ix386/n_herc failed"
- set `wc -c herc/ix386/n_herc`;Wc_c=$1
- if test "$Wc_c" != "14"; then
- echo original size 14, current size $Wc_c
- fi
- # ============= herc/ix386/s_herc ==============
- echo "x - extracting herc/ix386/s_herc (Text)"
- sed 's/^X//' << 'SHAR_EOF' > herc/ix386/s_herc &&
- Xherc Y 1 0 0 0 0 0 0 0
- SHAR_EOF
- $TOUCH -am 1014123690 herc/ix386/s_herc &&
- chmod 0644 herc/ix386/s_herc ||
- echo "restore of herc/ix386/s_herc failed"
- set `wc -c herc/ix386/s_herc`;Wc_c=$1
- if test "$Wc_c" != "23"; then
- echo original size 23, current size $Wc_c
- fi
- # ============= herc/ix386/mdevice ==============
- echo "x - extracting herc/ix386/mdevice (Text)"
- sed 's/^X//' << 'SHAR_EOF' > herc/ix386/mdevice &&
- X
- Xherc ocrwi iHcr herc 0 15 1 1 -1
- X you have to add the following line to the file /etc/conf/cf.d/mdevice:
- X
- X herc Iocrwi iHct herc 0 15 1 16 -1
- X
- SHAR_EOF
- $TOUCH -am 1014121390 herc/ix386/mdevice &&
- chmod 0644 herc/ix386/mdevice ||
- echo "restore of herc/ix386/mdevice failed"
- set `wc -c herc/ix386/mdevice`;Wc_c=$1
- if test "$Wc_c" != "156"; then
- echo original size 156, current size $Wc_c
- fi
- # ============= herc/ix386/README ==============
- echo "x - extracting herc/ix386/README (Text)"
- sed 's/^X//' << 'SHAR_EOF' > herc/ix386/README &&
- Xcopy s_herc to /etc/conf/sdevice.d/herc
- Xcopy n_herc to /etc/conf/node.d/herc
- Xadd the first line in mdevice to /etc/conf/cf.d/mdevice
- Xcompile the source and copy it to /etc/conf/pack.d/herc/Driver.o
- Xof course you will have to create the directory first!
- SHAR_EOF
- $TOUCH -am 1014194190 herc/ix386/README &&
- chmod 0644 herc/ix386/README ||
- echo "restore of herc/ix386/README failed"
- set `wc -c herc/ix386/README`;Wc_c=$1
- if test "$Wc_c" != "253"; then
- echo original size 253, current size $Wc_c
- fi
- # ============= README ==============
- echo "x - extracting README (Text)"
- sed 's/^X//' << 'SHAR_EOF' > README &&
- XThis directory tree contains a collection of PD graphic drivers.
- XAll of them support the plot(4) definition of ATT, well they support
- Xthem more or less. Most of the drivers don't have bit patterns,
- Xcircles and arcs built in. So if you have a lot of time here is
- Xsomething to do!!!
- XAlso included is a driver programm for plot. So you can now install
- Xa runnable driver in /usr/lib add a line to your /usr/bin/tplot script
- Xand with sag -Therc or any suitable name for the new driver you
- Xcan plot an activity graph on you screen or printer.
- XThe driver program was written by Wietse Venema and changed for
- X386 Unix 3.xxx by Bill Hatch, I made minor changes for the
- Xprinterdriver.
- XSomething like sag -Thplj could also immediately spool the output
- Xto lp if the line in /usr/bin/tplot is appropriate.
- XRemember most of this is a collection so other people wrote it,
- Xtheir names and e-mail/mail adresses can be found in the corresponding
- Xdirectories.
- XThe REGIS stuff and the adaption of the hpgl converter to a plot
- Xlibrary for (hplj,epson,ibm) is my work, also I optimized the
- Xhplj output with cursor adressing.
- XThe hpgl converter was posted by the Environmental Defense Fund in
- X1988, they have the copyright on this source but allowed me
- Xto repost this!
- XOk I know it's a terrible hack, but it works.
- XAny changes or ideas or other PD plot librarys to hout@hot.mug.
- XAny PD applications that use plot (gnuplot/fchart I already
- Xhave) are welcome too.
- XAlso I've build a plot interface for the CGI library of SCO.
- XIn the tplot entry you should not forget to set the
- Xenvironment variables for your outputdevices for the CGI library.
- XXenix doesnot have a tplot or sag programm it has no graphics but
- Xthe CGI and no system activity reports, as far as I know.
- XSCO Unix should have sag, tplot and system activity data
- Xand the CGI library, but I don't have a SCO Unix yet.
- XAlso Included is the hercules driver posted to comp.unix.ix386 some
- Xweeks ago, originally it was a driver for uPort 386 unix, I added
- Xthe files for Interactive 386 V.3.2.0.2 but it should also work
- Xon 2.2.
- XThe guy who posted it was Bill Hatch, I didnot find any copyrights
- Xso I guess its alright if I repost this with my interactive
- Xchanges.
- XAlso included is a plot library for sun 3 workstations from
- XSjoerd Mullenders, Sjoerd has the copyright but it's allowed
- Xto redistribute this if you leave the copyright message in.
- XThen I have 2 other plotlibs for HPGL 7440 and for a DEC LN03
- Xlaserprinter.
- XThe HPGL stuff was written by Dave Trueman and Henry Spencer
- Xfrom Toronto.
- XThere was no copyright in the sources so I guess it's ok if I
- Xrepost this.
- XThe ln03 stuff was copyrighted by Nicolas Christopher from
- XColumbia University but it didnot say it was allowed to
- Xredistribute this so it's not included.
- XAlso I have a hercules driver for uPort V.2.3 which was posted
- Xand copyrighted by Microport so this one is not included as well.
- XIf the people who have the rights on the uport and ln03 stuff
- Xcould mail me I that they would allow me to repost these
- X2 parts. I would post them in a few weeks.
- X
- X
- SHAR_EOF
- $TOUCH -am 1026190890 README &&
- chmod 0644 README ||
- echo "restore of README failed"
- set `wc -c README`;Wc_c=$1
- if test "$Wc_c" != "3061"; then
- echo original size 3061, current size $Wc_c
- fi
- # ============= plot.c ==============
- echo "x - extracting plot.c (Text)"
- sed 's/^X//' << 'SHAR_EOF' > plot.c &&
- X/*
- X * plot(1) clone. This filter implements the commands described in the
- X * V7 UNIX manual pages, using the gl graphics library routines.
- X *
- X * Author: Wietse Venema (wietse@wzv.UUCP)
- X *
- X * Options: -Tdevice, where device is one of:
- X *
- X * cga (CGA) cga adapter, low (high) resolution
- X * herc (HERC) hercules adapter, page 0 (page 1)
- X * ega ega adapter
- X * lp matrix printer
- X * lj laserjet printer
- X *
- X * The output device can also be specified with the GLMODE environment
- X * variable. See the gl graphics library documentation for details.
- X */
- X/* changes to provide compatibility with Microport V386 3.0e
- X * W Hatch uunet!bts!bill
- X * 2/18/90
- X */
- X
- X#include <stdio.h>
- X/*#include <modes.h>*/
- X
- Xstatic void confirm();
- X
- X/*
- X * If the output device is specified on the command line we pass it on to
- X * the gl library routines by setting the GLMODE environment variable...
- X */
- X
- Xstruct Modetab {
- X char *modename;
- X int modeval;
- X};
- X
- Xstruct Modetab modetab[] = {
- X "cga", CGA_COLOR_MODE, /* cga lo-res */
- X "CGA", CGA_HI_RES_MODE, /* cga hi-res */
- X "herc", HERC_P0_MODE, /* hercules page 0 */
- X "HERC", HERC_P1_MODE, /* hercules page 1 */
- X "ega", EGA_COLOR_MODE, /* ega */
- X "lp", IBM_PRINTER, /* matrix printer */
- X "lj", LJ_PRINTER, /* laserjet printer */
- X 0, 0,
- X};
- X
- X/* various shorthands */
- X#ifdef V386 /* 16 bit integers output by uport V386 graph(1) */
- X#define READ(x) fread((char *) &s_x, sizeof(s_x), 1, stdin);\
- X x=s_x
- X#else
- X#define READ(x) fread((char *) &x, sizeof(x), 1, stdin)
- X#endif
- X#define READ2(a,b) READ(a); READ(b)
- X#define READ3(a,b,c) READ2(a,b); READ(c)
- X#define READ4(a,b,c,d) READ2(a,b); READ2(c,d);
- X#define READ6(a,b,c,d,e,f) READ4(a,b,c,d); READ2(e,f);
- X
- X/*
- X * Process the plotfile. The program terminates with a diagnostic
- X * in case of unrecognized data.
- X */
- X
- Xmain(argc, argv)
- Xint argc;
- Xchar **argv;
- X{
- X register struct Modetab *mp;
- X register int c;
- X char buf[BUFSIZ];
- X int x, y, x0, y0, x1, y1, x2, y2, r, glmode;
- X#ifdef V386
- X short int s_x, s_y, s_x0, s_y0, s_x1, s_y1, s_x2, s_y2, s_r, s_glmode;
- X#endif
- X static char envstring[] = "GLMODE=xxxxxx";
- X
- X /* process command-line arguments */
- X
- X while (--argc && *++argv) {
- X if (strncmp(*argv, "-T", 2) == 0) {
- X for (mp = modetab; mp->modename; mp++) {
- X if (strcmp(*argv + 2, mp->modename) == 0) {
- X sprintf(envstring, "GLMODE=%d", glmode = mp->modeval);
- X putenv(envstring);
- X }
- X }
- X } else {
- X fprintf(stderr, "bad argument: %s\n", *argv);
- X exit(1);
- X }
- X }
- X
- X#ifndef unix
- X you may have to select binary mode for stdin
- X#endif
- X
- X /* process the plotfile */
- X
- X openpl();
- X
- X while ((c = getchar()) != EOF) {
- X#ifdef DBUG
- X fprintf(stderr, "c= %c, c(int)= %d\n",c,c);
- X fflush(stderr);
- X#endif
- X switch (c) {
- X case 'm': /* move */
- X READ2(x, y);
- X#ifdef DBUG
- X fprintf(stderr, "x: %d, y: %d\n", x, y);
- X fflush(stderr);
- X#endif
- X move(x, y);
- X break;
- X case 'n': /* cont */
- X READ2(x, y);
- X#ifdef DBUG
- X fprintf(stderr, "x: %d, y: %d\n", x, y);
- X fflush(stderr);
- X#endif
- X cont(x, y);
- X break;
- X case 'p': /* point */
- X READ2(x, y);
- X#ifdef DBUG
- X fprintf(stderr, "x: %d, y: %d\n", x, y);
- X fflush(stderr);
- X#endif
- X point(x, y);
- X break;
- X case 'l': /* line */
- X READ4(x1, y1, x2, y2);
- X#ifdef DBUG
- X fprintf(stderr, "x1: %d, y1: %d, x2: %d, y2: %d\n", x1, y1,x2,y2);
- X fflush(stderr);
- X#endif
- X line(x1, y1, x2, y2);
- X break;
- X case 't': /* label */
- X {
- X register char *p = buf;
- X
- X /********
- X while ((c = getchar()) != EOF && c)
- X *p++ = c;
- X *p = '\0';
- X weh 2/18/90 --- incoming string is newline terminated
- X ********/
- X gets(buf);
- X label(buf);
- X }
- X#ifdef DBUG
- X fprintf(stderr, "label: %s\n", buf);
- X fflush(stderr);
- X#endif
- X break;
- X case 'a': /* arc */
- X READ6(x, y, x0, y0, x1, y1);
- X arc(x, y, x0, y0, x1, y1);
- X break;
- X case 'c': /* circle */
- X READ3(x, y, r);
- X circle(x, y, r);
- X break;
- X case 'e': /* erase */
- X if (glmode <= MAXVIDEO)
- X confirm();
- X erase();
- X break;
- X case 'f': /* linemod */
- X gets(buf);
- X linemod(buf);
- X break;
- X case 's': /* space */
- X READ4(x0, y0, x1, y1);
- X#ifdef DBUG
- X fprintf(stderr, "x0: %d, y0: %d, x1: %d, y1: %d\n", x0, y0,x1,y1);
- X fflush(stderr);
- X#endif
- X space(x0, y0, x1, y1);
- X break;
- X /* corrupt */
- X default:
- X closepl();
- X fprintf(stderr,"c= %c, %d corrupted plotfile -- giving up\n",c,c);
- X fflush(stderr);
- X exit(1);
- X }; /* end switch */
- X } /* end while */
- X
- X if (glmode <= MAXVIDEO)
- X confirm();
- X closepl();
- X exit(0);
- X /* NOTREACHED */
- X}
- X
- X/* give them a chance before erase() or closepl() clobber the screen */
- X
- Xstatic void confirm()
- X{
- X FILE *fp;
- X int c;
- X
- X if (fp = fopen("/dev/tty", "r")) {
- X while ((c = getc(fp)) != EOF && c != '\n');
- X fclose(fp);
- X }
- X}
- SHAR_EOF
- $TOUCH -am 1014123990 plot.c &&
- chmod 0644 plot.c ||
- echo "restore of plot.c failed"
- set `wc -c plot.c`;Wc_c=$1
- if test "$Wc_c" != "4963"; then
- echo original size 4963, current size $Wc_c
- fi
- # ============= lpdriver.c ==============
- echo "x - extracting lpdriver.c (Text)"
- sed 's/^X//' << 'SHAR_EOF' > lpdriver.c &&
- X/*
- X * plot(1) clone. This filter implements the commands described in the
- X * V7 UNIX manual pages, using the gl graphics library routines.
- X *
- X * Author: Wietse Venema (wietse@wzv.UUCP)
- X *
- X * Options: -Tdevice, where device is one of:
- X *
- X * cga (CGA) cga adapter, low (high) resolution
- X * herc (HERC) hercules adapter, page 0 (page 1)
- X * ega ega adapter
- X * lp matrix printer
- X * lj laserjet printer
- X *
- X * The output device can also be specified with the GLMODE environment
- X * variable. See the gl graphics library documentation for details.
- X */
- X/* changes to provide compatibility with Microport V386 3.0e
- X * W Hatch uunet!bts!bill
- X * 2/18/90
- X */
- X/*
- Xchanges to get it running on interactive 386
- XR.P. van Hout uunet!mcsun!hp4nl!integow!hot!hot
- X*/
- X
- X
- X#include "plotlpus.h"
- X#include <stdio.h>
- X/*#include <modes.h>*/
- X
- Xstatic void confirm();
- X
- X/*
- X * If the output device is specified on the command line we pass it on to
- X * the gl library routines by setting the GLMODE environment variable...
- X */
- Xfloat deltx = 4095.0;
- Xfloat delty = 4095.0;
- X
- Xstruct Modetab {
- X char *modename;
- X int modeval;
- X};
- X
- Xstruct Modetab modetab[] = {
- X#ifdef bla
- X "cga", CGA_COLOR_MODE, /* cga lo-res */
- X "CGA", CGA_HI_RES_MODE, /* cga hi-res */
- X "herc", HERC_P0_MODE, /* hercules page 0 */
- X "HERC", HERC_P1_MODE, /* hercules page 1 */
- X "ega", EGA_COLOR_MODE, /* ega */
- X "lp", IBM_PRINTER, /* matrix printer */
- X "lj", LJ_PRINTER, /* laserjet printer */
- X#endif
- X 0, 0,
- X};
- X
- X/* various shorthands */
- X#ifdef V386 /* 16 bit integers output by uport V386 graph(1) */
- X#define READ(x) fread((char *) &s_x, sizeof(s_x), 1, stdin);\
- X x=s_x
- X#else
- X#define READ(x) fread((char *) &x, sizeof(x), 1, stdin)
- X#endif
- X#define READ2(a,b) READ(a); READ(b)
- X#define READ3(a,b,c) READ2(a,b); READ(c)
- X#define READ4(a,b,c,d) READ2(a,b); READ2(c,d);
- X#define READ6(a,b,c,d,e,f) READ4(a,b,c,d); READ2(e,f);
- X
- X/*
- X * Process the plotfile. The program terminates with a diagnostic
- X * in case of unrecognized data.
- X */
- X
- Xmain(argc, argv)
- Xint argc;
- Xchar **argv;
- X{
- X register struct Modetab *mp;
- X register int c;
- X char buf[BUFSIZ];
- X int x, y, x0, y0, x1, y1, x2, y2, r, glmode;
- X#ifdef V386
- X short int s_x, s_y, s_x0, s_y0, s_x1, s_y1, s_x2, s_y2, s_r, s_glmode;
- X#endif
- X static char envstring[] = "GLMODE=xxxxxx";
- X int noconfirm;
- X noconfirm = 0;
- X /* process command-line arguments */
- X
- X while(argc-- > 1) {
- X if(*argv[1] == '-')
- X switch(argv[1][1]) {
- X case 'l':
- X deltx = atoi(&argv[1][2]) - 1;
- X break;
- X case 'w':
- X delty = atoi(&argv[1][2]) - 1;
- X break;
- X case 's':
- X printer=LASERLOW;
- X break;
- X case 'm':
- X printer=LASERMED;
- X break;
- X case 'h':
- X printer=LASERHIGH;
- X break;
- X case 'i':
- X printer=IBM_PRO;
- X break;
- X case 'e':
- X printer=EPSON;
- X break;
- X }
- X
- X argv++;
- X }
- X
- X#ifndef unix
- X you may have to select binary mode for stdin
- X#endif
- X
- X /* process the plotfile */
- X
- X openpl();
- X
- X while ((c = getchar()) != EOF) {
- X#ifdef DBUG
- X fprintf(stderr, "c= %c, c(int)= %d\n",c,c);
- X fflush(stderr);
- X#endif
- X switch (c) {
- X case 'm': /* move */
- X READ2(x, y);
- X#ifdef DBUG
- X fprintf(stderr, "x: %d, y: %d\n", x, y);
- X fflush(stderr);
- X#endif
- X move(x, y);
- X break;
- X case 'n': /* cont */
- X READ2(x, y);
- X#ifdef DBUG
- X fprintf(stderr, "x: %d, y: %d\n", x, y);
- X fflush(stderr);
- X#endif
- X cont(x, y);
- X break;
- X case 'p': /* point */
- X READ2(x, y);
- X#ifdef DBUG
- X fprintf(stderr, "x: %d, y: %d\n", x, y);
- X fflush(stderr);
- X#endif
- X point(x, y);
- X break;
- X case 'l': /* line */
- X READ4(x1, y1, x2, y2);
- X#ifdef DBUG
- X fprintf(stderr, "x1: %d, y1: %d, x2: %d, y2: %d\n", x1, y1,x2,y2);
- X fflush(stderr);
- X#endif
- X line(x1, y1, x2, y2);
- X break;
- X case 't': /* label */
- X {
- X register char *p = buf;
- X
- X /********
- X while ((c = getchar()) != EOF && c)
- X *p++ = c;
- X *p = '\0';
- X weh 2/18/90 --- incoming string is newline terminated
- X ********/
- X gets(buf);
- X label(buf);
- X }
- X#ifdef DBUG
- X fprintf(stderr, "label: %s\n", buf);
- X fflush(stderr);
- X#endif
- X break;
- X case 'a': /* arc */
- X READ6(x, y, x0, y0, x1, y1);
- X arc(x, y, x0, y0, x1, y1);
- X break;
- X case 'c': /* circle */
- X READ3(x, y, r);
- X circle(x, y, r);
- X break;
- X case 'e': /* erase */
- X/* if (glmode <= MAXVIDEO)*/
- X if (!noconfirm) confirm();
- X erase();
- X break;
- X case 'f': /* linemod */
- X gets(buf);
- X linemod(buf);
- X break;
- X case 's': /* space */
- X READ4(x0, y0, x1, y1);
- X#ifdef DBUG
- X fprintf(stderr, "x0: %d, y0: %d, x1: %d, y1: %d\n", x0, y0,x1,y1);
- X fflush(stderr);
- X#endif
- X space(x0, y0, x1, y1);
- X break;
- X /* corrupt */
- X default:
- X closepl();
- X fprintf(stderr,"c= %c, %d corrupted plotfile -- giving up\n",c,c);
- X fflush(stderr);
- X exit(1);
- X }; /* end switch */
- X } /* end while */
- X
- X/* if (glmode <= MAXVIDEO)*/
- X if (!noconfirm) confirm();
- X else sleep(5);
- X closepl();
- X exit(0);
- X /* NOTREACHED */
- X}
- X
- X/* give them a chance before erase() or closepl() clobber the screen */
- X
- Xstatic void confirm()
- X{
- X FILE *fp;
- X int c;
- X
- X if (fp = fopen("/dev/tty", "r")) {
- X while ((c = getc(fp)) != EOF && c != '\n');
- X fclose(fp);
- X }
- X}
- SHAR_EOF
- $TOUCH -am 1014221490 lpdriver.c &&
- chmod 0644 lpdriver.c ||
- echo "restore of lpdriver.c failed"
- set `wc -c lpdriver.c`;Wc_c=$1
- if test "$Wc_c" != "5349"; then
- echo original size 5349, current size $Wc_c
- fi
- # ============= makefile ==============
- echo "x - extracting makefile (Text)"
- sed 's/^X//' << 'SHAR_EOF' > makefile &&
- XCFLAGS=-O -DV386
- XCC=gcc
- X
- Xall: therc tplotlp tReGIS thpgl tsun tCGI
- X
- Xtherc:
- X $(CC) $(CFLAGS) driver.c -o therc -lherc -lm
- X
- Xtplotlp:
- X $(CC) $(CFLAGS) lpdriver.c -o tplotlp -lplotlp -lm
- X
- XtReGIS:
- X $(CC) $(CFLAGS) driver.c -o tReGIS -lReGIS -lm
- X
- XtCGI:
- X $(CC) $(CFLAGS) driver.c -o tCGI -lcgi -lm
- X
- Xthpgl:
- X $(CC) $(CFLAGS) driver.c -o thpgl -lhpgl -lm
- X
- Xtsun:
- X $(CC) $(CFLAGS) driver.c -o tsun -lsun -lm
- X
- Xinstall: therc tplotlp tReGIS tln03 tCGI thpgl tsun
- X cp therc /usr/lib
- X cp tplotlp /usr/lib
- X cp tReGIS /usr/lib
- X cp tln03 /usr/lib
- X cp tCGI /usr/lib
- X cp thpgl /usr/lib
- X cp tsun /usr/lib
- X
- SHAR_EOF
- $TOUCH -am 1026194490 makefile &&
- chmod 0644 makefile ||
- echo "restore of makefile failed"
- set `wc -c makefile`;Wc_c=$1
- if test "$Wc_c" != "584"; then
- echo original size 584, current size $Wc_c
- fi
- echo "End of part 8, continue with part 9"
- exit 0
-
-
-
- --
- UUCP: ..!uunet!mcsun!hp4nl!integow!hot or hot@integow.UUCP or hot@hot.mug
- Roland van Hout, Sr. software engineer, Integrity software consultants,
- Pelmolenlaan 16, 3447 GW Woerden, Netherlands,
- tel +31 3480-30131, fax +31 3480-30182
-