PD plot(4) librarys (and hercules driver for interactive 386) part 4 of 9

Roland van Hout hot at integow.uucp
Sun Oct 28 14:55:33 AEST 1990



#!/bin/sh
# This is part 04 of a multipart archive
if touch 2>&1 | fgrep '[-amc]' > /dev/null
 then TOUCH=touch
 else TOUCH=true
fi
# ============= libplot/lp/ib_map.c ==============
echo "x - extracting libplot/lp/ib_map.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > libplot/lp/ib_map.c &&
X/*
X * ib_map.c
X *
X * Copyright (c) 1988 Environmental Defense Fund, Inc.
X */
X
X#include <stdio.h>
X#include "const.h"
X#include "fillcnst.h"
X
X#ifdef TESTVER
X#include <signal.h>
X#include "dbgvars.h"
X#endif
X
X#define XLIM 94			/* 47 for 1/2 pg output, 94 for full page
X				 * output */
X#define YLIM 480		/* 240/480 for half/full pg output, mode K... */
X /* ...480/960 for half/full pg output, mode L */
X#define MODE 'Z'		/* 'K' / 'L': 60 dots per in / 120 dots per
X				 * in 'Z' quad density 240 dots per in */
X
X#define LEFT_CUTOFF  0
X
X/*
X * Constants
X * SCALEX and SCALEY have been changed to vars, set in init_map,
X * to simplify quick changes of scale, depending on XLIM, YLIM
X */
X
X#define ROUNDER 0.0
X
X#ifndef TESTVER
X#define PUT_BIT(x,y)    map[(x >> 3) + (XLIM * y)] |= BITS[x & 7]
X#endif
X
X#define ABS(x) ((x) > 0.0 ? (x) : -(x))
X
Xlong    MAP_MAX;
Xdouble  SCALEX,
X        SCALEY;			/* <<<<<<<<<<<< */
Xchar    BITS[] = {0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01};
Xextern char map[];		/* in maps.c */
X
X
X/*******************************
X * catch(), catchi() were here *
X *******************************/
X
X#ifdef TESTVER
XPUT_BIT(x, y)
X    int     x,
X            y;
X{
X    int     offset;
X
X    offset = ((x >> 3) + (XLIM * y));
X    if ((offset >= (MAP_MAX)) || (offset < 0)) {
X	fprintf(stderr,
X	    "PUTBIT offset overflow: %d;  x: %d;  y: %d\n", offset, x, y);
X	fprintf(errfp,
X	    "PUTBIT offset overflow: %d;  x: %d;  y: %d\n", offset, x, y);
X	fclose(errfp);
X	dump_map(TRUE);
X	exit(1);
X    }
X    map[offset] |= BITS[x & 7];
X}
X
X#endif
X
X
Xib_put_seg(p1, p2)
X    POINT   p1,
X            p2;
X{
X    double  diffx,
X            diffy,
X            change_ratio;
X    register int x,
X            y;
X    register int inc;
X
X#if 0
X    signal(SIGSEGV, catch);
X    signal(SIGINT, catchi);
X#endif
X
X#ifdef TESTVER
X    if (debug2 || debug2x) {
X	fprintf(errfp, "p1 ( %d, %d );   p2 ( %d, %d )\n",
X	    p1.x, p1.y, p2.x, p2.y);
X    }
X#endif
X
X    p1.x = SCALEX * (double) p1.x + ROUNDER;
X    p2.x = SCALEX * (double) p2.x + ROUNDER;
X    p1.y = SCALEY * (double) p1.y + ROUNDER;
X    p2.y = SCALEY * (double) p2.y + ROUNDER;
X
X    diffx = p2.x - p1.x;
X    diffy = p2.y - p1.y;
X
X    if (diffx != 0.0 && diffy != 0.0) {	/* neither horiz nor vert */
X	if (ABS(diffx) > ABS(diffy)) {	/* closer to horizontal */
X	    inc = (diffx < 0) ? -1 : 1;
X	    change_ratio = diffy / diffx;
X	    for (x = p1.x; x != p2.x; x += inc) {
X		y = (x - p1.x) * change_ratio + p1.y + ROUNDER;
X		PUT_BIT(x, y);
X	    }
X	    PUT_BIT(p2.x, p2.y);
X	} else {		/* closer to vertical */
X	    inc = (diffy < 0) ? -1 : 1;
X	    change_ratio = diffx / diffy;
X	    for (y = p1.y; y != p2.y; y += inc) {
X		x = (y - p1.y) * change_ratio + p1.x + ROUNDER;
X		PUT_BIT(x, y);
X	    }
X	    PUT_BIT(p2.x, p2.y);
X	}
X    } else {
X	if (diffx) {		/* horizontal line */
X	    y = p1.y;
X	    inc = (diffx < 0) ? -1 : 1;
X	    for (x = p1.x; x != p2.x; x += inc) {
X		PUT_BIT(x, y);
X	    }
X	    PUT_BIT(p2.x, y);
X	} else {		/* vert. line */
X	    x = p1.x;
X	    inc = (diffy < 0) ? -1 : 1;
X	    for (y = p1.y; y != p2.y; y += inc) {
X		PUT_BIT(x, y);
X	    }
X	    PUT_BIT(x, p2.y);
X	}
X    }
X}
X
X
Xib_dump_map(to_printer)
X    int     to_printer;
X{
X    int     i;
X    register int j;
X    char    ch;
X    char    hdr[5];
X
X    if (to_printer) {
X	hdr[0] = ESC;
X	hdr[1] = '3';
X	hdr[2] = 24;		/* Line spacing for graphics: 24/216 inch */
X	write(1, hdr, 3);
X	hdr[1] = MODE;		/* 'K'/'L': 480/960 bit image graphics */
X	hdr[2] = (YLIM - LEFT_CUTOFF) & 0xff;	/* n1 = YLIM mod 256 */
X	hdr[3] = ((YLIM - LEFT_CUTOFF) >> 8) & 0xff;	/* n2 = YLIM / 256 */
X
X	for (i = 0; i < XLIM; i++) {
X	    write(1, hdr, 4);
X	    for (j = LEFT_CUTOFF * XLIM; j < MAP_MAX; j += XLIM) {
X		ch = map[i + j];
X		if (ch == 26)
X		    ch = 18;	/* bug in proprinter graphics */
X		if (ch == '\n')
X		    ch = 8;	/* prevent add'n of \r to \n */
X		write(1, &ch, 1);
X#ifdef TESTVER
X		if (debug5)
X		    fprintf(errfp, "%4d", ch);
X#endif
X	    }
X#ifdef TESTVER
X	    if (debug5)
X		fprintf(errfp, "%3d*\n", i);
X#endif
X	    putchar('\n');	/* LF and CR to end line */
X	    putchar('\r');
X	    fflush(stdout);
X	}
X
X	/* putchar( '\f' ); *//* form feed */
X#ifdef TESTVER
X	fclose(errfp);
X#endif
X
X    }				/* end if ( to_printer )... */
X}
X
X
Xib_init_map()
X{
X#ifdef TRUESOLID
X    extern double PUs_per_dot;	/* declared in file filltype.c */
X
X#endif
X    register int k;
X    register char *mp;
X
X    MAP_MAX = XLIM * YLIM;
X    SCALEX = (double) (XLIM * 8) / 10366;
X    SCALEY = (double) (YLIM) / 7963;
X
X#ifdef TRUESOLID
X    PUs_per_dot = 1.0 / SCALEX;	/* used by fix_fill() in file filltype.c */
X#endif
X
X    mp = map;
X    for (k = 0; k < MAP_MAX; k++)
X	*mp++ = 0;
X}
SHAR_EOF
$TOUCH -am 0214090289 libplot/lp/ib_map.c &&
chmod 0644 libplot/lp/ib_map.c ||
echo "restore of libplot/lp/ib_map.c failed"
set `wc -c libplot/lp/ib_map.c`;Wc_c=$1
if test "$Wc_c" != "4616"; then
	echo original size 4616, current size $Wc_c
