/*----------------------------------------------------------------------------
 *
 * File: 
 * eas_otadata.h
 *
 * Contents and purpose:
 * OTA File Parser
 *
 * This file contains data declarations for the OTA parser.  
 *			
 * Copyright Sonic Network Inc. 2005

 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 *----------------------------------------------------------------------------
 * Revision Control:
 *   $Revision: 82 $
 *   $Date: 2006-07-10 11:45:19 -0700 (Mon, 10 Jul 2006) $
 *----------------------------------------------------------------------------
*/

#ifndef EAS_OTADATA_H
#define EAS_OTADATA_H

#include "eas_data.h"

/* definition for state flags */
#define OTA_FLAGS_UNICODE			0x01	/* unicode text */

/*----------------------------------------------------------------------------
 *
 * S_OTA_DATA
 *
 * This structure contains the state data for the OTA parser
 *----------------------------------------------------------------------------
*/

typedef struct
{
	EAS_I32			fileOffset;				/* offset to location in file */
	EAS_U8			patternLen;				/* length of current pattern */
	EAS_U8			dataByte;				/* previous char from file */
	EAS_U8 			bitCount;				/* bit count in char */
} S_OTA_LOC;

typedef struct
{
	EAS_FILE_HANDLE	fileHandle;				/* file handle */
	S_SYNTH	*pSynth;				/* synth handle */
	EAS_I32			fileOffset;				/* offset to start of data */
	EAS_I32			time;					/* current time in 256ths of a msec */
	EAS_U32			tick;					/* length of 32nd note in 256th of a msec */
	EAS_U32			restTicks;				/* ticks to rest after current note */
	S_OTA_LOC		patterns[4];			/* pattern locations */
	S_OTA_LOC		current;				/* current location */
	S_OTA_LOC		restore;				/* previous location */
	S_METADATA_CB	metadata;				/* metadata callback */
	EAS_U8			flags;					/* bit flags */
	EAS_U8			numPatterns;			/* number of patterns left in song */
	EAS_U8			currentPattern;			/* current pattern for loop */
	EAS_U8			note;					/* MIDI note number */
	EAS_U8			octave;					/* octave modifier */
	EAS_U8			style;					/* from STYLE */
	EAS_U8			velocity;				/* current volume */
	EAS_U8			state;					/* current state EAS_STATE_XXXX */
	EAS_U8 			loopCount;				/* loop count for pattern */
} S_OTA_DATA;

#endif


