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

  1. /* libpnm2.c - pnm 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 <stdio.h>
  14. #include "pnm.h"
  15.  
  16. #ifdef PPM
  17. #include "ppm.h"
  18. #include "libppm.h"
  19. #endif PPM
  20.  
  21. #ifdef PGM
  22. #include "pgm.h"
  23. #include "libpgm.h"
  24. static gray *grayrow;
  25. #endif PGM
  26.  
  27. #ifdef PBM
  28. #include "pbm.h"
  29. #include "libpbm.h"
  30. static bit *bitrow;
  31. #endif PBM
  32.  
  33. void
  34. pnm_writepnminit( file, cols, rows, maxval, format )
  35. FILE *file;
  36. int cols, rows, format;
  37. xelval maxval;
  38.     {
  39.     switch ( format )
  40.     {
  41. #ifdef PPM
  42.     case PPM_FORMAT:
  43.     case RPPM_FORMAT:
  44.     ppm_writeppminit( file, cols, rows, (pixval) maxval );
  45.     break;
  46. #endif PPM
  47.  
  48. #ifdef PGM
  49.     case PGM_FORMAT:
  50.     case RPGM_FORMAT:
  51.     pgm_writepgminit( file, cols, rows, (gray) maxval );
  52.     grayrow = pgm_allocrow( cols );
  53.     break;
  54. #endif PGM
  55.  
  56. #ifdef PBM
  57.     case PBM_FORMAT:
  58.     case RPBM_FORMAT:
  59.     pbm_writepbminit( file, cols, rows );
  60.     bitrow = pbm_allocrow( cols );
  61.     break;
  62. #endif PBM
  63.  
  64.     default:
  65.     pm_error( "can't happen", 0,0,0,0,0 );
  66.     }
  67.     }
  68.  
  69. void
  70. pnm_writepnmrow( file, xelrow, cols, maxval, format )
  71. FILE *file;
  72. xel *xelrow;
  73. xelval maxval;
  74. int cols, format;
  75.     {
  76.     register int col;
  77.     register xel *xP;
  78. #ifdef PGM
  79.     register gray *gP;
  80. #endif PGM
  81. #ifdef PBM
  82.     register bit *bP;
  83. #endif PBM
  84.  
  85.     switch ( format )
  86.     {
  87. #ifdef PPM
  88.     case PPM_FORMAT:
  89.     case RPPM_FORMAT:
  90.     ppm_writeppmrow( file, (pixel *) xelrow, cols, (pixval) maxval );
  91.     break;
  92. #endif PPM
  93.  
  94. #ifdef PGM
  95.     case PGM_FORMAT:
  96.     case RPGM_FORMAT:
  97.     for ( col = 0, gP = grayrow, xP = xelrow; col < cols; col++, gP++, xP++ )
  98.         *gP = PNM_GET1( *xP );
  99.     pgm_writepgmrow( file, grayrow, cols, (gray) maxval );
  100.     break;
  101. #endif PGM
  102.  
  103. #ifdef PBM
  104.     case PBM_FORMAT:
  105.     case RPBM_FORMAT:
  106.     for ( col = 0, bP = bitrow, xP = xelrow; col < cols; col++, bP++, xP++ )
  107.         *bP = PNM_GET1( *xP );
  108.     pbm_writepbmrow( file, bitrow, cols );
  109.     break;
  110. #endif PBM
  111.  
  112.     default:
  113.     pm_error( "can't happen", 0,0,0,0,0 );
  114.     }
  115.     }
  116.  
  117. void
  118. pnm_writepnm( file, xels, cols, rows, maxval, format )
  119. FILE *file;
  120. xel **xels;
  121. xelval maxval;
  122. int cols, rows, format;
  123.     {
  124.     int row;
  125.  
  126.     pnm_writepnminit( file, cols, rows, maxval, format );
  127.  
  128.     for ( row = 0; row < rows; row++ )
  129.     pnm_writepnmrow( file, xels[row], cols, maxval, format );
  130.     }
  131.