home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 4 / DATAFILE_PDCD4.iso / utilities / utilsm / netpbmsca / pgm / c / pgmtofits < prev    next >
Encoding:
Text File  |  1993-10-04  |  3.4 KB  |  116 lines

  1. /* pgmtofits.c - read a portable pixmap and produce a FITS file
  2. **
  3. ** Copyright (C) 1989 by Wilson H. Bent (whb@hoh-2.att.com).
  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 "pgm.h"
  14.  
  15. static void putFitsHead ARGS(( int cols, int rows, gray maxval ));
  16. static void write_card ARGS(( char* str ));
  17.  
  18. int
  19. main( argc, argv )
  20. int argc;
  21. char* argv[];
  22.     {
  23.     FILE* ifp;
  24.     gray* grayrow;
  25.     register gray* gP;
  26.     int argn, rows, cols, i, format;
  27.     register int col, row;
  28.     gray maxval;
  29.  
  30.  
  31.     pgm_init( &argc, argv );
  32.  
  33.     argn = 1;
  34.  
  35.     if ( argn < argc )
  36.     {
  37.     ifp = pm_openr( argv[argn] );
  38.     ++argn;
  39.     }
  40.     else
  41.     ifp = stdin;
  42.  
  43.     if ( argn != argc )
  44.     pm_usage( "[pgmfile]" );
  45.  
  46.     pgm_readpgminit( ifp, &cols, &rows, &maxval, &format );
  47.     if ( maxval > 255 )
  48.     pm_error( "maxval (%d) is greater than maximum of 255", maxval );
  49.     grayrow = pgm_allocrow( cols );
  50.  
  51.     putFitsHead( cols, rows, maxval );
  52.  
  53.     for ( row = 0; row < rows; ++row )
  54.     {
  55.     pgm_readpgmrow( ifp, grayrow, cols, maxval, format );
  56.     for ( col = 0, gP = grayrow; col < cols; ++col, ++gP )
  57.         putchar( *gP );
  58.     }
  59.  
  60.     for ( i = ( rows * cols ) % 2880; i < 2880; ++i )
  61.     putchar( '\0' );
  62.  
  63.     pm_close( ifp );
  64.  
  65.     exit( 0 );
  66.     }
  67.  
  68. #if __STDC__
  69. static void
  70. putFitsHead( int cols, int rows, gray maxval )
  71. #else /*__STDC__*/
  72. static void
  73. putFitsHead( cols, rows, maxval )
  74. int cols, rows;
  75. gray maxval;
  76. #endif /*__STDC__*/
  77.     {
  78.     int i = 0;
  79.     char card[81];
  80.  
  81.     sprintf( card, "SIMPLE  =                    T                                                  " );
  82.     write_card( card ); ++i;
  83.     sprintf( card, "BITPIX  =                    8                                                  " );
  84.     write_card( card ); ++i;
  85.     sprintf( card, "NAXIS   =                    2                                                  " );
  86.     write_card( card ); ++i;
  87.     sprintf( card, "NAXIS1  =           %10d                                                  ", cols );
  88.     write_card( card ); ++i;
  89.     sprintf( card, "NAXIS2  =           %10d                                                  ", rows );
  90.     write_card( card ); ++i;
  91.     sprintf( card, "DATAMIN =           %10d                                                  ", 0 );
  92.     write_card( card ); ++i;
  93.     sprintf( card, "DATAMAX =           %10d                                                  ", (int) maxval );
  94.     write_card( card ); ++i;
  95.     sprintf( card, "BZERO   =                  0.0                                                  " );
  96.     write_card( card ); ++i;
  97.     sprintf( card, "BSCALE  =                  1.0                                                  " );
  98.     write_card( card ); ++i;
  99.     sprintf( card, "HISTORY Created by fitstopgm.                                                   " );
  100.     write_card( card ); ++i;
  101.     sprintf( card, "END                                                                             " );
  102.     write_card( card ); ++i;
  103.     sprintf( card, "                                                                                " );
  104.     while ( i < 36 )
  105.     {
  106.     write_card( card ); ++i;
  107.     }
  108.     }
  109.  
  110. static void
  111. write_card( str )
  112. char* str;
  113.     {
  114.     fwrite( str, sizeof(char), 80, stdout );
  115.     }
  116.