fi
# ============= libplot/lp/itoa.h ==============
echo "x - extracting libplot/lp/itoa.h (Text)"
sed 's/^X//' << 'SHAR_EOF' > libplot/lp/itoa.h &&
X/********************************************************************
X ***** itoa -- Konvertieren Zahlen in ASCII String              *****
X ********************************************************************/
X/* Setzt Zahlen in ASCII String um. Die Umwandlung erfolgt
X   in umgekehrter Reihenfolge. Danach wird der String vertauscht.
X
X   Beispiele:
X	int n;
X	char scrtext[100];
X
X	itoa(n,scrtext);
X        printf("String: %s",&scrtext[0]);
X*/
X
Xitoa(n,scrtext)
Xint n;
Xchar scrtext[];
X{
Xint i,sign,c,j;
X/* 
X	Vorzeichen merken 
X*/
Xif ((sign = n) <0)
X  n= -n;
X/* 
X	Umwandeln 
X*/
Xi=0;
Xdo
X  {
X  scrtext[i++]= n % 10 +'0';
X  }
Xwhile (( n/= 10)>0);
X/* 
X	Vorzeichen setzen 
X*/
Xif (sign <0)
X  scrtext[i++]='-';
Xscrtext[i]='\0';
X/* 
X	Nun Umdrehen 
X*/
Xj= i-1;
Xif (j>0);
X  {
X  for (i=0 ; i<j ; i++ , j--)
X    {
X    c=scrtext[i];
X    scrtext[i]=scrtext[j];
X    scrtext[j]=c;
X    }
X  }
X}
X
X    
SHAR_EOF
$TOUCH -am 1007125888 libplot/lp/itoa.h &&
chmod 0644 libplot/lp/itoa.h ||
echo "restore of libplot/lp/itoa.h failed"
set `wc -c libplot/lp/itoa.h`;Wc_c=$1
if test "$Wc_c" != "879"; then
	echo original size 879, current size $Wc_c
