7 static PPMImage
*LoadPPM(const char *filename
)
14 fp
= fopen(filename
, "rb");
17 fprintf(stderr
, "Unable to open file `%s'\n", filename
);
21 if (!fgets(buff
, sizeof(buff
), fp
))
27 if (buff
[0] != 'P' || buff
[1] != '6')
29 fprintf(stderr
, "Invalid image format (must be `P6')\n");
33 result
= (PPMImage
*) malloc(sizeof(PPMImage
));
36 fprintf(stderr
, "Unable to allocate memory\n");
40 if (fscanf(fp
, "%lu %lu", &result
->sizeX
, &result
->sizeY
) != 2)
42 fprintf(stderr
, "Error loading image `%s'\n", filename
);
46 if (fscanf(fp
, "%d", &maxval
) != 1)
48 fprintf(stderr
, "Error loading image `%s'\n", filename
);
52 while (fgetc(fp
) != '\n')
55 result
->data
= (GLubyte
*) malloc(3 * result
->sizeX
* result
->sizeY
);
58 fprintf(stderr
, "Unable to allocate memory\n");
62 if (fread(result
->data
, 3 * result
->sizeX
, result
->sizeY
, fp
) != result
->sizeY
)
64 fprintf(stderr
, "Error loading image `%s'\n", filename
);