/*
	Ninja Library
	
	COPYRIGHT (C) SEGA ENTERPRISES,LTD.

	Create 2000.03.01

*/
#include <Ninja.h>
#include <Njutil.h>
#include <sg_gd.h>

/********************************************************************************/
/*	モード関数																	*/
/********************************************************************************/
Sint32 nuLoadTextureReqLN(NJS_TEXLIST *texlist,Uint32 n);
Sint32 nuLoadTextureReqStart(void);
Sint32 nuLoadTextureReqFileOpen(void);
Sint32 nuLoadTextureReqFileRead(void);
Sint32 nuLoadTextureReqFileReadWait(void);
Sint32 nuLoadTextureReqFileHeader(void);
Sint32 nuLoadTextureReqMemoryHeader(void);
Sint32 nuLoadTextureReqGetSurface(void);
Sint32 nuLoadTextureReqLoad(void);
Sint32 nuLoadTextureReqLoadWaitDma(void);


/********************************************************************************/
/*	ロード元、ロード先															*/
/********************************************************************************/
#define FILE_TYPE		(0)
#define MEMORY_TYPE		(1)
/********************************************************************************/
/*	ロード先																	*/
/********************************************************************************/

/********************************************************************************/
/*	TEXTUREDMA待ち回数																	*/
/********************************************************************************/
#define DMA_WAIT_ERR_COUNT	10

/********************************************************************************/
/*	FILE待ち回数																	*/
/********************************************************************************/
#define FILE_WAIT_ERR_COUNT	1000

/********************************************************************************/
/*	ファイル名の長さ															*/
/********************************************************************************/
#define FILE_NAME_NUM		(32)


#define LOOP_TRUE			1
#define LOOP_FALSE			0
/********************************************************************************/
/*	マクロ																		*/
/********************************************************************************/
#define NEXT_MODE(mode)	_nu_loadtexreq_mode_ = (mode)


#define ERR_MODE(err)		{\
							loop_mode = loop_false;\
							_nu_loadtexreq_mode_ = NUD_TEX_MODE_OPEN;\
							/*********** エラーコードを返す ************/\
							/********* Turn over error code ************/\
							_nj_texerr_.n = (load_n);\
							_nj_texerr_.texerr = (err);\
							}

#define FREAD_ERR			{\
								_nj_texerr_.gdstat = gdFsGetStat(tex_loadreq_fp);\
								_nj_texerr_.gderr = gdFsGetErrStat(tex_loadreq_fp);\
							}\

#define ERR_CLOSE			{\
							/* 取得していたサーフェスのリリース　*/\
							/* Release of the SurfaceDesc which acquired it. */\
							njReleaseTextureManageNum(load_texmng_no);\
							load_list->textures[load_n].attr &= ~NJD_TEXATTR_REGISTRATION;\
							load_list->textures[load_n].texaddr = 0;\
							/* ファイルのクローズ　*/\
							/* Closing of a file. */\
							if(load_src == FILE_TYPE){\
								gdFsClose(tex_loadreq_fp);\
							}\
							}

/********************************************************************************/
/*	型定義																		*/
/********************************************************************************/
typedef Sint32 (*TEXFUNC)(void);


/********************************************************************************/
/*	変数定義																	*/
/********************************************************************************/
Int _nu_loadtexreq_mode_;
Uint32 _nu_loadtexreq_i_;
static Int loop_mode = LOOP_TRUE;	/* 続いて関数を実行するかのフラグ */
static Int loop_true = LOOP_TRUE;	/* このフラグをLOOP_FALSEにすると1関数づつ実行される */
static Int loop_false = LOOP_FALSE;
static GDFS tex_loadreq_fp;
static Int load_src = FILE_TYPE;
static Int load_dst = MEMORY_TYPE;
static NJS_TEXLIST *load_list = NULL;
static NJS_TEXNAME *load_texname = NULL;
static Uint32 load_n = 0;
static Sint32 load_texmng_no = 0;
static Uint32 load_globalIndex = NJD_GLOBAXINDEX_FIRST_VAL;
static Uint32 load_bank = NJD_GLOBAXINDEX_FIRST_VAL;
static NJS_PVRHEADERDATA pvrh;