fi
# ============= libplot/lp/label.c ==============
echo "x - extracting libplot/lp/label.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > libplot/lp/label.c &&
X/*
X * do_lb.c
X *
X * Copyright (c) 1988 Environmental Defense Fund, Inc.
X */
X
X#include <stdio.h>
X#include "const.h"
X#include "vars.h"
X#include "dbgvars.h"
X
Xextern POINT plot_char();
X
Xlabel(s)
Xchar *s;
X{
X    char *sp;
X    POINT   l_point;
X    sp=s;
X#ifdef TESTVER
X    int     was_on,
X            xwas_on;		/* for debugging */
X
X    /* turn debug2/2x off, if necessary, for the duration of labeling */
X    if (debug2) {
X	was_on = TRUE;
X	debug2 = FALSE;
X    } else {
X	was_on = FALSE;
X    }
X    if (debug2x) {
X	xwas_on = TRUE;
X	debug2x = FALSE;
X    } else {
X	xwas_on = FALSE;
X    }
X#endif
X
X    l_point = current;
X    if (stand_set_sel)
X	while ((c = *sp++) != NULL) {
X	    l_point = plot_char(l_point, c, set_standard);
X	}
X    else
X	while ((c = *sp++) != NULL) {
X	    l_point = plot_char(l_point, c, set_alternate);
X	}
X    pen_up = TRUE;
X
X#ifdef TESTVER
X    if (was_on) {
X	debug2 = TRUE;
X    }
X    if (xwas_on) {
X	debug2x = TRUE;
X    }
X#endif
X}
X
SHAR_EOF
$TOUCH -am 1010115088 libplot/lp/label.c &&
chmod 0644 libplot/lp/label.c ||
echo "restore of libplot/lp/label.c failed"
set `wc -c libplot/lp/label.c`;Wc_c=$1
if test "$Wc_c" != "939"; then
	echo original size 939, current size $Wc_c
