william@CS.UCLA.EDU (William Cheng) (03/11/91)
Submitted-by: william@CS.UCLA.EDU (William Cheng) Posting-number: Volume 12, Issue 18 Archive-name: tgif/part02 ---------------------------------> 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 2 (of 23)." # Contents: box.c button.c choice.c color.c copypaste.c cursor.c # dialog.c # Wrapped by william@oahu on Wed Mar 6 09:56:59 1991 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'box.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'box.c'\" else echo shar: Extracting \"'box.c'\" \(13586 characters\) sed "s/^X//" >'box.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/box.c,v 2.0 91/03/05 12:46:45 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 "color.e" X#include "cursor.e" X#include "file.e" X#include "grid.e" X#include "obj.e" X#include "pattern.e" X#include "poly.e" X#include "raster.e" X#include "ruler.e" X#include "setup.e" X Xint boxDrawn = FALSE; X Xstatic XPoint bv[5]; X Xvoid MyBox (window, gc, x1, y1, x2, y2) X /* Hollow box, solid outline with width=1 */ X Window window; X GC gc; X int x1, y1, x2, y2; X{ X bv[0].x = (short)x1; bv[0].y = (short)y1; X bv[1].x = (short)x1; bv[1].y = (short)y2; X bv[2].x = (short)x2; bv[2].y = (short)y2; X bv[3].x = (short)x2; bv[3].y = (short)y1; X bv[4].x = (short)x1; bv[4].y = (short)y1; X XDrawLines (mainDisplay, window, gc, bv, 5, CoordModeOrigin); X} X Xvoid DumpBoxObj (FP, ObjPtr) X FILE * FP; X struct ObjRec * ObjPtr; X{ X register int ltx, lty, rbx, rby, i; X int fill, width, pen, dash, color_index; X X ltx = ObjPtr->obbox.ltx; X lty = ObjPtr->obbox.lty; X rbx = ObjPtr->obbox.rbx; X rby = ObjPtr->obbox.rby; X X fill = ObjPtr->detail.b->fill; X pen = ObjPtr->detail.b->pen; X width = ObjPtr->detail.b->width; X dash = ObjPtr->detail.b->dash; X X if (fill == NONEPAT && pen == NONEPAT) return; X X color_index = ObjPtr->color; X if (colorDump) X fprintf (FP, "%.3f %.3f %.3f setrgbcolor\n", X ((float)tgifColors[color_index].red/maxRGB), X ((float)tgifColors[color_index].green/maxRGB), X ((float)tgifColors[color_index].blue/maxRGB)); X X switch (fill) X { X case NONEPAT: break; X case SOLIDPAT: X /* solid black object */ X fprintf (FP, "newpath\n %1d %1d moveto\n", ltx, lty); X fprintf (FP, " %1d %1d lineto\n", rbx, lty); X fprintf (FP, " %1d %1d lineto\n", rbx, rby); X fprintf (FP, " %1d %1d lineto\n", ltx, rby); X fprintf (FP, "closepath fill\n"); X break; X case BACKPAT: X /* solid white object */ X fprintf (FP, "newpath\n %1d %1d moveto\n", ltx, lty); X fprintf (FP, " %1d %1d lineto\n", rbx, lty); X fprintf (FP, " %1d %1d lineto\n", rbx, rby); X fprintf (FP, " %1d %1d lineto\n", ltx, rby); X fprintf (FP, "closepath 1 setgray fill\n"); X if (colorDump) X fprintf (FP, "%.3f %.3f %.3f setrgbcolor\n", X ((float)tgifColors[color_index].red/maxRGB), X ((float)tgifColors[color_index].green/maxRGB), X ((float)tgifColors[color_index].blue/maxRGB)); X else X fprintf (FP, "0 setgray\n"); X break; X default: X /* patterned */ X fprintf (FP, "gsave\n"); X if (!colorDump) X fprintf (FP, " pat%1d 8 1 0 72 300 32 div div setpattern\n", X fill); X fprintf (FP, " newpath\n %1d %1d moveto\n", ltx, lty); X fprintf (FP, " %1d %1d lineto\n", rbx, lty); X fprintf (FP, " %1d %1d lineto\n", rbx, rby); X fprintf (FP, " %1d %1d lineto\n", ltx, rby); X if (colorDump) X { X fprintf (FP, " closepath eoclip\n"); X DumpPatFill (FP, fill, 8, ObjPtr->bbox, " "); X } X else X fprintf (FP, " closepath fill\n"); X fprintf (FP, "grestore\n"); X break; X } X X fprintf (FP, "%1d setlinewidth\n", widthOfLine[width]); X if (dash != 0) X { X fprintf (FP, "["); X for (i = 0; i < dashListLength[dash]-1; i++) X fprintf (FP, "%1d ", (int)(dashList[dash][i])); X fprintf (FP, "%1d] 0 setdash\n", X (int)(dashList[dash][dashListLength[dash]-1])); X } X X switch (pen) X { X case NONEPAT: break; X case SOLIDPAT: X /* solid black object */ X fprintf (FP, "newpath\n %1d %1d moveto\n", ltx, lty); X fprintf (FP, " %1d %1d lineto\n", rbx, lty); X fprintf (FP, " %1d %1d lineto\n", rbx, rby); X fprintf (FP, " %1d %1d lineto\n", ltx, rby); X fprintf (FP, "closepath stroke\n"); X break; X case BACKPAT: X /* solid white object */ X fprintf (FP, "newpath\n %1d %1d moveto\n", ltx, lty); X fprintf (FP, " %1d %1d lineto\n", rbx, lty); X fprintf (FP, " %1d %1d lineto\n", rbx, rby); X fprintf (FP, " %1d %1d lineto\n", ltx, rby); X fprintf (FP, "closepath 1 setgray stroke 0 setgray\n"); X break; X default: X /* patterned */ X fprintf (FP, "gsave\n"); X if (!colorDump) X fprintf (FP, " pat%1d 8 1 0 72 300 32 div div setpattern\n", pen); X fprintf (FP, " newpath\n %1d %1d moveto\n", ltx, lty); X fprintf (FP, " %1d %1d lineto\n", rbx, lty); X fprintf (FP, " %1d %1d lineto\n", rbx, rby); X fprintf (FP, " %1d %1d lineto\n", ltx, rby); X if (colorDump) X { X fprintf (FP, " closepath strokepath clip\n"); X DumpPatFill (FP, pen, 8, ObjPtr->bbox, " "); X } X else X fprintf (FP, " closepath stroke\n"); X fprintf (FP, "grestore\n"); X break; X } X if (dash != 0) fprintf (FP, "[] 0 setdash\n"); X fprintf (FP, "1 setlinewidth\n\n"); X} X Xvoid DrawBoxObj (win, XOff, YOff, ObjPtr) X Window win; X struct ObjRec * ObjPtr; X{ X struct BoxRec * box_ptr = ObjPtr->detail.b; X int fill, pen, pixel, func, ltx, lty, rbx, rby, width, dash; X int real_x_off, real_y_off; X XGCValues values; X X pen = box_ptr->pen; X fill = box_ptr->fill; X width = box_ptr->width; X dash = box_ptr->dash; X pixel = colorPixels[ObjPtr->color]; X X if (fill == 0 && pen == 0) return; X X real_x_off = (XOff >> zoomScale) << zoomScale; X real_y_off = (YOff >> zoomScale) << zoomScale; X ltx = (ObjPtr->obbox.ltx - real_x_off) >> zoomScale; X lty = (ObjPtr->obbox.lty - real_y_off) >> zoomScale; X rbx = (ObjPtr->obbox.rbx - real_x_off) >> zoomScale; X rby = (ObjPtr->obbox.rby - real_y_off) >> zoomScale; X func = GXcopy; X X if (fill != 0) X { X values.foreground = (fill == 2) ? myBgPixel : pixel; X values.function = GXcopy; X values.fill_style = FillOpaqueStippled; X values.stipple = patPixmap[fill]; X XChangeGC (mainDisplay, drawGC, X GCForeground | GCFunction | GCFillStyle | GCStipple, &values); X XFillRectangle (mainDisplay, win, drawGC, ltx, lty, rbx-ltx, rby-lty); X } X X if (pen != 0) X { X values.foreground = (pen == 2) ? myBgPixel : pixel; X values.function = GXcopy; X values.fill_style = FillOpaqueStippled; X values.stipple = patPixmap[pen]; X values.line_width = widthOfLine[width] >> zoomScale; X if (dash != 0) X { X XSetDashes (mainDisplay, drawGC, 0, dashList[dash], X dashListLength[dash]); X values.line_style = LineOnOffDash; X } X else X values.line_style = LineSolid; X XChangeGC (mainDisplay, drawGC, X GCForeground | GCFunction | GCFillStyle | GCStipple | GCLineWidth | X GCLineStyle, &values); X XDrawRectangle (mainDisplay, win, drawGC, ltx, lty, rbx-ltx, rby-lty); X } X} X Xstatic Xvoid CreateBoxObj (X1, Y1, X2, Y2) X int X1, Y1, X2, Y2; X{ X struct BoxRec * box_ptr; X struct ObjRec * obj_ptr; X int w, ltx, lty, rbx, rby; X X box_ptr = (struct BoxRec *) calloc (1, sizeof(struct BoxRec)); X box_ptr->fill = objFill; X box_ptr->width = lineWidth; X box_ptr->pen = penPat; X box_ptr->dash = curDash; X X obj_ptr = (struct ObjRec *) calloc (1, sizeof(struct ObjRec)); X X if (X1 < X2) X if (Y1 < Y2) X { X ltx = X1; lty = Y1; rbx = X2; rby = Y2; X } X else X { X ltx = X1; lty = Y2; rbx = X2; rby = Y1; X } X else X if (Y1 < Y2) X { X ltx = X2; lty = Y1; rbx = X1; rby = Y2; X } X else X { X ltx = X2; lty = Y2; rbx = X1; rby = Y1; X } X X obj_ptr->bbox.ltx = obj_ptr->obbox.ltx = obj_ptr->x = (ltx << zoomScale) + X drawOrigX; X obj_ptr->bbox.lty = obj_ptr->obbox.lty = obj_ptr->y = (lty << zoomScale) + X drawOrigY; X obj_ptr->bbox.rbx = obj_ptr->obbox.rbx = (rbx << zoomScale) + drawOrigX; X obj_ptr->bbox.rby = obj_ptr->obbox.rby = (rby << zoomScale) + drawOrigY; X w = widthOfLine[lineWidth]; X obj_ptr->bbox.ltx -= w; X obj_ptr->bbox.lty -= w; X obj_ptr->bbox.rbx += w; X obj_ptr->bbox.rby += w; X obj_ptr->type = OBJ_BOX; X obj_ptr->color = colorIndex; X obj_ptr->id = objId++; X obj_ptr->dirty = FALSE; X obj_ptr->detail.b = box_ptr; X obj_ptr->fattr = obj_ptr->lattr = NULL; X AddObj (NULL, topObj, obj_ptr); X} X Xstatic Xvoid ContinueBox (OrigX, OrigY) X int OrigX, OrigY; X{ X int end_x, end_y, grid_x, grid_y, saved_x, saved_y; X int done = FALSE; X int pixel, xor_pixel; X XGCValues values; X XEvent input; X XMotionEvent * motion_ev; X X pixel = colorPixels[colorIndex]; X xor_pixel = xorColorPixels[colorIndex]; X X values.foreground = xor_pixel; X values.function = GXxor; X values.fill_style = FillSolid; X values.line_width = 0; X values.line_style = LineSolid; X X XChangeGC (mainDisplay, drawGC, X GCForeground | GCFunction | GCFillStyle | GCLineWidth | GCLineStyle, X &values); X X saved_x = grid_x = OrigX; X saved_y = grid_y = OrigY; X XGrabPointer (mainDisplay, drawWindow, FALSE, X PointerMotionMask | ButtonReleaseMask, X GrabModeAsync, GrabModeAsync, None, handCursor, CurrentTime); X X while (!done) X { X XNextEvent (mainDisplay, &input); X if (input.type == ButtonRelease) X { X XUngrabPointer (mainDisplay, CurrentTime); X MyBox (drawWindow, drawGC, OrigX, OrigY, saved_x, saved_y); X done = TRUE; X } X else if (input.type == MotionNotify) X { X motion_ev = &(input.xmotion); X end_x = motion_ev->x; X end_y = motion_ev->y; X GridXY (end_x, end_y, &grid_x, &grid_y); X if (grid_x != saved_x || grid_y != saved_y) X { X MyBox (drawWindow, drawGC, OrigX, OrigY, saved_x, saved_y); X saved_x = grid_x; X saved_y = grid_y; X MyBox (drawWindow, drawGC, OrigX, OrigY, saved_x, saved_y); X } X MarkRulers (grid_x, grid_y); X } X } X if (OrigX != grid_x && OrigY != grid_y) X { X CreateBoxObj (OrigX, OrigY, grid_x, grid_y); X DrawBoxObj (drawWindow, drawOrigX, drawOrigY, topObj); X boxDrawn = TRUE; X SetFileModified (TRUE); X } X} X Xvoid DrawBox (input) X XEvent * input; X{ X XButtonEvent * button_ev; X int mouse_x, mouse_y, grid_x, grid_y; X X if (input->type != ButtonPress) return; X X button_ev = &(input->xbutton); X if (button_ev->button == Button1) X { X mouse_x = button_ev->x; X mouse_y = button_ev->y; X GridXY (mouse_x, mouse_y, &grid_x, &grid_y); X ContinueBox (grid_x, grid_y); X } X} X Xvoid SaveBoxObj (FP, ObjPtr) X FILE * FP; X struct ObjRec * ObjPtr; X{ X fprintf (FP, "box('%s',", colorMenuItems[ObjPtr->color]); X fprintf (FP, "%1d,%1d,%1d,%1d,%1d,%1d,%1d,%1d,%1d,", ObjPtr->obbox.ltx, X ObjPtr->obbox.lty, ObjPtr->obbox.rbx, ObjPtr->obbox.rby, X ObjPtr->detail.b->fill, ObjPtr->detail.b->width, X ObjPtr->detail.b->pen, ObjPtr->id, ObjPtr->detail.b->dash); X SaveAttrs (FP, ObjPtr->lattr); X fprintf (FP, ")"); X} X Xvoid ReadBoxObj (Inbuf, ObjPtr) X char * Inbuf; X struct ObjRec * * ObjPtr; X{ X struct BoxRec * box_ptr; X char color_str[20], * s; X int ltx, lty, rbx, rby, fill, width, pen, dash, w; X X *ObjPtr = (struct ObjRec *) calloc (1, sizeof(struct ObjRec)); X s = FindChar ('(', Inbuf); X s = ParseStr (s, ',', color_str); X box_ptr = (struct BoxRec *) calloc (1, sizeof(struct BoxRec)); X X if (fileVersion <= 5) X { X sscanf (s, "%d , %d , %d , %d , %d , %d , %d", X <x, <y, &rbx, &rby, &fill, &width, &pen); X switch (width) X { X case 1: width = 3; break; X case 2: width = 6; break; X } X (*ObjPtr)->id = objId++; X dash = 0; X } X else if (fileVersion <= 7) X { X sscanf (s, "%d , %d , %d , %d , %d , %d , %d", X <x, <y, &rbx, &rby, &fill, &width, &pen); X (*ObjPtr)->id = objId++; X dash = 0; X } X else if (fileVersion <= 8) X { X sscanf (s, "%d , %d , %d , %d , %d , %d , %d , %d", X <x, <y, &rbx, &rby, &fill, &width, &pen, &((*ObjPtr)->id)); X if ((*ObjPtr)->id >= objId) objId = (*ObjPtr)->id + 1; X dash = 0; X } X else X { X sscanf (s, "%d , %d , %d , %d , %d , %d , %d , %d , %d", X <x, <y, &rbx, &rby, &fill, &width, &pen, &((*ObjPtr)->id), X &dash); X if ((*ObjPtr)->id >= objId) objId = (*ObjPtr)->id + 1; X } X X box_ptr->fill = fill; X box_ptr->width = width; X box_ptr->pen = pen; X box_ptr->dash = dash; X (*ObjPtr)->x = ltx; X (*ObjPtr)->y = lty; X (*ObjPtr)->color = FindColorIndex (color_str); X (*ObjPtr)->dirty = FALSE; X (*ObjPtr)->type = OBJ_BOX; X (*ObjPtr)->obbox.ltx = ltx; X (*ObjPtr)->obbox.lty = lty; X (*ObjPtr)->obbox.rbx = rbx; X (*ObjPtr)->obbox.rby = rby; X w = widthOfLine[width]; X (*ObjPtr)->bbox.ltx = ltx - w; X (*ObjPtr)->bbox.lty = lty - w; X (*ObjPtr)->bbox.rbx = rbx + w; X (*ObjPtr)->bbox.rby = rby + w; X (*ObjPtr)->detail.b = box_ptr; X} X Xvoid FreeBoxObj (ObjPtr) X struct ObjRec * ObjPtr; X{ X cfree (ObjPtr->detail.b); X cfree (ObjPtr); X} END_OF_FILE if test 13586 -ne `wc -c <'box.c'`; then echo shar: \"'box.c'\" unpacked with wrong size! fi # end of 'box.c' fi if test -f 'button.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'button.c'\" else echo shar: Extracting \"'button.c'\" \(6011 characters\) sed "s/^X//" >'button.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/button.c,v 2.0 91/03/05 12:46:48 william Exp $"; X#endif X X#include <stdio.h> X#include <X11/Xlib.h> X#include <X11/Xutil.h> X#include "const.h" X#include "types.h" X X#include "box.e" X#include "cursor.e" X#include "font.e" X#include "mainloop.e" X#include "raster.e" X#include "rect.e" X#include "setup.e" X Xint ButtonWidth(Str, Len) X char * Str; X{ X return (defaultFontWidth * max(strlen (Str) + 2, Len)); X} X Xvoid DisplayButton (Win, Str, Len, BBox, Normal) X Window Win; X char * Str; X struct BBRec * BBox; X short Normal; X int Len; X /* display a button in Win at location ((*BBox).ltx,(*BBox).lty), Str is */ X /* centered in the button. The width of the button is the width of */ X /* Str + 2 character widths or the width of Len number of characters, */ X /* whichever is bigger. *BBox will be set with the bounding */ X /* box of the button. */ X{ X int button_w, button_h, len_of_str, left; X X len_of_str = strlen (Str); X button_w = defaultFontWidth * max(len_of_str+2,Len); X left = (button_w - defaultFontWidth * len_of_str) / 2; X button_h = defaultFontHeight + 4; X (*BBox).rbx = (*BBox).ltx + button_w - 1; X (*BBox).rby = (*BBox).lty + button_h - 1; X X if (Normal) X { X XDrawRectangle (mainDisplay, Win, defaultGC, (*BBox).ltx, (*BBox).lty, X button_w, button_h); X XDrawString (mainDisplay, Win, defaultGC, (*BBox).ltx+left, X (*BBox).lty+defaultFontAsc+2, Str, len_of_str); X } X else X { X XFillRectangle (mainDisplay, Win, revDefaultGC, (*BBox).ltx, (*BBox).lty, X button_w, button_h); X } X} X Xstatic char * confirmStr[] = { "YES", "NO", "CANCEL" }; X Xint YesNoCancel (Str) X char * Str; X /* Create a window with Str centered. This window also has 3 buttons */ X /* in it, labeled YES, NO, and CANCEL. The window has an origin at */ X /* (100,100) relative to the origin of RootWindow. */ X{ X int w, h, str_start, button_start, top; X int str_width, button_widths, dsp_w, dsp_h; X Window confirm_win; X struct BBRec button_bbox[MAX_CONFIRMS]; X XEvent input; X XButtonEvent * button_ev; X XKeyEvent * key_ev; X int i, confirming = TRUE, choice = CONFIRM_YES; X int win_x, win_y; X char buf[80]; X KeySym key_sym; X XComposeStatus c_stat; X XSetWindowAttributes win_attrs; X X top = defaultFontAsc+2; X X button_widths = ButtonWidth("YES", 8) + ButtonWidth("NO", 8) + X ButtonWidth("CANCEL", 8) + 2 * defaultFontWidth; X str_width = defaultFontWidth * strlen (Str); X X if (str_width > button_widths) X { X w = str_width + 4 * defaultFontWidth; X str_start = 2 * defaultFontWidth; X button_start = (w - button_widths) / 2; X } X else X { X w = button_widths + 4 * defaultFontWidth; X str_start = (w - str_width) / 2; X button_start = 2 * defaultFontWidth; X } X X h = 5 * defaultFontHeight; X X dsp_w = DisplayWidth (mainDisplay, mainScreen); X dsp_h = DisplayHeight (mainDisplay, mainScreen); X X win_x = (w > dsp_w) ? 0 : (dsp_w - w)/2; X win_y = (h > dsp_h) ? 0 : (dsp_h - h)/3; X X if ((confirm_win = XCreateSimpleWindow (mainDisplay, rootWindow, X win_x, win_y, w, h, brdrW, myBorderPixel, myBgPixel)) == 0) X { printf ("Could not create yes-no-okay window!\n"); exit (-1); } X X win_attrs.save_under = True; X XChangeWindowAttributes (mainDisplay, confirm_win, CWSaveUnder, &win_attrs); X X XSetTransientForHint (mainDisplay, confirm_win, mainWindow); X XMapWindow (mainDisplay, confirm_win); X XSelectInput (mainDisplay, confirm_win, X KeyPressMask | ButtonPressMask | ExposureMask); X X while (confirming) X { X XNextEvent (mainDisplay, &input); X if (input.type == Expose) X { X XDrawRectangle (mainDisplay, confirm_win, defaultGC, 0, 0, w-1, h-1); X XDrawString (mainDisplay, confirm_win, defaultGC, str_start, X defaultFontHeight+top, Str, strlen(Str)); X X button_bbox[0].lty = button_bbox[1].lty = button_bbox[2].lty = X 3 * defaultFontHeight; X button_bbox[CONFIRM_YES].ltx = button_start; X DisplayButton (confirm_win, "YES", 8, &button_bbox[CONFIRM_YES], X BUTTON_NORMAL); X button_bbox[CONFIRM_NO].ltx = X button_bbox[CONFIRM_YES].rbx + 1 + defaultFontWidth; X DisplayButton (confirm_win, "NO", 8, &button_bbox[CONFIRM_NO], X BUTTON_NORMAL); X button_bbox[CONFIRM_CANCEL].ltx = X button_bbox[CONFIRM_NO].rbx + 1 + defaultFontWidth; X DisplayButton (confirm_win, "CANCEL", 8, &button_bbox[CONFIRM_CANCEL], X BUTTON_NORMAL); X X continue; X } X else if (input.type == KeyPress) X { X key_ev = &(input.xkey); X XLookupString (key_ev, buf, 80, &key_sym, &c_stat); X X if (buf[0] == 'c' || buf[0] == 'C' || buf[0] == '\033') X { X confirming = FALSE; X choice = CONFIRM_CANCEL; X } X else if (buf[0]=='y' || buf[0]=='Y' || buf[0]=='\r' || buf[0]=='\n') X { X confirming = FALSE; X choice = CONFIRM_YES; X } X else if (buf[0] == 'n' || buf[0] == 'N') X { X confirming = FALSE; X choice = CONFIRM_NO; X } X } X else if (input.type == ButtonPress) X { X button_ev = &(input.xbutton); X for (i = 0; i < MAX_CONFIRMS; i++) X if (PointInBBox (button_ev->x, button_ev->y, button_bbox[i])) X { X confirming = FALSE; X choice = i; X } X } X } X X DisplayButton (confirm_win, confirmStr[choice], 8, &button_bbox[choice], X BUTTON_INVERT); X X XDestroyWindow (mainDisplay, confirm_win); X XSync (mainDisplay, FALSE); X while (XCheckMaskEvent (mainDisplay, ExposureMask, &input)) ; X return (choice); X} END_OF_FILE if test 6011 -ne `wc -c <'button.c'`; then echo shar: \"'button.c'\" unpacked with wrong size! fi # end of 'button.c' fi if test -f 'choice.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'choice.c'\" else echo shar: Extracting \"'choice.c'\" \(15091 characters\) sed "s/^X//" >'choice.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/choice.c,v 2.0 91/03/05 12:46:49 william Exp $"; X#endif X X#include <X11/Xlib.h> X#include "const.h" X#include "types.h" X X#include "align.e" X#include "arc.e" X#include "box.e" X#include "color.e" X#include "cursor.e" X#include "font.e" X#include "grid.e" X#include "mark.e" X#include "msg.e" X#include "oval.e" X#include "pattern.e" X#include "poly.e" X#include "polygon.e" X#include "raster.e" X#include "rcbox.e" X#include "select.e" X#include "setup.e" X#include "text.e" X Xint curChoice = NOTHING; X Xstatic GC choiceGC; Xstatic Pixmap choiceBackingPixmap; X Xvoid InitChoice () X{ X XGCValues values; X X values.foreground = 1; X values.background = 0; X values.font = defaultFontPtr->fid; X choiceGC = XCreateGC (mainDisplay, choiceWindow, X GCForeground | GCBackground | GCFont, &values); X X choiceBackingPixmap = XCreatePixmap (mainDisplay, choiceWindow, X choiceWindowW, choiceWindowH, mainDepth); X} X Xvoid CleanUpChoices () X{ X XFreeGC (mainDisplay, choiceGC); X XFreePixmap (mainDisplay, choiceBackingPixmap); X} X Xvoid ShowMode () X{ X XSetStipple (mainDisplay, rasterGC, choicePixmap[curChoice]); X XFillRectangle (mainDisplay, choiceWindow, rasterGC, 0, 0, choiceImageW, X choiceImageH); X} X Xvoid ShowWhereToPrint () X{ X if (colorDump) X XSetForeground (mainDisplay, rasterGC, colorPixels[colorIndex]); X XSetStipple (mainDisplay, rasterGC, whereToPrintPixmap[whereToPrint]); X XFillRectangle (mainDisplay, choiceWindow, rasterGC, 6*choiceImageW, 0, X choiceImageW, choiceImageH); X if (colorDump) XSetForeground (mainDisplay, rasterGC, myFgPixel); X} X Xvoid ShowColor (PropagateWhereToPrint) X int PropagateWhereToPrint; X{ X XGCValues values; X X if (colorDisplay) X { X values.foreground = colorPixels[colorIndex]; X values.function = GXcopy; X values.fill_style = FillOpaqueStippled; X values.stipple = patPixmap[1]; X XChangeGC (mainDisplay, patGC, X GCForeground | GCFunction | GCFillStyle | GCStipple, &values); X X XFillRectangle (mainDisplay, choiceWindow, patGC, X 0, choiceImageH, choiceImageW, choiceImageH); X } X if (PropagateWhereToPrint) ShowWhereToPrint (); X} X Xvoid ShowHoriAlign () X{ X XSetStipple (mainDisplay, rasterGC, alignHoriPixmap[horiAlign]); X XFillRectangle (mainDisplay, choiceWindow, rasterGC, choiceImageW, 0, X choiceImageW, choiceImageH); X} X Xvoid ShowVertAlign () X{ X XSetStipple (mainDisplay, rasterGC, alignVertPixmap[vertAlign]); X XFillRectangle (mainDisplay, choiceWindow, rasterGC, choiceImageW, X choiceImageH, choiceImageW, choiceImageH); X} X Xvoid ShowJust () X{ X XSetStipple (mainDisplay, rasterGC, justPixmap[textJust]); X XFillRectangle (mainDisplay, choiceWindow, rasterGC, 2*choiceImageW, 0, X choiceImageW, choiceImageH); X} X Xvoid ShowCurFont () X{ X int x, y, w, h; X XRectangle recs[1]; X XGCValues values; X X recs[0].x = 2*choiceImageW; X recs[0].y = choiceImageH; X recs[0].width = choiceImageW; X recs[0].height = choiceImageH; X X w = XTextWidth (canvasFontPtr, "W", 1); X h = canvasFontHeight; X X x = (w > choiceImageW) ? X 2*choiceImageW - (w-choiceImageW)/2 : X 2*choiceImageW + (choiceImageW-w)/2; X y = (h > choiceImageH) ? X choiceImageH + (canvasFontAsc-(h-choiceImageH)/2) : X choiceImageH + (canvasFontAsc+(choiceImageH-h)/2); X X XClearArea (mainDisplay, choiceWindow, 2*choiceImageW, choiceImageH, X choiceImageW, choiceImageH, FALSE); X X XSetFont (mainDisplay, choiceGC, canvasFontPtr->fid); X XSetClipRectangles (mainDisplay, choiceGC, 0, 0, recs, 1, YXBanded); X X values.foreground = myFgPixel; X values.background = myBgPixel; X XChangeGC (mainDisplay, choiceGC, GCForeground | GCBackground, &values); X X XDrawString (mainDisplay, choiceWindow, choiceGC, x, y, "W", 1); X X values.foreground = 1; X values.background = 0; X XChangeGC (mainDisplay, choiceGC, GCForeground | GCBackground, &values); X X recs[0].x = 0; X recs[0].y = 0; X recs[0].width = choiceWindowW; X recs[0].height = choiceWindowH; X XSetClipRectangles (mainDisplay, choiceGC, 0, 0, recs, 1, YXBanded); X} X Xvoid ShowRotate () X{ X XSetStipple (mainDisplay, rasterGC, rotatePixmap[curRotate]); X XFillRectangle (mainDisplay, choiceWindow, rasterGC, 3*choiceImageW, 0, X choiceImageW, choiceImageH); X} X Xvoid ShowSpecial () X{ X XSetStipple (mainDisplay, rasterGC, specialPixmap); X XFillRectangle (mainDisplay, choiceWindow, rasterGC, 3*choiceImageW, X choiceImageH, choiceImageW, choiceImageH); X} X Xvoid ShowLineWidth () X{ X XSetStipple (mainDisplay, rasterGC, shortLineWidthPixmap[lineWidth]); X XFillRectangle (mainDisplay, choiceWindow, rasterGC, 4*choiceImageW, 0, X choiceImageW, choiceImageH); X} X Xvoid ShowLineStyle () X{ X XSetStipple (mainDisplay, rasterGC, shortLineStylePixmap[lineStyle]); X XFillRectangle (mainDisplay, choiceWindow, rasterGC, 4*choiceImageW, X choiceImageH, choiceImageW, choiceImageH); X} X Xvoid ShowLineType () X{ X XSetStipple (mainDisplay, rasterGC, shortLineTypePixmap[curSpline]); X XFillRectangle (mainDisplay, choiceWindow, rasterGC, 5*choiceImageW, 0, X choiceImageW, choiceImageH); X} X Xvoid ShowDash () X{ X XSetStipple (mainDisplay, rasterGC, shortDashPixmap[curDash]); X XFillRectangle (mainDisplay, choiceWindow, rasterGC, 5*choiceImageW, X choiceImageH, choiceImageW, choiceImageH); X} X Xvoid ShowFile () X{ X XSetStipple (mainDisplay, rasterGC, filePixmap); X XFillRectangle (mainDisplay, choiceWindow, rasterGC, 6*choiceImageW, X choiceImageH, choiceImageW, choiceImageH); X} X Xvoid ShowFill () X{ X XGCValues values; X X values.foreground = myFgPixel; X values.background = myBgPixel; X values.function = GXcopy; X values.fill_style = FillOpaqueStippled; X values.stipple = patPixmap[objFill]; X XChangeGC (mainDisplay, patGC, X GCForeground | GCBackground | GCFunction | GCFillStyle | GCStipple, X &values); X X XFillRectangle (mainDisplay, choiceWindow, patGC, X 7*choiceImageW, 0, choiceImageW, choiceImageH); X} X Xvoid ShowPen () X{ X XGCValues values; X X values.foreground = myFgPixel; X values.background = myBgPixel; X values.function = GXcopy; X values.fill_style = FillOpaqueStippled; X values.stipple = patPixmap[penPat]; X XChangeGC (mainDisplay, patGC, X GCForeground | GCBackground | GCFunction | GCFillStyle | GCStipple, X &values); X X XFillRectangle (mainDisplay, choiceWindow, patGC, X 7*choiceImageW, choiceImageH, choiceImageW, choiceImageH); X} X Xvoid SetCurChoice (NewChoice) X int NewChoice; X{ X if (curChoice == NewChoice) return; X X switch (curChoice) X { X case NOTHING: X if (topSel != NULL) X { X HighLightReverse (); X RemoveAllSel (); X } X break; X case DRAWTEXT: X CreateTextObj (); X if (NewChoice == NOTHING && textDrawn) HighLightJustDrawnText (); X textDrawn = FALSE; X SetDefaultCursor (drawWindow); X textCursorShown = FALSE; X break; X case DRAWBOX: X if (NewChoice == NOTHING && boxDrawn) SelectTopObj (); X boxDrawn = FALSE; X break; X case DRAWCIRCLE: X if (NewChoice == NOTHING && ovalDrawn) SelectTopObj (); X ovalDrawn = FALSE; X break; X case DRAWPOLY: X if (NewChoice == NOTHING && polyDrawn) SelectTopObj (); X polyDrawn = FALSE; X break; X case DRAWPOLYGON: X if (NewChoice == NOTHING && polygonDrawn) SelectTopObj (); X polygonDrawn = FALSE; X break; X case DRAWARC: X if (NewChoice == NOTHING && arcDrawn) SelectTopObj (); X arcDrawn = FALSE; X break; X case DRAWRCBOX: X if (NewChoice == NOTHING && rcBoxDrawn) SelectTopObj (); X rcBoxDrawn = FALSE; X break; X } X X curChoice = NewChoice; X X if (curChoice == DRAWTEXT) X { X SetTextCursor (drawWindow); X textCursorShown = FALSE; X } X X ShowMode (); X} X Xvoid ChoiceEventHandler (input) X XEvent * input; X{ X XEvent ev; X XButtonEvent * button_ev; X int xindex, yindex, delta = 0, root_x, root_y, x = 0, y = 0; X Window root_win, child_win; X unsigned int status; X X if (input->type == Expose) X { X XSync (mainDisplay, FALSE); X while (XCheckWindowEvent (mainDisplay, choiceWindow, ExposureMask, &ev)) ; X RedrawChoiceWindow (); X } X else if (input->type == ButtonPress) X { X button_ev = &(input->xbutton); X switch (button_ev->button) X { X case Button1: delta = 1; break; X case Button2: X XQueryPointer (mainDisplay, rootWindow, &root_win, &child_win, X &root_x, &root_y, &x, &y, &status); X break; X case Button3: delta = -1; break; X default: return; X } X xindex = (int)(button_ev->x / choiceImageW); X yindex = (int)(button_ev->y / choiceImageH); X switch (xindex) X { X case 0: X if (yindex == 0) X { X if (delta == 0) X ModeMenu (x, y); X else X SetCurChoice ((curChoice+MAXCHOICES+delta) % MAXCHOICES); X } X else if (colorDisplay) X { X if (delta == 0) X ColorMenu (x, y); X else X { X if (curChoice != NOTHING) SetCurChoice (NOTHING); X colorIndex = (colorIndex+maxColors+delta) % maxColors; X ShowColor (TRUE); X if (topSel != NULL) ChangeAllSelColor (colorIndex); X } X } X break; X case 1: X if (yindex == 0) X { X if (delta == 0) X SizeMenu (x, y); X else X { X horiAlign = (horiAlign+MAXALIGNS+delta) % MAXALIGNS; X ShowHoriAlign (); X } X } X else X { X if (delta == 0) X FontDPIMenu (x, y); X else X { X vertAlign = (vertAlign+MAXALIGNS+delta) % MAXALIGNS; X ShowVertAlign (); X } X } X break; X case 2: X if (yindex == 0) X { X if (delta == 0) X StyleMenu (x, y); X else X { X if (curChoice != NOTHING) SetCurChoice (NOTHING); X textJust = (textJust+MAXJUSTS+delta) % MAXJUSTS; X ShowJust (); X if (topSel != NULL) ChangeFontJust (textJust); X } X } X else X { X if (delta == 0) X FontMenu (x, y); X else X { X if (curChoice != NOTHING) SetCurChoice (NOTHING); X curFont = (curFont+MAXFONTS+delta) % MAXFONTS; X SetCanvasFont (); X ShowCurFont (); X if (topSel != NULL) ChangeFont (curFont); X } X } X break; X case 3: X if (yindex == 0) X { X if (delta == 0) X ArrangeMenu (x, y); X else X { X if (curChoice != NOTHING) SetCurChoice (NOTHING); X curRotate = (curRotate+4+delta) % 4; X ShowRotate (); X if (topSel != NULL) X { X if (delta == 1) X RotateClockWise (); X else X RotateCounter (); X } X } X } X else X { X if (delta == 0) X SpecialMenu (x, y); X } X break; X case 4: X if (yindex == 0) X { X if (delta == 0) X LineStyleMenu (x, y); X else X { X if (curChoice != NOTHING) SetCurChoice (NOTHING); X lineWidth = (lineWidth+MAXLINEWIDTHS+delta) % MAXLINEWIDTHS; X ShowLineWidth (); X if (topSel != NULL) ChangeAllSelLineWidth (lineWidth); X } X } X else X { X if (delta == 0) X LineStyleMenu (x, y); X else X { X if (curChoice != NOTHING) SetCurChoice (NOTHING); X lineStyle = (lineStyle+MAXLINESTYLES+delta) % MAXLINESTYLES; X ShowLineStyle (); X if (topSel != NULL) ChangeAllSelLineStyle (lineStyle); X } X } X break; X case 5: X if (yindex == 0) X { X if (delta == 0) X LineStyleMenu (x, y); X else X { X if (curChoice != NOTHING) SetCurChoice (NOTHING); X curSpline = (curSpline+MAXLINETYPES+delta) % MAXLINETYPES; X ShowLineType (); X if (topSel != NULL) ChangeAllSelLineType (curSpline); X } X } X else X { X if (delta == 0) X LineStyleMenu (x, y); X else X { X if (curChoice != NOTHING) SetCurChoice (NOTHING); X curDash = (curDash+MAXDASHES+delta) % MAXDASHES; X ShowDash (); X if (topSel != NULL) ChangeAllSelDashes (curDash); X } X } X break; X case 6: X if (yindex == 0) X { X if (delta == 0) X LayoutMenu (x, y); X else X { X whereToPrint = (whereToPrint+MAXWHERETOPRINT+delta) % X MAXWHERETOPRINT-1; X ToggleWhereToPrint (); X } X } X else X { X if (delta == 0) X FileMenu (x, y); X } X break; X case 7: X if (yindex == 0) X { X if (delta == 0) X FillMenu (x, y); X else X { X if (curChoice != NOTHING) SetCurChoice (NOTHING); X objFill = (objFill+MAXPATTERNS+delta) % MAXPATTERNS; X ShowFill (); X if (topSel != NULL) ChangeAllSelFill (objFill); X } X } X else X { X if (delta == 0) X PenMenu (x, y); X else X { X if (curChoice != NOTHING) SetCurChoice (NOTHING); X penPat = (penPat+MAXPATTERNS+delta) % MAXPATTERNS; X ShowPen (); X if (topSel != NULL) ChangeAllSelPen (penPat); X } X } X break; X } X } X} END_OF_FILE if test 15091 -ne `wc -c <'choice.c'`; then echo shar: \"'choice.c'\" unpacked with wrong size! fi # end of 'choice.c' fi if test -f 'color.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'color.c'\" else echo shar: Extracting \"'color.c'\" \(12182 characters\) sed "s/^X//" >'color.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/color.c,v 2.0 91/03/05 14:17:36 william Exp $"; X#endif X X#include <X11/Xlib.h> X#include "const.h" X#include "types.h" X X#include "choice.e" X#include "mark.e" X#include "menu.e" X#include "obj.e" X#include "raster.e" X#include "select.e" X#include "setup.e" X#include "text.e" X X#define COLORSTRLEN 80 X Xint maxColors = MAXCOLORS; Xint defaultColorIndex = 4; Xint colorIndex = 0; Xint * colorPixels = NULL; Xint * xorColorPixels = NULL; Xchar myFgColorStr[COLORSTRLEN]; Xchar myBgColorStr[COLORSTRLEN]; Xchar * * colorMenuItems = NULL; XXColor * tgifColors; Xint maxRGB = 0; Xint colorDump = FALSE; X Xstatic int allocatedMaxColors = MAXCOLORS; X Xstatic char * defaultColorMenuItems[MAXCOLORS] = X{ X "magenta", "red", "green", "blue", "yellow", "pink", "cyan", "CadetBlue", X "white", "DarkSlateGray" X}; X Xvoid DefaultColorArrays (Entries, ForePixels, Valid) X int Entries, * * ForePixels, * * Valid; X{ X register int i, * fore_pixels, pixel, * valid; X X pixel = myFgPixel; X *ForePixels = fore_pixels = (int *) calloc (Entries, sizeof(int)); X *Valid = valid = (int *) calloc (Entries, sizeof(int)); X for (i = 0; i < Entries; i++) X { X *fore_pixels++ = pixel; X *valid++ = TRUE; X } X} X Xint FindColorIndex (s) X char * s; X{ X register int i; X X if (colorMenuItems == NULL) return (0); X X for (i = 0; i < maxColors; i++) X if (strcmp(s, colorMenuItems[i]) == 0) X break; X if (i == maxColors) X { X printf ("Can not find color '%s', use '%s' instead.\n", s, X colorMenuItems[defaultColorIndex]); X return (defaultColorIndex); X } X return (i); X} X Xvoid InitColor () X{ X register int i, index; X XColor color, exact_def; X char buf[80], * c_ptr, fg_color[80], bg_color[80], brdr_color[80]; X int num, color_in_x_default = FALSE; X int bg_allocated=FALSE, fg_allocated=FALSE, brdr_allocated=FALSE; X int tmp_max; X X if ((c_ptr = XGetDefault (mainDisplay, TOOL_NAME, "ReverseVideo")) != NULL) X reverseVideo = (strcmp (c_ptr, "on") == 0); X X if (colorDisplay) X { X if ((c_ptr = XGetDefault (mainDisplay, TOOL_NAME, "Foreground")) != NULL) X strcpy (fg_color, c_ptr); X else X strcpy (fg_color, "white"); X if ((c_ptr = XGetDefault (mainDisplay, TOOL_NAME, "Background")) != NULL) X strcpy (bg_color, c_ptr); X else X strcpy (bg_color, "black"); X if ((c_ptr = XGetDefault (mainDisplay, TOOL_NAME, "BorderColor")) != NULL) X strcpy (brdr_color, c_ptr); X else X strcpy (brdr_color, "white"); X X if ((c_ptr = XGetDefault (mainDisplay, TOOL_NAME, "MaxColors")) != NULL) X { X color_in_x_default = TRUE; X maxColors = atoi (c_ptr); X if ((c_ptr = XGetDefault (mainDisplay, TOOL_NAME, "DefaultColorIndex")) X != NULL) X { X num = atoi (c_ptr); X if (num < maxColors) X defaultColorIndex = num; X else X { X printf ("Warning: DefaultColorIndex >= MaxColors, "); X printf ("Use 0 for DefaultColorIndex\n"); X defaultColorIndex = 0; X } X } X else X defaultColorIndex = 0; X } X else X { X if ((c_ptr = XGetDefault (mainDisplay, TOOL_NAME, "DefaultColorIndex")) X != NULL) X { X num = atoi (c_ptr); X if (num < maxColors) defaultColorIndex = num; X } X } X } X else X { X if (reverseVideo) X { X strcpy (fg_color, "white"); X strcpy (bg_color, "black"); X strcpy (brdr_color, "white"); X } X else X { X strcpy (fg_color, "black"); X strcpy (bg_color, "white"); X strcpy (brdr_color, "black"); X } X } X X colorIndex = defaultColorIndex; X X colorPixels = (int *) calloc (maxColors, sizeof (int)); X xorColorPixels = (int *) calloc (maxColors, sizeof (int)); X colorMenuItems = (char * *) calloc (maxColors, sizeof (char *)); X X tgifColors = (XColor *) calloc (maxColors, sizeof (XColor)); X X allocatedMaxColors = maxColors; X for (i = 0; i < allocatedMaxColors; i++) X colorMenuItems[i] = (char *) calloc (COLORSTRLEN, sizeof(char)); X X if (color_in_x_default) X { X for (i = 0; i < maxColors; i++) X { X sprintf (buf, "Color%1d", i); X if ((c_ptr = XGetDefault (mainDisplay, TOOL_NAME, buf)) != NULL) X strcpy (colorMenuItems[i], c_ptr); X else X { X printf ("Could not GetDefault %s*%s\n", TOOL_NAME, buf); X exit (-1); X } X } X } X else X for (i = 0; i < maxColors; i++) X strcpy (colorMenuItems[i], defaultColorMenuItems[i]); X X if (colorDisplay) X { X index = 0; X for (i = 0; i < maxColors; i++) X { X if (!XAllocNamedColor(mainDisplay, mainColormap, colorMenuItems[i], X &color, &exact_def)) X continue; X X if (i != index) strcpy (colorMenuItems[index], colorMenuItems[i]); X X colorPixels[index] = color.pixel; X X tgifColors[index].red = color.red; X tgifColors[index].green = color.green; X tgifColors[index].blue = color.blue; X X if (strcmp (colorMenuItems[i], fg_color) == 0) X { X if (reverseVideo) X { X myBgPixel = color.pixel; X strcpy (myBgColorStr, fg_color); X } X else X { X myFgPixel = color.pixel; X strcpy (myFgColorStr, fg_color); X } X X fg_allocated = TRUE; X } X if (strcmp (colorMenuItems[i], bg_color) == 0) X { X if (reverseVideo) X { X myFgPixel = color.pixel; X strcpy (myFgColorStr, bg_color); X } X else X { X myBgPixel = color.pixel; X strcpy (myBgColorStr, bg_color); X } X X bg_allocated = TRUE; X } X if (strcmp (colorMenuItems[i], brdr_color) == 0) X { X myBorderPixel = color.pixel; X brdr_allocated = TRUE; X } X index++; X } X X maxColors = index; X X if (!fg_allocated) X { X XAllocNamedColor(mainDisplay, mainColormap, fg_color, &color, X &exact_def); X if (reverseVideo) X { X myBgPixel = color.pixel; X strcpy (myBgColorStr, fg_color); X } X else X { X myFgPixel = color.pixel; X strcpy (myFgColorStr, fg_color); X } X } X if (!bg_allocated) X { X XAllocNamedColor(mainDisplay, mainColormap, bg_color, &color, X &exact_def); X if (reverseVideo) X { X myFgPixel = color.pixel; X strcpy (myFgColorStr, bg_color); X } X else X { X myBgPixel = color.pixel; X strcpy (myBgColorStr, bg_color); X } X } X if (!brdr_allocated) X { X XAllocNamedColor(mainDisplay, mainColormap, brdr_color, &color, X &exact_def); X myBorderPixel = color.pixel; X } X X for (i = 0; i < maxColors; i++) X xorColorPixels[i] = colorPixels[i] ^ myBgPixel; X } X else X { X XAllocNamedColor(mainDisplay,mainColormap,fg_color,&color,&exact_def); X myFgPixel = color.pixel; X strcpy (myFgColorStr, fg_color); X X XAllocNamedColor(mainDisplay,mainColormap,bg_color,&color,&exact_def); X myBgPixel = color.pixel; X strcpy (myBgColorStr, bg_color); X X XAllocNamedColor(mainDisplay,mainColormap,brdr_color,&color,&exact_def); X myBorderPixel = color.pixel; X X for (i = 0; i < maxColors; i++) X { X colorPixels[i] = myFgPixel; X xorColorPixels[i] = myFgPixel ^ myBgPixel; X } X colorIndex = 0; X } X XAllocNamedColor(mainDisplay, mainColormap, "black", &color, &exact_def); X tmp_max = max(color.red,max(color.green,color.blue)); X if (tmp_max > maxRGB) maxRGB = tmp_max; X XAllocNamedColor(mainDisplay, mainColormap, "white", &color, &exact_def); X tmp_max = max(color.red,max(color.green,color.blue)); X if (tmp_max > maxRGB) maxRGB = tmp_max; X if (tmp_max == 0) X printf ("Warning: Unexpected maximum RGB intensity 0."); X} X Xstatic Xint ChangeObjColor (ObjPtr, ColorIndex) X struct ObjRec * ObjPtr; X int ColorIndex; 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 case OBJ_BOX: X case OBJ_OVAL: X case OBJ_TEXT: X case OBJ_POLYGON: X case OBJ_ARC: X case OBJ_RCBOX: X case OBJ_XBM: X if (obj_ptr->color != ColorIndex) X { X obj_ptr->color = ColorIndex; X changed = TRUE; X } X break; X X case OBJ_GROUP: X case OBJ_SYM: X case OBJ_ICON: X if (ChangeObjColor (obj_ptr->detail.r->last, ColorIndex)) X changed = TRUE; X break; X } X return (changed); X} X Xvoid ChangeAllSelColor (ColorIndex) X int ColorIndex; X{ X register struct SelRec * sel_ptr; X register struct ObjRec * obj_ptr; X int text_obj_created = FALSE, text_cursor_shown; X int changed = FALSE; X XGCValues values; X X if (topSel == NULL) X { X text_cursor_shown = textCursorShown; X text_obj_created = TieLooseEnds (); X colorIndex = ColorIndex; X ShowColor (TRUE); X if (!text_obj_created && curChoice == DRAWTEXT && text_cursor_shown) X { X NewCurText (); X RedrawCurText (); X } X else X textCursorShown = FALSE; X return; X } X X values.foreground = colorPixels[ColorIndex]; X values.function = GXcopy; X values.fill_style = FillSolid; X XChangeGC (mainDisplay, drawGC, X GCForeground | GCFunction | GCFillStyle, &values); 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 case OBJ_BOX: X case OBJ_OVAL: X case OBJ_TEXT: X case OBJ_POLYGON: X case OBJ_ARC: X case OBJ_RCBOX: X case OBJ_XBM: X if (obj_ptr->color != ColorIndex) X { X obj_ptr->color = ColorIndex; X changed = TRUE; X } X break; X X case OBJ_GROUP: X case OBJ_SYM: X case OBJ_ICON: X if (ChangeObjColor (obj_ptr->detail.r->last, ColorIndex)) X changed = TRUE; X break; X } X } X X if (changed) X { X HighLightReverse (); X SetFileModified (TRUE); X RedrawAnArea (botObj, selLtX-(1<<zoomScale), selLtY-(1<<zoomScale), X selRbX+(1<<zoomScale), selRbY+(1<<zoomScale)); X HighLightForward (); X } X} X Xvoid ColorMenu (X, Y) X int X, Y; X{ X register int i, index, * fore_colors; X Pixmap * pixmap; X int w; X X if (!colorDisplay) return; X X pixmap = (Pixmap *) calloc (maxColors, sizeof (Pixmap)); X fore_colors = (int *) calloc (maxColors, sizeof(int)); X for (i = 0; i < maxColors; i++) X { X pixmap[i] = patPixmap[1]; X fore_colors[i] = colorPixels[i]; X } X if ((maxColors % 10) == 0) X w = (int)(maxColors / 10); X else X w = (int)(maxColors / 10) + 1; X if (maxColors <= 10) X index = PxMpMenuLoop (X, Y, choiceImageW, choiceImageH, maxColors, w, X maxColors, fore_colors, pixmap, MULTICOLOR); X else X index = PxMpMenuLoop (X, Y, choiceImageW, choiceImageH, 10, w, X maxColors, fore_colors, pixmap, MULTICOLOR); X X if (index != INVALID) ChangeAllSelColor (index); X cfree (pixmap); X} X Xvoid CleanUpColors () X{ X register int i; X X cfree (colorPixels); X cfree (xorColorPixels); X for (i = 0; i < allocatedMaxColors; i++) cfree (colorMenuItems[i]); X cfree (colorMenuItems); X X maxColors = MAXCOLORS; X defaultColorIndex = 4; X colorIndex = 0; X} END_OF_FILE if test 12182 -ne `wc -c <'color.c'`; then echo shar: \"'color.c'\" unpacked with wrong size! fi # end of 'color.c' fi if test -f 'copypaste.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'copypaste.c'\" else echo shar: Extracting \"'copypaste.c'\" \(8528 characters\) sed "s/^X//" >'copypaste.c' <<'END_OF_FILE' X/* X * Author: Kou1 Ma2da (matsuda@ccs.mt.nec.co.jp) X * Modified By: 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/copypaste.c,v 2.0 91/03/05 12:46:54 william Exp $"; X#endif X X#include <sys/types.h> X#include <sys/stat.h> X#include <stdio.h> X#include <X11/Xlib.h> X#include "const.h" X#include "types.h" X X#include "choice.e" X#include "color.e" X#include "dup.e" X#include "file.e" X#include "font.e" X#include "move.e" X#include "obj.e" X#include "pattern.e" X#include "select.e" X#include "setup.e" X#include "special.e" X#include "text.e" X X#define TGIF_HEADER 0x80 X Xextern char * mktemp(); X Xstatic char * cutBuffer = NULL; X Xvoid CopyToCutBuffer () X{ X FILE * fp; X register struct SelRec * sel_ptr; X struct ObjRec * obj_ptr, * top_obj, * bot_obj; X char * tmpfile, message[MAXSTRING]; X struct stat stat; X unsigned char header = TGIF_HEADER; X X if (topSel == NULL) X { X Msg ("No object selected for the COPY operation."); X return; X } X tmpfile = mktemp ("/tmp/TgifXXXXXX"); X if ((fp = fopen (tmpfile, "w+")) == NULL) X { X sprintf (message, "Can not open %s.", tmpfile); X Msg (message); X return; X } X X write (fileno(fp), &header, 1); X X top_obj = bot_obj = NULL; X for (sel_ptr = botSel; sel_ptr != NULL; sel_ptr = sel_ptr->prev) X { X obj_ptr = DupObj (sel_ptr->obj); X X obj_ptr->prev = NULL; X obj_ptr->next = top_obj; X X if (top_obj == NULL) X bot_obj = obj_ptr; X else X top_obj->prev = obj_ptr; X top_obj = obj_ptr; X } X Save (fp, bot_obj, 0); X X fflush (fp); X if (fstat (fileno(fp), &stat) < 0) X { X fclose (fp); X unlink (tmpfile); X sprintf (message, "FSTAT error in %s. Copy aborted!", tmpfile); X Msg (message); X return; X } X X if (cutBuffer != NULL) cfree (cutBuffer); X cutBuffer = (char *) calloc (stat.st_size, sizeof(char)); X X rewind(fp); X if (read (fileno(fp), cutBuffer, stat.st_size) < stat.st_size) X { X sprintf (message, "READ error in %s. Copy aborted!", tmpfile); X Msg (message); X } X else X { X XStoreBytes (mainDisplay, cutBuffer, stat.st_size); X Msg ("Copy buffer updated."); X } X fclose (fp); X unlink (tmpfile); X} X Xstatic Xvoid PasteString (CutBuffer) X char * CutBuffer; X{ X register char * c_ptr, * dest_c_ptr; X int x, y, w, num_lines, char_count, max_len = 0; X int root_x, root_y, grid_x, grid_y; X unsigned int status; X char msg[MAXSTRING]; X struct StrRec * first_str, * last_str, *str_ptr; X struct ObjRec * obj_ptr; X struct TextRec * text_ptr; X Window root_win, child_win; X X if (*CutBuffer == '\0') { Msg ("Cut buffer is empty"); return; } X X TieLooseEnds (); X SetCurChoice (NOTHING); X if (topSel != NULL) { HighLightReverse (); RemoveAllSel (); } X X Msg ("Paste from a non-tgif tool."); X X XQueryPointer (mainDisplay, drawWindow, &root_win, &child_win, X &root_x, &root_y, &x, &y, &status); X GridXY (x, y, &grid_x, &grid_y); X X text_ptr = (struct TextRec *) calloc (1, sizeof(struct TextRec)); X text_ptr->font = curFont; X text_ptr->dpi = curFontDPI; X text_ptr->style = curStyle; X text_ptr->attr = NULL; X text_ptr->size = curSize; X text_ptr->just = textJust; X text_ptr->rotate = curRotate; X text_ptr->pen = penPat; X text_ptr->asc = canvasFontAsc; X text_ptr->des = canvasFontDes; X X first_str = last_str = NULL; X for (c_ptr = CutBuffer, num_lines = 0; *c_ptr != '\0'; num_lines++) X { X str_ptr = (struct StrRec *) calloc (1, sizeof(struct StrRec)); X X char_count = 0; X dest_c_ptr = str_ptr->s; X while (*c_ptr != '\0' && *c_ptr != '\n' && *c_ptr != '\r') X { X *dest_c_ptr++ = *c_ptr++; X if (++char_count == MAXSTRING) X { X sprintf (msg, "String length exceeds $1d. String truncated.", X MAXSTRING); X Msg (msg); X while (*c_ptr != '\0' && *c_ptr != '\n' && *c_ptr != '\r') c_ptr++; X break; X } X } X *dest_c_ptr = '\0'; X X str_ptr->prev = last_str; X str_ptr->next = NULL; X if (last_str == NULL) X first_str = str_ptr; X else X last_str->next = str_ptr; X last_str = str_ptr; X X w = XTextWidth (canvasFontPtr, str_ptr->s, strlen (str_ptr->s)); X if (w > max_len) max_len = w; X X if (*c_ptr == '\n' || *c_ptr == '\r') c_ptr++; X } X X text_ptr->lines = num_lines; X text_ptr->first = first_str; X text_ptr->last = last_str; X X obj_ptr = (struct ObjRec *) calloc (1, sizeof(struct ObjRec)); X obj_ptr->x = grid_x; X obj_ptr->y = grid_y; X obj_ptr->type = OBJ_TEXT; X obj_ptr->color = colorIndex; X obj_ptr->id = objId++;; X obj_ptr->dirty = FALSE; X obj_ptr->detail.t = text_ptr; X obj_ptr->fattr = obj_ptr->lattr = NULL; X X SetTextBBox (obj_ptr, textJust, max_len, num_lines*textCursorH, curRotate); X X AddObj (NULL, topObj, obj_ptr); X AdjObjBBox (obj_ptr); X PlaceTopObj (); X SelectTopObj (); X SetFileModified (TRUE); X justDupped = FALSE; X} X Xstatic Xvoid CreateTmpBoxObj (LtX, LtY, RbX, RbY) X int LtX, LtY, RbX, RbY; X{ X register struct BoxRec * box_ptr; X register struct ObjRec * obj_ptr; X X box_ptr = (struct BoxRec *) calloc (1, sizeof(struct BoxRec)); X box_ptr->fill = NONEPAT; X box_ptr->width = 0; X box_ptr->pen = NONEPAT; X box_ptr->dash = 0; X X obj_ptr = (struct ObjRec *) calloc (1, sizeof(struct ObjRec)); X X obj_ptr->bbox.ltx = obj_ptr->obbox.ltx = obj_ptr->x = LtX; X obj_ptr->bbox.lty = obj_ptr->obbox.lty = obj_ptr->y = LtY; X obj_ptr->bbox.rbx = obj_ptr->obbox.rbx = RbX; X obj_ptr->bbox.rby = obj_ptr->obbox.rby = RbY; X obj_ptr->type = OBJ_BOX; X obj_ptr->color = colorIndex; X obj_ptr->id = 0; X obj_ptr->dirty = FALSE; X obj_ptr->detail.b = box_ptr; X obj_ptr->fattr = obj_ptr->lattr = NULL; X AddObj (NULL, topObj, obj_ptr); X} X Xvoid PasteFromCutBuffer () X{ X FILE * fp; X int len, ltx, lty, rbx, rby, dx, dy; X char * tmpfile, * cut_buffer, message[MAXSTRING]; X unsigned char header = TGIF_HEADER; X struct ObjRec * obj_ptr, * saved_top_obj, * saved_bot_obj; X X cut_buffer = (char *) XFetchBytes (mainDisplay, &len); X if (len == 0) X { X Msg ("Cut buffer is empty"); X return; X } X if (((unsigned char)(*cut_buffer)) != header) X { X PasteString (cut_buffer); X return; X } X cut_buffer++; X len--; X X tmpfile = mktemp ("/tmp/TgifXXXXXX"); X if ((fp = fopen (tmpfile, "w+")) == NULL) X { X sprintf (message, "Can not open %s for write.", tmpfile); X Msg (message); X return; X } X if (write (fileno(fp), cut_buffer, len) < len) X { X fclose (fp); X unlink (tmpfile); X sprintf (message, "FWRITE error in writing to %s. Paste aborted!", X tmpfile); X Msg (message); X return; X } X fflush (fp); X rewind (fp); X X TieLooseEnds (); X SetCurChoice (NOTHING); X if (topSel != NULL) { HighLightReverse (); RemoveAllSel (); } X X saved_top_obj = topObj; X saved_bot_obj = botObj; X topObj = botObj = NULL; X X importingFile = TRUE; X while (ReadObj (fp, &obj_ptr, FALSE)) X if (obj_ptr != NULL) X AddObj (NULL, topObj, obj_ptr); X X fclose (fp); X importingFile = FALSE; X if (topObj != NULL) SetFileModified (TRUE); X X ltx = topObj->obbox.ltx; X lty = topObj->obbox.lty; X rbx = topObj->obbox.rbx; X rby = topObj->obbox.rby; X for (obj_ptr = topObj->next; obj_ptr != NULL; obj_ptr = obj_ptr->next) X { X if (obj_ptr->obbox.ltx < ltx) ltx = obj_ptr->obbox.ltx; X if (obj_ptr->obbox.lty < lty) lty = obj_ptr->obbox.lty; X if (obj_ptr->obbox.rbx > rbx) rbx = obj_ptr->obbox.rbx; X if (obj_ptr->obbox.rby > rby) rby = obj_ptr->obbox.rby; X } X CreateTmpBoxObj (ltx, lty, rbx, rby); X PlaceTopObj (); X dx = topObj->obbox.ltx - ltx; X dy = topObj->obbox.lty - lty; X DelObj (topObj); X for (obj_ptr = topObj; obj_ptr != NULL; obj_ptr = obj_ptr->next) X MoveObj (obj_ptr, dx, dy); X X RedrawDrawWindow (botObj); X SelAllObj (); X X if (botObj != NULL) X botObj->next = saved_top_obj; X else X topObj = saved_top_obj; X X if (saved_top_obj != NULL) X { X saved_top_obj->prev = botObj; X botObj = saved_bot_obj; X } X unlink (tmpfile); X Msg ("Objects pasted from tgif."); X} X Xvoid CleanUpCutBuffer () X{ X if (cutBuffer != NULL) X { X *cutBuffer = '\0'; X cfree (cutBuffer); X cutBuffer = NULL; X } X} END_OF_FILE if test 8528 -ne `wc -c <'copypaste.c'`; then echo shar: \"'copypaste.c'\" unpacked with wrong size! fi # end of 'copypaste.c' fi if test -f 'cursor.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'cursor.c'\" else echo shar: Extracting \"'cursor.c'\" \(3247 characters\) sed "s/^X//" >'cursor.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/cursor.c,v 2.0 91/03/05 12:46:56 william Exp $"; X#endif X X#include <X11/Xlib.h> X#include <X11/cursorfont.h> X#include "const.h" X#include "types.h" X X#include "choice.e" X#include "setup.e" X X#include "xbm/null.xbm" X#include "xbm/nullmask.xbm" X#include "xbm/text_cur_image.xbm" X XCursor nullCursor; XCursor cornerCursor; XCursor defaultCursor; XCursor handCursor; X Xstatic GC textCursorGC; Xstatic Cursor textCursor; Xstatic Pixmap textPixmap; Xstatic Pixmap nullPixmap; Xstatic Pixmap nullMaskPixmap; X Xstatic XImage * textCursorImage; X Xvoid SetTextCursor (window) X Window window; X{ X XDefineCursor (mainDisplay, window, textCursor); X} X Xvoid SetNullCursor (window) X Window window; X{ X XDefineCursor (mainDisplay, window, nullCursor); X} X Xvoid SetDefaultCursor (window) X Window window; X{ X XUndefineCursor (mainDisplay, window); X} X Xvoid ShowCursor () X{ X if (curChoice == DRAWTEXT) X SetTextCursor (drawWindow); X else X SetDefaultCursor (drawWindow); X} X Xvoid CreateCursor () X{ X XGCValues values; X XColor color; X X textPixmap = XCreateBitmapFromData (mainDisplay, mainWindow, X text_cur_image_bits, text_cur_image_width, text_cur_image_height); X X values.foreground = myFgPixel; X values.background = myBgPixel; X values.fill_style = FillOpaqueStippled; X values.stipple = textPixmap; X textCursorGC = XCreateGC (mainDisplay, mainWindow, X GCForeground | GCBackground | GCFillStyle | GCStipple, &values); X X textCursorImage = XCreateImage (mainDisplay, mainVisual, 1, XYBitmap, 0, X text_cur_image_bits, text_cur_image_width, text_cur_image_height, 8, X 2); X textCursorImage->byte_order = LSBFirst; X textCursorImage->bitmap_bit_order = LSBFirst; X textCursorImage->data = text_cur_image_bits; X X textCursor = XCreateFontCursor (mainDisplay, XC_xterm); X cornerCursor = XCreateFontCursor (mainDisplay, XC_ul_angle); X defaultCursor = XCreateFontCursor (mainDisplay, XC_arrow); X handCursor = XCreateFontCursor (mainDisplay, XC_hand2); X X nullPixmap = XCreatePixmap (mainDisplay, mainWindow, null_width, X null_height, 1); X nullMaskPixmap = XCreatePixmap (mainDisplay, mainWindow, nullmask_width, X nullmask_height, 1); X nullCursor = XCreatePixmapCursor (mainDisplay, nullPixmap, nullMaskPixmap, X &color, &color, 0, 0); X} X Xvoid PutCursor (window, x, y, foreground) X Window window; X int x, y, foreground; X{ X XSetForeground (mainDisplay, textCursorGC, foreground); X XPutImage (mainDisplay, window, textCursorGC, textCursorImage, 0, 0, x, y, X text_cur_image_width, text_cur_image_height); X} X Xvoid CleanUpCursors () X{ X XFreePixmap (mainDisplay, textPixmap); X XFreeGC (mainDisplay, textCursorGC); X/* XDestroyImage (textCursorImage); */ X X XFreeCursor (mainDisplay, textCursor); X XFreeCursor (mainDisplay, cornerCursor); X XFreeCursor (mainDisplay, defaultCursor); X XFreeCursor (mainDisplay, handCursor); X X XFreePixmap (mainDisplay, nullPixmap); X XFreePixmap (mainDisplay, nullMaskPixmap); X XFreeCursor (mainDisplay, nullCursor); X} END_OF_FILE if test 3247 -ne `wc -c <'cursor.c'`; then echo shar: \"'cursor.c'\" unpacked with wrong size! fi # end of 'cursor.c' fi if test -f 'dialog.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'dialog.c'\" else echo shar: Extracting \"'dialog.c'\" \(5028 characters\) sed "s/^X//" >'dialog.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/dialog.c,v 2.0 91/03/05 12:46:58 william Exp $"; X#endif X X#include <X11/Xlib.h> X#include <X11/Xutil.h> X#include "const.h" X X#include "box.e" X#include "cursor.e" X#include "font.e" X#include "mainloop.e" X#include "raster.e" X#include "setup.e" X Xstatic int curX, curY; Xstatic Window dialogWindow; X Xunsigned int CornerLoop (OrigX, OrigY) X int * OrigX, * OrigY; X{ X XEvent input; X X XGrabPointer (mainDisplay, rootWindow, False, ButtonPressMask, X GrabModeAsync, GrabModeAsync, None, cornerCursor, CurrentTime); X X for (;;) X { X XNextEvent (mainDisplay, &input); X if (input.type == ButtonPress) X { X XUngrabPointer (mainDisplay, CurrentTime); X *OrigX = input.xbutton.x; X *OrigY = input.xbutton.y; X return (input.xbutton.button); X } X } X} X Xvoid Dialog (Message, ReturnStr) X char * Message, * ReturnStr; X{ X int w, h, str_w, left, top, fore_draw_pixel, fore_erase_pixel; X XEvent input; X int win_x, win_y; X int dialoging = TRUE, index = 0, dsp_w, dsp_h; X char buf[80]; X XKeyEvent * key_ev; X KeyCode key_code; X KeySym key_sym; X XComposeStatus c_stat; X XSetWindowAttributes win_attrs; X X h = 7 * defaultFontHeight; X str_w = defaultFontWidth * strlen (Message); X w = max(str_w+6*defaultFontWidth,600); X left = (w - str_w) / 2; X top = 2 * defaultFontHeight; X X fore_draw_pixel = myFgPixel; X fore_erase_pixel = myBgPixel; X X dsp_w = DisplayWidth (mainDisplay, mainScreen); X dsp_h = DisplayHeight (mainDisplay, mainScreen); X X win_x = (w > dsp_w) ? 0 : (dsp_w - w)/2; X win_y = (h > dsp_h) ? 0 : (dsp_h - h)/3; X X if (w > dsp_w-2*(brdrW+1)) w = dsp_w-2*(brdrW+1); X X if ((dialogWindow = XCreateSimpleWindow (mainDisplay, rootWindow, win_x, X win_y, w, h, brdrW, myBorderPixel, myBgPixel)) == 0) X { printf ("Could not create dialog window!\n"); exit (-1); } X X win_attrs.save_under = True; X XChangeWindowAttributes (mainDisplay, dialogWindow, CWSaveUnder, &win_attrs); X X XSetTransientForHint (mainDisplay, dialogWindow, mainWindow); X XMapWindow (mainDisplay, dialogWindow); X XSelectInput (mainDisplay, dialogWindow, KeyPressMask | ExposureMask); X X curX = 200; X curY = 4 * defaultFontHeight; X X while (dialoging) X { X XNextEvent (mainDisplay, &input); X if (input.type == Expose) X { X XDrawRectangle (mainDisplay, dialogWindow, defaultGC, 0, 0, w-1, h-1); X MyBox (dialogWindow, defaultGC, 10, 10, w-9, h-9); X MyBox (dialogWindow, defaultGC, 11, 11, w-10, h-10); X MyBox (dialogWindow, defaultGC, 12, 12, w-11, h-11); X XDrawString (mainDisplay, dialogWindow, defaultGC, left, top, Message, X strlen(Message)); X X PutCursor (dialogWindow, curX, curY, fore_draw_pixel); X X continue; X } X if (input.type == KeyPress) X { X /* erase the old cursor */ X PutCursor (dialogWindow, curX, curY, fore_erase_pixel); X X key_ev = &(input.xkey); X key_code = key_ev->keycode; X XLookupString (key_ev, buf, 80, &key_sym, &c_stat); X if ((buf[0]=='\033' && (key_sym & 0xff)=='\033') || X (buf[0]=='\r' && (key_sym & 0xff)=='\r') || X (buf[0]=='\n' && (key_sym & 0xff)=='\n') || X (buf[0]=='\b' && (key_sym & 0xff)=='\b') || X (buf[0]=='\b' && (key_sym & 0xff)=='h' && X (key_ev->state & ControlMask)) || X (buf[0]=='\177' && (key_sym & 0x7f)=='\177') || X (key_sym>='\040' && key_sym<='\177')) X { X switch (buf[0]) X { X case '\033': X ReturnStr[0] = '\0'; X dialoging = FALSE; X break; X case '\r': X case '\n': X ReturnStr[index] = '\0'; X dialoging = FALSE; X break; X case '\177': /* <DEL> */ X case '\b': /* <BS> */ X if (index != 0) X { X index--; X curX -= defaultFontWidth + 1; X PutCursor (dialogWindow, curX, curY, fore_erase_pixel); X } X break; X default: X if (buf[0] >= '\040' && index < 80) X { X XDrawString (mainDisplay, dialogWindow, defaultGC, curX, X curY+defaultFontAsc, buf, 1); X curX += defaultFontWidth + 1; X ReturnStr[index++] = buf[0]; X } X break; X } X } X PutCursor (dialogWindow, curX, curY, fore_draw_pixel); X } X } X X XDestroyWindow (mainDisplay, dialogWindow); X XSync (mainDisplay, FALSE); X while (XCheckMaskEvent (mainDisplay, ExposureMask, &input)) ; X} END_OF_FILE if test 5028 -ne `wc -c <'dialog.c'`; then echo shar: \"'dialog.c'\" unpacked with wrong size! fi # end of 'dialog.c' fi echo shar: End of archive 2 \(of 23\). cp /dev/null ark2isdone 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