🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: comp.sources.bugs
1 messages
1 total messages Started by William Cheng Thu, 07 Jan 1993 06:27
Tgif-2.12-patch16 (16th patch for tgif-2.12), Part 01/01
#707
Author: William Cheng
Date: Thu, 07 Jan 1993 06:27
2254 lines
69303 bytes
Below is tgif-2.12-patch16 (16th patch for tgif-2.12).  (The complete
source for tgif-2.12 at patchlevel 16 can be found in the following
places for anonymous ftp:  export.lcs.mit.edu:/contrib/tgif-2.12-p16.tar.Z
and cs.ucla.edu:/pub/tgif/tgif-2.12-p16.tar.Z.)

Tgif is an Xlib based 2-D drawing tool under X11.

Remove everything outside of the 'cut here' lines (inclusive) and save
the file as tgif-2.12-patch16; then apply the patch with
'patch -p -N < tgif-2.12-patch16'.  Here is a short list of added
features/bug fixes.

1)  Allow the launch= attribute to be multiline.
2)  Make pasting work in text mode.  The default paste command is still
    <Cntrl><Meta>y.
3)  Add user interrupt when redrawing.  Add a new X default,
    Tgif*IntrCheckInterval to define the number of objects drawn before
    checking for user interrupt.
4)  Fix some memory leaks.  Thanks to Mark Sterin <mark@FibHaifa.com> for
    the fixes.

Please send bug reports to william@cs.ucla.edu.
---------------------------------> cut here <---------------------------------
*** choice.c.orig	Wed Jan  6 22:06:37 1993
--- choice.c	Wed Jan  6 22:06:38 1993
***************
*** 25,29 ****
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/choice.c,v 2.58.2.1 1992/10/16 05:17:33 william Exp $";
  #endif
  
--- 25,29 ----
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/choice.c,v 2.58.2.4 1993/01/03 23:34:16 william Exp $";
  #endif
  
***************
*** 414,430 ****
     switch (pageStyle)
     {
!       case PORTRAIT:
!          XSetStipple (mainDisplay, rasterGC, filePixmap);
!          XFillRectangle (mainDisplay, choiceWindow, rasterGC,
!                FILE_COL*choiceImageW, FILE_ROW*choiceImageH,
!                choiceImageW, choiceImageH);
!          break;
!       case LANDSCAPE:
!          XSetStipple (mainDisplay, rasterGC, landscapePixmap);
!          XFillRectangle (mainDisplay, choiceWindow, rasterGC,
!                FILE_COL*choiceImageW, FILE_ROW*choiceImageH,
!                choiceImageW, choiceImageH);
!          break;
     }
  }
  
--- 414,422 ----
     switch (pageStyle)
     {
!       case PORTRAIT: XSetStipple(mainDisplay,rasterGC,filePixmap); break;
!       case LANDSCAPE: XSetStipple(mainDisplay,rasterGC,landscapePixmap); break;
     }
+    XFillRectangle (mainDisplay, choiceWindow, rasterGC, FILE_COL*choiceImageW,
+          FILE_ROW*choiceImageH, choiceImageW, choiceImageH);
  }
  
***************
*** 465,483 ****
  void ShowMoveMode ()
  {
!    switch (moveMode)
!    {
!       case CONST_MOVE:
!          XSetStipple (mainDisplay, rasterGC, moveModePixmap[CONST_MOVE]);
!          XFillRectangle (mainDisplay, choiceWindow, rasterGC,
!                MOVE_MODE_COL*choiceImageW, MOVE_MODE_ROW*choiceImageH,
!                choiceImageW, choiceImageH);
!          break;
!       case UNCONST_MOVE:
!          XSetStipple (mainDisplay, rasterGC, moveModePixmap[UNCONST_MOVE]);
!          XFillRectangle (mainDisplay, choiceWindow, rasterGC,
!                MOVE_MODE_COL*choiceImageW, MOVE_MODE_ROW*choiceImageH,
!                choiceImageW, choiceImageH);
!          break;
!    }
  }
  
--- 457,464 ----
  void ShowMoveMode ()
  {
!    XSetStipple (mainDisplay, rasterGC, moveModePixmap[moveMode]);
!    XFillRectangle (mainDisplay, choiceWindow, rasterGC,
!          MOVE_MODE_COL*choiceImageW, MOVE_MODE_ROW*choiceImageH,
!          choiceImageW, choiceImageH);
  }
  
***************
*** 821,825 ****
     zoomedIn = saved_zoomed_in;
     zoomScale = saved_zoom_scale;
!    PreciseZoom (new_zoomed_in, new_zoom_scale);
  }
  
--- 802,806 ----
     zoomedIn = saved_zoomed_in;
     zoomScale = saved_zoom_scale;
!    PreciseZoom (new_zoomed_in, new_zoom_scale, FALSE);
  }
  
*** cmd.c.orig	Wed Jan  6 22:06:43 1993
--- cmd.c	Wed Jan  6 22:06:44 1993
***************
*** 25,29 ****
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/cmd.c,v 2.18.2.1 1992/10/16 05:26:14 william Exp $";
  #endif
  
--- 25,29 ----
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/cmd.c,v 2.18.2.2 1993/01/02 20:21:17 william Exp $";
  #endif
  
***************
*** 158,162 ****
     struct CmdRec	* CmdPtr;
  {
!    register struct CmdRec	* cmd_ptr;
  
     if (curCmd == NULL)
--- 158,162 ----
     struct CmdRec	* CmdPtr;
  {
!    register struct CmdRec	* cmd_ptr, * next_cmd;
  
     if (curCmd == NULL)
***************
*** 165,170 ****
        cmd_ptr = curCmd->next;
  
!    for ( ; cmd_ptr != NULL; cmd_ptr = cmd_ptr->next)
     {
        DeleteARedoRecord (cmd_ptr);
        historyCount--;
--- 165,171 ----
        cmd_ptr = curCmd->next;
  
!    for ( ; cmd_ptr != NULL; cmd_ptr = next_cmd)
     {
+       next_cmd = cmd_ptr->next;
        DeleteARedoRecord (cmd_ptr);
        historyCount--;
***************
*** 175,182 ****
  void CleanUpCmds ()
  {
!    register struct CmdRec	* cmd_ptr;
  
!    for (cmd_ptr = firstCmd; cmd_ptr != NULL; cmd_ptr = cmd_ptr->next)
        DeleteARedoRecord (cmd_ptr);
     firstCmd = lastCmd = curCmd = NULL;
     historyCount = 0;
--- 176,186 ----
  void CleanUpCmds ()
  {
!    register struct CmdRec	* cmd_ptr, * next_cmd;
  
!    for (cmd_ptr = firstCmd; cmd_ptr != NULL; cmd_ptr = next_cmd)
!    {
!       next_cmd = cmd_ptr->next;
        DeleteARedoRecord (cmd_ptr);
+    }
     firstCmd = lastCmd = curCmd = NULL;
     historyCount = 0;
*** copypaste.c.orig	Wed Jan  6 22:06:46 1993
--- copypaste.c	Wed Jan  6 22:06:47 1993
***************
*** 26,30 ****
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/copypaste.c,v 2.30.1.2 1992/10/16 05:07:26 william Exp $";
  #endif
  
--- 26,30 ----
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/copypaste.c,v 2.30.1.4 1992/12/20 01:02:35 william Exp $";
  #endif
  
***************
*** 42,45 ****
--- 42,46 ----
  #include "color.e"
  #include "cursor.e"
+ #include "drawing.e"
  #include "dup.e"
  #include "file.e"
***************
*** 279,283 ****
  }
  
! void PasteFromCutBuffer ()
  {
     FILE 		* fp;
--- 280,284 ----
  }
  
! int PasteFromCutBuffer ()
  {
     FILE 		* fp;
***************
*** 292,301 ****
     {
        Msg ("Cut buffer is empty");
!       return;
     }
     if (((unsigned char)(*cut_buffer)) != header)
     {
        PasteString (cut_buffer);
!       return;
     }
     cut_buffer++;
--- 293,307 ----
     {
        Msg ("Cut buffer is empty");
!       return (TRUE);
     }
     if (((unsigned char)(*cut_buffer)) != header)
     {
+       if (curChoice == DRAWTEXT)
+       {
+          pasteInDrawTextMode = TRUE;
+          return (FALSE);
+       }
        PasteString (cut_buffer);
!       return (TRUE);
     }
     cut_buffer++;
***************
*** 308,312 ****
        sprintf (msg, "Can not open %s for write.", tmpfile);
        Msg (msg);
!       return;
     }
     if (write (fileno(fp), cut_buffer, len) < len)
--- 314,318 ----
        sprintf (msg, "Can not open %s for write.", tmpfile);
        Msg (msg);
!       return (TRUE);
     }
     if (write (fileno(fp), cut_buffer, len) < len)
***************
*** 317,321 ****
              tmpfile);
        Msg (msg);
!       return;
     }
     fflush (fp);
--- 323,327 ----
              tmpfile);
        Msg (msg);
!       return (TRUE);
     }
     fflush (fp);
***************
*** 353,357 ****
              fileVersion);
        Msg (msg);
!       return;
     }
      
--- 359,363 ----
              fileVersion);
        Msg (msg);
!       return (TRUE);
     }
      
***************
*** 403,406 ****
--- 409,413 ----
  
     Msg ("Objects pasted from tgif.");
+    return (TRUE);
  }        
  
*** drawing.c.orig	Wed Jan  6 22:06:51 1993
--- drawing.c	Wed Jan  6 22:06:54 1993
***************
*** 25,29 ****
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/drawing.c,v 2.115 1992/08/11 03:58:46 william Exp $";
  #endif
  
--- 25,29 ----
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/drawing.c,v 2.115.1.4 1993/01/03 01:14:56 william Exp $";
  #endif
  
***************
*** 80,83 ****
--- 80,85 ----
  #define O_GRID (O_VIS+O_INVIS)
  
