home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS - Coast to Coast / simteldosarchivecoasttocoast.iso / autocad / autocad.c < prev    next >
Internet Message Format  |  1994-03-04  |  4KB

  1. From: kontron!optilink!cramer@pyramid.com (Clayton Cramer)
  2. Newsgroups: comp.binaries.ibm.pc,comp.lang.postscript
  3. Subject: Speed Up Printing AUTOCAD Files To PostScript Printers, C source
  4. Date: 17 Sep 88 17:00:25 GMT
  5. Summary: Speed Up Printing AUTOCAD Files To PostScript Printers, C source
  6. Approved: dhesi@bsu-cs.UUCP
  7.  
  8. I wrote this program a while back.  AutoCad plot files produced for
  9. PostScript printers are quite inefficient, so I wrote a quick filter to
  10. speed things up.  The resulting plot files are 22% smaller and 22%
  11. faster to print.  If you are printing directly to a PostScript printer
  12. from a PC, it might not save you anything to print the plot file to
  13. disk then filter it, but if you are sharing a PostScript printer over a
  14. network, or printing AutoCad plot files from a UNIX system (as we are)
  15. you might find some useful way to use this program.
  16.  
  17. I offered it to AutoDesk, as an example of how to improve their
  18. PostScript driver, suggesting that they pay me what it was worth to
  19. them (I suggested something around $100).  I guess they decided it
  20. wasn't worth a hundred bucks to save their customers time, because they
  21. never pursued it.
  22.  
  23. There are two files, an include file called "stdmacro.h", and a C file
  24. called "autocad.c".
  25.  
  26. -----cut here stdmacro.h--------------------------------------------------
  27. #define _CountOf_(A) ((sizeof (A))/(sizeof (A[0])))
  28. #define _InRange_(Low, Value, High) ((((int)Low) <= ((int)Value)) && (((int)Val
  29. ue) < ((int)High)))
  30. #define _RangeCheck_(Low, Value, High) ((((int)Low) <= ((int)Value)) && (((int)
  31. Value) < ((int)High)))
  32. #define FALSE 0
  33. #define TRUE 1
  34. typedef char boolean;
  35. #define _Max_(A,B) (((A) > (B)) ? (A) : (B))
  36. -----cut here--------------------------------------------------
  37.  
  38. Here is the autocad.c file.
  39. -----cut here--------------------------------------------------
  40. #include <stdio.h>
  41. #include "stdmacro.h"
  42.  
  43. main (Argc, Argv)
  44.  
  45. int         Argc;
  46. char        *Argv[];
  47.  
  48.     {
  49.     FILE*   CadFile;
  50.     int     I;
  51.  
  52.     for (I = 1; I < Argc; I++)
  53.         {
  54.         if (NULL != (CadFile = fopen(Argv[I], "r")))
  55.             {
  56.             ProcessFile(CadFile);
  57.             fclose(CadFile);
  58.             }
  59.         }
  60.     }
  61.  
  62. ProcessFile (FilePtr)
  63.  
  64. FILE*       FilePtr;
  65.  
  66.     {
  67.     char    Buffer1[256], Buffer2[256];
  68.     boolean XMatch, YMatch;
  69.     int     StartX, NextX, StartY, NextY;
  70.  
  71.     while (!feof(FilePtr))
  72.         {
  73.         fgets(Buffer1, sizeof(Buffer1)-1, FilePtr);
  74.         if (!feof(FilePtr))
  75.             {
  76.             if (0 == strncmp (Buffer1, "/n", 2))
  77.                 {
  78.                 fputs(Buffer1, stdout);
  79.                 printf("/p {/Y exch def /X exch def X Y m X Y l} def\n");
  80.                 printf("/x {/NextY exch def /StartY exch def /X exch def\n");
  81.                 printf("    X StartY moveto X NextY lineto} def\n");
  82.                 printf("/y {/Y exch def /NextX exch def /StartX exch def\n");
  83.                 printf("    StartX Y moveto NextX Y lineto} def\n");
  84.                 }
  85.             else if (Buffer1[strlen(Buffer1)-2] == 'm')
  86.                 {
  87.                 fgets(Buffer2, sizeof(Buffer2)-1, FilePtr);
  88.                 if (!feof(FilePtr))
  89.                     {
  90.                     if(Buffer2[strlen(Buffer2)-2] == 'l')
  91.                         {
  92.                         XMatch = YMatch = FALSE;
  93.                         sscanf(Buffer1, "%d %d", &StartX, &StartY);
  94.                         sscanf(Buffer2, "%d %d", &NextX, &NextY);
  95.                         if (StartX == NextX)
  96.                             XMatch = TRUE;
  97.                         if (StartY == NextY)
  98.                             YMatch = TRUE;
  99.                         if (XMatch && YMatch)
  100.                             printf("%d %d p\n", StartX, StartY);
  101.                         else if (XMatch)
  102.                             printf("%d %d %d x\n", StartX, StartY, NextY);
  103.                         else if (YMatch)
  104.                             printf("%d %d %d y\n", StartX, NextX, StartY);
  105.                         else
  106.                             printf("%s%s", Buffer1, Buffer2);
  107.                         }
  108.                     else
  109.                         printf("%s%s", Buffer1, Buffer2);
  110.                     }
  111.                 else
  112.                     printf("%s", Buffer1);
  113.                 }
  114.             else
  115.                 printf("%s", Buffer1);
  116.             }
  117.         }
  118.     }
  119. -----cut here--------------------------------------------------
  120.