fi
# ============= libplot/lp/liblj.c ==============
echo "x - extracting libplot/lp/liblj.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > libplot/lp/liblj.c &&
X/*
X * main.c
X *
X * Copyright (c) 1988 Environmental Defense Fund, Inc.
X *
X * hpglplot v2.1
X *
X * Filter to read HPGL commands (Hewlett-Packard Graphics Language,
X * used by HP7475A 6-pen plotter, among others) and produce bit map
X * graphics commands for various printers.
X *
X * Usage: tplotlp -eismh
X * Options: for the lpdriver.c program  
X * -e	produce output for Epson LQ-1500
X * -i	produce output for IBM Proprinter
X * -s	produce output for HP LaserJet+ small
X * -m   produce output for HP LaserJet+ enlarged
X * -h   produce output for HP LaserJet+ extra large
X *
X *
X * Authors:
X *  Mel Brooks
X *    Initial program design, command interpreter, Epson bit-map.
X *  Al Chase
X *    Fill routines, LaserJet and Proprinter bit-maps.
X *  David MacKenzie
X *    Rewrote option parser and makefile, cleaned up.
X */
X/* plot(4) graphics library for a regis terminal for VT240/VT300/GIGI */
Xextern float deltx,delty;
Xfloat pitograd;
X
X#include <math.h>
X#include "plotlp.h"
X
Xclosepl()
X{
Xdump_map(printer);
X}
X
Xspace(x0,y0,x1,y1)
Xint x0,y0,x1,y1;
X{
Xint x,y;
Xpitograd=(180.0/M_PI);
X
Xif (x1>0 && y1>0 && y0<y1 && x0<x1) {
X	x=x1-x0;y=y1-y0;
X	gxscrunch=(7850/(float) x);gyscrunch=(7850/(float) y);
X	offx = -(x0*gxscrunch);offy= -(y0*gyscrunch);
X}
X
X}
X
Xerase()
X{
X/*	printf("\014");*/
X}
X
X
Xarc(x,y,x0,y0,x1,y1)
Xint x,y,x0,y0,x1,y1;
X{
X/*
Xfloat a1,a2,r1,r2;
Xint xo,yo,c1,c2,c;
X	move(x0,y0);
X	if ((x-x0) > 0) {
X		r1=(y-y0)/(x-x0);
X		a1=atan(r1);
X		c1=(a1*pitograd);
X	}
X	else {
X		c1=180;
X	}
X	if ((x-x1) > 0) {
X		r2=(y-y1)/(x-x1);
X		a2=atan(r2);
X		c2=(a2*pitograd);
X	}
X	else {
X		c2=180;
X	}
X        c=c1-c2;
X	xo=(x*gxscrunch);yo=(y*gyscrunch);
X	yo += offy ;xo +=  offx ;
X	printf("\033PpC(A%dC) [%d,%d]\033\\",c,xo,yo);
X
X*/
X}
X/*
X * do_ew.c
X *
X * Copyright (c) 1988 Environmental Defense Fund, Inc.
X 
X
X#include <stdio.h>
X#include <math.h>
X#include "const.h"
X#include "vars.h"
X#ifdef TESTVER
X#  include "dbgvars.h"
X#endif
X
X#define DEGREES_TO_RADIANS 3.1415926535898 / 180.0
X
Xdo_EW()
X{
X    POINT   t,
X            t1;
X    float   radius;
X    int     i_radius,
X            start_angle,
X            sweep_angle,
X            chordangle;
X    int     i;
X
X#ifdef TESTVER
X    int     xwas_on;		/* for debugging 
X
X    /* turn debug2x off, if necessary, for the duration of do_EW() 
X    if (debug2x) {
X	xwas_on = TRUE;
X	debug2x = FALSE;
X    } else {
X	xwas_on = FALSE;
X    }
X#endif
X
X    if (scanf("%f,%d,%d", &radius, &start_angle, &sweep_angle) != 3) {
X	fprintf(stderr, "Odd number of coordinate\n");
X	exit(4);
X    }
X    if ((c = getchar()) != ';') {
X	scanf("%d", &chordangle);
X	getchar();
X    } else {
X	chordangle = chord_angle;
X    }
X
X    if (sweep_angle < 0)
X	chordangle = -1 * (abs(chordangle));
X
X    start_angle %= 360;
X    if (sweep_angle > 360)
X	sweep_angle = 360;
X    else if (sweep_angle < -360)
X	sweep_angle = -360;
X
X    if (scaling) {
X	i_radius = (int) (radius * x_scaler);
X	if (i_radius < 0)
X	    i_radius -= 1;
X    } else
X	i_radius = (int) radius;
X
X    /* plot starting radius 
X    t.x = (int) ((double) radius * cos((double) start_angle *
X	    DEGREES_TO_RADIANS) + 0.5) + current.x;
X    t.y = (int) ((double) radius * sin((double) start_angle *
X	    DEGREES_TO_RADIANS) + 0.5) + current.y;
X    put_seg(current, t);
X
X    /* plot chords up to (but not incl) sweep_angle 
X    for (i = chordangle; abs(i) < abs(sweep_angle); i += chordangle) {
X	t1.x = (int) ((double) radius * cos((double) (start_angle + i)
X		* DEGREES_TO_RADIANS) + 0.5) + current.x;
X	t1.y = (int) ((double) radius * sin((double) (start_angle + i)
X		* DEGREES_TO_RADIANS) + 0.5) + current.y;
X	put_seg(t, t1);
X	t = t1;
X    }
X
X    /* plot remaining (partial?) chord needed to make up the full sweep angle 
X    t1.x = (int) ((double) radius * cos((double) (start_angle + sweep_angle)
X	    * DEGREES_TO_RADIANS) + 0.5) + current.x;
X    t1.y = (int) ((double) radius * sin((double) (start_angle + sweep_angle)
X	    * DEGREES_TO_RADIANS) + 0.5) + current.y;
X    put_seg(t, t1);
X    t = t1;
X
X    /* plot ending radius 
X    put_seg(t1, current);
X
X#ifdef TESTVER			/* reset debug2x if necessary 
X    if (xwas_on) {
X	debug2x = TRUE;
X    }
X#endif
X}
X*/
X
Xdot(xi,yi,dx,n,pat)
Xint xi,yi,dx,n,pat[256];
X{
X}
X
Xpoint(x,y)
Xint x,y;
X{
X      move(x,y);
X      cont(x,y);
X}
X
X
Xline (x1, y1, x2, y2)
Xint x1,y1,x2,y2;
X{
X	move(x1,y1);
X	cont(x2,y2);
X}
X
X
X
X
SHAR_EOF
$TOUCH -am 1011095088 libplot/lp/liblj.c &&
chmod 0644 libplot/lp/liblj.c ||
echo "restore of libplot/lp/liblj.c failed"
set `wc -c libplot/lp/liblj.c`;Wc_c=$1
if test "$Wc_c" != "4267"; then
	echo original size 4267, current size $Wc_c