static Sint32 file_sect_size;	/* ファイルのセクタサイズ */
static Sint32 buffer_sect_size;	/* バッファのセクタサイズ */
static Sint32 r_sect_size;		/* 残りのセクタサイズ */
static Sint32 file_offset=0;	/* ファイルの先頭からのオフセット */
static Sint32 read_size;		/* リードしたバイト数 */
static Sint8 *read_start;		/* スタートアドレス */
static Sint32 dma_count;		/* DMAループ回数 */
static Sint32 file_count;		/* FILEWAITループ回数 */
static Sint8 *texbuf;			/* テクスチャバッファアドレス */
static Int texbuf_size;			/* テクスチャバッファサイズ */


TEXFUNC func;


static TEXFUNC FuncTable[] = 
{
	NULL,
	nuLoadTextureReqStart,
	nuLoadTextureReqFileOpen,
	nuLoadTextureReqFileRead,
	nuLoadTextureReqFileReadWait,
	nuLoadTextureReqFileHeader,
	nuLoadTextureReqMemoryHeader,
	nuLoadTextureReqGetSurface,
	nuLoadTextureReqLoad,
	nuLoadTextureReqLoadWaitDma,
};

/****************************************************************/
/*  関数名：nuLoadTextureReq						  		    */
/*  機  能：即時復帰のテクスチャロード							*/
/*  入  力：NJS_TEXLIST *texlist								*/
/*  出  力：なし                                                */
/*  戻り値：正常終了　１　継続　０　エラー　−１				*/
/*  概　要：                                                    */
/*  備　考：		                                            */
/*                                                              */
/****************************************************************/
Sint32 nuLoadTextureReq(NJS_TEXLIST *texlist)
{
	static Sint32 Mode;
	
	Mode = nuLoadTextureReqLN(texlist,_nu_loadtexreq_i_);
	switch(Mode){
	case NUD_TEX_STAT_ERR:
		_nu_loadtexreq_i_ = 0;
		return NUD_TEX_STAT_ERR;
	case NUD_TEX_STAT_END:
		if(_nu_loadtexreq_i_ < (texlist->nbTexture - 1)){
			_nu_loadtexreq_i_++;
			return NUD_TEX_STAT_READ;
		}
		else{
			_nu_loadtexreq_i_ = 0;
			return NUD_TEX_STAT_END;
		}
	case NUD_TEX_STAT_READ:
		return NUD_TEX_STAT_READ;
	}

}

/****************************************************************/
/*  関数名：nuLoadTextureReqLN						  		    */
/*  機  能：即時復帰のテクスチャロード							*/
/*  入  力：NJS_TEXLIST *texlist								*/
/*          Uint32 n                                            */
/*  出  力：なし                                                */
/*  戻り値：正常終了　１　継続　０　エラー　−１				*/
/*  概　要：                                                    */
/*  備　考：内部関数                                            */
/*                                                              */
/****************************************************************/
Sint32 nuLoadTextureReqLN(NJS_TEXLIST *texlist,Uint32 n)
{
	Sint32 ret;
	
	if(_nu_loadtexreq_mode_ == NUD_TEX_MODE_OPEN){
		/* エラーの初期化　*/
		njInitTextureErrStat();
		load_list = texlist;
		load_texname = &texlist->textures[n];
		load_n = n;
		loop_true = LOOP_TRUE;
//		loop_true = LOOP_FALSE;
		NEXT_MODE(NUD_TEX_MODE_START);
	}

	do{
		func = FuncTable[_nu_loadtexreq_mode_];
		ret = func();
	}while(loop_mode != LOOP_FALSE);
	
	return ret;

}