+ int		intrCheckInterval=10;
+ int		pasteInDrawTextMode=FALSE;
  int		numRedrawBBox=INVALID;
  int		numClipRecs=0;
***************
*** 181,187 ****
  }
  
! void DrawObj (Win, ObjPtr)
     Window			Win;
     register struct ObjRec	* ObjPtr;
  {
     register struct ObjRec	* obj_ptr;
--- 183,254 ----
  }
  
! static int	intrShown=FALSE;
! static int	checkCount=0;
! 
! void ShowInterrupt ()
! {
!    GC		gc;
!    XGCValues	values;
! 
!    if (intrCheckInterval <= 0) return;
! 
!    values.foreground = myFgPixel;
!    values.background = myBgPixel;
!    values.fill_style = FillOpaqueStippled;
!    values.stipple = intrPixmap;
!    gc = XCreateGC (mainDisplay, dummyWindow1,
!          GCForeground | GCBackground | GCFillStyle | GCStipple, &values);
!    XFillRectangle (mainDisplay, dummyWindow1, gc, 0, 0, scrollBarW, scrollBarW);
!    XFreeGC(mainDisplay, gc);
! 
!    XSync (mainDisplay, False);
!    intrShown = TRUE;
! }
! 
! void HideInterrupt ()
! {
!    XEvent	ev;
! 
!    while (XCheckWindowEvent (mainDisplay, dummyWindow1, ButtonPressMask, &ev)) ;
!    XClearWindow (mainDisplay, dummyWindow1);
!    intrShown = FALSE;
!    checkCount = 0;
! }
! 
! void RedrawDummyWindow1 ()
! {
!    XEvent	ev;
! 
!    while (XCheckWindowEvent (mainDisplay, dummyWindow1, ExposureMask, &ev)) ;
!    while (XCheckWindowEvent (mainDisplay, dummyWindow1, ButtonPressMask, &ev)) ;
!    if (intrShown)
!       ShowInterrupt ();
!    else
!       HideInterrupt ();
! }
! 
! int CheckInterrupt ()
! {
!    if (intrCheckInterval <= 0) return (FALSE);
!    if (++checkCount >= intrCheckInterval)
!    {
!       XEvent	ev;
! 
!       checkCount = 0;
!       if (XCheckWindowEvent (mainDisplay, dummyWindow1, ButtonPressMask, &ev))
!       {
!          while (XCheckWindowEvent (mainDisplay, dummyWindow1, ButtonPressMask,
!                &ev)) ;
!          return (TRUE);
!       }
!    }
!    return (FALSE);
! }
! 
! int DrawObj (Win, ObjPtr)
     Window			Win;
     register struct ObjRec	* ObjPtr;
+    /* returns TRUE if all objects are drawn */
+    /* returns FALSE if interrupted by the user */
  {
     register struct ObjRec	* obj_ptr;
***************
*** 230,234 ****
           for ( ; obj_ptr != NULL; obj_ptr = obj_ptr->prev)
              if (!checkBBox || NeedToDraw (obj_ptr->bbox))
!                DrawObj (Win, obj_ptr);
           if (ObjPtr->type == OBJ_ICON && ObjPtr->dirty)
           {
--- 297,308 ----
           for ( ; obj_ptr != NULL; obj_ptr = obj_ptr->prev)
              if (!checkBBox || NeedToDraw (obj_ptr->bbox))
!             {
!                if (!DrawObj (Win, obj_ptr)) return (FALSE);
!                if (CheckInterrupt ())
!                {
!                   Msg ("User interrupt.  Repaint aborted.");
!                   return (FALSE);
!                }
!             }
           if (ObjPtr->type == OBJ_ICON && ObjPtr->dirty)
           {
***************
*** 245,248 ****
--- 319,323 ----
           break;
     }
+    return (TRUE);
  }
  
***************
*** 299,307 ****
     smallArea[0].ltx = LtX; smallArea[0].lty = LtY;
     smallArea[0].rbx = RbX; smallArea[0].rby = RbY;
     for (obj_ptr = BotObj; obj_ptr != NULL; obj_ptr = obj_ptr->prev)
        if (BBoxIntersect (obj_ptr->bbox, drawWinBBox) &&
              BBoxIntersect (obj_ptr->bbox, smallArea[0]))
!          DrawObj (drawWindow, obj_ptr);
! 
     SetDefaultDrawWinClipRecs ();
  }
--- 374,392 ----
     smallArea[0].ltx = LtX; smallArea[0].lty = LtY;
     smallArea[0].rbx = RbX; smallArea[0].rby = RbY;
+    ShowInterrupt ();
     for (obj_ptr = BotObj; obj_ptr != NULL; obj_ptr = obj_ptr->prev)
+    {
        if (BBoxIntersect (obj_ptr->bbox, drawWinBBox) &&
              BBoxIntersect (obj_ptr->bbox, smallArea[0]))
!       {
!          if (!DrawObj (drawWindow, obj_ptr)) break;
!          if (CheckInterrupt ())
!          {
!             Msg ("User interrupt.  Repaint aborted.");
!             break;
!          }
!       }
!    }
!    HideInterrupt ();
     SetDefaultDrawWinClipRecs ();
  }
***************
*** 465,468 ****
--- 550,554 ----
     smallArea[1].ltx = LtX2; smallArea[1].lty = LtY2;
     smallArea[1].rbx = RbX2; smallArea[1].rby = RbY2;
+    ShowInterrupt ();
     for (obj_ptr = BotObj; obj_ptr != NULL; obj_ptr = obj_ptr->prev)
     {
***************
*** 470,476 ****
              (BBoxIntersect (obj_ptr->bbox, bbox1) ||
              BBoxIntersect (obj_ptr->bbox, bbox2)))
!          DrawObj (drawWindow, obj_ptr);
     }
! 
     SetDefaultDrawWinClipRecs ();
  }
--- 556,569 ----
              (BBoxIntersect (obj_ptr->bbox, bbox1) ||
              BBoxIntersect (obj_ptr->bbox, bbox2)))
!       {
!          if (!DrawObj (drawWindow, obj_ptr)) break;
!          if (CheckInterrupt ())
!          {
!             Msg ("User interrupt.  Repaint aborted.");
!             break;
!          }
!       }
     }
!    HideInterrupt ();
     SetDefaultDrawWinClipRecs ();
  }
***************
*** 637,642 ****
  
     checkBBox = FALSE;
     for (obj_ptr = botObj; obj_ptr != NULL; obj_ptr = obj_ptr->prev)
!       DrawObj (pixmap, obj_ptr);
     checkBBox = TRUE;
  
--- 730,751 ----
  
     checkBBox = FALSE;
+    ShowInterrupt ();
     for (obj_ptr = botObj; obj_ptr != NULL; obj_ptr = obj_ptr->prev)
!    {
!       if (!DrawObj (pixmap, obj_ptr))
!       {
!          XFreePixmap (mainDisplay, pixmap);
!          pixmap = None;
!          break;
!       }
!       if (CheckInterrupt ())
!       {
!          Msg ("User interrupt.  Repaint aborted.");
!          XFreePixmap (mainDisplay, pixmap);
!          pixmap = None;
!          break;
!       }
!    }
!    HideInterrupt ();
     checkBBox = TRUE;
  
***************
*** 661,667 ****
  
     numRedrawBBox = 0;
     for (obj_ptr = BotObj; obj_ptr != NULL; obj_ptr = obj_ptr->prev)
        if (BBoxIntersect (obj_ptr->bbox, drawWinBBox))
!          DrawObj (drawWindow, obj_ptr);
  }
  
--- 770,787 ----
  
     numRedrawBBox = 0;
+    ShowInterrupt ();
     for (obj_ptr = BotObj; obj_ptr != NULL; obj_ptr = obj_ptr->prev)
+    {
        if (BBoxIntersect (obj_ptr->bbox, drawWinBBox))
!       {
!          if (!DrawObj (drawWindow, obj_ptr)) break;
!          if (CheckInterrupt ())
!          {
!             Msg ("User interrupt.  Repaint aborted.");
!             break;
!          }
!       }
!    }
!    HideInterrupt ();
  }
  
***************
*** 863,867 ****
              case 'w': /*^#w*/ ToggleAllSelLineType (); break;
              case 'x': /*^#x*/ ToggleWhereToPrint (); break;
!             case 'y': /*^#y*/ PasteFromCutBuffer (); break;
              case 'z': /*^#z*/ SetCurChoice (DRAWARC); break;
              case '.': /*^#.*/ ImportXBitmapFile (); break;
--- 983,987 ----
              case 'w': /*^#w*/ ToggleAllSelLineType (); break;
              case 'x': /*^#x*/ ToggleWhereToPrint (); break;
!             case 'y': /*^#y*/ if (!PasteFromCutBuffer()) return(INVALID); break;
              case 'z': /*^#z*/ SetCurChoice (DRAWARC); break;
              case '.': /*^#.*/ ImportXBitmapFile (); break;
*** file.c.orig	Wed Jan  6 22:06:59 1993
--- file.c	Wed Jan  6 22:07:02 1993
***************
*** 25,29 ****
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/file.c,v 2.192.1.11 1992/12/06 03:09:02 william Exp $";
  #endif
  
--- 25,29 ----
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/file.c,v 2.192.1.14 1992/12/22 05:43:04 william Exp $";
  #endif
  
***************
*** 1874,1878 ****
     FILE			* fp;
     char 		tmp_filename[MAXPATHLENGTH+1];
!    int 			tmp_linenum;
  
     strcpy (saved_cur_dir, curDir);
--- 1874,1878 ----
     FILE			* fp;
     char 		tmp_filename[MAXPATHLENGTH+1];
!    int 			tmp_linenum, interrupted;
  
     strcpy (saved_cur_dir, curDir);
***************
*** 1914,1918 ****
--- 1914,1921 ----
  
     numRedrawBBox = 0;
+    ShowInterrupt ();
+    interrupted = FALSE;
     while ((read_status = ReadObj (fp, &obj_ptr)) == TRUE)