fi
# ============= libplot/lp/linemod.c ==============
echo "x - extracting libplot/lp/linemod.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > libplot/lp/linemod.c &&
X#include "plotlp.h"
X
Xlinemod(s)
Xchar *s;
X{
X	line_type = SOLID;
X  if (strcmp(s,"dotted")==0) {
X	line_type=DOTS;
X	  }
X  else if (strcmp(s,"solid")==0) {
X	line_type = SOLID;
X	  }
X	  else if (strcmp(s,"longdashed")==0) {
X		  line_type=BROKN_2DASH;
X		  }
X		 else if (strcmp(s,"shortdashed")==0) {
X			 line_type=SHORT_DASH;
X			 }
X			else if (strcmp(s,"dotdashed")==0) {
X				line_type=BROKN_DASH;
X				}
X}
X
SHAR_EOF
$TOUCH -am 1010110488 libplot/lp/linemod.c &&
chmod 0644 libplot/lp/linemod.c ||
echo "restore of libplot/lp/linemod.c failed"
set `wc -c libplot/lp/linemod.c`;Wc_c=$1
if test "$Wc_c" != "399"; then
	echo original size 399, current size $Wc_c
fi
# ============= libplot/lp/lj_map.c ==============
echo "x - extracting libplot/lp/lj_map.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > libplot/lp/lj_map.c &&
X/*
X * lj_map.c
X *
X * Copyright (c) 1988 Environmental Defense Fund, Inc.
X */
X
X#include <stdio.h>
X#include "const.h"
X#include "vars.h"
X#include "fillcnst.h"
X#include "itoa.h"
X
X#ifdef TESTVER
X#include <signal.h>
X#endif
X
X/*
X * Origin is at lower left corner.
X * Bytes of raster data are oriented along the x-axis, hi bit at left:
X *       (0,0) is bit 7 of byte 0;
X *       (7,0) is bit 0 of byte 0;
X *       (16,0) is bit 7 of byte 2;
X *       (16,3) is bit 7 of byte (2 + Xlim*3)
X */
X
X/*
X * Constants
X * Ylim = 1440 dot rows, plus a couple extra for rounding error
X#define Ylim 1442
X#define Xlim  235
X#define scaleX  0.180859
X#define scaleY  0.180859
X
X#define Ylim 1841
X#define Xlim  300
X
X/* scaleX = scaleY = number of dots per plotter unit
X                   = 1440 dot rows in y-direction / 7962 PU's in y-dir 
X#define scaleX  0.231205
X#define scaleY  0.231205
X#define rounder 0.0
X [hot at mh.nl] */
X
Xstatic int Ylim,Xlim,Ylim8;
Xstatic double scaleX,scaleY,rounder;
X
X#define ABS(x) ((x) > 0.0 ? (x) : -(x))
X
X/* move bit map to maps.c for combined printer version --- */
X#if 0
Xchar    map[Xlim * Ylim];
X
X#endif
Xextern char map[];
X
Xstatic char BITS[] = {0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01};
X#ifdef TESTVER
X#define PUT_BIT(x, y)  map[(tempindex = (tempx = (x >> 3)) + ((tempy = y) * Xlim))] |= BITS[x & 7];
X#else
X#define P_BIT(x, y)  map[(x >> 3) + (y * Xlim)] |= BITS[x & 7]; 
XPUT_BIT(x, y)
Xint x,y;
X{
Xint saveit;
Xif (printer == LASERHIGH || printer == LASERMED) { 
X	saveit=x;x=y;y=Ylim-saveit;
X}
XP_BIT(x,y);
X}
X
X#endif
X
X
X#ifdef TESTVER
Xstatic int tempindex,
X        tempx,
X        tempy;
Xstatic POINT tempp1,
X        tempp2;
X
Xlj_catch()
X{
X    fprintf(stderr, "Segmentation violation\n");
X    fprintf(stderr, "tempindex = %d x = %d y = %d p1 = %d,%d p2 = %d,%d\n",
X	tempindex, tempx, tempy, tempp1.x, tempp1.y, tempp2.x, tempp2.y);
X    lj_dump_map(FALSE);
X    exit(1);
X}
X
Xljcatchi()
X{
X    lj_dump_map(FALSE);
X    exit(1);
X}
X
X#endif
X
Xlj_put_seg(p1, p2)
X    POINT   p1,
X            p2;
X{
X    double  diffx,
X            diffy,
X            change_ratio;
X    register int x,
X            y;
X    register int inc;
X
X#ifdef TESTVER
X#if 0
X    signal(SIGSEGV, lj_catch);
X    signal(SIGINT, ljcatchi);
X#endif
X    tempp1 = p1;
X    tempp2 = p2;
X#endif
X
X    p1.x = scaleX * (double) p1.x + rounder;
X    p2.x = scaleX * (double) p2.x + rounder;
X    p1.y = scaleY * (double) p1.y + rounder;
X    p2.y = scaleY * (double) p2.y + rounder;
X
X    diffx = p2.x - p1.x;
X    diffy = p2.y - p1.y;
X
X    if (diffx != 0.0 && diffy != 0.0) {
X	if (ABS(diffx) > ABS(diffy)) {
X	    inc = (diffx < 0) ? -1 : 1;
X	    change_ratio = diffy / diffx;
X	    for (x = p1.x; x != p2.x; x += inc) {
X		y = (x - p1.x) * change_ratio + p1.y + rounder;
X		PUT_BIT(x, y);
X	    }
X	    PUT_BIT(p2.x, p2.y);
X	} else {
X	    inc = (diffy < 0) ? -1 : 1;
X	    change_ratio = diffx / diffy;
X	    for (y = p1.y; y != p2.y; y += inc) {
X		x = (y - p1.y) * change_ratio + p1.x + rounder;
X		PUT_BIT(x, y);
X	    }
X	    PUT_BIT(p2.x, p2.y);
X	}
X    } else {
X	if (diffx) {		/* horizontal line */
X	    y = p1.y;
X	    inc = (diffx < 0) ? -1 : 1;
X	    for (x = p1.x; x != p2.x; x += inc) {
X		PUT_BIT(x, y);
X	    }
X	    PUT_BIT(p2.x, y);
X	} else {
X	    x = p1.x;
X	    inc = (diffy < 0) ? -1 : 1;
X	    for (y = p1.y; y != p2.y; y += inc) {
X		PUT_BIT(x, y);
X	    }
X	    PUT_BIT(x, p2.y);
X	}
X    }
X}
X
X
Xlj_dump_map(to_printer)
X    int     to_printer;
X{
X    register int r;
X    char    ccount[8];/* [hot at mh.nl] */
X    char    hdr[80];/* [hot at mh.nl] */
X    char   *mp = map;
X    char   *p,leeg,
X           *maxp;		/* for LF-char test */
X    short int schrijfspaar,hdr_length;
X    short int county,countx,countsx,countdif;/* [hot at mh.nl] */
X
X    if (to_printer) {
X	hdr[0] = ESC;
X
X	/* reset printer */
X	hdr_length = 1 + n_strcpy(&hdr[1], "E");
X	write(1, hdr, hdr_length);
X
X	/* set printer to interpret a '\n' char to a '\r\n' pair */
X	hdr_length = 1 + n_strcpy(&hdr[1], "&k2G");
X	write(1, hdr, hdr_length);
X
X	/* raster graphics resolution: 300 dots/in */
X	hdr_length = 1 + n_strcpy(&hdr[1], "*t300R");
X	write(1, hdr, hdr_length);
X
X	if (printer == LASERLOW) {
X		/* set cursor to col 11  */
X		hdr_length = 1 + n_strcpy(&hdr[1], "&a11C");
X		write(1, hdr, hdr_length);
X
X	        /* set cursor to row 10 */
X		hdr_length = 1 + n_strcpy(&hdr[1], "&a10R");
X		write(1, hdr, hdr_length);
X		/* [hot at mh.nl] */
X	}
X
X	/* start graphics at current cursor posn */
X	hdr_length = 1 + n_strcpy(&hdr[1], "*r1A");
X	write(1, hdr, hdr_length);
X
X	if (printer==LASERLOW) {
X		/* transfer-line-of-graphics escape sequence -- 235 is Xlim */
X		hdr_length = 1 + n_strcpy(&hdr[1], "*b");
X		itoa(Xlim,ccount);
X		hdr_length += n_strcpy(&hdr[hdr_length], ccount);
X		hdr_length += n_strcpy(&hdr[hdr_length], "W");
X	}
X
X	/*
X	 * write Ylim rows, each row is Xlim bytes starting at offset r from
X	 * map[0] 
X	 */
X	for (r = (Ylim - 1) * Xlim,county=1; r >= 0; r -= Xlim,county++) {
X	    /* check this row for LF-chars; replace with byte value of 8 */
X	    p = mp + r;
X	    maxp = p + Xlim;
X	    leeg=0;	/* [hot at mh.nl] */
X	    countx=0;
X	    schrijfspaar=FALSE;
X	    while (p < maxp) {
X		if (*p == '\n') *p = '\010';
X		if (printer != LASERLOW){
X		if (*p == '\000') {
X			if (schrijfspaar==TRUE) {
X			/* transfer-line-of-graphics escape sequence -- 235 is Xlim */
X				hdr_length += n_strcpy(&hdr[hdr_length], "\033*b");
X				itoa(countdif,ccount);
X				hdr_length += n_strcpy(&hdr[hdr_length], ccount);
X				hdr_length += n_strcpy(&hdr[hdr_length], "W");
X				write(1, hdr, hdr_length);
X				write(1, mp + r + countsx, countdif);
X			/* end raster graphics */
X				hdr_length = 1 + n_strcpy(&hdr[1], "*rB");
X				write(1, hdr, hdr_length);
X				schrijfspaar=FALSE;
X				fflush(stdout);
X				}
X			}
X	     else { /* *p != 0 */
X		     if (schrijfspaar==FALSE) {
X		        /* make cursorposition header */
X			/* set cursor to current col  */
X				hdr_length = 1 + n_strcpy(&hdr[1], "*p");
X				itoa((countx*8),ccount);
X				hdr_length += n_strcpy(&hdr[hdr_length], ccount);
X				hdr_length += n_strcpy(&hdr[hdr_length], "X");
X			/* set cursor to current row */
X				hdr_length += n_strcpy(&hdr[hdr_length], "\033*p");
X				itoa(county,ccount);
X				hdr_length += n_strcpy(&hdr[hdr_length], ccount);
X				hdr_length += n_strcpy(&hdr[hdr_length], "Y");
X			/* start graphics at current cursor posn */
X				hdr_length += n_strcpy(&hdr[hdr_length], "\033*r1A");
X				countdif=1;countsx=countx;
X				schrijfspaar=TRUE;
X				     }
X	                  else /* schrijfspaar==TRUE */
X			  {
X				  countdif++;
X			  }
X
X		     }		/* end of if (*p == 0) */
X			        /* [hot at mh.nl] */
X		  } 		/* end of if (printer != LASERLOW) */
X		p++;countx++;
X	    } 			/* end of while (p < maxp) */
X	    if (printer == LASERLOW) { 
X		    write(1, hdr, hdr_length);
X		    write(1, mp + r, Xlim);
X	    }
X	    else {
X			if (schrijfspaar==TRUE) {
X			/* transfer-line-of-graphics escape sequence -- 235 is Xlim */
X				hdr_length += n_strcpy(&hdr[hdr_length], "\033*b");
X				itoa(countdif,ccount);
X				hdr_length += n_strcpy(&hdr[hdr_length], ccount);
X				hdr_length += n_strcpy(&hdr[hdr_length], "W");
X				write(1, hdr, hdr_length);
X				write(1, mp + r + countsx, countdif);
X			/* end raster graphics */
X				hdr_length = 1 + n_strcpy(&hdr[1], "*rB");
X				write(1, hdr, hdr_length);
X				schrijfspaar=FALSE;
X				}
X	    } 		/* end else van if (printer==LASERLOW) */
X	    fflush(stdout);
X	}		/* end van de grote for loop voor iedere regel */
X	if (printer==LASERLOW) {
X		/* end raster graphics */
X		hdr_length = 1 + n_strcpy(&hdr[1], "*rB");
X		write(1, hdr, hdr_length);
X	}
X
X	/* reset printer and eject the page 
X	hdr_length = 1 + n_strcpy(&hdr[1], "E");
X	write(1, hdr, hdr_length);
X*/
X	/*
X	 * set printer to interpret a '\n' char to a '\r\n' pair. this works
X	 * in combo with the plot script, which also controls interpretation
X	 * of \n's at the port 
X	 */
X	hdr_length = 1 + n_strcpy(&hdr[1], "&k2G");
X	write(1, hdr, hdr_length);
X
X	fflush(stdout);
X    }
X}
X
X
X/*
X * copy string from src to dst, including terminating \0.
X * return number of chars copied, excluding terminating \0
X */
Xint
Xn_strcpy(dst, src)
X    char   *dst,
X           *src;
X{
X    char   *p;
X
X    p = src;
X    while (*dst++ = *src++);
X    return ((--src) - p);
X}
X
X
Xlj_init_map()
X{
X    register int k;
X    register char *mp;
X    int     map_max ;
X#ifdef TRUESOLID
X    extern double PUs_per_dot;	/* declared in file filltype.c */
X#endif
X
X    switch(printer) {
X	    case LASERLOW:
X		    Ylim=1442;
X		    Xlim=235;
X		    scaleX=0.180859;
X		    scaleY=0.180859;
X		    rounder=0.0;
X		    break;
X	    case LASERMED:
X		    Ylim=1841;
X		    Xlim=300;
X		    scaleX=0.231205;
X		    scaleY=0.231205;
X		    rounder=0.0;
X		    break;
X
X/* scaleX = scaleY = number of dots per plotter unit
X                   = 1440 dot rows in y-direction / 7962 PU's in y-dir */
X	    case LASERHIGH:
X		    Ylim=3000;
X		    Ylim8=375;
X		    Xlim=298;
X		    scaleX=0.2995369;
X		    scaleY=0.2995369;
X		    rounder=0.0;
X		    break;
X    }
X    map_max = Ylim * Xlim;
X
X#ifdef TRUESOLID
X    PUs_per_dot = 1.0 / scaleX;	/* used by fix_fill() in file filltype.c */
X#endif
X
X    mp = map;
X    for (k = 0; k < map_max; k++) {
X	*mp++ = 0;
X    }
X}
SHAR_EOF
$TOUCH -am 0216085089 libplot/lp/lj_map.c &&
chmod 0644 libplot/lp/lj_map.c ||
echo "restore of libplot/lp/lj_map.c failed"
set `wc -c libplot/lp/lj_map.c`;Wc_c=$1
if test "$Wc_c" != "9092"; then
	echo original size 9092, current size $Wc_c
