home *** CD-ROM | disk | FTP | other *** search
/ rtsi.com / 2014.01.www.rtsi.com.tar / www.rtsi.com / OS9 / OSK / NETWORK / netpbm_src.lzh / NETPBM / PNM / libpnm1.c < prev    next >
Text File  |  1996-11-18  |  3KB  |  133 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 "pnm.h"
  14.  
  15. #include "ppm.h"
  16. #include "libppm.h"
  17.  
  18. #include "pgm.h"
  19. #include "libpgm.h"
  20.  
  21. #include "pbm.h"
  22. #include "libpbm.h"
  23.  
  24. void
  25. pnm_init( argcP, argv )
  26.     int* argcP;
  27.     char* argv[];
  28.     {
  29.     ppm_init( argcP, argv );
  30.     }
  31.  
  32. xelval pnm_pbmmaxval = 1;
  33.  
  34. void
  35. pnm_readpnminit( file, colsP, rowsP, maxvalP, formatP )
  36.     FILE* file;
  37.     int* colsP;
  38.     int* rowsP;
  39.     int* formatP;
  40.     xelval* maxvalP;
  41.     {
  42.     gray gmaxval;
  43.  
  44.     /* Check magic number. */
  45.     *formatP = pbm_readmagicnumber( file );
  46.     switch ( PNM_FORMAT_TYPE(*formatP) )
  47.     {
  48.     case PPM_TYPE:
  49.     ppm_readppminitrest( file, colsP, rowsP, (pixval*) maxvalP );
  50.     break;
  51.  
  52.     case PGM_TYPE:
  53.     pgm_readpgminitrest( file, colsP, rowsP, &gmaxval );
  54.     *maxvalP = (xelval) gmaxval;
  55.     break;
  56.  
  57.     case PBM_TYPE:
  58.     pbm_readpbminitrest( file, colsP, rowsP );
  59.     *maxvalP = pnm_pbmmaxval;
  60.     break;
  61.  
  62.     default:
  63.     pm_error( "bad magic number - not a ppm, pgm, or pbm file" );
  64.     }
  65.     }
  66.  
  67. #if __STDC__
  68. void
  69. pnm_readpnmrow( FILE* file, xel* xelrow, int cols, xelval maxval, int format )
  70. #else /*__STDC__*/
  71. void
  72. pnm_readpnmrow( file, xelrow, cols, maxval, format )
  73.     FILE* file;
  74.     xel* xelrow;
  75.     xelval maxval;
  76.     int cols, format;
  77. #endif /*__STDC__*/
  78.     {
  79.     register int col;
  80.     register xel* xP;
  81.     gray* grayrow;
  82.     register gray* gP;
  83.     bit* bitrow;
  84.     register bit* bP;
  85.  
  86.     switch ( PNM_FORMAT_TYPE(format) )
  87.     {
  88.     case PPM_TYPE:
  89.     ppm_readppmrow( file, (pixel*) xelrow, cols, (pixval) maxval, format );
  90.     break;
  91.  
  92.     case PGM_TYPE:
  93.     grayrow = pgm_allocrow( cols );
  94.     pgm_readpgmrow( file, grayrow, cols, (gray) maxval, format );
  95.     for ( col = 0, xP = xelrow, gP = grayrow; col < cols; ++col, ++xP, ++gP )
  96.         PNM_ASSIGN1( *xP, *gP );
  97.     pgm_freerow( grayrow );
  98.     break;
  99.  
  100.     case PBM_TYPE:
  101.     bitrow = pbm_allocrow( cols );
  102.     pbm_readpbmrow( file, bitrow, cols, format );
  103.     for ( col = 0, xP = xelrow, bP = bitrow; col < cols; ++col, ++xP, ++bP )
  104.         PNM_ASSIGN1( *xP, *bP == PBM_BLACK ? 0: pnm_pbmmaxval );
  105.     pbm_freerow( bitrow );
  106.     break;
  107.  
  108.     default:
  109.     pm_error( "can't happen" );
  110.     }
  111.     }
  112.  
  113. xel**
  114. pnm_readpnm( file, colsP, rowsP, maxvalP, formatP )
  115.     FILE* file;
  116.     int* colsP;
  117.     int* rowsP;
  118.     int* formatP;
  119.     xelval* maxvalP;
  120.     {
  121.     xel** xels;
  122.     int row;
  123.  
  124.     pnm_readpnminit( file, colsP, rowsP, maxvalP, formatP );
  125.  
  126.     xels = pnm_allocarray( *colsP, *rowsP );
  127.  
  128.     for ( row = 0; row < *rowsP; ++row )
  129.     pnm_readpnmrow( file, xels[row], *colsP, *maxvalP, *formatP );
  130.  
  131.     return xels;
  132.     }
  133.