🚀 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 Sat, 08 Aug 1992 21:33
Tgif-2.12-patch10 (10th patch for tgif-2.12), Part 01/01
#17
Author: William Cheng
Date: Sat, 08 Aug 1992 21:33
1694 lines
55135 bytes
Below is tgif-2.12-patch10 (10th patch for tgif-2.12).  (Sources for
tgif-2.12 at patchlevel 7, the 8th patch, and the 9th patch can be found in
the /contrib directory on export.lcs.mit.edu and in the /pub/tgif directory
on cs.ucla.edu.)

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

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

1)  Fix a bug that causes seg fault when moving from attribute to attribute
    using <Shift><Tab> (feature introduced in patchlevel 8).
2)  Add a new command, SaveSymInLibrary(), under the FileMenu to save a symbol
    (.sym) file.  This will prompt the user to pick a library directory from
    the current domain for saving the symbol file.
3)  Add a compile option USE_XAPPLRESDIR to tell tgif to look at the
    XAPPLRESDIR environment variable first and try to locate the tgif
    resources if XENVIRONMENT is not set.  However, if you machine doesn't
    support putenv() (such as IBM-RT), then this won't work.  Thanks to
    Jaap Haalboom <haalboom@prl.philips.nl> for the suggestion and the code.
4)  Add -gray and -adobe command line options to prtgif.  They have
    the same effects as setting the Tgif*UseGrayScale and Tgif*UsePsAdobeString
    X defaults to ``true'' (prtgif does not read X defaults).
5)  Allow prtgif to specify a symbol file name.
6)  Try to generate a more compact xbm or xpm file when the bounding box can
    be figured out exactly.

Please send bug reports to william@cs.ucla.edu.
---------------------------------> cut here <---------------------------------
*** auxtext.c.orig	Sat Aug  8 13:20:03 1992
--- auxtext.c	Sat Aug  8 13:20:04 1992
***************
*** 25,29 ****
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/auxtext.c,v 2.25 1992/06/26 05:21:19 william Exp $";
  #endif
  
--- 25,29 ----
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/auxtext.c,v 2.28 1992/08/08 08:28:04 william Exp $";
  #endif
  
***************
*** 464,468 ****
     register struct AttrRec      * attr_ptr;
     struct ObjRec      		* found_text_obj;
!    struct SelRec      		* sel_ptr, * next_sel;
  
     for (obj_ptr=ObjPtr->detail.r->first; obj_ptr!=NULL; obj_ptr=obj_ptr->next)
--- 464,468 ----
     register struct AttrRec      * attr_ptr;
     struct ObjRec      		* found_text_obj;
!    struct SelRec      		* sel_ptr;
  
     for (obj_ptr=ObjPtr->detail.r->first; obj_ptr!=NULL; obj_ptr=obj_ptr->next)
***************
*** 508,511 ****
--- 508,512 ----
              }
        }
+    return (NULL);
  }
  
*** choice.c.orig	Sat Aug  8 13:20:10 1992
--- choice.c	Sat Aug  8 13:20:12 1992
***************
*** 25,29 ****
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/choice.c,v 2.56 1992/06/19 18:10:16 william Exp $";
  #endif
  
--- 25,29 ----
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/choice.c,v 2.58 1992/08/08 08:25:43 william Exp $";
  #endif
  
*** copypaste.c.orig	Sat Aug  8 13:20:17 1992
--- copypaste.c	Sat Aug  8 13:20:18 1992
***************
*** 26,30 ****
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/copypaste.c,v 2.28 1992/03/31 07:51:49 william Exp $";
  #endif
  
--- 26,30 ----
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/copypaste.c,v 2.30 1992/08/08 08:25:48 william Exp $";
  #endif
  
*** drawing.c.orig	Sat Aug  8 13:20:25 1992
--- drawing.c	Sat Aug  8 13:20:28 1992
***************
*** 25,29 ****
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/drawing.c,v 2.112 1992/06/19 18:09:08 william Exp $";
  #endif
  
--- 25,29 ----
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/drawing.c,v 2.114 1992/07/24 05:20:38 william Exp $";
  #endif
  
***************
*** 468,471 ****
--- 468,579 ----
  }
  
+ static
+ void GetBetterBBox (ObjPtr, LtX, LtY, RbX, RbY)
+    struct ObjRec	* ObjPtr;
+    int			*LtX, *LtY, *RbX, *RbY;
+ {
+    int			w=0, ltx, lty, rbx, rby, style=INVALID;
+    struct ObjRec	* obj_ptr;
+    struct AttrRec	* attr_ptr;
+ 
+    if (ObjPtr->bbox.ltx < *LtX || ObjPtr->bbox.lty < *LtY ||
+          ObjPtr->bbox.rbx > *RbX || ObjPtr->bbox.rby > *RbY)
+    {
+       switch (ObjPtr->type)
+       {
+          case OBJ_POLY:
+             w = ObjPtr->detail.p->width;
+             style = ObjPtr->detail.p->style;
+             break;
+          case OBJ_ARC:
+             w = ObjPtr->detail.a->width;
+             style = ObjPtr->detail.a->style;
+             break;
+          case OBJ_BOX: w = ObjPtr->detail.b->width; break;
+          case OBJ_OVAL: w = ObjPtr->detail.o->width; break;
+          case OBJ_POLYGON: w = ObjPtr->detail.g->width; break;
+          case OBJ_RCBOX: w = ObjPtr->detail.rcb->width; break;
+ 
+          case OBJ_TEXT:
+             ltx = ObjPtr->bbox.ltx; lty = ObjPtr->bbox.lty;
+             rbx = ObjPtr->bbox.rbx; rby = ObjPtr->bbox.rby;
+             break;
+ 
+          case OBJ_XBM:
+          case OBJ_XPM:
+             ltx = ObjPtr->bbox.ltx;   lty = ObjPtr->bbox.lty;
+             rbx = ObjPtr->bbox.rbx-1; rby = ObjPtr->bbox.rby-1;
+             break;
+ 
+          case OBJ_GROUP:
+          case OBJ_ICON:
+          case OBJ_SYM:
+             obj_ptr = ObjPtr->detail.r->last;
+             ltx = obj_ptr->bbox.rbx; lty = obj_ptr->bbox.rby;
+             rbx = obj_ptr->bbox.ltx; rby = obj_ptr->bbox.lty;
+             for ( ; obj_ptr != NULL; obj_ptr = obj_ptr->prev)
+                GetBetterBBox (obj_ptr, &ltx, &lty, &rbx, &rby);
+             break;
+       }
+       switch (ObjPtr->type)
+       {
+          case OBJ_POLY:
+          case OBJ_ARC:
+             if (((ObjPtr->type==OBJ_POLY && style==LS_PLAIN) ||
+                   (ObjPtr->type==OBJ_ARC && style==LS_PLAIN)) && (w & 0x1))
+             {
+                w = (w-1)>>1;
+                ltx = ObjPtr->obbox.ltx-w; lty = ObjPtr->obbox.lty-w;
+                rbx = ObjPtr->obbox.rbx+w; rby = ObjPtr->obbox.rby+w;
+             }
+             else
+             {
+                ltx = ObjPtr->bbox.ltx; lty = ObjPtr->bbox.lty;
+                rbx = ObjPtr->bbox.rbx; rby = ObjPtr->bbox.rby;
+             }
+             break;
+ 
+          case OBJ_BOX:
+          case OBJ_OVAL:
+          case OBJ_POLYGON:
+          case OBJ_RCBOX:
+             if (w & 0x1)
+             {
+                w = (w-1)>>1;
+                ltx = ObjPtr->obbox.ltx-w; lty = ObjPtr->obbox.lty-w;
+                rbx = ObjPtr->obbox.rbx+w; rby = ObjPtr->obbox.rby+w;
+             }
+             else
+             {
+                ltx = ObjPtr->bbox.ltx; lty = ObjPtr->bbox.lty;
+                rbx = ObjPtr->bbox.rbx; rby = ObjPtr->bbox.rby;
+             }
+             break;
+       }
+       for (attr_ptr=ObjPtr->lattr; attr_ptr!=NULL; attr_ptr=attr_ptr->prev)
+          if (attr_ptr->shown)
+          {
+             if (attr_ptr->obj->bbox.ltx < ltx) ltx = attr_ptr->obj->bbox.ltx;
+             if (attr_ptr->obj->bbox.lty < lty) lty = attr_ptr->obj->bbox.lty;
+             if (attr_ptr->obj->bbox.rbx > rbx) rbx = attr_ptr->obj->bbox.rbx;
+             if (attr_ptr->obj->bbox.rby > rby) rby = attr_ptr->obj->bbox.rby;
+          }
+       if (ObjPtr->type == OBJ_SYM)
+       {
+          if (ObjPtr->obbox.ltx-QUARTER_INCH < ltx)
+             ltx = ObjPtr->obbox.ltx - QUARTER_INCH;
+          if (ObjPtr->obbox.lty-QUARTER_INCH < lty)
+             lty = ObjPtr->obbox.lty - QUARTER_INCH;
+          if (ObjPtr->obbox.rbx+QUARTER_INCH > rbx)
+             rbx = ObjPtr->obbox.rbx + QUARTER_INCH;
+          if (ObjPtr->obbox.rby+QUARTER_INCH > rby)
+             rby = ObjPtr->obbox.rby + QUARTER_INCH;
+       }
+ 
+       if (ltx < *LtX) *LtX = ltx; if (lty < *LtY) *LtY = lty;
+       if (rbx > *RbX) *RbX = rbx; if (rby > *RbY) *RbY = rby;
+    }
+ }
+ 
  Pixmap DrawAllOnPixmap (LtX, LtY, W, H)
     int	*LtX, *LtY, *W, *H;
