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

  1. /* libpnm1.c - pnm utility library part 1
  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_readpnminit( file, colsP, rowsP, maxvalP, formatP )
  35. FILE *file;
  36. int *colsP, *rowsP, *formatP;
  37. xelval *maxvalP;
  38.     {
  39. #ifdef PGM
  40.     gray gmaxval;
  41. #endif PGM
  42.  
  43.     /* Check magic number. */
  44.     *formatP = pbm_readmagicnumber( file );
  45.     switch ( *formatP )
  46.     {
  47. #ifdef PPM
  48.     case PPM_FORMAT:
  49.     case RPPM_FORMAT:
  50.     ppm_readppminitrest( file, colsP, rowsP, maxvalP );
  51.     break;
  52. #endif PPM
  53.  
  54. #ifdef PGM
  55.     case PGM_FORMAT:
  56.     case RPGM_FORMAT:
  57.     pgm_readpgminitrest( file, colsP, rowsP, &gmaxval );
  58.     *maxvalP = (xelval) gmaxval;
  59.     grayrow = pgm_allocrow( *colsP );
  60.     break;
  61. #endif PGM
  62.  
  63. #ifdef PBM
  64.     case PBM_FORMAT:
  65.     case RPBM_FORMAT:
  66.     pbm_readpbminitrest( file, colsP, rowsP );
  67.     bitrow = pbm_allocrow( *colsP );
  68.     break;
  69. #endif PVM
  70.  
  71.     default:
  72.     pm_error( "bad magic number - not a ppm, pgm, or pbm file", 0,0,0,0,0 );
  73.     }
  74.     }
  75.  
  76. void
  77. pnm_readpnmrow( file, xelrow, cols, maxval, format )
  78. FILE *file;
  79. xel *xelrow;
  80. xelval maxval;
  81. int cols, format;
  82.     {
  83.     register int col;
  84.     register xel *xP;
  85. #ifdef PGM
  86.     register gray *gP;
  87. #endif PGM
  88. #ifdef PBM
  89.     register bit *bP;
  90. #endif PBM
  91.  
  92.     switch ( format )
  93.     {
  94. #ifdef PPM
  95.     case PPM_FORMAT:
  96.     case RPPM_FORMAT:
  97.     ppm_readppmrow( file, (pixel *) xelrow, cols, (pixval) maxval, format );
  98.     break;
  99. #endif PPM
  100.  
  101. #ifdef PGM
  102.     case PGM_FORMAT:
  103.     case RPGM_FORMAT:
  104.     pgm_readpgmrow( file, grayrow, cols, (gray) maxval, format );
  105.     for ( col = 0, xP = xelrow, gP = grayrow; col < cols; col++, xP++, gP++ )
  106.         PNM_ASSIGN1( *xP, *gP );
  107.     break;
  108. #endif PGM
  109.  
  110. #ifdef PBM
  111.     case PBM_FORMAT:
  112.     case RPBM_FORMAT:
  113.     pbm_readpbmrow( file, bitrow, cols, format );
  114.     for ( col = 0, xP = xelrow, bP = bitrow; col < cols; col++, xP++, bP++ )
  115.         PNM_ASSIGN1( *xP, *bP );
  116.     break;
  117. #endif PBM
  118.  
  119.     default:
  120.     pm_error( "can't happen", 0,0,0,0,0 );
  121.     }
  122.     }
  123.  
  124. xel **
  125. pnm_readpnm( file, colsP, rowsP, maxvalP, formatP )
  126. FILE *file;
  127. int *colsP, *rowsP, *formatP;
  128. xelval *maxvalP;
  129.     {
  130.     xel **xels;
  131.     int row;
  132.  
  133.     pnm_readpnminit( file, colsP, rowsP, maxvalP, formatP );
  134.  
  135.     xels = pnm_allocarray( *colsP, *rowsP );
  136.  
  137.     for ( row = 0; row < *rowsP; row++ )
  138.     pnm_readpnmrow( file, xels[row], *colsP, *maxvalP, *formatP );
  139.  
  140.     return xels;
  141.     }
  142.