v03i087: HPGL to LaserJet translator, part 3 of 3
David MacKenzie
edf at ROCKEFELLER.ARPA
Sat Jul 16 15:01:04 AEST 1988
Posting-number: Volume 3, Issue 87
Submitted-by: "David MacKenzie" <edf at ROCKEFELLER.ARPA>
Archive-name: hpglplot/Part3
#! /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 3 (of 3)."
# Contents: charset.0 hatch.c main.c
# Wrapped by dave at zedfdc on Fri Jul 8 20:51:05 1988
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'charset.0' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'charset.0'\"
else
echo shar: Extracting \"'charset.0'\" \(11475 characters\)
sed "s/^X//" >'charset.0' <<'END_OF_FILE'
X 2,0, 100, 0,0, -100, 0,2, 100, 0,6, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* ! */
X 1,6, 100, 1,2, -100, 1,-2, 100, 1,2, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* " */
X 1,1, 100, 0,6, -100, 2,0, 100, 0,-6, -100, 1,2, 100, -4,0, -100, 0,2, 100, 4,0, -200,-200,-200,-200,-200 /* # */
X 0,2, 100, 1,-1, 2,0, 1,1, 0,1, -4,2, 0,1, 1,1, 2,0, 1,-1, -100, -2,2, 100, 0,-8, -200 /* $ */
X 0,2, 100, 3,4, -100, -2,0, 100, -1,-1, 0,1, 1,0, -100, 2,-3, 100, 0,-1, -1,0, 1,1, -200,-200,-200 /* % */
X 4,0, 100, -3,5, 0,2, 1,1, 1,-1, 0,-2, -3,-2, 0,-2, 1,-1, 2,0, 1,2, -200,-200,-200,-200,-200 /* & */
X 1,6, 100, 1,2, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* ' */
X 3,0, 100, -1,2, 0,4, 1,2, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* ( */
X 1,0, 100, 1,2, 0,4, -1,2, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* ) */
X 0,2, 100, 4,4, -100, -4,0, 100, 4,-4, -100, -2,0, 100, 0,4, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* * */
X 2,2, 100, 0,4, -100, -2,-2, 100, 4,0, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* + */
X 2,0, 100, -1,0, 0,1, 1,0, 0,-1, -1,-1, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* , */
X 0,4, 100, 4,0, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* - */
X 1,0, 100, 0,1, 1,0, 0,-1, -1,0, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* . */
X 0,1, 100, 3,6, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* / */
X 1,0, 100, -1,3, 0,2, 1,3, 2,0, 1,-3, 0,-2, -1,-3, -2,0, -200,-200,-200,-200,-200,-200,-200,-200,-200 /* 0 */
X 1,0, 100, 2,0, -1,0, 0,8, -1,-1, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* 1 */
X 4,0, 100, -4,0, 0,1, 1,2, 2,1, 1,1, 0,2, -1,1, -2,0, -1,-1, 0,-1, -200,-200,-200,-200,-200 /* 2 */
X 0,1, 100, 1,-1, 2,0, 1,1, 0,2, -1,1, -2,0, 2,0, 1,1, 0,2, -1,1, -2,0, -1,-1, -200 /* 3 */
X 4,0, 100, 0,8, 0,-4, -4,0, 1,4, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* 4 */
X 0,1, 100, 1,-1, 2,0, 1,1, 0,2, -1,1, -3,0, 0,4, 4,0, -200,-200,-200,-200,-200,-200,-200,-200,-200 /* 5 */
X 0,4, 100, 3,0, 1,-1, 0,-2, -1,-1, -2,0, -1,1, 0,6, 1,1, 2,0, 1,-1, -200,-200,-200,-200,-200 /* 6 */
X 1,0, 100, 3,8, -4,0, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* 7 */
X 0,1, 100, 0,2, 4,2, 0,2, -1,1, -2,0, -1,-1, 0,-2, 4,-2, 0,-2, -1,-1, -2,0, -1,1, -200 /* 8 */
X 4,0, 100, 0,8, -3,0, -1,-1, 0,-2, 1,-1, 2,0, 1,1, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* 9 */
X 1,0, 100, 0,1, 1,0, 0,-1, -1,0, -100, 0,4, 100, 0,1, 1,0, 0,-1, -1,0, -200,-200,-200,-200,-200 /* : */
X 2,0, 100, -1,0, 0,1, 1,0, 0,-1, -1,-1, -100, 0,5, 100, 0,1, 1,0, 0,-1, -1,0, -200,-200,-200 /* ; */
X 4,1, 100, -3,3, 3,3, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* < */
X 0,3, 100, 4,0, -100, 0,2, 100, -4,0, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* = */
X 0,1, 100, 3,3, -3,3, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* > */
X 2,0, 100, 0,0, -100, 0,2, 100, 0,1, 2,2, 0,2, -1,1, -2,0, -1-1, -200,-200,-200,-200,-200,-200,-200 /* ? */
X 4,1, 100, -3,0, -1,1, 0,4, 1,1, 2,0, 1,-1, 0,-2, -1,-1, -1,0, 0,2, 2,1, -200, -200, -200 /* @ */
X 100, 0,5, 2,3, 2,-3, 0,-5, -100, 0,4, 100, -4,0, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* A */
X 0,4, 100, 3,0, 1,-1, 0,-2, -1,-1, -3,0, 0,8, 3,0, 1,-1, 0,-2, -1,-1, -200,-200,-200,-200,-200 /* B */
X 4,1, 100, -1,-1, -2,0, -1,1, 0,6, 1,1, 2,0, 1,-1, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* C */
X 100, 0,8, 3,0, 1,-1, 0,-6, -1,-1, -3,0, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* D */
X 4,0, 100, -4,0, 0,4, 3,0, -3,0, 0,4, 4,0, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* E */
X 100, 0,4, 3,0, -3,0, 0,4, 4,0, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* F */
X 2,3, 100, 2,0, 0,-2, -1,-1, -2,0, -1,1, 0,6, 1,1, 2,0, 1,-1, -200,-200,-200,-200,-200,-200,-200 /* G */
X 100, 0,8, 0,-4, 4,0, 0,4, 0,-8, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* H */
X 1,0, 100, 2,0, -1,0, 0,8, 1,0, -2,0, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* I */
X 0,2, 100, 0,-1, 1,-1, 2,0, 1,1, 0,7, -1,0, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* J */
X 100, 0,8, 0,-4, 4,4, -4,-4, 4,-4, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* K */
X 4,0, 100, -4,0, 0,8, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* L */
X 100, 0,8, 2,-3, 2,3, 0,-8, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* M */
X 100, 0,8, 4,-8, 0,8, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* N */
X 0,1, 100, 0,6, 1,1, 2,0, 1,-1, 0,-6, -1,-1, -2,0, -1,1, -200,-200,-200,-200,-200,-200,-200,-200,-200 /* O */
X 100, 0,8, 3,0, 1,-1, 0,-2, -1,-1, -3,0, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* P */
X 0,1, 100, 0,6, 1,1, 2,0, 1,-1, 0,-6, -1,-1, -2,0, -1,1, -100, 2,1, 100, 2,-2, -200,-200,-200 /* Q */
X 100, 0,8, 3,0, 1,-1, 0,-2, -1,-1, -3,0, 2,0, 2,-4, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* R */
X 0,1, 100, 1,-1, 2,0, 1,1, 0,2, -1,1, -2,0, -1,1, 0,2, 1,1, 2,0, 1,-1, -200,-200,-200 /* S */
X 2,0, 100, 0,8, -2,0, 4,0, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* T */
X 0,8, 100, 0,-7, 1,-1, 2,0, 1,1, 0,-1, 0,8, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* U */
X 0,8, 100, 1,-5, 1,-3, 1,3, 1,5, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* V */
X 0,8, 100, 0,-6, 1,-2, 1,3, 0,1, 0,-1, 1,-3, 1,2, 0,6, -200,-200,-200,-200,-200,-200,-200,-200,-200 /* W */
X 100, 4,8, -100, -4,0, 100, 4,-8, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* X */
X 2,0, 100, 0,5, -2,3, 2,-3, 2,3, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* Y */
X 0,8, 100, 4,0, -4,-8, 4,0, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* Z */
X 3,0, 100, -1,0, 0,8, 1,0, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* [ */
X 0,7, 100, 3,-6, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* \ */
X 1,0, 100, 1,0, 0,8, -1,0, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* ] */
X 0,6, 100, 2,2, 2,-2, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* ^ */
X 100, 4,0, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* _ */
X 2,8, 100, 1,-2, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* ` */
X 4,1, 100, -1,-1, -2,0, -1,1, 0,2, 1,2, 3,0, 0,-5, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* a */
X 0,8, 100, 0,-8, 0,1, 1,-1, 2,0, 1,1, 0,3, -1,1, -3,0, -200,-200,-200,-200,-200,-200,-200,-200,-200 /* b */
X 4,1, 100, -1,-1, -2,0, -1,1, 0,3, 1,1, 2,0, 1,-1, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* c */
X 4,8, 100, 0,-8, 0,1, -1,-1, -2,0, -1,1, 0,3, 1,1, 3,0, -200,-200,-200,-200,-200,-200,-200,-200,-200 /* d */
X 4,1, 100, -1,-1, -2,0, -1,1, 0,3, 1,1, 2,0, 1,-1, 0,-1, -4,0, -200,-200,-200,-200,-200,-200,-200 /* e */
X 1,0, 100, 0,7, 1,1, 1,0, 1,-1, -100, -2,-3, 100, -2,0, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* f */
X 4,1, 100, -1,-1, -2,0, -1,1, 0,3, 1,1, 3,0, 0,-7, -1,-1, -2,0, -1,1, -200,-200,-200,-200,-200 /* g */
X 100, 0,8, 0,-4, 1,1, 2,0, 1,-1, 0,-4, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* h */
X 1,0, 100, 2,0, -1,0, 0,5, -100, 0,2, 100, 0,0, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* i */
X 0,-2, 100, 1,-1, 1,0, 1,1, 0,7, -100, 0,2, 100, 0,0, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* j */
X 100, 0,8, 0,-5, 4,2, -2,-1, 2,-4, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* k */
X 1,0, 100, 2,0, -1,0, 0,8, -1,0, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* l */
X 100, 0,5, 0,-1, 1,1, 1,0, 0,-5, 0,4, 1,1, 1,0, 0,-5, -200,-200,-200,-200,-200,-200,-200,-200,-200 /* m */
X 100, 0,5, 0,-1, 1,1, 2,0, 1,-1, 0,-4, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* n */
X 1,0, 100, -1,1, 0,3, 1,1, 2,0, 1,-1, 0,-3, -1,-1, -2,0, -200,-200,-200,-200,-200,-200,-200,-200,-200 /* o */
X 0,-3, 100, 0,8, 3,0, 1,-1, 0,-3, -1,-1, -2,0, -1,1, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* p */
X 4,1, 100, -1,-1, -2,0, -1,1, 0,3, 1,1, 3,0, 0,-8, -1,0, 2,0, -200,-200,-200,-200,-200,-200,-200 /* q */
X 100, 0,5, 0,-2, 2,2, 2,0, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* r */
X 0,1, 100, 1,-1, 2,0, 1,1, 0,1, -4,1, 0,1, 1,1, 2,0, 1,-1, -200,-200,-200,-200,-200,-200,-200 /* s */
X 2,0, 100, 0,8, -100, -2,-3, 100, 4,0, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* t */
X 0,5, 100, 0,-4, 1,-1, 2,0, 1,1, 0,-1, 0,5, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* u */
X 0,5, 100, 2,-5, 2,5, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* v */
X 0,5, 100, 0,-3, 1,-2, 1,3, 0,2, 0,-2, 1,-3, 1,2, 0,3, -200,-200,-200,-200,-200,-200,-200,-200,-200 /* w */
X 100, 4,5, -100, -4,0, 100, 4,-5, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* x */
X 0,5, 100, 2,-5, -2,-3, 2,3, 2,5, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* y */
X 4,0, 100, -4,0, 4,5, -4,0, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* z */
X 3,0, 100, -1,1, 0,2, -1,1, 1,1, 0,2, 1,1, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* { */
X 2,0, 100, 0,8, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* | */
X 1,0, 100, 1,1, 0,2, 1,1, -1,1, 0,2, -1,1, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* } */
X 1,6, 100, 1,1, 1,-1, 1,1, -200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200,-200 /* ~ */
END_OF_FILE
if test 11475 -ne `wc -c <'charset.0'`; then
echo shar: \"'charset.0'\" unpacked with wrong size!
fi
# end of 'charset.0'
fi
if test -f 'hatch.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'hatch.c'\"
else
echo shar: Extracting \"'hatch.c'\" \(10686 characters\)
sed "s/^X//" >'hatch.c' <<'END_OF_FILE'
X/*
X * hatch.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#include "fillcnst.h"
X#ifdef TESTVER
X#include "dbgvars.h"
X#endif
X
X/* global vars -- extern-referenced in fillvars.h */
Xint hatch_degs; /* hatch angle in degrees */
Xdouble hatch_rads; /* hatch angle in radians */
Xdouble x_shift;
Xdouble chg_x_CA,
X chg_y_CA,
X chg_x_CB,
X chg_y_CB,
X chg_x_AB,
X chg_y_AB;
Xint C_A,
X C_B,
X A_B;
Xint fill, /* these are used in fix_fill() */
X fixed_fill,
X pen_number,
X spacing;
Xint no_fill; /* flag to disable fill routines */
X
X/* =========================== hatch() ===================================== */
X/*
X * since the hatch algorithm cannot plot horizontal hatch lines,
X * the angle of inclination of most lines has been altered.
X * fill type nominal plotted
X * PARLL_0 0 deg 25 deg
X * PARLL_45 45 75
X * PARLL_90 90 90
X * PARLL_135 135 115
X * CROSS_0 0/90 25/155
X * CROSS_90 45/135 75/115
X *
X * fixed_fill is the fill type returned from fix_fill() in file filltype.c
X * see also the hand-written documentation, page F1, and the documentation in
X * file filltype.c for more details on fill type patterns.
X */
X
Xhatch(pts, num_pts)
X POINT pts[362];
Xint num_pts;
X
X{
X if (no_fill)
X return (0); /* no_fill=T ==> don't do fill routines */
X
X switch (fixed_fill) {
X case SOLIDFILL:
X#ifdef TRUESOLID
X hatch_degs = 90;
X fill_figure(hatch_degs, pts, num_pts);
X#else
X /* for tri-hatch implementation of solidfill */
X hatch_degs = 30;
X fill_figure(hatch_degs, pts, num_pts);
X hatch_degs = 90;
X fill_figure(hatch_degs, pts, num_pts);
X hatch_degs = 150;
X fill_figure(hatch_degs, pts, num_pts);
X#endif
X break;
X case PARLL_0:
X case PARLL_45:
X case PARLL_90:
X case PARLL_135:
X case OTHER: /* <<<<<<<<< for testing */
X switch (fixed_fill) {
X case PARLL_0:
X hatch_degs = 25;
X break;
X case PARLL_45:
X hatch_degs = 65;
X break;
X case PARLL_90:
X hatch_degs = 90;
X break;
X case PARLL_135:
X hatch_degs = 115;
X break;
X case OTHER:
X hatch_degs = fill_angle;
X break;
X }
X fill_figure(hatch_degs, pts, num_pts);
X break;
X case CROSS_0:
X hatch_degs = 20;
X fill_figure(hatch_degs, pts, num_pts);
X hatch_degs = 160;
X fill_figure(hatch_degs, pts, num_pts);
X break;
X case CROSS_45:
X hatch_degs = 70;
X fill_figure(hatch_degs, pts, num_pts);
X hatch_degs = 110;
X fill_figure(hatch_degs, pts, num_pts);
X break;
X }
X}
X
X
X/* =========================== fill_figure() =============================== */
X/*
X * fill a rectangle or pie sector with parallel hatch lines
X * at an angle of hatch_degs.
X * hatch_degx is a formal param, to which
X * the value of the global var hatch_degs is passed
X * Repeated twice on the same figure for cross-hatching,
X * thrice for "solid fill".
X */
X
Xfill_figure(hatch_degx, pts, num_pts)
X int hatch_degx;
X POINT pts[362];
Xint num_pts;
X
X{
X POINT P[3];
X int i;
X
X#ifdef TESTVER
X int n;
X
X if (debug1c) {
X fprintf(stderr, "\nIn: fill_figure();\n");
X }
X if (debug1f) {
X fprintf(errfp, "\nIn: fill_figure();\n");
X }
X#endif
X
X hatch_rads = (double) hatch_degx *DEG_TO_RAD;
X
X#ifdef TESTVER
X if (debug4) {
X for (n = 0; n < num_pts; n++) {
X fprintf(errfp, "pts[%d]: ( %d, %d )\n", n, pts[n].x, pts[n].y);
X }
X fprintf(errfp, "hatch_degs: %d; hatch_rads: %5.1f\n",
X hatch_degx, hatch_rads);
X fflush(errfp);
X }
X#endif
X
X /* find spacing of x-intercepts of adjacent hatch lines */
X x_shift = spacing / sin(hatch_rads);
X
X#ifdef TESTVER
X if (debug4) {
X fprintf(errfp,
X "spacing: %d; sin(hatch_angle): %6.4f; x_shift: %5.1f\n",
X spacing, sin(hatch_rads), x_shift);
X fflush(errfp);
X }
X#endif
X
X P[0] = pts[0];
X for (i = 1; i < num_pts - 2; i++) {
X P[1] = pts[i];
X P[2] = pts[i + 1];
X
X#ifdef TESTVER
X /* if ( debug1c ) { fprintf( stderr, "\nTo: fill_triangle();\n" ); } */
X if (debug1f) {
X fprintf(errfp, "\nTo: fill_triangle();\n");
X fflush(errfp);
X }
X#endif
X fill_triangle(hatch_degx, P);
X }
X}
X
X
X/* =========================== fill_triangle() ============================= */
X/*
X * hatch_degx is a formal param, to which
X * the value of the global var hatch_degs is passed
X */
X
Xfill_triangle(hatch_degx, P)
X int hatch_degx;
X POINT P[3];
X
X{
X double ic[3]; /* x-intercept of a hatch line passing thru
X * the given pt */
X int i;
X double x_offset;
X POINT A,
X B,
X C;
X
X#ifdef TESTVER
X int n;
X static char *stat_type[] = {"GENERIC",
X "PARALLEL",
X "VERTICAL",
X "HORIZONTAL"};
X
X if (debug4) {
X for (n = 0; n < 3; n++) {
X fprintf(errfp, "P[%d]: ( %d, %d )\n", n, P[n].x, P[n].y);
X }
X fflush(errfp);
X }
X#endif
X
X for (i = 0; i < 3; i++) {
X /* find the x-intercept of the hatch line containing P[i] */
X if (hatch_degx == 90) { /* tan(90) is not defined */
X ic[i] = (double) P[i].x;
X } else {
X x_offset = ((double) P[i].y / tan(hatch_rads));
X ic[i] = (double) P[i].x - x_offset;
X }
X#ifdef TESTVER
X if (debug4) {
X if (i == 0)
X putc('\n', errfp);
X fprintf(errfp, "hatch_intercept[%d]: %f\n", i, ic[i]);
X fflush(errfp);
X }
X#endif
X }
X
X
X/*
X * The x-intercepts of the three vertices are used to determine the relative
X * position of the vertices C (the common reference point for hatching) and
X * A and B. Due to binary storage error, intercepts which are close enough
X * to be considered equal must be actually set equal before performing the
X * tests for in/equality which determine the relative positioning of the
X * intercepts, and thence the points themselves. get_3_chgs is called here
X * because the results that it returns provide the exact criteria for
X * determining which intercepts are close enough to be considered equal. In
X * calling get_3_chgs, it is assumed that vertices A and B are in order
X * from 'left' to 'right'; so A = P[1], B = P[2]. P[0] is known to be the
X * common (reference) point, so it will be named C in any case. Depending
X * on the results of the tests on the intercepts, the naming of P[1] and
X * P[2] may be swapped so that ultimately P[1] is named B, etc. In that
X * case, line segments become renamed, and their attributes must be
X * similarly swapped. This is so that end_ref() and mid_ref() can then be
X * called with parameters A, B, and C naming points that are in the standard
X * positions expected by end_ref() and mid_ref().
X */
X
X#ifdef TESTVER
X if (debug1c) {
X fprintf(stderr, "To: get_3_chgs()\n");
X }
X if (debug1f) {
X fprintf(errfp, "\nTo: get_3_chgs()\n");
X fflush(errfp);
X }
X#endif
X get_3_chgs(P[1], P[2], P[0]);
X if (C_A == PARL) {
X ic[1] = ic[0];
X }
X if (C_B == PARL) {
X ic[2] = ic[0];
X }
X#ifdef TESTVER
X if (debug4) {
X putc('\n', errfp);
X for (n = 0; n < 3; n++)
X fprintf(errfp, "ic[%d]: %f\n", n, ic[n]);
X }
X#endif
X
X /* assign points, reassigning order if necessary */
X C = P[0];
X if (ic[1] < ic[2]) {
X A = P[1];
X B = P[2];
X } else {
X A = P[2];
X B = P[1];
X iswap(&C_A, &C_B);
X fswap(&chg_x_CA, &chg_x_CB);
X fswap(&chg_y_CA, &chg_y_CB);
X }
X /*
X * if reference point (C) is at 'right' end of triangle, negate the
X * changes, and reverse A and B
X */
X if (ic[0] >= ic[1] && ic[0] >= ic[2]) {
X iswap(&A.x, &B.x);
X iswap(&A.y, &B.y);
X iswap(&C_A, &C_B);
X fswap(&chg_x_CA, &chg_x_CB);
X fswap(&chg_y_CA, &chg_y_CB);
X chg_x_CA = -chg_x_CA;
X chg_y_CA = -chg_y_CA;
X chg_x_CB = -chg_x_CB;
X chg_y_CB = -chg_y_CB;
X chg_x_AB = -chg_x_AB;
X chg_y_AB = -chg_y_AB;
X }
X#ifdef TESTVER
X /* debug output */
X if (debug4) {
X fprintf(errfp, "\nA: ( %d, %d ); B: ( %d, %d ); C: ( %d, %d )\n",
X A.x, A.y, B.x, B.y, C.x, C.y);
X fprintf(errfp, "chg_x_CA: %6.1f; chg_y_CA: %6.1f; C_A: %s\n",
X chg_x_CA, chg_y_CA, stat_type[C_A]);
X fprintf(errfp, "chg_x_CB: %6.1f; chg_y_CB: %6.1f; C_B: %s\n",
X chg_x_CB, chg_y_CB, stat_type[C_B]);
X fprintf(errfp, "chg_x_AB: %6.1f; chg_y_AB: %6.1f; A_B: %s\n",
X chg_x_AB, chg_y_AB, stat_type[A_B]);
X fflush(errfp);
X }
X#endif
X
X /* select and call proper processing function */
X /* reference point (C) is at 'left' end of triangle ----------------- */
X if (ic[0] <= ic[1] && ic[0] <= ic[2]) {
X
X#ifdef TESTVER
X if (debug1c) {
X fprintf(stderr, "To: end_ref() -- LEFT\n");
X }
X if (debug1f) {
X fprintf(errfp, "\nTo: end_ref() -- LEFT\n");
X fflush(errfp);
X }
X#endif
X end_ref(C, A, B);
X }
X /* reference point (C) is at 'right' end of triangle ----------------- */
X else if (ic[0] >= ic[1] && ic[0] >= ic[2]) {
X
X#ifdef TESTVER
X if (debug1c) {
X fprintf(stderr, "To: end_ref() -- RIGHT\n");
X }
X if (debug1f) {
X fprintf(errfp, "\nTo: end_ref() -- RIGHT\n");
X fflush(errfp);
X }
X#endif
X end_ref(C, A, B);
X }
X /* reference point (C) is in 'middle' of triangle ----------------- */
X else if ((ic[1] < ic[0] && ic[0] < ic[2]) ||
X (ic[2] < ic[0] && ic[0] < ic[1])) {
X
X#ifdef TESTVER
X if (debug1c) {
X fprintf(stderr, "To: mid_ref() -- MID\n");
X }
X if (debug1f) {
X fprintf(errfp, "\nTo: mid_ref() -- MID\n");
X fflush(stderr);
X }
X#endif
X mid_ref(A, C, B);
X } else {
X fprintf(stderr, "Disposition error -- fill_triangle()\n");
X#ifdef TESTVER
X fprintf(errfp, "Disposition error -- fill_triangle()\n");
X fprintf(errfp, "ic[0]: %f; ic[1]: %f; ic[2]: %f\n",
X ic[0], ic[1], ic[2]);
X#endif
X exit(1);
X }
X
X}
X
X
X/* =========================== get_3_chgs() ================================ */
Xget_3_chgs(A, B, C)
X POINT A,
X B,
X C;
X{
X /*
X * find the x- and y- increments for successive hatch line intersections
X * along segment C-A
X */
X C_A = get_chgs(&chg_x_CA, &chg_y_CA, C, A);
X
X /*
X * find the x- and y- increments for successive hatch line intersections
X * along segment C-B
X */
X C_B = get_chgs(&chg_x_CB, &chg_y_CB, C, B);
X
X /*
X * find the x- and y- increments for successive hatch line intersections
X * along segment A-B
X */
X A_B = get_chgs(&chg_x_AB, &chg_y_AB, A, B);
X}
X
X
X/* =========================== iswap() ===================================== */
Xiswap(i1p, i2p)
X int *i1p,
X *i2p;
X{
X int itemp;
X
X itemp = *i1p;
X *i1p = *i2p;
X *i2p = itemp;
X}
X
X
X/* =========================== fswap() ===================================== */
Xfswap(f1p, f2p)
X double *f1p,
X *f2p;
X{
X double ftemp;
X
X ftemp = *f1p;
X *f1p = *f2p;
X *f2p = ftemp;
X}
END_OF_FILE
if test 10686 -ne `wc -c <'hatch.c'`; then
echo shar: \"'hatch.c'\" unpacked with wrong size!
fi
# end of 'hatch.c'
fi
if test -f 'main.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'main.c'\"
else
echo shar: Extracting \"'main.c'\" \(11906 characters\)
sed "s/^X//" >'main.c' <<'END_OF_FILE'
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: hpglplot -eiln
X * Options:
X * -e produce output for Epson LQ-1500
X * -i produce output for IBM Proprinter
X * -l produce output for HP LaserJet+
X * -n disable area fill routines (bug-prone)
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
X#include <stdio.h>
X#include <string.h>
X#include "const.h"
X#include "fillvars.h"
X#include "vars.h"
X
X#ifdef TESTVER
X#include "dbgvars.h"
X#endif
X
Xmain(argc, argv)
X int argc;
X char **argv;
X{
X extern int no_fill;
X int to_printer;
X int c; /* option letter */
X
X no_fill = FALSE;
X /* Determine bit image output */
X#ifdef TESTVER
X fprintf(stderr, "Test version of plot program.\n");
X /* use defaults if no options specified */
X printer = EPSON;
X to_printer = FALSE;
X while ((c = getopt(argc, argv, "ein")) != EOF)
X switch (c) {
X case 'e':
X printer = EPSON;
X to_printer = TRUE;
X break;
X case 'i':
X printer = IBM_PRO;
X to_printer = TRUE;
X break;
X case 'n':
X no_fill = TRUE;
X break;
X default:
X usage();
X }
X#else
X printer = 0;
X to_printer = TRUE;
X while ((c = getopt(argc, argv, "eiln")) != EOF)
X switch (c) {
X case 'e':
X printer = EPSON;
X break;
X case 'i':
X printer = IBM_PRO;
X break;
X case 'l':
X printer = LASER;
X break;
X case 'n':
X no_fill = TRUE;
X break;
X default:
X usage();
X }
X if (printer == 0)
X usage();
X#endif
X
X#ifdef TESTVER
X set_debugs();
X#endif
X
X first_fill = TRUE;
X while ((c = getchar()) != EOF) { /* Read from standard input until EOF */
X switch (c) {
X case '\n':
X break;
X case ' ': /* non-standard: for readability */
X break;
X case '{': /* non-standard: allows nested */
X skip_comments(); /* comments in the HPGL file */
X break;
X case '!': /* for debugging */
X#ifdef TESTVER
X if (debug1c) {
X fprintf(stderr, "To: test routine\n");
X }
X if (debug1f) {
X fprintf(errfp, "\nTo: test routine\n");
X }
X#endif
X#if 0
X test();
X#endif
X break;
X case ESC:
X c = getchar(); /* Throw away '.' */
X c = getchar();
X switch (c) {
X case '(':
X case 'Y':
X case 'B':
X case 'E':
X case 'K':
X case 'L':
X case 'J':
X case 'O':
X break;
X case 'R':
X#ifdef TESTVER
X if (debug1c) {
X fprintf(stderr, "To: init_map();\n");
X }
X if (debug1f) {
X fprintf(errfp, "To: init_map();\n");
X }
X#endif
X init_map();
X break;
X#ifdef TESTVER
X case '!': /* for debugging -- exit before dump_map() */
X exit(0);
X break;
X#endif
X case ')':
X case 'Z':
X#ifdef TESTVER
X if (debug1c) {
X fprintf(stderr, "To: dump_map();\n");
X }
X if (debug1f) {
X fprintf(errfp, "To: dump_map();\n");
X }
X#endif
X dump_map(to_printer);
X exit(0);
X break;
X case '@':
X case 'I':
X case 'M':
X case 'N':
X while ((c = getchar()) != ':');
X break;
X default:
X fprintf(stderr, "Bad ESC sequence, ESC.%c\n", c);
X exit(3);
X }
X break;
X case 'A':
X switch ((c = getchar())) {
X case 'A':
X unimpl('A', 'A');
X break;
X case 'R':
X unimpl('A', 'R');
X break;
X default:
X fprintf(stderr, "Bad instruction A%c\n", c);
X exit(3);
X }
X break;
X case 'C':
X switch ((c = getchar())) {
X case 'A':
X /* do_CA(); */
X fprintf(stderr, "Alternate character set not available. ");
X fprintf(stderr, "Default set will be used.\n");
X break;
X case 'S':
X do_CS();
X break;
X case 'I':
X#ifdef TESTVER
X if (debug1c) {
X fprintf(stderr, "To: do_CI();\n");
X }
X if (debug1f) {
X fprintf(errfp, "To: do_CI();\n");
X }
X#endif
X do_CI();
X break;
X case 'P':
X unimpl('C', c);
X break;
X default:
X fprintf(stderr, "Bad instruction C%c\n", c);
X exit(3);
X }
X break;
X case 'D':
X switch ((c = getchar())) {
X case 'C':
X case 'P':
X unimpl('D', c);
X break;
X case 'F':
X#ifdef TESTVER
X if (debug1c) {
X fprintf(stderr, "To: do_DF();\n");
X }
X if (debug1f) {
X fprintf(errfp, "To: do_DF();\n");
X }
X#endif
X do_DF();
X break;
X case 'I':
X case 'R':
X unimpl('D', c);
X break;
X default:
X fprintf(stderr, "Bad instruction D%c\n", c);
X exit(3);
X }
X break;
X case 'E':
X switch ((c = getchar())) {
X case 'A':
X#ifdef TESTVER
X if (debug1c) {
X fprintf(stderr, "To: do_Ex(TRUE);\n");
X }
X if (debug1f) {
X fprintf(errfp, "To: do_Ex(TRUE);\n");
X }
X#endif
X do_Ex(TRUE);
X break;
X case 'P':
X#ifdef TESTVER
X if (debug1c) {
X fprintf(stderr, "To: do_EP();\n");
X }
X if (debug1f) {
X fprintf(errfp, "To: do_EP();\n");
X }
X#endif
X do_EP();
X break;
X case 'R':
X#ifdef TESTVER
X if (debug1c) {
X fprintf(stderr, "To: do_Ex(FALSE);\n");
X }
X if (debug1f) {
X fprintf(errfp, "To: do_Ex(FALSE);\n");
X }
X#endif
X do_Ex(FALSE);
X break;
X case 'W':
X#ifdef TESTVER
X if (debug1c) {
X fprintf(stderr, "To: do_EW();\n");
X }
X if (debug1f) {
X fprintf(errfp, "To: do_EW();\n");
X }
X#endif
X do_EW();
X break;
X default:
X fprintf(stderr, "Bad instruction E%c\n", c);
X exit(3);
X }
X break;
X case 'F':
X switch ((c = getchar())) {
X case 'T':
X#ifdef TESTVER
X if (debug1c) {
X fprintf(stderr, "To: do_FT();\n");
X }
X if (debug1f) {
X fprintf(errfp, "To: do_FT();\n");
X }
X#endif
X do_FT();
X break;
X default:
X fprintf(stderr, "Bad instruction F%c\n", c);
X exit(3);
X }
X break;
X case 'I':
X switch ((c = getchar())) {
X case 'M':
X unimpl('I', c);
X break;
X case 'N':
X unimpl('I', c);
X break;
X case 'P':
X#ifdef TESTVER
X if (debug1c) {
X fprintf(stderr, "To: do_IP();\n");
X }
X if (debug1f) {
X fprintf(errfp, "To: do_IP();\n");
X }
X#endif
X do_IP();
X break;
X case 'W':
X#ifdef TESTVER
X if (debug1c) {
X fprintf(stderr, "To: do_IW();\n");
X }
X if (debug1f) {
X fprintf(errfp, "To: do_IW();\n");
X }
X#endif
X do_IW();
X break;
X default:
X fprintf(stderr, "Bad instruction I%c\n", c);
X exit(3);
X }
X break;
X case 'L':
X switch ((c = getchar())) {
X case 'B':
X#ifdef TESTVER
X if (debug1c) {
X fprintf(stderr, "To: do_LB();\n");
X }
X if (debug1f) {
X fprintf(errfp, "To: do_LB();\n");
X }
X#endif
X do_LB();
X break;
X case 'T':
X#ifdef TESTVER
X if (debug1c) {
X fprintf(stderr, "To: do_LT();\n");
X }
X if (debug1f) {
X fprintf(errfp, "To: do_LT();\n");
X }
X#endif
X do_LT();
X break;
X default:
X fprintf(stderr, "Bad instruction L%c\n", c);
X exit(3);
X }
X break;
X case 'O':
X switch ((c = getchar())) {
X case 'A':
X case 'C':
X case 'D':
X case 'E':
X case 'F':
X case 'H':
X case 'I':
X case 'O':
X case 'P':
X case 'S':
X case 'W':
X unimpl('O', c);
X break;
X default:
X fprintf(stderr, "Bad instruction O%c\n", c);
X exit(3);
X }
X break;
X case 'P':
X switch ((c = getchar())) {
X case 'A':
X#ifdef TESTVER
X if (debug1c) {
X fprintf(stderr, "To: do_Px(PA);\n");
X }
X if (debug1f) {
X fprintf(errfp, "To: do_Px(PA);\n");
X }
X#endif
X do_Px(PA);
X break;
X case 'G':
X#ifdef TESTVER
X if (debug1c) {
X fprintf(stderr, "To: do_PG();\n");
X }
X if (debug1f) {
X fprintf(errfp, "To: do_PG();\n");
X }
X#endif
X do_PG();
X break;
X case 'R':
X#ifdef TESTVER
X if (debug1c) {
X fprintf(stderr, "To: do_Px(PR);\n");
X }
X if (debug1f) {
X fprintf(errfp, "To: do_Px(PR);\n");
X }
X#endif
X do_Px(PR);
X break;
X case 'U':
X#ifdef TESTVER
X if (debug1c) {
X fprintf(stderr, "To: do_Px(PU);\n");
X }
X if (debug1f) {
X fprintf(errfp, "To: do_Px(PU);\n");
X }
X#endif
X do_Px(PU);
X break;
X case 'D':
X#ifdef TESTVER
X if (debug1c) {
X fprintf(stderr, "To: do_Px(PD);\n");
X }
X if (debug1f) {
X fprintf(errfp, "To: do_Px(PD);\n");
X }
X#endif
X do_Px(PD);
X break;
X case 'S':
X unimpl('P', 'S');
X break;
X case 'T':
X#ifdef TESTVER
X if (debug1c) {
X fprintf(stderr, "To: do_PT();\n");
X }
X if (debug1f) {
X fprintf(errfp, "To: do_PT();\n");
X }
X#endif
X do_PT();
X break;
X default:
X fprintf(stderr, "Bad instruction P%c\n", c);
X exit(3);
X }
X break;
X case 'R':
X switch ((c = getchar())) {
X case 'A':
X#ifdef TESTVER
X if (debug1c) {
X fprintf(stderr, "To: do_Rx (RA)\n");
X }
X if (debug1f) {
X fprintf(errfp, "To: do_Rx (RA)\n");
X }
X#endif
X do_Rx(TRUE);
X break;
X case 'O':
X unimpl('R', c);
X break;
X case 'R':
X#ifdef TESTVER
X if (debug1c) {
X fprintf(stderr, "To: do_Rx (RR)\n");
X }
X if (debug1f) {
X fprintf(errfp, "To: do_Rx (RR)\n");
X }
X#endif
X do_Rx(FALSE);
X break;
X default:
X fprintf(stderr, "Bad instruction R%c\n", c);
X exit(3);
X }
X break;
X case 'S':
X switch ((c = getchar())) {
X case 'A':
X case 'C':
X unimpl('S', c);
X break;
X case 'I':
X#ifdef TESTVER
X if (debug1c) {
X fprintf(stderr, "To: do_SI();\n");
X }
X if (debug1f) {
X fprintf(errfp, "To: do_SI();\n");
X }
X#endif
X do_SI();
X break;
X case 'L':
X#ifdef TESTVER
X if (debug1c) {
X fprintf(stderr, "To: do_SL();\n");
X }
X if (debug1f) {
X fprintf(errfp, "To: do_SL();\n");
X }
X#endif
X do_SL();
X break;
X case 'M':
X#ifdef TESTVER
X if (debug1c) {
X fprintf(stderr, "To: do_SM();\n");
X }
X if (debug1f) {
X fprintf(errfp, "To: do_SM();\n");
X }
X#endif
X do_SM();
X break;
X case 'P':
X#ifdef TESTVER
X if (debug1c) {
X fprintf(stderr, "To: do_SP();\n");
X }
X if (debug1f) {
X fprintf(errfp, "To: do_SP();\n");
X }
X#endif
X do_SP();
X break;
X case 'R':
X case 'S':
X unimpl('S', c);
X break;
X default:
X fprintf(stderr, "Bad instruction S%c\n", c);
X exit(3);
X }
X break;
X case 'T':
X if ((c = getchar()) == 'L')
X unimpl('T', c);
X else {
X fprintf(stderr, "Bad instruction T%c\n", c);
X exit(3);
X }
X break;
X case 'U':
X if ((c = getchar()) == 'C')
X unimpl('U', c);
X else {
X fprintf(stderr, "Bad instruction U%c\n", c);
X exit(3);
X }
X break;
X case 'V':
X if ((c = getchar()) == 'S')
X while ((c = getchar()) != ';');
X else {
X fprintf(stderr, "Bad instruction V%c\n", c);
X exit(3);
X }
X break;
X case 'W':
X if ((c = getchar()) == 'G') {
X#ifdef TESTVER
X if (debug1c) {
X fprintf(stderr, "To: do_WG();\n");
X }
X if (debug1f) {
X fprintf(errfp, "To: do_WG();\n");
X }
X#endif
X do_WG();
X } else {
X fprintf(stderr, "Bad instruction W%c\n", c);
X exit(3);
X }
X break;
X case 'X':
X if ((c = getchar()) == 'T')
X unimpl('X', c);
X else {
X fprintf(stderr, "Bad instruction X%c\n", c);
X exit(3);
X }
X case 'Y':
X if ((c = getchar()) == 'T')
X unimpl('Y', c);
X else {
X fprintf(stderr, "Bad instruction Y%c\n", c);
X exit(3);
X }
X break;
X default:
X#ifdef TESTVER
X fprintf(stderr, "Unimplemented instruction %cx\n", c);
X fprintf(errfp, "Unimplemented instruction %cx\n", c);
X#endif
X break;
X }
X }
X}
X
X
Xskip_comments()
X{
X int end_of_comment = FALSE;
X int nested = 0;
X
X while (!end_of_comment) {
X c = getchar();
X /* skip label */
X if (c == 'L') {
X if ((c = getchar()) == 'B') {
X while (getchar() != label_terminator);
X }
X }
X if (c == '{') {
X nested++;
X }
X if (c == '}') {
X if (nested) {
X nested--;
X } else {
X end_of_comment = TRUE;
X }
X }
X }
X
X}
X
Xusage()
X{
X#ifdef TESTVER
X fprintf(stderr,
X "Test version can only output to Epson LQ 1500, IBM Proprinter, ");
X fprintf(stderr,
X "or the screen.\n");
X fprintf(stderr,
X "Use flag e or i for printer output, no flag for screen output.\n");
X#else
X fprintf(stderr, "Usage: hpglplot -eiln\n");
X#endif
X exit(1);
X}
END_OF_FILE
if test 11906 -ne `wc -c <'main.c'`; then
echo shar: \"'main.c'\" unpacked with wrong size!
fi
# end of 'main.c'
fi
echo shar: End of archive 3 \(of 3\).
cp /dev/null ark3isdone
MISSING=""
for I in 1 2 3 ; do
if test ! -f ark${I}isdone ; then
MISSING="${MISSING} ${I}"
fi
done
if test "${MISSING}" = "" ; then
echo You have unpacked all 3 archives.
rm -f ark[1-9]isdone
else
echo You still need to unpack the following archives:
echo " " ${MISSING}
fi
## End of shell archive.
exit 0
More information about the Comp.sources.misc
mailing list