
#------------------------------------------------------------------------------
# $File: icc,v 1.7 2021/04/26 15:56:00 christos Exp $
# icc:  file(1) magic for International Color Consortium file formats

#
# Color profiles as per the ICC's "Image technology colour management -
# Architecture, profile format, and data structure" specification.
# See
#
#	http://www.color.org/specification/ICC1v43_2010-12.pdf
#
# for Specification ICC.1:2010 (Profile version 4.3.0.0).
# URL: http://fileformats.archiveteam.org/wiki/ICC_profile
# Reference: http://www.color.org/iccmax/ICC.2-2016-7.pdf
# Update: Joerg Jenderek
#
# Bytes 36 to 39 contain a generic profile file signature of "acsp";
# bytes 40 to 43 "may be used to identify the primary platform/operating
# system framework for which the profile was created".
#
#	check and display ICC/ICM color profile
0	name	color-profile
>36	string		acsp
# skip ASCII like Cognacspirit.txt by month <= 12
>>26	ubeshort	<13
# platform/operating system. Only 5 mentioned

#
# This appears to be what's used for Apple ColorSync profiles.
# Instead of adding that, Apple just changed the generic "acsp" entry
# to be for "ColorSync ICC Color Profile" rather than "Kodak Color
# Management System, ICC Profile".
# Yes, it's "APPL", not "AAPL"; see the spec.
>>>40	string		APPL		ColorSync

# Microsoft ICM color profile
>>>40	string		MSFT		Microsoft

# Yes, that's a blank after "SGI".
>>>40	string		SGI\ 		SGI

# XXX - is this what's used for the Sun KCMS or not?  The standard file
# uses just "acsp" for that, but Apple's file uses it for "ColorSync",
# and there *is* an identified "primary platform" value of SUNW.
>>>40	string		SUNW		Sun KCMS

# 5th platform
>>>40	string		TGNT		Taligent

