交换格式文件的“EA IFF 85”标准文件日期:1985年1月14日发件人:Jerry Morrison,电子艺术标准状态:已发布和正在使用1.简介标准对软件开发人员有好处随着家用电脑硬件向更好的媒体机器发展,对更高质量、更详细数据的需求增加。数据开发成本越来越高,需要更多的专业知识和更好的工具,并且必须在项目之间共享。考虑几个端口一张CD-ROM上的产品具有500M字节的通用数据!开发工具需要标准的交换文件格式。想象扫描“玩家”形状的图像,将其移动到绘图程序进行编辑,然后将它们合并到游戏中。或者写一个主题使用Macintosh乐谱编辑器将歌曲合并到Amiga中游戏。数据有时必须进行转换、剪裁、填写,并在各种机器之间移动。媒体项目将依赖数据从图形、音乐、音效、动画和脚本进行传输工具。标准对软件用户有好处客户应该能够独立地在之间移动自己的数据开发的软件产品。他们应该能够购买数据库可用于许多此类产品。要交换的数据对象类型是开放式的,包括纯文本和格式化文本、光栅和结构化文本图形、字体、音乐、音效、乐器描述、,和动画。便利文件格式的问题通常是内存转储他们太保守了。通过为一个特定对象设计数据使用(例如屏幕快照),它们阻止了未来的扩展(会你喜欢整页的图片吗?多页文档?)。忽视其他程序可能读取其数据,但失败的可能性保存上下文信息(多少位平面?什么分辨率?)。忽略其他程序可能会创建这样的文件,他们是无法容忍的额外数据(图片编辑器的纹理调色板),缺少数据(无彩色贴图)或微小变化(较小图像)。实际上,字段表示应该很少镜像内存中的表示。前者应设计为长寿型;后者进行优化对特定程序的操作。相同的存档数据将被不同的程序读入不同的内存格式。IFF哲学:“节目时稍微落后于场景转换读写文件比NxM显式转换实用程序好得多用于高度专业化的格式。"因此,我们需要对开发之间的数据交换进行一些标准化工具和产品。采用标准的开发人员越多对我们所有人和我们的客户来说都更好。这里是“EA IFF 1985”这是我们的产品:艺电的IFF交换标准文件格式。全名为“EA IFF 1985”。备选方案和理由包含在特定选项中。公共域子例程包以及实用程序,使其易于编写和使用与IFF兼容的程序。第1部分介绍了该标准。第2部分介绍了其要求和背景。第3、4和5部分定义了原始数据类型、FORMs、,以及如何定义新的高级类型。零件6指定顶级文件结构。附录A用于快速参考和附录B指定了负责本标准。工具书类与ASCII一起使用的美国国家标准附加控制代码,ANSI标准3.64-1979,用于8位字符集。另见ISO标准2022和ISO/DIS标准6429.2。Amiga[tm]是Commodore-Amiga,Inc.的商标。C、 参考手册,Samuel P.Harbison和Guy L.Steele Jr.,Tartan实验室。普伦蒂斯·霍尔(Prentice-Hall),新泽西州恩格伍德悬崖(Englewood Cliffs),1984年。编译构造,高级课程,由F.L.Bauer和J.Eickel(Springer-Verlag,1976年)。这本书是众多来源之一有关递归下降分析的信息。软件艺术公司的DIF技术规范(c)1981 DIF[tm]是软件开发的电子表格数据交换格式艺术公司。DIF[tm]是Software Arts,Inc.的商标。Electronic Arts[tm]是Electronics Arts的商标。“FTXT”IFF格式文本,来自Electronic Arts。IFF补充文件用于文本格式。Macintosh内部(c)1982年、1983年、1984年、1985年苹果电脑公司程序员参考手册。Apple(R)是Apple Computer,Inc.的商标。Macintosh[tm]是苹果电脑公司的商标。“ILBM”IFF交错位图,来自Electronic Arts。IFF补充光栅图像格式的文档。M68000 16/32位微处理器程序员参考手册(c)1984,1982年、1980年、1979年,摩托罗拉公司。PostScript语言手册(c)1984 Adobe Systems Incorporated。PostScript[tm]是Adobe Systems,Inc.的商标。Times和Helvetica(R)是Allied Corporation的商标。InterScript:可编辑文件交换标准的建议文件(c)1984施乐公司。InterScript(c)1985 Xerox Corporation简介。 2.设计师背景第2部分是关于标准的背景、要求和目标。它适合那些想设计新型IFF对象的人。对使用该标准感兴趣的人可能希望跳过此步骤部分。我们需要什么?标准应该是处方长,开销少。应该为设计程序和数据文件提供许多规则但无论是程序还是文件都不应该花费太多不仅仅是权宜之计。当我们展望未来时CD-ROM和垂直录制,该标准必须在软盘。为了程序的可移植性、简单性和效率,格式应该设计时要考虑多种实现风格。(实际上,虽然随机访问使其更容易,但纯流I/O就足够了写入文件。)应该可以读取许多对象中的一个不扫描所有前面的数据。一些程序需要实时读取和播放他们的数据,因此我们需要做出良好的妥协介于通用性和效率之间。尽管我们非常需要标准,但它们无法拖延产品时间表。因此,我们还需要一种分散的可扩展性开发人员可以在没有一些“标准”的情况下定义和细化新的对象类型权限。开发人员必须能够扩展现有的以向前和向后兼容的方式格式化。中央存储库对于设计信息和示例程序可以帮助我们充分利用标准的优点。为了方便起见,数据格式应该注意各种限制处理器和环境。例如,单词对齐大大有助于68000以微不足道的成本访问8088个程序。其他目标包括能够在列表中共享公共元素对象和构造包含其他具有结构信息的数据对象,如目录。最后,“简单的事情应该简单,复杂的事情应该是可能的。“艾伦·凯。提前思考让我们提前考虑并构建用于读取和写入文件的程序彼此之间以及尚未设计的程序。构建数据格式只要开销可以接受,就可以为未来的计算机提供支持。这扩展了当今程序和数据的用途和生命周期。为了最大化互连性,标准文件结构和特定的对象格式必须都是通用的和可扩展的。思考设计对象时提前。它应该有多种用途允许许多程序存储和读取它们的所有信息需求;甚至挤入自定义数据。然后程序员可以存储可用数据,并鼓励包括固定的上下文细节。接受程序可以读取所需的部分,跳过未识别的内容,默认缺少数据,并使用存储的上下文帮助转换所需的数据。范围IFF通过定义标准文件结构来满足这些需求初始数据对象类型、定义新类型的方法和规则访问这些文件。我们可以通过编写程序来完成很多工作根据本标准,但不要期望直接兼容使用现有软件。我们需要转换程序来桥接与旧世界的差距。IFF适用于易于处理8位信息的计算机字节。它假设数据存储和传输的“物理层”它将“文件”可靠地维护为8位字节的字符串。标准将“文件”视为数据字节的容器,并且独立于如何查找文件以及它是否有字节计数。本标准本身并未实现剪切剪贴板以及在程序之间粘贴数据。剪贴板需要软件进行调解访问,以维护“内容版本号”,以便程序可以检测更新,并管理“虚拟内存”中的数据。数据抽象基本问题是如何以一种程序独立、编译器独立、机器独立和设备独立。计算机科学方法是“数据抽象”,也称为“对象”、“参与者”和“抽象数据类型”。数据抽象具有“具体表示”(其存储格式)和“抽象表示”(其功能和用途)和访问过程将所有调用软件与具体表示隔离开来。只有访问程序才能接触数据存储。隐藏可变接口背后的细节称为“信息隐藏”。什么数据抽象确实是从实现对象的细节中抽象出来的,即选定的存储表示和操作算法它。这种方法的强大之处在于模块化。通过调整通道我们可以扩展和重组数据而不影响接口或其调用方。相反,我们可以扩展和重组接口和调用方,而不会使现有数据过时。它是非常适合交换!但我们似乎需要相反的东西:所有程序的固定文件格式访问。实际上,我们可以归档数据抽象(“归档对象”)将数据和访问过程存储在一起。我们必须编码标准机器相关编程中的访问过程PostScript语言。即使如此,界面也不能自由发展因为我们无法更新访问过程的所有副本。所以我们会必须为有限的进化设计抽象表示和偶尔的革命(转换)。无论如何,今天的微型计算机实际上无法存储数据抽象。他们可以做下一件最好的事情:将任意类型的数据存储在“数据块”,每个块都有一个类型标识符和一个长度计数。这个类型标识符是通过名称引用访问过程(任何本地实施)。长度计数启用存储级对象像“复制”和“跳到下一个”这样的操作与对象类型无关。区块写作是直截了当的。组块阅读需要琐碎的解析器扫描每个块并分派到适当的访问/转换程序。读取嵌套在其他块中的块需要递归,但没有前瞻或备份。这就是IFF的主要思想。当然,还有其他一些细节以前的工作在我们的需求相似的地方,我们借鉴了现有的标准。我们在独立开发的程序之间移动数据的基本需求类似于Apple Macintosh桌面废料或“剪贴板”[Inside Macintosh章节“废料管理器”]。废料Manager与资源管理器(一个方便的文件管理器和数据对象(文本字符串、对话框窗口模板、图片、,fontsI),包括尚未设计的类型[Macintosh内部章节“资源管理器”]。资源经理是Smalltalk的亲戚对象交换。我们可能会编写一个Macintosh桌面附件来转换IFF与Macintosh剪贴板之间的文件,以便快速轻松地交换使用MacPaint和Resource Mover等程序。Macintosh使用简单而优雅的4字符“标识符”方案识别资源类型、剪贴板格式类型、文件类型和文件创建者程序。备选方案是分配的唯一ID号由中央当局或分级当局提供唯一的ID号由算法生成,其他固定长度字符串,以及可变长度字符串。字符串标识符兼具可读性数据文件和程序中的路标。4个字符的选择是在存储空间、获取/比较/存储时间和名称空间大小。我们将通过采用这个方案来向苹果的设计师致敬。“PICT”是标准结构化图形格式的一个很好的例子(包括光栅图像)及其多种用途[麦金塔内部章节“快速绘制”]。Macintosh在ROM中提供QuickDraw例程来创建,操作和显示PICT。任何应用程序都可以通过以下方式创建PICT只需让QuickDraw记录一系列绘图命令。因为让QuickDraw将PICT渲染到屏幕上同样简单或者打印机,在程序之间传递它们非常有效,比如从插画师到文字处理器。一个重要的功能是在QuickDraw将忽略的PICT中存储“注释”的功能。实际上,它将它们传递给可选的自定义“注释处理程序”。Adobe的打印文件标准PostScript是表示任何打印图像(这是放置标记的规范在纸上)[PostScript语言手册]。事实上,PostScript是一个成熟的编程语言。解释PostScript程序就是渲染光栅输出设备上的文档。语言按层定义:标识符、常量和运算符的词法层;一层包含范围规则和定义方法的反向抛光语义新的子程序;和内置标识符的打印特定层以及用于渲染图形图像的操作符。这显然是一个强大的(图灵等价物)图像定义语言。PICT和PostScript是结构化图形标准的候选者。PostScript文档可以打印在任何光栅输出设备上(包括a显示),但通常无法编辑。那是因为原来的灵活性和约束已被放弃。此外,PostScript程序可以使用任意计算来提供布局等参数每个操作员的大小。相比之下,QuickDraw PICT更由常量参数化的图形原语的受限格式。因此,可以在原语级别编辑PICT,例如move或者加粗线条。它不能在更高级别进行编辑,例如,生成图片的条形图数据。PostScript还有另一个限制:并非所有类型的数据量都达到纸上的标记。乐器描述就是一个例子。PostScript(后置脚本)只是不适合这样的用途。“DIF”是以通用格式存储数据的另一个示例可供未来项目使用[DIF技术规范]。DIF是一个电子表格数据交换的格式。DIF和PostScript都是以纯ASCII文本文件表示。这非常便于打印,调试、试验和跨调制解调器传输。它可以有压缩和读/写工作的巨大成本取决于使用情况。我们不会以这种方式存储IFF文件,但我们可以定义一个ASCII替代文件用转换器程序表示。InterScript是Xerox交换可编辑文档的标准【InterScript简介】。它解决了一个更难的问题:如何表示可能包含格式化的可编辑字处理器文档文本、图片、交叉引用,如数字,甚至高度像数学方程式这样的特殊对象?InterScript目标为每种信息定义一个标准表示。每个InterScript-compatible编辑器都应该保留对象它不理解甚至不维护嵌套的交叉引用。所以一个简单的文字处理器可以让你编辑一个奇特文档的文本不丢弃方程式或中断方程式编号。我们的任务类似于存储高级信息并保存尽可能多的内容在程序之间移动。但是我们需要跨越更大范围的数据类型,不能期望集中定义它们。幸运的是,我们不需要制作程序保留他们不理解的信息。为了更好或更糟糕的是,我们还不需要处理通用交叉引用。 3.基本数据类型可解释的原子组件,如整数和字符直接由CPU为所有处理器指定一种格式。我们选择了最适合摩托罗拉MC68000的格式处理器[M68000 16/32位微处理器程序员参考手动]。注意:第3部分规定了“原始”数据类型的格式,其中和仅在整体文件结构和标准类型中使用块(参见块)。此类事件的数量很少足以使处理器的转换、存储和管理成本-特定文件将远远超过“外来”在I/O期间的转换成本程序。可以使用不同的内部基元类型的格式,或处理器或环境的格式-如有必要,可提供特定变体,以优化本地使用。既然那样很痛不建议进行数据交换。(参见设计新数据节,(见第4部分)对齐所有大于一个字节的数据对象在偶数字节地址上对齐相对于文件的开头。这可能需要填充。填充字节写为零,但阅读时不要指望它。这意味着必须填充每一个奇长的“块”(见下文)这样下一个将落在均匀边界上。此外,设计师要分块存储的结构的应包括焊盘字段,其中需要对齐每个大于字节的字段。应存储零在所有pad字节中。理由:均匀对齐会给文件带来一些额外的工作仅在某些处理器上使用,但允许68000个程序构造和扫描内存中的数据并执行块I/O在要访问的数据结构中添加一个临时填充字段块读/写或流读/写额外的字节。以及相同的源代码适用于所有处理器。未指定对齐,打开另一方面,将迫使68000个程序(dis)汇编word和长字数据一次一个字节。在高水平上相当麻烦语言。如果你不有条件地为其他人编译处理器,你什么也得不到。数字支持的数字类型是MC68000处理器使用的格式为高字节优先,高字优先8088和6502格式的反面。它们可能包括已签名的和无符号的8位、16位和32位整数,但标准仅使用以下内容:UBYTE 8位无符号WORD 16位有符号UWORD 16位无符号LONG 32位有符号实际的类型定义取决于CPU和编译器。在本文档中,我们将在C编程中表达数据类型定义语言。[参见C,A参考手册。]在68000 Lattice C中:typedef unsigned char UBYTE;/*8位无符号*/typedef短单词;/*16位有符号*/typedef无符号短UWORD;/*16位无符号*/typedef long long;/*32位有符号*/字符无论在何处使用字符,都假定以下字符集,例如,在文本字符串、ID和文本块中(见下文)。字符采用8位ASCII编码。NUL范围内的字符(十六进制0)到DEL(十六进制7F)由7位ASCII标准很好地定义。IFF使用图形组RJS(SP,十六进制20)到R~S(十六进制7E)。大多数控制字符组十六进制01到十六进制1F没有IFF中的标准含义。定义控制字符LF(十六进制0A)作为“换行符”。它表示故意换行,即是段落或行终止符。(无法存储自动换行符。严格来说,这是环境中利润的函数文本已放置。)控制字符ESC(十六进制1B)是一个保留字符ANSI标准3.64-1979 American规则下的转义字符与ASCII、ISO一起使用的国家标准附加控制代码2022标准和ISO/DIS标准6429.2。十六进制7F到十六进制FF范围内的字符未全局定义IFF中。它们最好留给未来的标准化使用。但是注意,FORM类型FTXT(格式化文本)定义了FTXT形式中的这些字符。尤其是字符值十六进制7F到十六进制9F是控制代码,而十六进制A0到十六进制FF是扩展图形字符,如ISO和上述ANSI标准。[见补充文件“FTXT”IFF格式化文本。]日期“创建日期”定义为数据流的日期和时间已创建个字节。(一些系统将此称为“上次修改日期”。)编辑某些数据会更改其创建日期。在之间移动数据卷或计算机不会。IFF标准日期格式将是MS-DOS中使用的格式之一,Macintosh或Amiga DOS(可能是32位无符号秒数作为参考点)。问题:调查这三个问题。类型ID“类型ID”、“属性名称”、“表单类型”或任何其他IFF标识符是一个32位值:在范围R S(SP,十六进制20)至R S(十六进制7E)。空格(十六进制20)应该不在打印字符之前;尾随空格可以。控制字符是被禁止的。typedef CHAR ID[4];使用简单的32位大小写相关的相等测试来比较ID。数据段类型ID(也称为FORM类型)是限制ID。(参考数据章节。)因为它们可能存储在文件扩展名中(参见Single禁止使用小写字母和标点符号。尾部空格可以。当您选择新ID时,请仔细选择这四个字符它们是助记符,因此程序员可以查看交换格式文件并弄清楚它包含什么样的数据。名称空间使分散在全球各地的开发人员可以生成只要选择特定的ID值,冲突最小名称如“MUS4”,而不是一般的“TYPE”和“FILE”。EA将“注册”新的FORM类型ID和格式描述设计好了,但碰撞是不可能的,所以不会有压力在这个“票据交换所”过程中。附录A列出了当前定义的ID。有时有必要对数据格式进行不向后的更改兼容的。由于ID用于表示IFF中的数据格式选择ID表示修改后的格式。由于程序无法读取其ID无法识别的块(参见下面的块),新的ID可以防止旧程序在新数据上出错。传统的选择“修订”ID的方法是增加最后一个字符,如果它是一个数字,否则将最后一个字符改为数字。例如,首先ID“XY”的第二次修订为“XY1”和“XY2”。修订“CMAP”的名称为“CMA1”和“CMA2”。大块块是IFF结构中的构建块。表达的形式作为C类型定义是:typedef结构{ID ckID;长ckSize;/*sizeof(ckData)*/UBYTE ckData[/*ckSize*/];}大块;我们可以用包含12个数据的“CMAP”块来绘制示例块字节如下:----------------ckID:|“CMAP”|ck大小:|12|ck数据:|0,0,0,32 |--------|0,0,64,0|12字节|0,0,64,0|-------------------------固定头部分表示“这是一个带有ckSize的类型ckID块字节的数据。"ckID标识块的格式和用途。通常,程序必须识别ckID才能解释ckData。它应该跳过覆盖所有未识别的块。ckID还用作格式版本数字,只要我们选择新的ID来识别ckData的新格式(见上文)。以下ckID是通用保留的,用于标识具有的块特定IFF含义:“LIST”、“FORM”、“PROP”、“CAT”和““。特殊ID”“(4个空格)是用于“填充”块的ckID,也就是说,填满空间但没有有意义内容的块。这个ID“LIS1”到“LIS9”、“FOR1”到”FOR9“和“CAT1”到“CAT9”保留用于将来的“版本号”变化。所有IFF兼容软件必须说明这23个区块ID。附录A有一个列表预定义ID的。ckSize是逻辑块大小,即ckData中有多少数据字节。如果ckData是奇数个字节长,则后面是一个0填充字节不包括在ckSize中。(参见对齐。)块的总物理量size是ckSize向上舍入为偶数加上标头的大小。因此,最小的块长度为8个字节,ckSize=0。看在我的份上对于以下块,程序必须尊重每个块的ckSize一个虚拟文件尾,用于读取其ckData,即使该数据是格式错误,例如嵌套内容被截断。我们可以用正则表达式来描述块的语法“#”表示ckSize,即以下{braced}的长度字节。“[0]”表示有时需要的填充字节。(常规附录A中收集了本文件中的表达式以及注释的解释。)区块::=ID#{UBYTE*}[0]一种组块输出技术是流式写入组块头,流写入块内容,然后随机访问头部填充尺寸。另一种技巧是进行初步传球在数据上计算大小,然后一次性写出。字符串、字符串块和字符串属性在ASCII文本字符串中,LF表示强制换行(段落或线路终端)。不使用其他控制字符。(参见字符。)包含无格式字符串的块的ckID文本为“text”。实际上,文本字符串应该不超过32767字节。标准允许高达231-1字节。当用作数据属性(见下文)时,文本字符串块可能长度为0到255个字符。这样的字符串很容易转换为C字符串或Pascal字符串[255]。属性的ckID必须为属性名称,而不是“TEXT”。当用作块或数据属性的一部分时,限制C字符串通常使用格式。这意味着0到255个字符后跟NUL字节(ASCII值0)。数据属性数据属性指定以下(非属性)块的属性。例如,数据属性实际上表示“identifier=value”“XY=(10200)”,讲述有关以下块的内容。属性只能出现在数据节内(“FORM”块,参见数据节)和属性节(“PROP”块,参见组PROP)。数据属性的形式是Chunk的特例。ckID是属性名和属性类型。ckSize应该很小因为数据属性是在读取时在RAM中累积的一个文件。(256字节是一个合理的上限。)语法上:属性::=区块设计数据对象时,使用属性描述上下文信息就像图像的大小一样,即使它们在你的程序中没有变化。其他程序将需要此信息。将属性设置视为编程中变量的赋值语言。多个分配是冗余的,并且是本地分配临时覆盖全局分配。作业顺序只要它们位于受影响的块之前,就没有关系。(参见LIST,CAT和共享属性。)每个对象类型(FORM类型)都是属性ID的本地名称空间。将“FORM ILBM”中的“CMAP”属性想象为限定ID“ILBM.CMAP”。设计对象类型时指定的属性ID(因此所有客户都知道)称为“标准”,而专业后面添加的是“非标准”。链接问题:“链接”或“交叉引用”的标准机制非常适合将图像和声音组合成动画。也许我们将在引用其他或同一个或其他FORM中的特定块。此需要进一步的工作。EA IFF 1985没有标准的链接机制。就目前而言,读一份乐器清单就足够了,然后在乐谱中按索引编号引用它们。文件引用问题:我们可能需要一个标准表格来引用其他文件。“file-ref”可以命名同一类型的目录和文件操作系统作为ref的发起人。遵循参考预期该文件位于某个已装入的卷上。在网络环境中,文件引用也可以命名服务器。问题:如何表示与操作系统无关的文件引用?问题:引用另一个文件的一部分的方法是什么?这是一个“文件引用”加上对目标文件? 4.数据部分我们需要检查文件的第一件事是:它是否包含IFF数据,如果是,它是否包含我们正在寻找的数据类型?因此,我们提出了“数据部分”的概念。“数据部分”或IFF“FORM”是一个独立的“数据对象”可能会单独存储在文件中。这是一个高级数据诸如图片或声音效果之类的物体。IFF结构“FORM”使其自我识别。它可以是像带有嵌套乐器描述的乐谱。组FORM数据段是一个ckID为“FORM”的块,其排列方式如下:FORM::=“FORM”#{FormType(LocalChunk|FORM|LIST|CAT)*}窗体类型::=IDLocalChunk::=属性|区块ID“FORM”是一个语法关键字,与C中的“struct”类似包含字段“CMAP”的“struct ILBM”。如果你看到“表格”,你会知道需要FORM类型ID(结构名称,“ILBM”示例)和特定的内容安排或“语法”(本地块、窗体、列表和CAT)。(LIST和CAT在第5部分,下文。)特别是“FORM ILBM”可能包含本地块“CMAP”,即“ILBM.CMAP”(使用限定名)。因此块ID“FORM”表示数据段。这意味着块包含一个ID和一些嵌套块。阅读中与任何其他块一样,FORM程序必须将其ckSize视为用于读取其内容的虚拟文件结尾,即使它们被截断。FormType(或FORM类型)是一个限制ID,不能包含小写字母或标点符号。(参见类型ID。参见单个目的文件。)FORM中的类型特定信息由其“本地chunks“:数据属性和其他块。每个FORM类型都是局部的本地块ID的名称空间。因此,其他形式的“CMAP”本地块类型可能与“ILBM.CMAP”无关。除此之外,每种FORM类型定义语义范围。如果你知道什么是FORM ILBM,你就会知道什么是ILBM.CMAP。设计FORM类型时定义的本地块(因此所有此类客户都知道)被称为“标准”,而专门后面添加的是“非标准”。在本地块中,属性块为各种文本字体等细节,而其他块提供基本信息。这种区别并不明确。属性设置被同一属性的稍后设置取消仅起作用中间的数据块。例如,在序列中:prop1=x(propN=值)*prop1=y如果propN不是prop1,则设置prop1=x无效。以下通用块ID保留在任何FORM中:“LIST”,“FORM”、“PROP”、“CAT”、“JJJJ”、“LIS1”到“LIS9”、“FOR1”到“FOR9”和“CAT1”到“CAT9”。(参见区块。参见组列表。参见。组PROP.)为了清楚起见,这些通用块名称可能不是FORM类型ID。下面的第5部分将讨论如何将FORM分组为LIST和CAT。他们让您将一组FORM分组,但不要强加任何特定的含义或对分组的约束。继续阅读。复合表单FORM中的FORM块是一个完整的数据节。这意味着可以像多帧动画序列那样构建合成对象从可用的图片表单和音效表单。您可以插入包含帧速率和帧数等信息的附加块。使用复合FORM,您可以利用现有程序创建并编辑组件FORMs。这些编辑器甚至可以查看复合对象复制出其类型的组件,尽管它将成为一个罕见的程序,它有足够的想象力来做到这一点。这些编辑是不允许在组合中替换其组件对象对象。这是因为IFF标准允许您指定一致性复合表格的要求,如保持计数或组件的目录。仅支持编写的程序FORM类型的规则应创建或修改此类FORM。因此,在设计创建复合对象的程序时,强烈要求您为您的用户提供一个工具导入和导出嵌套的FORMs。导入和导出可以移动数据通过剪贴板或文件传输。下面是几个现有的FORM类型和定义新类型的规则。FTXT公司FTXT数据节包含带有字符格式信息的文本比如字体和脸。它没有段落或文档格式信息比如页边空白和页眉。FORM FTXT与文本匹配良好Amiga直觉环境中的表现。参见补充文档“FTXT”IFF格式化文本。ILBM公司“ILBM”是带彩色地图的InterLeaved BitMap图像;机器相关性光栅图像的格式。FORM ILBM是标准图像文件格式用于Commodore-Amiga计算机,在其他环境中也很有用,也是。请参阅补充文件“ILBM”IFF交错位图。图片“PICS”数据段中的数据块具有ID“PICT”并保存QuickDraw图片。问题:在PICS中允许多个PICT?请参见在Macintosh的“QuickDraw”一章中,了解PICT的详细信息以及如何在Macintosh计算机上创建并显示它们。PICS的唯一标准属性是可选属性“XY”指示PICT相对于“大图”的位置。XY的内容是一个快速绘制点。注意:PICT可能仅限于Macintosh使用,在这种情况下成为其他环境中结构化图形的另一种格式。其他Macintosh资源类型可以采用其他一些Macintosh资源类型在IFF文件;可能是MWRT、ICN、ICN#和STR#。问题:考虑候选人并保留更多的ID。设计新数据节补充文档将定义其他对象类型。补充需要指定对象的用途、其FORM类型ID、ID和标准局部块的格式以及生成和解释规则数据。提供typedefs和示例源代码是一个好主意访问新对象的程序。参见“ILBM”IFF交错位图举个好例子。任何人都可以选择新的表格类型ID,但应使用电子版在他们最方便的时候艺术。[问题:EA联系人?手这是给另一个组织的吗?]分散格式定义在IFF中可以进行扩展,我们的首选是获得设计委员会达成共识,实施读写计划,也许可以调整格式,然后通过示例发布格式代码。一些组织应继续负责回答问题并协调对格式的扩展。如果有必要修改某些数据段的设计,其FORM类型ID将用作版本号(参见类型ID)。例如。修改后的“VDEO”数据段可称为“VDE1”。但试着通过与现有FORM类型中的兼容修订。在新的FORM类型中,基本数据类型和单词对齐的规则(参考原始数据类型)的内容可以被覆盖如果您的文档是本地块,而不是块结构本身列出偏差。如果需要特定于机器的类型变体,例如,以逆序存储大量整数,然后概述转换算法并指出每个算法中的变量文件,可能通过不同的FORM类型。不用说,变化应该最小化。在设计FORM类型时,封装其他程序的所有数据需要解释您的文件。例如,光栅图形图像应指定图像大小,即使程序总是使用320 x 200像素x 3位平面。然后授权接收程序添加或剪裁图像矩形,以添加或删除位平面等。这将启用兼容性更强。将中心数据(如音符)与更专业的数据分开信息(如注释梁),以便更简单的程序可以提取重新启动时的中心部件。留出扩展空间,以便其他程序可以挤出新的信息(如歌词)。记住为了使属性块保持短的可管理性,让我们假设2256个字节。在设计数据对象时,请尝试在以下两者之间进行权衡超通用格式和高度专用格式。适合细节至少有一个特定的需要,例如光栅图像可能也可以按当前机器的扫描顺序存储像素。但添加使其可用于可预见硬件的通用性和软件。例如,红色、绿色和蓝色各使用一个整字节颜色值,即使今年的计算机只有4位视频DAC。提前考虑并帮助其他程序,只要开销可以接受。例如,通过扫描线而不是作为一个单元来运行压缩光栅,以便将来使用程序可以通过扫描线在二级存储器之间交换图像。尝试设计一种通用的“最不常见的多重”格式包含许多程序的需求,而不会变得太复杂。让我们围绕一些广泛分离的格式合并使用在广阔的设计空间里。两个因素使得这种灵活性和简单性实际可行。首先,文件存储空间变得非常丰富,所以压缩不是首要任务。其次,几乎所有本地执行的文件读取和写入期间的数据转换工作将很便宜与I/O时间相比。完整复制LIST或FORM或CAT必须是可以的,例如合并将其转换为复合FORM。因此FORM必须是相对引用。它们可能与相对于引用块的包含FORM的开始,或序列号。使用复合FORM,您可以利用现有程序创建并编辑组件。如果你编写一个程序来创建复合对象,请为您的用户提供导入和导出工具嵌套的FORM。导入和导出函数可以通过单独的文件或剪贴板。最后,不要忘记详细指定所有隐含的规则。 5.LIST、CAT和共享属性数据通常需要像图标列表一样分组在一起。有时这是一个将小图像排列成大光栅作品的技巧,但是一般来说,他们需要成为一个一流的群体。这个对象“LIST”和“CAT”是用于此目的的IFF通用机制。有时需要在类似的列表上共享属性设置物体。例如,图标列表可能共享一个彩色地图。LIST提供a的意思是“PROP”。列表的一个目的是定义PROP的范围。另一方面,“CAT”只是一个串联对象的。更简单的程序可能会完全跳过LIST和PROP,而只处理表格和CAT。所有“完全符合”IFF计划也都知道“CAT”、“LIST”和“PROP”。LIST必须处理共享的PROP以正确解释该表格。CAT组CAT只是一组非类型化的数据对象。从结构上讲,CAT是块ID为“CAT”的块,其中包含“contents”键入“ID,后跟嵌套对象。包含的每个对象的ckSizechunk本质上是指向下一个chunk的相对指针。CAT::=“CAT”#{ContentsType(FORM|LIST|CAT)*}ContentsType::=ID--提示或“抽象数据类型”ID在读取CAT时,就像任何其他块一样,程序必须尊重它的ckSize作为虚拟文件末尾,用于读取嵌套对象如果它们的格式不正确或被截断。CAT的ckSize后面的“内容类型”表示什么类型里面有个FORMs。因此,ILBM的CAT将在那里存储“ILBM”。它是只是一个提示。它可以用于存储“抽象数据类型”。一只猫如果包含的内容超过,则只能有空白内容ID(“JJJJ”)一种形式。CAT仅定义组的格式。该组的含义是开放的解释。这就像LISP中的列表:单元格的结构是预定义的,但内容的含义是,例如,关联列表取决于使用情况。如果你需要一个具有强制意义的团队(“抽象数据类型”或Smalltalk“子类”),具有一定的一致性约束或其他数据块使用复合FORM(参见复合表格)。由于CAT仅表示对象的串联,因此CAT很少嵌套。程序应该真正合并CAT,而不是嵌套它们。组列表LIST定义的组与CAT非常相似,但它也提供了范围用于PROP(见下文)。与CAT不同,LIST不应合并不理解其内容。从结构上讲,LIST是一个包含“内容”的ckID为“LIST”的块type“ID、可选共享属性和嵌套内容(FORMs、,LIST和CAT)。每个包含块的ckSize是指向下一个的相对指针。LIST不是任意的链接列表单元格简单地连接在一起。列表::=“LIST”#{ContentsType PROP*(FORM|LIST|CAT)*}内容类型::=ID集团PROPPROP块可能出现在LIST中(而不是FORMs或CATs中)。他们提供该列表中FORMs的共享属性。这种提升能力表单列表的共享状态的某些属性设置很有用用于间接和压实。例如,带有相同的大小和颜色可以共享一个“大小”属性和一个“颜色”map”属性。单个FORM可以覆盖共享设置。PROP的内容就像没有数据块的FORM:PROP::=“PROP”#{FormType属性*}这意味着“以下是FORM类型的共享属性<."一个LIST最多可以有一个FORM类型的PROP,以及所有PROP必须出现在任何FORM或嵌套LIST和CAT之前。通过生成每个子序列,可以使FORM的子序列共享属性a清单。范围界定:将属性设置视为嵌套中的变量绑定编程语言的块。在C中,您可以写:TEXT_FONT TEXT_FONT=快递;/*程序的全局默认值*/文件();{TEXT_FONT TEXT_FONT=时间罗马;/*共享设置*/{TEXT_FONT TEXT_FONT=赫尔维蒂卡;/*本地设置*/打印(“Hello”);/*使用字体Helvetica*/}{打印(“there.”);/*使用TimesRoman字体*/}}IFF文件可以包含:列表{提案文本{FONT{TimesRoman}/*共享设置*/}表格文本{FONT{Helvetica}/*本地设置*/CHRS{Hello}/*使用字体Helvetica*/}表格文本{CHRS{there.}/*使用TimesRoman字体*/}}共享属性分配有选择地覆盖读取器的全局默认值,但仅适用于组内的FORM。表格本身属性指定选择性地覆盖全局和组提供的值。因此,在读取IFF文件时,请在堆栈上保留属性设置。它们设计得足够小,可以放在主存储器中。共享属性在语义上等同于复制这些属性在每个嵌套FORM的FORM类型ID之后。LIST的属性可选的“LIST属性”存储列表内容的来源在PROP块中输入假FORM类型“LIST”。它们是属性发起程序“OPGM”,处理器系列“OCPU”,计算机类型“OCMP”、计算机序列号或网络地址“OSN”和用户名称“联阿援助团”。在我们这个不完美的世界里,我们可以呼吁这些区分数据格式的意外变化或工作围绕特定发起/接收程序对中的错误。问题:指定这些属性的格式。创建日期也可以存储在属性中,但让我们问一下文件创建、编辑和传输程序保持正确本地文件系统中的日期。在计算机之间移动文件的程序类型应该在创建日期之间复制。 6.标准文件结构文件结构概述IFF文件只是FORM、LIST或CAT类型的单个块。因此IFF文件可以通过其前4个字节识别:“FORM”、“LIST”、,或“CAT”。区块结束后的任何文件内容都将被忽略。由于IFF文件可以是一组对象,因此读/写程序单个对象可以与读/写程序进行一定程度的通信组。我们鼓励您编写处理所有对象的程序在LIST或CAT中。例如,图形编辑器可以处理图片列表,作为多页文档,一次一页。程序在读写时应该执行IFF的语法规则文件夹。这确保了可靠的数据传输。公共域IFF读写器子程序包为您完成了这项工作。实用程序“IFFCheck”可扫描IFF文件并检查其一致性IFF的语法规则。IFFCheck还打印块的轮廓在文件中,显示每个的ckID和ckSize。这很方便在构建IFF程序时。示例程序也可用于显示读取和写入IFF文件的详细信息。合并程序“IFFJoin”将可用,并在逻辑上附加将IFF文件放入单个CAT组中。它“打开”每个输入文件是CAT,因此组合文件不是嵌套CAT。如果我们需要修改IFF标准,三个锚定ID将用作“版本号”。这就是为什么ID“FOR1”到“FOR9”,保留“LIS1”到“LIS9”以及“CAT1”到“CAT9”。IFF格式设计用于软盘的合理性能。我们通过以下方式实现了格式和程序的相当简单依赖主机文件系统而不是定义通用分组结构,如LIST内容的目录。在大型存储系统上,IFF文件可以是文件结构(如B树)中的叶节点。让我们希望主机文件系统为我们实现这一点!有两种IFF文件:专用文件和废料文件。它们在解释多个数据对象和文件的外部类型。单用途文件单用途IFF文件用于正常的“文档”和“存档”存储。这与“报废文件”(见下文)和临时备份形成对比存储(非interchange文件)。外部文件类型(或文件扩展名,取决于主机文件系统)指示文件的内容。通常是表格包含的数据类型,因此对FORM类型ID有限制。程序员和用户可以选择“预期用途”类型作为文件名扩展名,便于筛选文件名中的相关文件请求者。这实际上是一个方便的“子类”或“子类型”分隔具有不同用途的相同FORM类型的文件。程序在不过度限制的情况下,不能要求符合其预期的子类型数据交换,因为他们不知道要使用的子类型用户希望与之交换数据的未来程序。问题:如何从4个字母的FORM生成3个字母的MS-DOS扩展类型ID?大多数单一用途文件将是一个单一的表格(可能是一个复合文件FORM类似于包含嵌套FORM类似乐器的乐谱描述)。如果是列表或CAT,程序应该跳过无法识别的对象以读取已识别的对象或第一个已识别的一个。然后,可以读取单一用途文件的程序可以读取某些内容也来自“废文件”。报废文件“废料文件”是为了在获取数据时在程序;剪贴板功能的核心。报废文件可能有类型“IFF”或文件扩展名“.IFF”。废料文件通常是包含替代表示的CAT基本信息相同。包括尽可能多的备选方案可以很容易地生成。这种冗余提高了我们不能让所有程序都可读写的情况格式。[Macintosh内部章节“废料管理器”。]例如,图形化的-带注释的乐谱可以由精简的4个音色来补充旋律和歌词。始发程序应编写备用表示按“偏好”排序:最偏好(最全面)类型到最不受欢迎(最不全面)的类型。接收程序应该使用它能理解的第一个出现的类型,或者搜索自己的“首选”类型。废料文件最多应有一个任何类型的替代文件。(一份清单相同类型的对象可以作为替代对象之一。)但不要阅读时要记住这一点;忽略类型的额外部分。然后读取废弃文件的程序可以从单个文件中读取内容目的文件。读者程序规则这里有一些关于构建读取IFF文件的程序的注释。如果你使用标准IFF阅读器模块“IFFR.C”,其中许多规则和详细信息将自动处理。(请参阅中的“支持软件”附录A)我们建议您从示例程序开始“ShowILBM.C”。您还应该阅读递归下降解析器。[例如,请参阅编译器构造高级课程。]%该标准非常灵活,因此许多程序可以交换数据。这意味着程序必须扫描文件并对实际上,无论它出现的顺序是什么。IFF阅读器程序是一个解析器。%为了使交换真正起作用,程序必须愿意在读入期间进行一些转换。如果数据不是例如,您希望光栅比您创建的光栅小程序,然后对其进行调整。类似地,您的程序可以裁剪一个大的图片、添加或删除位平面,以及创建/放弃遮罩平面。这个程序应该优雅地放弃它无法转换的数据。%如果它不是以“FORM”、“LIST”或“CAT”开头,它就不是IFF-85文件。%对于遇到的任何块,必须识别其类型ID了解其内容。%对于遇到的任何FORM块,必须识别其FORM键入ID以理解包含的“本地块”。即使你没有识别FORM类型,您仍然可以扫描它以查找嵌套FORM、LIST、,和感兴趣的CAT。%不要忘记在每个奇长块之后跳过pad字节。%块类型LIST、FORM、PROP和CAT是通用组。他们始终包含子类型ID后跟块。%读者应该在文件中处理FORMs的CAT。你可以请客像文档页这样的FORMs,以便按顺序排列或只使用第一份表格。%更简单的IFF阅读器完全跳过LIST。“完全符合IFF”读者是那些处理LIST的人,即使只是为了阅读第一个来自文件的表单。如果要查看列表,则必须处理共享属性(在PROP块中)。这个想法是为了得到正确的答案数据或根本没有。%最好的读者愿意研究未被识别的表格用于他们确实识别的嵌套FORM类型。例如,音乐剧乐谱可以包含嵌套的乐器描述和动画文件可能包含静态图片。程序员注意:处理PROP块并不简单!你会需要一些具有堆栈框架的解释器背景。如果是这样对于您来说,构建每个文件只读/写一个FORM的程序是不可能的。对于更勇敢的程序员来说,下一段总结了如何处理LIST和PROP。参见通用IFF阅读器模块“IFFR.C”以及示例程序“ShowILBM.C”了解详细信息。为遇到的每个LIST和FORM分配一个堆栈框架并初始化复制父LIST或FORM的堆栈框架级别,则需要将堆栈帧初始化为程序的全局默认设置。读取每个LIST或FORM时,存储所有遇到的属性到当前堆栈帧中。在示例ShowILBM中,每个堆栈框架中有一个位置用于放置位图标头属性ILBM.BMHD和颜色映射属性ILBM.CMAP。当你最终到达ILBM的BODY块时,使用当前堆栈帧中累积的属性设置。替代实现只会记住遇到的PROP,在到达其范围的末尾(包含的末尾)时忘记每个列表)。当遇到FORM XXXX时,扫描所有记住的块PROP XXXX,按顺序排列,好像它们出现在块之前在表格XXXX中。如果你阅读FORMs中的FORMs,这会变得更加棘手。Writer程序规则下面是一些关于构建编写IFF文件的程序的注释比阅读它们容易得多。如果使用标准IFF编写器模块“IFFW.C”(参见附录A中的“支持软件”),其中许多规则和细节将自动执行。参见示例程序“Raw2ILBM.C”。%IFF文件是单个FORM、LIST或CAT块。%任何IFF-85文件必须以4个字符“FORM”、“LIST”、,或“CAT”,后跟LONG ckSize。之后应该没有数据块结束。%块类型LIST、FORM、PROP和CAT是通用的。他们总是包含子类型ID,后跟块。这三个ID是通用的保留,如“LIS1”到“LIS9”、“FOR1”到”FOR9“、“CAT1”通过“CAT9”和“”。%不要忘记在每个奇数长度的块之后写一个0填充字节。%编写IFF小组的四种技巧:(1)构建数据在映射到虚拟内存的文件中,(2)在内存中构建数据块并使用块I/O,(3)流逐段写入数据(别忘了!)随机访问以设置组长度计数,(4)初步通过,计算长度计数,然后流写入数据。%不要尝试编辑您不知道如何创建的文件。程序可能会查看文件并复制出类型为它们可以识别,但不会编辑和替换嵌套的FORM,也不会添加或删除它们。这可能会使包含结构不一致。您可以编写一个新文件,其中包含您复制(或复制并修改),但不要复制结构零件我不明白。%您必须遵守附录A中的语法描述。例如。PROP只能出现在LIST中。 附录A参考类型定义以下C类型定义描述了标准IFF结构。声明在实际中的使用将因CPU和编译器而异。例如,如果我们定义ID,68000 Lattice C将生成有效的比较代码作为“LONG”。宏“MakeID”在编译时构建这些ID。/*标准IFF类型,以68000格C表示*/typedef unsigned char UBYTE;/*8位无符号*/typedef短单词;/*16位有符号*/typedef无符号短UWORD;/*16位无符号*/typedef long long;/*32位有符号*/typedef字符ID[4];/*“”到“~”中有4个字符*/typedef结构{ID ckID;长尺寸;/*sizeof(ckData)*/UBYTE ckData[/*ckSize*/];}大块;/*68000 Lattice C的ID typedef和生成器*/typedef长ID;/*“”到“~”中有4个字符*/#定义MakeID(a,b,c,d)((a)<<<<24|(b)<<<16|(c)<<<08|(d))/*全局保留的ID*/#定义ID_FORM MakeID('F','O','R','M')#定义ID_LIST MakeID('L','I','S','T')#定义ID_PROP MakeID('P','R','O','P')#定义ID_CAT MakeID('C','A','T','')#定义ID_FILLER MakeID(“,”,“,”)语法定义以下是本文档中的语法定义集合。区块::=ID#{UBYTE*}[0]属性::=区块FORM::=“FORM”#{FormType(LocalChunk|FORM|LIST|CAT)*}窗体类型::=IDLocalChunk::=属性|区块CAT::=“CAT”#{ContentsType(FORM|LIST|CAT)*}ContentsType::=ID--提示或“抽象数据类型”ID列表::=“LIST”#{ContentsType PROP*(FORM|LIST|CAT)*}PROP::=“PROP”#{FormType属性*}在这个扩展正则表达式表示法中,标记“#”表示以下{braced}数据字节的ckSize LONG计数。字面意义的项目显示在“引号”中,[方括号中的项目]是可选的,“*”表示0个或更多实例。有时需要的pad字节是显示为“[0]”。定义的区块ID这是当前定义的块ID表。我们也可以借钱一些Macintosh ID和数据格式。组块ID表格、清单、提案、目录。未来修订组块IDfor I for 9,LIS1我LIS9,CAT1我CAT9。表单类型ID(上述组块ID不能用于FORM类型ID。)(FORM中禁止使用小写字母和标点符号类型ID。)8SVX 8位采样声音、ANBM动画位图、FNTR光栅字体、FNTV矢量字体、FTXT格式文本、GSCR通用音乐分数,ILBM交错光栅位图图像,PDEF豪华打印页面定义、PICS Macintosh图片、PLBM(过时)、USCR Uhuru Sound软件乐谱,UVOX Uhuru Sound Software Macintosh声音,SMUS简单乐谱,VDEO豪华视频构建集视频。数据块ID“JJJJ”,文本,图片。PROP LIST属性IDOPGM、OCPU、OCMP、OSN、UNAM。 支持软件这些公共域C源程序可用于构建IFF兼容程序:IFF。H、 国际财务报告准则。C、 IFFW公司。C类IFF读写器包。这些模块能够可靠地处理读取和写入IFF文件。IFF检查。C这个方便的实用程序扫描IFF文件,检查内容格式良好,并打印轮廓块中的。封隔器。H、 封隔器。C、 解封器。C类运行用于ILBM文件的编码器和解码器。ILBM。H、 ILBMR.C、ILBMW.C光栅图像的读写器支持例程形成ILBM。ILBMR调用IFFR和UnPacker。ILBMW呼叫IFFW和封隔器。显示ILBM.CIFFR和ILBMR模块的调用方示例。这个Commodore-Amiga程序读取并显示FORM ILBM。原始ILBM.CILBM编写程序示例。作为示范读取原始光栅图像文件并写入图像作为FORM ILBM文件。ILBM2法律。C类ILBM阅读器程序示例。读取FORM ILBM文件并将其写入原始光栅图像。重新分配。H、 再分配c这些示例中使用的内存分配例程。简介。H通用“包括几乎所有内容”包括文件正确指定了include的序列。阅读图片。H、 阅读图片.c给定ILBM文件,将其读入位图并彩色地图PUTPICT。H、 PutPict.c公司给定位图和彩色地图,将其另存为ILBM文件。GIO公司。H、 Gio.c通用I/O加速包。尝试加速通过缓冲写操作和读操作实现磁盘I/O。giocall.c对gio的示例调用。c读取ILBM文件,打印出ascii表示用于包含在C文件中。bmprintc.c打印数据的c语言表示位图。 示例图表下面是一个示例IFF文件的方框图,即光栅图像FORMILBM公司。此FORM包含位图标头属性块BMHD,一种颜色映射属性块CMAP和光栅数据块BODY。这个特别的光栅是未压缩的320 x 200像素x 3位平面。后面的“0”CMAP块表示零填充字节;自CMAP以来包括块的长度是奇数。图表右侧的文本显示IFFCheck实用程序将打印的大纲用于此特定文件。+-----------------------------------+|“表格”24070 |表格24070 IBLM+-----------------------------------+|“ILBM”|+-----------------------------------+| +-------------------------------+ |||“BMHD”20||。BMHD 20型| | 320, 200, 0, 0, 3, 0, 0, ... | || + ------------------------------+ |||“CMAP”21||。CMAP 21| | 0, 0, 0; 32, 0, 0; 64,0,0; .. | || +-------------------------------+ || 0 |+-----------------------------------+|'BODY'24000|。主体24000|0,0,0。。。 |+-----------------------------------+第二张图显示了共享一个公共的两个FORM ILBM的列表BMHD属性和通用CMAP属性。同样,右边的文本是一个IFFCheck的大纲。+-----------------------------------------+|“列表”48114|LIST 48114 AAAA+-----------------------------------------+|“AAAA”|。建议62 ILBM| +-----------------------------------+ |||'PROP'62 | || +-----------------------------------+ |||“ILBM”||| +-----------------------------------+ || | +-------------------------------+ | ||||'BMHD'20||。。BMHD 20型| | | 320, 200, 0, 0, 3, 0, 0, ... | | || | | ------------------------------+ | ||||“CMAP”21 |||。。CMAP 21| | | 0, 0, 0; 32, 0, 0; 64,0,0; .. | | || | +-------------------------------+ | || | 0 | || +-----------------------------------+ || +-----------------------------------+ |||'FORM'24012||。表24012 ILBM| +-----------------------------------+ |||'ILBM'||| +-----------------------------------+ || | +-----------------------------+ | ||||'BODY'24000||。。车身24000| | |0, 0, 0, ... | | |||+--------------------+||| +-----------------------------------+ || +-----------------------------------+ |||'FORM'24012||。表24012 ILBM| +-----------------------------------+ |||“ILBM”||| +-----------------------------------+ || | +-----------------------------+ | ||||'BODY'24000||。。主体24000| | |0, 0, 0, ... | | || | +-----------------------------+ | || +-----------------------------------+ |+-----------------------------------------+ 附录B:标准委员会以下人员参与了本IFF标准的设计:Bob“Kodiak”Burns,Amiga准将R.J.Mical,Amiga准将杰里·莫里森(Jerry Morrison),电子艺术Greg Riker,电子艺术史蒂夫·肖,电子艺术巴里·沃尔什(Barry Walsh),阿米加准将