home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 309.lha / PBM_PLUS / pbm / pbmtoicon.c < prev    next >
C/C++ Source or Header  |  1980-12-04  |  2KB  |  113 lines

  1. /* pbmtoicon.c - read a portable bitmap and produce a Sun icon file
  2. **
  3. ** Copyright (C) 1988 by Jef Poskanzer.
  4. **
  5. ** Permission to use, copy, modify, and distribute this software and its
  6. ** documentation for any purpose and without fee is hereby granted, provided
  7. ** that the above copyright notice appear in all copies and that both that
  8. ** copyright notice and this permission notice appear in supporting
  9. ** documentation.  This software is provided "as is" without express or
  10. ** implied warranty.
  11. */
  12.  
  13. #include <stdio.h>
  14. #include "pbm.h"
  15.  
  16. main( argc, argv )
  17. int argc;
  18. char *argv[];
  19.     {
  20.     FILE *ifd;
  21.     register bit *bitrow, *bP;
  22.     int rows, cols, format, pad, padleft, padright, row, col;
  23.  
  24.     pm_progname = argv[0];
  25.  
  26.     if ( argc > 2 )
  27.     pm_usage( "[pbmfile]" );
  28.  
  29.     if ( argc == 2 )
  30.     ifd = pm_openr( argv[1] );
  31.     else
  32.     ifd = stdin;
  33.  
  34.     pbm_readpbminit( ifd, &cols, &rows, &format );
  35.     bitrow = pbm_allocrow( cols );
  36.     
  37.     /* Round cols up to the nearest multiple of 16. */
  38.     pad = ( ( cols + 15 ) / 16 ) * 16 - cols;
  39.     padleft = pad / 2;
  40.     padright = pad - padleft;
  41.  
  42.     printf( "/* Format_version=1, Width=%d, Height=%d", cols + pad, rows );
  43.     printf( ", Depth=1, Valid_bits_per_item=16\n */\n" );
  44.  
  45.     putinit( );
  46.     for ( row = 0; row < rows; row++ )
  47.     {
  48.     pbm_readpbmrow( ifd, bitrow, cols, format );
  49.     for ( col = 0; col < padleft; col++ )
  50.         putbit( 0 );
  51.         for ( col = 0, bP = bitrow; col < cols; col++, bP++ )
  52.         putbit( *bP );
  53.     for ( col = 0; col < padright; col++ )
  54.         putbit( 0 );
  55.         }
  56.  
  57.     pm_close( ifd );
  58.  
  59.     putrest( );
  60.  
  61.     exit( 0 );
  62.     }
  63.  
  64.  
  65. int item, bitsperitem, bitshift, itemsperline, firstitem;
  66.  
  67. putinit( )
  68.     {
  69.     itemsperline = 0;
  70.     bitsperitem = 0;
  71.     item = 0;
  72.     bitshift = 15;
  73.     firstitem = 1;
  74.     }
  75.  
  76. putbit( b )
  77. bit b;
  78.     {
  79.     if ( bitsperitem == 16 )
  80.     putitem( );
  81.     bitsperitem++;
  82.     if ( b == PBM_BLACK )
  83.     item += 1 << bitshift;
  84.     bitshift--;
  85.     }
  86.  
  87. putrest( )
  88.     {
  89.     if ( bitsperitem > 0 )
  90.     putitem( );
  91.     putchar( '\n' );
  92.     }
  93.  
  94. putitem( )
  95.     {
  96.     if ( firstitem )
  97.     firstitem = 0;
  98.     else
  99.     putchar( ',' );
  100.     if ( itemsperline == 8 )
  101.     {
  102.     putchar( '\n' );
  103.     itemsperline = 0;
  104.     }
  105.     if ( itemsperline == 0 )
  106.     putchar( '\t' );
  107.     itemsperline++;
  108.     printf( "0x%04x", item );
  109.     bitsperitem = 0;
  110.     item = 0;
  111.     bitshift = 15;
  112.     }
  113.