# remaining "l" "e" of "color profile" printed later to avoid error
>>>40	string		x 		color profi
#>>>40	string		x		(%.4s)
!:mime	application/vnd.iccprofile
# for "ICM" extension only versions 2.x and for Kodak "CC" 2.0 is found
>>>8	ubyte		=2
# do not use empty message text to avoid error like
# icc, 82: Warning: Current entry does not yet have a description for adding a EXTENSION type
# file.exe: could not find any valid magic files!
>>>>9	ubyte		!0		\ble
!:ext	icc/icm
# minor version
>>>>9	ubyte		=0		\bl
# Kodak colour management system
>>>>>4	string		=KCMS		\be
!:ext	icc/icm/cc
>>>>>4	string		!KCMS		\be
!:ext	icc/icm
>>>8	ubyte		!2		\ble
!:ext	icc
# Profile version major.4bit-minor.sub1.sub2 like 4.3.0.0 (04300000h)
>>>8	ubyte		x		%u
>>>9	ubyte/16	x		\b.%u
# reserved and shall be null but 205.205 in umx1220u.icm
>>>10	ubyte		>0		\b.%u
>>>>11	ubyte		>0		\b.%u
# preferred colour management module like appl CCMS KCMS Lino UCCM "Win " "FF  "
# skip space like in brmsl08f.icm and null like in brmsl09f.icm, brmsl07f.icm
>>>4	string		>\ 		\b, type %.2s
>>>>6	string		>\  		\b%.1s
>>>>>7	string		>\  		\b%.1s
# colour space "XYZ " "Lab " "RGB " CMYK GRAY ...
>>>16	string		x		\b, %.3s
>>>19	string		>\  		\b%.1s
# Profile Connection Space (PCS) field usually "XYZ " or "Lab " but sometimes
# null or CMYK like in ISOcoated_v2_to_PSOcoated_v3_DeviceLink.icc
>>>20	string		>\0		\b/%.3s
>>>>23	string		>\ 		\b%.1s
# eleven device classes
>>>12	string		x		\b-%.4s device
# skip 00001964h in hpf69000.icc or 0h in XRDC50Q.ICM or " ROT" in brmsl05f.icm
>>>52	string		>\040
# skip "none" model like in "Trinitron Compatible 9300K G2.2.icm"
>>>>52	ubelong		!0x6e6f6e65
# device manufacturer field like "HP  " "IBM " EPSO
>>>>>48	string		x		\b, %.2s
>>>>>50	string		>\  		\b%.1s
>>>>>51	string		>\  		\b%.1s
# model like "ADI " "A265" and skip 20000404h in IS330.icm for RICOH RUSSIAN-SC
>>>>>52	string		>\ \  		\b/%.3s
>>>>>>55 string		>\  		\b%.1s
>>>>>52	string		x		model
# creator (often same as manufacture) like HP SONY XROX or null like in A925A.icm
>>>80	string		>\0		by %.2s
>>>>82	string		>\  		\b%.1s
>>>>>83	string		>\  		\b%.1s
# profile size
>>>0	ubelong		x		\b, %u bytes
# skip invalid date 0 like in linearSRGB.icc
>>>24	ubequad		!0
# datetime dd-mm-yyyy hh:mm:ss
>>>>28	ubeshort	x		\b, %u
# month <= 12
>>>>26	ubeshort	x		\b-%u
# year
>>>>24	ubeshort	x		\b-%u
# do not display midnight time like in CNHP8308.ICC
>>>>30	ubequad&0xFFffFFffFFff0000	!0
# hour <= 24
>>>>>30	ubeshort	x		%u
# minutes <= 59
>>>>>32	ubeshort	x		\b:%.2u
# seconds <= 59
>>>>>34	ubeshort	x		\b:%.2u
# vendor specific flags like 2 in HPCLJ5.ICM
>>>44	ubeshort	>0		\b, %#x vendor flags
# profile flags bits 0-2 of least 16 used by ICC
#>>>44	ubelong		>0		\b, %#x flags
# icEmbeddedProfileTrue
>>>44	ubelong		&1		\b, embedded
# icEmbeddedProfileFalse
#>>>44	ubelong		^1		\b, not embedded
# icUseWithEmbeddedDataOnly
>>>44	ubelong		&2		\b, dependently
# icUseAnywhere
#>>>44	ubelong		^2		\b, independently
>>>44	ubelong		&4		\b, MCS
#>>>44	ubelong		^4		\b, no MCS
# vendor specific device attributes 1~srgb.icc
# E000D00h~CNB7QEDA.ICM C000A00h~CNB5FCAA.ICM 01040401h~CNB25PE3.ICM
>>>56	ubelong		>0		\b, %#x vendor attribute
# ICC device attributes bits 0-7 used
#>>>60	ubelong		x		\b, %#x attribute
# http://www.color.org/icc34.h
>>>60	ubelong		&0x01		\b, transparent
#>>>60	ubelong		^0x01		\b, reflective
>>>60	ubelong		&0x02		\b, matte
#>>>60	ubelong		^0x02		\b, glossy
>>>60	ubelong		&0x04		\b, negative
#>>>60	ubelong		^0x04		\b, positive
>>>60	ubelong		&0x08		\b, black&white
#>>>60	ubelong		^0x08		\b, colour
>>>60	ubelong		&0x10		\b, non-paper
#>>>60	ubelong		^0x10		\b, paper
>>>60	ubelong		&0x20		\b, non-textured
#>>>60	ubelong		^0x20		\b, textured
>>>60	ubelong		&0x40		\b, non-isotropic
#>>>60	ubelong		^0x40		\b, isotropic
>>>60	ubelong		&0x80		\b, self-luminous
#>>>60	ubelong		^0x80		\b, non-self-luminous
# rendering intent 0-3 but 7AEA5027h in EE051__1.ICM 6CB1BCh in EE061__1.ICM
>>>64	ubelong		>3		\b, %#x rendering intent
#>>>64	ubelong		=0		\b, perceptual
>>>64	ubelong		=1		\b, relative colorimetric
>>>64	ubelong		=2		\b, saturation
>>>64	ubelong		=3		\b, absolute colorimetric
# PCS illuminant (3*s15Fixed16Numbers) often 0000f6d6 00010000 0000d32d
>>>71	ubequad		!0xd6000100000000d3	\b, PCS
# usually X~0.9642*65536=63189.8112~63190=F6D5h ; but also found
# often F6D6 in gt5000r.icm, F6B8 in kodakce.icm, F6CA in RSWOP.icm
>>>>68	ubelong			!0x0000f6d5	X=%#x
# usually Y=1.0~00010000h but Y=0 in brmsl07f.icm
>>>>72	ubelong			!0x00010000	Y=%#x
# usually Z~0.8249*65536=54060.6464~54061=D32Dh ; but also found
# D2F7 in hp1200c.icm, often D32C in A925A.icm, D309 in RSWOP.icm , D2F8 in kodak_dc.icm
>>>>76	ubelong			!0x0000d32d	Z=%#x
# Profile ID. MD5 fingerprinting method as defined in Internet RFC 1321.
>>>84	ubequad		>0		\b, %#llx MD5
# reserved in older versions should be zero but also found CDCDCDCDCDCDCDCD
#>>100	ubequad		x		\b %#llx reserved
# tag table
# 6 <= tags count <= 43
#>>>128	ubelong		>43		\b, %u tags
>>>128	ubelong		x
# shall contain the profileDescriptionTag "desc" , copyrightTag "cprt"
# search range = tags count * 12 -8=< maximal tag count * 12 -8= 43 * 12 -8= 508
>>>>132	search/508	cprt
# but no copyright tag in linearSRGB.icc
# beneath /System/Library/Frameworks/WebKit.framework/
# Versions/A/Frameworks/WebCore.framework/Versions/A/Resources
>>>>132	default		x		\b, no copyright tag
# 1st tag
#>>>132	string		x		\b, 1st tag %.4s
#>>>136	ubelong		x		%#x offset
#>>>140	ubelong		x		%#x len
# 2nd tag,...
# look also for profileDescriptionTag "desc"
>>>132	search/508	desc
# look further for TextDescriptionType "desc" signature
>>>>(&0.L)	string		=desc
>>>>>&4		pstring/l	x	"%s"
# look alternative for multiLocalizedUnicodeType "mluc" signature like in VideoPAL.icc
>>>>(&0.L)	string		=mluc
>>>>>&(&8.L)	ubequad		x
>>>>>>&4	bestring16	x	'%s'

# Any other profile.
# XXX - should we use "acsp\0\0\0\0" for "no primary platform" profiles,
# and use "acsp" for everything else and dump the "primary platform"
# string in those cases?
36	string		acsp
>0	use		color-profile


