home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume9 / cif2ps.p1 < prev    next >
Text File  |  1989-11-06  |  5KB  |  185 lines

  1. Newsgroups: comp.sources.misc
  2. subject: v09i001: Patch 1 for cif2ps (a CIF to PostScript translator)
  3. from: allbery@uunet.UU.NET (Brandon S. Allbery - comp.sources.misc)
  4. Reply-To: gwr@gomez.mitre.org (Gordon W. Ross)
  5.  
  6. Posting-number: Volume 9, Issue 1
  7. Submitted-by: gwr@gomez.mitre.org (Gordon W. Ross)
  8. Archive-name: cif2ps.p1
  9.  
  10. This is patch number 1 for cif2ps (as modified by Gordon W. Ross).
  11. The initial version of cif2ps ignored the (optional) "box-direction"
  12. part of cif box commands, causing incorrect plots for cif files using
  13. boxes with a "direction" specifier.  The code added here only handles
  14. box directions which are a multiple of 90 degrees (most are).
  15. Handling arbitrary box directions would require major changes...
  16. and the parser is a mess... 
  17. Anyone volunteers to replace the parser with the Oct or UW cif parser?
  18.  
  19. Other changes in this patch include:
  20.     improvements to error messages
  21.     the default plot-cell is now the top level (cell zero).
  22.  
  23. The changes are attached (you can use patch to apply them).
  24.  
  25. Gordon W. Ross    gwr@gomez.mitre.org    (617) 271-3205 (daytime)
  26. The MITRE Corp. (M/S E025)  Burlington Road, Bedford, MA 01730
  27.  
  28. ------------------------ patch 1 for cif2ps ---------------------
  29. *** cifgood.old    Tue Oct 24 18:16:17 1989
  30. --- cifgood.c    Mon Nov  6 17:02:32 1989
  31. ***************
  32. *** 270,276 ****
  33.           {
  34.           if (++last_symbol == MAXSYMBOLS)
  35.               {
  36. !             fprintf(stderr, "Exceeded the number of allowed symbols\n");
  37.               exit(1);
  38.               }
  39.           temp_index = last_symbol;
  40. --- 270,276 ----
  41.           {
  42.           if (++last_symbol == MAXSYMBOLS)
  43.               {
  44. !             fprintf(stderr, "Too many cell definitions\n");
  45.               exit(1);
  46.               }
  47.           temp_index = last_symbol;
  48. ***************
  49. *** 375,382 ****
  50.   cif_box(cif)
  51.   char    *cif;
  52.   {
  53.   int    next_one, i;
  54. ! int    temp[4];
  55.   char    token[MAXTOKEN];
  56.   boxtype    *box, *allocbox();
  57.   
  58. --- 375,383 ----
  59.   cif_box(cif)
  60.   char    *cif;
  61.   {
  62. + static char *error = "incorrect box\n";
  63.   int    next_one, i;
  64. ! int    temp[4],dirX,dirY;
  65.   char    token[MAXTOKEN];
  66.   boxtype    *box, *allocbox();
  67.   
  68. ***************
  69. *** 392,398 ****
  70.           next_one = get_token(cif, next_one, token);
  71.           if (next_one == -1)
  72.               {
  73. !             fprintf(stderr, "incomplete box\n");
  74.               cif_output(stderr, cif);
  75.               return;
  76.               }
  77. --- 393,399 ----
  78.           next_one = get_token(cif, next_one, token);
  79.           if (next_one == -1)
  80.               {
  81. !             fprintf(stderr, error);
  82.               cif_output(stderr, cif);
  83.               return;
  84.               }
  85. ***************
  86. *** 399,404 ****
  87. --- 400,432 ----
  88.           (void) sscanf(token, "%d", &(temp[i]));
  89.       }
  90.   
  91. +     /* Check for box direction */
  92. +     next_one = get_token(cif, next_one, token);
  93. +     if (0 < next_one) { /* box rotated */
  94. +       (void) sscanf(token, "%d", &dirX);
  95. +       next_one = get_token(cif, next_one, token);
  96. +       if (next_one == -1) {
  97. +         fprintf(stderr, error);
  98. +         cif_output(stderr, cif);
  99. +         return;
  100. +       }
  101. +       (void) sscanf(token, "%d", &dirY);
  102. +       /* fix-up box dimensions */
  103. +       if (dirX==0) {
  104. +         /* rotate this box by 90 degrees */
  105. +         dirX=temp[0];
  106. +         temp[0]=temp[1];
  107. +         temp[1]=dirX;
  108. +       } else { /* dirX != 0 */
  109. +         /* just assert manhattan direction */
  110. +         if (dirY != 0) {
  111. +           fprintf(stderr, "box is non-manhattan\n");
  112. +           cif_output(stderr, cif);
  113. +           return;
  114. +         }
  115. +       }
  116. +     } /* if (0 < next_one)... box rotated */
  117.       /* *temp = width, height, center-x, center-y */
  118.       box->llx = a_over_b * (temp[2] - temp[0]/2);
  119.       box->urx = a_over_b * (temp[2] + temp[0]/2);
  120. ***************
  121. *** 481,487 ****
  122.   cif_polygon(cif)
  123.   char    *cif;
  124.   {
  125. -     static char *error = "can't read polygon";
  126.       ngontype *ngon;
  127.       int points=0;
  128.       int *pointsArray;
  129. --- 509,514 ----
  130. ***************
  131. *** 555,561 ****
  132.   cif_wire(cif)
  133.   char    *cif;
  134.   {
  135. !     static char *error = "can't read wire";
  136.       static char token[MAXTOKEN];
  137.       static int width;
  138.       int column=1;    /* current column in cif line */
  139. --- 582,588 ----
  140.   cif_wire(cif)
  141.   char    *cif;
  142.   {
  143. !     static char *error = "incorrect wire\n";
  144.       static char token[MAXTOKEN];
  145.       static int width;
  146.       int column=1;    /* current column in cif line */
  147. ***************
  148. *** 566,572 ****
  149.       /* read the wire width */
  150.       column = get_token(cif, column, token);
  151.       if((column == -1) || (1 != sscanf(token, "%d", &width))) {
  152. !       fprintf(stderr,error,"width");
  153.         cif_output(stderr,cif);
  154.         return;
  155.       }
  156. --- 593,599 ----
  157.       /* read the wire width */
  158.       column = get_token(cif, column, token);
  159.       if((column == -1) || (1 != sscanf(token, "%d", &width))) {
  160. !       fprintf(stderr,error);
  161.         cif_output(stderr,cif);
  162.         return;
  163.       }
  164.  
  165. *** cif2ps.old    Tue Oct 24 18:05:03 1989
  166. --- cif2ps.c    Mon Nov  6 09:40:27 1989
  167. ***************
  168. *** 169,174 ****
  169.       } else {
  170.           /* use default choice of symbol */
  171. !         /* usually want "1" if it exists, else "0" */
  172. !         sym_index = get_index(1);
  173.           if (sym_index < 0) sym_index = 0;
  174.       }
  175. --- 169,174 ----
  176.       } else {
  177.           /* use default choice of symbol */
  178. !         /* cell zero is the top level */
  179. !         sym_index = get_index(0);
  180.           if (sym_index < 0) sym_index = 0;
  181.       }
  182. ----------------------------- end of patch 1 --------------------------
  183.  
  184.