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

  1. /* libpgm2.c - pgm utility library part 2
  2. **
  3. ** Copyright (C) 1989 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 "pgm.h"
  14. #include "libpgm.h"
  15.  
  16. static void putus ARGS((unsigned short n, FILE* file));
  17. static void pgm_writepgmrowplain ARGS((FILE* file, gray* grayrow, int cols, gray maxval));
  18. #ifdef PBMPLUS_RAWBITS
  19. static void pgm_writepgmrowraw ARGS((FILE* file, gray* grayrow, int cols, gray maxval));
  20. #endif /* PBMPLUS_RAWBITS */
  21. #if __STDC__
  22. void
  23. pgm_writepgminit( FILE* file, int cols, int rows, gray maxval, int forceplain )
  24. #else /*__STDC__*/
  25. void
  26. pgm_writepgminit( file, cols, rows, maxval, forceplain )
  27.     FILE* file;
  28.     int cols, rows;
  29.     gray maxval;
  30.     int forceplain;
  31. #endif /*__STDC__*/
  32.     {
  33. #ifdef PBMPLUS_RAWBITS
  34.     if ( maxval <= 255 && ! forceplain ) {
  35.     fprintf(
  36.         file, "%c%c\n%d %d\n%d\n", PGM_MAGIC1, RPGM_MAGIC2,
  37.         cols, rows, maxval );
  38. #ifdef VMS
  39.         set_outfile_binary();
  40. #endif
  41.         }
  42.     else
  43.     fprintf(
  44.         file, "%c%c\n%d %d\n%d\n", PGM_MAGIC1, PGM_MAGIC2,
  45.         cols, rows, maxval );
  46. #else /*PBMPLUS_RAWBITS*/
  47.     fprintf(
  48.     file, "%c%c\n%d %d\n%d\n", PGM_MAGIC1, PGM_MAGIC2,
  49.     cols, rows, maxval );
  50. #endif /*PBMPLUS_RAWBITS*/
  51.     }
  52.  
  53. static void
  54. putus( n, file )
  55.     unsigned short n;
  56.     FILE* file;
  57.     {
  58.     if ( n >= 10 )
  59.     putus( n / 10, file );
  60.     (void) putc( n % 10 + '0', file );
  61.     }
  62.  
  63. #ifdef PBMPLUS_RAWBITS
  64. static void
  65. pgm_writepgmrowraw( file, grayrow, cols, maxval )
  66.     FILE* file;
  67.     gray* grayrow;
  68.     int cols;
  69.     gray maxval;
  70.     {
  71.     register int col;
  72.     register gray* gP;
  73.  
  74.     for ( col = 0, gP = grayrow; col < cols; ++col, ++gP )
  75.     {
  76. #ifdef DEBUG
  77.     if ( *gP > maxval )
  78.         pm_error( "value out of bounds (%u > %u)", *gP, maxval );
  79. #endif /*DEBUG*/
  80.     (void) putc( *gP, file );
  81.     }
  82.     }
  83. #endif /*PBMPLUS_RAWBITS*/
  84.  
  85. static void
  86. pgm_writepgmrowplain( file, grayrow, cols, maxval )
  87.     FILE* file;
  88.     gray* grayrow;
  89.     int cols;
  90.     gray maxval;
  91.     {
  92.     register int col, charcount;
  93.     register gray* gP;
  94.  
  95.     charcount = 0;
  96.     for ( col = 0, gP = grayrow; col < cols; ++col, ++gP )
  97.     {
  98.     if ( charcount >= 65 )
  99.         {
  100.         (void) putc( '\n', file );
  101.         charcount = 0;
  102.         }
  103.     else if ( charcount > 0 )
  104.         {
  105.         (void) putc( ' ', file );
  106.         ++charcount;
  107.         }
  108. #ifdef DEBUG
  109.     if ( *gP > maxval )
  110.         pm_error( "value out of bounds (%u > %u)", *gP, maxval );
  111. #endif /*DEBUG*/
  112.     putus( (unsigned long) *gP, file );
  113.     charcount += 3;
  114.     }
  115.     if ( charcount > 0 )
  116.     (void) putc( '\n', file );
  117.     }
  118.  
  119. #if __STDC__
  120. void
  121. pgm_writepgmrow( FILE* file, gray* grayrow, int cols, gray maxval, int forceplain )
  122. #else /*__STDC__*/
  123. void
  124. pgm_writepgmrow( file, grayrow, cols, maxval, forceplain )
  125.     FILE* file;
  126.     gray* grayrow;
  127.     int cols;
  128.     gray maxval;
  129.     int forceplain;
  130. #endif /*__STDC__*/
  131.     {
  132. #ifdef PBMPLUS_RAWBITS
  133.     if ( maxval <= 255 && ! forceplain )
  134.     pgm_writepgmrowraw( file, grayrow, cols, maxval );
  135.     else
  136.     pgm_writepgmrowplain( file, grayrow, cols, maxval );
  137. #else /*PBMPLUS_RAWBITS*/
  138.     pgm_writepgmrowplain( file, grayrow, cols, maxval );
  139. #endif /*PBMPLUS_RAWBITS*/
  140.     }
  141.  
  142. #if __STDC__
  143. void
  144. pgm_writepgm( FILE* file, gray** grays, int cols, int rows, gray maxval, int forceplain )
  145. #else /*__STDC__*/
  146. void
  147. pgm_writepgm( file, grays, cols, rows, maxval, forceplain )
  148.     FILE* file;
  149.     gray** grays;
  150.     int cols, rows;
  151.     gray maxval;
  152.     int forceplain;
  153. #endif /*__STDC__*/
  154.     {
  155.     int row;
  156.  
  157.     pgm_writepgminit( file, cols, rows, maxval, forceplain );
  158.  
  159.     for ( row = 0; row < rows; ++row )
  160.      pgm_writepgmrow( file, grays[row], cols, maxval, forceplain );
  161.     }
  162.