v12i025: tgif, Part09/23
William Cheng
william at CS.UCLA.EDU
Mon Mar 11 08:39:39 AEST 1991
Submitted-by: william at CS.UCLA.EDU (William Cheng)
Posting-number: Volume 12, Issue 25
Archive-name: tgif/part09
---------------------------------> cut here <---------------------------------
#! /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 9 (of 23)."
# Contents: pattern.c prtgif.c
# Wrapped by william at oahu on Wed Mar 6 09:57:26 1991
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'pattern.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'pattern.c'\"
else
echo shar: Extracting \"'pattern.c'\" \(29469 characters\)
sed "s/^X//" >'pattern.c' <<'END_OF_FILE'
X/*
X * Author: William Chia-Wei Cheng (william at cs.ucla.edu)
X *
X * Copyright (C) 1990, 1991, William Cheng.
X */
X#ifndef lint
Xstatic char RCSid[] =
X "@(#)$Header: /tmp_mnt/n/kona/tangram/u/william/X11/TGIF2/RCS/pattern.c,v 2.0 91/03/05 12:47:50 william Exp $";
X#endif
X
X#include <stdio.h>
X#include <X11/Xlib.h>
X#include "const.h"
X#include "types.h"
X
X#include "arc.e"
X#include "choice.e"
X#include "drawing.e"
X#include "mark.e"
X#include "menu.e"
X#include "obj.e"
X#include "poly.e"
X#include "raster.e"
X#include "select.e"
X#include "setup.e"
X#include "spline.e"
X
Xint objFill = NONEPAT;
Xint lineStyle = LS_RIGHT;
Xint lineWidth = 0;
Xint penPat = SOLIDPAT;
Xint curSpline = LT_STRAIGHT;
Xint curDash = 0;
X
Xvoid ModeMenu (X, Y)
X int X, Y;
X{
X int index, * fore_colors, *valid;
X
X DefaultColorArrays (MAXCHOICES, &fore_colors, &valid);
X cfree (valid);
X index = PxMpMenuLoop (X, Y, choiceImageW, choiceImageH, MAXCHOICES, 1,
X MAXCHOICES, fore_colors, choicePixmap, SINGLECOLOR);
X
X if (index != INVALID) SetCurChoice (index);
X}
X
Xstatic
Xint ChangeObjFill (ObjPtr, FillIndex)
X struct ObjRec * ObjPtr;
X int FillIndex;
X{
X register struct ObjRec * obj_ptr;
X int changed = FALSE;
X
X for (obj_ptr = ObjPtr; obj_ptr != NULL; obj_ptr = obj_ptr->prev)
X switch (obj_ptr->type)
X {
X case OBJ_BOX:
X if (obj_ptr->detail.b->fill != FillIndex)
X {
X obj_ptr->detail.b->fill = FillIndex;
X changed = TRUE;
X }
X break;
X case OBJ_OVAL:
X if (obj_ptr->detail.o->fill != FillIndex)
X {
X obj_ptr->detail.o->fill = FillIndex;
X changed = TRUE;
X }
X break;
X case OBJ_POLY:
X if (obj_ptr->detail.p->fill != FillIndex)
X {
X obj_ptr->detail.p->fill = FillIndex;
X changed = TRUE;
X }
X break;
X case OBJ_POLYGON:
X if (obj_ptr->detail.g->fill != FillIndex)
X {
X obj_ptr->detail.g->fill = FillIndex;
X changed = TRUE;
X }
X break;
X case OBJ_ARC:
X if (obj_ptr->detail.a->fill != FillIndex)
X {
X if (obj_ptr->detail.a->fill == NONEPAT || FillIndex == NONEPAT)
X {
X obj_ptr->detail.a->fill = FillIndex;
X UpdArcBBox (obj_ptr);
X }
X else
X obj_ptr->detail.a->fill = FillIndex;
X changed = TRUE;
X }
X break;
X case OBJ_RCBOX:
X if (obj_ptr->detail.rcb->fill != FillIndex)
X {
X obj_ptr->detail.rcb->fill = FillIndex;
X changed = TRUE;
X }
X break;
X case OBJ_XBM:
X if (obj_ptr->detail.xbm->fill != FillIndex)
X {
X obj_ptr->detail.xbm->fill = FillIndex;
X changed = TRUE;
X }
X break;
X
X case OBJ_SYM:
X case OBJ_GROUP:
X if (ChangeObjFill (obj_ptr->detail.r->last, FillIndex))
X changed = TRUE;
X break;
X }
X return (changed);
X}
X
Xvoid ChangeAllSelFill (FillIndex)
X int FillIndex;
X{
X register struct SelRec * sel_ptr;
X int changed = FALSE, ltx, lty, rbx, rby;
X
X if (topSel == NULL)
X {
X objFill = FillIndex;
X ShowFill ();
X return;
X }
X
X HighLightReverse ();
X for (sel_ptr = botSel; sel_ptr != NULL; sel_ptr = sel_ptr->prev)
X switch (sel_ptr->obj->type)
X {
X case OBJ_BOX:
X if (sel_ptr->obj->detail.b->fill != FillIndex)
X {
X sel_ptr->obj->detail.b->fill = FillIndex;
X changed = TRUE;
X }
X break;
X case OBJ_OVAL:
X if (sel_ptr->obj->detail.o->fill != FillIndex)
X {
X sel_ptr->obj->detail.o->fill = FillIndex;
X changed = TRUE;
X }
X break;
X case OBJ_POLY:
X if (sel_ptr->obj->detail.p->fill != FillIndex)
X {
X sel_ptr->obj->detail.p->fill = FillIndex;
X changed = TRUE;
X }
X break;
X case OBJ_POLYGON:
X if (sel_ptr->obj->detail.g->fill != FillIndex)
X {
X sel_ptr->obj->detail.g->fill = FillIndex;
X changed = TRUE;
X }
X break;
X case OBJ_ARC:
X if (sel_ptr->obj->detail.a->fill != FillIndex)
X {
X if (sel_ptr->obj->detail.a->fill==NONEPAT || FillIndex==NONEPAT)
X {
X sel_ptr->obj->detail.a->fill = FillIndex;
X UpdArcBBox (sel_ptr->obj);
X }
X else
X sel_ptr->obj->detail.a->fill = FillIndex;
X changed = TRUE;
X }
X break;
X case OBJ_RCBOX:
X if (sel_ptr->obj->detail.rcb->fill != FillIndex)
X {
X sel_ptr->obj->detail.rcb->fill = FillIndex;
X changed = TRUE;
X }
X break;
X case OBJ_XBM:
X if (sel_ptr->obj->detail.xbm->fill != FillIndex)
X {
X sel_ptr->obj->detail.xbm->fill = FillIndex;
X changed = TRUE;
X }
X break;
X
X case OBJ_SYM:
X case OBJ_GROUP:
X if (ChangeObjFill (sel_ptr->obj->detail.r->last, FillIndex))
X changed = TRUE;
X break;
X }
X
X if (changed)
X {
X SetFileModified (TRUE);
X ltx = selLtX; lty = selLtY; rbx = selRbX; rby = selRbY;
X UpdSelBBox ();
X RedrawAreas (botObj, ltx-(1<<zoomScale), lty-(1<<zoomScale),
X rbx+(1<<zoomScale), rby+(1<<zoomScale), selLtX-(1<<zoomScale),
X selLtY-(1<<zoomScale), selRbX+(1<<zoomScale),
X selRbY+(1<<zoomScale));
X }
X HighLightForward ();
X}
X
Xvoid FillMenu (X, Y)
X int X, Y;
X{
X int index, * fore_colors, * valid;
X
X DefaultColorArrays (MAXPATTERNS, &fore_colors, &valid);
X cfree (valid);
X index = PxMpMenuLoop (X, Y, choiceImageW, choiceImageH, 4, 5, MAXPATTERNS,
X fore_colors, patPixmap, SINGLECOLOR);
X
X if (index != INVALID) ChangeAllSelFill (index);
X}
X
Xstatic
Xint ChangeObjLineStyle (ObjPtr, StyleIndex)
X struct ObjRec * ObjPtr;
X int StyleIndex;
X{
X register struct ObjRec * obj_ptr;
X int changed = FALSE;
X
X for (obj_ptr = ObjPtr; obj_ptr != NULL; obj_ptr = obj_ptr->prev)
X switch (obj_ptr->type)
X {
X case OBJ_POLY:
X if (obj_ptr->detail.p->style != StyleIndex)
X {
X obj_ptr->detail.p->style = StyleIndex;
X changed = TRUE;
X AdjObjBBox (obj_ptr);
X }
X break;
X case OBJ_GROUP:
X case OBJ_SYM:
X if (ChangeObjLineStyle (obj_ptr->detail.r->last, StyleIndex))
X {
X changed = TRUE;
X AdjObjBBox (obj_ptr);
X }
X break;
X }
X return (changed);
X}
X
Xvoid ChangeAllSelLineStyle (StyleIndex)
X int StyleIndex;
X{
X register struct SelRec * sel_ptr;
X register struct ObjRec * obj_ptr;
X int ltx, lty, rbx, rby, changed = FALSE;
X
X if (topSel == NULL)
X {
X lineStyle = StyleIndex;
X ShowLineStyle ();
X return;
X }
X
X for (sel_ptr = botSel; sel_ptr != NULL; sel_ptr = sel_ptr->prev)
X {
X obj_ptr = sel_ptr->obj;
X switch (obj_ptr->type)
X {
X case OBJ_POLY:
X if (obj_ptr->detail.p->style != StyleIndex)
X {
X obj_ptr->detail.p->style = StyleIndex;
X changed = TRUE;
X AdjObjBBox (obj_ptr);
X }
X break;
X case OBJ_GROUP:
X case OBJ_SYM:
X if (ChangeObjLineStyle (obj_ptr->detail.r->last, StyleIndex))
X {
X changed = TRUE;
X AdjObjBBox (obj_ptr);
X }
X break;
X }
X }
X
X if (changed)
X {
X SetFileModified (TRUE);
X HighLightReverse ();
X ltx = selLtX; lty = selLtY; rbx = selRbX; rby = selRbY;
X UpdSelBBox ();
X RedrawAreas (botObj, ltx-(1<<zoomScale), lty-(1<<zoomScale),
X rbx+(1<<zoomScale), rby+(1<<zoomScale), selLtX-(1<<zoomScale),
X selLtY-(1<<zoomScale), selRbX+(1<<zoomScale),
X selRbY+(1<<zoomScale));
X HighLightForward ();
X }
X}
X
Xstatic
Xint ChangeObjLineType (ObjPtr, TypeIndex)
X struct ObjRec * ObjPtr;
X int TypeIndex;
X{
X register struct ObjRec * obj_ptr;
X int changed = FALSE;
X
X for (obj_ptr = ObjPtr; obj_ptr != NULL; obj_ptr = obj_ptr->prev)
X switch (obj_ptr->type)
X {
X case OBJ_POLY:
X if (obj_ptr->detail.p->curved != TypeIndex)
X {
X if ((obj_ptr->detail.p->curved = TypeIndex) == LT_SPLINE)
X obj_ptr->detail.p->svlist = MakeSplinePolyVertex (
X &(obj_ptr->detail.p->sn), drawOrigX, drawOrigY,
X obj_ptr->detail.p->n, obj_ptr->detail.p->vlist);
X else
X cfree (obj_ptr->detail.p->svlist);
X changed = TRUE;
X AdjObjBBox (obj_ptr);
X }
X break;
X case OBJ_POLYGON:
X if (obj_ptr->detail.g->curved != TypeIndex)
X {
X if ((obj_ptr->detail.g->curved = TypeIndex) == LT_SPLINE)
X obj_ptr->detail.g->svlist = MakeSplinePolygonVertex (
X &(obj_ptr->detail.g->sn), drawOrigX, drawOrigY,
X obj_ptr->detail.g->n, obj_ptr->detail.g->vlist);
X else
X cfree (obj_ptr->detail.g->svlist);
X changed = TRUE;
X AdjObjBBox (obj_ptr);
X }
X break;
X
X case OBJ_GROUP:
X case OBJ_SYM:
X if (ChangeObjLineType (obj_ptr->detail.r->last, TypeIndex))
X {
X changed = TRUE;
X AdjObjBBox (obj_ptr);
X }
X break;
X }
X return (changed);
X}
X
Xvoid ChangeAllSelLineType (TypeIndex)
X int TypeIndex;
X{
X register struct SelRec * sel_ptr;
X register struct ObjRec * obj_ptr;
X int ltx, lty, rbx, rby, changed = FALSE;
X
X if (topSel == NULL)
X {
X curSpline = TypeIndex;
X ShowLineType ();
X return;
X }
X
X for (sel_ptr = botSel; sel_ptr != NULL; sel_ptr = sel_ptr->prev)
X {
X obj_ptr = sel_ptr->obj;
X switch (obj_ptr->type)
X {
X case OBJ_POLY:
X if (obj_ptr->detail.p->curved != TypeIndex)
X {
X if ((obj_ptr->detail.p->curved = TypeIndex) == LT_SPLINE)
X obj_ptr->detail.p->svlist = MakeSplinePolyVertex (
X &(obj_ptr->detail.p->sn), drawOrigX, drawOrigY,
X obj_ptr->detail.p->n, obj_ptr->detail.p->vlist);
X else
X cfree (obj_ptr->detail.p->svlist);
X changed = TRUE;
X AdjObjBBox (obj_ptr);
X }
X break;
X case OBJ_POLYGON:
X if (obj_ptr->detail.g->curved != TypeIndex)
X {
X if ((obj_ptr->detail.g->curved = TypeIndex) == LT_SPLINE)
X obj_ptr->detail.g->svlist = MakeSplinePolygonVertex (
X &(obj_ptr->detail.g->sn), drawOrigX, drawOrigY,
X obj_ptr->detail.g->n, obj_ptr->detail.g->vlist);
X else
X cfree (obj_ptr->detail.g->svlist);
X changed = TRUE;
X AdjObjBBox (obj_ptr);
X }
X break;
X
X case OBJ_GROUP:
X case OBJ_SYM:
X if (ChangeObjLineType (obj_ptr->detail.r->last, TypeIndex))
X {
X changed = TRUE;
X AdjObjBBox (obj_ptr);
X }
X break;
X }
X }
X
X if (changed)
X {
X SetFileModified (TRUE);
X HighLightReverse ();
X ltx = selLtX; lty = selLtY; rbx = selRbX; rby = selRbY;
X UpdSelBBox ();
X RedrawAreas (botObj, ltx-(1<<zoomScale), lty-(1<<zoomScale),
X rbx+(1<<zoomScale), rby+(1<<zoomScale), selLtX-(1<<zoomScale),
X selLtY-(1<<zoomScale), selRbX+(1<<zoomScale),
X selRbY+(1<<zoomScale));
X HighLightForward ();
X }
X}
X
Xstatic
Xint ChangeObjLineWidth (ObjPtr, WidthIndex)
X struct ObjRec * ObjPtr;
X int WidthIndex;
X{
X register struct ObjRec * obj_ptr;
X int changed = FALSE;
X
X for (obj_ptr = ObjPtr; obj_ptr != NULL; obj_ptr = obj_ptr->prev)
X switch (obj_ptr->type)
X {
X case OBJ_POLY:
X if (obj_ptr->detail.p->width != WidthIndex)
X {
X obj_ptr->detail.p->width = WidthIndex;
X changed = TRUE;
X AdjObjBBox (obj_ptr);
X }
X break;
X case OBJ_BOX:
X if (obj_ptr->detail.b->width != WidthIndex)
X {
X obj_ptr->detail.b->width = WidthIndex;
X changed = TRUE;
X AdjObjBBox (obj_ptr);
X }
X break;
X case OBJ_OVAL:
X if (obj_ptr->detail.o->width != WidthIndex)
X {
X obj_ptr->detail.o->width = WidthIndex;
X changed = TRUE;
X AdjObjBBox (obj_ptr);
X }
X break;
X case OBJ_POLYGON:
X if (obj_ptr->detail.g->width != WidthIndex)
X {
X obj_ptr->detail.g->width = WidthIndex;
X changed = TRUE;
X AdjObjBBox (obj_ptr);
X }
X break;
X case OBJ_ARC:
X if (obj_ptr->detail.a->width != WidthIndex)
X {
X obj_ptr->detail.a->width = WidthIndex;
X changed = TRUE;
X AdjObjBBox (obj_ptr);
X }
X break;
X case OBJ_RCBOX:
X if (obj_ptr->detail.rcb->width != WidthIndex)
X {
X obj_ptr->detail.rcb->width = WidthIndex;
X changed = TRUE;
X AdjObjBBox (obj_ptr);
X }
X break;
X
X case OBJ_GROUP:
X case OBJ_SYM:
X if (ChangeObjLineWidth (obj_ptr->detail.r->last, WidthIndex))
X {
X changed = TRUE;
X AdjObjBBox (obj_ptr);
X }
X break;
X }
X return (changed);
X}
X
Xvoid ChangeAllSelLineWidth (WidthIndex)
X int WidthIndex;
X{
X register struct SelRec * sel_ptr;
X register struct ObjRec * obj_ptr;
X int ltx, lty, rbx, rby, changed = FALSE;
X
X if (topSel == NULL)
X {
X lineWidth = WidthIndex;
X ShowLineWidth ();
X return;
X }
X
X for (sel_ptr = botSel; sel_ptr != NULL; sel_ptr = sel_ptr->prev)
X {
X obj_ptr = sel_ptr->obj;
X switch (obj_ptr->type)
X {
X case OBJ_POLY:
X if (obj_ptr->detail.p->width != WidthIndex)
X {
X obj_ptr->detail.p->width = WidthIndex;
X changed = TRUE;
X AdjObjBBox (obj_ptr);
X }
X break;
X case OBJ_BOX:
X if (obj_ptr->detail.b->width != WidthIndex)
X {
X obj_ptr->detail.b->width = WidthIndex;
X changed = TRUE;
X AdjObjBBox (obj_ptr);
X }
X break;
X case OBJ_OVAL:
X if (obj_ptr->detail.o->width != WidthIndex)
X {
X obj_ptr->detail.o->width = WidthIndex;
X changed = TRUE;
X AdjObjBBox (obj_ptr);
X }
X break;
X case OBJ_POLYGON:
X if (obj_ptr->detail.g->width != WidthIndex)
X {
X obj_ptr->detail.g->width = WidthIndex;
X changed = TRUE;
X AdjObjBBox (obj_ptr);
X }
X break;
X case OBJ_ARC:
X if (obj_ptr->detail.a->width != WidthIndex)
X {
X obj_ptr->detail.a->width = WidthIndex;
X changed = TRUE;
X AdjObjBBox (obj_ptr);
X }
X break;
X case OBJ_RCBOX:
X if (obj_ptr->detail.rcb->width != WidthIndex)
X {
X obj_ptr->detail.rcb->width = WidthIndex;
X changed = TRUE;
X AdjObjBBox (obj_ptr);
X }
X break;
X
X case OBJ_GROUP:
X case OBJ_SYM:
X if (ChangeObjLineWidth (obj_ptr->detail.r->last, WidthIndex))
X {
X changed = TRUE;
X AdjObjBBox (obj_ptr);
X }
X break;
X }
X }
X
X if (changed)
X {
X SetFileModified (TRUE);
X HighLightReverse ();
X ltx = selLtX; lty = selLtY; rbx = selRbX; rby = selRbY;
X UpdSelBBox ();
X RedrawAreas (botObj, ltx-(1<<zoomScale), lty-(1<<zoomScale),
X rbx+(1<<zoomScale), rby+(1<<zoomScale), selLtX-(1<<zoomScale),
X selLtY-(1<<zoomScale), selRbX+(1<<zoomScale),
X selRbY+(1<<zoomScale));
X HighLightForward ();
X }
X}
X
Xstatic
Xint ChangeObjDashes (ObjPtr, DashIndex)
X struct ObjRec * ObjPtr;
X int DashIndex;
X{
X register struct ObjRec * obj_ptr;
X int changed = FALSE;
X
X for (obj_ptr = ObjPtr; obj_ptr != NULL; obj_ptr = obj_ptr->prev)
X switch (obj_ptr->type)
X {
X case OBJ_POLY:
X if (obj_ptr->detail.p->dash != DashIndex)
X {
X obj_ptr->detail.p->dash = DashIndex;
X changed = TRUE;
X }
X break;
X case OBJ_BOX:
X if (obj_ptr->detail.b->dash != DashIndex)
X {
X obj_ptr->detail.b->dash = DashIndex;
X changed = TRUE;
X }
X break;
X case OBJ_OVAL:
X if (obj_ptr->detail.o->dash != DashIndex)
X {
X obj_ptr->detail.o->dash = DashIndex;
X changed = TRUE;
X }
X break;
X case OBJ_POLYGON:
X if (obj_ptr->detail.g->dash != DashIndex)
X {
X obj_ptr->detail.g->dash = DashIndex;
X changed = TRUE;
X }
X break;
X case OBJ_ARC:
X if (obj_ptr->detail.a->dash != DashIndex)
X {
X obj_ptr->detail.a->dash = DashIndex;
X changed = TRUE;
X }
X break;
X case OBJ_RCBOX:
X if (obj_ptr->detail.rcb->dash != DashIndex)
X {
X obj_ptr->detail.rcb->dash = DashIndex;
X changed = TRUE;
X }
X break;
X
X case OBJ_GROUP:
X case OBJ_SYM:
X if (ChangeObjLineWidth (obj_ptr->detail.r->last, DashIndex))
X changed = TRUE;
X break;
X }
X return (changed);
X}
X
Xvoid ChangeAllSelDashes (DashIndex)
X int DashIndex;
X{
X register struct SelRec * sel_ptr;
X register struct ObjRec * obj_ptr;
X int changed = FALSE;
X
X if (topSel == NULL)
X {
X curDash = DashIndex;
X ShowLineWidth ();
X return;
X }
X
X for (sel_ptr = botSel; sel_ptr != NULL; sel_ptr = sel_ptr->prev)
X {
X obj_ptr = sel_ptr->obj;
X switch (obj_ptr->type)
X {
X case OBJ_POLY:
X if (obj_ptr->detail.p->dash != DashIndex)
X {
X obj_ptr->detail.p->dash = DashIndex;
X changed = TRUE;
X }
X break;
X case OBJ_BOX:
X if (obj_ptr->detail.b->dash != DashIndex)
X {
X obj_ptr->detail.b->dash = DashIndex;
X changed = TRUE;
X }
X break;
X case OBJ_OVAL:
X if (obj_ptr->detail.o->dash != DashIndex)
X {
X obj_ptr->detail.o->dash = DashIndex;
X changed = TRUE;
X }
X break;
X case OBJ_POLYGON:
X if (obj_ptr->detail.g->dash != DashIndex)
X {
X obj_ptr->detail.g->dash = DashIndex;
X changed = TRUE;
X }
X break;
X case OBJ_ARC:
X if (obj_ptr->detail.a->dash != DashIndex)
X {
X obj_ptr->detail.a->dash = DashIndex;
X changed = TRUE;
X }
X break;
X case OBJ_RCBOX:
X if (obj_ptr->detail.rcb->dash != DashIndex)
X {
X obj_ptr->detail.rcb->dash = DashIndex;
X changed = TRUE;
X }
X break;
X
X case OBJ_GROUP:
X case OBJ_SYM:
X if (ChangeObjDashes (obj_ptr->detail.r->last, DashIndex))
X changed = TRUE;
X break;
X }
X }
X
X if (changed)
X {
X SetFileModified (TRUE);
X HighLightReverse ();
X RedrawAnArea (botObj, selLtX-(1<<zoomScale), selLtY-(1<<zoomScale),
X selRbX+(1<<zoomScale), selRbY+(1<<zoomScale));
X HighLightForward ();
X }
X}
X
Xvoid LineStyleMenu (X, Y)
X int X, Y;
X{
X int index, * fore_colors, * valid;
X
X DefaultColorArrays (MAXLINEWIDTHS+MAXLINETYPES+MAXDASHES+MAXLINESTYLES,
X &fore_colors, &valid);
X cfree (valid);
X index = PxMpMenuLoop (X, Y, menuImageW, menuImageH,
X MAXLINEWIDTHS+MAXLINETYPES+MAXDASHES+MAXLINESTYLES, 1,
X MAXLINEWIDTHS+MAXLINETYPES+MAXDASHES+MAXLINESTYLES,
X fore_colors, lineStylePixmap, SINGLECOLOR);
X if (index == INVALID) return;
X
X if (index < MAXLINEWIDTHS)
X ChangeAllSelLineWidth (index);
X else if (index < MAXLINEWIDTHS+MAXLINETYPES)
X ChangeAllSelLineType (index - MAXLINEWIDTHS);
X else if (index < MAXLINEWIDTHS+MAXLINETYPES+MAXDASHES)
X ChangeAllSelDashes (index - MAXLINEWIDTHS - MAXLINETYPES);
X else
X ChangeAllSelLineStyle (index - MAXLINEWIDTHS - MAXLINETYPES - MAXDASHES);
X}
X
Xstatic
Xint ChangeObjPen (ObjPtr, PenIndex)
X struct ObjRec * ObjPtr;
X int PenIndex;
X{
X register struct ObjRec * obj_ptr;
X int changed = FALSE;
X
X for (obj_ptr = ObjPtr; obj_ptr != NULL; obj_ptr = obj_ptr->prev)
X switch (obj_ptr->type)
X {
X case OBJ_POLY:
X if (obj_ptr->detail.p->pen != PenIndex)
X {
X obj_ptr->detail.p->pen = PenIndex;
X changed = TRUE;
X }
X break;
X case OBJ_TEXT:
X if (obj_ptr->detail.t->pen != PenIndex)
X {
X obj_ptr->detail.t->pen = PenIndex;
X changed = TRUE;
X }
X break;
X case OBJ_BOX:
X if (obj_ptr->detail.b->pen != PenIndex)
X {
X obj_ptr->detail.b->pen = PenIndex;
X changed = TRUE;
X }
X break;
X case OBJ_OVAL:
X if (obj_ptr->detail.o->pen != PenIndex)
X {
X obj_ptr->detail.o->pen = PenIndex;
X changed = TRUE;
X }
X break;
X case OBJ_POLYGON:
X if (obj_ptr->detail.g->pen != PenIndex)
X {
X obj_ptr->detail.g->pen = PenIndex;
X changed = TRUE;
X }
X break;
X case OBJ_ARC:
X if (obj_ptr->detail.a->pen != PenIndex)
X {
X obj_ptr->detail.a->pen = PenIndex;
X changed = TRUE;
X }
X break;
X case OBJ_RCBOX:
X if (obj_ptr->detail.rcb->pen != PenIndex)
X {
X obj_ptr->detail.rcb->pen = PenIndex;
X changed = TRUE;
X }
X break;
X
X case OBJ_GROUP:
X case OBJ_SYM:
X if (ChangeObjPen (obj_ptr->detail.r->last, PenIndex))
X changed = TRUE;
X break;
X }
X return (changed);
X}
X
Xvoid ChangeAllSelPen (PenIndex)
X int PenIndex;
X{
X register struct SelRec * sel_ptr;
X int changed = FALSE;
X
X if (topSel == NULL)
X {
X penPat = PenIndex;
X ShowPen ();
X return;
X }
X
X for (sel_ptr = botSel; sel_ptr != NULL; sel_ptr = sel_ptr->prev)
X switch (sel_ptr->obj->type)
X {
X case OBJ_POLY:
X if (sel_ptr->obj->detail.p->pen != PenIndex)
X {
X sel_ptr->obj->detail.p->pen = PenIndex;
X changed = TRUE;
X }
X break;
X case OBJ_TEXT:
X if (sel_ptr->obj->detail.t->pen != PenIndex)
X {
X sel_ptr->obj->detail.t->pen = PenIndex;
X changed = TRUE;
X }
X break;
X case OBJ_BOX:
X if (sel_ptr->obj->detail.b->pen != PenIndex)
X {
X sel_ptr->obj->detail.b->pen = PenIndex;
X changed = TRUE;
X }
X break;
X case OBJ_OVAL:
X if (sel_ptr->obj->detail.o->pen != PenIndex)
X {
X sel_ptr->obj->detail.o->pen = PenIndex;
X changed = TRUE;
X }
X break;
X case OBJ_POLYGON:
X if (sel_ptr->obj->detail.g->pen != PenIndex)
X {
X sel_ptr->obj->detail.g->pen = PenIndex;
X changed = TRUE;
X }
X break;
X case OBJ_ARC:
X if (sel_ptr->obj->detail.a->pen != PenIndex)
X {
X sel_ptr->obj->detail.a->pen = PenIndex;
X changed = TRUE;
X }
X break;
X case OBJ_RCBOX:
X if (sel_ptr->obj->detail.rcb->pen != PenIndex)
X {
X sel_ptr->obj->detail.rcb->pen = PenIndex;
X changed = TRUE;
X }
X break;
X
X case OBJ_GROUP:
X case OBJ_SYM:
X if (ChangeObjPen (sel_ptr->obj->detail.r->last, PenIndex))
X changed = TRUE;
X break;
X }
X
X if (changed)
X {
X SetFileModified (TRUE);
X HighLightReverse ();
X RedrawAnArea (botObj, selLtX-(1<<zoomScale), selLtY-(1<<zoomScale),
X selRbX+(1<<zoomScale), selRbY+(1<<zoomScale));
X HighLightForward ();
X }
X}
X
Xvoid PenMenu (X, Y)
X int X, Y;
X{
X int index, * fore_colors, * valid;
X
X DefaultColorArrays (MAXPATTERNS, &fore_colors, &valid);
X cfree (valid);
X index = PxMpMenuLoop (X, Y, choiceImageW, choiceImageH, 4, 5, MAXPATTERNS,
X fore_colors, patPixmap, SINGLECOLOR);
X
X if (index != INVALID) ChangeAllSelPen (index);
X}
X
Xstatic
Xint ToggleObjLineType (ObjPtr)
X struct ObjRec * ObjPtr;
X{
X register struct ObjRec * obj_ptr;
X register int changed = FALSE;
X
X for (obj_ptr = ObjPtr; obj_ptr != NULL; obj_ptr = obj_ptr->prev)
X switch (obj_ptr->type)
X {
X case OBJ_POLY:
X obj_ptr->detail.p->curved = !obj_ptr->detail.p->curved;
X if (obj_ptr->detail.p->curved == LT_SPLINE)
X obj_ptr->detail.p->svlist = MakeSplinePolyVertex (
X &(obj_ptr->detail.p->sn), drawOrigX, drawOrigY,
X obj_ptr->detail.p->n, obj_ptr->detail.p->vlist);
X else
X cfree (obj_ptr->detail.p->svlist);
X changed = TRUE;
X AdjObjBBox (obj_ptr);
X break;
X case OBJ_POLYGON:
X obj_ptr->detail.g->curved = !obj_ptr->detail.g->curved;
X if (obj_ptr->detail.g->curved == LT_SPLINE)
X obj_ptr->detail.g->svlist = MakeSplinePolygonVertex (
X &(obj_ptr->detail.g->sn), drawOrigX, drawOrigY,
X obj_ptr->detail.g->n, obj_ptr->detail.g->vlist);
X else
X cfree (obj_ptr->detail.g->svlist);
X changed = TRUE;
X AdjObjBBox (obj_ptr);
X break;
X
X case OBJ_GROUP:
X case OBJ_SYM:
X if (ToggleObjLineType (obj_ptr->detail.r->last))
X {
X changed = TRUE;
X AdjObjBBox (obj_ptr);
X }
X break;
X }
X return (changed);
X}
X
Xvoid ToggleAllSelLineType ()
X{
X register struct SelRec * sel_ptr;
X register struct ObjRec * obj_ptr;
X register int changed = FALSE;
X
X if (topSel == NULL)
X {
X curSpline = !curSpline;
X ShowLineType ();
X return;
X }
X
X for (sel_ptr = botSel; sel_ptr != NULL; sel_ptr = sel_ptr->prev)
X {
X obj_ptr = sel_ptr->obj;
X switch (obj_ptr->type)
X {
X case OBJ_POLY:
X obj_ptr->detail.p->curved = !(obj_ptr->detail.p->curved);
X if (obj_ptr->detail.p->curved == LT_SPLINE)
X obj_ptr->detail.p->svlist = MakeSplinePolyVertex (
X &(obj_ptr->detail.p->sn), drawOrigX, drawOrigY,
X obj_ptr->detail.p->n, obj_ptr->detail.p->vlist);
X else
X cfree (obj_ptr->detail.p->svlist);
X changed = TRUE;
X AdjObjBBox (obj_ptr);
X break;
X case OBJ_POLYGON:
X obj_ptr->detail.g->curved = !(obj_ptr->detail.g->curved);
X if (obj_ptr->detail.g->curved == LT_SPLINE)
X obj_ptr->detail.g->svlist = MakeSplinePolygonVertex (
X &(obj_ptr->detail.g->sn), drawOrigX, drawOrigY,
X obj_ptr->detail.g->n, obj_ptr->detail.g->vlist);
X else
X cfree (obj_ptr->detail.g->svlist);
X changed = TRUE;
X AdjObjBBox (obj_ptr);
X break;
X
X case OBJ_GROUP:
X case OBJ_SYM:
X if (ToggleObjLineType (obj_ptr->detail.r->last))
X {
X changed = TRUE;
X AdjObjBBox (obj_ptr);
X }
X break;
X }
X }
X
X if (changed)
X {
X SetFileModified (TRUE);
X HighLightReverse ();
X RedrawAnArea (botObj, selLtX-(1<<zoomScale), selLtY-(1<<zoomScale),
X selRbX+(1<<zoomScale), selRbY+(1<<zoomScale));
X HighLightForward ();
X }
X}
END_OF_FILE
if test 29469 -ne `wc -c <'pattern.c'`; then
echo shar: \"'pattern.c'\" unpacked with wrong size!
fi
# end of 'pattern.c'
fi
if test -f 'prtgif.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'prtgif.c'\"
else
echo shar: Extracting \"'prtgif.c'\" \(4965 characters\)
sed "s/^X//" >'prtgif.c' <<'END_OF_FILE'
X/*
X * Author: William Chia-Wei Cheng (william at cs.ucla.edu)
X *
X * Copyright (C) 1990, 1991, William Cheng.
X */
X#ifndef lint
Xstatic char RCSid[] =
X "@(#)$Header: /tmp_mnt/n/kona/tangram/u/william/X11/TGIF2/RCS/prtgif.c,v 2.0 91/03/05 12:48:03 william Exp $";
X#endif
X
X#include <stdio.h>
X#include <X11/Xlib.h>
X#include "const.h"
X#include "types.h"
X
X#include "file.e"
X#include "grid.e"
X#include "obj.e"
X#include "setup.e"
X
X#define PRTGIF (TRUE)
X
Xextern char * getenv ();
X/* extern int malloc_debug (); */
X
Xint lastFile = TRUE;
X
Xshort pDrawFontAsc[] =
X{
X 8, 10, 12, 14, 17, 22,
X 8, 10, 12, 14, 17, 22,
X 8, 10, 12, 14, 17, 23,
X 8, 10, 12, 14, 17, 22,
X 8, 9, 11, 13, 15, 19,
X 7, 9, 11, 12, 15, 20,
X 7, 9, 11, 13, 15, 19,
X 7, 9, 11, 12, 15, 20,
X 9, 11, 12, 14, 18, 24,
X 9, 11, 12, 14, 17, 24,
X 9, 11, 12, 14, 17, 24,
X 9, 11, 12, 14, 17, 24,
X 8, 11, 12, 14, 18, 23,
X 8, 11, 12, 15, 18, 24,
X 8, 11, 12, 14, 16, 23,
X 8, 11, 12, 14, 16, 24,
X 8, 10, 12, 14, 18, 24,
X 9, 14, 15, 18, 23, 30,
X 10, 14, 16, 17, 23, 30,
X 9, 13, 15, 17, 22, 30,
X 9, 13, 15, 18, 22, 30,
X 9, 12, 14, 15, 19, 26,
X 9, 12, 14, 15, 21, 26,
X 9, 12, 14, 15, 19, 26,
X 9, 12, 14, 15, 20, 26,
X 11, 14, 16, 18, 24, 31,
X 11, 14, 16, 18, 24, 31,
X 11, 14, 16, 18, 24, 31,
X 11, 14, 16, 18, 24, 31,
X 11, 14, 16, 19, 24, 32,
X 11, 15, 16, 19, 24, 33,
X 11, 14, 16, 18, 23, 32,
X 11, 15, 16, 19, 24, 32,
X 11, 12, 13, 14, 19, 27
X};
X
Xshort pDrawFontDes[] =
X{
X 2, 3, 3, 4, 4, 6,
X 2, 3, 3, 4, 4, 6,
X 2, 3, 3, 4, 5, 6,
X 2, 3, 3, 3, 4, 6,
X 2, 2, 3, 3, 4, 5,
X 2, 2, 3, 4, 5, 5,
X 2, 2, 3, 3, 4, 5,
X 2, 2, 3, 4, 5, 5,
X 2, 2, 3, 3, 4, 5,
X 2, 2, 3, 3, 5, 5,
X 2, 2, 3, 3, 5, 5,
X 2, 2, 3, 3, 5, 5,
X 2, 2, 3, 3, 4, 5,
X 2, 2, 3, 3, 4, 5,
X 2, 2, 3, 3, 6, 5,
X 2, 2, 3, 3, 6, 5,
X 3, 4, 4, 6, 7, 8,
X 3, 3, 4, 4, 6, 7,
X 3, 3, 4, 4, 6, 7,
X 3, 4, 4, 5, 6, 7,
X 3, 3, 4, 4, 6, 7,
X 2, 3, 3, 4, 5, 6,
X 2, 4, 3, 5, 5, 7,
X 2, 3, 4, 4, 5, 6,
X 2, 4, 4, 5, 5, 7,
X 2, 3, 4, 4, 5, 7,
X 2, 3, 4, 5, 5, 7,
X 2, 3, 4, 5, 5, 7,
X 2, 3, 4, 5, 5, 7,
X 2, 3, 3, 4, 5, 7,
X 2, 3, 3, 4, 5, 7,
X 2, 3, 3, 4, 5, 7,
X 2, 3, 3, 4, 5, 7,
X 4, 3, 4, 5, 5, 7
X};
X
Xstatic
Xint PrTgifLoad (FileName)
X char * FileName;
X{
X struct ObjRec * obj_ptr;
X char full_name[MAXPATHLENGTH];
X int len;
X FILE * fp;
X
X len = strlen (FileName);
X if (len >= 4 && strcmp (&FileName[len-4], ".obj") == 0)
X strcpy (full_name, FileName);
X else
X sprintf (full_name, "%s.obj", FileName);
X
X if ((fp = fopen (full_name, "r")) == NULL)
X {
X printf ("Can not open '%s'.\n", full_name);
X return (FALSE);
X }
X
X printf ("Reading '%s' ...\n", full_name);
X
X while (ReadObj (fp, &obj_ptr, PRTGIF))
X if (obj_ptr != NULL)
X AddObj (NULL, topObj, obj_ptr);
X
X fclose (fp);
X return (TRUE);
X}
X
Xmain (argc, argv)
X int argc;
X char * argv[];
X{
X char inbuf[MAXSTRING+1];
X char * c_ptr;
X int len, file_name_found;
X
X/* malloc_debug (1); */
X
X if ((c_ptr = getenv ("TGIFPATH")) == NULL)
X strcpy (drawPath, TGIF_PATH);
X else
X if (strlen (c_ptr) >= MAXSTRING)
X /* must be an error */
X strcpy (drawPath, TGIF_PATH);
X else
X strcpy (drawPath, c_ptr);
X
X strcpy (printCommand, "lpr");
X
X c_ptr = printCommand;
X c_ptr += strlen ("lpr");
X file_name_found = FALSE;
X for (argc--, argv++; argc > 0; argc--, argv++)
X {
X if (**argv == '-')
X {
X if ((strcmp (*argv, "-p") == 0) || (strcmp (*argv, "-eps") == 0))
X whereToPrint = LATEX_FIG;
X else if ((strcmp (*argv, "-f") == 0) || (strcmp (*argv, "-ps") == 0))
X whereToPrint = PS_FILE;
X else
X {
X strcat (c_ptr++, " ");
X strcat (c_ptr, *argv);
X c_ptr += strlen (*argv);
X }
X }
X else
X break;
X }
X
X switch (argc)
X {
X case 0:
X printf ("\nTgif File Name to Print> ");
X while (fgets (inbuf, MAXSTRING, stdin) != NULL)
X {
X len = strlen (inbuf);
X if (len > 0)
X {
X if (inbuf[--len] == '\n') inbuf[len] = '\0';
X if (PrTgifLoad (inbuf))
X {
X Dump (PRTGIF, inbuf);
X DelAllObj ();
X }
X }
X printf ("\nTgif File Name to Print> ");
X }
X break;
X default:
X for ( ; argc > 0; argc--, argv++)
X {
X lastFile = (argc == 1);
X if (PrTgifLoad (*argv))
X {
X Dump (PRTGIF, *argv);
X DelAllObj ();
X }
X }
X }
X printf ("\n");
X exit (0);
X}
END_OF_FILE
if test 4965 -ne `wc -c <'prtgif.c'`; then
echo shar: \"'prtgif.c'\" unpacked with wrong size!
fi
# end of 'prtgif.c'
fi
echo shar: End of archive 9 \(of 23\).
cp /dev/null ark9isdone
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 ; do
if test ! -f ark${I}isdone ; then
MISSING="${MISSING} ${I}"
fi
done
if test "${MISSING}" = "" ; then
echo You have unpacked all 23 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
---------------------------------> cut here <---------------------------------
--
Bill Cheng // UCLA Computer Science Department // (213) 206-7135
3277 Boelter Hall // Los Angeles, California 90024 // USA
william at CS.UCLA.EDU ...!{uunet|ucbvax}!cs.ucla.edu!william
More information about the Comp.sources.x
mailing list