+    {
        if (obj_ptr != NULL)
        {
***************
*** 1919,1926 ****
           AdjForOldVersion (obj_ptr);
           AddObj (NULL, topObj, obj_ptr);
!          if (PointInBBox (obj_ptr->x, obj_ptr->y, drawWinBBox) ||
!                BBoxIntersect (obj_ptr->bbox, drawWinBBox))
!             DrawObj (drawWindow, obj_ptr);
        }
  
     strcpy (scanFileName, tmp_filename);
--- 1922,1936 ----
           AdjForOldVersion (obj_ptr);
           AddObj (NULL, topObj, obj_ptr);
!          if (!interrupted &&
!                (PointInBBox (obj_ptr->x, obj_ptr->y, drawWinBBox) ||
!                BBoxIntersect (obj_ptr->bbox, drawWinBBox)))
!          {
!             if (!DrawObj (drawWindow, obj_ptr)) interrupted = TRUE;
!             if (CheckInterrupt ()) interrupted = TRUE;
!          }
        }
+    }
+    if (interrupted) Msg ("User interrupt.  Drawing aborted.");
+    HideInterrupt ();
  
     strcpy (scanFileName, tmp_filename);
*** grid.c.orig	Wed Jan  6 22:07:07 1993
--- grid.c	Wed Jan  6 22:07:09 1993
***************
*** 25,29 ****
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/grid.c,v 2.77 1992/05/11 23:41:53 william Exp $";
  #endif
  
--- 25,29 ----
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/grid.c,v 2.78 1992/12/14 02:05:21 william Exp $";
  #endif
  
***************
*** 676,685 ****
  }
  
! void PreciseZoom (zoomed_in, zoom_scale)
!    int	zoomed_in, zoom_scale;
  {
     int	xc, yc;
  
!    if (zoomedIn == zoomed_in && zoomScale == zoom_scale) return;
  
     if (curChoice==DRAWTEXT && textCursorShown)
--- 676,685 ----
  }
  
! void PreciseZoom (zoomed_in, zoom_scale, force_zoom)
!    int	zoomed_in, zoom_scale, force_zoom;
  {
     int	xc, yc;
  
!    if (!force_zoom && zoomedIn == zoomed_in && zoomScale == zoom_scale) return;
  
     if (curChoice==DRAWTEXT && textCursorShown)
*** mainloop.c.orig	Wed Jan  6 22:07:15 1993
--- mainloop.c	Wed Jan  6 22:07:17 1993
***************
*** 25,29 ****
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/mainloop.c,v 2.79.1.6 1992/11/29 23:26:26 william Exp $";
  #endif
  
--- 25,29 ----
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/mainloop.c,v 2.79.1.7 1992/12/21 00:20:05 william Exp $";
  #endif
  
***************
*** 305,308 ****
--- 305,313 ----
        RedrawHScrollWindow ();
     }
+    else if (input->xany.window == dummyWindow1)
+    {
+       while (XCheckWindowEvent (mainDisplay, dummyWindow1, ExposureMask, &ev)) ;
+       RedrawDummyWindow1 ();
+    }
     else if (pinnedMainMenu && input->xany.window == mainMenuWindow)
     {
***************
*** 686,689 ****
--- 691,696 ----
              input.xany.window == hSBarWindow)
           ScrollEventHandler (&input);
+       else if (input.xany.window == dummyWindow1)
+          RedrawDummyWindow1 ();
        else if (input.xany.type == MappingNotify)
           XRefreshKeyboardMapping (&(input.xmapping));
*** mainmenu.c.orig	Wed Jan  6 22:07:21 1993
--- mainmenu.c	Wed Jan  6 22:07:22 1993
***************
*** 26,30 ****
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/mainmenu.c,v 1.51 1992/08/08 08:26:43 william Exp $";
  #endif
  
--- 26,30 ----
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/mainmenu.c,v 1.51.1.3 1993/01/04 01:21:22 william Exp $";
  #endif
  
***************
*** 327,331 ****
     register int			i, j;
     register unsigned char	hash_value;
!    Window			root_win, parent_win, * child_win;
     unsigned int			num_child;
  
--- 327,331 ----
     register int			i, j;
     register unsigned char	hash_value;
!    Window			root_win, parent_win, * child_wins;
     unsigned int			num_child;
  
***************
*** 344,348 ****
        }
  
!    XQueryTree (mainDisplay, rootWindow, &root_win, &parent_win, &child_win,
           &num_child);
  
--- 344,348 ----
        }
  
!    XQueryTree (mainDisplay, rootWindow, &root_win, &parent_win, &child_wins,
           &num_child);
  
***************
*** 353,360 ****
     for (i = 0; i < num_child; i++)
     {
!       hash_value = child_win[i] & 0xff;
        if (checkExtra[hash_value>>3] & (1<<(hash_value&0x7)))
        {
!          if (child_win[i] == mainMenuWindow)
              stackingWins[numStacking++] = mainMenuWindow;
           else
--- 353,360 ----
     for (i = 0; i < num_child; i++)
     {
!       hash_value = child_wins[i] & 0xff;
        if (checkExtra[hash_value>>3] & (1<<(hash_value&0x7)))
        {
!          if (child_wins[i] == mainMenuWindow)
              stackingWins[numStacking++] = mainMenuWindow;
           else
***************
*** 363,369 ****
              {
                 if (extraWinInfo[j].raise && extraWinInfo[j].mapped &&
!                      extraWinInfo[j].window == child_win[i])
                 {
!                   stackingWins[numStacking++] = child_win[i];
                    break;
                 }
--- 363,369 ----
              {
                 if (extraWinInfo[j].raise && extraWinInfo[j].mapped &&
!                      extraWinInfo[j].window == child_wins[i])
                 {
!                   stackingWins[numStacking++] = child_wins[i];
                    break;
                 }
***************
*** 372,375 ****
--- 372,376 ----
        }
     }
+    if (child_wins != NULL) XFree ((void *)child_wins);
  }
  
***************
*** 749,753 ****
              &num_child) == 0)
           return;
!       if (child_wins != NULL) cfree (child_wins);
        if (parent_win == rootWindow)
           done = TRUE;
--- 750,754 ----
              &num_child) == 0)
           return;
!       if (child_wins != NULL) XFree ((void *)child_wins);
        if (parent_win == rootWindow)
           done = TRUE;
*** poly.c.orig	Wed Jan  6 22:07:30 1993
--- poly.c	Wed Jan  6 22:07:31 1993
***************
*** 25,29 ****
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/poly.c,v 2.59.1.3 1992/11/07 23:32:42 william Exp $";
  #endif
  
--- 25,29 ----
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/poly.c,v 2.59.1.4 1993/01/03 23:34:24 william Exp $";
  #endif
  
***************
*** 198,202 ****
     struct ObjRec	* obj_ptr;
     register int		i;
!    XPoint		* v, * rv;
     int			ltx, lty, rbx, rby;
  
--- 198,202 ----
     struct ObjRec	* obj_ptr;
     register int		i;
!    XPoint		* v;
     int			ltx, lty, rbx, rby;
  
***************
*** 204,209 ****
     poly_ptr->n = NumPts;
     v = (XPoint *) calloc (NumPts+1, sizeof(XPoint));
!    rv = (XPoint *) calloc (NumPts+1, sizeof(XPoint));
!    if (v == NULL || rv == NULL) fprintf (stderr, "Can not calloc().\n");
     pt_ptr = lastPtPtr;
     ltx = rbx = pt_ptr->x;
--- 204,208 ----
     poly_ptr->n = NumPts;
     v = (XPoint *) calloc (NumPts+1, sizeof(XPoint));
!    if (v == NULL) fprintf (stderr, "Can not calloc().\n");
     pt_ptr = lastPtPtr;
     ltx = rbx = pt_ptr->x;
***************
*** 222,226 ****
  
     poly_ptr->vlist = v;
-    poly_ptr->rvlist = rv;
     poly_ptr->svlist = poly_ptr->asvlist = NULL;
     poly_ptr->style = lineStyle;
--- 221,224 ----
***************
*** 809,813 ****
     dash = ObjPtr->detail.p->dash;
     rotation = ObjPtr->rotation;
!    v = (rotation == 0) ? ObjPtr->detail.p->vlist : ObjPtr->detail.p->rvlist;
     num_pts = ObjPtr->detail.p->n;
  
--- 807,811 ----
     dash = ObjPtr->detail.p->dash;
     rotation = ObjPtr->rotation;
!    v = ObjPtr->detail.p->vlist;
     num_pts = ObjPtr->detail.p->n;
  
***************
*** 1184,1188 ****
     register int		i;
     struct PolyRec	* poly_ptr;
!    XPoint		* v, * rv;
     char			color_str[20], * s, inbuf[MAXSTRING+1], msg[MAXSTRING];
     int			num_pts, ltx=0, lty=0, rbx=0, rby=0, x, y, id=0;
--- 1182,1186 ----
     register int		i;
     struct PolyRec	* poly_ptr;
!    XPoint		* v;
     char			color_str[20], * s, inbuf[MAXSTRING+1], msg[MAXSTRING];
     int			num_pts, ltx=0, lty=0, rbx=0, rby=0, x, y, id=0;
***************
*** 1218,1223 ****
     {
        v = (XPoint *) calloc (4, sizeof(XPoint));
!       rv = (XPoint *) calloc (4, sizeof(XPoint));
!       if (v == NULL || rv == NULL) fprintf (stderr, "Can not calloc().\n");
     }
     else
--- 1216,1220 ----
     {
        v = (XPoint *) calloc (4, sizeof(XPoint));
!       if (v == NULL) fprintf (stderr, "Can not calloc().\n");
     }
     else
***************
*** 1224,1229 ****
     {
        v = (XPoint *) calloc (num_pts+1, sizeof(XPoint));
!       rv = (XPoint *) calloc (num_pts+1, sizeof(XPoint));
!       if (v == NULL || rv == NULL) fprintf (stderr, "Can not calloc().\n");
     }
  
