home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / netpbma.zip / pbm / pbmtoepson.c < prev    next >
C/C++ Source or Header  |  1993-10-04  |  2KB  |  82 lines

  1. /* pbmtoeps.c - read a portable bitmap and produce Epson graphics
  2. **
  3. ** Copyright (C) 1990 by John Tiller (tiller@galois.msfc.nasa.gov)
  4. **             and Jef Poskanzer.
  5. **
  6. ** Permission to use, copy, modify, and distribute this software and its
  7. ** documentation for any purpose and without fee is hereby granted, provided
  8. ** that the above copyright notice appear in all copies and that both that
  9. ** copyright notice and this permission notice appear in supporting
  10. ** documentation.  This software is provided "as is" without express or
  11. ** implied warranty.
  12. */
  13.  
  14. #include <stdio.h>
  15. #include "pbm.h"
  16.  
  17. static int mask[] = {0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01};
  18.  
  19. int
  20. main( argc, argv )
  21.     int argc;
  22.     char* argv[];
  23.     {
  24.     FILE* ifp;
  25.     bit** bits;
  26.     bit* bP[8];
  27.     int rows, cols, row, col, lastcol;
  28.     int idx;
  29.     int val;
  30.  
  31.  
  32.     pbm_init( &argc, argv );
  33.  
  34.     if ( argc > 2 )
  35.     pm_usage( "[pbmfile]" );
  36.  
  37.     if ( argc == 2 )
  38.     ifp = pm_openr( argv[1] );
  39.     else
  40.     ifp = stdin;
  41.  
  42.     bits = pbm_readpbm( ifp, &cols, &rows );
  43.  
  44.     pm_close( ifp );
  45.     
  46.     /* Change line spacing to 8/72 inches. */
  47.     printf("\033A\010");
  48.     /* Write out rows by eights. */
  49.     for ( row = 0; row < rows; row += 8 )
  50.     {
  51.     /* Find end of lines. */
  52.     for ( lastcol = cols-1; lastcol >= 0; --lastcol )
  53.         {
  54.         for ( idx = 0; idx < 8 && row+idx < rows; ++idx )
  55.         if ( bits[row+idx][lastcol] == PBM_BLACK )
  56.             break;
  57.         if ( idx < 8 && row+idx < rows )
  58.         break;
  59.         }
  60.     for ( idx = 0; idx < 8 && row+idx < rows; ++idx )
  61.         bP[idx] = bits[row+idx];
  62.     /* Put in plotter (1:1) graphics. */
  63.     if ( lastcol >= 0 )
  64.         printf("\033*\005%c%c", (lastcol+1)%256, (lastcol+1)/256);
  65.         for ( col = 0; col <= lastcol; ++col )
  66.         {
  67.         val = 0;
  68.         for ( idx = 0; idx < 8 && row+idx < rows; ++idx )
  69.         if ( *bP[idx] == PBM_BLACK )
  70.             val |= mask[idx];
  71.         putchar( val );
  72.         for ( idx = 0; idx < 8 && row+idx < rows; ++idx )
  73.         ++bP[idx];
  74.         }
  75.     putchar( '\n' );
  76.         }
  77.     putchar( '\f' );
  78.     /* Restore normal line spacing. */
  79.     printf("\033@");
  80.     exit( 0 );
  81.     }
  82.