***************
*** 480,509 ****
     XGCValues			values;
  
!    ltx = botObj->bbox.ltx; lty = botObj->bbox.lty;
!    if (botObj->type == OBJ_XBM || botObj->type == OBJ_XPM)
!    {
!       rbx = botObj->bbox.rbx-1;
!       rby = botObj->bbox.rby-1;
!    }
!    else
!    {
!       rbx = botObj->bbox.rbx;
!       rby = botObj->bbox.rby;
!    }
!    for (obj_ptr = botObj->prev; obj_ptr != NULL; obj_ptr = obj_ptr->prev)
!    {
!       if (obj_ptr->bbox.ltx < ltx) ltx = obj_ptr->bbox.ltx;
!       if (obj_ptr->bbox.lty < lty) lty = obj_ptr->bbox.lty;
!       if (obj_ptr->type == OBJ_XBM || obj_ptr->type == OBJ_XPM)
!       {
!          if (obj_ptr->bbox.rbx-1 > rbx) rbx = obj_ptr->bbox.rbx-1;
!          if (obj_ptr->bbox.rby-1 > rby) rby = obj_ptr->bbox.rby-1;
!       }
!       else
!       {
!          if (obj_ptr->bbox.rbx > rbx) rbx = obj_ptr->bbox.rbx;
!          if (obj_ptr->bbox.rby > rby) rby = obj_ptr->bbox.rby;
!       }
!    }
     *W = w = rbx - ltx + 1;
     *H = h = rby - lty + 1;
--- 588,596 ----
     XGCValues			values;
  
!    ltx = botObj->bbox.rbx; lty = botObj->bbox.rby;
!    rbx = botObj->bbox.ltx; rby = botObj->bbox.lty;
!    for (obj_ptr = botObj; obj_ptr != NULL; obj_ptr = obj_ptr->prev)
!       GetBetterBBox (obj_ptr, &ltx, &lty, &rbx, &rby);
! 
     *W = w = rbx - ltx + 1;
     *H = h = rby - lty + 1;
***************
*** 804,807 ****
--- 891,896 ----
           else if (strcmp (name, "FreeHandMode()") == 0)
              SetCurChoice (FREEHAND);
+          else if (strcmp (name, "SaveSymInLibrary()") == 0)
+             SaveSymInLibrary ();
        }
        return (BAD);
*** dup.c.orig	Sat Aug  8 13:20:37 1992
--- dup.c	Sat Aug  8 13:20:39 1992
***************
*** 25,29 ****
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/dup.c,v 2.46 1992/03/31 07:52:24 william Exp $";
  #endif
  
--- 25,29 ----
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/dup.c,v 2.48 1992/08/08 08:26:09 william Exp $";
  #endif
  
*** edit.c.orig	Sat Aug  8 13:20:50 1992
--- edit.c	Sat Aug  8 13:20:54 1992
***************
*** 25,29 ****
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/edit.c,v 2.85 1992/06/18 21:03:26 william Exp $";
  #endif
  
--- 25,29 ----
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/edit.c,v 2.87 1992/08/08 08:26:16 william Exp $";
  #endif
  
*** file.c.orig	Sat Aug  8 13:21:07 1992
--- file.c	Sat Aug  8 13:21:13 1992
***************
*** 25,29 ****
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/file.c,v 2.182 1992/06/23 17:00:47 william Exp $";
  #endif
  
--- 25,29 ----
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/file.c,v 2.191 1992/08/08 19:53:29 william Exp $";
  #endif
  
***************
*** 89,93 ****
  
  int	PRTGIF = FALSE;
! char	curFileName[MAXPATHLENGTH];
  int	curFileDefined = FALSE;
  int	fileVersion = INVALID;
--- 89,93 ----
  
  int	PRTGIF = FALSE;
! char	curFileName[MAXPATHLENGTH+1];
  int	curFileDefined = FALSE;
  int	fileVersion = INVALID;
***************
*** 114,119 ****
  #endif /* A4PAPER */
  
! char	printCommand[MAXSTRING];
! char	outputDir[MAXPATHLENGTH];
  
  char	* savedComments=NULL;
--- 114,119 ----
  #endif /* A4PAPER */
  
! char	printCommand[MAXSTRING+1];
! char	outputDir[MAXPATHLENGTH+1];
  
  char	* savedComments=NULL;
