TwlIPL_commit-99/add-ins/TwlSystem/build/libraries/snd/src/sndarc.c

1314 lines
42 KiB
C
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*---------------------------------------------------------------------------*
Project: NITRO-System - libraries - snd
File: sndarc.c
Copyright 2004-2008 Nintendo. All rights reserved.
These coded instructions, statements, and computer programs contain
proprietary information of Nintendo of America Inc. and/or Nintendo
Company Ltd., and are protected by Federal copyright law. They may
not be disclosed to third parties or copied or duplicated in any form,
in whole or in part, without the prior written consent of Nintendo.
$Revision: 172 $
*---------------------------------------------------------------------------*/
#include <nnsys/snd/sndarc.h>
#include <nnsys/snd/config.h>
/* if include from Other Environment for exsample VC or BCB, */
/* please define NNS_FROM_TOOL */
#ifndef NNS_FROM_TOOL
#include <nitro/snd.h>
#include <nnsys/misc.h>
#include <nnsys/snd/player.h>
#else
#define NNS_ASSERT(exp) ((void) 0)
#define NNS_NULL_ASSERT(exp) ((void) 0)
#define NNS_ALIGN4_ASSERT(exp) ((void) 0)
#define NNS_MAX_ASSERT(exp, max) ((void) 0)
static NNS_SND_INLINE
void MI_CpuCopy32( register const void *srcp, register void *destp, register u32 size )
{
const u32* sp = (const u32*)srcp;
u32* dp = (u32*)destp;
u32* dpe = (u32*)((char*)dp + size);
while( dp < dpe ) {
*dp++ = *sp++;
}
}
#ifdef _MSC_VER
#pragma warning( disable : 4018 ) // warning: signed/unsigned mismatch
#pragma warning( disable : 4311 ) // warning: pointer truncation from 'type' to 'type'
#pragma warning( disable : 4312 ) // warning: conversion from 'type' to 'type' of greater size
#endif
#endif // NNS_FROM_TOOL
/******************************************************************************
static variable
******************************************************************************/
static const char null_string = '\0';
static NNSSndArc* sCurrent = NULL;
/******************************************************************************
static function declaration
******************************************************************************/
static const char* GetSymbol(
const NNSSndArcOffsetTable* table,
int index,
const void* base
);
static void* GetPtr( void* base, u32 offset );
static const void* GetPtrConst( const void* base, u32 offset );
static const NNSSndArcOffsetTable* GetOffsetTable( const NNSSndArcInfo* info, u32 offset );
static void InfoDisposeCallback( void* mem, u32 size, u32 data1, u32 data2 );
static void FatDisposeCallback( void* mem, u32 size, u32 data1, u32 data2 );
static void SymbolDisposeCallback( void* mem, u32 size, u32 data1, u32 data2 );
/******************************************************************************
inline functions
******************************************************************************/
static NNS_SND_INLINE
void* GetPtr( void* base, u32 offset )
{
if ( offset == 0 ) return NULL;
return (u8*)base + offset;
}
static NNS_SND_INLINE
const void* GetPtrConst( const void* base, u32 offset )
{
if ( offset == 0 ) return NULL;
return (const u8*)base + offset;
}
static NNS_SND_INLINE
const NNSSndArcOffsetTable* GetOffsetTable( const NNSSndArcInfo* info, u32 offset )
{
return (const NNSSndArcOffsetTable*)GetPtrConst( info, offset );
}
/******************************************************************************
public functions
******************************************************************************/
#ifndef SDK_SMALL_BUILD
#ifndef NNS_FROM_TOOL
/*---------------------------------------------------------------------------*
Name: NNS_SndArcInit
Description: <20>T<EFBFBD>E<EFBFBD><45><EFBFBD>h<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>\<5C><><EFBFBD>̂<EFBFBD><CC82><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Arguments: arc - <20>T<EFBFBD>E<EFBFBD><45><EFBFBD>h<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>\<5C><><EFBFBD>̂̃|<7C>C<EFBFBD><43><EFBFBD>^
filePath - <20>T<EFBFBD>E<EFBFBD><45><EFBFBD>h<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>̃p<CC83>X
heap - <20>T<EFBFBD>E<EFBFBD><45><EFBFBD>h<EFBFBD>q<EFBFBD>[<5B>v
symbolLoadFlag - <20>V<EFBFBD><56><EFBFBD>{<7B><><EFBFBD>f<EFBFBD>[<5B>^<5E><><EFBFBD><EFBFBD><EFBFBD>[<5B>h<EFBFBD><68><EFBFBD><EFBFBD>ǂ<EFBFBD><C782><EFBFBD><EFBFBD>̃t<CC83><74><EFBFBD>O
Returns: None.
*---------------------------------------------------------------------------*/
void NNS_SndArcInit( NNSSndArc* arc, const char* filePath, NNSSndHeapHandle heap, BOOL symbolLoadFlag )
{
BOOL result;
NNS_ASSERT( FS_IsAvailable() );
NNS_NULL_ASSERT( arc );
/* NNSSndArc<72>\<5C><><EFBFBD>̂̏<CC82><CC8F><EFBFBD><EFBFBD><EFBFBD> */
arc->info = NULL;
arc->fat = NULL;
arc->symbol = NULL;
arc->loadBlockSize = 0;
/* <20>t<EFBFBD>@<40>C<EFBFBD><43>ID<49>̎擾 */
result = FS_ConvertPathToFileID( & arc->fileId, filePath );
NNS_ASSERTMSG( result, "Cannot find file %s\n", filePath );
if ( ! result ) return;
/* <20>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD>J<EFBFBD><4A> */
FS_InitFile( & arc->file );
result = FS_OpenFileFast( & arc->file, arc->fileId );
NNS_ASSERTMSG( result, "Cannot open file %s\n", filePath );
if ( ! result ) return;
arc->file_open = TRUE;
/* <20>Z<EFBFBD>b<EFBFBD>g<EFBFBD>A<EFBFBD>b<EFBFBD>v */
result = NNS_SndArcSetup( arc, heap, symbolLoadFlag );
NNS_ASSERT( result );
if ( ! result ) return;
/* <20>J<EFBFBD><4A><EFBFBD><EFBFBD><EFBFBD>g<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>Ƃ<EFBFBD><C682>Đݒ<C490> */
sCurrent = arc;
}
/*---------------------------------------------------------------------------*
Name: NNS_SndArcInitWithResult
Description: <20>T<EFBFBD>E<EFBFBD><45><EFBFBD>h<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>\<5C><><EFBFBD>̂<EFBFBD><CC82><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>i<EFBFBD>Ԃ<EFBFBD><D482>l<EFBFBD>L<EFBFBD><4C><EFBFBD>j
Arguments: arc - <20>T<EFBFBD>E<EFBFBD><45><EFBFBD>h<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>\<5C><><EFBFBD>̂̃|<7C>C<EFBFBD><43><EFBFBD>^
filePath - <20>T<EFBFBD>E<EFBFBD><45><EFBFBD>h<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>̃p<CC83>X
heap - <20>T<EFBFBD>E<EFBFBD><45><EFBFBD>h<EFBFBD>q<EFBFBD>[<5B>v
symbolLoadFlag - <20>V<EFBFBD><56><EFBFBD>{<7B><><EFBFBD>f<EFBFBD>[<5B>^<5E><><EFBFBD><EFBFBD><EFBFBD>[<5B>h<EFBFBD><68><EFBFBD><EFBFBD>ǂ<EFBFBD><C782><EFBFBD><EFBFBD>̃t<CC83><74><EFBFBD>O
Returns: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǂ<EFBFBD><C782><EFBFBD>
*---------------------------------------------------------------------------*/
BOOL NNS_SndArcInitWithResult( NNSSndArc* arc, const char* filePath, NNSSndHeapHandle heap, BOOL symbolLoadFlag )
{
BOOL result;
NNS_ASSERT( FS_IsAvailable() );
NNS_NULL_ASSERT( arc );
/* NNSSndArc<72>\<5C><><EFBFBD>̂̏<CC82><CC8F><EFBFBD><EFBFBD><EFBFBD> */
arc->info = NULL;
arc->fat = NULL;
arc->symbol = NULL;
arc->loadBlockSize = 0;
/* <20>t<EFBFBD>@<40>C<EFBFBD><43>ID<49>̎擾 */
result = FS_ConvertPathToFileID( & arc->fileId, filePath );
if ( ! result ) return FALSE;
/* <20>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD>J<EFBFBD><4A> */
FS_InitFile( & arc->file );
result = FS_OpenFileFast( & arc->file, arc->fileId );
if ( ! result ) return FALSE;
arc->file_open = TRUE;
/* <20>Z<EFBFBD>b<EFBFBD>g<EFBFBD>A<EFBFBD>b<EFBFBD>v */
result = NNS_SndArcSetup( arc, heap, symbolLoadFlag );
if ( ! result ) return FALSE;
/* <20>J<EFBFBD><4A><EFBFBD><EFBFBD><EFBFBD>g<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>Ƃ<EFBFBD><C682>Đݒ<C490> */
sCurrent = arc;
return TRUE;
}
/*---------------------------------------------------------------------------*
Name: NNS_SndArcSetup
Description: <20>T<EFBFBD>E<EFBFBD><45><EFBFBD>h<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>\<5C><><EFBFBD>̂<EFBFBD><CC82>Z<EFBFBD>b<EFBFBD>g<EFBFBD>A<EFBFBD>b<EFBFBD>v
Arguments: arc - <20>T<EFBFBD>E<EFBFBD><45><EFBFBD>h<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>\<5C><><EFBFBD>̂̃|<7C>C<EFBFBD><43><EFBFBD>^
heap - <20>T<EFBFBD>E<EFBFBD><45><EFBFBD>h<EFBFBD>q<EFBFBD>[<5B>v
symbolLoadFlag - <20>V<EFBFBD><56><EFBFBD>{<7B><><EFBFBD>f<EFBFBD>[<5B>^<5E><><EFBFBD><EFBFBD><EFBFBD>[<5B>h<EFBFBD><68><EFBFBD><EFBFBD>ǂ<EFBFBD><C782><EFBFBD><EFBFBD>̃t<CC83><74><EFBFBD>O
Returns: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǂ<EFBFBD><C782><EFBFBD>
*---------------------------------------------------------------------------*/
BOOL NNS_SndArcSetup( NNSSndArc* arc, NNSSndHeapHandle heap, BOOL symbolLoadFlag )
{
BOOL result;
s32 readSize;
NNS_NULL_ASSERT( arc );
NNS_ASSERT( arc->file_open );
/* <20>w<EFBFBD>b<EFBFBD>_<EFBFBD>̃<EFBFBD><CC83>[<5B>h */
result = FS_SeekFile( & arc->file, 0, FS_SEEK_SET );
if ( ! result ) return FALSE;
readSize = FS_ReadFile(
& arc->file,
& arc->header,
sizeof( arc->header )
);
if ( readSize != sizeof( arc->header ) ) return FALSE;
NNS_ASSERT(
arc->header.fileHeader.signature[0] == 'S' &&
arc->header.fileHeader.signature[1] == 'D' &&
arc->header.fileHeader.signature[2] == 'A' &&
arc->header.fileHeader.signature[3] == 'T'
);
NNS_ASSERT( arc->header.fileHeader.version >= NNS_SND_ARC_SUPPORTED_FILE_VERSION );
if ( heap != NNS_SND_HEAP_INVALID_HANDLE )
{
/* <20>T<EFBFBD>E<EFBFBD><45><EFBFBD>h<EFBFBD><68><EFBFBD><EFBFBD><EFBFBD>e<EFBFBD>[<5B>u<EFBFBD><75><EFBFBD>̃<EFBFBD><CC83>[<5B>h */
arc->info = (NNSSndArcInfo*)NNS_SndHeapAlloc( heap, arc->header.infoSize, InfoDisposeCallback, (u32)arc, 0 );
if ( arc->info == NULL ) return FALSE;
result = FS_SeekFile( & arc->file, (s32)( arc->header.infoOffset ), FS_SEEK_SET );
if ( ! result ) return FALSE;
readSize = FS_ReadFile( & arc->file, arc->info, (s32)( arc->header.infoSize ) );
if ( readSize != arc->header.infoSize ) return FALSE;
NNS_ASSERT( arc->info->blockHeader.kind == NNS_SND_ARC_SIGNATURE_INFO );
/* <20>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>A<EFBFBD><41><EFBFBD>P<EFBFBD>[<5B>V<EFBFBD><56><EFBFBD><EFBFBD><EFBFBD>e<EFBFBD>[<5B>u<EFBFBD><75><EFBFBD>̃<EFBFBD><CC83>[<5B>h */
arc->fat = (NNSSndArcFat*)NNS_SndHeapAlloc( heap, arc->header.fatSize, FatDisposeCallback, (u32)arc, 0 );
if ( arc->fat == NULL ) return FALSE;
result = FS_SeekFile( & arc->file, (s32)( arc->header.fatOffset ), FS_SEEK_SET );
if ( ! result ) return FALSE;
readSize = FS_ReadFile( & arc->file, arc->fat, (s32)( arc->header.fatSize ) );
if ( readSize != arc->header.fatSize ) return FALSE;
NNS_ASSERT( arc->fat->blockHeader.kind == NNS_SND_ARC_SIGNATURE_FAT );
/* <20>V<EFBFBD><56><EFBFBD>{<7B><><EFBFBD>e<EFBFBD>[<5B>u<EFBFBD><75><EFBFBD>̃<EFBFBD><CC83>[<5B>h */
if ( symbolLoadFlag && arc->header.symbolDataSize > 0 )
{
arc->symbol = (NNSSndArcSymbol*)NNS_SndHeapAlloc( heap, arc->header.symbolDataSize, SymbolDisposeCallback, (u32)arc, 0 );
if ( arc->symbol == NULL ) return FALSE;
result = FS_SeekFile( & arc->file, (s32)( arc->header.symbolDataOffset ), FS_SEEK_SET );
if ( ! result ) return FALSE;
readSize = FS_ReadFile( & arc->file, arc->symbol, (s32)( arc->header.symbolDataSize ) );
if ( readSize != arc->header.symbolDataSize ) return FALSE;
NNS_ASSERT( arc->symbol->blockHeader.kind == NNS_SND_ARC_SIGNATURE_SYMB );
}
}
return TRUE;
}
#endif // NNS_FROM_TOOL
#endif /* SDK_SMALL_BUILD */
/*---------------------------------------------------------------------------*
Name: NNS_SndArcInitOnMemory
Description: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̃T<CC83>E<EFBFBD><45><EFBFBD>h<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>f<EFBFBD>[<5B>^<5E><><EFBFBD>g<EFBFBD><67><EFBFBD>āA
<20>T<EFBFBD>E<EFBFBD><45><EFBFBD>h<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>\<5C><><EFBFBD>̂<EFBFBD><CC82><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Arguments: arc - <20>T<EFBFBD>E<EFBFBD><45><EFBFBD>h<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>\<5C><><EFBFBD>̂̃|<7C>C<EFBFBD><43><EFBFBD>^
data - <20>T<EFBFBD>E<EFBFBD><45><EFBFBD>h<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>f<EFBFBD>[<5B>^<5E>̃|<7C>C<EFBFBD><43><EFBFBD>^
Returns: None.
*---------------------------------------------------------------------------*/
void NNS_SndArcInitOnMemory( NNSSndArc* arc, void* data )
{
NNSSndArcHeader* header = (NNSSndArcHeader*)data;
NNSSndArcFileInfo* file;
int fileId;
NNS_NULL_ASSERT( arc );
NNS_NULL_ASSERT( data );
NNS_ALIGN4_ASSERT( data );
MI_CpuCopy32( header, &arc->header, sizeof( arc->header ) );
NNS_ASSERT(
arc->header.fileHeader.signature[0] == 'S' &&
arc->header.fileHeader.signature[1] == 'D' &&
arc->header.fileHeader.signature[2] == 'A' &&
arc->header.fileHeader.signature[3] == 'T'
);
NNS_ASSERT( arc->header.fileHeader.version >= NNS_SND_ARC_SUPPORTED_FILE_VERSION );
arc->info = (NNSSndArcInfo*)GetPtr( header, arc->header.infoOffset );
arc->fat = (NNSSndArcFat*)GetPtr( header, arc->header.fatOffset );
arc->symbol = (NNSSndArcSymbol*)GetPtr( header, arc->header.symbolDataOffset );
arc->loadBlockSize = 0;
NNS_NULL_ASSERT( arc->info );
NNS_NULL_ASSERT( arc->fat );
NNS_ASSERT( arc->info->blockHeader.kind == NNS_SND_ARC_SIGNATURE_INFO );
NNS_ASSERT( arc->fat->blockHeader.kind == NNS_SND_ARC_SIGNATURE_FAT );
NNS_ASSERT( arc->symbol == NULL || arc->symbol->blockHeader.kind == NNS_SND_ARC_SIGNATURE_SYMB );
for( fileId = 0; fileId < arc->fat->count ; fileId ++ )
{
file = & arc->fat->files[ fileId ];
file->mem = GetPtr( header, file->offset );
NNS_NULL_ASSERT( file->mem );
}
arc->file_open = FALSE;
/* <20>J<EFBFBD><4A><EFBFBD><EFBFBD><EFBFBD>g<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>Ƃ<EFBFBD><C682>Đݒ<C490> */
sCurrent = arc;
}
/*---------------------------------------------------------------------------*
Name: NNS_SndArcSetCurrent
Description: <20>J<EFBFBD><4A><EFBFBD><EFBFBD><EFBFBD>g<EFBFBD>T<EFBFBD>E<EFBFBD><45><EFBFBD>h<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>̐ݒ<CC90>
Arguments: arc - <20>Z<EFBFBD>b<EFBFBD>g<EFBFBD><67><EFBFBD><EFBFBD><EFBFBD>T<EFBFBD>E<EFBFBD><45><EFBFBD>h<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u
Returns: <20>Z<EFBFBD>b<EFBFBD>g<EFBFBD>O<EFBFBD>̃J<CC83><4A><EFBFBD><EFBFBD><EFBFBD>g<EFBFBD>T<EFBFBD>E<EFBFBD><45><EFBFBD>h<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u
*---------------------------------------------------------------------------*/
NNSSndArc* NNS_SndArcSetCurrent( NNSSndArc* arc )
{
NNSSndArc* oldArc = sCurrent;
sCurrent = arc;
return oldArc;
}
/*---------------------------------------------------------------------------*
Name: NNS_SndArcGetCurrent
Description: <20>J<EFBFBD><4A><EFBFBD><EFBFBD><EFBFBD>g<EFBFBD>T<EFBFBD>E<EFBFBD><45><EFBFBD>h<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD><75><EFBFBD>
Arguments: None.
Returns: <20>J<EFBFBD><4A><EFBFBD><EFBFBD><EFBFBD>g<EFBFBD>T<EFBFBD>E<EFBFBD><45><EFBFBD>h<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u
*---------------------------------------------------------------------------*/
NNSSndArc* NNS_SndArcGetCurrent( void )
{
return sCurrent;
}
/*---------------------------------------------------------------------------*
Name: NNS_SndArcGetSeqParam
Description: <20>V<EFBFBD>[<5B>P<EFBFBD><50><EFBFBD>X<EFBFBD>p<EFBFBD><70><EFBFBD><EFBFBD><EFBFBD>[<5B>^<5E>̎擾
Arguments: seqNo - <20>V<EFBFBD>[<5B>P<EFBFBD><50><EFBFBD>X<EFBFBD>ԍ<EFBFBD>
Returns: <20>V<EFBFBD>[<5B>P<EFBFBD><50><EFBFBD>X<EFBFBD>p<EFBFBD><70><EFBFBD><EFBFBD><EFBFBD>[<5B>^<5E>\<5C><><EFBFBD><EFBFBD>
*---------------------------------------------------------------------------*/
const NNSSndSeqParam* NNS_SndArcGetSeqParam( int seqNo )
{
const NNSSndArcSeqInfo* info;
info = NNS_SndArcGetSeqInfo( seqNo );
if ( info == NULL ) return NULL;
return & info->param;
}
/*---------------------------------------------------------------------------*
Name: NNS_SndArcGetSeqArcParam
Description: <20>V<EFBFBD>[<5B>P<EFBFBD><50><EFBFBD>X<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>p<EFBFBD><70><EFBFBD><EFBFBD><EFBFBD>[<5B>^<5E>̎擾
Arguments: seqArcNo - <20>V<EFBFBD>[<5B>P<EFBFBD><50><EFBFBD>X<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>ԍ<EFBFBD>
index - <20>V<EFBFBD>[<5B>P<EFBFBD><50><EFBFBD>X<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>C<EFBFBD><43><EFBFBD>f<EFBFBD>b<EFBFBD>N<EFBFBD>X
Returns: <20>V<EFBFBD>[<5B>P<EFBFBD><50><EFBFBD>X<EFBFBD>p<EFBFBD><70><EFBFBD><EFBFBD><EFBFBD>[<5B>^<5E>\<5C><><EFBFBD><EFBFBD>
*---------------------------------------------------------------------------*/
const NNSSndSeqParam* NNS_SndArcGetSeqArcParam( int seqArcNo, int index )
{
const NNSSndArcSeqArcInfo* info;
const NNSSndSeqArc* seqArc;
const NNSSndSeqArcSeqInfo* sound;
info = NNS_SndArcGetSeqArcInfo( seqArcNo );
if ( info == NULL ) return NULL;
seqArc = (const NNSSndSeqArc*)NNS_SndArcGetFileAddress( info->fileId );
if ( seqArc == NULL ) return NULL;
sound = NNSi_SndSeqArcGetSeqInfo( seqArc, index );
if ( sound == NULL ) return NULL;
return & sound->param;
}
/*---------------------------------------------------------------------------*
Name: NNS_SndArcGetSeqInfo
Description: <20>V<EFBFBD>[<5B>P<EFBFBD><50><EFBFBD>X<EFBFBD><58><EFBFBD><EFBFBD><EFBFBD>̎擾
Arguments: seqNo - <20>V<EFBFBD>[<5B>P<EFBFBD><50><EFBFBD>X<EFBFBD>ԍ<EFBFBD>
Returns: <20>V<EFBFBD>[<5B>P<EFBFBD><50><EFBFBD>X<EFBFBD><58><EFBFBD><EFBFBD><EFBFBD>\<5C><><EFBFBD>̂̃|<7C>C<EFBFBD><43><EFBFBD>^
<20><><EFBFBD>s<EFBFBD><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>́ANULL
*---------------------------------------------------------------------------*/
const NNSSndArcSeqInfo* NNS_SndArcGetSeqInfo( int seqNo )
{
NNSSndArc* arc = sCurrent;
const NNSSndArcOffsetTable* table;
NNS_NULL_ASSERT( arc );
NNS_NULL_ASSERT( arc->info );
table = GetOffsetTable( arc->info, arc->info->seqOffset );
if ( table == NULL ) return NULL;
if ( seqNo < 0 ) return NULL;
if ( seqNo >= table->count ) return NULL;
return (const NNSSndArcSeqInfo*)GetPtrConst( arc->info, table->offset[ seqNo ] );
}
/*---------------------------------------------------------------------------*
Name: NNS_SndArcGetSeqArcInfo
Description: <20>V<EFBFBD>[<5B>P<EFBFBD><50><EFBFBD>X<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD><75><EFBFBD><EFBFBD><EFBFBD>̎擾
Arguments: seqArcNo - <20>V<EFBFBD>[<5B>P<EFBFBD><50><EFBFBD>X<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>ԍ<EFBFBD>
Returns: <20>V<EFBFBD>[<5B>P<EFBFBD><50><EFBFBD>X<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD><75><EFBFBD><EFBFBD><EFBFBD>\<5C><><EFBFBD>̂̃|<7C>C<EFBFBD><43><EFBFBD>^
<20><><EFBFBD>s<EFBFBD><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>́ANULL
*---------------------------------------------------------------------------*/
const NNSSndArcSeqArcInfo* NNS_SndArcGetSeqArcInfo( int seqArcNo )
{
NNSSndArc* arc = sCurrent;
const NNSSndArcOffsetTable* table;
NNS_NULL_ASSERT( arc );
NNS_NULL_ASSERT( arc->info );
table = GetOffsetTable( arc->info, arc->info->seqArcOffset );
if ( table == NULL ) return NULL;
if ( seqArcNo < 0 ) return NULL;
if ( seqArcNo >= table->count ) return NULL;
return (const NNSSndArcSeqArcInfo*)GetPtrConst( arc->info, table->offset[ seqArcNo ] );
}
/*---------------------------------------------------------------------------*
Name: NNS_SndArcGetBankInfo
Description: <20>o<EFBFBD><6F><EFBFBD>N<EFBFBD><4E><EFBFBD><EFBFBD><EFBFBD>̎擾
Arguments: bankNo - <20>o<EFBFBD><6F><EFBFBD>N<EFBFBD>ԍ<EFBFBD>
Returns: <20>o<EFBFBD><6F><EFBFBD>N<EFBFBD><4E><EFBFBD><EFBFBD><EFBFBD>\<5C><><EFBFBD>̂̃|<7C>C<EFBFBD><43><EFBFBD>^
<20><><EFBFBD>s<EFBFBD><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>́ANULL
*---------------------------------------------------------------------------*/
const NNSSndArcBankInfo* NNS_SndArcGetBankInfo( int bankNo )
{
NNSSndArc* arc = sCurrent;
const NNSSndArcOffsetTable* table;
NNS_NULL_ASSERT( arc );
NNS_NULL_ASSERT( arc->info );
table = GetOffsetTable( arc->info, arc->info->bankOffset );
if ( table == NULL ) return NULL;
if ( bankNo < 0 ) return NULL;
if ( bankNo >= table->count ) return NULL;
return (const NNSSndArcBankInfo*)GetPtrConst( arc->info, table->offset[ bankNo ] );
}
/*---------------------------------------------------------------------------*
Name: NNS_SndArcGetWaveArcInfo
Description: <20>g<EFBFBD>`<60>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD><75><EFBFBD><EFBFBD><EFBFBD>̎擾
Arguments: waveArcNo - <20>g<EFBFBD>`<60>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>ԍ<EFBFBD>
Returns: <20>g<EFBFBD>`<60>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD><75><EFBFBD><EFBFBD><EFBFBD>\<5C><><EFBFBD>̂̃|<7C>C<EFBFBD><43><EFBFBD>^
<20><><EFBFBD>s<EFBFBD><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>́ANULL
*---------------------------------------------------------------------------*/
const NNSSndArcWaveArcInfo* NNS_SndArcGetWaveArcInfo( int waveArcNo )
{
NNSSndArc* arc = sCurrent;
const NNSSndArcOffsetTable* table;
NNS_NULL_ASSERT( arc );
NNS_NULL_ASSERT( arc->info );
table = GetOffsetTable( arc->info, arc->info->waveArcOffset );
if ( table == NULL ) return NULL;
if ( waveArcNo < 0 ) return NULL;
if ( waveArcNo >= table->count ) return NULL;
return (const NNSSndArcWaveArcInfo*)GetPtrConst( arc->info, table->offset[ waveArcNo ] );
}
/*---------------------------------------------------------------------------*
Name: NNS_SndArcGetStrmInfo
Description: <20>X<EFBFBD>g<EFBFBD><67><EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̎擾
Arguments: strmNo - <20>X<EFBFBD>g<EFBFBD><67><EFBFBD>[<5B><><EFBFBD>ԍ<EFBFBD>
Returns: <20>X<EFBFBD>g<EFBFBD><67><EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\<5C><><EFBFBD>̂̃|<7C>C<EFBFBD><43><EFBFBD>^
<20><><EFBFBD>s<EFBFBD><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>́ANULL
*---------------------------------------------------------------------------*/
const NNSSndArcStrmInfo* NNS_SndArcGetStrmInfo( int strmNo )
{
NNSSndArc* arc = sCurrent;
const NNSSndArcOffsetTable* table;
NNS_NULL_ASSERT( arc );
NNS_NULL_ASSERT( arc->info );
table = GetOffsetTable( arc->info, arc->info->strmOffset );
if ( table == NULL ) return NULL;
if ( strmNo < 0 ) return NULL;
if ( strmNo >= table->count ) return NULL;
return (const NNSSndArcStrmInfo*)GetPtrConst( arc->info, table->offset[ strmNo ] );
}
/*---------------------------------------------------------------------------*
Name: NNS_SndArcGetPlayerInfo
Description: <20>v<EFBFBD><76><EFBFBD>C<EFBFBD><43><EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD>̎擾
Arguments: playerNo - <20>v<EFBFBD><76><EFBFBD>C<EFBFBD><43><EFBFBD>[<5B>ԍ<EFBFBD>
Returns: <20>v<EFBFBD><76><EFBFBD>C<EFBFBD><43><EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD>\<5C><><EFBFBD>̂̃|<7C>C<EFBFBD><43><EFBFBD>^
<20><><EFBFBD>s<EFBFBD><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>́ANULL
*---------------------------------------------------------------------------*/
const NNSSndArcPlayerInfo* NNS_SndArcGetPlayerInfo( int playerNo )
{
NNSSndArc* arc = sCurrent;
const NNSSndArcOffsetTable* table;
NNS_NULL_ASSERT( arc );
NNS_NULL_ASSERT( arc->info );
table = GetOffsetTable( arc->info, arc->info->playerInfoOffset );
if ( table == NULL ) return NULL;
if ( playerNo < 0 ) return NULL;
if ( playerNo >= table->count ) return NULL;
return (const NNSSndArcPlayerInfo*)GetPtrConst( arc->info, table->offset[ playerNo ] );
}
/*---------------------------------------------------------------------------*
Name: NNS_SndArcGetStrmPlayerInfo
Description: <20>X<EFBFBD>g<EFBFBD><67><EFBFBD>[<5B><><EFBFBD>v<EFBFBD><76><EFBFBD>C<EFBFBD><43><EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD>̎擾
Arguments: playerNo - <20>v<EFBFBD><76><EFBFBD>C<EFBFBD><43><EFBFBD>[<5B>ԍ<EFBFBD>
Returns: <20>X<EFBFBD>g<EFBFBD><67><EFBFBD>[<5B><><EFBFBD>v<EFBFBD><76><EFBFBD>C<EFBFBD><43><EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD>\<5C><><EFBFBD>̂̃|<7C>C<EFBFBD><43><EFBFBD>^
<20><><EFBFBD>s<EFBFBD><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>́ANULL
*---------------------------------------------------------------------------*/
const NNSSndArcStrmPlayerInfo* NNS_SndArcGetStrmPlayerInfo( int playerNo )
{
NNSSndArc* arc = sCurrent;
const NNSSndArcOffsetTable* table;
NNS_NULL_ASSERT( arc );
NNS_NULL_ASSERT( arc->info );
table = GetOffsetTable( arc->info, arc->info->strmPlayerInfoOffset );
if ( table == NULL ) return NULL;
if ( playerNo < 0 ) return NULL;
if ( playerNo >= table->count ) return NULL;
return (const NNSSndArcStrmPlayerInfo*)GetPtrConst( arc->info, table->offset[ playerNo ] );
}
/*---------------------------------------------------------------------------*
Name: NNS_SndArcGetGroupInfo
Description: <20>O<EFBFBD><4F><EFBFBD>[<5B>v<EFBFBD><76><EFBFBD><EFBFBD><EFBFBD>̎擾
Arguments: groupNo - <20>O<EFBFBD><4F><EFBFBD>[<5B>v<EFBFBD>ԍ<EFBFBD>
Returns: <20>O<EFBFBD><4F><EFBFBD>[<5B>v<EFBFBD><76><EFBFBD><EFBFBD><EFBFBD>\<5C><><EFBFBD>̂̃|<7C>C<EFBFBD><43><EFBFBD>^
<20><><EFBFBD>s<EFBFBD><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>́ANULL
*---------------------------------------------------------------------------*/
const NNSSndArcGroupInfo* NNS_SndArcGetGroupInfo( int groupNo )
{
NNSSndArc* arc = sCurrent;
const NNSSndArcOffsetTable* table;
NNS_NULL_ASSERT( arc );
NNS_NULL_ASSERT( arc->info );
table = GetOffsetTable( arc->info, arc->info->groupInfoOffset );
if ( table == NULL ) return NULL;
if ( groupNo < 0 ) return NULL;
if ( groupNo >= table->count ) return NULL;
return (const NNSSndArcGroupInfo*)GetPtrConst( arc->info, table->offset[ groupNo ] );
}
/*---------------------------------------------------------------------------*
Name: NNS_SndArcGetSeqCount
Description: <20>V<EFBFBD>[<5B>P<EFBFBD><50><EFBFBD>X<EFBFBD>f<EFBFBD>[<5B>^<5E>̌<CC8C><C290>̎擾
Arguments: None.
Returns: <20>V<EFBFBD>[<5B>P<EFBFBD><50><EFBFBD>X<EFBFBD>f<EFBFBD>[<5B>^<5E>̌<CC8C>
*---------------------------------------------------------------------------*/
u32 NNS_SndArcGetSeqCount( void )
{
NNSSndArc* arc = sCurrent;
const NNSSndArcOffsetTable* table;
NNS_NULL_ASSERT( arc );
NNS_NULL_ASSERT( arc->info );
table = GetOffsetTable( arc->info, arc->info->seqOffset );
if ( table == NULL ) return 0;
return table->count ;
}
/*---------------------------------------------------------------------------*
Name: NNS_SndArcGetSeqArcCount
Description: <20>V<EFBFBD>[<5B>P<EFBFBD><50><EFBFBD>X<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>f<EFBFBD>[<5B>^<5E>̌<CC8C><C290>̎擾
Arguments: None.
Returns: <20>V<EFBFBD>[<5B>P<EFBFBD><50><EFBFBD>X<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>f<EFBFBD>[<5B>^<5E>̌<CC8C>
*---------------------------------------------------------------------------*/
u32 NNS_SndArcGetSeqArcCount( void )
{
NNSSndArc* arc = sCurrent;
const NNSSndArcOffsetTable* table;
NNS_NULL_ASSERT( arc );
NNS_NULL_ASSERT( arc->info );
table = GetOffsetTable( arc->info, arc->info->seqArcOffset );
if ( table == NULL ) return 0;
return table->count ;
}
/*---------------------------------------------------------------------------*
Name: NNS_SndArcGetBankCount
Description: <20>o<EFBFBD><6F><EFBFBD>N<EFBFBD>f<EFBFBD>[<5B>^<5E>̌<CC8C><C290>̎擾
Arguments: None.
Returns: <20>o<EFBFBD><6F><EFBFBD>N<EFBFBD>f<EFBFBD>[<5B>^<5E>̌<CC8C>
*---------------------------------------------------------------------------*/
u32 NNS_SndArcGetBankCount( void )
{
NNSSndArc* arc = sCurrent;
const NNSSndArcOffsetTable* table;
NNS_NULL_ASSERT( arc );
NNS_NULL_ASSERT( arc->info );
table = GetOffsetTable( arc->info, arc->info->bankOffset );
if ( table == NULL ) return 0;
return table->count ;
}
/*---------------------------------------------------------------------------*
Name: NNS_SndArcGetWaveArcCount
Description: <20>g<EFBFBD>`<60>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>f<EFBFBD>[<5B>^<5E>̌<CC8C><C290>̎擾
Arguments: None.
Returns: <20>g<EFBFBD>`<60>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>f<EFBFBD>[<5B>^<5E>̌<CC8C>
*---------------------------------------------------------------------------*/
u32 NNS_SndArcGetWaveArcCount( void )
{
NNSSndArc* arc = sCurrent;
const NNSSndArcOffsetTable* table;
NNS_NULL_ASSERT( arc );
NNS_NULL_ASSERT( arc->info );
table = GetOffsetTable( arc->info, arc->info->waveArcOffset );
if ( table == NULL ) return 0;
return table->count ;
}
/*---------------------------------------------------------------------------*
Name: NNS_SndArcGetStrmCount
Description: <20>X<EFBFBD>g<EFBFBD><67><EFBFBD>[<5B><><EFBFBD>f<EFBFBD>[<5B>^<5E>̌<CC8C><C290>̎擾
Arguments: None.
Returns: <20>X<EFBFBD>g<EFBFBD><67><EFBFBD>[<5B><><EFBFBD>f<EFBFBD>[<5B>^<5E>̌<CC8C>
*---------------------------------------------------------------------------*/
u32 NNS_SndArcGetStrmCount( void )
{
NNSSndArc* arc = sCurrent;
const NNSSndArcOffsetTable* table;
NNS_NULL_ASSERT( arc );
NNS_NULL_ASSERT( arc->info );
table = GetOffsetTable( arc->info, arc->info->strmOffset );
if ( table == NULL ) return 0;
return table->count ;
}
/*---------------------------------------------------------------------------*
Name: NNS_SndArcGetGroupCount
Description: <20>O<EFBFBD><4F><EFBFBD>[<5B>v<EFBFBD><76><EFBFBD><EFBFBD><EFBFBD>̌<CC8C><C290>̎擾
Arguments: None.
Returns: <20>O<EFBFBD><4F><EFBFBD>[<5B>v<EFBFBD><76><EFBFBD><EFBFBD><EFBFBD>̌<CC8C>
*---------------------------------------------------------------------------*/
u32 NNS_SndArcGetGroupCount( void )
{
NNSSndArc* arc = sCurrent;
const NNSSndArcOffsetTable* table;
NNS_NULL_ASSERT( arc );
NNS_NULL_ASSERT( arc->info );
table = GetOffsetTable( arc->info, arc->info->groupInfoOffset );
if ( table == NULL ) return 0;
return table->count ;
}
/*---------------------------------------------------------------------------*
Name: NNS_SndArcGetSeqArcSeqCount
Description: <20>V<EFBFBD>[<5B>P<EFBFBD><50><EFBFBD>X<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD><75><EFBFBD>̃V<CC83>[<5B>P<EFBFBD><50><EFBFBD>X<EFBFBD>̌<CC8C><C290>
Arguments: seqArcNo - <20>V<EFBFBD>[<5B>P<EFBFBD><50><EFBFBD>X<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>ԍ<EFBFBD>
Returns: <20>V<EFBFBD>[<5B>P<EFBFBD><50><EFBFBD>X<EFBFBD>̌<CC8C>
*---------------------------------------------------------------------------*/
u32 NNS_SndArcGetSeqArcSeqCount( int seqArcNo )
{
const NNSSndArcSeqArcInfo* info;
const NNSSndSeqArc* seqArc;
info = NNS_SndArcGetSeqArcInfo( seqArcNo );
if ( info == NULL ) return 0;
seqArc = (const NNSSndSeqArc*)NNS_SndArcGetFileAddress( info->fileId );
if ( seqArc == NULL ) return 0;
return NNSi_SndSeqArcGetSeqCount( seqArc );
}
/*---------------------------------------------------------------------------*
Name: NNS_SndArcGetFileOffset
Description: <20>t<EFBFBD>@<40>C<EFBFBD><43>ID<49><44><EFBFBD><EFBFBD><EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>I<EFBFBD>t<EFBFBD>Z<EFBFBD>b<EFBFBD>g<EFBFBD><67><EFBFBD>
Arguments: fileId - <20>t<EFBFBD>@<40>C<EFBFBD><43>ID
Returns: <20>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>I<EFBFBD>t<EFBFBD>Z<EFBFBD>b<EFBFBD>g
<20><><EFBFBD>s<EFBFBD><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>́A0
*---------------------------------------------------------------------------*/
u32 NNS_SndArcGetFileOffset( u32 fileId )
{
NNSSndArc* arc = sCurrent;
NNS_NULL_ASSERT( arc );
NNS_NULL_ASSERT( arc->fat );
if ( fileId >= arc->fat->count ) return 0;
return arc->fat->files[ fileId ].offset;
}
/*---------------------------------------------------------------------------*
Name: NNS_SndArcGetFileSize
Description: <20>t<EFBFBD>@<40>C<EFBFBD><43>ID<49><44><EFBFBD><EFBFBD><EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>T<EFBFBD>C<EFBFBD>Y<EFBFBD><59><EFBFBD>
Arguments: fileId - <20>t<EFBFBD>@<40>C<EFBFBD><43>ID
Returns: <20>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>T<EFBFBD>C<EFBFBD>Y
<20><><EFBFBD>s<EFBFBD><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>́A0
*---------------------------------------------------------------------------*/
u32 NNS_SndArcGetFileSize( u32 fileId )
{
NNSSndArc* arc = sCurrent;
NNS_NULL_ASSERT( arc );
NNS_NULL_ASSERT( arc->fat );
if ( fileId >= arc->fat->count ) return 0;
return arc->fat->files[ fileId ].size;
}
/* if include from Other Environment for exsample VC or BCB, */
/* please define NNS_FROM_TOOL */
#ifndef NNS_FROM_TOOL
/*---------------------------------------------------------------------------*
Name: NNS_SndArcReadFile
Description: <20>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɓǂݏo<DD8F><6F>
Arguments: fileId - <20>t<EFBFBD>@<40>C<EFBFBD><43>ID
buffer - <20><><EFBFBD>[<5B>h<EFBFBD><68><EFBFBD><EFBFBD><EFBFBD>o<EFBFBD>b<EFBFBD>t<EFBFBD>@<40>̐擪<CC90>A<EFBFBD>h<EFBFBD><68><EFBFBD>X
size - <20><><EFBFBD>[<5B>h<EFBFBD><68><EFBFBD><EFBFBD><EFBFBD>o<EFBFBD>b<EFBFBD>t<EFBFBD>@<40>̃T<CC83>C<EFBFBD>Y
offset - <20>ǂݏo<DD8F><6F><EFBFBD>I<EFBFBD>t<EFBFBD>Z<EFBFBD>b<EFBFBD>g
Returns: <20>ǂݍ<C782><DD8D>񂾃T<F182BE83>C<EFBFBD>Y
<20>@<40>@<40>@<40>@<40>@<40>@<40>@<40><><EFBFBD>s<EFBFBD><73><EFBFBD><EFBFBD><EFBFBD>Ƃ<EFBFBD><C682>́A-1
*---------------------------------------------------------------------------*/
s32 NNS_SndArcReadFile( u32 fileId, void* buffer, s32 size, s32 offset )
{
#ifndef SDK_SMALL_BUILD
NNSSndArc* arc = sCurrent;
const NNSSndArcFileInfo* file;
s32 totalReadSize;
s32 readSize;
s32 blockSize;
s32 currentOffset;
s32 requestSize;
u8* destAddress;
NNS_ASSERT( FS_IsAvailable() );
NNS_NULL_ASSERT( arc );
NNS_NULL_ASSERT( arc->fat );
NNS_NULL_ASSERT( buffer );
NNS_ASSERTMSG( arc->file_open, "Cannot use this function for the Sound Archive initialized by NNS_SndArcInitOnMemory\n" );
if ( fileId >= arc->fat->count ) return -1;
file = & arc->fat->files[ fileId ];
currentOffset = offset;
blockSize = arc->loadBlockSize;
if ( blockSize == 0 ) {
// <20>u<EFBFBD><75><EFBFBD>b<EFBFBD>N<EFBFBD>T<EFBFBD>C<EFBFBD>Y<EFBFBD><59><EFBFBD>O<EFBFBD>̎<EFBFBD><CC8E>́A<CD81><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[<5B>h<EFBFBD><68><EFBFBD>Ȃ<EFBFBD>
blockSize = size;
}
totalReadSize = 0;
destAddress = (u8*)buffer;
while( totalReadSize < size )
{
// <20><><EFBFBD>[<5B>h<EFBFBD>T<EFBFBD>C<EFBFBD>Y<EFBFBD>̌v<CC8C>Z
requestSize = size - totalReadSize;
if ( requestSize > blockSize ) requestSize = blockSize;
if ( requestSize > file->size - currentOffset ) {
requestSize = (s32)( file->size - currentOffset );
}
if ( requestSize == 0 ) {
// <20>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>T<EFBFBD>C<EFBFBD>Y<EFBFBD>𒴂<EFBFBD><F092B482>ēǂݍ<C782><DD8D><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƃ<EFBFBD><C682><EFBFBD>
break;
}
// <20>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>ǂݍ<C782><DD8D><EFBFBD>
if ( ! FS_SeekFile( & arc->file, (s32)( file->offset + currentOffset ), FS_SEEK_SET ) ) {
return -1;
}
readSize = FS_ReadFile( & arc->file, destAddress, requestSize );
if ( readSize < 0 ) return readSize;
// <20><><EFBFBD>ԍX<D48D>V
totalReadSize += readSize;
currentOffset += readSize;
destAddress += readSize;
}
return totalReadSize;
#else /* SDK_SMALL_BUILD */
#pragma unused( fileId, buffer, size, offset )
return -1;
#endif /* SDK_SMALL_BUILD */
}
/*---------------------------------------------------------------------------*
Name: NNS_SndArcGetFileID
Description: <20>T<EFBFBD>E<EFBFBD><45><EFBFBD>h<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>̃t<CC83>@<40>C<EFBFBD><43><EFBFBD>h<EFBFBD>c<EFBFBD>̎擾
Arguments: None.
Returns: <20>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>h<EFBFBD>c
*---------------------------------------------------------------------------*/
FSFileID NNS_SndArcGetFileID( void )
{
NNSSndArc* arc = sCurrent;
NNS_NULL_ASSERT( arc );
NNS_NULL_ASSERT( arc->fat );
NNS_ASSERTMSG( arc->file_open, "Cannot use this function for the Sound Archive initialized by NNS_SndArcInitOnMemory\n" );
return arc->fileId;
}
#endif // NNS_FROM_TOOL
/*---------------------------------------------------------------------------*
Name: NNS_SndArcGetFileAddress
Description: <20>L<EFBFBD><4C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>A<EFBFBD>h<EFBFBD><68><EFBFBD>X<EFBFBD><58><EFBFBD>
Arguments: fileId - <20>t<EFBFBD>@<40>C<EFBFBD><43>ID
Returns: <20>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>A<EFBFBD>h<EFBFBD><68><EFBFBD>X
*---------------------------------------------------------------------------*/
void* NNS_SndArcGetFileAddress( u32 fileId )
{
NNSSndArc* arc = sCurrent;
NNS_NULL_ASSERT( arc );
NNS_NULL_ASSERT( arc->fat );
if ( fileId >= arc->fat->count ) return NULL;
return arc->fat->files[ fileId ].mem;
}
/*---------------------------------------------------------------------------*
Name: NNS_SndArcSetFileAddress
Description: <20>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>A<EFBFBD>h<EFBFBD><68><EFBFBD>X<EFBFBD><58><EFBFBD>L<EFBFBD><4C>
Arguments: fileId - <20>t<EFBFBD>@<40>C<EFBFBD><43>ID
address - <20>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>A<EFBFBD>h<EFBFBD><68><EFBFBD>X
Returns: None.
*---------------------------------------------------------------------------*/
void NNS_SndArcSetFileAddress( u32 fileId, void* address )
{
NNSSndArc* arc = sCurrent;
NNS_NULL_ASSERT( arc );
NNS_NULL_ASSERT( arc->fat );
NNS_MAX_ASSERT( fileId, arc->fat->count - 1 );
arc->fat->files[ fileId ].mem = address;
}
/*---------------------------------------------------------------------------*
Name: NNS_SndArcGetLoadBlockSize
Description: <20><><EFBFBD>[<5B>h<EFBFBD>u<EFBFBD><75><EFBFBD>b<EFBFBD>N<EFBFBD>T<EFBFBD>C<EFBFBD>Y<EFBFBD><59><EFBFBD>
Arguments: None
Returns: <20><><EFBFBD>[<5B>h<EFBFBD>u<EFBFBD><75><EFBFBD>b<EFBFBD>N<EFBFBD>T<EFBFBD>C<EFBFBD>Y
*---------------------------------------------------------------------------*/
s32 NNS_SndArcGetLoadBlockSize()
{
NNSSndArc* arc = sCurrent;
NNS_NULL_ASSERT( arc );
return arc->loadBlockSize;
}
/*---------------------------------------------------------------------------*
Name: NNS_SndArcSetLoadBlockSize
Description: <20><><EFBFBD>[<5B>h<EFBFBD>u<EFBFBD><75><EFBFBD>b<EFBFBD>N<EFBFBD>T<EFBFBD>C<EFBFBD>Y<EFBFBD><59><EFBFBD>ݒ<EFBFBD>
Arguments: loadBlockSize - <20><><EFBFBD>[<5B>h<EFBFBD>u<EFBFBD><75><EFBFBD>b<EFBFBD>N<EFBFBD>T<EFBFBD>C<EFBFBD>Y
Returns: None.
*---------------------------------------------------------------------------*/
void NNS_SndArcSetLoadBlockSize( s32 loadBlockSize )
{
NNSSndArc* arc = sCurrent;
NNS_NULL_ASSERT( arc );
arc->loadBlockSize = loadBlockSize;
}
/*---------------------------------------------------------------------------*
Name: NNS_SndArcGetSeqSymbol
Description: <20>V<EFBFBD>[<5B>P<EFBFBD><50><EFBFBD>X<EFBFBD>V<EFBFBD><56><EFBFBD>{<7B><><EFBFBD>̎擾
Arguments: seqNo - <20>V<EFBFBD>[<5B>P<EFBFBD><50><EFBFBD>X<EFBFBD>ԍ<EFBFBD>
Returns: <20>V<EFBFBD>[<5B>P<EFBFBD><50><EFBFBD>X<EFBFBD>V<EFBFBD><56><EFBFBD>{<7B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<20><><EFBFBD>s<EFBFBD><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>́A<CD81>󕶎<EFBFBD><F395B68E><EFBFBD>
*---------------------------------------------------------------------------*/
const char* NNS_SndArcGetSeqSymbol( int seqNo )
{
NNSSndArc* arc = sCurrent;
const NNSSndArcOffsetTable* table;
NNS_NULL_ASSERT( arc );
if ( arc->symbol == NULL ) return & null_string;
table = (const NNSSndArcOffsetTable*)GetPtrConst( arc->symbol, arc->symbol->seqOffset );
if ( table == NULL ) return & null_string;
return GetSymbol( table, seqNo, arc->symbol );
}
/*---------------------------------------------------------------------------*
Name: NNS_SndArcGetSeqArcSymbol
Description: <20>V<EFBFBD>[<5B>P<EFBFBD><50><EFBFBD>X<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>V<EFBFBD><56><EFBFBD>{<7B><><EFBFBD>̎擾
Arguments: seqArcNo - <20>V<EFBFBD>[<5B>P<EFBFBD><50><EFBFBD>X<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>ԍ<EFBFBD>
Returns: <20>V<EFBFBD>[<5B>P<EFBFBD><50><EFBFBD>X<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>V<EFBFBD><56><EFBFBD>{<7B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<20><><EFBFBD>s<EFBFBD><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>́A<CD81>󕶎<EFBFBD><F395B68E><EFBFBD>
*---------------------------------------------------------------------------*/
const char* NNS_SndArcGetSeqArcSymbol( int seqArcNo )
{
NNSSndArc* arc = sCurrent;
const NNSSndArcSeqArcOffsetTable* table;
NNS_NULL_ASSERT( arc );
if ( arc->symbol == NULL ) return & null_string;
table = (const NNSSndArcSeqArcOffsetTable*)GetPtrConst( arc->symbol, arc->symbol->seqArcOffset );
if ( table == NULL ) return & null_string;
if ( seqArcNo < 0 ) return & null_string;
if ( seqArcNo >= table->count ) return & null_string;
if ( table->offset[ seqArcNo ].symbol == 0 ) return & null_string;
return (const char*)GetPtrConst( arc->symbol, table->offset[ seqArcNo ].symbol );
}
/*---------------------------------------------------------------------------*
Name: NNS_SndArcGetSeqArcIdxSymbol
Description: <20>V<EFBFBD>[<5B>P<EFBFBD><50><EFBFBD>X<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>C<EFBFBD><43><EFBFBD>f<EFBFBD>b<EFBFBD>N<EFBFBD>X<EFBFBD>V<EFBFBD><56><EFBFBD>{<7B><><EFBFBD>̎擾
Arguments: seqArcNo - <20>V<EFBFBD>[<5B>P<EFBFBD><50><EFBFBD>X<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>ԍ<EFBFBD>
index - <20>C<EFBFBD><43><EFBFBD>f<EFBFBD>b<EFBFBD>N<EFBFBD>X<EFBFBD>ԍ<EFBFBD>
Returns: <20>V<EFBFBD>[<5B>P<EFBFBD><50><EFBFBD>X<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>C<EFBFBD><43><EFBFBD>f<EFBFBD>b<EFBFBD>N<EFBFBD>X<EFBFBD>V<EFBFBD><56><EFBFBD>{<7B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<20><><EFBFBD>s<EFBFBD><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>́A<CD81>󕶎<EFBFBD><F395B68E><EFBFBD>
*---------------------------------------------------------------------------*/
const char* NNS_SndArcGetSeqArcIdxSymbol( int seqArcNo, int index )
{
NNSSndArc* arc = sCurrent;
const NNSSndArcSeqArcOffsetTable* table;
const NNSSndArcOffsetTable* symbolTable;
NNS_NULL_ASSERT( arc );
if ( arc->symbol == NULL ) return & null_string;
table = (const NNSSndArcSeqArcOffsetTable*)GetPtrConst( arc->symbol, arc->symbol->seqArcOffset );
if ( table == NULL ) return & null_string;
if ( seqArcNo < 0 ) return & null_string;
if ( seqArcNo >= table->count ) return & null_string;
symbolTable = (const NNSSndArcOffsetTable*)GetPtrConst( arc->symbol, table->offset[ seqArcNo ].table );
if ( symbolTable == NULL ) return & null_string;
return GetSymbol( symbolTable, index, arc->symbol );
}
/*---------------------------------------------------------------------------*
Name: NNS_SndArcGetBankSymbol
Description: <20>o<EFBFBD><6F><EFBFBD>N<EFBFBD>V<EFBFBD><56><EFBFBD>{<7B><><EFBFBD>̎擾
Arguments: bankNo - <20>o<EFBFBD><6F><EFBFBD>N<EFBFBD>ԍ<EFBFBD>
Returns: <20>o<EFBFBD><6F><EFBFBD>N<EFBFBD>V<EFBFBD><56><EFBFBD>{<7B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<20><><EFBFBD>s<EFBFBD><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>́A<CD81>󕶎<EFBFBD><F395B68E><EFBFBD>
*---------------------------------------------------------------------------*/
const char* NNS_SndArcGetBankSymbol( int bankNo )
{
NNSSndArc* arc = sCurrent;
const NNSSndArcOffsetTable* table;
NNS_NULL_ASSERT( arc );
if ( arc->symbol == NULL ) return & null_string;
table = (const NNSSndArcOffsetTable*)GetPtrConst( arc->symbol, arc->symbol->bankOffset );
if ( table == NULL ) return & null_string;
return GetSymbol( table, bankNo, arc->symbol );
}
/*---------------------------------------------------------------------------*
Name: NNS_SndArcGetWaveArcSymbol
Description: <20>g<EFBFBD>`<60>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>V<EFBFBD><56><EFBFBD>{<7B><><EFBFBD>̎擾
Arguments: waveArcNo - <20>g<EFBFBD>`<60>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>ԍ<EFBFBD>
Returns: <20>g<EFBFBD>`<60>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>V<EFBFBD><56><EFBFBD>{<7B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<20><><EFBFBD>s<EFBFBD><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>́A<CD81>󕶎<EFBFBD><F395B68E><EFBFBD>
*---------------------------------------------------------------------------*/
const char* NNS_SndArcGetWaveArcSymbol( int waveArcNo )
{
NNSSndArc* arc = sCurrent;
const NNSSndArcOffsetTable* table;
NNS_NULL_ASSERT( arc );
if ( arc->symbol == NULL ) return & null_string;
table = (const NNSSndArcOffsetTable*)GetPtrConst( arc->symbol, arc->symbol->waveArcOffset );
if ( table == NULL ) return & null_string;
return GetSymbol( table, waveArcNo, arc->symbol );
}
/*---------------------------------------------------------------------------*
Name: NNS_SndArcGetStrmSymbol
Description: <20>X<EFBFBD>g<EFBFBD><67><EFBFBD>[<5B><><EFBFBD>V<EFBFBD><56><EFBFBD>{<7B><><EFBFBD>̎擾
Arguments: strmNo - <20>X<EFBFBD>g<EFBFBD><67><EFBFBD>[<5B><><EFBFBD>ԍ<EFBFBD>
Returns: <20>X<EFBFBD>g<EFBFBD><67><EFBFBD>[<5B><><EFBFBD>V<EFBFBD><56><EFBFBD>{<7B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<20><><EFBFBD>s<EFBFBD><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>́A<CD81>󕶎<EFBFBD><F395B68E><EFBFBD>
*---------------------------------------------------------------------------*/
const char* NNS_SndArcGetStrmSymbol( int strmNo )
{
NNSSndArc* arc = sCurrent;
const NNSSndArcOffsetTable* table;
NNS_NULL_ASSERT( arc );
if ( arc->symbol == NULL ) return & null_string;
table = (const NNSSndArcOffsetTable*)GetPtrConst( arc->symbol, arc->symbol->strmOffset );
if ( table == NULL ) return & null_string;
return GetSymbol( table, strmNo, arc->symbol );
}
/*---------------------------------------------------------------------------*
Name: NNS_SndArcGetGroupSymbol
Description: <20>O<EFBFBD><4F><EFBFBD>[<5B>v<EFBFBD>V<EFBFBD><56><EFBFBD>{<7B><><EFBFBD>̎擾
Arguments: groupNo - <20>O<EFBFBD><4F><EFBFBD>[<5B>v<EFBFBD>ԍ<EFBFBD>
Returns: <20>g<EFBFBD>`<60>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>V<EFBFBD><56><EFBFBD>{<7B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<20><><EFBFBD>s<EFBFBD><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>́A<CD81>󕶎<EFBFBD><F395B68E><EFBFBD>
*---------------------------------------------------------------------------*/
const char* NNS_SndArcGetGroupSymbol( int groupNo )
{
NNSSndArc* arc = sCurrent;
const NNSSndArcOffsetTable* table;
NNS_NULL_ASSERT( arc );
if ( arc->symbol == NULL ) return & null_string;
table = (const NNSSndArcOffsetTable*)GetPtrConst( arc->symbol, arc->symbol->groupOffset );
if ( table == NULL ) return & null_string;
return GetSymbol( table, groupNo, arc->symbol );
}
/******************************************************************************
static functions
******************************************************************************/
/*---------------------------------------------------------------------------*
Name: GetSymbol
Description: <20>V<EFBFBD><56><EFBFBD>{<7B><><EFBFBD>I<EFBFBD>t<EFBFBD>Z<EFBFBD>b<EFBFBD>g<EFBFBD>e<EFBFBD>[<5B>u<EFBFBD><75><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>V<EFBFBD><56><EFBFBD>{<7B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E693BE><EFBFBD>܂<EFBFBD>
Arguments: table - <20>V<EFBFBD><56><EFBFBD>{<7B><><EFBFBD>I<EFBFBD>t<EFBFBD>Z<EFBFBD>b<EFBFBD>g<EFBFBD>e<EFBFBD>[<5B>u<EFBFBD><75><EFBFBD>̃|<7C>C<EFBFBD><43><EFBFBD>^
index - <20>C<EFBFBD><43><EFBFBD>f<EFBFBD>b<EFBFBD>N<EFBFBD>X<EFBFBD>ԍ<EFBFBD>
base - <20>I<EFBFBD>t<EFBFBD>Z<EFBFBD>b<EFBFBD>g<EFBFBD>x<EFBFBD>[<5B>X<EFBFBD>A<EFBFBD>h<EFBFBD><68><EFBFBD>X
Returns: <20>V<EFBFBD><56><EFBFBD>{<7B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<20><><EFBFBD>s<EFBFBD><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>́A<CD81>󕶎<EFBFBD><F395B68E><EFBFBD>
*---------------------------------------------------------------------------*/
static const char* GetSymbol( const NNSSndArcOffsetTable* table, int index, const void* base )
{
if ( index < 0 ) return & null_string;
if ( index >= table->count ) return & null_string;
if ( table->offset[ index ] == 0 ) return & null_string;
return (const char*)GetPtrConst( base, table->offset[ index ] );
}
/*---------------------------------------------------------------------------*
Name: InfoDisposeCallback
Description: <20>T<EFBFBD>E<EFBFBD><45><EFBFBD>h<EFBFBD><68><EFBFBD><EFBFBD><EFBFBD>e<EFBFBD>[<5B>u<EFBFBD><75><EFBFBD>j<EFBFBD><6A><EFBFBD><EFBFBD><EFBFBD>ɌĂ΂<C482><CE82><EFBFBD><EFBFBD>R<EFBFBD>[<5B><><EFBFBD>o<EFBFBD>b<EFBFBD>N<EFBFBD>֐<EFBFBD>
Arguments: mem - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>u<EFBFBD><75><EFBFBD>b<EFBFBD>N<EFBFBD>̐擪<CC90>A<EFBFBD>h<EFBFBD><68><EFBFBD>X<EFBFBD>i<EFBFBD><69><EFBFBD>g<EFBFBD>p<EFBFBD>j
size - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>u<EFBFBD><75><EFBFBD>b<EFBFBD>N<EFBFBD>̃T<CC83>C<EFBFBD>Y<EFBFBD>i<EFBFBD><69><EFBFBD>g<EFBFBD>p<EFBFBD>j
data1 - <20><><EFBFBD>[<5B>U<EFBFBD>[<5B>f<EFBFBD>[<5B>^<5E>i<EFBFBD>T<EFBFBD>E<EFBFBD><45><EFBFBD>h<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>̃|<7C>C<EFBFBD><43><EFBFBD>^<5E>j
data2 - <20><><EFBFBD>[<5B>U<EFBFBD>[<5B>f<EFBFBD>[<5B>^<5E>i<EFBFBD><69><EFBFBD>g<EFBFBD>p<EFBFBD>j
Returns: None.
*---------------------------------------------------------------------------*/
static void InfoDisposeCallback( void* mem, u32 size, u32 data1, u32 data2 )
{
NNSSndArc* arc = (NNSSndArc*)data1;
(void)mem;
(void)size;
(void)data2;
NNS_NULL_ASSERT( arc );
arc->info = NULL;
}
/*---------------------------------------------------------------------------*
Name: FatDisposeCallback
Description: <20>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>A<EFBFBD><41><EFBFBD>P<EFBFBD>[<5B>V<EFBFBD><56><EFBFBD><EFBFBD><EFBFBD>e<EFBFBD>[<5B>u<EFBFBD><75><EFBFBD>j<EFBFBD><6A><EFBFBD><EFBFBD><EFBFBD>ɌĂ΂<C482><CE82><EFBFBD><EFBFBD>R<EFBFBD>[<5B><><EFBFBD>o<EFBFBD>b<EFBFBD>N<EFBFBD>֐<EFBFBD>
Arguments: mem - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>u<EFBFBD><75><EFBFBD>b<EFBFBD>N<EFBFBD>̐擪<CC90>A<EFBFBD>h<EFBFBD><68><EFBFBD>X<EFBFBD>i<EFBFBD><69><EFBFBD>g<EFBFBD>p<EFBFBD>j
size - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>u<EFBFBD><75><EFBFBD>b<EFBFBD>N<EFBFBD>̃T<CC83>C<EFBFBD>Y<EFBFBD>i<EFBFBD><69><EFBFBD>g<EFBFBD>p<EFBFBD>j
data1 - <20><><EFBFBD>[<5B>U<EFBFBD>[<5B>f<EFBFBD>[<5B>^<5E>i<EFBFBD>T<EFBFBD>E<EFBFBD><45><EFBFBD>h<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>̃|<7C>C<EFBFBD><43><EFBFBD>^<5E>j
data2 - <20><><EFBFBD>[<5B>U<EFBFBD>[<5B>f<EFBFBD>[<5B>^<5E>i<EFBFBD><69><EFBFBD>g<EFBFBD>p<EFBFBD>j
Returns: None.
*---------------------------------------------------------------------------*/
static void FatDisposeCallback( void* mem, u32 size, u32 data1, u32 data2 )
{
NNSSndArc* arc = (NNSSndArc*)data1;
int i;
(void)mem;
(void)size;
(void)data2;
NNS_NULL_ASSERT( arc );
NNS_NULL_ASSERT( arc->fat );
for( i = 0; i < arc->fat->count ; i++ ) {
#ifndef NNS_FROM_TOOL
NNS_ASSERTMSG(
arc->fat->files[ i ].mem == NULL,
"Cannot clear sndarc FAT block, because some file is on memory."
);
#endif // NNS_FROM_TOOL
}
arc->fat = NULL;
}
/*---------------------------------------------------------------------------*
Name: SymbolDisposeCallback
Description: <20>V<EFBFBD><56><EFBFBD>{<7B><><EFBFBD>f<EFBFBD>[<5B>^<5E>j<EFBFBD><6A><EFBFBD><EFBFBD><EFBFBD>ɌĂ΂<C482><CE82><EFBFBD><EFBFBD>R<EFBFBD>[<5B><><EFBFBD>o<EFBFBD>b<EFBFBD>N<EFBFBD>֐<EFBFBD>
Arguments: mem - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>u<EFBFBD><75><EFBFBD>b<EFBFBD>N<EFBFBD>̐擪<CC90>A<EFBFBD>h<EFBFBD><68><EFBFBD>X<EFBFBD>i<EFBFBD><69><EFBFBD>g<EFBFBD>p<EFBFBD>j
size - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>u<EFBFBD><75><EFBFBD>b<EFBFBD>N<EFBFBD>̃T<CC83>C<EFBFBD>Y<EFBFBD>i<EFBFBD><69><EFBFBD>g<EFBFBD>p<EFBFBD>j
data1 - <20><><EFBFBD>[<5B>U<EFBFBD>[<5B>f<EFBFBD>[<5B>^<5E>i<EFBFBD>T<EFBFBD>E<EFBFBD><45><EFBFBD>h<EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD>̃|<7C>C<EFBFBD><43><EFBFBD>^<5E>j
data2 - <20><><EFBFBD>[<5B>U<EFBFBD>[<5B>f<EFBFBD>[<5B>^<5E>i<EFBFBD><69><EFBFBD>g<EFBFBD>p<EFBFBD>j
Returns: None.
*---------------------------------------------------------------------------*/
static void SymbolDisposeCallback( void* mem, u32 size, u32 data1, u32 data2 )
{
NNSSndArc* arc = (NNSSndArc*)data1;
(void)mem;
(void)size;
(void)data2;
NNS_NULL_ASSERT( arc );
arc->symbol = NULL;
}
/*====== End of sndarc.c ======*/