/****************************************************************/
/*  関数名：nuLoadTextureReqStart					  		    */
/*  機  能：ATTRのチェック										*/
/*  入  力：なし												*/
/*  出  力：なし                                                */
/*  戻り値：NJD_TEXATTR_TEXCONTINUEの場合	NUD_TEX_STAT_END	*/
/*			その他							NUD_TEX_STAT_READ	*/
/*  概　要：NJD_TEXATTR_TEXCONTINUE,NJD_TEXATTR_GLOBALINDEX,	*/
/*			NJD_TEXATTR_PALGLOBALINDEXをみて結果を反映させる	*/
/*			その後、ファイルテクスチャかメモリテクスチャかを	*/
/*			判断する											*/
/*  備　考：内部関数                                            */
/*                                                              */
/****************************************************************/
Sint32 nuLoadTextureReqStart(void)
{
	Sint32 ret;
	/*
		njCheckAttrGlobalIndex関数について
		
		NJD_TEXATTR_GLOBALINDEXの場合
			・load_globalIndexにtexname.texaddrに設定されている
			グローバルインデックスが設定される
			・load_bankにはNJD_BANK_FIRST_VALが設定される
		
		NJD_TEXATTR_PALGLOBALINDEXの場合
			・load_globalIndexにtexname.texaddrの下位26ビットが
			グローバルインデックスとして設定される
			・load_bankにはtexname.texaddr上位6ビットがバンクとして設定される
		
		NJD_TEXATTR_TEXCONTINUEの場合
			・load_listのload_n-1に同じテクスチャをロードしているというフラグなので
			load_n−1の情報をコピーしバンクを変更して終了する。
			使用するバンクは、texname.texaddr上位6ビットに設定されているバンクを使用する
	
	*/
	ret = njCheckAttrGlobalIndex(load_list,load_n,&load_globalIndex,&load_bank);
	if(ret == 1){
		/* NJD_TEXATTR_TEXCONTINUEの場合 */
		loop_mode = LOOP_FALSE;
		NEXT_MODE(NUD_TEX_MODE_OPEN);
		return NUD_TEX_STAT_END;
	}
	else{
		if(ret == -1){
			ERR_MODE(NJD_TEXERR_MAINMEMORY)
			return NUD_TEX_STAT_ERR;
		}
	}

	if(load_texname->attr & NJD_TEXATTR_TYPE_MEMORY){
		/* テクスチャがメモリからの場合　*/
		load_src = MEMORY_TYPE;
		loop_mode = LOOP_TRUE;
		NEXT_MODE(NUD_TEX_MODE_MEMORYHEADER);
	}
	else{
		/* テクスチャがファイルからの場合　*/
		load_src = FILE_TYPE;
		loop_mode = LOOP_TRUE;
		NEXT_MODE(NUD_TEX_MODE_FILEOPEN);
	}
	
	return NUD_TEX_STAT_READ;
}

/****************************************************************/
/*  関数名：nuLoadTextureReqFileOpen				  		    */
/*  機  能：ファイルのオープン									*/
/*  入  力：なし												*/
/*  出  力：なし                                                */
/*  戻り値：ファイルオープンエラー			NUD_TEX_STAT_ERR	*/
/*			正常							NUD_TEX_STAT_READ	*/
/*  概　要：ファイルをオープンしてサイズを計算する              */
/*  備　考：内部関数                                            */
/*                                                              */
/****************************************************************/
Sint32 nuLoadTextureReqFileOpen(void)
{

	Sint8 filename2[FILE_NAME_NUM];

	/* ロードファイル名の取得　*/
	/* .PVRが付いているか確認　*/
	njCheckFileName(filename2,load_texname->filename,".PVR");
	if((tex_loadreq_fp = gdFsOpen(filename2,NULL)) != NULL){
		/* ファイルのセクタサイズの計算 */
		gdFsGetFileSctSize(tex_loadreq_fp,&file_sect_size);
		/* テクスチャバッファ情報の取得 */
		nuGetTextureBuffer(&texbuf,&texbuf_size);
		/* ファイルバッファのセクタサイズの計算 */
		buffer_sect_size = texbuf_size/NJD_GD_SECT_SIZE;
		/* 残りのセクタサイズ */
		r_sect_size = file_sect_size;
		file_offset = 0;
		/* 次のモード設定 */
		NEXT_MODE(NUD_TEX_MODE_FILEREAD);
	}
	else{
		/* ファイルがオープンができない場合 */
		/*********** エラーコードを返す ************/
		ERR_MODE(NJD_TEXERR_FILEOPEN)
		return NUD_TEX_STAT_ERR;
	}
	
	loop_mode = loop_true;
	return NUD_TEX_STAT_READ;
}