***************
*** 290,294 ****
     /* return TRUE if file successfully saved */
  {
!    char			new_file_name[MAXPATHLENGTH], s[MAXPATHLENGTH], * rest;
     FILE			* fp;
     int			count = 0, status = INVALID, short_name;
--- 290,295 ----
     /* return TRUE if file successfully saved */
  {
!    char			new_file_name[MAXPATHLENGTH+1], s[MAXPATHLENGTH+1];
!    char			* rest;
     FILE			* fp;
     int			count = 0, status = INVALID, short_name;
***************
*** 355,367 ****
     int	SaveSelectedOnly;
  {
!    char			new_file_name[MAXPATHLENGTH], s[MAXPATHLENGTH];
!    char			new_full_name[MAXPATHLENGTH], tmp_str[MAXPATHLENGTH];
!    char			name_without_ext[MAXPATHLENGTH], * rest;
!    char			saved_cur_dir[MAXPATHLENGTH];
!    char			saved_cur_file_name[MAXPATHLENGTH];
!    char			obj_ext_str[MAXSTRING], sym_ext_str[MAXSTRING];
     int			saved_cur_file_defined=FALSE, obj_ext_len, sym_ext_len;
     FILE			* fp;
!    int			count = 0, len, short_name = FALSE;
     struct ObjRec	* obj_ptr, * saved_top_obj=NULL, * saved_bot_obj=NULL;
     struct SelRec	* top_sel_ptr, * bot_sel_ptr;
--- 356,369 ----
     int	SaveSelectedOnly;
  {
!    char			new_file_name[MAXPATHLENGTH+1], s[MAXPATHLENGTH+1];
!    char			new_full_name[MAXPATHLENGTH+1];
!    char			tmp_str[MAXPATHLENGTH+1];
!    char			name_without_ext[MAXPATHLENGTH+1], * rest;
!    char			saved_cur_dir[MAXPATHLENGTH+1];
!    char			saved_cur_file_name[MAXPATHLENGTH+1];
!    char			obj_ext_str[MAXSTRING+1], sym_ext_str[MAXSTRING+1];
     int			saved_cur_file_defined=FALSE, obj_ext_len, sym_ext_len;
     FILE			* fp;
!    int			count = 0, len, short_name=FALSE;
     struct ObjRec	* obj_ptr, * saved_top_obj=NULL, * saved_bot_obj=NULL;
     struct SelRec	* top_sel_ptr, * bot_sel_ptr;
***************
*** 557,560 ****
--- 559,685 ----
  }
  
+ void SaveSymInLibrary ()
+ {
+    char			new_file_name[MAXPATHLENGTH+1], s[MAXPATHLENGTH+1];
+    char			new_full_name[MAXPATHLENGTH+1];
+    char			dir_name[MAXPATHLENGTH+1];
+    char			saved_dir[MAXPATHLENGTH+1], saved_file[MAXPATHLENGTH+1];
+    char			saved_sym_dir[MAXPATHLENGTH+1];
+    char			name_without_ext[MAXPATHLENGTH+1], * rest;
+    char			sym_ext_str[MAXSTRING+1], * c_ptr;
+    FILE			* fp;
+    int			count=0, len, short_name=FALSE, sym_ext_len;
+    int			saved_cur_file_defined;
+    struct ObjRec	* obj_ptr;
+ 
+    for (obj_ptr = topObj; obj_ptr != NULL; obj_ptr = obj_ptr->next)
+       if (obj_ptr->type == OBJ_SYM) count++;
+ 
+    switch (count)
+    {
+       case 0: Msg ("No Symbol found!  Symbol file not saved."); return;
+       case 1: break;
+       default: Msg ("TOO MANY SYMBOLS!  Symbol file not saved."); return;
+    }
+ 
+    sprintf (sym_ext_str, ".%s", SYM_FILE_EXT);
+    sym_ext_len = strlen (sym_ext_str);
+ 
+    if (*curFileName == '\0')
+    {
+       Dialog ("Please Enter New File Name:", "( <CR>: accept, <ESC>: cancel )",
+             new_file_name);
+       if (*new_file_name == '\0') return;
+ 
+       len = strlen (new_file_name);
+       if (len >= sym_ext_len)
+       {
+          if (strcmp (&new_file_name[len-sym_ext_len], sym_ext_str) != 0)
+          {
+             strcpy (name_without_ext, new_file_name);
+             strcat (new_file_name, sym_ext_str);
+          }
+          else
+          {
+             strcpy (name_without_ext, new_file_name);
+             name_without_ext[len-sym_ext_len] = '\0';
+          }
+    
+          if (strlen (new_file_name) == sym_ext_len)
+          {
+             Msg ("No file name specified.  File not saved.");
+             return;
+          }
+       }
+       else
+       {
+          strcpy (name_without_ext, new_file_name);
+          strcat (new_file_name, sym_ext_str);
+       }
+    }
+    else
+    {
+       len = strlen (curFileName);
+       for (c_ptr=&curFileName[len-1]; c_ptr!=curFileName; c_ptr--)
+          if (*c_ptr == '/')
+             break;
+       if (*c_ptr == '/') c_ptr++;
+       strcpy (new_file_name, c_ptr);
+    }
+ 
+    if (SelectSymDir (dir_name) == INVALID) { Msg (""); return; }
+ 
+    if (strcmp (dir_name, ".") == 0)
+       sprintf (new_full_name, "%s/%s", curDir, new_file_name);
+    else
+       sprintf (new_full_name, "%s/%s", dir_name, new_file_name);
+ 
+    if (!OkayToCreateFile (new_full_name)) return;
+ 
+    if (short_name = IsPrefix (bootDir, new_full_name, &rest)) ++rest;
+    if ((fp = fopen (new_full_name, "w")) == NULL)
+    {
+       if (short_name)
+          sprintf (s, "Can not open '%s', file not saved.", rest);
+       else
+          sprintf (s, "Can not open '%s', file not saved.", new_full_name);
+       Msg (s);
+       return;
+    }
+ 
+    strcpy (saved_dir, curDir);
+    strcpy (saved_file, curFileName);
+    strcpy (saved_sym_dir, curSymDir);
+    saved_cur_file_defined = curFileDefined;
+    SetCurDir (new_full_name);
+    curFileDefined = TRUE;
+ 
+    strcpy (curSymDir, curDir);
+    if (!DirInSymPath (curDir)) UpdateSymInfo ();
+ 
+    if (short_name)
+       sprintf (s, "Saving '%s' ...", rest);
+    else
+       sprintf (s, "Saving '%s' ...", new_full_name);
+    Msg (s);
+ 
+    if (!saveCommentsInSaveNew) CleanUpComments ();
+    Save (fp, botObj, 0);
+    fclose (fp);
+ 
+    if (short_name)
+       sprintf (s, "File '%s' saved.", rest);
+    else
+       sprintf (s, "File '%s' saved.", new_full_name);
+    Msg (s);
+ 
+    strcpy (curDir, saved_dir);
+    strcpy (curFileName, saved_file);
+    strcpy (curSymDir, saved_sym_dir);
+    curFileDefined = saved_cur_file_defined;
+ 
+    RedrawTitleWindow ();
+ }
+ 
  void SaveFile ()
  {
***************
*** 562,567 ****
     struct ObjRec	* obj_ptr;
     FILE			* fp;
!    char			ext[MAXPATHLENGTH], s[MAXPATHLENGTH];
!    char			full_name[MAXPATHLENGTH], * rest;
  
     if (!curFileDefined)
--- 687,692 ----
     struct ObjRec	* obj_ptr;
     FILE			* fp;
!    char			ext[MAXPATHLENGTH+1], s[MAXPATHLENGTH+1];
!    char			full_name[MAXPATHLENGTH+1], * rest;
  
     if (!curFileDefined)
***************
*** 682,686 ****
  {
     char	* s;
!    int	page_style;
  
     s = FindChar ('(', Inbuf);
--- 807,811 ----
  {
     char	* s;
!    int	page_style, forced_use_gray=FALSE;
  
     s = FindChar ('(', Inbuf);
***************
*** 716,721 ****
     }
  
!    if (PRTGIF) return (TRUE);
! 
     if (!importingFile)
     {
--- 841,845 ----
     }
  
!    if (PRTGIF && useGray) forced_use_gray = TRUE;
     if (!importingFile)
     {
***************
*** 989,992 ****
--- 1113,1121 ----
              GETVALUE(useGray,       "Use Gray Scale");
           }
+          if (PRTGIF)
+          {
+             if (forced_use_gray) useGray = TRUE;
+             return (TRUE);
+          }
  
           if (colorIndex >= maxColors)
***************
*** 1013,1016 ****
--- 1142,1147 ----
           }
        }
+       if (PRTGIF) return (TRUE);
+ 
        if (lineWidth >= maxLineWidths)
        {
***************
*** 1280,1286 ****
  void ChangeDomain ()
  {
!    char 	domain_name[MAXPATHLENGTH], env_str[MAXPATHLENGTH];
!    char 	s[MAXSTRING], s1[MAXSTRING], * c_ptr;
!    char 	cap_tool_name[MAXSTRING];
     XEvent	ev;
  
--- 1411,1417 ----
  void ChangeDomain ()
  {
!    char 	domain_name[MAXPATHLENGTH+1], env_str[MAXPATHLENGTH+1];
!    char 	s[MAXSTRING+1], s1[MAXSTRING+1], * c_ptr;
!    char 	cap_tool_name[MAXSTRING+1];
     XEvent	ev;
  
***************
*** 1331,1339 ****
  {
     struct ObjRec	* obj_ptr, * saved_top_obj, * saved_bot_obj;
!    char 		file_name[MAXPATHLENGTH], s[MAXPATHLENGTH], * rest;
     FILE			* fp;
     int			short_name, read_status;
     XEvent		ev;
!    char 		tmp_filename[MAXPATHLENGTH];
     int 			tmp_linenum;
  
--- 1462,1470 ----
  {
     struct ObjRec	* obj_ptr, * saved_top_obj, * saved_bot_obj;
!    char 		file_name[MAXPATHLENGTH+1], s[MAXPATHLENGTH+1], * rest;
     FILE			* fp;
     int			short_name, read_status;
     XEvent		ev;
!    char 		tmp_filename[MAXPATHLENGTH+1];
     int 			tmp_linenum;
  
***************
*** 1343,1347 ****
     if (importFromLibrary)
     {
!       char	name[MAXSTRING], path[MAXSTRING];
  
        if (SelectFromLibrary("Please select an object file to IMPORT...",
--- 1474,1478 ----
     if (importFromLibrary)
     {
!       char	name[MAXSTRING+1], path[MAXSTRING+1];
  
        if (SelectFromLibrary("Please select an object file to IMPORT...",
***************
*** 1450,1455 ****
  void ImportXBitmapFile ()
  {
!    char 		file_name[MAXPATHLENGTH], s[MAXPATHLENGTH], * rest;
!    char 		mag_spec[MAXSTRING], msg[MAXSTRING];
     unsigned int		tmp_w, tmp_h;
     int			rc, x_hot, y_hot, x, y, w, h, short_name;
--- 1581,1586 ----
  void ImportXBitmapFile ()
  {
!    char 		file_name[MAXPATHLENGTH+1], s[MAXPATHLENGTH+1], * rest;
!    char 		mag_spec[MAXSTRING+1], msg[MAXSTRING+1];
     unsigned int		tmp_w, tmp_h;
     int			rc, x_hot, y_hot, x, y, w, h, short_name;
***************
*** 1466,1470 ****
     if (importFromLibrary)
     {
!       char	name[MAXSTRING], path[MAXSTRING];
  
        if (SelectFromLibrary("Please select an XBitmap file to IMPORT...",
--- 1597,1601 ----
     if (importFromLibrary)
     {
!       char	name[MAXSTRING+1], path[MAXSTRING+1];
  
        if (SelectFromLibrary("Please select an XBitmap file to IMPORT...",
***************
*** 1565,1569 ****
  void ImportXPixmapFile ()
  {
!    char 		file_name[MAXPATHLENGTH], s[MAXPATHLENGTH], * rest;
     int			rc, ncolors, chars_per_pixel, * pixels, short_name;
     int			first_pixel_is_bg, image_w, image_h, w, h;
--- 1696,1700 ----
  void ImportXPixmapFile ()
  {
!    char 		file_name[MAXPATHLENGTH+1], s[MAXPATHLENGTH+1], * rest;
     int			rc, ncolors, chars_per_pixel, * pixels, short_name;
     int			first_pixel_is_bg, image_w, image_h, w, h;
***************
*** 1579,1583 ****
     if (importFromLibrary)
     {
!       char	name[MAXSTRING], path[MAXSTRING];
  
        if (SelectFromLibrary("Please select an XPixmap file to IMPORT...",
--- 1710,1714 ----
     if (importFromLibrary)
     {
!       char	name[MAXSTRING+1], path[MAXSTRING+1];
  
        if (SelectFromLibrary("Please select an XPixmap file to IMPORT...",
***************
*** 1645,1649 ****
  void ImportEPSFile ()
  {
!    char 		file_name[MAXPATHLENGTH], s[MAXPATHLENGTH], * rest;
     char 		* * lines=NULL, write_date[32];
     int			rc, short_name, num_lines, epsf_level, image_w, image_h;
--- 1776,1780 ----
  void ImportEPSFile ()
  {
!    char 		file_name[MAXPATHLENGTH+1], s[MAXPATHLENGTH+1], * rest;
     char 		* * lines=NULL, write_date[32];
     int			rc, short_name, num_lines, epsf_level, image_w, image_h;
***************
*** 1659,1663 ****
     if (importFromLibrary)
     {
!       char	name[MAXSTRING], path[MAXSTRING];
  
        if (SelectFromLibrary("Please select an EPS file to IMPORT...",
--- 1790,1794 ----
     if (importFromLibrary)
     {
!       char	name[MAXSTRING+1], path[MAXSTRING+1];
  
        if (SelectFromLibrary("Please select an EPS file to IMPORT...",
***************
*** 1729,1737 ****
  {
     struct ObjRec	* obj_ptr;
!    char 		file_name[MAXPATHLENGTH], msg[MAXPATHLENGTH];
!    char 		saved_cur_dir[MAXPATHLENGTH], * rest;
     int			read_status, short_name;
     FILE			* fp;
!    char 		tmp_filename[MAXPATHLENGTH];
     int 			tmp_linenum;
  
--- 1860,1868 ----
  {
     struct ObjRec	* obj_ptr;
!    char 		file_name[MAXPATHLENGTH+1], msg[MAXPATHLENGTH+1];
!    char 		saved_cur_dir[MAXPATHLENGTH+1], * rest;
     int			read_status, short_name;
     FILE			* fp;
!    char 		tmp_filename[MAXPATHLENGTH+1];
     int 			tmp_linenum;
  
***************
*** 2013,2017 ****
     register int	i;
     int		len;
!    char		s[MAXPATHLENGTH];
  
     if (*outputDir == '\0') return;
--- 2144,2148 ----
     register int	i;
     int		len;
!    char		s[MAXPATHLENGTH+1];
  
     if (*outputDir == '\0') return;
***************
*** 2316,2324 ****
     char	* FileName;
  {
!    int	len, obj_ext_len;
!    char	obj_ext_str[MAXSTRING];
  
     sprintf (obj_ext_str, ".%s", OBJ_FILE_EXT);
     obj_ext_len = strlen (obj_ext_str);
  
     if (PRTGIF)
--- 2447,2457 ----
     char	* FileName;
  {
!    int	len, obj_ext_len, sym_ext_len;
!    char	obj_ext_str[MAXSTRING+1], sym_ext_str[MAXSTRING+1];
  
     sprintf (obj_ext_str, ".%s", OBJ_FILE_EXT);
     obj_ext_len = strlen (obj_ext_str);
+    sprintf (sym_ext_str, ".%s", SYM_FILE_EXT);
+    sym_ext_len = strlen (sym_ext_str);
  
     if (PRTGIF)
***************
*** 2325,2330 ****
     {
        len = strlen (FileName);
!       if (len >= obj_ext_len &&
!             strcmp (&FileName[len-obj_ext_len], obj_ext_str) == 0)
           FileName[len-obj_ext_len] = '\0';
     }
--- 2458,2465 ----
     {
        len = strlen (FileName);
!       if ((len >= obj_ext_len &&
!             strcmp (&FileName[len-obj_ext_len], obj_ext_str) == 0) ||
!             (len >= sym_ext_len &&
!             strcmp (&FileName[len-sym_ext_len], sym_ext_str) == 0))
           FileName[len-obj_ext_len] = '\0';
     }
***************
*** 2359,2363 ****
  {
     int	value;
!    char	buf[MAXSTRING], msg[MAXSTRING];
  
     Dialog ("Please specify percent reduction (<100) or enlargement (>100):",
--- 2494,2498 ----
  {
     int	value;
!    char	buf[MAXSTRING+1], msg[MAXSTRING+1];
  
     Dialog ("Please specify percent reduction (<100) or enlargement (>100):",
***************
*** 2412,2416 ****
  void OpenProc ()
  {
!    char	file_name[MAXPATHLENGTH];
     int	do_not_save = FALSE;
  
--- 2547,2551 ----
  void OpenProc ()
  {
!    char	file_name[MAXPATHLENGTH+1];
     int	do_not_save = FALSE;
  
***************
*** 2426,2430 ****
     if (SelectFileName ("Please select a file to OPEN ...",file_name) != INVALID)
     {
!       char	ext_str[MAXSTRING];
        int	ext_len, len=strlen(file_name);
  
--- 2561,2565 ----
     if (SelectFileName ("Please select a file to OPEN ...",file_name) != INVALID)
     {
!       char	ext_str[MAXSTRING+1];
        int	ext_len, len=strlen(file_name);
  
***************
*** 2462,2465 ****
--- 2597,2601 ----
          "Escape         #x",
          "SaveSelectedAs #~",
+         "SaveSymInLibrary ",
          "Quit           ^q"
        };
***************
*** 2573,2576 ****
--- 2709,2713 ----
        case FILE_ESCAPE: return (EscapeProc ());
        case FILE_SAVESELAS: SaveNewFile (TRUE); break;
+       case FILE_SAVESYMINLIB: SaveSymInLibrary (); break;
        case FILE_QUIT: return (QuitProc ());
     }
*** font.c.orig	Sat Aug  8 13:21:21 1992
--- font.c	Sat Aug  8 13:21:27 1992
***************
*** 25,29 ****
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/font.c,v 2.59 1992/03/31 07:53:16 william Exp $";
  #endif
  
--- 25,29 ----
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/font.c,v 2.61 1992/08/08 08:26:32 william Exp $";
  #endif
  
*** mainloop.c.orig	Sat Aug  8 13:21:32 1992
--- mainloop.c	Sat Aug  8 13:21:33 1992
***************
*** 25,29 ****
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/mainloop.c,v 2.77 1992/05/07 01:21:50 william Exp $";
  #endif
  
--- 25,29 ----
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/mainloop.c,v 2.79 1992/07/24 15:20:35 william Exp $";
  #endif
  
***************
*** 64,67 ****
--- 64,72 ----
  #include "xpixmap.e"
  
+ #ifdef USE_XAPPLRESDIR
+ extern char	* getenv ();
+ extern int	putenv ();
+ #endif
+ 
  int	cmdLineBW = FALSE;
  int	cmdLineRV = INVALID;
***************
*** 80,83 ****
--- 85,89 ----
  static int	maxExtraWins = 0;
  static int	quitDraw = TRUE;
+ static char	* xEnvStr = NULL;
  
  int AddExtraWinInfo (win, mapped, raise, expose_handler, ev_handler,
***************
*** 337,342 ****
  {
     XEvent		input;
!    char			* c_ptr, file_name[MAXPATHLENGTH], s[MAXPATHLENGTH];
!    char			full_name[MAXPATHLENGTH], * rest;
     int			rc, len, i, read_status, short_name;
     struct ObjRec	* obj_ptr;
--- 343,348 ----
  {
     XEvent		input;
!    char			* c_ptr, file_name[MAXPATHLENGTH+1], s[MAXPATHLENGTH+1];
!    char			full_name[MAXPATHLENGTH+1], * rest, * c_ptr1=NULL;
     int			rc, len, i, read_status, short_name;
     struct ObjRec	* obj_ptr;
***************
*** 343,347 ****
     FILE			* fp;
     int			tmp_linenum, obj_ext_len;
!    char			tmp_filename[MAXPATHLENGTH], obj_ext_str[MAXSTRING];
  
  /* printf ("--> MainLoop (%s, %s, ...)\n", Op, FileName); */
--- 349,353 ----
     FILE			* fp;
     int			tmp_linenum, obj_ext_len;
!    char			tmp_filename[MAXPATHLENGTH+1], obj_ext_str[MAXSTRING+1];
  
  /* printf ("--> MainLoop (%s, %s, ...)\n", Op, FileName); */
***************
*** 359,362 ****
--- 365,396 ----
        printf ("%s\n", initMsg1);
        printf ("%s\n", initMsg2);
+ 
+ #ifdef USE_XAPPLRESDIR
+       if (((c_ptr1 = getenv ("XENVIRONMENT")) == NULL) &&
+             ((c_ptr = getenv ("XAPPLRESDIR")) != NULL) &&
+             ((len = strlen (c_ptr)) > 0))
+       {
+          FILE	* xenv_fp;
+ 
+          xEnvStr = (char *) calloc (
+                strlen("XENVIRONMENT=")+strlen(TOOL_NAME)+len+3, sizeof(char));
+          sprintf (xEnvStr, "%s%s%s", c_ptr,
+                ((c_ptr[len-1] == '/') ? "" : "/"), TOOL_NAME);
+          if ((xenv_fp = fopen (xEnvStr, "r")) != NULL)
+          {
+             fclose (xenv_fp);
+             sprintf (xEnvStr, "XENVIRONMENT=%s%s%s", c_ptr,
+                   ((c_ptr[len-1] == '/') ? "" : "/"), TOOL_NAME);
+             if (putenv (xEnvStr))
+             {
+                sprintf (s, "Warning:  Can not putenv(%s).", xEnvStr);
+                Msg (s);
+                *xEnvStr = '\0';
+                cfree (xEnvStr);
+                xEnvStr = NULL;
+             }
+          }
+       }
+ #endif
  
        exitNormally = FALSE;
*** mainmenu.c.orig	Sat Aug  8 13:21:39 1992
--- mainmenu.c	Sat Aug  8 13:21:40 1992
***************
*** 26,30 ****
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/mainmenu.c,v 1.48 1992/04/01 16:26:10 william Exp $";
  #endif
  
--- 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
  
*** names.c.orig	Sat Aug  8 13:21:52 1992
--- names.c	Sat Aug  8 13:21:55 1992
***************
*** 25,29 ****
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/names.c,v 2.91 1992/06/25 01:35:18 william Exp $";
  #endif
  
--- 25,29 ----
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/names.c,v 2.93 1992/07/22 04:37:14 william Exp $";
  #endif
  
***************
*** 726,729 ****
--- 726,757 ----
  }
  
+ static int	lengthOfLongestItem=INVALID;
+ 
+ static
+ char * * MakeLongNameDspItemArray (Entries, DLPtr)
+    int		Entries;
+    DspList	* DLPtr;
+ {
+    register int	i, len;
+    char		* * dsp_ptr, * c_ptr;
+ 
+    lengthOfLongestItem = INVALID;
+ 
+    if (Entries == 0) return (NULL);
+ 
+    dsp_ptr = (char * *) calloc (Entries, sizeof(char *));
+    c_ptr = (char *) calloc (Entries*(MAXPATHLENGTH+1), sizeof(char));
+    for (i = 0; i < Entries; i++, DLPtr = DLPtr->next)
+    {
+       dsp_ptr[i] = c_ptr;
+       len = strlen (DLPtr->itemstr);
+       strcpy (c_ptr, DLPtr->itemstr);
+       if (len > lengthOfLongestItem) lengthOfLongestItem = len;
+ 
+       c_ptr += MAXPATHLENGTH;
+    }
+    return (dsp_ptr);
+ }
+ 
  static
  int GetNameEntryNum (RowOffset)
***************
*** 1862,1867 ****
     Msg ("");
  
!    name[0] = '\0';
!    name_index = 0;
  
     while (changing)
--- 1890,1910 ----
     Msg ("");
  
!    if (nameMarked == INVALID)
!    {
!       name[0] = '\0';
!       name_index = 0;
!    }
!    else
!    {
!       if (nameMarked >= ITEM_DSPED)
!       {
!          if (nameMarked < nameEntries-ITEM_DSPED)
!             nameFirst = nameMarked;
!          else
!             nameFirst = nameEntries-ITEM_DSPED;
!       }
!       strcpy (name, nameDspPtr[nameMarked]);
!       name_index = strlen (name);
!    }
  
     while (changing)
***************
*** 2327,2331 ****
     nameMarked = INVALID;
  
!    if ((index = ChooseAName ("Please select a new DOMAIN ...")) == INVALID)
        *SelStr = '\0';
     else
--- 2370,2375 ----
     nameMarked = INVALID;
  
!    if ((index = ChooseAName ("Please select a new DOMAIN ...")) ==
!          INVALID)
        *SelStr = '\0';
     else
***************
*** 2344,2347 ****
--- 2388,2470 ----
     }
  
+    Msg ("");
+ 
+    return (index);
+ }
+ 
+ static char	* oldDomain=NULL, * oldDir=NULL;
+ 
+ static
+ DspList * SymDirListing ()
+ {
+    register int	i;
+    int		checking=FALSE;
+    DspList	* dsp_ptr, * head_ptr, * tail_ptr;
+ 
+    if (oldDomain!=NULL && oldDir!=NULL && strcmp(oldDomain,curDomainName)==0)
+       checking = TRUE;
+ 
+    head_ptr = tail_ptr = NULL;
+    for (i = 0; i < symPathNumEntries; i++)
+    {
+       dsp_ptr = (DspList *) calloc (1, sizeof(DspList));
+       dsp_ptr->next = NULL;
+       strcpy (dsp_ptr->itemstr, symPath[i]);
+ 
+       if (head_ptr == NULL)
+          head_ptr = tail_ptr = dsp_ptr;
+       else
+       {
+          tail_ptr->next = dsp_ptr;
+          tail_ptr = dsp_ptr;
+       }
+       if (checking && strcmp (oldDir, symPath[i]) == 0)
+       {
+          checking = FALSE;
+          nameMarked = i;
+       }
+    }
+    nameEntries = symPathNumEntries;
+    return (head_ptr);
+ }
+ 
+ int SelectSymDir (SelStr)
+    char	* SelStr;
+ {
+    int		index;
+    char		msg[MAXSTRING+1];
+    DspList	* dsp_ptr, * next_dsp=NULL;
+ 
+    *SelStr = '\0';
+    nameMarked = INVALID;
+    if ((dsp_ptr = SymDirListing ()) == NULL) return (INVALID);
+ 
+    nameDspPtr = MakeLongNameDspItemArray (nameEntries, dsp_ptr);
+    nameFirst = 0;
+ 
+    sprintf (msg, "Please select a DIRECTORY in the '%s' domain ...",
+          curDomainName);
+    if ((index = ChooseAName (msg)) != INVALID)
+    {
+       strcpy (SelStr, nameDspPtr[index]);
+       if (oldDomain != NULL) cfree (oldDomain);
+       if (oldDir != NULL) cfree (oldDir);
+       oldDomain = (char *) calloc (strlen(curDomainName)+1, sizeof(char));
+       oldDir = (char *) calloc (strlen(SelStr)+1, sizeof(char));
+       strcpy (oldDomain, curDomainName);
+       strcpy (oldDir, SelStr);
+    }
+ 
+    for ( ; dsp_ptr != NULL; dsp_ptr = next_dsp)
+    {
+       next_dsp = dsp_ptr->next;
+       cfree (dsp_ptr);
+    }
+    if (nameDspPtr != NULL)
+    {
+       cfree (*nameDspPtr);
+       cfree (nameDspPtr);
+       nameDspPtr = NULL;
+    }
     Msg ("");
  
*** prtgif.c.orig	Sat Aug  8 13:21:59 1992
--- prtgif.c	Sat Aug  8 13:22:00 1992
***************
*** 25,29 ****
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/prtgif.c,v 2.19 1992/03/31 07:55:36 william Exp $";
  #endif
  
--- 25,29 ----
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/prtgif.c,v 2.21 1992/07/22 04:35:34 william Exp $";
  #endif
  
***************
*** 38,41 ****
--- 38,42 ----
  #include "msg.e"
  #include "obj.e"
+ #include "pattern.e"
  #include "setup.e"
  #include "version.e"
***************
*** 127,141 ****
  {
     struct ObjRec	* obj_ptr;
!    char 		full_name[MAXPATHLENGTH];
     int			len, read_status;
     FILE			* fp;
!    int			tmp_linenum, obj_ext_len;
!    char			tmp_filename[MAXPATHLENGTH], obj_ext_str[MAXSTRING];
  
     sprintf (obj_ext_str, ".%s", OBJ_FILE_EXT);
     obj_ext_len = strlen (obj_ext_str);
     len = strlen (FileName);
  
!    if (len>=obj_ext_len && strcmp (&FileName[len-obj_ext_len],obj_ext_str)==0)
        strcpy (full_name, FileName);
     else
--- 128,149 ----
  {
     struct ObjRec	* obj_ptr;
!    char 		full_name[MAXPATHLENGTH+1];
     int			len, read_status;
     FILE			* fp;
!    int			tmp_linenum, obj_ext_len, sym_ext_len;
!    char			tmp_filename[MAXPATHLENGTH+1];
!    char			obj_ext_str[MAXSTRING+1], sym_ext_str[MAXSTRING+1];
  
     sprintf (obj_ext_str, ".%s", OBJ_FILE_EXT);
     obj_ext_len = strlen (obj_ext_str);
+    sprintf (sym_ext_str, ".%s", SYM_FILE_EXT);
+    sym_ext_len = strlen (sym_ext_str);
+ 
     len = strlen (FileName);
  
!    if ((len>=obj_ext_len &&
!          strcmp (&FileName[len-obj_ext_len], obj_ext_str) == 0) ||
!          (len>=sym_ext_len &&
!          strcmp (&FileName[len-sym_ext_len],sym_ext_str)==0))
        strcpy (full_name, FileName);
     else
***************
*** 231,234 ****
--- 239,246 ----
           else if ((strcmp (*argv, "-f") == 0) || (strcmp (*argv, "-ps") == 0))
              whereToPrint = PS_FILE;
+          else if (strcmp (*argv, "-gray") == 0)
+             useGray = TRUE;
+          else if (strcmp (*argv, "-adobe") == 0)
+             usePsAdobeString = TRUE;
           else if (strncmp (*argv, "-o", 2) == 0)
              strcpy (outputDir, (*argv)+2);
*** shortcut.c.orig	Sat Aug  8 13:22:04 1992
--- shortcut.c	Sat Aug  8 13:22:05 1992
***************
*** 25,29 ****
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/shortcut.c,v 2.34 1992/06/19 18:09:08 william Exp $";
  #endif
  
--- 25,29 ----
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/shortcut.c,v 2.35 1992/07/17 15:03:52 william Exp $";
  #endif
  
***************
*** 173,176 ****
--- 173,177 ----
     { '\0', 0, "ToggleUseGrayScale()" },
     { '\0', 0, "FreeHandMode()" },
+    { '\0', 0, "SaveSymInLibrary()" },
     { '\0', 0, "" }
  };
*** stk.c.orig	Sat Aug  8 13:22:09 1992
--- stk.c	Sat Aug  8 13:22:10 1992
***************
*** 25,29 ****
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/stk.c,v 2.35 1992/06/11 05:33:38 william Exp $";
  #endif
  
--- 25,29 ----
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/stk.c,v 2.37 1992/08/08 08:26:51 william Exp $";
  #endif
  
*** text.c.orig	Sat Aug  8 13:22:25 1992
--- text.c	Sat Aug  8 13:22:27 1992
***************
*** 25,29 ****
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/text.c,v 2.102 1992/06/25 01:35:18 william Exp $";
  #endif
  
--- 25,29 ----
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/text.c,v 2.104 1992/08/08 08:26:55 william Exp $";
  #endif
  
*** version.c.orig	Sat Aug  8 13:22:32 1992
--- version.c	Sat Aug  8 13:22:33 1992
***************
*** 25,29 ****
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/version.c,v 2.24 1992/03/31 07:58:21 william Exp $";
  #endif
  
--- 25,29 ----
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/version.c,v 2.26 1992/08/08 08:27:37 william Exp $";
  #endif
  
*** file.e.orig	Sat Aug  8 13:22:36 1992
--- file.e	Sat Aug  8 13:22:37 1992
***************
*** 23,27 ****
   * PERFORMANCE OF THIS SOFTWARE.
   *
!  * @(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/file.e,v 2.31 1992/06/04 04:22:16 william Exp $
   */
  
--- 23,27 ----
   * PERFORMANCE OF THIS SOFTWARE.
   *
!  * @(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/file.e,v 2.32 1992/07/17 14:48:24 william Exp $
   */
  
***************
*** 57,60 ****
--- 57,61 ----
  extern int	SaveTmpFile ();
  extern void	SaveNewFile ();
+ extern void	SaveSymInLibrary ();
  extern void	SaveFile ();
  extern char	* ParseStr ();
*** font.e.orig	Sat Aug  8 13:22:40 1992
--- font.e	Sat Aug  8 13:22:41 1992
***************
*** 23,27 ****
   * PERFORMANCE OF THIS SOFTWARE.
   *
!  * @(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/font.e,v 2.18 1992/03/31 08:00:45 william Exp $
   */
  
--- 23,27 ----
   * PERFORMANCE OF THIS SOFTWARE.
   *
!  * @(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/font.e,v 2.32 1992/08/08 08:26:40 william Exp $
   */
  
*** names.e.orig	Sat Aug  8 13:22:45 1992
--- names.e	Sat Aug  8 13:22:46 1992
***************
*** 23,27 ****
   * PERFORMANCE OF THIS SOFTWARE.
   *
!  * @(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/names.e,v 2.12 1992/03/31 08:01:37 william Exp $
   */
  
--- 23,27 ----
   * PERFORMANCE OF THIS SOFTWARE.
   *
!  * @(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/names.e,v 2.13 1992/07/12 06:42:41 william Exp $
   */
  
***************
*** 45,48 ****
--- 45,49 ----
  extern int	DirInSymPath ();
  extern int	SelectDomain ();
+ extern int	SelectSymDir ();
  extern int	SelectFromLibrary ();
  extern void	SetCurDir ();
*** const.h.orig	Sat Aug  8 13:22:52 1992
--- const.h	Sat Aug  8 13:22:53 1992
***************
*** 23,27 ****
   * PERFORMANCE OF THIS SOFTWARE.
   *
!  * @(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/const.h,v 2.72 1992/06/19 07:11:41 william Exp $
   */
  
--- 23,27 ----
   * PERFORMANCE OF THIS SOFTWARE.
   *
!  * @(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/const.h,v 2.73 1992/07/17 14:45:07 william Exp $
   */
  
***************
*** 359,365 ****
  #define FILE_ESCAPE 15
  #define FILE_SAVESELAS 16
! #define FILE_QUIT 17
  
! #define FILEMENUENTRIES 18
  
  /* edit menu */
--- 359,366 ----
  #define FILE_ESCAPE 15
  #define FILE_SAVESELAS 16
! #define FILE_SAVESYMINLIB 17
! #define FILE_QUIT 18
  
! #define FILEMENUENTRIES 19
  
  /* edit menu */
*** patchlevel.h.orig	Sat Aug  8 13:22:56 1992
--- patchlevel.h	Sat Aug  8 13:22:57 1992
***************
*** 23,28 ****
   * PERFORMANCE OF THIS SOFTWARE.
   *
!  * @(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/patchlevel.h,v 2.25 1992/06/26 16:03:07 william Exp $
   */
  
! #define TGIF_PATCHLEVEL 9
--- 23,28 ----
   * PERFORMANCE OF THIS SOFTWARE.
   *
!  * @(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/patchlevel.h,v 2.28 1992/08/08 08:26:49 william Exp $
   */
  
! #define TGIF_PATCHLEVEL 10
*** types.h.orig	Sat Aug  8 13:23:01 1992
--- types.h	Sat Aug  8 13:23:01 1992
***************
*** 23,27 ****
   * PERFORMANCE OF THIS SOFTWARE.
   *
!  * @(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/types.h,v 2.67 1992/05/13 22:57:56 william Exp $
   */
  
--- 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 $
   */
  
*** Makefile.noimake.orig	Sat Aug  8 13:23:08 1992
--- Makefile.noimake	Sat Aug  8 13:23:09 1992
***************
*** 23,27 ****
  # PERFORMANCE OF THIS SOFTWARE.
  #
! # @(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/Makefile.noimake,v 2.127 1992/06/19 06:55:57 william Exp $
  #
  
--- 23,27 ----
  # PERFORMANCE OF THIS SOFTWARE.
  #
! # @(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/Makefile.noimake,v 2.131 1992/08/08 08:25:38 william Exp $
  #
  
***************
*** 44,47 ****
--- 44,51 ----
  		  -DTELEPORT_ATTR=\"warp_to=\" -DTMP_DIR=\"/tmp/\"
  
+ #-DUSE_XAPPLRESDIR
+ #   Include the above line in the DEFINES if $XAPPLRESDIR/Tgif is used to
+ #   specify the resource file.  If your system does not have putenv()
+ #   (such as IBM-RT), then this won't work.
  #-DNO_THIN_LINE
  #   Include the above line in the DEFINES if a line width of 0 causes
***************
*** 281,285 ****
  		spline.e xpixmap.e
  prtgif.o:	const.h patchlevel.h types.h \
! 		file.e grid.e msg.e obj.e setup.e version.e
  ps.o:
  raster.o:	const.h types.h $(RASTER_BM) \
--- 285,289 ----
  		spline.e xpixmap.e
  prtgif.o:	const.h patchlevel.h types.h \
! 		file.e grid.e msg.e obj.e pattern.e setup.e version.e
  ps.o:
  raster.o:	const.h types.h $(RASTER_BM) \
*** Imakefile.orig	Sat Aug  8 13:23:13 1992
--- Imakefile	Sat Aug  8 13:23:14 1992
***************
*** 23,30 ****
  /**/# PERFORMANCE OF THIS SOFTWARE.
  /**/#
! /**/# @(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/Imakefile,v 2.80 1992/06/26 16:10:40 william Exp $
  /**/#
  
! TGIFVERSION	= 2.12-p9
  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.83 1992/08/08 08:25:01 william Exp $
  /**/#
  
! TGIFVERSION	= 2.12-p10
  PROGRAMS	= tgif prtgif /**/#frontend11.o testdrive
  /**/#CDEBUGFLAGS= -g
***************
*** 38,44 ****
                    -DXBM_FILE_EXT=\"xbm\" -DXPM_FILE_EXT=\"xpm\" \
                    -DOBJ_FILE_EXT=\"obj\" -DSYM_FILE_EXT=\"sym\" \
!                   -DTELEPORT_ATTR=\"warp_to=\" -DTMP_DIR=\"/tmp/\" \
! -DDONT_FREE_COLORMAP
  
  /**/#-DNO_THIN_LINE
  /**/#   Include the above line in the DEFINES if a line width of 0 causes
--- 38,47 ----
                    -DXBM_FILE_EXT=\"xbm\" -DXPM_FILE_EXT=\"xpm\" \
                    -DOBJ_FILE_EXT=\"obj\" -DSYM_FILE_EXT=\"sym\" \
!                   -DTELEPORT_ATTR=\"warp_to=\" -DTMP_DIR=\"/tmp/\"
  
+ /**/#-DUSE_XAPPLRESDIR
+ /**/#   Include the above line in the DEFINES if $XAPPLRESDIR/Tgif is used to
+ /**/#   specify the resource file.  If your system does not have putenv()
+ /**/#   (such as IBM-RT), then this won't work.
  /**/#-DNO_THIN_LINE
  /**/#   Include the above line in the DEFINES if a line width of 0 causes
*** prtgif.man.orig	Sat Aug  8 13:23:19 1992
--- prtgif.man	Sat Aug  8 13:23:20 1992
***************
*** 1,4 ****
! .\"@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/prtgif.man,v 2.6 1992/06/25 23:37:54 william Exp $
! .TH PRTGIF n "Version 2.7 or above" "PrTgif"
  .SH NAME
  \fIprtgif\fR - Prints a \fItgif\fR object file without opening windows
--- 1,4 ----
! .\"@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/prtgif.man,v 2.8 1992/07/24 06:23:05 william Exp $
! .TH PRTGIF n "Version 2.12-p10 or above" "PrTgif"
  .SH NAME
  \fIprtgif\fR - Prints a \fItgif\fR object file without opening windows
***************
*** 10,21 ****
  [\fB-ps\fR]
  [\fB-f\fR]
  [\fB-o\fRdir]
  [\fIfile1\fR \fIfile2\fR ...]
  .SH DESCRIPTION
! \fIprtgif\fR prints \fIfile.obj\fR (generated by \fItgif\fR)
! into a PostScript(TM) page description file
! and pipes it to \fIlpr\fR if none of the
  \fB-eps\fR, \fB-p\fR, \fB-ps\fR, or \fB-f\fR options are not specified;
  in this case, any other command line options are sent to \fIlpr\fR.
  .PP
  If the \fB-eps\fR or the \fB-p\fR option is specified,
--- 10,26 ----
  [\fB-ps\fR]
  [\fB-f\fR]
+ [\fB-gray\fR]
+ [\fB-adobe\fR]
  [\fB-o\fRdir]
  [\fIfile1\fR \fIfile2\fR ...]
  .SH DESCRIPTION
! \fIprtgif\fR prints \fIfile1.obj\fR, \fIfile2.obj\fR,
! etc.  (generated by \fItgif\fR)
! into PostScript(TM) page description files
! and pipes them to \fIlpr\fR if none of the
  \fB-eps\fR, \fB-p\fR, \fB-ps\fR, or \fB-f\fR options are not specified;
  in this case, any other command line options are sent to \fIlpr\fR.
+ A symbol file can also be printed by specifying the \fI.sym\fR
+ extension explicitly.
  .PP
  If the \fB-eps\fR or the \fB-p\fR option is specified,
***************
*** 30,33 ****
--- 35,46 ----
  options are specified,
  any other command line options are ignored.)
+ .PP
+ Using the \fI-gray\fR option has the same effect as setting the
+ Tgif*UseGrayScale X default for tgif (see the man pages of
+ \fItgif\fR for details).
+ .PP
+ Using the \fI-adobe\fR option has the same effect as setting the
+ Tgif*UsePsAdobeString X default for tgif (see the man pages of
+ \fItgif\fR for details).
  .PP
  If the \fI-o\fR option is not specified, the output file (eps or ps)
*** tgif.man.orig	Sat Aug  8 13:23:29 1992
--- tgif.man	Sat Aug  8 13:23:31 1992
***************
*** 1,3 ****
! .\"@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/tgif.man,v 2.121 1992/06/26 05:27:37 william Exp $
  .TH TGIF n "Version 2.12-p8 and Above" "Tgif"
  .SH NAME
--- 1,3 ----
! .\"@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/tgif.man,v 2.123 1992/08/08 08:27:10 william Exp $
  .TH TGIF n "Version 2.12-p8 and Above" "Tgif"
  .SH NAME
*** tgif.pl.orig	Sat Aug  8 13:23:38 1992
--- tgif.pl	Sat Aug  8 13:23:40 1992
***************
*** 23,27 ****
  % PERFORMANCE OF THIS SOFTWARE.
  %
! % @(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/tgif.pl,v 2.23 1992/03/31 08:04:04 william Exp $
  %
  
--- 23,27 ----
  % PERFORMANCE OF THIS SOFTWARE.
  %
! % @(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/tgif.pl,v 2.29 1992/08/08 08:27:20 william Exp $
  %
  
*** HISTORY.orig	Sat Aug  8 13:23:45 1992
--- HISTORY	Sat Aug  8 13:23:46 1992
***************
*** 1,5 ****
  /*
!  *  @(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/HISTORY,v 2.32 1992/06/26 23:36:45 william Exp $
   */
  -----------------------> tgif-2.12-p8 => tgif-2.12-p9 <-----------------------
  I've just put tgif-2.12-patch9 (9th patch for tgif-2.12) in the
--- 1,34 ----
  /*
!  *  @(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/HISTORY,v 2.34 1992/08/08 19:55:45 william Exp $
   */
+ -----------------------> tgif-2.12-p9 => tgif-2.12-p10 <-----------------------
+ I've just put tgif-2.12-patch10 (10th patch for tgif-2.12) in the
+ following places for anonymous ftp:
+ 
+ 	export.lcs.mit.edu	/contrib/tgif-2.12-patch10.Z
+ 	cs.ucla.edu		/pub/tgif/tgif-2.12-patch10.Z
+ 
+ The patch is also posted to comp.sources.bugs.
+ 
+ Please uncompress and then apply the patch with
+ 'patch -p -N < tgif-2.12-patch10'.
+ Here's a short list of added features/bug fixes.
+ 
+ 1)  Fix a bug that causes seg fault when moving from attribute to attribute
+     using <Shift><Tab> (feature introduced in patchlevel 8).
+ 2)  Add a new command, SaveSymInLibrary(), under the FileMenu to save a symbol
+     (.sym) file.  This will prompt the user to pick a library directory from
+     the current domain for saving the symbol file.
+ 3)  Add a compile option USE_XAPPLRESDIR to tell tgif to look at the
+     XAPPLRESDIR environment variable first and try to locate the tgif
+     resources if XENVIRONMENT is not set.  However, if you machine doesn't
+     support putenv() (such as IBM-RT), then this won't work.  Thanks to
+     Jaap Haalboom <haalboom@prl.philips.nl> for the suggestion and the code.
+ 4)  Add -gray and -adobe command line options to prtgif.  They have
+     the same effects as setting the Tgif*UseGrayScale and Tgif*UsePsAdobeString
+     X defaults to ``true'' (prtgif does not read X defaults).
+ 5)  Allow prtgif to specify a symbol file name.
+ 6)  Try to generate a more compact xbm or xpm file when the bounding box can
+     be figured out exactly.
  -----------------------> tgif-2.12-p8 => tgif-2.12-p9 <-----------------------
  I've just put tgif-2.12-patch9 (9th patch for tgif-2.12) in the
*** descrip.mms.orig	Sat Aug  8 13:23:53 1992
--- descrip.mms	Sat Aug  8 13:23:54 1992
***************
*** 6,10 ****
  ! $ DEFINE SYS SYS$LIBRARY
  !
! ! @(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/descrip.mms,v 2.120 1992/06/19 06:55:57 william Exp $
  !
  
--- 6,10 ----
  ! $ DEFINE SYS SYS$LIBRARY
  !
! ! @(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/descrip.mms,v 2.124 1992/08/08 08:26:01 william Exp $
  !
  
***************
*** 22,25 ****
--- 22,30 ----
  		   TMP_DIR="""/sys$scratch/""")
  
+ !USE_XAPPLRESDIR
+ !   Include the above line in the DEFINES if $XAPPLRESDIR/Tgif is used to
+ !   specify the resource file.  If your system does not have putenv()
+ !   (such as IBM-RT), then this won't work.  I'm not sure if VMS systems
+ !   have putenv(), so this might be useless for VMS systems.
  !NO_THIN_LINE
  !   Include the above line in the DEFINES if a line width of 0 causes
***************
*** 260,264 ****
  		spline.e,xpixmap.e
  prtgif.obj depends_on prtgif.c,		const.h,patchlevel.h,types.h,-
! 		file.e,grid.e,msg.e,obj.e,setup.e,version.e
  ps.obj depends_on ps.c
  raster.obj depends_on raster.c,		const.h,types.h,$(RASTER_BM),-
--- 265,269 ----
  		spline.e,xpixmap.e
  prtgif.obj depends_on prtgif.c,		const.h,patchlevel.h,types.h,-
! 		file.e,grid.e,msg.e,obj.e,pattern.e,setup.e,version.e
  ps.obj depends_on ps.c
  raster.obj depends_on raster.c,		const.h,types.h,$(RASTER_BM),-
*** tgif.Xdefaults.orig	Sat Aug  8 13:23:57 1992
--- tgif.Xdefaults	Sat Aug  8 13:23:58 1992
***************
*** 3,7 ****
  ! suitable for appending to any .Xdefaults file.
  !
! ! @(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/tgif.Xdefaults,v 2.24 1992/06/26 05:24:23 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.26 1992/08/08 08:27:05 william Exp $
  !
  Tgif*Geometry:			640x512-40+20
---------------------------------> cut here <---------------------------------
-- 
Bill Cheng // UCLA Computer Science Department // (310) 575-4507
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