--- 1221,1225 ----
     {
        v = (XPoint *) calloc (num_pts+1, sizeof(XPoint));
!       if (v == NULL) fprintf (stderr, "Can not calloc().\n");
     }
  
***************
*** 1239,1243 ****
              cfree (poly_ptr);
              cfree (v);
-             cfree (rv);
              *ObjPtr = NULL;
              return;
--- 1235,1238 ----
***************
*** 1269,1273 ****
              cfree (poly_ptr);
              cfree (v);
-             cfree (rv);
              *ObjPtr = NULL;
              return;
--- 1264,1267 ----
***************
*** 1321,1325 ****
           cfree (poly_ptr);
           cfree (v);
-          cfree (rv);
           *ObjPtr = NULL;
           return;
--- 1315,1318 ----
***************
*** 1350,1354 ****
           cfree (poly_ptr);
           cfree (v);
-          cfree (rv);
           *ObjPtr = NULL;
           return;
--- 1343,1346 ----
***************
*** 1380,1384 ****
           cfree (poly_ptr);
           cfree (v);
-          cfree (rv);
           *ObjPtr = NULL;
           return;
--- 1372,1375 ----
***************
*** 1404,1408 ****
           cfree (poly_ptr);
           cfree (v);
-          cfree (rv);
           *ObjPtr = NULL;
           return;
--- 1395,1398 ----
***************
*** 1427,1431 ****
           cfree (poly_ptr);
           cfree (v);
-          cfree (rv);
           *ObjPtr = NULL;
           return;
--- 1417,1420 ----
***************
*** 1446,1450 ****
           cfree (poly_ptr);
           cfree (v);
-          cfree (rv);
           *ObjPtr = NULL;
           return;
--- 1435,1438 ----
***************
*** 1466,1470 ****
           cfree (poly_ptr);
           cfree (v);
-          cfree (rv);
           *ObjPtr = NULL;
           return;
--- 1454,1457 ----
***************
*** 1488,1492 ****
           cfree (poly_ptr);
           cfree (v);
-          cfree (rv);
           *ObjPtr = NULL;
           return;
--- 1475,1478 ----
***************
*** 1511,1515 ****
           cfree (poly_ptr);
           cfree (v);
-          cfree (rv);
           *ObjPtr = NULL;
           return;
--- 1497,1500 ----
***************
*** 1537,1541 ****
  
     poly_ptr->vlist = v;
-    poly_ptr->rvlist = rv;
     poly_ptr->svlist = poly_ptr->asvlist = NULL;
  
--- 1522,1525 ----
***************
*** 1562,1569 ****
     struct ObjRec	* ObjPtr;
  {
!    if (ObjPtr->detail.p->curved) cfree (ObjPtr->detail.p->svlist);
     if (ObjPtr->detail.p->asvlist != NULL) cfree (ObjPtr->detail.p->asvlist);
     cfree (ObjPtr->detail.p->vlist);
-    cfree (ObjPtr->detail.p->rvlist);
     cfree (ObjPtr->detail.p);
     cfree (ObjPtr);
--- 1546,1552 ----
     struct ObjRec	* ObjPtr;
  {
!    if (ObjPtr->detail.p->svlist != NULL) cfree (ObjPtr->detail.p->svlist);
     if (ObjPtr->detail.p->asvlist != NULL) cfree (ObjPtr->detail.p->asvlist);
     cfree (ObjPtr->detail.p->vlist);
     cfree (ObjPtr->detail.p);
     cfree (ObjPtr);
*** polygon.c.orig	Wed Jan  6 22:07:37 1993
--- polygon.c	Wed Jan  6 22:07:38 1993
***************
*** 25,29 ****
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/polygon.c,v 2.58.1.3 1992/11/07 23:33:09 william Exp $";
  #endif
  
--- 25,29 ----
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/polygon.c,v 2.58.1.4 1993/01/03 23:34:24 william Exp $";
  #endif
  
***************
*** 736,740 ****
     register int		i;
     struct PolygonRec	* polygon_ptr;
!    XPoint		* v, * rv;
     char			color_str[20], * s, inbuf[MAXSTRING], msg[MAXSTRING];
     int			num_pts, ltx=0, lty=0, rbx=0, rby=0, x, y, id=0;
--- 736,740 ----
     register int		i;
     struct PolygonRec	* polygon_ptr;
!    XPoint		* v;
     char			color_str[20], * s, inbuf[MAXSTRING], msg[MAXSTRING];
     int			num_pts, ltx=0, lty=0, rbx=0, rby=0, x, y, id=0;
***************
*** 769,774 ****
     {
        v = (XPoint *) calloc (5, sizeof(XPoint));
!       rv = (XPoint *) calloc (5, sizeof(XPoint));
!       if (v == NULL || rv == NULL) fprintf (stderr, "Can not calloc().\n");
     }
     else
--- 769,773 ----
     {
        v = (XPoint *) calloc (5, sizeof(XPoint));
!       if (v == NULL) fprintf (stderr, "Can not calloc().\n");
     }
     else
***************
*** 775,780 ****
     {
        v = (XPoint *) calloc (num_pts+1, sizeof(XPoint));
!       rv = (XPoint *) calloc (num_pts+1, sizeof(XPoint));
!       if (v == NULL || rv == NULL) fprintf (stderr, "Can not calloc().\n");
     }
  
--- 774,778 ----
     {
        v = (XPoint *) calloc (num_pts+1, sizeof(XPoint));
!       if (v == NULL) fprintf (stderr, "Can not calloc().\n");
     }
  
***************
*** 790,794 ****
              cfree (polygon_ptr);
              cfree (v);
-             cfree (rv);
              *ObjPtr = NULL;
              return;
--- 788,791 ----
***************
*** 820,824 ****
              cfree (polygon_ptr);
              cfree (v);
-             cfree (rv);
              *ObjPtr = NULL;
              return;
--- 817,820 ----
***************
*** 885,889 ****
           cfree (polygon_ptr);
           cfree (v);
-          cfree (rv);
           *ObjPtr = NULL;
           return;
--- 881,884 ----
***************
*** 913,917 ****
           cfree (polygon_ptr);
           cfree (v);
-          cfree (rv);
           *ObjPtr = NULL;
           return;
--- 908,911 ----
***************
*** 934,938 ****
           cfree (polygon_ptr);
           cfree (v);
-          cfree (rv);
           *ObjPtr = NULL;
           return;
--- 928,931 ----
***************
*** 951,955 ****
           cfree (polygon_ptr);
           cfree (v);
-          cfree (rv);
           *ObjPtr = NULL;
           return;
--- 944,947 ----
***************
*** 969,973 ****
           cfree (polygon_ptr);
           cfree (v);
-          cfree (rv);
           *ObjPtr = NULL;
           return;
--- 961,964 ----
***************
*** 988,992 ****
           cfree (polygon_ptr);
           cfree (v);
-          cfree (rv);
           *ObjPtr = NULL;
           return;
--- 979,982 ----
***************
*** 1008,1012 ****
           cfree (polygon_ptr);
           cfree (v);
-          cfree (rv);
           *ObjPtr = NULL;
           return;
--- 998,1001 ----
***************
*** 1026,1030 ****
  
     polygon_ptr->vlist = v;
-    polygon_ptr->rvlist = rv;
     polygon_ptr->svlist = NULL;
  
--- 1015,1018 ----
***************
*** 1053,1059 ****
     struct ObjRec	* ObjPtr;
  {
!    if (ObjPtr->detail.g->curved) cfree (ObjPtr->detail.g->svlist);
     cfree (ObjPtr->detail.g->vlist);
-    cfree (ObjPtr->detail.g->rvlist);
     cfree (ObjPtr->detail.g);
     cfree (ObjPtr);
--- 1041,1046 ----
     struct ObjRec	* ObjPtr;
  {
!    if (ObjPtr->detail.g->svlist != NULL) cfree (ObjPtr->detail.g->svlist);
     cfree (ObjPtr->detail.g->vlist);
     cfree (ObjPtr->detail.g);
     cfree (ObjPtr);
*** raster.c.orig	Wed Jan  6 22:07:46 1993
--- raster.c	Wed Jan  6 22:07:47 1993
***************
*** 25,29 ****
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/raster.c,v 2.42 1992/06/19 05:41:12 william Exp $";
  #endif
  
--- 25,29 ----
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/raster.c,v 2.42.1.2 1992/12/21 00:27:27 william Exp $";
  #endif
  
***************
*** 168,171 ****
--- 168,172 ----
  #include "xbm/unconst_move.xbm"
  #include "xbm/edit.xbm"
+ #include "xbm/intr.xbm"
  
  #include "xbm/rotate_0.xbm"
***************
*** 203,206 ****
--- 204,209 ----
  Pixmap	moveModePixmap[MAXMOVEMODES];
  Pixmap	editPixmap;
+ Pixmap	intrPixmap;
+ 
  Pixmap	rotatePixmap[4];
  Pixmap	whereToPrintPixmap[MAXWHERETOPRINT];
***************
*** 557,560 ****
--- 560,566 ----
           edit_bits, edit_width, edit_height);
  
+    intrPixmap = XCreateBitmapFromData (mainDisplay, mainWindow,
+          intr_bits, intr_width, intr_height);
+ 
     rotatePixmap[0] = XCreateBitmapFromData (mainDisplay, mainWindow,
           rotate_0_bits, rotate_0_width, rotate_0_height);
***************
*** 694,697 ****
--- 700,704 ----
        XFreePixmap (mainDisplay, moveModePixmap[i]);
     XFreePixmap (mainDisplay, editPixmap);
+    XFreePixmap (mainDisplay, intrPixmap);
     for (i = 0; i < 4; i++)
        XFreePixmap (mainDisplay, rotatePixmap[i]);
*** select.c.orig	Wed Jan  6 22:07:52 1993
--- select.c	Wed Jan  6 22:07:54 1993
***************
*** 25,29 ****
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/select.c,v 2.70.1.5 1992/12/06 23:53:20 william Exp $";
  #endif
  
--- 25,29 ----
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/select.c,v 2.70.1.7 1993/01/03 23:45:28 william Exp $";
  #endif
  
***************
*** 66,71 ****
  struct VSelRec	* topVSel = NULL, * botVSel = NULL;
  
- static struct SelRec	* topCutSel = NULL, * botCutSel = NULL;
- 
  void CalcBBox (X1, Y1, X2, Y2, LtX, LtY, RbX, RbY)
     int X1, Y1, X2, Y2, * LtX, * LtY, * RbX, * RbY;
--- 66,69 ----
***************
*** 1320,1327 ****
  {
     register char	* c_ptr, * buf_ptr;
!    char			* start_ptr, * new_c_ptr;
     char			buf[MAXSTRING+1], * cmd, * cmd_ptr;
!    int			cur_size=2*MAXSTRING, count=0, cmd_len=0;
     struct AttrRec	* attr_ptr;
  
     cmd = (char *) calloc (cur_size+1, sizeof(char));
--- 1318,1327 ----
  {
     register char	* c_ptr, * buf_ptr;
!    char			* new_c_ptr;
     char			buf[MAXSTRING+1], * cmd, * cmd_ptr;
!    int			cur_size=2*MAXSTRING, count=0, cmd_len=0, n;
!    int			first_time=TRUE;
     struct AttrRec	* attr_ptr;
+    struct StrRec	* str_ptr;
  
     cmd = (char *) calloc (cur_size+1, sizeof(char));
***************
*** 1328,1392 ****
     cmd_ptr = cmd;
     buf_ptr = buf;
!    for (start_ptr = c_ptr = launch_attr->s; *c_ptr != '\0'; c_ptr++, count++)
     {
!       switch (*c_ptr)
        {
!          case '\\':
!             c_ptr++;
!             *buf_ptr++ = *c_ptr;
!             break;
!          case '$':
!             if (count != 0)
!             {
!                *buf_ptr = '\0';
                 if (count+cmd_len >= cur_size)
                 {
!                   int	n=cmd_ptr-cmd;
!  
                    cur_size += MAXSTRING;
!                   cmd = (char *) realloc (cmd, (cur_size+1)*sizeof(char));
                    cmd_ptr = cmd+n;
                 }
!                strcpy (cmd_ptr, buf);
                 cmd_ptr += count;
!                count = 0;
!                buf_ptr = buf;
!             }
!             if ((attr_ptr = ValidAttrArg (c_ptr, obj_ptr, &new_c_ptr)) == NULL)
!             {
!                cfree (cmd);
!                return;
!             }
!             count = strlen (attr_ptr->s);
!             if (count+cmd_len >= cur_size)
!             {
!                int	n=cmd_ptr-cmd;
!  
!                cur_size += MAXSTRING;
!                cmd = (char *) realloc (cmd, (cur_size+1)*sizeof(char));
!                cmd_ptr = cmd+n;
!             }
!             strcpy (cmd_ptr, attr_ptr->s);
!             cmd_ptr += count;
!             count = -1;
!             c_ptr = new_c_ptr;
!             break;
!          default:
!             *buf_ptr++ = *c_ptr;
!             break;
        }
!    }
!    if (count != 0)
!    {
!       *buf_ptr = '\0';
!       if (count+cmd_len >= cur_size)
        {
!          int	n=cmd_ptr-cmd;
! 
!          cur_size += MAXSTRING;
!          cmd = (char *) realloc (cmd, (cur_size+1)*sizeof(char));
!          cmd_ptr = cmd+n;
        }
!       strcpy (cmd_ptr, buf);
     }
     LaunchIt (cmd);
--- 1328,1400 ----
     cmd_ptr = cmd;
     buf_ptr = buf;
!    for (str_ptr = launch_attr->obj->detail.t->first; str_ptr != NULL;
!          str_ptr = str_ptr->next)
     {
!       if (first_time)
        {
!          first_time = FALSE;
!          c_ptr = launch_attr->s;
!       }
!       else
!          c_ptr = str_ptr->s;
! 
!       for ( ; *c_ptr != '\0'; c_ptr++, count++)
!       {
!          switch (*c_ptr)
!          {
!             case '\\': c_ptr++; *buf_ptr++ = *c_ptr; break;
!             case '$':
!                if (count != 0)
!                {
!                   *buf_ptr = '\0';
!                   if (count+cmd_len >= cur_size)
!                   {
!                      n = cmd_ptr-cmd;
!                      cur_size += MAXSTRING;
!                      cmd = (char *) realloc (cmd, (cur_size+2)*sizeof(char));
!                      cmd_ptr = cmd+n;
!                   }
!                   strcpy (cmd_ptr, buf);
!                   cmd_ptr += count;
!                   count = 0;
!                   buf_ptr = buf;
!                }
!                if ((attr_ptr = ValidAttrArg(c_ptr,obj_ptr,&new_c_ptr)) == NULL)
!                {
!                   cfree (cmd);
!                   return;
!                }
!                count = strlen (attr_ptr->s);
                 if (count+cmd_len >= cur_size)
                 {
!                   n = cmd_ptr-cmd;
                    cur_size += MAXSTRING;
!                   cmd = (char *) realloc (cmd, (cur_size+2)*sizeof(char));
                    cmd_ptr = cmd+n;
                 }
!                strcpy (cmd_ptr, attr_ptr->s);
                 cmd_ptr += count;
!                count = -1;
!                c_ptr = new_c_ptr;
!                break;
!             default: *buf_ptr++ = *c_ptr; break;
!          }
        }
!       if (count != 0)
        {
!          *buf_ptr = '\0';
!          if (count+cmd_len >= cur_size)
!          {
!             n = cmd_ptr-cmd;
!             cur_size += MAXSTRING;
!             cmd = (char *) realloc (cmd, (cur_size+2)*sizeof(char));
!             cmd_ptr = cmd+n;
!          }
!          strcpy (cmd_ptr, buf);
!          cmd_ptr += count;
!          count = 0;
!          buf_ptr = buf;
        }
!       if (str_ptr->next != NULL) { *cmd_ptr++ = ' '; *cmd_ptr = '\0'; }
     }
     LaunchIt (cmd);
*** setup.c.orig	Wed Jan  6 22:08:01 1993
--- setup.c	Wed Jan  6 22:08:02 1993
***************
*** 25,29 ****
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/setup.c,v 2.100.2.3 1992/11/29 23:59:22 william Exp $";
  #endif
  
--- 25,29 ----
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/setup.c,v 2.100.2.9 1993/01/04 02:51:43 william Exp $";
  #endif
  
***************
*** 165,169 ****
  short	handleSize=3;
  
! static Window	dummyWindow1, dummyWindow2;
  
  static Atom	protocolAtom;
--- 165,169 ----
  short	handleSize=3;
  
! Window	dummyWindow1, dummyWindow2;
  
  static Atom	protocolAtom;
***************
*** 276,280 ****
           Msg (msg);
        }
!       XFree (c_ptr);
     }
  
--- 276,280 ----
           Msg (msg);
        }
!       XFree ((void *)c_ptr);
     }
  
***************
*** 346,350 ****
                 titleWindowH+choiceWindowH+rulerW+drawWinH+8*brdrW, hSBarW,
                 scrollBarW);
