/*
 	File:		Collections.r
 
 	Contains:	Collection Manager Interfaces
 
 	Version:	Technology:	System 7.x
 				Release:	QuickTime 4.0
 
 	Copyright:	© 1989-1998 by Apple Computer, Inc., all rights reserved
 
 	Bugs?:		For bug reports, consult the following page on
 				the World Wide Web:
 
 					http://developer.apple.com/bugreporter/
 
*/

#ifndef __COLLECTIONS_R__
#define __COLLECTIONS_R__

#ifndef __CONDITIONALMACROS_R__
#include "ConditionalMacros.r"
#endif

// 'cltn' - definition of a collection resource (loaded by GetNewCollection)
type 'cltn' {
	longint = $$CountOf(ItemArray);
	array ItemArray
		{
		longint;	// tag
		longint;	// id
			boolean		itemUnlocked			=	false,	// defined attributes bits...
						itemLocked				=	true;
			boolean		itemNonPersistent		=	false,
						itemPersistent			=	true;
			unsigned bitstring[14] = 0;						// reserved attributes bits...
			unsigned bitstring[16];							// user attributes bits...
		wstring;
		align word;
	};
};

// 'flac' - definition of a flattened collection (created by Flatten[Partial]Collection)
// Note that due to the complexity of this format, it is possible to create 'flac' resources
// using Rez, but it is not possible to DeRez them. DeRez cannot currently handle multiple
// undefined labels as used in this type definition. Instead, DeRez just emits the raw data.
// Some important other limitations:
//     Zero-length items aren't supported.
//     Entries in the item array must be sorted by tag and ID.
//     Entries in the data array must be in the same order as corresponding item array entries.
// Here's an example of using the 'flac' resource type:
//     resource 'flac' (128)
//     {
//         0x40000020,
//         {
//             'TEST', 2, itemUnlocked, itemPersistent, 0x02,
//             'TEST', 3, itemUnlocked, itemPersistent, 0x04,
//             'TEST', 4, itemUnlocked, itemPersistent, 0x08
//         },
//         {
//             "foo",
//             "bird",
//             "The quick brown fox jumped over the lazy dog"
//         }
//     };
type 'flac'
{
	longint = 0x00010000;			// version
	longint	noAttributes = 0;			// default collection attributes
	longint = $$CountOf(ItemArray);		// number of items
	array ItemArray			// array of items
	{
		literal longint;	// tag
		longint;			// id
		boolean		itemUnlocked		=	false,	// defined attributes bits
					itemLocked			=	true;
		boolean		itemNonPersistent	=	false,
					itemPersistent		=	true;
		unsigned bitstring[14] = 0;					// reserved attributes bits
		unsigned bitstring[16];						// user attributes bits
		
		// offset in data block to item data (to the data itself, not to the length)
		longint = (itemData[$$ArrayIndex(ItemArray)] - dataStart) / 8;
	};
dataSize:
	longint = ((dataEnd - dataSize) / 8) - 4;		// size of data
dataStart:
	array ItemDataArray
	{
itemSize:
		// size of this item's data
		longint = ((itemEnd[$$ArrayIndex(ItemDataArray)] - itemSize[$$ArrayIndex(ItemDataArray)]) / 8) - 4;
itemData:
		hex string;			// the item's data
itemEnd:
		;
		align word;
	};
dataEnd:
	;
};

#endif /* __COLLECTIONS_R__ */

