#ifndef __NSAMPLE_H__
# define __NSAMPLE_H__   1

# ifndef _NDEFINES_H__
#  error "include <naudio\ndefines.h> first"
# endif

# ifndef __ENGINE_H__
#  error "include <naudio\engine.h> first"
# endif

typedef struct       /* sample star header, lame format (If U ask ME) */
{
   char  time[ 10],
         date[ 12],
         comm1[ 30],
         comm2[ 40],
         comm3[ 40],
         comm4[ 40],
         bits[ 5],
         name[ 20],
         freq[ 12],
         len[ 12],
         delay,
         unused[ 24];
} smp_head;


#define S_N_SMPNAME  25

typedef struct n_sample_
{
   word        type;
   char        name[ S_N_SMPNAME + 1];
   lword       len,
               repstrt,
               replen;
   lword       frq;           /* frequency at which it was sampled */
   byte        ftune,
               vol;
   byte        data[ 2];
} n_sample;
#define S_NSAMPLE (sizeof( n_sample) - 2)

#define NC_NONE         0
#define NC_VARFIXDELTA  1
#define NC_FIXLOGDELTA  2

#ifndef _IFF_H_
# include <naudio\iff.h>   /* yup, direct include */
#endif

word     ncmp_flat_size    _C_PROTO(( word size));
int      ncmp_flat_type    _C_PROTO(( int type));
byte     *ncmp_flat_loss   _C_PROTO(( byte *loss));
void     ncmp_expand       _C_PROTO(( void *dst, void *src, lword len));
lword    ncmp_compress     _C_PROTO(( void *dst, void *src, lword len));

void     *nsample_iff      _C_PROTO(( iff_chunk *p, lword type, long size));
int      nsample_get_type  _C_PROTO(( void *data, lword len));
void     nsample_free      _C_PROTO(( n_sample *p));
void     nsample_init      _C_PROTO(( n_sample *p, lword len));
n_sample *nsample_load     _C_PROTO(( char *filename));
int      nsample_compare   _C_PROTO(( n_sample *p, n_sample *q));
int      nsample_save      _C_PROTO(( char *filename, n_sample *p, lword type));
void     nsample_calc_step _C_PROTO(( long frq, lword *p));
channel  *nsample_play     _C_PROTO(( n_sample *, long frq, int play, int v));
void     nsample_channel   _C_PROTO(( channel *, n_sample *, long f, int v));
lword    nsample_engine    _C_PROTO(( lword frq, word type));
void     nsample_refresh   _C_PROTO(( void *, void *));

void     nsample_signify   _C_PROTO(( sbyte *, byte *, lword len));
void     nsample_unsignify _C_PROTO(( byte *, sbyte *, lword len));

#endif