!          XMoveWindow (mainDisplay, dummyWindow1, drawWinW+rulerW+4*brdrW,
              titleWindowH+choiceWindowH+rulerW+drawWinH+8*brdrW);
        }
--- 346,350 ----
                 titleWindowH+choiceWindowH+rulerW+drawWinH+8*brdrW, hSBarW,
                 scrollBarW);
!          XMoveWindow (mainDisplay, dummyWindow2, drawWinW+rulerW+4*brdrW,
              titleWindowH+choiceWindowH+rulerW+drawWinH+8*brdrW);
        }
***************
*** 597,600 ****
--- 597,604 ----
           groupedTextEditable = TRUE;
     }
+    intrCheckInterval = 10;
+    if ((c_ptr = XGetDefault (mainDisplay, TOOL_NAME,
+          "IntrCheckInterval")) != NULL)
+       intrCheckInterval = atoi (c_ptr);
  
     strcpy (scanFileName, "No File");
***************
*** 806,810 ****
     }
  
!    if ((dummyWindow1 = XCreateSimpleWindow (mainDisplay, mainWindow,
           rulerW+drawWinW+4*brdrW,
           titleWindowH+choiceWindowH+rulerW+drawWinH+8*brdrW,
--- 810,814 ----
     }
  
!    if ((dummyWindow2 = XCreateSimpleWindow (mainDisplay, mainWindow,
           rulerW+drawWinW+4*brdrW,
           titleWindowH+choiceWindowH+rulerW+drawWinH+8*brdrW,
***************
*** 812,816 ****
     { fprintf (stderr, "Could not create dummy window!\n"); exit(1); }
  
!    if ((dummyWindow2 = XCreateSimpleWindow (mainDisplay, mainWindow, 0,
           titleWindowH+choiceWindowH+4*brdrW, rulerW, rulerW,
           brdrW, myBorderPixel, myBgPixel)) == 0) 
--- 816,820 ----
     { fprintf (stderr, "Could not create dummy window!\n"); exit(1); }
  
!    if ((dummyWindow1 = XCreateSimpleWindow (mainDisplay, mainWindow, 0,
           titleWindowH+choiceWindowH+4*brdrW, rulerW, rulerW,
           brdrW, myBorderPixel, myBgPixel)) == 0) 
***************
*** 897,900 ****
--- 901,906 ----
        XMapWindow (mainDisplay, hSBarWindow);
        XSelectInput (mainDisplay, hSBarWindow, ButtonPressMask | ExposureMask);
+       XMapWindow (mainDisplay, dummyWindow1);
+       XSelectInput (mainDisplay, dummyWindow1, ButtonPressMask | ExposureMask);
     }
  #else
***************
*** 933,936 ****
--- 939,944 ----
        XSelectInput (mainDisplay, hSBarWindow, ButtonPressMask | ExposureMask);
        XMapWindow (mainDisplay, hSBarWindow);
+       XSelectInput (mainDisplay, dummyWindow1, ButtonPressMask | ExposureMask);
+       XMapWindow (mainDisplay, dummyWindow1);
     }
  #endif
***************
*** 938,942 ****
     if (!canvasWindowOnly)
     {
-       XMapWindow (mainDisplay, dummyWindow1);
        XMapWindow (mainDisplay, dummyWindow2);
     }
--- 946,949 ----
*** special.c.orig	Wed Jan  6 22:08:07 1993
--- special.c	Wed Jan  6 22:08:08 1993
***************
*** 25,29 ****
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/special.c,v 2.60 1992/03/31 07:56:57 william Exp $";
  #endif
  
--- 25,29 ----
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/special.c,v 2.60.1.1 1992/12/22 04:34:08 william Exp $";
  #endif
  
***************
*** 248,252 ****
--- 248,254 ----
           MoveObj (ObjPtr, grid_dx, grid_dy);
           numRedrawBBox = 0;
+          ShowInterrupt ();
           DrawObj (drawWindow, ObjPtr);
+          HideInterrupt ();
        }
        else if (input.type == MotionNotify)
*** stk.c.orig	Wed Jan  6 22:08:12 1993
--- stk.c	Wed Jan  6 22:08:13 1993
***************
*** 25,29 ****
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/stk.c,v 2.37.1.2 1992/10/21 05:00:55 william Exp $";
  #endif
  
--- 25,29 ----
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/stk.c,v 2.37.1.5 1992/12/22 05:43:04 william Exp $";
  #endif
  
***************
*** 81,85 ****
     int			read_status, short_name;
     FILE			* fp;
!    int			tmp_linenum;
     char			tmp_filename[MAXPATHLENGTH];
  
--- 81,85 ----
     int			read_status, short_name;
     FILE			* fp;
!    int			tmp_linenum, interrupted;
     char			tmp_filename[MAXPATHLENGTH];
  
***************
*** 193,197 ****
--- 193,200 ----
     SetWatchCursor (mainWindow);
     numRedrawBBox = 0;
+    ShowInterrupt ();
+    interrupted = FALSE;
     while ((read_status = ReadObj (fp, &obj_ptr)) == TRUE)
+    {
        if (obj_ptr != NULL)
        {
***************
*** 198,205 ****
           AdjForOldVersion (obj_ptr);
           AddObj (NULL, topObj, obj_ptr);
!          if (PointInBBox (obj_ptr->x, obj_ptr->y, drawWinBBox) ||
!                BBoxIntersect (obj_ptr->bbox, drawWinBBox))
!             DrawObj (drawWindow, obj_ptr);
        }
  
     strcpy (scanFileName, tmp_filename);
--- 201,215 ----
           AdjForOldVersion (obj_ptr);
           AddObj (NULL, topObj, obj_ptr);
!          if (!interrupted &&
!                (PointInBBox (obj_ptr->x, obj_ptr->y, drawWinBBox) ||
!                BBoxIntersect (obj_ptr->bbox, drawWinBBox)))
!          {
!             if (!DrawObj (drawWindow, obj_ptr)) interrupted = TRUE;
!             if (CheckInterrupt ()) interrupted = TRUE;
!          }
        }
+    }
+    if (interrupted) Msg ("User interrupt.  Drawing aborted.");
+    HideInterrupt ();
  
     strcpy (scanFileName, tmp_filename);
*** text.c.orig	Wed Jan  6 22:08:21 1993
--- text.c	Wed Jan  6 22:08:24 1993
***************
*** 25,29 ****
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/text.c,v 2.110 1992/10/21 05:14:30 william Exp $";
  #endif
  
--- 25,29 ----
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/text.c,v 2.111 1992/12/20 01:34:19 william Exp $";
  #endif
  
***************
*** 1969,1972 ****
--- 1969,1974 ----
     ScrollTo (textCurX, textCurY);
  }