/****************************************************************/
/*  関数名：nuLoadTextureReqFileRead				  		    */
/*  機  能：ファイルのリード（即時復帰）						*/
/*  入  力：なし												*/
/*  出  力：なし                                                */
/*  戻り値：ファイルリードエラー			NUD_TEX_STAT_ERR	*/
/*			正常							NUD_TEX_STAT_READ	*/
/*  概　要：サイズを計算し、ファイルをリードする	            */
/*  備　考：内部関数                                            */
/*                                                              */
/****************************************************************/
Sint32 nuLoadTextureReqFileRead(void)
{
	Sint32 read_sect;

	/* リードするセクタを計算する */
	if(buffer_sect_size >= r_sect_size){
		/* バッファの方が大きい場合　*/
		read_sect = r_sect_size;
	}
	else{
		/* バッファの方が小さい場合　*/
		read_sect = buffer_sect_size;
	}
	
	/* 即時復帰リード　*/
	read_start = texbuf;
	if(gdFsReqRd32(tex_loadreq_fp,read_sect,read_start) < 0){
		FREAD_ERR
		gdFsClose(tex_loadreq_fp);
		/*********** エラーコードを返す ************/
		/********* Turn over error code ************/
		ERR_MODE(NJD_TEXERR_FILELOAD)
		return NUD_TEX_STAT_ERR;
	}

	r_sect_size -= read_sect;
	read_size = read_sect*NJD_GD_SECT_SIZE;
	NEXT_MODE(NUD_TEX_MODE_FILEREADWAIT);
	loop_mode = loop_true;
	file_count = 0;

	return NUD_TEX_STAT_READ;

}

/****************************************************************/
/*  関数名：nuLoadTextureReqFileReadWait			  		    */
/*  機  能：ファイルのリードウエイト							*/
/*  入  力：なし												*/
/*  出  力：なし                                                */
/*  戻り値：ファイル状態エラー				NUD_TEX_STAT_ERR	*/
/*			正常							NUD_TEX_STAT_READ	*/
/*  概　要：リードが終了するか確認する。終了しない場合は終了する*/
/*			まで実行する。エラーの場合は終了する				*/
/*  備　考：内部関数                                            */
/*                                                              */
/****************************************************************/
Sint32 nuLoadTextureReqFileReadWait(void)
{

	switch(gdFsGetStat(tex_loadreq_fp)){
	case GDD_STAT_COMPLETE:
		if(file_offset == 0){
			NEXT_MODE(NUD_TEX_MODE_FILEHEADER);
		}
		else{
			NEXT_MODE(NUD_TEX_MODE_LOAD);
		}
		loop_mode = loop_true;
		break;
	case GDD_STAT_READ:
	case GDD_STAT_IDLE:
	case GDD_STAT_SEEK:
	case GDD_STAT_BUSY:
		file_count++;
		if(file_count > FILE_WAIT_ERR_COUNT){
			FREAD_ERR
			gdFsClose(tex_loadreq_fp);
			/*********** エラーコードを返す ************/
			ERR_MODE(NJD_TEXERR_FILELOAD)
			return NUD_TEX_STAT_ERR;
		}
		else{
			NEXT_MODE(NUD_TEX_MODE_FILEREADWAIT);
		}
		loop_mode = loop_false;
		break;
	case GDD_STAT_ERR:
		/* エラーの場合 */
		FREAD_ERR
		gdFsClose(tex_loadreq_fp);
		/*********** エラーコードを返す ************/
		ERR_MODE(NJD_TEXERR_FILELOAD)
		return NUD_TEX_STAT_ERR;
		break;
	}
	
	return NUD_TEX_STAT_READ;
}


