william@CS.UCLA.EDU (William Cheng) (03/11/91)
Submitted-by: william@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@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@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@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@CS.UCLA.EDU ...!{uunet|ucbvax}!cs.ucla.edu!william