home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.cs.arizona.edu
/
ftp.cs.arizona.edu.tar
/
ftp.cs.arizona.edu
/
icon
/
historic
/
v941.tgz
/
icon.v941src.tar
/
icon.v941src
/
ipl
/
progs
/
imagetyp.icn
< prev
next >
Wrap
Text File
|
2001-05-02
|
3KB
|
110 lines
############################################################################
#
# File: imagetyp.icn
#
# Subject: Program to show types of image files
#
# Author: Ralph E. Griswold
#
# Date: May 2, 2001
#
############################################################################
#
# This file is in the public domain.
#
############################################################################
#
# This program accepts file names from standard input and writes their
# image type to standard output.
#
# imagetyp(s) attempts to determine the type of image file named s.
# This is, of course, problematical and corrupted or fake files can
# easily fool it. Furthermore, examples of some image files types
# were not available for testing.
#
# The types presently recognized are:
#
# value returned image file type
#
# ps PostScript document
# cgm text Computer Graphics Metafile, text
# cgm binary Computer Graphics Metafile, binary
# cgm char Computer Graphics Metafile, character
# sundraw SunDraw document
# ras UNIX raster image
# iris Iris image
# rle UNIX RLE image
# pbm PBM image
# pgm PGM image
# ppm PPM image
# xwd X Window dump
# gif Compuserv GIF image
# bmp BMP image
# xmp XMP image
# xpm XPM image
# pcx PCX image
# tiff TIFF image
# iff IFF/ILBM image
# ? unknown type
#
# If the file cannot be opened or is empty, imagetyp() fails.
#
############################################################################
#
# Links: bincvt
#
############################################################################
link bincvt
procedure main()
local s
while s := writes(read()) do write(" ", imagetyp(s))
end
procedure imagetyp(s)
local input, header, type
input := open(s, "u") | fail # must be untranslated
header := reads(input, 640) | fail
type := {
header ? {
if ="%!" then "ps"
else if ="\x59\xa6\x6a\x95" then "ras"
else if ="\122\314" then "rle"
else if ="GIF8" then "gif"
else if =("\111\111\52\0" | "\115\115\0\52") then "tiff"
else if find("BMHD") then "iff"
else if find("PNTG") then "mac paint"
else if ="BEGMF" then "cgm text"
else if ="\001\332" then "iris"
else if ="#define" & find("width ") then "xbm"
else if ="/* XPM */" then "xpm"
else if =("P1" | "P4") then "pbm"
else if =("P2" | "P5") then "pgm"
else if =("P3" | "P6") then "ppm"
else if move(4) & raw(move(4)) = 7 then "xwd"
else if move(10) & ="sundraw" then "sundraw"
else if raw(move(2)) = 12320 then "cgm char"
else if iand(raw(move(2)), 65504) = 32 then "cgm binary"
else if ="\x0a" & raw(move(1)) = (0 | 2 | 3 | 4 | 5) & tab(65) &
raw(move(1)) = 0 then "pcx"
else if move(512) & move(11) & =("\x11" | "\x00\x11") then "pict"
else &fail # none of that worked
}
}
if \type then return type
seek(input, -17) # and now for one at the end ...
if read(input) == "TRUEVISION-TARGA\x0" then return "targa"
return "?" # who knows?
end