/****************************************************************/
/*  関数名：nuLoadTextureReqFileHeader				  		    */
/*  機  能：ファイルのヘッダ情報を取得する						*/
/*  入  力：なし												*/
/*  出  力：なし                                                */
/*  戻り値：ファイルヘッダがない			NUD_TEX_STAT_ERR	*/
/*			正常							NUD_TEX_STAT_READ	*/
/*  概　要：ヘッダ情報を取得する								*/
/*  備　考：内部関数                                            */
/*                                                              */
/****************************************************************/
Sint32 nuLoadTextureReqFileHeader(void)
{
	Sint8 *pTexture;
	Uint32 global;

	/* ヘッダデータを取得する pTextureにはデータの先頭アドレスが返る　*/
	if((pTexture = njLoadPvrHeader(&pvrh,&global,read_start)) != NULL){
		/* リードサイズの修正 */
		read_size -= (Sint32)((Uint32)pTexture - (Uint32)read_start);
		read_start = pTexture;
		/*
			nuLoadTextureReqStart関数でグローバルインデックスが
			設定されている場合は、そちらを使用する
		*/
		if(load_globalIndex == NJD_GLOBAXINDEX_FIRST_VAL){
			/* グローバルインデックスがない場合はファイル内の
				グローバルインデックスを使用する
			*/
			if(global == NJD_GLOBAXINDEX_FIRST_VAL){
				/* ファイル内にもない場合には、ユーザグローバルインデックスから
				グローバルインデックスを付ける　*/
				load_globalIndex = (_nj_user_globalIndex--);
			}
			else{
				load_globalIndex = global;
			}
		}
	}
	else{
		/* ファイル内にヘッダ情報がない場合はエラー*/
		gdFsClose(tex_loadreq_fp);
		/*********** エラーコードを返す ************/
		ERR_MODE(NJD_TEXERR_HEADER)
		return NUD_TEX_STAT_ERR;
	}

	NEXT_MODE(NUD_TEX_MODE_GETSURFACE);
	loop_mode = loop_true;
	return NUD_TEX_STAT_READ;
}

