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

  1. Path: uunet!mailrus!cs.utexas.edu!sun-barr!newstop!sun!CS.UCLA.EDU
  2. From: william@CS.UCLA.EDU (William Cheng)
  3. Newsgroups: comp.sources.x
  4. Subject: v08i059: tgif (tgif-1.9 => tgif-1.12), Patch2, Part02/03
  5. Message-ID: <140169@sun.Eng.Sun.COM>
  6. Date: 4 Aug 90 02:12:23 GMT
  7. Sender: news@sun.Eng.Sun.COM
  8. Lines: 1347
  9. Approved: argv@sun.com
  10.  
  11. Submitted-by: william@CS.UCLA.EDU (William Cheng)
  12. Posting-number: Volume 8, Issue 59
  13. Archive-name: tgif/patch2.02
  14. Patch-To: tgif: Volume 7, Issue 56-76 (original: tgif-1.2)
  15. Patch-To: tgif: Volume 8, Issue 46-48 (Patch1: tgif-1.2 => tgif-1.9)
  16.  
  17.  
  18. ---------------------------------> cut here <---------------------------------
  19. *** font.c.orig    Thu Aug  2 09:44:45 1990
  20. --- font.c    Thu Aug  2 09:44:47 1990
  21. ***************
  22. *** 6,10 ****
  23.   #ifndef lint
  24.   static char RCSid[] =
  25. !       "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/font.c,v 1.2 90/06/26 00:05:27 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/font.c,v 1.5 90/07/30 15:54:02 william Exp $";
  32.   #endif
  33.   
  34. ***************
  35. *** 631,635 ****
  36.   }
  37.   
  38. ! ChangeFont (FontIndex)
  39.      int    FontIndex;
  40.   {
  41. --- 631,635 ----
  42.   }
  43.   
  44. ! void ChangeFont (FontIndex)
  45.      int    FontIndex;
  46.   {
  47. *** grid.c.orig    Thu Aug  2 09:44:54 1990
  48. --- grid.c    Thu Aug  2 09:44:55 1990
  49. ***************
  50. *** 6,10 ****
  51.   #ifndef lint
  52.   static char RCSid[] =
  53. !       "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/grid.c,v 1.4 90/06/26 00:05:37 william Exp $";
  54.   #endif
  55.   
  56. --- 6,10 ----
  57.   #ifndef lint
  58.   static char RCSid[] =
  59. !       "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/grid.c,v 1.6 90/07/16 10:18:38 william Exp $";
  60.   #endif
  61.   
  62. ***************
  63. *** 30,34 ****
  64.   int    gridOn = TRUE;
  65.   int    xyGrid = DEFAULT_GRID;
  66. - int    curScale = 1;
  67.   int    pageStyle = PORTRAIT;
  68.   int    whereToPrint = PRINTER;
  69. --- 30,33 ----
  70. ***************
  71. *** 586,588 ****
  72. --- 585,591 ----
  73.         *GridY = Y;
  74.      }
  75. + }
  76. + void CleanUpGrids ()
  77. + {
  78.   }
  79. *** group.c.orig    Thu Aug  2 09:45:01 1990
  80. --- group.c    Thu Aug  2 09:45:02 1990
  81. ***************
  82. *** 6,10 ****
  83.   #ifndef lint
  84.   static char RCSid[] =
  85. !       "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/group.c,v 1.2 90/06/26 00:05:45 william Exp $";
  86.   #endif
  87.   
  88. --- 6,10 ----
  89.   #ifndef lint
  90.   static char RCSid[] =
  91. !       "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/group.c,v 1.3 90/07/30 11:10:25 william Exp $";
  92.   #endif
  93.   
  94. ***************
  95. *** 86,92 ****
  96.   }
  97.   
  98. ! void ReadGroupObj (FP, ObjPtr)
  99.      FILE            * FP;
  100.      struct ObjRec    * * ObjPtr;
  101.   {
  102.      struct GroupRec    * group_ptr;
  103. --- 86,93 ----
  104.   }
  105.   
  106. ! void ReadGroupObj (FP, ObjPtr, PRTGIF)
  107.      FILE            * FP;
  108.      struct ObjRec    * * ObjPtr;
  109. +    int            PRTGIF;
  110.   {
  111.      struct GroupRec    * group_ptr;
  112. ***************
  113. *** 97,101 ****
  114.      * ObjPtr = (struct ObjRec *) calloc (1, sizeof(struct ObjRec));
  115.   
  116. !    while (ReadObj (FP, &obj_ptr))
  117.      {
  118.         obj_ptr->next = top_obj;
  119. --- 98,102 ----
  120.      * ObjPtr = (struct ObjRec *) calloc (1, sizeof(struct ObjRec));
  121.   
  122. !    while (ReadObj (FP, &obj_ptr, PRTGIF))
  123.      {
  124.         obj_ptr->next = top_obj;
  125. *** mainloop.c.orig    Thu Aug  2 09:45:10 1990
  126. --- mainloop.c    Thu Aug  2 09:45:12 1990
  127. ***************
  128. *** 6,13 ****
  129.   #ifndef lint
  130.   static char RCSid[] =
  131. !       "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/mainloop.c,v 1.4 90/06/26 00:10:31 william Exp $";
  132.   #endif
  133.   
  134.   #include <stdio.h>
  135.   #include <X11/Xlib.h>
  136.   #include "const.h"
  137. --- 6,14 ----
  138.   #ifndef lint
  139.   static char RCSid[] =
  140. !       "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/mainloop.c,v 1.12 90/07/30 11:01:17 william Exp $";
  141.   #endif
  142.   
  143.   #include <stdio.h>
  144. + #include <signal.h>
  145.   #include <X11/Xlib.h>
  146.   #include "const.h"
  147. ***************
  148. *** 22,25 ****
  149. --- 23,27 ----
  150.   #include "file.e"
  151.   #include "font.e"
  152. + #include "grid.e"
  153.   #include "menu.e"
  154.   #include "msg.e"
  155. ***************
  156. *** 29,36 ****
  157. --- 31,41 ----
  158.   #include "ruler.e"
  159.   #include "scroll.e"
  160. + #include "select.e"
  161.   #include "setup.e"
  162. + #include "stk.e"
  163.   #include "text.e"
  164.   
  165.   int    geometrySpecified = FALSE;
  166. + int    exitNormally = FALSE;
  167.   char    geometrySpec[80];
  168.   char    initMsg1[80], initMsg2[80];
  169. ***************
  170. *** 111,114 ****
  171. --- 116,120 ----
  172.   {
  173.      CleanUpDrawingWindow ();
  174. +    CleanUpStk ();
  175.      CleanUpChoices ();
  176.   
  177. ***************
  178. *** 122,126 ****
  179. --- 128,137 ----
  180.      CleanUpNames ();
  181.      CleanUpText ();
  182. +    CleanUpColors ();
  183. +    CleanUpFiles ();
  184. +    CleanUpGrids ();
  185.   
  186. +    DelAllCutSel ();
  187.      XDestroyWindow (mainDisplay, mainWindow);
  188.      if (iconWindowCreated)
  189. ***************
  190. *** 146,149 ****
  191. --- 157,161 ----
  192.      if (strcmp (Op, "init") == 0)
  193.      {
  194. +       exitNormally = FALSE;
  195.         if ((mainDisplay = XOpenDisplay (NULL)) == 0)
  196.         {
  197. ***************
  198. *** 156,160 ****
  199.         rootWindow = RootWindow (mainDisplay, mainScreen);
  200.   
  201. ! /*    XSetErrorHandler (MyErrorHandler); */
  202.   
  203.         Setup ();
  204. --- 168,177 ----
  205.         rootWindow = RootWindow (mainDisplay, mainScreen);
  206.   
  207. !       XSetErrorHandler (EmergencySave);
  208. !       XSetIOErrorHandler (EmergencySave);
  209. !       signal (SIGHUP, EmergencySave);
  210. !       signal (SIGFPE, EmergencySave);
  211. !       signal (SIGBUS, EmergencySave);
  212. !       signal (SIGSEGV, EmergencySave);
  213.   
  214.         Setup ();
  215. ***************
  216. *** 175,179 ****
  217.               Msg (s);
  218.   
  219. !             while (ReadObj (fp, &obj_ptr))
  220.                  if (obj_ptr != NULL)
  221.                     AddObj (NULL, topObj, obj_ptr);
  222. --- 192,196 ----
  223.               Msg (s);
  224.   
  225. !             while (ReadObj (fp, &obj_ptr, FALSE))
  226.                  if (obj_ptr != NULL)
  227.                     AddObj (NULL, topObj, obj_ptr);
  228. ***************
  229. *** 202,205 ****
  230. --- 219,223 ----
  231.         quitDraw = TRUE;
  232.         XSync (mainDisplay, TRUE);
  233. +       exitNormally = TRUE;
  234.         AllocStrings (FuncStr, Str1, Menu1, Str2, Menu2, Str3, Menu3);
  235.         strcpy (*FuncStr, "Quit");
  236. *** menu.c.orig    Thu Aug  2 09:45:23 1990
  237. --- menu.c    Thu Aug  2 09:45:25 1990
  238. ***************
  239. *** 6,10 ****
  240.   #ifndef lint
  241.   static char RCSid[] =
  242. !       "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/menu.c,v 1.10 90/06/25 23:58:20 william Exp $";
  243.   #endif
  244.   
  245. --- 6,10 ----
  246.   #ifndef lint
  247.   static char RCSid[] =
  248. !       "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/menu.c,v 1.11 90/07/30 11:00:59 william Exp $";
  249.   #endif
  250.   
  251. ***************
  252. *** 525,529 ****
  253.   
  254.      importingFile = TRUE; /* ignore the 'state' predicate */
  255. !    while (ReadObj (fp, &obj_ptr))
  256.         if (obj_ptr != NULL)
  257.         {
  258. --- 525,529 ----
  259.   
  260.      importingFile = TRUE; /* ignore the 'state' predicate */
  261. !    while (ReadObj (fp, &obj_ptr, FALSE))
  262.         if (obj_ptr != NULL)
  263.         {
  264. *** move.c.orig    Thu Aug  2 09:45:32 1990
  265. --- move.c    Thu Aug  2 09:45:33 1990
  266. ***************
  267. *** 7,11 ****
  268.   #ifndef lint
  269.   static char RCSid[] =
  270. !       "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/move.c,v 1.5 90/06/26 00:11:08 william Exp $";
  271.   #endif
  272.   #include <stdio.h>
  273. --- 7,11 ----
  274.   #ifndef lint
  275.   static char RCSid[] =
  276. !       "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/move.c,v 1.6 90/07/07 23:57:07 william Exp $";
  277.   #endif
  278.   #include <stdio.h>
  279. ***************
  280. *** 64,69 ****
  281.         for (i = 0; i < ObjPtr->detail.g->sn; i++)
  282.         {
  283. !          ObjPtr->detail.g->svlist[i].x += Dx;
  284. !          ObjPtr->detail.g->svlist[i].y += Dy;
  285.         }
  286.   }
  287. --- 64,69 ----
  288.         for (i = 0; i < ObjPtr->detail.g->sn; i++)
  289.         {
  290. !          ObjPtr->detail.g->svlist[i].x += (Dx>>zoomScale);
  291. !          ObjPtr->detail.g->svlist[i].y += (Dy>>zoomScale);
  292.         }
  293.   }
  294. *** names.c.orig    Thu Aug  2 09:45:44 1990
  295. --- names.c    Thu Aug  2 09:45:45 1990
  296. ***************
  297. *** 6,10 ****
  298.   #ifndef lint
  299.   static char RCSid[] =
  300. !       "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/names.c,v 1.4 90/05/22 15:49:54 william Exp $";
  301.   #endif
  302.   
  303. --- 6,10 ----
  304.   #ifndef lint
  305.   static char RCSid[] =
  306. !       "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/names.c,v 1.6 90/07/27 14:39:29 william Exp $";
  307.   #endif
  308.   
  309. ***************
  310. *** 50,53 ****
  311. --- 50,55 ----
  312.   static int    nameScrollAreaH;    /* heighr of the grey scroll area */
  313.   
  314. + static int    doubleClickInterval;
  315.   static GC    nameGC;
  316.   static GC    revNameGC;
  317. ***************
  318. *** 55,58 ****
  319. --- 57,61 ----
  320.   void InitNames ()
  321.   {
  322. +    char        * c_ptr;
  323.      XGCValues    values;
  324.   
  325. ***************
  326. *** 76,79 ****
  327. --- 79,88 ----
  328.   
  329.      *curDomainName = '\0';
  330. +    if ((c_ptr = XGetDefault (mainDisplay, TOOL_NAME, "DoubleClickInterval")) !=
  331. +          NULL)
  332. +       doubleClickInterval = atoi (c_ptr);
  333. +    else
  334. +       doubleClickInterval = 300;
  335.   }
  336.   
  337. ***************
  338. *** 281,289 ****
  339.   }
  340.   
  341.   static
  342. ! void NameDspHandler (button_ev)
  343.      XButtonEvent    * button_ev;
  344.   {
  345. !    int        row_offset, len, top;
  346.   
  347.      top = defaultFontAsc+1;
  348. --- 290,303 ----
  349.   }
  350.   
  351. + static Time    lastClickTime;
  352. + static int    justClicked;
  353. + static int    lastNameMarked;
  354.   static
  355. ! int NameDspHandler (button_ev)
  356.      XButtonEvent    * button_ev;
  357.   {
  358. !    int    row_offset, len, top;
  359. !    Time    click_time;
  360.   
  361.      top = defaultFontAsc+1;
  362. ***************
  363. *** 290,294 ****
  364.   
  365.      row_offset = (int)(button_ev->y / ROW_HEIGHT);
  366. -    if (nameMarked != INVALID && nameMarked == row_offset+nameFirst) return;
  367.   
  368.      if (nameMarked != INVALID &&
  369. --- 304,307 ----
  370. ***************
  371. *** 315,318 ****
  372. --- 328,341 ----
  373.               nameDspPtr[nameMarked], len);
  374.      }
  375. +    click_time = button_ev->time;
  376. +    if (justClicked && nameMarked != INVALID && lastNameMarked == nameMarked &&
  377. +          (click_time-lastClickTime) < doubleClickInterval)
  378. +       return (TRUE);
  379. +    justClicked = TRUE;
  380. +    lastClickTime = click_time;
  381. +    lastNameMarked = nameMarked;
  382. +    return (INVALID);
  383.   }
  384.   
  385. ***************
  386. *** 396,399 ****
  387. --- 419,423 ----
  388.            KeyPressMask | ButtonPressMask | ExposureMask);
  389.   
  390. +    justClicked = FALSE;
  391.      while (looping)
  392.      {
  393. ***************
  394. *** 475,479 ****
  395.               NameScrollHandler (button_ev);
  396.            else if (button_ev->window == nameDspWin)
  397. !             NameDspHandler (button_ev);
  398.         }
  399.      }
  400. --- 499,509 ----
  401.               NameScrollHandler (button_ev);
  402.            else if (button_ev->window == nameDspWin)
  403. !          {
  404. !             if (NameDspHandler (button_ev) != INVALID)
  405. !             {
  406. !                looping = FALSE;
  407. !                index = nameMarked;
  408. !             }
  409. !          }
  410.         }
  411.      }
  412. *** pattern.c.orig    Thu Aug  2 09:45:58 1990
  413. --- pattern.c    Thu Aug  2 09:45:59 1990
  414. ***************
  415. *** 6,10 ****
  416.   #ifndef lint
  417.   static char RCSid[] =
  418. !       "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/pattern.c,v 1.2 90/06/26 00:11:14 william Exp $";
  419.   #endif
  420.   
  421. --- 6,10 ----
  422.   #ifndef lint
  423.   static char RCSid[] =
  424. !       "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/pattern.c,v 1.3 90/07/11 21:30:41 william Exp $";
  425.   #endif
  426.   
  427. ***************
  428. *** 661,663 ****
  429. --- 661,770 ----
  430.   
  431.      if (index != INVALID) ChangeAllSelPen (index);
  432. + }
  433. + static
  434. + int ToggleObjLineType (ObjPtr)
  435. +    struct ObjRec    * ObjPtr;
  436. + {
  437. +    register struct ObjRec       * obj_ptr;
  438. +    register int            changed = FALSE;
  439. +    for (obj_ptr = ObjPtr; obj_ptr != NULL; obj_ptr = obj_ptr->prev)
  440. +       switch (obj_ptr->type)
  441. +       {
  442. +          case OBJ_POLY:
  443. +             obj_ptr->detail.p->curved = !obj_ptr->detail.p->curved;
  444. +             if (obj_ptr->detail.p->curved == LT_SPLINE)
  445. +                obj_ptr->detail.p->svlist = MakeSplinePolyVertex (
  446. +                      &(obj_ptr->detail.p->sn), drawOrigX, drawOrigY,
  447. +                      obj_ptr->detail.p->n, obj_ptr->detail.p->vlist);
  448. +             else
  449. +                cfree (obj_ptr->detail.p->svlist);
  450. +             changed = TRUE;
  451. +             AdjObjBBox (obj_ptr);
  452. +             break;
  453. +          case OBJ_POLYGON:
  454. +             obj_ptr->detail.g->curved = !obj_ptr->detail.g->curved;
  455. +             if (obj_ptr->detail.g->curved == LT_SPLINE)
  456. +                obj_ptr->detail.g->svlist = MakeSplinePolygonVertex (
  457. +                      &(obj_ptr->detail.g->sn), drawOrigX, drawOrigY,
  458. +                      obj_ptr->detail.g->n, obj_ptr->detail.g->vlist);
  459. +             else
  460. +                cfree (obj_ptr->detail.g->svlist);
  461. +             changed = TRUE;
  462. +             AdjObjBBox (obj_ptr);
  463. +             break;
  464. +          case OBJ_GROUP:
  465. +          case OBJ_SYM:
  466. +             if (ToggleObjLineType (obj_ptr->detail.r->last))
  467. +             {
  468. +                changed = TRUE;
  469. +                AdjObjBBox (obj_ptr);
  470. +             }
  471. +             break;
  472. +       }
  473. +    return (changed);
  474. + }
  475. + void ToggleAllSelLineType ()
  476. + {
  477. +    register struct SelRec    * sel_ptr;
  478. +    register struct ObjRec    * obj_ptr;
  479. +    register int            changed = FALSE;
  480. +    if (topSel == NULL)
  481. +    {
  482. +       curSpline = !curSpline;
  483. +       ShowLineType ();
  484. +       return;
  485. +    }
  486. +    for (sel_ptr = botSel; sel_ptr != NULL; sel_ptr = sel_ptr->prev)
  487. +    {
  488. +       obj_ptr = sel_ptr->obj;
  489. +       switch (obj_ptr->type)
  490. +       {
  491. +          case OBJ_POLY:
  492. +             obj_ptr->detail.p->curved = !(obj_ptr->detail.p->curved);
  493. +             if (obj_ptr->detail.p->curved == LT_SPLINE)
  494. +             obj_ptr->detail.p->svlist = MakeSplinePolyVertex (
  495. +                      &(obj_ptr->detail.p->sn), drawOrigX, drawOrigY,
  496. +                      obj_ptr->detail.p->n, obj_ptr->detail.p->vlist);
  497. +             else
  498. +                cfree (obj_ptr->detail.p->svlist);
  499. +             changed = TRUE;
  500. +             AdjObjBBox (obj_ptr);
  501. +             break;
  502. +          case OBJ_POLYGON:
  503. +             obj_ptr->detail.g->curved = !(obj_ptr->detail.g->curved);
  504. +             if (obj_ptr->detail.g->curved == LT_SPLINE)
  505. +                obj_ptr->detail.g->svlist = MakeSplinePolygonVertex (
  506. +                      &(obj_ptr->detail.g->sn), drawOrigX, drawOrigY,
  507. +                      obj_ptr->detail.g->n, obj_ptr->detail.g->vlist);
  508. +             else
  509. +                cfree (obj_ptr->detail.g->svlist);
  510. +             changed = TRUE;
  511. +             AdjObjBBox (obj_ptr);
  512. +             break;
  513. +          case OBJ_GROUP:
  514. +          case OBJ_SYM:
  515. +             if (ToggleObjLineType (obj_ptr->detail.r->last))
  516. +             {
  517. +                changed = TRUE;
  518. +                AdjObjBBox (obj_ptr);
  519. +             }
  520. +             break;
  521. +       }
  522. +    }
  523. +    if (changed)
  524. +    {
  525. +       SetFileModified (TRUE);
  526. +       HighLightReverse ();
  527. +       RedrawAnArea (botObj, selLtX-(1<<zoomScale), selLtY-(1<<zoomScale),
  528. +             selRbX+(1<<zoomScale), selRbY+(1<<zoomScale));
  529. +       HighLightForward ();
  530. +    }
  531.   }
  532. *** prtgif.c.orig    Thu Aug  2 09:46:13 1990
  533. --- prtgif.c    Thu Aug  2 09:46:14 1990
  534. ***************
  535. *** 6,10 ****
  536.   #ifndef lint
  537.   static char RCSid[] =
  538. !       "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/prtgif.c,v 1.9 90/06/05 10:09:52 william Exp $";
  539.   #endif
  540.   
  541. --- 6,10 ----
  542.   #ifndef lint
  543.   static char RCSid[] =
  544. !       "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/prtgif.c,v 1.14 90/07/30 11:02:37 william Exp $";
  545.   #endif
  546.   
  547. ***************
  548. *** 14,37 ****
  549.   #include "types.h"
  550.   
  551. - #include "attr.e"
  552. - #include "box.e"
  553.   #include "file.e"
  554. - #include "font.e"
  555.   #include "grid.e"
  556. - #include "group.e"
  557.   #include "obj.e"
  558. - #include "oval.e"
  559. - #include "pattern.e"
  560. - #include "poly.e"
  561. - #include "polygon.e"
  562.   #include "setup.e"
  563. - #include "text.e"
  564.   
  565.   extern char    * getenv ();
  566.   /* extern int    malloc_debug (); */
  567. - extern int    PDrawReadObj ();
  568.   
  569. ! static char    drawPath[MAXSTRING];
  570. ! static short    pDrawCursorH[] =
  571.   {
  572.      9,  11, 13, 14, 19, 26,
  573. --- 14,30 ----
  574.   #include "types.h"
  575.   
  576.   #include "file.e"
  577.   #include "grid.e"
  578.   #include "obj.e"
  579.   #include "setup.e"
  580.   
  581. + #define PRTGIF (TRUE)
  582.   extern char    * getenv ();
  583.   /* extern int    malloc_debug (); */
  584.   
  585. ! int    lastFile = TRUE;
  586. ! short    pDrawCursorH[] =
  587.   {
  588.      9,  11, 13, 14, 19, 26,
  589. ***************
  590. *** 53,57 ****
  591.      11, 10, 12, 14, 18, 24
  592.   };
  593. ! static short    pDrawFontAsc[] =
  594.   {
  595.      7, 8,  10, 11, 15, 20,
  596. --- 46,51 ----
  597.      11, 10, 12, 14, 18, 24
  598.   };
  599. ! short    pDrawFontAsc[] =
  600.   {
  601.      7, 8,  10, 11, 15, 20,
  602. ***************
  603. *** 73,77 ****
  604.      8, 8,  9,  11, 14, 19
  605.   };
  606. ! static short    pDrawFontDes[] =
  607.   {
  608.      2, 3, 3, 3, 4, 6,
  609. --- 67,72 ----
  610.      8, 8,  9,  11, 14, 19
  611.   };
  612. ! short    pDrawFontDes[] =
  613.   {
  614.      2, 3, 3, 3, 4, 6,
  615. ***************
  616. *** 95,621 ****
  617.   
  618.   static
  619. ! void PDrawDumpTextObj (FP, ObjPtr)
  620. !    FILE                * FP;
  621. !    register struct ObjRec    * ObjPtr;
  622. ! {
  623. !    int            x, y, font_size, xinc, yinc;
  624. !    struct StrRec    * s_ptr;
  625. !    struct TextRec    * text_ptr = ObjPtr->detail.t;
  626. !    if (text_ptr->pen == NONEPAT) return;
  627. !    curFont = text_ptr->font;
  628. !    curStyle = text_ptr->style;
  629. !    curSize = text_ptr->size;
  630. !    textJust = text_ptr->just;
  631. !    curRotate = text_ptr->rotate;
  632. !    penPat = text_ptr->pen;
  633. !    textCursorH = pDrawCursorH[FontIndex(curFont,curSize,curStyle)];
  634. !    canvasFontAsc = pDrawFontAsc[FontIndex(curFont,curSize,curStyle)];
  635. !    canvasFontDes = pDrawFontDes[FontIndex(curFont,curSize,curStyle)];
  636. !    x = ObjPtr->x;
  637. !    y = ObjPtr->y;
  638. !    if (curFont == FONT_SYM)
  639. !    {
  640. !       fprintf (FP, "/Symbol ");
  641. !       font_size = pointSize[curSize];
  642. !       fprintf (FP, "findfont [%1d 0 0 -%1d 0 %1d] makefont setfont\n",
  643. !             font_size, font_size, font_size);
  644. !    }
  645. !    else
  646. !    {
  647. !       switch (curFont)
  648. !       {
  649. !          case FONT_TIM: fprintf (FP, "/Times"); break;
  650. !          case FONT_COU: fprintf (FP, "/Courier"); break;
  651. !          case FONT_HEL: fprintf (FP, "/Helvetica"); break;
  652. !          case FONT_CEN: fprintf (FP, "/NewCenturySchlbk"); break;
  653. !       }
  654. !       switch (curStyle)
  655. !       {
  656. !          case STYLE_BI:
  657. !             switch (curFont)
  658. !             {
  659. !                case FONT_TIM: fprintf (FP, "-BoldItalic "); break;
  660. !                case FONT_COU: fprintf (FP, "-BoldOblique "); break;
  661. !                case FONT_HEL: fprintf (FP, "-BoldOblique "); break;
  662. !                case FONT_CEN: fprintf (FP, "-BoldItalic "); break;
  663. !             }
  664. !             break;
  665. !          case STYLE_BR: fprintf (FP, "-Bold "); break;
  666. !          case STYLE_NI:
  667. !             switch (curFont)
  668. !             {
  669. !                case FONT_TIM: fprintf (FP, "-Italic "); break;
  670. !                case FONT_COU: fprintf (FP, "-Oblique "); break;
  671. !                case FONT_HEL: fprintf (FP, "-Oblique "); break;
  672. !                case FONT_CEN: fprintf (FP, "-Italic "); break;
  673. !             }
  674. !             break;
  675. !          case STYLE_NR:
  676. !             switch (curFont)
  677. !             {
  678. !                case FONT_TIM: fprintf (FP, "-Roman "); break;
  679. !                case FONT_COU: fprintf (FP, " "); break;
  680. !                case FONT_HEL: fprintf (FP, " "); break;
  681. !                case FONT_CEN: fprintf (FP, "-Roman "); break;
  682. !             }
  683. !             break;
  684. !       }
  685. !       font_size = pointSize[curSize];
  686. !       fprintf (FP, "findfont [%1d 0 0 -%1d 0 %1d] makefont setfont\n",
  687. !             font_size, font_size, font_size);
  688. !    }
  689. !    switch (penPat)
  690. !    {
  691. !       case SOLIDPAT: fprintf (FP, "   0 setgray\n"); break;
  692. !       case BACKPAT: fprintf (FP, "   1 setgray\n"); break;
  693. !       default:
  694. !          fprintf (FP, "   pat%1d 8 1 0 72 300 32 div div setpattern\n", penPat);
  695. !          break;
  696. !    }
  697. !    switch (curRotate)
  698. !    {
  699. !       case ROTATE0: xinc = 0; yinc = textCursorH; break;
  700. !       case ROTATE90: xinc = -textCursorH; yinc = 0; break;
  701. !       case ROTATE180: xinc = 0; yinc = -textCursorH; break;
  702. !       case ROTATE270: xinc = textCursorH; yinc = 0; break;
  703. !    }
  704. !    for (s_ptr = text_ptr->first; s_ptr != NULL; s_ptr = s_ptr->next)
  705. !    {
  706. !       switch (curRotate)
  707. !       {
  708. !          case ROTATE0:
  709. !             fprintf (FP, "   %1d %1d moveto (", x, y-canvasFontDes);
  710. !             break;
  711. !          case ROTATE90:
  712. !             fprintf (FP, "   %1d %1d moveto 90 rotate (", x+canvasFontDes, y);
  713. !             break;
  714. !          case ROTATE180:
  715. !             fprintf (FP, "   %1d %1d moveto 180 rotate (", x, y+canvasFontDes);
  716. !             break;
  717. !          case ROTATE270:
  718. !             fprintf (FP, "   %1d %1d moveto 270 rotate (", x-canvasFontDes, y);
  719. !             break;
  720. !       }
  721. !       DumpOneStr (FP, s_ptr->s);
  722. !       switch (textJust)
  723. !       {
  724. !          case JUST_L: fprintf (FP, ") show"); break;
  725. !          case JUST_C: fprintf (FP, ") centertext"); break;
  726. !          case JUST_R: fprintf (FP, ") righttext"); break;
  727. !       }
  728. !       switch (curRotate)
  729. !       {
  730. !          case ROTATE0: fprintf (FP, "\n"); break;
  731. !          case ROTATE90: fprintf (FP, " -90 rotate \n"); break;
  732. !          case ROTATE180: fprintf (FP, " -180 rotate \n"); break;
  733. !          case ROTATE270: fprintf (FP, " -270 rotate \n"); break;
  734. !       }
  735. !       x += xinc;
  736. !       y += yinc;
  737. !    }
  738. !    fprintf (FP, "\n");
  739. !    fprintf (FP, "   0 setgray\n");
  740. ! }
  741. ! static
  742. ! void PDrawDumpAttrs (FP, AttrPtr)
  743. !    FILE                * FP;
  744. !    register struct AttrRec    * AttrPtr;
  745. ! {
  746. !    for ( ; AttrPtr != NULL; AttrPtr = AttrPtr->prev)
  747. !       if (AttrPtr->shown)
  748. !          PDrawDumpTextObj (FP, AttrPtr->obj);
  749. ! }
  750. ! static
  751. ! void PDrawDumpAllObj (FP, ObjPtr)
  752. !    FILE                * FP;
  753. !    register struct ObjRec    * ObjPtr;
  754. ! {
  755. !    register struct ObjRec    * obj_ptr;
  756. !    switch (ObjPtr->type)
  757. !    {
  758. !       case OBJ_POLY:
  759. !          DumpPolyObj (FP, ObjPtr);
  760. !          PDrawDumpAttrs (FP, ObjPtr->detail.p->lattr);
  761. !          break;
  762. !       case OBJ_BOX: DumpBoxObj (FP, ObjPtr); break;
  763. !       case OBJ_OVAL: DumpOvalObj (FP, ObjPtr); break;
  764. !       case OBJ_TEXT: PDrawDumpTextObj (FP, ObjPtr); break;
  765. !       case OBJ_POLYGON: DumpPolygonObj (FP, ObjPtr); break;
  766. !       case OBJ_SYM:
  767. !       case OBJ_ICON:
  768. !       case OBJ_GROUP:
  769. !          obj_ptr = ObjPtr->detail.r->last;
  770. !          for ( ; obj_ptr != NULL; obj_ptr = obj_ptr->prev)
  771. !             PDrawDumpAllObj (FP, obj_ptr);
  772. !          PDrawDumpAttrs (FP, ObjPtr->detail.r->lattr);
  773. !          if (ObjPtr->type == OBJ_SYM) DumpSymOutline (FP, ObjPtr);
  774. !          break;
  775. !    }
  776. ! }
  777. ! static struct StrRec    * pDrawFirstStr = NULL, * pDrawLastStr = NULL;
  778. ! static
  779. ! void PDrawAddStr (PrevPtr, NextPtr, StrPtr)
  780. !    struct StrRec    * PrevPtr, * NextPtr, * StrPtr;
  781. ! {
  782. !    StrPtr->prev = PrevPtr;
  783. !    StrPtr->next = NextPtr;
  784. !    if (PrevPtr == NULL)
  785. !       pDrawFirstStr = StrPtr;
  786. !    else
  787. !       PrevPtr->next = StrPtr;
  788. !    if (NextPtr == NULL)
  789. !       pDrawLastStr = StrPtr;
  790. !    else
  791. !       NextPtr->prev = StrPtr;
  792. ! }
  793. ! static
  794. ! void PDrawReadTextObj (FP, Inbuf, ObjPtr)
  795. !    FILE            * FP;
  796. !    char            * Inbuf;
  797. !    struct ObjRec    * * ObjPtr;
  798. ! {
  799. !    register int        i;
  800. !    struct StrRec    * s_ptr;
  801. !    struct TextRec    * text_ptr;
  802. !    char            color_str[80], * s;
  803. !    char            tmp_str[MAXSTRING+1], inbuf[MAXSTRING+1];
  804. !    int            num_lines, x, y, font, style, size;
  805. !    int            text_just, rotate, pen;
  806. !    * ObjPtr = (struct ObjRec *) calloc (1, sizeof(struct ObjRec));
  807. !    s = FindChar ('(', Inbuf);
  808. !    s = ParseStr (s, ',', color_str);
  809. !    if (fileVersion <= 2)
  810. !    {
  811. !       sscanf (s, "%d , %d , %d , %d , %d , %d , %d", &x, &y, &font, &style,
  812. !             &size, &num_lines, &text_just);
  813. !       rotate = 0;
  814. !       pen = 1;
  815. !    }
  816. !    else
  817. !       sscanf (s, "%d , %d , %d , %d , %d , %d , %d , %d , %d", &x, &y, &font,
  818. !             &style, &size, &num_lines, &text_just, &rotate, &pen);
  819. !    text_ptr = (struct TextRec *) calloc (1, sizeof(struct TextRec));
  820. !    text_ptr->just = text_just;
  821. !    text_ptr->lines = num_lines;
  822. !    text_ptr->rotate = rotate;
  823. !    text_ptr->pen = pen;
  824. !    curFont = text_ptr->font = font;
  825. !    curStyle = text_ptr->style = style;
  826. !    curSize = text_ptr->size = size;
  827. !    textJust = text_just;
  828. !    curRotate = rotate;
  829. !    penPat = pen;
  830. !    textCursorH = pDrawCursorH[FontIndex(curFont,curSize,curStyle)];
  831. !    canvasFontAsc = pDrawFontAsc[FontIndex(curFont,curSize,curStyle)];
  832. !    for (i = 0; i < num_lines; i++)
  833. !    {
  834. !       fgets (inbuf, MAXSTRING, FP);
  835. !       strcpy(tmp_str, FindChar ('"', inbuf));
  836. !       s = FindChar ('"', tmp_str);
  837. !       *(--s) = '\0';
  838. !       s_ptr = (struct StrRec *) calloc (1, sizeof(struct StrRec));
  839. !       strcpy (s_ptr->s, tmp_str);
  840. !       PDrawAddStr (pDrawLastStr, NULL, s_ptr);
  841. !    }
  842. !    text_ptr->first = pDrawFirstStr;
  843. !    text_ptr->last = pDrawLastStr;
  844. !    pDrawFirstStr = pDrawLastStr = NULL;
  845. !    (*ObjPtr)->x = x;
  846. !    (*ObjPtr)->y = y;
  847. !    (*ObjPtr)->type = OBJ_TEXT;
  848. !    (*ObjPtr)->color = FindColorIndex (color_str);
  849. !    (*ObjPtr)->detail.t = text_ptr;
  850. ! }
  851. ! static
  852. ! void PDrawReadState (Inbuf)
  853. !    char    * Inbuf;
  854. ! {
  855. !    char    * s;
  856. !    s = FindChar ('(', Inbuf);
  857. !    sscanf (s, "%d", &pageStyle);
  858. !    s = FindChar (',', s);
  859. !    if (*s == '\0')
  860. !       fileVersion = INVALID;
  861. !    else
  862. !       sscanf (s, "%d", &fileVersion);
  863. ! }
  864. ! static
  865. ! void PDrawReadGroupObj (FP, ObjPtr)
  866. !    FILE            * FP;
  867. !    struct ObjRec    * * ObjPtr;
  868. ! {
  869. !    struct GroupRec    * group_ptr;
  870. !    struct ObjRec    * top_obj = NULL, * bot_obj = NULL, * obj_ptr;
  871. !    int            ltx, lty, rbx, rby;
  872. !    int            obj_ltx, obj_lty, obj_rbx, obj_rby;
  873. !    * ObjPtr = (struct ObjRec *) calloc (1, sizeof(struct ObjRec));
  874. !    while (PDrawReadObj (FP, &obj_ptr))
  875. !    {
  876. !       obj_ptr->next = top_obj;
  877. !       if (top_obj == NULL)
  878. !          bot_obj = obj_ptr;
  879. !       else
  880. !          top_obj->prev = obj_ptr;
  881. !       top_obj = obj_ptr;
  882. !    }
  883. !    top_obj->prev = NULL;
  884. !    group_ptr = (struct GroupRec *) calloc (1, sizeof(struct GroupRec));
  885. !    group_ptr->first = top_obj;
  886. !    group_ptr->last = bot_obj;
  887. !    ltx = top_obj->bbox.ltx;
  888. !    lty = top_obj->bbox.lty;
  889. !    rbx = top_obj->bbox.rbx;
  890. !    rby = top_obj->bbox.rby;
  891. !    obj_ltx = top_obj->obbox.ltx;
  892. !    obj_lty = top_obj->obbox.lty;
  893. !    obj_rbx = top_obj->obbox.rbx;
  894. !    obj_rby = top_obj->obbox.rby;
  895. !    for (obj_ptr = top_obj->next; obj_ptr != NULL; obj_ptr = obj_ptr->next)
  896. !    {
  897. !       if (obj_ptr->bbox.ltx < ltx) ltx = obj_ptr->bbox.ltx;
  898. !       if (obj_ptr->bbox.lty < lty) lty = obj_ptr->bbox.lty;
  899. !       if (obj_ptr->bbox.rbx > rbx) rbx = obj_ptr->bbox.rbx;
  900. !       if (obj_ptr->bbox.rby > rby) rby = obj_ptr->bbox.rby;
  901. !       if (obj_ptr->obbox.ltx < obj_ltx) obj_ltx = obj_ptr->obbox.ltx;
  902. !       if (obj_ptr->obbox.lty < obj_lty) obj_lty = obj_ptr->obbox.lty;
  903. !       if (obj_ptr->obbox.rbx > obj_rbx) obj_rbx = obj_ptr->obbox.rbx;
  904. !       if (obj_ptr->obbox.rby > obj_rby) obj_rby = obj_ptr->obbox.rby;
  905. !    }
  906. !    
  907. !    (*ObjPtr)->x = obj_ltx;
  908. !    (*ObjPtr)->y = obj_lty;
  909. !    (*ObjPtr)->type = OBJ_GROUP;
  910. !    (*ObjPtr)->bbox.ltx = ltx;
  911. !    (*ObjPtr)->bbox.lty = lty;
  912. !    (*ObjPtr)->bbox.rbx = rbx;
  913. !    (*ObjPtr)->bbox.rby = rby;
  914. !    (*ObjPtr)->obbox.ltx = obj_ltx;
  915. !    (*ObjPtr)->obbox.lty = obj_lty;
  916. !    (*ObjPtr)->obbox.rbx = obj_rbx;
  917. !    (*ObjPtr)->obbox.rby = obj_rby;
  918. !    (*ObjPtr)->detail.r = group_ptr;
  919. ! }
  920. ! static
  921. ! int  PDrawReadAttr (FP, AttrPtr)
  922. !    FILE            * FP;
  923. !    struct AttrRec    * * AttrPtr;
  924. ! {
  925. !    struct ObjRec    * TextObj;
  926. !    char            inbuf[MAXSTRING+1], * s;
  927. !    char            name[MAXSTRING+1], value[MAXSTRING+1];
  928. !    int            len, shown, nameshown, inherited;
  929. !  
  930. !    fgets (inbuf, MAXSTRING, FP); 
  931. !    if (inbuf[0] == ']')  return (FALSE);
  932. !    *AttrPtr = (struct AttrRec *)  calloc (1, sizeof(struct AttrRec)); 
  933. !    len = strlen(inbuf) - 1;
  934. !    inbuf[len] = '\0';
  935. !    strcpy(name, FindChar ('"', inbuf));
  936. !    s = FindChar ('"', inbuf);
  937. !    s = FindChar (',', s);
  938. !    strcpy(value, FindChar ('"', s));
  939. !    s = FindChar ('"', value);
  940. !    s = FindChar (',', s);
  941. !    sscanf (s, "%d, %d, %d", &shown, &nameshown, &inherited);
  942. !    s = FindChar ('"', name);
  943. !    *(--s) = '\0';
  944. !    strcpy ((*AttrPtr)->name, name);
  945. !    s = FindChar ('"', value);
  946. !    *(--s) = '\0';
  947. !    strcpy ((*AttrPtr)->s, value);
  948. !    (*AttrPtr)->shown = shown;
  949. !    (*AttrPtr)->nameshown = nameshown;
  950. !    (*AttrPtr)->inherited = inherited;
  951. !    PDrawReadObj (FP, &TextObj);
  952. !    TextObj->detail.t->attr = *AttrPtr;
  953. !    (*AttrPtr)->obj = TextObj;
  954. !    return (TRUE);
  955. ! }
  956. ! int PDrawReadObj (FP, ObjPtr)
  957. !    FILE            * FP;
  958. !    struct ObjRec    * * ObjPtr;
  959. ! {
  960. !    char            inbuf[MAXSTRING+1], obj_name[10], tmp_str[MAXSTRING+1];
  961. !    char            * s, * s1;
  962. !    int            len, id;
  963. !    struct AttrRec       * top_attr = NULL, * bot_attr = NULL, * attr_ptr;
  964. !    while (fgets (inbuf, MAXSTRING, FP) != NULL)
  965. !    {
  966. !       if (inbuf[0] == ']') return (FALSE);
  967. !       len = strlen(inbuf)-1;
  968. !       inbuf[len] = '\0';
  969. !       ParseStr (inbuf, '(', obj_name);
  970. !       if (strcmp (obj_name, "poly") == 0)
  971. !       {
  972. !          ReadPolyObj (inbuf, ObjPtr);
  973. !          if (fileVersion != INVALID)
  974. !             while (PDrawReadAttr (FP, &attr_ptr))
  975. !             {
  976. !                attr_ptr->owner = *ObjPtr;
  977. !                attr_ptr->prev = NULL;
  978. !                attr_ptr->next = top_attr;
  979. !                if (top_attr == NULL)
  980. !                   bot_attr = attr_ptr;
  981. !                else
  982. !                   top_attr->prev = attr_ptr;
  983. !                top_attr = attr_ptr;
  984. !             }
  985. !          if (bot_attr != NULL) bot_attr->next = NULL;
  986. !          (*ObjPtr)->detail.p->fattr = top_attr;
  987. !          (*ObjPtr)->detail.p->lattr = bot_attr;
  988. !          AdjObjBBox (*ObjPtr);
  989. !          return (TRUE);
  990. !       }
  991. !       else if (strcmp (obj_name, "box") == 0)
  992. !       {
  993. !          ReadBoxObj (inbuf, ObjPtr);
  994. !          return (TRUE);
  995. !       }
  996. !       else if (strcmp (obj_name, "oval") == 0)
  997. !       {
  998. !          ReadOvalObj (inbuf, ObjPtr);
  999. !          return (TRUE);
  1000. !       }
  1001. !       else if (strcmp (obj_name, "text") == 0)
  1002. !       {
  1003. !          PDrawReadTextObj (FP, inbuf, ObjPtr);
  1004. !          return (TRUE);
  1005. !       }
  1006. !       else if (strcmp (obj_name, "polygon") == 0)
  1007. !       {
  1008. !          ReadPolygonObj (inbuf, ObjPtr);
  1009. !          return (TRUE);
  1010. !       }
  1011. !       else if (strcmp (obj_name, "group") == 0)
  1012. !       {
  1013. !          PDrawReadGroupObj (FP, ObjPtr);
  1014. !          if (fileVersion != INVALID)
  1015. !             while (PDrawReadAttr (FP, &attr_ptr))
  1016. !             {
  1017. !                attr_ptr->owner = *ObjPtr;
  1018. !                attr_ptr->prev = NULL;
  1019. !                attr_ptr->next = top_attr;
  1020. !                if (top_attr == NULL)
  1021. !                   bot_attr = attr_ptr;
  1022. !                else
  1023. !                   top_attr->prev = attr_ptr;
  1024. !                top_attr = attr_ptr;
  1025. !             }
  1026. !          if (bot_attr != NULL) bot_attr->next = NULL;
  1027. !          (*ObjPtr)->detail.r->fattr = top_attr;
  1028. !          (*ObjPtr)->detail.r->lattr = bot_attr;
  1029. !          AdjObjBBox (*ObjPtr);
  1030. !          return (TRUE);
  1031. !       }
  1032. !       else if (strcmp (obj_name, "sym") == 0)
  1033. !       {
  1034. !          PDrawReadGroupObj (FP, ObjPtr);
  1035. !          (*ObjPtr)->type = OBJ_SYM;
  1036. !          if (fileVersion != INVALID)
  1037. !             while (PDrawReadAttr (FP, &attr_ptr))
  1038. !             {
  1039. !                attr_ptr->owner = *ObjPtr;
  1040. !                attr_ptr->prev = NULL;
  1041. !                attr_ptr->next = top_attr;
  1042. !                if (top_attr == NULL)
  1043. !                   bot_attr = attr_ptr;
  1044. !                else
  1045. !                   top_attr->prev = attr_ptr;
  1046. !                top_attr = attr_ptr;
  1047. !             }
  1048. !          if (bot_attr != NULL) bot_attr->next = NULL;
  1049. !          (*ObjPtr)->detail.r->fattr = top_attr;
  1050. !          (*ObjPtr)->detail.r->lattr = bot_attr;
  1051. !          AdjObjBBox (*ObjPtr);
  1052. !          return (TRUE);
  1053. !       }
  1054. !       else if (strcmp (obj_name, "icon") == 0)
  1055. !       {
  1056. !          PDrawReadGroupObj (FP, ObjPtr);
  1057. !          (*ObjPtr)->type = OBJ_ICON;
  1058. !          if (fgets (inbuf, MAXSTRING, FP) == NULL) return (FALSE);
  1059. !          strcpy(tmp_str, FindChar ('"', inbuf));
  1060. !          s = FindChar ('"', tmp_str);
  1061. !          if (fileVersion != INVALID)
  1062. !          {
  1063. !             s1 = FindChar (',', s);
  1064. !             sscanf (s1, "%d", &id);
  1065. !             if (id >= objId) objId = id+1;
  1066. !             (*ObjPtr)->detail.r->id = id;
  1067. !          }
  1068. !          (*ObjPtr)->detail.r->dirty = FALSE;
  1069. !          *(--s) = '\0';
  1070. !          strcpy ((*ObjPtr)->detail.r->s, tmp_str);
  1071. !          if (fileVersion != INVALID)
  1072. !             while (PDrawReadAttr (FP, &attr_ptr))
  1073. !             {
  1074. !                attr_ptr->owner = *ObjPtr;
  1075. !                attr_ptr->prev = NULL;
  1076. !                attr_ptr->next = top_attr;
  1077. !                if (top_attr == NULL)
  1078. !                   bot_attr = attr_ptr;
  1079. !                else
  1080. !                   top_attr->prev = attr_ptr;
  1081. !                top_attr = attr_ptr;
  1082. !             }
  1083. !          if (bot_attr != NULL) bot_attr->next = NULL;
  1084. !          (*ObjPtr)->detail.r->fattr = top_attr;
  1085. !          (*ObjPtr)->detail.r->lattr = bot_attr;
  1086. !          AdjObjBBox (*ObjPtr);
  1087. !          return (TRUE);
  1088. !       }
  1089. !       else if (strcmp (obj_name, "state") == 0)
  1090. !       {
  1091. !          PDrawReadState (inbuf);
  1092. !          *ObjPtr = NULL;
  1093. !          return (TRUE);
  1094. !       }
  1095. !    }
  1096. !    return (FALSE);
  1097. ! }
  1098. ! static
  1099. ! void PDrawLoad (FileName)
  1100.      char    * FileName;
  1101.   {
  1102. --- 90,94 ----
  1103.   
  1104.   static
  1105. ! int PDrawLoad (FileName)
  1106.      char    * FileName;
  1107.   {
  1108. ***************
  1109. *** 630,634 ****
  1110.      {
  1111.         printf ("Can not open '%s'.", full_name);
  1112. !       return;
  1113.      }
  1114.   
  1115. --- 103,107 ----
  1116.      {
  1117.         printf ("Can not open '%s'.", full_name);
  1118. !       return (FALSE);
  1119.      }
  1120.   
  1121. ***************
  1122. *** 635,639 ****
  1123.      printf ("Reading '%s' ...\n", full_name);
  1124.   
  1125. !    while (PDrawReadObj (fp, &obj_ptr))
  1126.         if (obj_ptr != NULL)
  1127.            AddObj (NULL, topObj, obj_ptr);
  1128. --- 108,112 ----
  1129.      printf ("Reading '%s' ...\n", full_name);
  1130.   
  1131. !    while (ReadObj (fp, &obj_ptr, PRTGIF))
  1132.         if (obj_ptr != NULL)
  1133.            AddObj (NULL, topObj, obj_ptr);
  1134. ***************
  1135. *** 640,714 ****
  1136.   
  1137.      fclose (fp);
  1138.   }
  1139.   
  1140. - static
  1141. - void PDrawDump ()
  1142. - {
  1143. -    register struct ObjRec    * obj_ptr;
  1144. -    char                cmd[MAXSTRING+1], tmp_str[MAXSTRING+1];
  1145. -    char                tmp_file[MAXSTRING+1], ps_file[MAXSTRING+1];
  1146. -    FILE                * fp, * fps;
  1147. -    if (botObj == NULL) { printf ("No object to print."); return; }
  1148. -    strcpy (tmp_file, "/tmp/TgifXXXXXX");
  1149. -    mktemp (tmp_file);
  1150. -    unlink (tmp_file);
  1151. -    if ((fp = fopen (tmp_file, "w")) == NULL)
  1152. -    {
  1153. -       printf ("Can not create $s, print aborted.", tmp_file);
  1154. -       return;
  1155. -    }
  1156. -    printf ("Writing to %s ...\n", tmp_file);
  1157. -    fprintf (fp, "%%!\n");
  1158. -    DumpBBox (fp);
  1159. -    sprintf(ps_file, "%s/.psmac", drawPath);
  1160. -    if ((fps = fopen (ps_file, "r")) == NULL)
  1161. -    {
  1162. -       printf ("Can not find %s, print aborted.\n", ps_file);
  1163. -       fclose (fp);
  1164. -       unlink (tmp_file);
  1165. -       return;
  1166. -    }
  1167. -    while (fgets (tmp_str, 256, fps) != NULL) /* copy the header file */
  1168. -       fputs (tmp_str, fp);
  1169. -    fprintf (fp, "gsave\n\n");
  1170. -    switch (pageStyle)
  1171. -    {
  1172. -       case LANDSCAPE:
  1173. -       case HIGHLAND:
  1174. -       case SLIDELAND: fprintf (fp, "90 rotate\n"); break;
  1175. -    }
  1176. -    fprintf (fp, "%1d %s mul %1d %s mul translate\n", psDotsPerInch,
  1177. -          psXOffStr[pageStyle], psDotsPerInch, psYOffStr[pageStyle]);
  1178. -    fprintf (fp, "%s -%s scale\n\n",
  1179. -          psScaleStr[pageStyle], psScaleStr[pageStyle]);
  1180. -    for (obj_ptr = botObj; obj_ptr != NULL; obj_ptr = obj_ptr->prev)
  1181. -       PDrawDumpAllObj (fp, obj_ptr);
  1182. -    fprintf (fp, "grestore\n\n");
  1183. -    fprintf (fp, "showpage\n");
  1184. -    fclose (fp);
  1185. -    sprintf (cmd, "lpr %s 2>&1", tmp_file);
  1186. -    if ((fp = popen (cmd, "r")) == NULL)
  1187. -    {
  1188. -       printf ("Can not execute '%s', print aborted.\n", cmd);
  1189. -       unlink (tmp_file);
  1190. -       return;
  1191. -    }
  1192. -    while (fgets (tmp_str, 256, fp) != NULL) sleep (5);
  1193. -    pclose (fp);
  1194. -    unlink (tmp_file);
  1195. -    printf ("%s printed.\n\n", tmp_file);
  1196. - }
  1197.   main (argc, argv)
  1198.      int    argc;
  1199. --- 113,119 ----
  1200.   
  1201.      fclose (fp);
  1202. +    return (TRUE);
  1203.   }
  1204.   
  1205.   main (argc, argv)
  1206.      int    argc;
  1207. ***************
  1208. *** 717,720 ****
  1209. --- 122,126 ----
  1210.      char    inbuf[MAXSTRING+1];
  1211.      char    * c_ptr;
  1212. +    int    len;
  1213.   
  1214.   /* malloc_debug (1); */
  1215. ***************
  1216. *** 729,732 ****
  1217. --- 135,145 ----
  1218.            strcpy (drawPath, c_ptr);
  1219.   
  1220. +    if ((argc > 1) && (strcmp (argv[1], "-p") == 0))
  1221. +    {
  1222. +       whereToPrint = LATEX_FIG;
  1223. +       argv++;
  1224. +       argc--;
  1225. +    }
  1226.      switch (argc)
  1227.      {
  1228. ***************
  1229. *** 735,740 ****
  1230.            while (fgets (inbuf, MAXSTRING, stdin) != NULL)
  1231.            {
  1232. !             PDrawLoad (inbuf);
  1233. !             PDrawDump ();
  1234.               printf ("\nDraw File Name to Print> ");
  1235.            }
  1236. --- 148,161 ----
  1237.            while (fgets (inbuf, MAXSTRING, stdin) != NULL)
  1238.            {
  1239. !             len = strlen (inbuf);
  1240. !             if (len > 0)
  1241. !             {
  1242. !                if (inbuf[--len] == '\n') inbuf[len] = '\0';
  1243. !                if (PDrawLoad (inbuf))
  1244. !                {
  1245. !                   Dump (PRTGIF, inbuf);
  1246. !                   DelAllObj ();
  1247. !                }
  1248. !             }
  1249.               printf ("\nDraw File Name to Print> ");
  1250.            }
  1251. ***************
  1252. *** 743,750 ****
  1253.            for (argc--, argv++; argc > 0; argc--, argv++)
  1254.            {
  1255. !             PDrawLoad (*argv);
  1256. !             PDrawDump ();
  1257. !             DelAllObj ();
  1258.            }
  1259.      }
  1260.   }
  1261. --- 164,175 ----
  1262.            for (argc--, argv++; argc > 0; argc--, argv++)
  1263.            {
  1264. !             lastFile = (argc == 1);
  1265. !             if (PDrawLoad (*argv))
  1266. !             {
  1267. !                Dump (PRTGIF, *argv);
  1268. !                DelAllObj ();
  1269. !             }
  1270.            }
  1271.      }
  1272. +    exit (0);
  1273.   }
  1274. ---------------------------------> cut here <---------------------------------
  1275. --
  1276. Bill Cheng // UCLA Computer Science Department // (213) 206-7135
  1277. 3277 Boelter Hall // Los Angeles, California 90024 // USA
  1278. william@CS.UCLA.EDU      ...!{uunet|ucbvax}!cs.ucla.edu!william
  1279.  
  1280. dan
  1281. ----------------------------------------------------
  1282. O'Reilly && Associates   argv@sun.com / argv@ora.com
  1283. Opinions expressed reflect those of the author only.
  1284.