fi
# ============= libplot/lp/maps.c ==============
echo "x - extracting libplot/lp/maps.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > libplot/lp/maps.c &&
X/*
X * maps.c
X *
X * Copyright (c) 1988 Environmental Defense Fund, Inc.
X *
X * Uses the value of printer to dispatch map-related function
X * calls to either ep_map.c or lj_map.c
X */
X
X#include "const.h"
X#include "vars.h"
X
X/*
X * This is a single bit map, accessed by either the epson or laserjet
X * map-related function calls, depending on which printer is being used.
X * It has been declared to be somewhat larger than necessary.
X */
X
Xchar    map[BITMAPSIZE];
X
Xinit_map()
X{
X    switch (printer) {
X    case EPSON:
X	ep_init_map();
X	break;
X    case LASERLOW:
X    case LASERMED:
X    case LASERHIGH:
X	lj_init_map();
X	break;
X    case IBM_PRO:
X	ib_init_map();
X	break;
X    }
X}
X
Xdump_map(to_printer)
X    int     to_printer;
X{
X    switch (printer) {
X    case EPSON:
X	ep_dump_map(to_printer);
X	break;
X    case LASERLOW:
X    case LASERMED:
X    case LASERHIGH:
X	lj_dump_map(to_printer);
X	break;
X    case IBM_PRO:
X	ib_dump_map(to_printer);
X	break;
X    }
X}
X
Xput_seg(p1, p2)
X    POINT   p1,
X            p2;
X{
X    switch (printer) {
X    case EPSON:
X	ep_put_seg(p1, p2);
X	break;
X    case LASERLOW:
X    case LASERMED:
X    case LASERHIGH:
X	lj_put_seg(p1, p2);
X	break;
X    case IBM_PRO:
X	ib_put_seg(p1, p2);
X	break;
X    }
X}
SHAR_EOF
$TOUCH -am 1007125888 libplot/lp/maps.c &&
chmod 0644 libplot/lp/maps.c ||
echo "restore of libplot/lp/maps.c failed"
set `wc -c libplot/lp/maps.c`;Wc_c=$1
if test "$Wc_c" != "1200"; then
	echo original size 1200, current size $Wc_c
fi
echo "End of part 4, continue with part 5"
exit 0



-- 
UUCP: ..!uunet!mcsun!hp4nl!integow!hot	or  hot at integow.UUCP or hot at 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



More information about the Alt.sources mailing list