include "png.s7i";
include "gif.s7i";
include "jpeg.s7i";
include "bmp.s7i";
include "ico.s7i";
include "pbm.s7i";
include "pgm.s7i";
include "ppm.s7i";
include "tga.s7i";
include "tiff.s7i";
const func boolean: hasImageExtension (in var string: fileName) is func
result
var boolean: hasImageExtension is FALSE;
begin
fileName := lower(fileName);
hasImageExtension := endsWith(fileName, ".png") or
endsWith(fileName, ".gif") or
endsWith(fileName, ".jpeg") or
endsWith(fileName, ".jpg") or
endsWith(fileName, ".pbm") or
endsWith(fileName, ".pgm") or
endsWith(fileName, ".ppm") or
endsWith(fileName, ".bmp") or
endsWith(fileName, ".ico") or
endsWith(fileName, ".tga") or
endsWith(fileName, ".tiff") or
endsWith(fileName, ".tif");
end func;
const func PRIMITIVE_WINDOW: readImage (inout file: imageFile) is func
result
var PRIMITIVE_WINDOW: pixmap is PRIMITIVE_WINDOW.value;
local
var string: magic is "";
begin
block
magic := gets(imageFile, length(BMP_MAGIC));
if magic = BMP_MAGIC then
seek(imageFile, 1);
pixmap := readBmp(imageFile);
elsif magic = PBM_ASCII_MAGIC or magic = PBM_BINARY_MAGIC then
seek(imageFile, 1);
pixmap := readPbm(imageFile);
elsif magic = PGM_ASCII_MAGIC or magic = PGM_BINARY_MAGIC then
seek(imageFile, 1);
pixmap := readPgm(imageFile);
elsif magic = PPM_ASCII_MAGIC or magic = PPM_BINARY_MAGIC then
seek(imageFile, 1);
pixmap := readPpm(imageFile);
else
magic &:= gets(imageFile, length(JPEG_MAGIC) - length(BMP_MAGIC));
if magic = JPEG_MAGIC then
seek(imageFile, 1);
pixmap := readJpeg(imageFile);
else
magic &:= gets(imageFile, length(ICO_MAGIC) - length(JPEG_MAGIC));
if magic = ICO_MAGIC then
seek(imageFile, 1);
pixmap := readIco(imageFile);
elsif magic = TIFF_MAGIC_LE or magic = TIFF_MAGIC_BE then
seek(imageFile, 1);
pixmap := readTiff(imageFile);
else
magic &:= gets(imageFile, length(GIF_MAGIC_87) - length(ICO_MAGIC));
if magic = GIF_MAGIC_87 or magic = GIF_MAGIC_89 then
seek(imageFile, 1);
pixmap := readGif(imageFile);
else
magic &:= gets(imageFile, length(PNG_MAGIC) - length(GIF_MAGIC_87));
if magic = PNG_MAGIC then
seek(imageFile, 1);
pixmap := readPng(imageFile);
else
magic &:= gets(imageFile, TGA_FILE_HEADER_SIZE - length(PNG_MAGIC));
if isTgaHeader(magic) then
seek(imageFile, 1);
pixmap := readTga(imageFile);
end if;
end if;
end if;
end if;
end if;
end if;
exception
otherwise: noop;
end block;
end func;
const func PRIMITIVE_WINDOW: readImage (in string: imageFileName) is func
result
var PRIMITIVE_WINDOW: pixmap is PRIMITIVE_WINDOW.value;
local
var file: imageFile is STD_NULL;
begin
imageFile := open(imageFileName, "r");
if imageFile <> STD_NULL then
pixmap := readImage(imageFile);
close(imageFile);
end if;
end func;