home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / x / volume8 / tgif / patch3.03 < prev    next >
Internet Message Format  |  1990-08-20  |  53KB

  1. Path: uunet!decwrl!sun-barr!newstop!sun!CS.UCLA.EDU
  2. From: william@CS.UCLA.EDU (William Cheng)
  3. Newsgroups: comp.sources.x
  4. Subject: v08i089: tgif, Patch3, Part03/03
  5. Message-ID: <140970@sun.Eng.Sun.COM>
  6. Date: 20 Aug 90 18:14:13 GMT
  7. Sender: news@sun.Eng.Sun.COM
  8. Lines: 1635
  9. Approved: argv@sun.com
  10.  
  11. Submitted-by: william@CS.UCLA.EDU (William Cheng)
  12. Posting-number: Volume 8, Issue 89
  13. Archive-name: tgif/patch3.03
  14. Patch-To: Volume 8, Issue 58-60 (Patch2: tgif-1.9 => tgif-1.12)
  15. Patch-To: Volume 8, Issue 46-48 (Patch1: tgif-1.2 => tgif-1.9)
  16. Patch-To: Volume 7, Issue 56-76 (original: tgif-1.2)
  17.  
  18. ---------------------------------> cut here <---------------------------------
  19. *** prtgif.c.orig    Fri Aug 17 13:48:50 1990
  20. --- prtgif.c    Fri Aug 17 13:48:51 1990
  21. ***************
  22. *** 6,10 ****
  23.   #ifndef lint
  24.   static char RCSid[] =
  25. !       "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/prtgif.c,v 1.14 90/07/30 11:02:37 william Exp $";
  26.   #endif
  27.   
  28. --- 6,10 ----
  29.   #ifndef lint
  30.   static char RCSid[] =
  31. !       "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/prtgif.c,v 1.16 90/08/16 15:28:30 william Exp $";
  32.   #endif
  33.   
  34. ***************
  35. *** 26,90 ****
  36.   int    lastFile = TRUE;
  37.   
  38. ! short    pDrawCursorH[] =
  39.   {
  40. !    9,  11, 13, 14, 19, 26,
  41. !    9,  11, 14, 14, 19, 26,
  42. !    9,  11, 13, 14, 19, 25,
  43. !    9,  12, 13, 15, 19, 25,
  44. !    8,  10, 13, 14, 17, 22,
  45. !    10, 10, 13, 15, 18, 23,
  46. !    10, 10, 13, 14, 17, 22,
  47. !    10, 10, 13, 15, 17, 28,
  48. !    9,  12, 14, 16, 20, 27,
  49. !    9,  12, 14, 16, 21, 27,
  50. !    9,  12, 14, 16, 21, 27,
  51. !    9,  12, 14, 16, 21, 27,
  52. !    9,  11, 14, 16, 20, 26,
  53. !    9,  11, 14, 16, 20, 26,
  54. !    9,  11, 14, 16, 24, 26,
  55. !    9,  11, 14, 16, 20, 26,
  56. !    11, 10, 12, 14, 18, 24
  57.   };
  58.   
  59. ! short    pDrawFontAsc[] =
  60.   {
  61. !    7, 8,  10, 11, 15, 20,
  62. !    7, 8,  11, 11, 15, 20,
  63. !    7, 8,  10, 11, 15, 20,
  64. !    7, 9,  10, 12, 15, 20,
  65. !    6, 8,  10, 11, 13, 17,
  66. !    8, 8,  10, 11, 13, 18,
  67. !    8, 8,  10, 11, 13, 17,
  68. !    8, 8,  10, 11, 13, 23,
  69. !    7, 10, 11, 13, 16, 22,
  70. !    7, 10, 11, 13, 16, 22,
  71. !    7, 10, 11, 13, 16, 22,
  72. !    7, 10, 11, 13, 16, 22,
  73. !    7, 9,  11, 13, 16, 21,
  74. !    7, 9,  11, 13, 16, 21,
  75. !    7, 9,  11, 13, 18, 21,
  76. !    7, 9,  11, 13, 18, 21,
  77. !    8, 8,  9,  11, 14, 19
  78. ! };
  79. ! short    pDrawFontDes[] =
  80. ! {
  81. !    2, 3, 3, 3, 4, 6,
  82. !    2, 3, 3, 3, 4, 6,
  83. !    2, 3, 3, 3, 4, 5,
  84. !    2, 3, 3, 3, 4, 5,
  85. !    2, 2, 3, 3, 4, 5,
  86. !    2, 2, 3, 4, 5, 5,
  87. !    2, 2, 3, 3, 4, 5,
  88. !    2, 2, 3, 4, 4, 5,
  89. !    2, 2, 3, 3, 4, 5,
  90. !    2, 2, 3, 3, 5, 5,
  91. !    2, 2, 3, 3, 5, 5,
  92. !    2, 2, 3, 3, 5, 5,
  93. !    2, 2, 3, 3, 4, 5,
  94. !    2, 2, 3, 3, 4, 5,
  95. !    2, 2, 3, 3, 6, 5,
  96. !    2, 2, 3, 3, 6, 5,
  97. !    3, 2, 3, 3, 4, 5
  98.   };
  99.   
  100. --- 26,103 ----
  101.   int    lastFile = TRUE;
  102.   
  103. ! short   pDrawFontAsc[] =
  104.   {
  105. !     8, 10, 12, 14, 17, 22, 
  106. !     8, 10, 12, 14, 17, 22, 
  107. !     8, 10, 12, 14, 17, 23, 
  108. !     8, 10, 12, 14, 17, 22, 
  109. !     8,  9, 11, 13, 15, 19, 
  110. !     7,  9, 11, 12, 15, 20, 
  111. !     7,  9, 11, 13, 15, 19, 
  112. !     7,  9, 11, 12, 15, 20, 
  113. !     9, 11, 12, 14, 18, 24, 
  114. !     9, 11, 12, 14, 17, 24, 
  115. !     9, 11, 12, 14, 17, 24, 
  116. !     9, 11, 12, 14, 17, 24, 
  117. !     8, 11, 12, 14, 18, 23, 
  118. !     8, 11, 12, 15, 18, 24, 
  119. !     8, 11, 12, 14, 16, 23, 
  120. !     8, 11, 12, 14, 16, 24, 
  121. !     8, 10, 12, 14, 18, 24, 
  122. !     9, 14, 15, 18, 23, 30, 
  123. !    10, 14, 16, 17, 23, 30, 
  124. !     9, 13, 15, 17, 22, 30, 
  125. !     9, 13, 15, 18, 22, 30, 
  126. !     9, 12, 14, 15, 19, 26, 
  127. !     9, 12, 14, 15, 21, 26, 
  128. !     9, 12, 14, 15, 19, 26, 
  129. !     9, 12, 14, 15, 20, 26, 
  130. !    11, 14, 16, 18, 24, 31, 
  131. !    11, 14, 16, 18, 24, 31, 
  132. !    11, 14, 16, 18, 24, 31, 
  133. !    11, 14, 16, 18, 24, 31, 
  134. !    11, 14, 16, 19, 24, 32, 
  135. !    11, 15, 16, 19, 24, 33, 
  136. !    11, 14, 16, 18, 23, 32, 
  137. !    11, 15, 16, 19, 24, 32, 
  138. !    11, 12, 13, 14, 19, 27 
  139.   };
  140.   
  141. ! short   pDrawFontDes[] =
  142.   {
  143. !     2,  3,  3,  4,  4,  6, 
  144. !     2,  3,  3,  4,  4,  6, 
  145. !     2,  3,  3,  4,  5,  6, 
  146. !     2,  3,  3,  3,  4,  6, 
  147. !     2,  2,  3,  3,  4,  5, 
  148. !     2,  2,  3,  4,  5,  5, 
  149. !     2,  2,  3,  3,  4,  5, 
  150. !     2,  2,  3,  4,  5,  5, 
  151. !     2,  2,  3,  3,  4,  5, 
  152. !     2,  2,  3,  3,  5,  5, 
  153. !     2,  2,  3,  3,  5,  5, 
  154. !     2,  2,  3,  3,  5,  5, 
  155. !     2,  2,  3,  3,  4,  5, 
  156. !     2,  2,  3,  3,  4,  5, 
  157. !     2,  2,  3,  3,  6,  5, 
  158. !     2,  2,  3,  3,  6,  5, 
  159. !     3,  4,  4,  6,  7,  8, 
  160. !     3,  3,  4,  4,  6,  7, 
  161. !     3,  3,  4,  4,  6,  7, 
  162. !     3,  4,  4,  5,  6,  7, 
  163. !     3,  3,  4,  4,  6,  7, 
  164. !     2,  3,  3,  4,  5,  6, 
  165. !     2,  4,  3,  5,  5,  7, 
  166. !     2,  3,  4,  4,  5,  6, 
  167. !     2,  4,  4,  5,  5,  7, 
  168. !     2,  3,  4,  4,  5,  7, 
  169. !     2,  3,  4,  5,  5,  7, 
  170. !     2,  3,  4,  5,  5,  7, 
  171. !     2,  3,  4,  5,  5,  7, 
  172. !     2,  3,  3,  4,  5,  7, 
  173. !     2,  3,  3,  4,  5,  7, 
  174. !     2,  3,  3,  4,  5,  7, 
  175. !     2,  3,  3,  4,  5,  7, 
  176. !     4,  3,  4,  5,  5,  7 
  177.   };
  178.   
  179. *** setup.c.orig    Fri Aug 17 13:48:56 1990
  180. --- setup.c    Fri Aug 17 13:48:58 1990
  181. ***************
  182. *** 6,10 ****
  183.   #ifndef lint
  184.   static char RCSid[] =
  185. !       "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/setup.c,v 1.10 90/07/17 16:46:52 william Exp $";
  186.   #endif
  187.   
  188. --- 6,10 ----
  189.   #ifndef lint
  190.   static char RCSid[] =
  191. !       "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/setup.c,v 1.12 90/08/17 09:32:53 william Exp $";
  192.   #endif
  193.   
  194. ***************
  195. *** 90,94 ****
  196.   Window    iconBaseWindow;
  197.   
  198. ! int    paperWidth = 7.5*PIX_PER_INCH;
  199.   int    paperHeight = 10*PIX_PER_INCH;
  200.   int    drawOrigX = 0;
  201. --- 90,94 ----
  202.   Window    iconBaseWindow;
  203.   
  204. ! int    paperWidth = (75*PIX_PER_INCH)/10;
  205.   int    paperHeight = 10*PIX_PER_INCH;
  206.   int    drawOrigX = 0;
  207. *** special.c.orig    Fri Aug 17 13:49:04 1990
  208. --- special.c    Fri Aug 17 13:49:05 1990
  209. ***************
  210. *** 6,10 ****
  211.   #ifndef lint
  212.   static char RCSid[] =
  213. !       "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/special.c,v 1.6 90/07/30 11:00:16 william Exp $";
  214.   #endif
  215.   
  216. --- 6,10 ----
  217.   #ifndef lint
  218.   static char RCSid[] =
  219. !       "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/special.c,v 1.10 90/08/17 13:40:34 william Exp $";
  220.   #endif
  221.   
  222. ***************
  223. *** 72,79 ****
  224.      FILE    * FP;
  225.   {
  226. !    struct ObjRec    * obj_ptr;
  227. !    struct AttrRec       * attr_ptr, * top_attr = NULL, * bot_attr = NULL;
  228. !    char            inbuf[MAXPATHLENGTH], obj_name[10];
  229. !    int            len;
  230.   
  231.      while (fgets (inbuf, MAXPATHLENGTH, FP) != NULL)
  232. --- 72,79 ----
  233.      FILE    * FP;
  234.   {
  235. !    register struct AttrRec    * attr_ptr;
  236. !    struct ObjRec        * obj_ptr;
  237. !    char                inbuf[MAXPATHLENGTH], obj_name[10];
  238. !    int                len;
  239.   
  240.      while (fgets (inbuf, MAXPATHLENGTH, FP) != NULL)
  241. ***************
  242. *** 86,104 ****
  243.            ReadGroupObj (FP, &obj_ptr, FALSE);
  244.            obj_ptr->type = OBJ_ICON;
  245. !          while (ReadAttr (FP, &attr_ptr, FALSE))
  246. !          {
  247. !             attr_ptr->owner = obj_ptr;
  248. !             attr_ptr->prev = NULL;
  249. !             attr_ptr->next = top_attr;
  250.               attr_ptr->inherited = TRUE;
  251. -             if (top_attr == NULL)
  252. -                bot_attr = attr_ptr;
  253. -             else
  254. -                top_attr->prev = attr_ptr;
  255. -             top_attr = attr_ptr;
  256. -          }
  257. -          if (bot_attr != NULL) bot_attr->next = NULL;
  258. -          obj_ptr->detail.r->fattr = top_attr;
  259. -          obj_ptr->detail.r->lattr = bot_attr;
  260.            return (obj_ptr);
  261.         }
  262. --- 86,93 ----
  263.            ReadGroupObj (FP, &obj_ptr, FALSE);
  264.            obj_ptr->type = OBJ_ICON;
  265. !          ReadObjAttrs (INVALID, FP, &obj_ptr, FALSE);
  266. !          attr_ptr = obj_ptr->lattr;
  267. !          for ( ; attr_ptr != NULL; attr_ptr = attr_ptr->prev)
  268.               attr_ptr->inherited = TRUE;
  269.            return (obj_ptr);
  270.         }
  271. ***************
  272. *** 211,216 ****
  273.         SetNullCursor (drawWindow);
  274.   
  275. !       obj_ptr->detail.r->id = objId++;
  276. !       obj_ptr->detail.r->dirty = FALSE;
  277.         strcpy (obj_ptr->detail.r->s, sym_name);
  278.         AddObj (NULL, topObj, obj_ptr);
  279. --- 200,205 ----
  280.         SetNullCursor (drawWindow);
  281.   
  282. !       obj_ptr->id = objId++;
  283. !       obj_ptr->dirty = FALSE;
  284.         strcpy (obj_ptr->detail.r->s, sym_name);
  285.         AddObj (NULL, topObj, obj_ptr);
  286. ***************
  287. *** 353,357 ****
  288.         HighLightReverse ();
  289.         topSel->obj->type = OBJ_ICON;
  290. !       topSel->obj->detail.r->id = objId++;
  291.         Msg ("Selected GROUP object is now ICONIC.");
  292.         SetFileModified (TRUE);
  293. --- 342,346 ----
  294.         HighLightReverse ();
  295.         topSel->obj->type = OBJ_ICON;
  296. !       topSel->obj->id = objId++;
  297.         Msg ("Selected GROUP object is now ICONIC.");
  298.         SetFileModified (TRUE);
  299. *** stk.c.orig    Fri Aug 17 13:49:10 1990
  300. --- stk.c    Fri Aug 17 13:49:11 1990
  301. ***************
  302. *** 6,10 ****
  303.   #ifndef lint
  304.   static char RCSid[] =
  305. !       "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/stk.c,v 1.5 90/07/30 11:00:40 william Exp $";
  306.   #endif
  307.   
  308. --- 6,10 ----
  309.   #ifndef lint
  310.   static char RCSid[] =
  311. !       "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/stk.c,v 1.6 90/08/15 16:00:13 william Exp $";
  312.   #endif
  313.   
  314. ***************
  315. *** 96,101 ****
  316.      stk_ptr->just = textJust;
  317.      stk_ptr->font = curFont;
  318. !    stk_ptr->font_s = curStyle;
  319.      stk_ptr->f_size = curSize;
  320.   
  321.      topObj = botObj = NULL;
  322. --- 96,102 ----
  323.      stk_ptr->just = textJust;
  324.      stk_ptr->font = curFont;
  325. !    stk_ptr->f_style = curStyle;
  326.      stk_ptr->f_size = curSize;
  327. +    stk_ptr->f_dpi = curFontDPI;
  328.   
  329.      topObj = botObj = NULL;
  330. ***************
  331. *** 173,178 ****
  332.      textJust = topStk->just;
  333.      curFont = topStk->font;
  334. !    curStyle = topStk->font_s;
  335. !    curSize = topStk->f_size;
  336.   
  337.      topObj = topStk->first;
  338. --- 174,179 ----
  339.      textJust = topStk->just;
  340.      curFont = topStk->font;
  341. !    curStyle = topStk->f_style;
  342. !    curFontDPI = topStk->f_dpi;
  343.   
  344.      topObj = topStk->first;
  345. *** stretch.c.orig    Fri Aug 17 13:49:30 1990
  346. --- stretch.c    Fri Aug 17 13:49:32 1990
  347. ***************
  348. *** 6,10 ****
  349.   #ifndef lint
  350.   static char RCSid[] =
  351. !       "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/stretch.c,v 1.8 90/08/02 08:57:17 william Exp $";
  352.   #endif
  353.   
  354. --- 6,10 ----
  355.   #ifndef lint
  356.   static char RCSid[] =
  357. !       "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/stretch.c,v 1.9 90/08/11 00:14:25 william Exp $";
  358.   #endif
  359.   
  360. ***************
  361. *** 455,462 ****
  362.                     drawOrigY, ObjPtr->detail.p->n, ObjPtr->detail.p->vlist);
  363.            }
  364. !          if ((attr_ptr = ObjPtr->detail.p->fattr) != NULL)
  365.               for ( ; attr_ptr != NULL; attr_ptr = attr_ptr->next)
  366.                  StretchObj (attr_ptr->obj, Corner);
  367.            break;
  368.         case OBJ_POLYGON:
  369.            for (i = 0; i < ObjPtr->detail.g->n; i++)
  370. --- 455,473 ----
  371.                     drawOrigY, ObjPtr->detail.p->n, ObjPtr->detail.p->vlist);
  372.            }
  373. !          if ((attr_ptr = ObjPtr->fattr) != NULL)
  374.               for ( ; attr_ptr != NULL; attr_ptr = attr_ptr->next)
  375.                  StretchObj (attr_ptr->obj, Corner);
  376.            break;
  377. +       case OBJ_BOX:
  378. +          if ((attr_ptr = ObjPtr->fattr) != NULL)
  379. +             for ( ; attr_ptr != NULL; attr_ptr = attr_ptr->next)
  380. +                StretchObj (attr_ptr->obj, Corner);
  381. +          break;
  382. +       case OBJ_OVAL:
  383. +          if ((attr_ptr = ObjPtr->fattr) != NULL)
  384. +             for ( ; attr_ptr != NULL; attr_ptr = attr_ptr->next)
  385. +                StretchObj (attr_ptr->obj, Corner);
  386. +          break;
  387. +       case OBJ_TEXT: break;
  388.         case OBJ_POLYGON:
  389.            for (i = 0; i < ObjPtr->detail.g->n; i++)
  390. ***************
  391. *** 474,477 ****
  392. --- 485,491 ----
  393.                     drawOrigY, ObjPtr->detail.g->n, ObjPtr->detail.g->vlist);
  394.            }
  395. +          if ((attr_ptr = ObjPtr->fattr) != NULL)
  396. +             for ( ; attr_ptr != NULL; attr_ptr = attr_ptr->next)
  397. +                StretchObj (attr_ptr->obj, Corner);
  398.            break;
  399.         case OBJ_SYM:
  400. ***************
  401. *** 479,483 ****
  402.            for (ptr = ObjPtr->detail.r->first; ptr != NULL; ptr = ptr->next)
  403.               StretchObj (ptr, Corner);
  404. !          if ((attr_ptr = ObjPtr->detail.p->fattr) != NULL)
  405.               for ( ; attr_ptr != NULL; attr_ptr = attr_ptr->next)
  406.                  StretchObj (attr_ptr->obj, Corner);
  407. --- 493,497 ----
  408.            for (ptr = ObjPtr->detail.r->first; ptr != NULL; ptr = ptr->next)
  409.               StretchObj (ptr, Corner);
  410. !          if ((attr_ptr = ObjPtr->fattr) != NULL)
  411.               for ( ; attr_ptr != NULL; attr_ptr = attr_ptr->next)
  412.                  StretchObj (attr_ptr->obj, Corner);
  413. ***************
  414. *** 484,490 ****
  415.            break;
  416.         case OBJ_ICON: break;
  417. -       case OBJ_BOX: break;
  418. -       case OBJ_OVAL: break;
  419. -       case OBJ_TEXT: break;
  420.      }
  421.      AdjObjBBox (ObjPtr);
  422. --- 498,501 ----
  423. ***************
  424. *** 692,698 ****
  425.      switch (ObjPtr->type)
  426.      {
  427. -       case OBJ_BOX: break;
  428. -       case OBJ_OVAL: break;
  429. -       case OBJ_TEXT: break;
  430.         case OBJ_POLY:
  431.            num_pts = ObjPtr->detail.p->n;
  432. --- 703,706 ----
  433. ***************
  434. *** 699,703 ****
  435.            v = ObjPtr->detail.p->vlist;
  436.            for (i = 0; i < num_pts; i++, v++) (*v).x = two_x_pivot - (*v).x;
  437. -          attr_ptr = ObjPtr->detail.p->fattr;
  438.            if (ObjPtr->detail.p->curved)
  439.            {
  440. --- 707,710 ----
  441. ***************
  442. *** 707,713 ****
  443. --- 714,732 ----
  444.                     drawOrigY, ObjPtr->detail.p->n, ObjPtr->detail.p->vlist);
  445.            }
  446. +          attr_ptr = ObjPtr->fattr;
  447.            for ( ; attr_ptr != NULL; attr_ptr = attr_ptr->next)
  448.               FlipObjHorizontal (attr_ptr->obj);
  449.            break;
  450. +       case OBJ_BOX:
  451. +          attr_ptr = ObjPtr->fattr;
  452. +          for ( ; attr_ptr != NULL; attr_ptr = attr_ptr->next)
  453. +             FlipObjHorizontal (attr_ptr->obj);
  454. +          break;
  455. +       case OBJ_OVAL:
  456. +          attr_ptr = ObjPtr->fattr;
  457. +          for ( ; attr_ptr != NULL; attr_ptr = attr_ptr->next)
  458. +             FlipObjHorizontal (attr_ptr->obj);
  459. +          break;
  460. +       case OBJ_TEXT: break;
  461.         case OBJ_POLYGON:
  462.            num_pts = ObjPtr->detail.g->n;
  463. ***************
  464. *** 721,724 ****
  465. --- 740,746 ----
  466.                     drawOrigY, ObjPtr->detail.g->n, ObjPtr->detail.g->vlist);
  467.            }
  468. +          attr_ptr = ObjPtr->fattr;
  469. +          for ( ; attr_ptr != NULL; attr_ptr = attr_ptr->next)
  470. +             FlipObjHorizontal (attr_ptr->obj);
  471.            break;
  472.         case OBJ_GROUP:
  473. ***************
  474. *** 728,732 ****
  475.            for ( ; obj_ptr != NULL; obj_ptr = obj_ptr->next)
  476.               FlipObjHorizontal (obj_ptr);
  477. !          attr_ptr = ObjPtr->detail.r->fattr;
  478.            for ( ; attr_ptr != NULL; attr_ptr = attr_ptr->next)
  479.               FlipObjHorizontal (attr_ptr->obj);
  480. --- 750,754 ----
  481.            for ( ; obj_ptr != NULL; obj_ptr = obj_ptr->next)
  482.               FlipObjHorizontal (obj_ptr);
  483. !          attr_ptr = ObjPtr->fattr;
  484.            for ( ; attr_ptr != NULL; attr_ptr = attr_ptr->next)
  485.               FlipObjHorizontal (attr_ptr->obj);
  486. ***************
  487. *** 783,789 ****
  488.      switch (ObjPtr->type)
  489.      {
  490. -       case OBJ_BOX: break;
  491. -       case OBJ_OVAL: break;
  492. -       case OBJ_TEXT: break;
  493.         case OBJ_POLY:
  494.            num_pts = ObjPtr->detail.p->n;
  495. --- 805,808 ----
  496. ***************
  497. *** 790,794 ****
  498.            v = ObjPtr->detail.p->vlist;
  499.            for (i = 0; i < num_pts; i++, v++) (*v).y = two_x_pivot - (*v).y;
  500. -          attr_ptr = ObjPtr->detail.p->fattr;
  501.            if (ObjPtr->detail.p->curved)
  502.            {
  503. --- 809,812 ----
  504. ***************
  505. *** 798,804 ****
  506. --- 816,834 ----
  507.                     drawOrigY, ObjPtr->detail.p->n, ObjPtr->detail.p->vlist);
  508.            }
  509. +          attr_ptr = ObjPtr->fattr;
  510.            for ( ; attr_ptr != NULL; attr_ptr = attr_ptr->next)
  511.               FlipObjVertical (attr_ptr->obj);
  512.            break;
  513. +       case OBJ_BOX:
  514. +          attr_ptr = ObjPtr->fattr;
  515. +          for ( ; attr_ptr != NULL; attr_ptr = attr_ptr->next)
  516. +             FlipObjVertical (attr_ptr->obj);
  517. +          break;
  518. +       case OBJ_OVAL:
  519. +          attr_ptr = ObjPtr->fattr;
  520. +          for ( ; attr_ptr != NULL; attr_ptr = attr_ptr->next)
  521. +             FlipObjVertical (attr_ptr->obj);
  522. +          break;
  523. +       case OBJ_TEXT: break;
  524.         case OBJ_POLYGON:
  525.            num_pts = ObjPtr->detail.g->n;
  526. ***************
  527. *** 812,815 ****
  528. --- 842,848 ----
  529.                     drawOrigY, ObjPtr->detail.g->n, ObjPtr->detail.g->vlist);
  530.            }
  531. +          attr_ptr = ObjPtr->fattr;
  532. +          for ( ; attr_ptr != NULL; attr_ptr = attr_ptr->next)
  533. +             FlipObjVertical (attr_ptr->obj);
  534.            break;
  535.         case OBJ_GROUP:
  536. ***************
  537. *** 819,823 ****
  538.            for ( ; obj_ptr != NULL; obj_ptr = obj_ptr->next)
  539.               FlipObjVertical (obj_ptr);
  540. !          attr_ptr = ObjPtr->detail.r->fattr;
  541.            for ( ; attr_ptr != NULL; attr_ptr = attr_ptr->next)
  542.               FlipObjVertical (attr_ptr->obj);
  543. --- 852,856 ----
  544.            for ( ; obj_ptr != NULL; obj_ptr = obj_ptr->next)
  545.               FlipObjVertical (obj_ptr);
  546. !          attr_ptr = ObjPtr->fattr;
  547.            for ( ; attr_ptr != NULL; attr_ptr = attr_ptr->next)
  548.               FlipObjVertical (attr_ptr->obj);
  549. ***************
  550. *** 897,903 ****
  551.      switch (ObjPtr->type)
  552.      {
  553. -       case OBJ_BOX: break;
  554. -       case OBJ_OVAL: break;
  555. -       case OBJ_TEXT: break;
  556.         case OBJ_POLY:
  557.            num_pts = ObjPtr->detail.p->n;
  558. --- 930,933 ----
  559. ***************
  560. *** 916,923 ****
  561.                     drawOrigY, ObjPtr->detail.p->n, ObjPtr->detail.p->vlist);
  562.            }
  563. !          attr_ptr = ObjPtr->detail.p->fattr;
  564.            for ( ; attr_ptr != NULL; attr_ptr = attr_ptr->next)
  565.               RotateObjClockWise (attr_ptr->obj);
  566.            break;
  567.         case OBJ_POLYGON:
  568.            num_pts = ObjPtr->detail.g->n;
  569. --- 946,964 ----
  570.                     drawOrigY, ObjPtr->detail.p->n, ObjPtr->detail.p->vlist);
  571.            }
  572. !          attr_ptr = ObjPtr->fattr;
  573.            for ( ; attr_ptr != NULL; attr_ptr = attr_ptr->next)
  574.               RotateObjClockWise (attr_ptr->obj);
  575.            break;
  576. +       case OBJ_BOX:
  577. +          attr_ptr = ObjPtr->fattr;
  578. +          for ( ; attr_ptr != NULL; attr_ptr = attr_ptr->next)
  579. +             RotateObjClockWise (attr_ptr->obj);
  580. +          break;
  581. +       case OBJ_OVAL:
  582. +          attr_ptr = ObjPtr->fattr;
  583. +          for ( ; attr_ptr != NULL; attr_ptr = attr_ptr->next)
  584. +             RotateObjClockWise (attr_ptr->obj);
  585. +          break;
  586. +       case OBJ_TEXT: break;
  587.         case OBJ_POLYGON:
  588.            num_pts = ObjPtr->detail.g->n;
  589. ***************
  590. *** 936,939 ****
  591. --- 977,983 ----
  592.                     drawOrigY, ObjPtr->detail.g->n, ObjPtr->detail.g->vlist);
  593.            }
  594. +          attr_ptr = ObjPtr->fattr;
  595. +          for ( ; attr_ptr != NULL; attr_ptr = attr_ptr->next)
  596. +             RotateObjClockWise (attr_ptr->obj);
  597.            break;
  598.         case OBJ_GROUP:
  599. ***************
  600. *** 943,947 ****
  601.            for ( ; obj_ptr != NULL; obj_ptr = obj_ptr->next)
  602.               RotateObjClockWise (obj_ptr);
  603. !          attr_ptr = ObjPtr->detail.r->fattr;
  604.            for ( ; attr_ptr != NULL; attr_ptr = attr_ptr->next)
  605.               RotateObjClockWise (attr_ptr->obj);
  606. --- 987,991 ----
  607.            for ( ; obj_ptr != NULL; obj_ptr = obj_ptr->next)
  608.               RotateObjClockWise (obj_ptr);
  609. !          attr_ptr = ObjPtr->fattr;
  610.            for ( ; attr_ptr != NULL; attr_ptr = attr_ptr->next)
  611.               RotateObjClockWise (attr_ptr->obj);
  612. ***************
  613. *** 1003,1009 ****
  614.      switch (ObjPtr->type)
  615.      {
  616. -       case OBJ_BOX: break;
  617. -       case OBJ_OVAL: break;
  618. -       case OBJ_TEXT: break;
  619.         case OBJ_POLY:
  620.            num_pts = ObjPtr->detail.p->n;
  621. --- 1047,1050 ----
  622. ***************
  623. *** 1022,1029 ****
  624.                     drawOrigY, ObjPtr->detail.p->n, ObjPtr->detail.p->vlist);
  625.            }
  626. !          attr_ptr = ObjPtr->detail.p->fattr;
  627.            for ( ; attr_ptr != NULL; attr_ptr = attr_ptr->next)
  628.               RotateObjCounter (attr_ptr->obj);
  629.            break;
  630.         case OBJ_POLYGON:
  631.            num_pts = ObjPtr->detail.g->n;
  632. --- 1063,1081 ----
  633.                     drawOrigY, ObjPtr->detail.p->n, ObjPtr->detail.p->vlist);
  634.            }
  635. !          attr_ptr = ObjPtr->fattr;
  636.            for ( ; attr_ptr != NULL; attr_ptr = attr_ptr->next)
  637.               RotateObjCounter (attr_ptr->obj);
  638.            break;
  639. +       case OBJ_BOX:
  640. +          attr_ptr = ObjPtr->fattr;
  641. +          for ( ; attr_ptr != NULL; attr_ptr = attr_ptr->next)
  642. +             RotateObjCounter (attr_ptr->obj);
  643. +          break;
  644. +       case OBJ_OVAL:
  645. +          attr_ptr = ObjPtr->fattr;
  646. +          for ( ; attr_ptr != NULL; attr_ptr = attr_ptr->next)
  647. +             RotateObjCounter (attr_ptr->obj);
  648. +          break;
  649. +       case OBJ_TEXT: break;
  650.         case OBJ_POLYGON:
  651.            num_pts = ObjPtr->detail.g->n;
  652. ***************
  653. *** 1042,1045 ****
  654. --- 1094,1100 ----
  655.                     drawOrigY, ObjPtr->detail.g->n, ObjPtr->detail.g->vlist);
  656.            }
  657. +          attr_ptr = ObjPtr->fattr;
  658. +          for ( ; attr_ptr != NULL; attr_ptr = attr_ptr->next)
  659. +             RotateObjCounter (attr_ptr->obj);
  660.            break;
  661.         case OBJ_GROUP:
  662. ***************
  663. *** 1049,1053 ****
  664.            for ( ; obj_ptr != NULL; obj_ptr = obj_ptr->next)
  665.               RotateObjCounter (obj_ptr);
  666. !          attr_ptr = ObjPtr->detail.r->fattr;
  667.            for ( ; attr_ptr != NULL; attr_ptr = attr_ptr->next)
  668.               RotateObjCounter (attr_ptr->obj);
  669. --- 1104,1108 ----
  670.            for ( ; obj_ptr != NULL; obj_ptr = obj_ptr->next)
  671.               RotateObjCounter (obj_ptr);
  672. !          attr_ptr = ObjPtr->fattr;
  673.            for ( ; attr_ptr != NULL; attr_ptr = attr_ptr->next)
  674.               RotateObjCounter (attr_ptr->obj);
  675. *** text.c.orig    Fri Aug 17 13:50:17 1990
  676. --- text.c    Fri Aug 17 13:50:19 1990
  677. ***************
  678. *** 6,10 ****
  679.   #ifndef lint
  680.   static char RCSid[] =
  681. !       "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/text.c,v 1.9 90/07/30 11:02:09 william Exp $";
  682.   #endif
  683.   
  684. --- 6,10 ----
  685.   #ifndef lint
  686.   static char RCSid[] =
  687. !       "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/text.c,v 1.16 90/08/16 15:44:38 william Exp $";
  688.   #endif
  689.   
  690. ***************
  691. *** 147,153 ****
  692.   {
  693.      register int        i, j;
  694.      int            w, h, amount, left, right, len;
  695.      XGCValues        values;
  696. -    XImage        * from_image;
  697.   
  698.      XOff >>= zoomScale;
  699. --- 147,153 ----
  700.   {
  701.      register int        i, j;
  702. +    register XImage    * from_image;
  703.      int            w, h, amount, left, right, len;
  704.      XGCValues        values;
  705.   
  706.      XOff >>= zoomScale;
  707. ***************
  708. *** 266,269 ****
  709. --- 266,273 ----
  710.            }
  711.   
  712. +          XSetForeground (mainDisplay, defaultGC, 0);
  713. +          XFillRectangle (mainDisplay, textBackingPixmap, defaultGC, 0, 0, w, h);
  714. +          XSetForeground (mainDisplay, defaultGC, myFgPixel);
  715.            XSetFont (mainDisplay, revDefaultGC, canvasFontPtr->fid);
  716.            XDrawImageString (mainDisplay, textBackingPixmap, revDefaultGC, 0,
  717. ***************
  718. *** 280,289 ****
  719.                  GCStipple | GCLineWidth, &values);
  720.   
  721. !          for (i = 0; i < w; i++)
  722. !             for (j = 0; j < h; j++)
  723. !                if (XGetPixel (from_image, i, j) == 1)
  724. !                   switch (Rotate)
  725. !                   {
  726. !                      case ROTATE90:
  727.   /*                      XDrawPoint (mainDisplay, Win, gc, XOff-j, YOff+i); */
  728.   /*                         Hack to run on RTs -- crash server on RTs       */
  729. --- 284,293 ----
  730.                  GCStipple | GCLineWidth, &values);
  731.   
  732. !          switch (Rotate)
  733. !          {
  734. !             case ROTATE90:
  735. !                for (i = 0; i < w; i++)
  736. !                   for (j = 0; j < h; j++)
  737. !                      if (XGetPixel (from_image, i, j) == 1)
  738.   /*                      XDrawPoint (mainDisplay, Win, gc, XOff-j, YOff+i); */
  739.   /*                         Hack to run on RTs -- crash server on RTs       */
  740. ***************
  741. *** 290,295 ****
  742.                           XDrawLine (mainDisplay, Win, gc, XOff-j, YOff+i,
  743.                                 XOff-j, YOff+i);
  744. !                         break;
  745. !                      case ROTATE180:
  746.   /*                      XDrawPoint (mainDisplay, Win, gc, XOff-i, YOff-j); */
  747.   /*                         Hack to run on RTs -- crash server on RTs       */
  748. --- 294,302 ----
  749.                           XDrawLine (mainDisplay, Win, gc, XOff-j, YOff+i,
  750.                                 XOff-j, YOff+i);
  751. !                break;
  752. !             case ROTATE180:
  753. !                for (i = 0; i < w; i++)
  754. !                   for (j = 0; j < h; j++)
  755. !                      if (XGetPixel (from_image, i, j) == 1)
  756.   /*                      XDrawPoint (mainDisplay, Win, gc, XOff-i, YOff-j); */
  757.   /*                         Hack to run on RTs -- crash server on RTs       */
  758. ***************
  759. *** 296,301 ****
  760.                           XDrawLine (mainDisplay, Win, gc, XOff-i, YOff-j,
  761.                                 XOff-i, YOff-j);
  762. !                         break;
  763. !                      case ROTATE270:
  764.   /*                      XDrawPoint (mainDisplay, Win, gc, XOff+j, YOff-i); */
  765.   /*                         Hack to run on RTs -- crash server on RTs       */
  766. --- 303,311 ----
  767.                           XDrawLine (mainDisplay, Win, gc, XOff-i, YOff-j,
  768.                                 XOff-i, YOff-j);
  769. !                break;
  770. !             case ROTATE270:
  771. !                for (i = 0; i < w; i++)
  772. !                   for (j = 0; j < h; j++)
  773. !                      if (XGetPixel (from_image, i, j) == 1)
  774.   /*                      XDrawPoint (mainDisplay, Win, gc, XOff+j, YOff-i); */
  775.   /*                         Hack to run on RTs -- crash server on RTs       */
  776. ***************
  777. *** 302,307 ****
  778.                           XDrawLine (mainDisplay, Win, gc, XOff+j, YOff-i,
  779.                                 XOff+j, YOff-i);
  780. !                         break;
  781. !                   }
  782.            XDestroyImage (from_image);
  783.         }
  784. --- 312,318 ----
  785.                           XDrawLine (mainDisplay, Win, gc, XOff+j, YOff-i,
  786.                                 XOff+j, YOff-i);
  787. !                break;
  788. !          }
  789.            XDestroyImage (from_image);
  790.         }
  791. ***************
  792. *** 344,347 ****
  793. --- 355,359 ----
  794.      text_ptr = (struct TextRec *) calloc (1, sizeof(struct TextRec));
  795.      text_ptr->font = curFont;
  796. +    text_ptr->dpi = curFontDPI;
  797.      text_ptr->style = curStyle;
  798.      text_ptr->attr = NULL;
  799. ***************
  800. *** 359,363 ****
  801. --- 371,378 ----
  802.      curTextObj->type = OBJ_TEXT;
  803.      curTextObj->color = colorIndex;
  804. +    curTextObj->id = objId++;
  805. +    curTextObj->dirty = FALSE;
  806.      curTextObj->detail.t = text_ptr;
  807. +    curTextObj->fattr = curTextObj->lattr = NULL;
  808.      AddObj (NULL, topObj, curTextObj);
  809.   
  810. ***************
  811. *** 465,468 ****
  812. --- 480,484 ----
  813.      SaveCurFont ();
  814.      curFont = ObjPtr->detail.t->font;
  815. +    curFontDPI = ObjPtr->detail.t->dpi;
  816.      curStyle = ObjPtr->detail.t->style;
  817.      curSize = ObjPtr->detail.t->size;
  818. ***************
  819. *** 614,632 ****
  820.      if ((attr_ptr = curTextObj->detail.t->attr) != NULL)
  821.      {
  822. !       if ((!attr_ptr->nameshown) || FindEqual (curTextObj->detail.t->first->s))
  823. !       {
  824. !          UpdateAttr(curTextObj->detail.t, attr_ptr);
  825. !          textDrawn = FALSE;
  826. !          justDrawnTextObj = NULL;
  827. !       }
  828. !       else
  829. !       {
  830. !          UnlinkAttr (attr_ptr);
  831. !          curTextObj->detail.t->attr = NULL;
  832. !          AddObj (NULL, topObj, curTextObj);
  833. !          FreeAttr (attr_ptr);
  834. !          textDrawn = TRUE;
  835. !          justDrawnTextObj = curTextObj;
  836. !       }
  837.         AdjObjBBox (attr_ptr->owner);
  838.      }
  839. --- 630,636 ----
  840.      if ((attr_ptr = curTextObj->detail.t->attr) != NULL)
  841.      {
  842. !       UpdateAttr(curTextObj->detail.t, attr_ptr);
  843. !       textDrawn = FALSE;
  844. !       justDrawnTextObj = NULL;
  845.         AdjObjBBox (attr_ptr->owner);
  846.      }
  847. ***************
  848. *** 704,723 ****
  849.         else
  850.         {
  851. !          if ((obj_ptr->type == OBJ_POLY) || (obj_ptr->type == OBJ_GROUP) ||
  852. !                 (obj_ptr->type == OBJ_SYM) || (obj_ptr->type == OBJ_ICON))
  853. !          {
  854. !             switch (obj_ptr->type)
  855. !             {
  856. !                case OBJ_POLY :  attr_ptr = obj_ptr->detail.p->fattr; break;
  857. !                case OBJ_GROUP :
  858. !                case OBJ_SYM  :
  859. !                case OBJ_ICON :  attr_ptr = obj_ptr->detail.r->fattr; break;
  860. !             }
  861. !             for (; attr_ptr != NULL;  attr_ptr = attr_ptr->next)
  862. !                if (X>=attr_ptr->obj->bbox.ltx && X<=attr_ptr->obj->bbox.rbx &&
  863. !                      Y>=attr_ptr->obj->bbox.lty && Y<=attr_ptr->obj->bbox.rby &&
  864. !                      attr_ptr->shown == TRUE)
  865. !                   return (attr_ptr->obj);
  866. !          }
  867.         }
  868.      return (NULL);
  869. --- 708,717 ----
  870.         else
  871.         {
  872. !          attr_ptr = obj_ptr->fattr;
  873. !          for (; attr_ptr != NULL;  attr_ptr = attr_ptr->next)
  874. !             if (X>=attr_ptr->obj->bbox.ltx && X<=attr_ptr->obj->bbox.rbx &&
  875. !                   Y>=attr_ptr->obj->bbox.lty && Y<=attr_ptr->obj->bbox.rby &&
  876. !                   attr_ptr->shown == TRUE)
  877. !                return (attr_ptr->obj);
  878.         }
  879.      return (NULL);
  880. ***************
  881. *** 810,813 ****
  882. --- 804,808 ----
  883.   
  884.               curFont = obj_ptr->detail.t->font;
  885. +             curFontDPI = obj_ptr->detail.t->dpi;
  886.               curStyle = obj_ptr->detail.t->style;
  887.               curSize = obj_ptr->detail.t->size;
  888. ***************
  889. *** 1394,1397 ****
  890. --- 1389,1393 ----
  891.   
  892.      curFont = text_ptr->font;
  893. +    curFontDPI = text_ptr->dpi;
  894.      curStyle = text_ptr->style;
  895.      curSize = text_ptr->size;
  896. ***************
  897. *** 1402,1408 ****
  898.      if (PRTGIF)
  899.      {
  900. !       textCursorH = pDrawCursorH[FontIndex(curFont,curSize,curStyle)];
  901. !       canvasFontAsc = pDrawFontAsc[FontIndex(curFont,curSize,curStyle)];
  902. !       canvasFontDes = pDrawFontDes[FontIndex(curFont,curSize,curStyle)];
  903.      }
  904.      else
  905. --- 1398,1407 ----
  906.      if (PRTGIF)
  907.      {
  908. !       canvasFontAsc =
  909. !             pDrawFontAsc[FontIndex(curFontDPI,curFont,curSize,curStyle)];
  910. !       canvasFontDes =
  911. !             pDrawFontDes[FontIndex(curFontDPI,curFont,curSize,curStyle)];
  912. !       textCursorH = canvasFontAsc + canvasFontDes;
  913. !       pointSize = (curFontDPI == FONT_DPI_75) ? pointSize75 : pointSize100;
  914.      }
  915.      else
  916. ***************
  917. *** 1534,1537 ****
  918. --- 1533,1537 ----
  919.      SaveCurFont ();
  920.      curFont = text_ptr->font;
  921. +    curFontDPI = text_ptr->dpi;
  922.      curStyle = text_ptr->style;
  923.      curSize = text_ptr->size;
  924. ***************
  925. *** 1658,1666 ****
  926.   
  927.      fprintf (FP, "text(%s,", colorMenuItems[ObjPtr->color]);
  928. !    fprintf (FP, "%1d,%1d,%1d,%1d,%1d,%1d,%1d,%1d,%1d,%1d,%1d,[\n", ObjPtr->x,
  929. !          ObjPtr->y, t_ptr->font, t_ptr->style, t_ptr->size,
  930.            t_ptr->lines, t_ptr->just, t_ptr->rotate, t_ptr->pen,
  931.            ObjPtr->obbox.rbx-ObjPtr->obbox.ltx,
  932. !          ObjPtr->obbox.rby-ObjPtr->obbox.lty);
  933.   
  934.      for (s_ptr = t_ptr->first; s_ptr->next != NULL; s_ptr = s_ptr->next)
  935. --- 1658,1666 ----
  936.   
  937.      fprintf (FP, "text(%s,", colorMenuItems[ObjPtr->color]);
  938. !    fprintf (FP, "%1d,%1d,%1d,%1d,%1d,%1d,%1d,%1d,%1d,%1d,%1d,%1d,%1d,[\n",
  939. !          ObjPtr->x, ObjPtr->y, t_ptr->font, t_ptr->style, t_ptr->size,
  940.            t_ptr->lines, t_ptr->just, t_ptr->rotate, t_ptr->pen,
  941.            ObjPtr->obbox.rbx-ObjPtr->obbox.ltx,
  942. !          ObjPtr->obbox.rby-ObjPtr->obbox.lty, ObjPtr->id, t_ptr->dpi);
  943.   
  944.      for (s_ptr = t_ptr->first; s_ptr->next != NULL; s_ptr = s_ptr->next)
  945. ***************
  946. *** 1702,1706 ****
  947.      int            num_lines, x, y, font, style, size;
  948.      int            text_just, rotate, pen;
  949. !    int            bbox_w, bbox_h;
  950.   
  951.      * ObjPtr = (struct ObjRec *) calloc (1, sizeof(struct ObjRec));
  952. --- 1702,1706 ----
  953.      int            num_lines, x, y, font, style, size;
  954.      int            text_just, rotate, pen;
  955. !    int            bbox_w, bbox_h, dpi;
  956.   
  957.      * ObjPtr = (struct ObjRec *) calloc (1, sizeof(struct ObjRec));
  958. ***************
  959. *** 1713,1731 ****
  960.         rotate = 0;
  961.         pen = 1;
  962.      }
  963.      else if (fileVersion <= 6)
  964.         sscanf (s, "%d , %d , %d , %d , %d , %d , %d , %d , %d", &x, &y, &font,
  965.               &style, &size, &num_lines, &text_just, &rotate, &pen);
  966.      else
  967.         sscanf (s,
  968. !             "%d , %d , %d , %d , %d , %d , %d , %d , %d , %d , %d",
  969.               &x, &y, &font, &style, &size, &num_lines, &text_just, &rotate, &pen,
  970. !             &bbox_w, &bbox_h);
  971.   
  972.      text_ptr = (struct TextRec *) calloc (1, sizeof(struct TextRec));
  973. -    text_ptr->just = text_just;
  974.      text_ptr->lines = num_lines;
  975. -    text_ptr->rotate = rotate;
  976. -    text_ptr->pen = pen;
  977.   
  978.      if (!PRTGIF) SaveCurFont ();
  979. --- 1713,1745 ----
  980.         rotate = 0;
  981.         pen = 1;
  982. +       (*ObjPtr)->id = objId++;
  983. +       dpi = FONT_DPI_75;
  984.      }
  985.      else if (fileVersion <= 6)
  986. +    {
  987.         sscanf (s, "%d , %d , %d , %d , %d , %d , %d , %d , %d", &x, &y, &font,
  988.               &style, &size, &num_lines, &text_just, &rotate, &pen);
  989. +       (*ObjPtr)->id = objId++;
  990. +       dpi = FONT_DPI_75;
  991. +    }
  992. +    else if (fileVersion <= 7)
  993. +    {
  994. +       sscanf (s, "%d , %d , %d , %d , %d , %d , %d , %d , %d , %d , %d",
  995. +             &x, &y, &font, &style, &size, &num_lines, &text_just, &rotate, &pen,
  996. +             &bbox_w, &bbox_h);
  997. +       (*ObjPtr)->id = objId++;
  998. +       dpi = FONT_DPI_75;
  999. +    }
  1000.      else
  1001. +    {
  1002.         sscanf (s,
  1003. !             "%d , %d , %d , %d , %d , %d , %d , %d , %d , %d , %d , %d , %d",
  1004.               &x, &y, &font, &style, &size, &num_lines, &text_just, &rotate, &pen,
  1005. !             &bbox_w, &bbox_h, &((*ObjPtr)->id), &dpi);
  1006. !       if ((*ObjPtr)->id >= objId) objId = (*ObjPtr)->id + 1;
  1007. !    }
  1008.   
  1009.      text_ptr = (struct TextRec *) calloc (1, sizeof(struct TextRec));
  1010.      text_ptr->lines = num_lines;
  1011.   
  1012.      if (!PRTGIF) SaveCurFont ();
  1013. ***************
  1014. *** 1732,1745 ****
  1015.   
  1016.      curFont = text_ptr->font = font;
  1017.      curStyle = text_ptr->style = style;
  1018.      curSize = text_ptr->size = size;
  1019. !    textJust = text_just;
  1020. !    curRotate = rotate;
  1021.   
  1022.      if (PRTGIF)
  1023.      {
  1024. !       penPat = pen;
  1025. !       textCursorH = pDrawCursorH[FontIndex(curFont,curSize,curStyle)];
  1026. !       canvasFontAsc = pDrawFontAsc[FontIndex(curFont,curSize,curStyle)];
  1027.      }
  1028.      else
  1029. --- 1746,1763 ----
  1030.   
  1031.      curFont = text_ptr->font = font;
  1032. +    curFontDPI = text_ptr->dpi = dpi;
  1033.      curStyle = text_ptr->style = style;
  1034.      curSize = text_ptr->size = size;
  1035. !    textJust = text_ptr->just = text_just;
  1036. !    curRotate = text_ptr->rotate = rotate;
  1037. !    penPat = text_ptr->pen = pen;
  1038.   
  1039.      if (PRTGIF)
  1040.      {
  1041. !       canvasFontAsc =
  1042. !             pDrawFontAsc[FontIndex(curFontDPI,curFont,curSize,curStyle)];
  1043. !       canvasFontDes =
  1044. !             pDrawFontDes[FontIndex(curFontDPI,curFont,curSize,curStyle)];
  1045. !       textCursorH = canvasFontAsc + canvasFontDes;
  1046.      }
  1047.      else
  1048. ***************
  1049. *** 1777,1780 ****
  1050. --- 1795,1799 ----
  1051.      (*ObjPtr)->type = OBJ_TEXT;
  1052.      (*ObjPtr)->color = FindColorIndex (color_str);
  1053. +    (*ObjPtr)->dirty = FALSE;
  1054.      (*ObjPtr)->detail.t = text_ptr;
  1055.   
  1056. ***************
  1057. *** 1856,1860 ****
  1058.   
  1059.      if (*s == *s1) return; /* no updates */
  1060. !    ObjPtr->detail.t->attr->owner->detail.r->dirty = TRUE;
  1061.      *c_ptr = '\0';
  1062.   
  1063. --- 1875,1879 ----
  1064.   
  1065.      if (*s == *s1) return; /* no updates */
  1066. !    ObjPtr->detail.t->attr->owner->dirty = TRUE;
  1067.      *c_ptr = '\0';
  1068.   
  1069. ***************
  1070. *** 1861,1864 ****
  1071. --- 1880,1884 ----
  1072.      SaveCurFont ();
  1073.      curFont = ObjPtr->detail.t->font;
  1074. +    curFontDPI = ObjPtr->detail.t->dpi;
  1075.      curStyle = ObjPtr->detail.t->style;
  1076.      curSize = ObjPtr->detail.t->size;
  1077. *** tgif.c.orig    Fri Aug 17 13:50:28 1990
  1078. --- tgif.c    Fri Aug 17 13:50:29 1990
  1079. ***************
  1080. *** 6,10 ****
  1081.   #ifndef lint
  1082.   static char RCSid[] =
  1083. !       "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/tgif.c,v 1.6 90/07/30 11:04:46 william Exp $";
  1084.   #endif
  1085.   
  1086. --- 6,10 ----
  1087.   #ifndef lint
  1088.   static char RCSid[] =
  1089. !       "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/tgif.c,v 1.7 90/08/15 15:05:17 william Exp $";
  1090.   #endif
  1091.   
  1092. ***************
  1093. *** 21,25 ****
  1094.   
  1095.   int    lastFile;
  1096. - short    * pDrawCursorH;
  1097.   short    * pDrawFontAsc;
  1098.   short    * pDrawFontDes;
  1099. --- 21,24 ----
  1100. *** version.c.orig    Fri Aug 17 13:50:33 1990
  1101. --- version.c    Fri Aug 17 13:50:34 1990
  1102. ***************
  1103. *** 6,11 ****
  1104.   #ifndef lint
  1105.   static char RCSid[] =
  1106. !       "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/version.c,v 1.15 90/08/02 09:05:03 william Exp $";
  1107.   #endif
  1108.   
  1109. ! char    * version_string = "1.12";
  1110. --- 6,11 ----
  1111.   #ifndef lint
  1112.   static char RCSid[] =
  1113. !       "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/version.c,v 1.16 90/08/16 09:41:02 william Exp $";
  1114.   #endif
  1115.   
  1116. ! char    * version_string = "1.13";
  1117. *** choice.e.orig    Fri Aug 17 13:50:39 1990
  1118. --- choice.e    Fri Aug 17 13:50:40 1990
  1119. ***************
  1120. *** 4,8 ****
  1121.    * Copyright (C) 1989, William Cheng.
  1122.    *
  1123. !  * @(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/choice.e,v 1.1 90/04/01 22:16:56 william Exp $
  1124.    */
  1125.   
  1126. --- 4,8 ----
  1127.    * Copyright (C) 1989, William Cheng.
  1128.    *
  1129. !  * @(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/choice.e,v 1.2 90/08/14 18:04:06 william Exp $
  1130.    */
  1131.   
  1132. ***************
  1133. *** 17,20 ****
  1134. --- 17,21 ----
  1135.   extern void    ShowJust ();
  1136.   extern void    ShowCurFont ();
  1137. + extern void    ShowCurFontDPI ();
  1138.   extern void    ShowLineWidth ();
  1139.   extern void    ShowWhereToPrint ();
  1140. *** copypaste.e.orig    Fri Aug 17 13:50:42 1990
  1141. --- copypaste.e    Fri Aug 17 13:50:44 1990
  1142. ***************
  1143. *** 0 ****
  1144. --- 1,12 ----
  1145. + /*
  1146. +  * Author:    Kou1 Ma2da (matsuda@ccs.mt.nec.co.jp)
  1147. +  * Modified By:    William Chia-Wei Cheng (william@cs.ucla.edu)
  1148. +  *
  1149. +  * Copyright (C) 1990, William Cheng.
  1150. +  *
  1151. +  * @(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/copypaste.e,v 1.1 90/08/16 09:34:15 william Exp $
  1152. +  */
  1153. + extern void    CopyToCutBuffer ();
  1154. + extern void    PasteFromCutBuffer ();
  1155. + extern void    CleanUpCutBuffer ();
  1156. *** dup.e.orig    Fri Aug 17 13:50:48 1990
  1157. --- dup.e    Fri Aug 17 13:50:49 1990
  1158. ***************
  1159. *** 4,8 ****
  1160.    * Copyright (C) 1989, William Cheng.
  1161.    *
  1162. !  * @(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/dup.e,v 1.2 90/07/06 18:00:44 william Exp $
  1163.    */
  1164.   
  1165. --- 4,8 ----
  1166.    * Copyright (C) 1989, William Cheng.
  1167.    *
  1168. !  * @(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/dup.e,v 1.3 90/08/16 09:05:28 william Exp $
  1169.    */
  1170.   
  1171. ***************
  1172. *** 11,16 ****
  1173.   extern int    dupDy;
  1174.   
  1175. ! extern void    DupObjBasics ();
  1176. ! extern void    DupTextObj ();
  1177. ! extern void    DupSelObj ();
  1178. ! extern void    JustDupSelObj ();
  1179. --- 11,17 ----
  1180.   extern int    dupDy;
  1181.   
  1182. ! extern void        DupObjBasics ();
  1183. ! extern void        DupTextObj ();
  1184. ! extern struct ObjRec    * DupObj ();
  1185. ! extern void        DupSelObj ();
  1186. ! extern void        JustDupSelObj ();
  1187. *** file.e.orig    Fri Aug 17 13:50:53 1990
  1188. --- file.e    Fri Aug 17 13:50:54 1990
  1189. ***************
  1190. *** 4,8 ****
  1191.    * Copyright (C) 1989, William Cheng.
  1192.    *
  1193. !  * @(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/file.e,v 1.11 90/07/30 15:53:31 william Exp $
  1194.    */
  1195.   
  1196. --- 4,8 ----
  1197.    * Copyright (C) 1989, William Cheng.
  1198.    *
  1199. !  * @(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/file.e,v 1.12 90/08/10 23:51:33 william Exp $
  1200.    */
  1201.   
  1202. ***************
  1203. *** 30,33 ****
  1204. --- 30,34 ----
  1205.   extern char    * FindChar ();
  1206.   extern void    ReadState ();
  1207. + extern void    ReadObjAttrs ();
  1208.   extern int    ReadObj ();
  1209.   extern void    ChangeDomain ();
  1210. *** font.e.orig    Fri Aug 17 13:50:58 1990
  1211. --- font.e    Fri Aug 17 13:50:59 1990
  1212. ***************
  1213. *** 4,8 ****
  1214.    * Copyright (C) 1989, William Cheng.
  1215.    *
  1216. !  * @(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/font.e,v 1.3 90/07/20 16:59:06 william Exp $
  1217.    */
  1218.   
  1219. --- 4,8 ----
  1220.    * Copyright (C) 1989, William Cheng.
  1221.    *
  1222. !  * @(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/font.e,v 1.4 90/08/15 16:58:35 william Exp $
  1223.    */
  1224.   
  1225. ***************
  1226. *** 26,30 ****
  1227.   extern int    defaultFontDes;
  1228.   
  1229. ! extern int    pointSize[];
  1230.   extern int    curFontDPI;
  1231.   extern int    curFont;
  1232. --- 26,32 ----
  1233.   extern int    defaultFontDes;
  1234.   
  1235. ! extern int    * pointSize;
  1236. ! extern int    pointSize75[];
  1237. ! extern int    pointSize100[];
  1238.   extern int    curFontDPI;
  1239.   extern int    curFont;
  1240. *** prtgif.e.orig    Fri Aug 17 13:51:04 1990
  1241. --- prtgif.e    Fri Aug 17 13:51:05 1990
  1242. ***************
  1243. *** 4,12 ****
  1244.    * Copyright (C) 1990, William Cheng.
  1245.    *
  1246. !  * @(#) $Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/prtgif.e,v 1.1 90/07/30 11:08:07 william Exp $
  1247.    */
  1248.   
  1249.   extern int    lastFile;
  1250. - extern short    pDrawCursorH[];
  1251.   extern short    pDrawFontAsc[];
  1252.   extern short    pDrawFontDes[];
  1253. --- 4,11 ----
  1254.    * Copyright (C) 1990, William Cheng.
  1255.    *
  1256. !  * @(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/prtgif.e,v 1.3 90/08/17 11:13:33 william Exp $
  1257.    */
  1258.   
  1259.   extern int    lastFile;
  1260.   extern short    pDrawFontAsc[];
  1261.   extern short    pDrawFontDes[];
  1262. *** const.h.orig    Fri Aug 17 13:51:09 1990
  1263. --- const.h    Fri Aug 17 13:51:10 1990
  1264. ***************
  1265. *** 4,8 ****
  1266.    * Copyright (C) 1990, William Cheng.
  1267.    *
  1268. !  * @(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/const.h,v 1.5 90/05/23 08:54:00 william Exp Locker: william $
  1269.    */
  1270.   
  1271. --- 4,8 ----
  1272.    * Copyright (C) 1990, William Cheng.
  1273.    *
  1274. !  * @(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/const.h,v 1.7 90/08/15 11:41:10 william Exp $
  1275.    */
  1276.   
  1277. ***************
  1278. *** 114,117 ****
  1279. --- 114,122 ----
  1280.   #define MAXFONTSTYLES 4
  1281.   
  1282. + #define FONT_DPI_75 0
  1283. + #define FONT_DPI_100 1
  1284. + #define MAXFONTDPIS 2
  1285.   #define MAXFONTSIZES 6
  1286.   
  1287. ***************
  1288. *** 121,142 ****
  1289.   
  1290.   #define MAXJUSTS 3
  1291. - /* top level menu */
  1292. - #define MENU_MODE 0
  1293. - #define MENU_FILE 1
  1294. - #define MENU_EDIT 2
  1295. - #define MENU_STYLE 3
  1296. - #define MENU_SIZE 4
  1297. - #define MENU_FONT 5
  1298. - #define MENU_LAYOUT 6
  1299. - #define MENU_ARRANGE 7
  1300. - #define MENU_FILL 8
  1301. - #define MENU_LINESTYLE 9
  1302. - #define MENU_PEN 10
  1303. - #define MENU_COLOR 11
  1304. - #define MENU_SPECIAL 12
  1305. - #define MAXMENUS 13
  1306.   
  1307.   /* alignment */
  1308. --- 126,129 ----
  1309. *** types.h.orig    Fri Aug 17 13:51:16 1990
  1310. --- types.h    Fri Aug 17 13:51:16 1990
  1311. ***************
  1312. *** 4,8 ****
  1313.    * Copyright (C) 1990, William Cheng.
  1314.    *
  1315. !  * @(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/types.h,v 1.4 90/07/30 15:53:05 william Exp $
  1316.    */
  1317.   
  1318. --- 4,8 ----
  1319.    * Copyright (C) 1990, William Cheng.
  1320.    *
  1321. !  * @(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/types.h,v 1.7 90/08/14 17:32:37 william Exp $
  1322.    */
  1323.   
  1324. ***************
  1325. *** 19,26 ****
  1326.   
  1327.   typedef struct ObjRec {
  1328. !    int            x, y, type, color;
  1329.      struct BBRec        obbox;    /* object bounding box */
  1330.      struct BBRec        bbox;    /* real bounding box */
  1331.      struct ObjRec    * next, * prev;
  1332.      union {
  1333.         struct GroupRec    * r;
  1334. --- 19,27 ----
  1335.   
  1336.   typedef struct ObjRec {
  1337. !    int            x, y, type, color, id, dirty;
  1338.      struct BBRec        obbox;    /* object bounding box */
  1339.      struct BBRec        bbox;    /* real bounding box */
  1340.      struct ObjRec    * next, * prev;
  1341. +    struct AttrRec    * fattr, * lattr; /* first and last attributes */
  1342.      union {
  1343.         struct GroupRec    * r;
  1344. ***************
  1345. *** 47,53 ****
  1346.      struct ObjRec    * first, * last;
  1347.      char            s[MAXSTRING+1];
  1348. -    int            id, dirty;
  1349. -    struct AttrRec    * fattr, *lattr; /* first and last attributes */
  1350. -             /* OBJ_GROUP, OBJ_SYM, OBJ_ICON can have attr */
  1351.   } * GroupRecPtr;
  1352.   
  1353. --- 48,51 ----
  1354. ***************
  1355. *** 57,62 ****
  1356.      int            sn;    /* number of points in the spline polyline */
  1357.      XPoint        * svlist;
  1358. !    int            style, width, pen, curved, id, fill;
  1359. !    struct AttrRec    * fattr, *lattr; /* OBJ_POLY can have attr */
  1360.   } * PolyRecPtr;
  1361.   
  1362. --- 55,59 ----
  1363.      int            sn;    /* number of points in the spline polyline */
  1364.      XPoint        * svlist;
  1365. !    int            style, width, pen, curved, fill;
  1366.   } * PolyRecPtr;
  1367.   
  1368. ***************
  1369. *** 85,89 ****
  1370.      int            just;
  1371.      int            lines;
  1372. !    int            font, style, size, rotate, pen;
  1373.      struct AttrRec       * attr; /* ptr to attr record if text obj is an attr */
  1374.      struct StrRec    * first, * last;
  1375. --- 82,86 ----
  1376.      int            just;
  1377.      int            lines;
  1378. !    int            font, style, size, dpi, rotate, pen;
  1379.      struct AttrRec       * attr; /* ptr to attr record if text obj is an attr */
  1380.      struct StrRec    * first, * last;
  1381. ***************
  1382. *** 101,105 ****
  1383.      int            orig_x, orig_y, zoom, grid, grid_on;
  1384.      int            color, h_align, v_align, line_w, line_s;
  1385. !    int            fill, pen, just, font, font_s, f_size, f_comp_size;
  1386.      char            name[MAXPATHLENGTH+1], domain[MAXPATHLENGTH+1];
  1387.   } * StkRecPtr;
  1388. --- 98,102 ----
  1389.      int            orig_x, orig_y, zoom, grid, grid_on;
  1390.      int            color, h_align, v_align, line_w, line_s;
  1391. !    int            fill, pen, just, font, f_style, f_size, f_dpi;
  1392.      char            name[MAXPATHLENGTH+1], domain[MAXPATHLENGTH+1];
  1393.   } * StkRecPtr;
  1394. *** Makefile.noimake.orig    Fri Aug 17 13:51:22 1990
  1395. --- Makefile.noimake    Fri Aug 17 13:51:23 1990
  1396. ***************
  1397. *** 4,8 ****
  1398.   # Copyright (C) 1990, William Cheng.
  1399.   #
  1400. ! # @(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/Makefile.noimake,v 1.19 90/07/30 11:05:05 william Exp $
  1401.   #
  1402.   
  1403. --- 4,8 ----
  1404.   # Copyright (C) 1990, William Cheng.
  1405.   #
  1406. ! # @(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/Makefile.noimake,v 1.22 90/08/16 13:21:47 william Exp $
  1407.   #
  1408.   
  1409. ***************
  1410. *** 19,23 ****
  1411.   OBJ1 =    align.o animate.o attr.o \
  1412.       box.o button.o \
  1413. !     choice.o color.o cursor.o \
  1414.       dialog.o drawing.o dup.o \
  1415.       edit.o \
  1416. --- 19,23 ----
  1417.   OBJ1 =    align.o animate.o attr.o \
  1418.       box.o button.o \
  1419. !     choice.o color.o copypaste.o cursor.o \
  1420.       dialog.o drawing.o dup.o \
  1421.       edit.o \
  1422. ***************
  1423. *** 95,111 ****
  1424.   color.o:    const.h types.h \
  1425.           choice.e mark.e menu.e obj.e raster.e select.e setup.e text.e
  1426.   cursor.o:    const.h types.h $(CURSOR_BM) choice.e setup.e
  1427.   dialog.o:    const.h box.e cursor.e font.e mainloop.e raster.e setup.e
  1428.   drawing.o:    const.h types.h \
  1429. !         align.e animate.e attr.e box.e choice.e cursor.e dialog.e \
  1430. !         dup.e edit.e file.e font.e grid.e group.e mark.e menu.e msg.e \
  1431. !         obj.e oval.e pattern.e poly.e polygon.e raster.e rect.e \
  1432. !         ruler.e scroll.e select.e setup.e special.e stk.e stretch.e \
  1433. !         text.e
  1434.   dup.o:        const.h types.h \
  1435.           attr.e drawing.e grid.e obj.e select.e setup.e
  1436.   edit.o:        const.h types.h \
  1437. !         align.e color.e cursor.e drawing.e dup.e font.e group.e mark.e \
  1438. !         obj.e poly.e raster.e select.e setup.e spline.e stretch.e
  1439.   file.o:        const.h types.h \
  1440.           align.e attr.e box.e button.e choice.e color.e dialog.e \
  1441. --- 95,115 ----
  1442.   color.o:    const.h types.h \
  1443.           choice.e mark.e menu.e obj.e raster.e select.e setup.e text.e
  1444. + copypaste.o:    const.h types.h \
  1445. +         choice.e color.e dup.e file.e font.e obj.e pattern.e select.e \
  1446. +         setup.e special.e text.e
  1447.   cursor.o:    const.h types.h $(CURSOR_BM) choice.e setup.e
  1448.   dialog.o:    const.h box.e cursor.e font.e mainloop.e raster.e setup.e
  1449.   drawing.o:    const.h types.h \
  1450. !         align.e animate.e attr.e box.e choice.e copypaste.e cursor.e \
  1451. !         dialog.e dup.e edit.e file.e font.e grid.e group.e mark.e \
  1452. !         menu.e msg.e obj.e oval.e pattern.e poly.e polygon.e raster.e \
  1453. !         rect.e ruler.e scroll.e select.e setup.e special.e stk.e \
  1454. !         stretch.e text.e
  1455.   dup.o:        const.h types.h \
  1456.           attr.e drawing.e grid.e obj.e select.e setup.e
  1457.   edit.o:        const.h types.h \
  1458. !         align.e color.e copypaste.e cursor.e drawing.e dup.e font.e \
  1459. !         group.e mark.e obj.e poly.e raster.e select.e setup.e spline.e \
  1460. !         stretch.e
  1461.   file.o:        const.h types.h \
  1462.           align.e attr.e box.e button.e choice.e color.e dialog.e \
  1463. ***************
  1464. *** 122,128 ****
  1465.           attr.e dup.e file.e obj.e select.e setup.e
  1466.   mainloop.o:    const.h types.h \
  1467. !         animate.e choice.e color.e cursor.e dialog.e drawing.e \
  1468. !         file.e font.e grid.e menu.e msg.e names.e obj.e raster.e \
  1469. !         ruler.e scroll.e select.e setup.e stk.e text.e
  1470.   mark.o:        const.h types.h \
  1471.           raster.e setup.e select.e
  1472. --- 126,132 ----
  1473.           attr.e dup.e file.e obj.e select.e setup.e
  1474.   mainloop.o:    const.h types.h \
  1475. !         animate.e choice.e color.e copypaste.e cursor.e dialog.e \
  1476. !         drawing.e file.e font.e grid.e menu.e msg.e names.e obj.e \
  1477. !         raster.e ruler.e scroll.e select.e setup.e stk.e text.e
  1478.   mark.o:        const.h types.h \
  1479.           raster.e setup.e select.e
  1480. *** Imakefile.orig    Fri Aug 17 13:51:29 1990
  1481. --- Imakefile    Fri Aug 17 13:51:29 1990
  1482. ***************
  1483. *** 4,11 ****
  1484.   /**/# Copyright (C) 1990, William Cheng.
  1485.   /**/#
  1486. ! /**/# @(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/Imakefile,v 1.21 90/08/02 09:15:42 william Exp $
  1487.   /**/#
  1488.   
  1489. ! TGIFVERSION    = 1.12
  1490.   PROGRAMS    = tgif prtgif tgif2ps frontend11.o
  1491.   CDEBUGFLAGS    = -g
  1492. --- 4,11 ----
  1493.   /**/# Copyright (C) 1990, William Cheng.
  1494.   /**/#
  1495. ! /**/# @(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/Imakefile,v 1.23 90/08/17 09:48:59 william Exp $
  1496.   /**/#
  1497.   
  1498. ! TGIFVERSION    = 1.13
  1499.   PROGRAMS    = tgif prtgif tgif2ps frontend11.o
  1500.   CDEBUGFLAGS    = -g
  1501. ***************
  1502. *** 15,18 ****
  1503. --- 15,19 ----
  1504.             -DPSFILE_MOD=\"664\"
  1505.   LOCAL_LIBRARIES    = $(XLIB)
  1506. + DEPLIBS        = $(DEPXLIB)
  1507.   SYS_LIBRARIES    = -lm
  1508.   
  1509. ***************
  1510. *** 19,23 ****
  1511.   OBJ1 =    align.o animate.o attr.o \
  1512.       box.o button.o \
  1513. !     choice.o color.o cursor.o \
  1514.       dialog.o drawing.o dup.o \
  1515.       edit.o \
  1516. --- 20,24 ----
  1517.   OBJ1 =    align.o animate.o attr.o \
  1518.       box.o button.o \
  1519. !     choice.o color.o copypaste.o cursor.o \
  1520.       dialog.o drawing.o dup.o \
  1521.       edit.o \
  1522. *** tgif.man.orig    Fri Aug 17 13:51:39 1990
  1523. --- tgif.man    Fri Aug 17 13:51:40 1990
  1524. ***************
  1525. *** 1,4 ****
  1526. ! .\"@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/tgif.man,v 1.10 90/07/30 16:06:37 william Exp $
  1527. ! .TH TGIF 1 "Version 1.10 and Above" "Tgif"
  1528.   .SH NAME
  1529.   \fItgif\fR \- Xlib based 2-D drawing facility under X11.  Also supports
  1530. --- 1,4 ----
  1531. ! .\"@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/tgif.man,v 1.11 90/08/16 15:30:15 william Exp $
  1532. ! .TH TGIF 1 "Version 1.13 and Above" "Tgif"
  1533.   .SH NAME
  1534.   \fItgif\fR \- Xlib based 2-D drawing facility under X11.  Also supports
  1535. ***************
  1536. *** 80,89 ****
  1537.   styles (plain, head arrow, tail arrow, double arrows) for
  1538.   polyline and open-splines, 3 types of text justifications, 4 text
  1539. ! styles (roman, itatlic, bold, bold-italic), 6 text sizes
  1540. ! (8, 10, 12, 14, 18, 24), 5 fonts (Times, Courier,
  1541. ! Helvetica, New-Century-Schoolbook, Symbol), and 10 colors (magenta,
  1542.   red, green, blue, yellow, pink, cyan, cadet-blue, white, black).
  1543.   Only right-angle rotations are supported.
  1544. ! All commands in tgif can either be activated by a
  1545.   pop-up menu or by typing an appropriate
  1546.   non-alphanumeric key.
  1547. --- 80,90 ----
  1548.   styles (plain, head arrow, tail arrow, double arrows) for
  1549.   polyline and open-splines, 3 types of text justifications, 4 text
  1550. ! styles (roman, itatlic, bold, bold-italic), 12 text sizes
  1551. ! (8, 10, 12, 14, 18, and 24 for the 75dpi fonts and
  1552. ! 11, 14, 17, 20, 25, and 34 for the 100dpi fonts), 5 fonts (Times, Courier,
  1553. ! Helvetica, New-Century-Schoolbook, Symbol), and 10 default colors (magenta,
  1554.   red, green, blue, yellow, pink, cyan, cadet-blue, white, black).
  1555.   Only right-angle rotations are supported.
  1556. ! Most commands in tgif can either be activated by a
  1557.   pop-up menu or by typing an appropriate
  1558.   non-alphanumeric key.
  1559. ***************
  1560. *** 175,178 ****
  1561. --- 176,180 ----
  1562.     ^W    change the drawing mode to text\br
  1563.     ^X    delete all selected objects\br
  1564. +   ^Y    copy selected object to cut buffer\br
  1565.     ^Z    escape to Prolog\br
  1566.     ^,    scroll left\br
  1567. ***************
  1568. *** 205,214 ****
  1569.     #Y    escape to Prolog\br
  1570.     #Z    zoom in\br
  1571. !   #0    change the font size to 8\br
  1572. !   #1    change the font size to 10\br
  1573. !   #2    change the font size to 12\br
  1574. !   #3    change the font size to 14\br
  1575. !   #4    change the font size to 18\br
  1576. !   #5    change the font size to 24\br
  1577.     #,    scroll up\br
  1578.     #.    scroll down\br
  1579. --- 207,216 ----
  1580.     #Y    escape to Prolog\br
  1581.     #Z    zoom in\br
  1582. !   #0    change the font size to 8 (11)\br
  1583. !   #1    change the font size to 10 (14)\br
  1584. !   #2    change the font size to 12 (17)\br
  1585. !   #3    change the font size to 14 (20)\br
  1586. !   #4    change the font size to 18 (25)\br
  1587. !   #5    change the font size to 24 (34)\br
  1588.     #,    scroll up\br
  1589.     #.    scroll down\br
  1590. ***************
  1591. *** 232,235 ****
  1592. --- 234,238 ----
  1593.    ^#V    change the drawing mode to oval\br
  1594.    ^#W    toggle between poly and spline\br
  1595. +  ^#Y    paste from the cut buffer\br
  1596.   .DE
  1597.   .br
  1598. ***************
  1599. *** 415,419 ****
  1600.   \fBlatex\fR(1L), \fBlpr\fR(1), \fBenv\fR(1), \fBX\fR(1), \fBtgif2ps\fR(1),
  1601.   \fBdvips\fR(1)
  1602. ! .SH BUGS
  1603.   When any of the ``escape to Prolog'' commands are accidentally
  1604.   executed, just type a return key in the window where tgif is started
  1605. --- 418,422 ----
  1606.   \fBlatex\fR(1L), \fBlpr\fR(1), \fBenv\fR(1), \fBX\fR(1), \fBtgif2ps\fR(1),
  1607.   \fBdvips\fR(1)
  1608. ! .SH IDIOSYNCHRASIES
  1609.   When any of the ``escape to Prolog'' commands are accidentally
  1610.   executed, just type a return key in the window where tgif is started
  1611. ***************
  1612. *** 420,423 ****
  1613. --- 423,435 ----
  1614.   to resume tgif.
  1615.   .PP
  1616. + The paste operation works on a cut buffer generated by tgif or by non-tgif
  1617. + tools (such as \fIxterm\fR).
  1618. + If the cut buffer is \fInot\fR generated by tgif, its content is treated as
  1619. + ASCII character strings, which is inserted into the current drawing
  1620. + as a text object (current settings for text objects are used
  1621. + to create the text object).
  1622. + If the cut buffer \fIis\fR generated by tgif, then all the current
  1623. + settings are ignored.
  1624. + .SH BUGS
  1625.   The directory where tgif is started is considerd the root
  1626.   directory of the tgif session.  The user is not allowed to
  1627. ---------------------------------> cut here <---------------------------------
  1628. --
  1629. Bill Cheng // UCLA Computer Science Department // (213) 206-7135
  1630. 3277 Boelter Hall // Los Angeles, California 90024 // USA
  1631. william@CS.UCLA.EDU      ...!{uunet|ucbvax}!cs.ucla.edu!william
  1632.  
  1633. dan
  1634. ----------------------------------------------------
  1635. O'Reilly && Associates   argv@sun.com / argv@ora.com
  1636. Opinions expressed reflect those of the author only.
  1637.