/****************************************************************/
/*  関数名：nuLoadTextureReqMemoryHeader			  		    */
/*  機  能：メモリのヘッダ情報取得								*/
/*  入  力：なし												*/
/*  出  力：なし                                                */
/*  戻り値：正常							NUD_TEX_STAT_READ	*/
/*  概　要：リードが終了するか確認する。終了しない場合は終了する*/
/*			まで実行する。エラーの場合は終了する				*/
/*  備　考：内部関数                                            */
/*                                                              */
/****************************************************************/
Sint32 nuLoadTextureReqMemoryHeader(void)
{
	Sint8 *pTexture;
	NJS_TEXINFO *info;
	Uint32 global;

	/* filenameにメモリテクスチャが設定されているかリードしてみる */
	read_start = njLoadPvrHeader(&pvrh,&global,load_texname->filename);
	if(read_start == NULL){
		/* filenameになかった場合は、Ninja1までと同じ設定になっているはず */
		read_start = njLoadPvrHeader(&pvrh,&global,((NJS_TEXINFO*)load_texname->filename)->texaddr);
		if(read_start == NULL){
			/* これでもヘッダが確認できなかった場合は、ヘッダ情報はないとみなす */
			info = (NJS_TEXINFO*)load_texname->filename;
			pvrh.nWidth = info->texsurface.nWidth;
			pvrh.nHeight = info->texsurface.nHeight;
			pvrh.nTextureType = info->texsurface.Type;
			read_start = ((NJS_TEXINFO*)load_texname->filename)->texaddr;
		}
	}

	if(load_globalIndex == NJD_GLOBAXINDEX_FIRST_VAL){
		/* グローバルインデックスがない場合　*/
		if(global == NJD_GLOBAXINDEX_FIRST_VAL){
			/* グローバルインデックスを付ける　*/
			load_globalIndex = (_nj_user_globalIndex--);
		}
		else{
			load_globalIndex = global;
		}
	}
	
	/* 各変数に値を設定する */
	file_offset = 0;
	r_sect_size = 0;
	read_size = njCalcTextureSize2(&pvrh);

	NEXT_MODE(NUD_TEX_MODE_GETSURFACE);
	loop_mode = loop_true;

	return NUD_TEX_STAT_READ;
}


/****************************************************************/
/*  関数名：nuLoadTextureReqGetSurface				  		    */
/*  機  能：サーフェスの取得									*/
/*  入  力：なし												*/
/*  出  力：なし                                                */
/*  戻り値：サーフェス、TEXMNG、TEXSYSに空きがない場合			*/
/*											NUD_TEX_STAT_ERR	*/
/*			正常							NUD_TEX_STAT_READ	*/
/*  概　要：サーフェスを取得し、テクスチャマネージメント構造体に*/
/*			設定する											*/
/*  備　考：内部関数                                            */
/*                                                              */
/****************************************************************/
Sint32 nuLoadTextureReqGetSurface(void)
{
	Sint32 ret;
	
	ret = njEntryTextureManageNum(load_list,load_n,load_globalIndex,load_bank,&pvrh,&load_texmng_no);

	switch(ret){
	case 1:
		if(load_src == FILE_TYPE){
			gdFsClose(tex_loadreq_fp);
		}
		NEXT_MODE(NUD_TEX_MODE_OPEN);
		loop_mode = loop_false;
		return NUD_TEX_STAT_END;
		break;
	case 0:
		NEXT_MODE(NUD_TEX_MODE_LOAD);
		loop_mode = loop_true;
		return NUD_TEX_STAT_READ;
		break;
	case -1:
		/* 空きがない場合はエラーで終了 */
		if(load_src == FILE_TYPE){
			gdFsClose(tex_loadreq_fp);
		}
		/*********** エラーコードを返す ************/
		ERR_MODE(NJD_TEXERR_HEADER)
		return NUD_TEX_STAT_ERR;
		break;
	}

}

/****************************************************************/
/*  関数名：nuLoadTextureReqLoad					  		    */
/*  機  能：テクスチャメモリへのロード（即時復帰）				*/
/*  入  力：なし												*/
/*  出  力：なし                                                */
/*  戻り値：ロードエラー					NUD_TEX_STAT_ERR	*/
/*			正常							NUD_TEX_STAT_READ	*/
/*  概　要：													*/
/*  備　考：内部関数                                            */
/*                                                              */
/****************************************************************/
Sint32 nuLoadTextureReqLoad(void)
{
	Sint32 ret;
	
	if((ret = njLoadTexturePart(&_nj_texmanage[load_texmng_no].texsys->texsurface,read_start,file_offset,read_size)) == -1){
		/* テクスチャロードエラー　*/
		ERR_CLOSE
		/*********** エラーコードを返す ************/
		ERR_MODE(NJD_TEXERR_TEXMEMLOAD)
		return NUD_TEX_STAT_ERR;
	}

	file_offset += read_size;
	dma_count = 0;
	NEXT_MODE(NUD_TEX_MODE_LOADWAITDMA);
	loop_mode = loop_true;
	
	return NUD_TEX_STAT_READ;
}


