/**********************************************************************

 * (c) 1996 Voxware, Inc.  All Rights Reserved.  This file contains

 * proprietary information of trade secrets of Voxware, Inc. and may

 * not be distributed without the authorization of Voxware, Inc.

 **********************************************************************

 *

 *	File:			VOXCHUNK.H

 *	Purpose:		Types and #defines which describe the handling of

 *					the INFO chunks in the vox files.

 *	Created:		5/29/96 - George T. Talbot

 *	Modified:		6/17/96 - GTT - Added code to set lengths to -1 on

 *									the VOXCHUNK_SET() macro so that

 *									the default behaviour is to read

 *									existing info data.

 *	Notes:

 *

 **********************************************************************/



#ifndef _VOXCHUNK_H_

#define _VOXCHUNK_H_

typedef struct tagVox_Chunk_Info

{

	unsigned long		id;

	long				length;

	char				info[256];

} VOX_CHUNK_INFO;



// Important note:  When adding a new VOXCHUNK_xxx, make sure to add

// the cooresponding elements to the gRIFF_VoxChunk_IDs[] and

// gAIFF_VoxChunk_IDs[] arrays in INFOCHNK.C



#define	VOXCHUNK_NONE		0

#define	VOXCHUNK_URL		1

#define	VOXCHUNK_COPYRIGHT	2

#define	VOXCHUNK_TITLE		3

#define	VOXCHUNK_SOFTWARE	4

#define	VOXCHUNK_AUTHOR		5

#define	VOXCHUNK_COMMENT	6



#define	VOXCHUNK_NUM_KINDS	7



// Convenience macros...



// Clear out a set of VOX_CHUNK_INFO records for use...

//

//	Parameters are:  	_zz1	- Pointer to array of VOX_CHUNK_INFO.

//						_zz2	- Number of elements in the array.



#define	VOXCHUNK_SET(_zz1, _zz2)	{														\
										memset((_zz1), 0, (_zz2) * sizeof(VOX_CHUNK_INFO));	\
										for (short i=0; i<(_zz2); ++i)						\
										{													\
											(_zz1)[i].length	= -1;						\
										}													\
									}



// Write a C string into a VOX_CHUNK_INFO record...

//

//	Parameters are:		_zz1	- VOX_CHUNK_INFO record

//						_zz2	- Chunk ID from above list

//						_zz3	- A C string



#define	VOXCHUNK_INFO(_zz1, _zz2, _zz3)											\
								{												\
									(_zz1).id		= (_zz2);					\
									(_zz1).length	= strlen(_zz3)+1;			\
									memcpy((_zz1).info, (_zz3), (_zz1).length);	\
								}

#endif