home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 6 / AACD06.ISO / AACD / System / Mesa-3.1 / samples / loadppm.c < prev    next >
Text File  |  2000-01-07  |  1KB  |  73 lines

  1.  
  2. typedef struct {
  3.     int sizeX, sizeY;
  4.     GLubyte *data;
  5. } PPMImage;
  6.  
  7. static PPMImage *LoadPPM(const char *filename)
  8. {
  9.     char buff[16];
  10.     PPMImage *result;
  11.     FILE *fp;
  12.     int maxval;
  13.  
  14.     fp = fopen(filename, "rb");
  15.     if (!fp)
  16.     {
  17.     fprintf(stderr, "Unable to open file `%s'\n", filename);
  18.     exit(1);
  19.     }
  20.  
  21.     if (!fgets(buff, sizeof(buff), fp))
  22.     {
  23.     perror(filename);
  24.     exit(1);
  25.     }
  26.  
  27.     if (buff[0] != 'P' || buff[1] != '6')
  28.     {
  29.     fprintf(stderr, "Invalid image format (must be `P6')\n");
  30.     exit(1);
  31.     }
  32.  
  33.     result = malloc(sizeof(PPMImage));
  34.     if (!result)
  35.     {
  36.     fprintf(stderr, "Unable to allocate memory\n");
  37.     exit(1);
  38.     }
  39.  
  40.     if (fscanf(fp, "%d %d", &result->sizeX, &result->sizeY) != 2)
  41.     {
  42.     fprintf(stderr, "Error loading image `%s'\n", filename);
  43.     exit(1);
  44.     }
  45.  
  46.     if (fscanf(fp, "%d", &maxval) != 1)
  47.     {
  48.     fprintf(stderr, "Error loading image `%s'\n", filename);
  49.     exit(1);
  50.     }
  51.  
  52.     while (fgetc(fp) != '\n')
  53.     ;
  54.  
  55.     result->data = malloc(3 * result->sizeX * result->sizeY);
  56.     if (!result)
  57.     {
  58.     fprintf(stderr, "Unable to allocate memory\n");
  59.     exit(1);
  60.     }
  61.  
  62.     if (fread(result->data, 3 * result->sizeX, result->sizeY, fp) != result->sizeY)
  63.     {
  64.     fprintf(stderr, "Error loading image `%s'\n", filename);
  65.     exit(1);
  66.     }
  67.  
  68.     fclose(fp);
  69.  
  70.     return result;
  71. }
  72.  
  73.