+ 
+ #define TGIF_HEADER 0x80
   
  static XComposeStatus	c_stat;
***************
*** 1975,1981 ****
     XEvent	* input;
  {
!    char			s[80];
!    XKeyEvent		* key_ev;
!    KeySym		key_sym;
  
     if (input->type == ButtonPress)
--- 1977,1983 ----
     XEvent	* input;
  {
!    char		s[80];
!    XKeyEvent	* key_ev;
!    KeySym	key_sym;
  
     if (input->type == ButtonPress)
***************
*** 1984,1987 ****
--- 1986,2027 ----
     {
        if (!textCursorShown) return;
+ 
+       if (pasteInDrawTextMode)
+       {
+          char	* c_ptr, * cut_buffer;
+          int	len;
+ 
+          pasteInDrawTextMode = FALSE;
+          cut_buffer = (char *) XFetchBytes (mainDisplay, &len);
+          if (len == 0) { Msg ("Cut buffer is empty."); return; }
+ 
+          if (escPressed)
+          {
+             escPressed = FALSE;
+             Msg ("An <ESC> key press is ignored.");
+          }
+          s[1] = '\0';
+          EraseTextCursor ();
+          for (c_ptr = cut_buffer; *c_ptr != '\0'; c_ptr++)
+          {
+             s[0] = *c_ptr;
+             switch (s[0])
+             {
+                case '\r':
+                case '\n': HandleCRLF (colorIndex); break;
+ 
+                case '\177': Msg ("Can not paste <DEL>."); break;
+                case '\b': Msg ("Can not paste <BS>."); break;
+                case '\033': Msg ("Can not paste <ESC>."); break;
+                case '\t': Msg ("Can not paste <TAB>."); break;
+ 
+                default: HandleChar (s, colorIndex); break;
+             }
+          }
+          PutTextCursor ();
+          MarkRulers (textCurX, textCurY);
+          SetFileModified (TRUE);
+          return;
+       }
  
        key_ev = &(input->xkey);
*** xbitmap.c.orig	Wed Jan  6 22:08:31 1993
--- xbitmap.c	Wed Jan  6 22:08:33 1993
***************
*** 25,29 ****
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/xbitmap.c,v 2.116 1992/11/24 06:02:46 william Exp $";
  #endif
  
--- 25,29 ----
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/xbitmap.c,v 2.117 1993/01/03 22:51:20 william Exp $";
  #endif
  
***************
*** 2373,2379 ****
     xbm_ptr->cached_zoom = 0;
     if (xbm_ptr->data != NULL) cfree (xbm_ptr->data);
     if (xbm_ptr->real_type == XBM_EPS)
     {
-       if (xbm_ptr->filename != NULL) cfree (xbm_ptr->filename);
        for (i = 0; i < xbm_ptr->num_epsf_lines; i++)
           if (xbm_ptr->epsflines[i] != NULL)
--- 2373,2379 ----
     xbm_ptr->cached_zoom = 0;
     if (xbm_ptr->data != NULL) cfree (xbm_ptr->data);
+    if (xbm_ptr->filename != NULL) cfree (xbm_ptr->filename);
     if (xbm_ptr->real_type == XBM_EPS)
     {
        for (i = 0; i < xbm_ptr->num_epsf_lines; i++)
           if (xbm_ptr->epsflines[i] != NULL)
*** xpixmap.c.orig	Wed Jan  6 22:08:40 1993
--- xpixmap.c	Wed Jan  6 22:08:42 1993
***************
*** 25,29 ****
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/xpixmap.c,v 2.119 1992/11/26 23:48:45 william Exp $";
  #endif
  
--- 25,29 ----
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/xpixmap.c,v 2.120 1992/12/18 05:34:11 william Exp $";
  #endif
  
***************
*** 935,942 ****
              fprintf (FP, "%c", hexValue[(pixel_index>>4)&0x0f]);
              fprintf (FP, "%c", hexValue[pixel_index&0x0f]);
!             if (col%36 == 35) fprintf (FP, "\n   ");
           }
           if (col%36 != 0) fprintf (FP, "\n");
!          if (row != image_h-1) fprintf (FP, "   ");
        }
     }
--- 935,944 ----
              fprintf (FP, "%c", hexValue[(pixel_index>>4)&0x0f]);
              fprintf (FP, "%c", hexValue[pixel_index&0x0f]);
!             if (col%36 == 35)
!                fprintf (FP, "\n%s",
!                      (col==image_w-1 && row==image_h-1) ? "" : "   ");
           }
           if (col%36 != 0) fprintf (FP, "\n");
!          if (row != image_h-1 && (col%36) != 0) fprintf (FP, "   ");
        }
     }
*** copypaste.e.orig	Wed Jan  6 22:08:44 1993
--- copypaste.e	Wed Jan  6 22:08:45 1993
***************
*** 24,28 ****
   * Copyright (C) 1990, 1991, 1992, William Cheng.
   *