/****************************************************************/
/*  関数名：nuLoadTextureReqLoadWaitDma				  		    */
/*  機  能：ロードの終了を確認									*/
/*  入  力：なし												*/
/*  出  力：なし                                                */
/*  戻り値：DMA_WAIT_ERR_COUNT回数以上しても終了しないとき		*/
/*											NUD_TEX_STAT_ERR	*/
/*			全部ロードしてないとき			NUD_TEX_STAT_READ	*/
/*			全部ロードしたとき				NUD_TEX_STAT_END	*/
/*  概　要：													*/
/*  備　考：内部関数                                            */
/*                                                              */
/****************************************************************/
Sint32 nuLoadTextureReqLoadWaitDma(void)
{
	/* DMAが終了したかの確認　*/
	loop_mode = loop_false;
	if(njLoadTextureFinishDMA()==1){
		dma_count = 0;
		if(r_sect_size <= 0){
			/* すべてのロードが終了　*/
			if(load_src == FILE_TYPE){
				gdFsClose(tex_loadreq_fp);
			}
			NEXT_MODE(NUD_TEX_MODE_OPEN);

			return NUD_TEX_STAT_END;
		}
		else{
			/* 残りがあるので次のリードへ　*/
			NEXT_MODE(NUD_TEX_MODE_FILEREAD);

			return NUD_TEX_STAT_READ;
		}
	}
	else{
		dma_count++;
		if(dma_count > DMA_WAIT_ERR_COUNT){
			/* DMA_WAIT_ERR_COUNT(10)回数来てもロードが完了しない場合はエラーとする*/
			ERR_CLOSE
			/*********** エラーコードを返す ************/
			ERR_MODE(NJD_TEXERR_OTHER)
			return NUD_TEX_STAT_ERR;
		}
		return NUD_TEX_STAT_READ;
	}

}

/****************************************************************/
/*  関数名：nuGetLoadTextureReqMode					  		    */
/*  機  能：現在のモードの取得									*/
/*  入  力：なし												*/
/*  出  力：なし                                                */
/*  戻り値：現在のモード										*/
/*  概　要：エラーのあとこの関数を使用してもだめです。エラーの	*/
/*			場所は特定できません								*/
/*  備　考：			                                        */
/*                                                              */
/****************************************************************/
Sint32 nuGetLoadTextureReqMode(void)
{
	return _nu_loadtexreq_mode_;
}

/****************************************************************/
/*  関数名：nuLoadTextureReqStop					  		    */
/*  機  能：即時復帰ロード関数の中止							*/
/*  入  力：なし												*/
/*  出  力：なし                                                */
/*  戻り値：成功　1 失敗　−１									*/
/*  概　要：													*/
/*  備　考：			                                        */
/*                                                              */
/****************************************************************/
Sint32 nuLoadTextureReqStop(void)
{
	Sint32 ret;
	
	njInitTextureErrStat();

	_nu_loadtexreq_i_ = 0;
	if(_nu_loadtexreq_mode_ == NUD_TEX_MODE_LOADWAITDMA){
		_nu_loadtexreq_mode_ = NUD_TEX_MODE_OPEN;
		ret = gdFsStopRd(tex_loadreq_fp);
		gdFsClose(tex_loadreq_fp);
		if(ret != GDD_ERR_OK){
			_nj_texerr_.n = load_n;
			_nj_texerr_.gderr = ret;
			_nj_texerr_.texerr = NJD_TEXERR_OTHER;
			NEXT_MODE(NUD_TEX_MODE_OPEN);
			return -1;
		}
	}

	_nu_loadtexreq_mode_ = NUD_TEX_MODE_OPEN;
	NEXT_MODE(NUD_TEX_MODE_OPEN);

	return 1;
	
}