!  * @(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/copypaste.e,v 2.6 1992/03/31 07:59:57 william Exp $
   */
  
--- 24,28 ----
   * Copyright (C) 1990, 1991, 1992, William Cheng.
   *
!  * @(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/copypaste.e,v 2.7 1992/12/20 00:54:04 william Exp $
   */
  
***************
*** 30,33 ****
  
  extern void	CopyToCutBuffer ();
! extern void	PasteFromCutBuffer ();
  extern void	CleanUpCutBuffer ();
--- 30,33 ----
  
  extern void	CopyToCutBuffer ();
! extern int	PasteFromCutBuffer ();
  extern void	CleanUpCutBuffer ();
*** drawing.e.orig	Wed Jan  6 22:08:47 1993
--- drawing.e	Wed Jan  6 22:08:48 1993
***************
*** 23,29 ****
   * PERFORMANCE OF THIS SOFTWARE.
   *
!  * @(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/drawing.e,v 2.9 1992/08/11 03:58:27 william Exp $
   */
  
  extern int	numRedrawBBox;
  extern int	numClipRecs;
--- 23,31 ----
   * PERFORMANCE OF THIS SOFTWARE.
   *
!  * @(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/drawing.e,v 2.14 1992/12/21 00:51:44 william Exp $
   */
  
+ extern int	intrCheckInterval;
+ extern int	pasteInDrawTextMode;
  extern int	numRedrawBBox;
  extern int	numClipRecs;
***************
*** 33,37 ****
  extern void	SetDefaultDrawWinClipRecs ();
  extern void	SetDefaultIconWinClipRecs ();
! extern void	DrawObj ();
  extern void	DrawPaperBoundary ();
  extern void	RedrawAnArea ();
--- 35,43 ----
  extern void	SetDefaultDrawWinClipRecs ();
  extern void	SetDefaultIconWinClipRecs ();
! extern void	ShowInterrupt ();
! extern void	HideInterrupt ();
! extern void	RedrawDummyWindow1 ();
! extern int	CheckInterrupt ();
! extern int	DrawObj ();
  extern void	DrawPaperBoundary ();
  extern void	RedrawAnArea ();
*** raster.e.orig	Wed Jan  6 22:08:52 1993
--- raster.e	Wed Jan  6 22:08:52 1993
***************
*** 23,27 ****
   * PERFORMANCE OF THIS SOFTWARE.
   *
!  * @(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/raster.e,v 2.24 1992/03/31 08:02:16 william Exp $
   */
  
--- 23,27 ----
   * PERFORMANCE OF THIS SOFTWARE.
   *
!  * @(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/raster.e,v 2.25 1992/12/21 00:25:13 william Exp $
   */
  
***************
*** 55,58 ****
--- 55,59 ----
  extern Pixmap	moveModePixmap[];
  extern Pixmap	editPixmap;
+ extern Pixmap	intrPixmap;
  
  extern Pixmap	rotatePixmap[];
*** setup.e.orig	Wed Jan  6 22:08:55 1993
--- setup.e	Wed Jan  6 22:08:55 1993
***************
*** 23,27 ****
   * PERFORMANCE OF THIS SOFTWARE.
   *
!  * @(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/setup.e,v 2.13 1992/03/31 08:02:48 william Exp $
   */
  
--- 23,27 ----
   * PERFORMANCE OF THIS SOFTWARE.
   *
!  * @(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/setup.e,v 2.14 1992/12/21 00:20:18 william Exp $
   */
  
***************
*** 64,67 ****
--- 64,68 ----
  extern Window	iconWindow;
  extern Window	iconBaseWindow;
+ extern Window	dummyWindow1, dummyWindow2;
  
  extern int	paperWidth;
*** patchlevel.h.orig	Wed Jan  6 22:08:58 1993
--- patchlevel.h	Wed Jan  6 22:08:59 1993
***************
*** 23,28 ****
   * PERFORMANCE OF THIS SOFTWARE.
   *
!  * @(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/patchlevel.h,v 2.29.1.4 1992/11/29 01:49:45 william Exp $
   */
  
! #define TGIF_PATCHLEVEL 15
--- 23,28 ----
   * PERFORMANCE OF THIS SOFTWARE.
   *
!  * @(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/patchlevel.h,v 2.29.1.5 1992/12/14 06:33:01 william Exp $
   */
  
! #define TGIF_PATCHLEVEL 16
*** types.h.orig	Wed Jan  6 22:09:02 1993
--- types.h	Wed Jan  6 22:09:03 1993
***************
*** 23,27 ****
   * PERFORMANCE OF THIS SOFTWARE.
   *
!  * @(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/types.h,v 2.71 1992/08/08 08:27:29 william Exp $
   */
  
--- 23,27 ----
   * PERFORMANCE OF THIS SOFTWARE.
   *
!  * @(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/types.h,v 2.71.1.1 1993/01/03 23:23:40 william Exp $
   */
  
***************
*** 78,82 ****
     int			n;	/* number of points in the polyline */
     XPoint		* vlist;
-    XPoint		* rvlist; /* rotated vlist */
     int			sn;	/* number of points in the spline polyline */
     XPoint		* svlist;
--- 78,81 ----
***************
*** 89,93 ****
     int			n;	/* number of points in the polygon */
     XPoint		* vlist;
-    XPoint		* rvlist; /* rotated vlist */
     int			sn;	/* number of points in the spline polygon */
     XPoint		* svlist;
--- 88,91 ----
***************
*** 97,101 ****
  typedef struct BoxRec {
     int		fill, width, pen, dash;
-    XPoint	* rvlist; /* rotated vlist */
  } * BoxRecPtr;
  
--- 95,98 ----
***************
*** 179,183 ****
  typedef struct RCBoxRec {
     int		fill, width, pen, dash, radius;
-    XPoint	* rvlist; /* rotated vlist */
  } * RCBoxRecPtr;
  
--- 176,179 ----
*** Makefile.noimake.orig	Wed Jan  6 22:09:06 1993
--- Makefile.noimake	Wed Jan  6 22:09:08 1993
***************
*** 23,27 ****
  # PERFORMANCE OF THIS SOFTWARE.
  #
! # @(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/Makefile.noimake,v 2.131.1.8 1992/11/29 07:09:55 william Exp $
  #
  
--- 23,27 ----
  # PERFORMANCE OF THIS SOFTWARE.
  #
! # @(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/Makefile.noimake,v 2.131.1.12 1993/01/03 01:48:39 william Exp $
  #
  
***************
*** 157,160 ****
--- 157,161 ----
  	\
  	xbm/rcbradius.xbm xbm/const_move.xbm xbm/unconst_move.xbm \
+ 	xbm/edit.xbm xbm/intr.xbm \
  	\
  	xbm/rotate_0.xbm xbm/rotate_90.xbm xbm/rotate_180.xbm xbm/rotate_270.xbm
***************
*** 212,217 ****
  		select.e setup.e text.e xpixmap.e
  copypaste.o:	const.h types.h \
! 		auxtext.e box.e choice.e cmd.e color.e cursor.e dup.e file.e \
! 		font.e move.e obj.e pattern.e select.e setup.e special.e text.e
  cursor.o:	const.h types.h $(CURSOR_BM) \
  		choice.e color.e setup.e xbitmap.e
--- 213,219 ----
  		select.e setup.e text.e xpixmap.e
  copypaste.o:	const.h types.h \
! 		auxtext.e box.e choice.e cmd.e color.e cursor.e drawing.e \
! 		dup.e file.e font.e move.e obj.e pattern.e select.e setup.e \
! 		special.e text.e
  cursor.o:	const.h types.h $(CURSOR_BM) \
  		choice.e color.e setup.e xbitmap.e
*** Imakefile.orig	Wed Jan  6 22:09:11 1993
--- Imakefile	Wed Jan  6 22:09:12 1993
***************
*** 23,30 ****
  /**/# PERFORMANCE OF THIS SOFTWARE.
  /**/#
! /**/# @(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/Imakefile,v 2.84.1.8 1992/12/07 00:27:40 william Exp $
  /**/#
  
! TGIFVERSION	= 2.12-p15
  PROGRAMS	= tgif prtgif /**/#frontend11.o testdrive
  /**/#CDEBUGFLAGS= -g
--- 23,30 ----
  /**/# PERFORMANCE OF THIS SOFTWARE.
  /**/#
! /**/# @(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/Imakefile,v 2.84.1.9 1992/12/21 01:46:05 william Exp $
  /**/#
  
! TGIFVERSION	= 2.12-p16
  PROGRAMS	= tgif prtgif /**/#frontend11.o testdrive
  /**/#CDEBUGFLAGS= -g
*** tgif.man.orig	Wed Jan  6 22:09:17 1993
--- tgif.man	Wed Jan  6 22:09:20 1993
***************
*** 1,4 ****
! .\"@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/tgif.man,v 2.132 1992/11/29 23:58:54 william Exp $
! .TH TGIF n "Version 2.12-p15 and Above" "Tgif"
  .SH NAME
  \fItgif\fR \- Xlib based interactive 2-D drawing facility under X11.
--- 1,4 ----
! .\"@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/tgif.man,v 2.136 1992/12/22 05:36:07 william Exp $
! .TH TGIF n "Version 2.12-p16 and Above" "Tgif"
  .SH NAME
  \fItgif\fR \- Xlib based interactive 2-D drawing facility under X11.
***************
*** 423,426 ****
--- 423,437 ----
  units any more.
  .TP
+ .I Interrupt Window
+ .br
+ This window is right below the Message Window and to the left of the
+ horizontal ruler.  When the Tgif*IntrCheckInterval X default has a
+ positive value, an interrupt icon is visible when the Canvas Window
+ is being redrawn.  If the user clicks on this window when the
+ interrupt icon is visible, tgif aborts the repainting of the objects.
+ If this is done when a file is being opened (either through Open()
+ or Push()), the drawing of objects is stopped, but the reading of
+ the file continues (reading of the file is not aborted).
+ .TP
  .I Popup Menus
  .br
***************
*** 1251,1254 ****
--- 1262,1270 ----
  (which is 128/72).
  The default value is 1.
+ .TP
+ .I Tgif*IntrCheckInterval: NUMBER
+ This specifies the number of objects drawn before tgif checks for
+ interrupts.  If this is set to be 0 or less, interrupt is not allowed.
+ The default value is 10.
  .TP
  .I Tgif*MaxColors: NUMBER
*** HISTORY.orig	Wed Jan  6 22:09:28 1993
--- HISTORY	Wed Jan  6 22:09:29 1993
***************
*** 1,5 ****
  /*
!  *  @(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/HISTORY,v 2.39 1992/12/07 00:58:38 william Exp $
   */
  -----------------------> tgif-2.12-p14 => tgif-2.12-p15 <-----------------------
  I've just put tgif-2.12-patch15 (15 patch for tgif-2.12) in the
--- 1,26 ----
  /*
!  *  @(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/HISTORY,v 2.40 1993/01/04 01:06:09 william Exp $
   */
+ -----------------------> tgif-2.12-p15 => tgif-2.12-p16 <-----------------------
+ I've just put tgif-2.12-patch16 (16 patch for tgif-2.12) in the
+ following places for anonymous ftp:
+ 
+ 	export.lcs.mit.edu:/contrib/tgif-2.12-patch16.Z
+ 	cs.ucla.edu:/pub/tgif/tgif-2.12-patch16.Z
+ 
+ The patch is also posted to comp.sources.bugs.
+ 
+ Please uncompress and then apply the patch with
+ 'patch -p -N < tgif-2.12-patch16'.
+ Here's a short list of added features/bug fixes.
+ 
+ 1)  Allow the launch= attribute to be multiline.
+ 2)  Make pasting work in text mode.  The default paste command is still
+     <Cntrl><Meta>y.
+ 3)  Add user interrupt when redrawing.  Add a new X default,
+     Tgif*IntrCheckInterval to define the number of objects drawn before
+     checking for user interrupt.
+ 4)  Fix some memory leaks.  Thanks to Mark Sterin <mark@FibHaifa.com> for
+     the fixes.
  -----------------------> tgif-2.12-p14 => tgif-2.12-p15 <-----------------------
  I've just put tgif-2.12-patch15 (15 patch for tgif-2.12) in the
*** descrip.mms.orig	Wed Jan  6 22:09:33 1993
--- descrip.mms	Wed Jan  6 22:09:34 1993
***************
*** 6,10 ****
  ! $ DEFINE SYS SYS$LIBRARY
  !
! ! @(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/descrip.mms,v 2.124.1.6 1992/11/29 07:09:55 william Exp $
  !
  
--- 6,10 ----
  ! $ DEFINE SYS SYS$LIBRARY
  !
! ! @(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/descrip.mms,v 2.124.1.10 1993/01/03 01:49:13 william Exp $
  !
  
***************
*** 132,135 ****
--- 132,136 ----
  	-
  	xbm/rcbradius.xbm,xbm/const_move.xbm,xbm/unconst_move.xbm,-
+ 	xbm/edit.xbm,xbm/intr.xbm,-
  	-
  	xbm/rotate_0.xbm,xbm/rotate_90.xbm,xbm/rotate_180.xbm,xbm/rotate_270.xbm
***************
*** 186,191 ****
  		select.e,setup.e,text.e,xpixmap.e
  copypaste.obj depends_on copypaste.c,	const.h,types.h,-
! 		auxtext.e,box.e,choice.e,cmd.e,color.e,cursor.e,dup.e,file.e,-
! 		font.e,move.e,obj.e,pattern.e,select.e,setup.e,special.e,text.e
  cursor.obj depends_on cursor.c,		const.h,types.h,$(CURSOR_BM),-
  		choice.e,color.e,setup.e,xbitmap.e
--- 187,193 ----
  		select.e,setup.e,text.e,xpixmap.e
  copypaste.obj depends_on copypaste.c,	const.h,types.h,-
! 		auxtext.e,box.e,choice.e,cmd.e,color.e,cursor.e,drawing.e,-
! 		dup.e,file.e,font.e,move.e,obj.e,pattern.e,select.e,setup.e,-
! 		special.e,text.e
  cursor.obj depends_on cursor.c,		const.h,types.h,$(CURSOR_BM),-
  		choice.e,color.e,setup.e,xbitmap.e
*** xbm/intr.xbm.orig	Wed Jan  6 22:09:36 1993
--- xbm/intr.xbm	Wed Jan  6 22:09:37 1993
***************
*** 0 ****
--- 1,11 ----
+ /*
+  * @(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/xbm/RCS/intr.xbm,v 2.0 1992/12/21 02:19:11 william Exp $
+  */
+ #define intr_width 16
+ #define intr_height 16
+ #define intr_x_hot 0
+ #define intr_y_hot 0
+ static char intr_bits[] = {
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xe0,
+    0x00, 0xf8, 0x00, 0xf0, 0xc0, 0xf9, 0xe0, 0x99, 0xe0, 0x0d, 0xb0, 0x0f,
+    0x98, 0x07, 0x9c, 0x03, 0x0c, 0x00, 0x00, 0x00};
*** tgif.Xdefaults.orig	Wed Jan  6 22:09:39 1993
--- tgif.Xdefaults	Wed Jan  6 22:09:39 1993
***************
*** 3,7 ****
  ! suitable for appending to any .Xdefaults file.
  !
! ! @(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/tgif.Xdefaults,v 2.30 1992/11/24 03:51:15 william Exp $
  !
  Tgif*Geometry:			640x512-40+20
--- 3,7 ----
  ! suitable for appending to any .Xdefaults file.
  !
! ! @(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/tgif.Xdefaults,v 2.32 1992/12/21 01:36:41 william Exp $
  !
  Tgif*Geometry:			640x512-40+20
***************
*** 86,89 ****
--- 86,90 ----
  Tgif*DefaultEPSScaling:		1
  !Tgif*DefaultEPSScaling:	1.7778
+ Tgif*IntrCheckInterval:		10
  !
  Tgif*MaxColors:			11
*** launch-demo-1.obj.orig	Wed Jan  6 22:09:41 1993
--- launch-demo-1.obj	Wed Jan  6 22:09:42 1993
***************
*** 1,6 ****
! %TGIF 2.12-p15
  state(0,27,100,0,0,0,8,1,0,2,0,0,0,1,0,1,0,0,0,3,1,0,0,10,0,0,1,1,0,16,1).
  %
! % @(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/launch-demo-1.obj,v 2.0 1992/12/07 00:24:47 william Exp $
  % %W%
  %
--- 1,6 ----
! %TGIF 2.12-p16
  state(0,27,100,0,0,0,8,1,0,2,0,0,0,1,0,1,0,0,0,3,1,0,0,10,0,0,1,1,0,16,1).
  %
! % @(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/launch-demo-1.obj,v 2.1 1993/01/04 02:28:39 william Exp $
  % %W%
  %
***************
*** 34,46 ****
  ]).
  group([
! text('green',88,320,0,0,3,7,0,0,1,292,166,648,1,18,4,0,2,0,0,[
  	"To get a fancier look.  Select an",
  	"object and type <Meta>m.",
! 	"Then use left button to get a popup",
! 	"menu; select an attribute; click right",
! 	"button to hide the attribute or click",
! 	"the middle button to hide the attribute",
  	"name."]),
! text('green',64,320,0,0,3,1,0,0,1,16,22,649,1,18,4,0,0,0,0,[
  	"3)"])
  ],
--- 34,47 ----
  ]).
  group([
! text('green',88,312,0,0,3,8,0,0,1,246,190,648,1,18,4,0,2,0,0,[
  	"To get a fancier look.  Select an",
  	"object and type <Meta>m.",
! 	"Then use left button to get a",
! 	"popup menu; select an attribute;",
! 	"click right button to hide the",
! 	"attribute or click the middle",
! 	"button to hide the attribute",
  	"name."]),
! text('green',64,312,0,0,3,1,0,0,1,16,22,649,1,18,4,0,0,0,0,[
  	"3)"])
  ],
***************
*** 84,86 ****
--- 85,132 ----
  text('blue',512,128,2,0,5,1,1,0,1,166,29,54,0,24,5,0,0,0,0,[
  	"name=example"]))
+ ]).
+ group([
+ polygon('cyan',5,[
+ 	502,448,493,480,547,480,556,448,502,448],2,1,0,0,1465,0,0,0,[
+ ]),
+ polygon('cyan',5,[
+ 	493,480,484,512,538,512,547,480,493,480],2,1,0,0,1466,0,0,0,[
+ ]),
+ poly('cyan',2,[
+ 	502,448,556,448],0,1,1,1467,0,0,0,0,8,3,0,[
+ ]),
+ poly('cyan',2,[
+ 	484,512,538,512],0,1,1,1468,0,0,0,0,8,3,0,[
+ ]),
+ poly('cyan',3,[
+ 	502,448,484,464,493,480],0,1,1,1469,1,2,0,0,8,3,0,[
+ ]),
+ poly('cyan',3,[
+ 	484,512,502,496,493,480],0,1,1,1470,1,2,0,0,8,3,0,[
+ ]),
+ poly('cyan',3,[
+ 	556,448,538,464,547,480],0,1,1,1471,1,2,0,0,8,3,0,[
+ ]),
+ poly('cyan',3,[
+ 	538,512,556,496,547,480],0,1,1,1472,1,2,0,0,8,3,0,[
+ ])
+ ],
+ 1464,0,[
+ attr("page=", "1", 1, 1, 0,
+ text('magenta',520,452,2,2,5,1,1,0,1,82,29,1473,0,24,5,0,0,0,0,[
+ 	"page=1"])),
+ attr("dir=", "/u/tangram/u/william/X11/TGIF2", 1, 1, 0,
+ text('yellow',520,512,0,0,3,1,1,0,1,289,22,1474,1,18,4,0,0,0,0,[
+ 	"dir=/u/tangram/u/william/X11/TGIF2"])),
+ attr("launch=", "cd $(dir);", 1, 1, 0,
+ text('yellow',512,384,0,0,3,3,1,0,1,370,66,1475,1,18,4,0,0,0,0,[
+ 	"launch=cd $(dir);",
+ 	"dvips -N -n 1 -p $(page) $(name) > $(tmpfile);",
+ 	"xterm -geom 40x8+200+400 -e gs $(tmpfile) &"])),
+ attr("name=", "example", 1, 1, 0,
+ text('green',524,476,2,0,5,1,1,0,1,166,29,1476,0,24,5,0,0,0,0,[
+ 	"name=example"])),
+ attr("tmpfile=", "/tmp/tgif.ps", 1, 1, 0,
+ text('yellow',520,536,0,0,3,1,1,0,1,151,22,1551,1,18,4,0,0,0,0,[
+ 	"tmpfile=/tmp/tgif.ps"]))
  ]).
---------------------------------> cut here <---------------------------------
-- 
Bill Cheng // UCLA Computer Science Department // (310) 645-8328
3564-C Boelter Hall // Los Angeles, California 90024 // USA
william@CS.UCLA.EDU      ...!{uunet|ucbvax}!cs.ucla.edu!william
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads