##### Shinobi Library - ペリフェラル・記録デバイス関数

# buLoadFileEx

ファイルのロード(開始ブロック指定)

### 書式

> `Sint32 buLoadFileEx(drive, fname, buf, start, nblock)
> Sint32 drive
> const char *fname
> void *buf
> Uint32 start
> Uint32 nblock
> `

### 引数

> drive | 拡張ソケットの番号
> fname | ファイル名
> buf | 書き出しアドレス(4バイト境界)
> start | 読み込み開始ブロック
> nblock | 読み込むブロック数

### 戻り値

> BUD_ERR_OK | 処理要求を受けつけた
> BUD_ERR_BUSY | 処理中のため要求を受けつけられなかった

### 解説

> ファイルをロードします。

> 部分的に読み込むことが可能です。

> 拡張ソケットの番号driveには次の値が指定できます。

> 定義 | 意味
> BUD_DRIVE_A1 | ポートAの拡張ソケット1
> BUD_DRIVE_A2 | ポートAの拡張ソケット2
> BUD_DRIVE_B1 | ポートBの拡張ソケット1
> BUD_DRIVE_B2 | ポートBの拡張ソケット2
> BUD_DRIVE_C1 | ポートCの拡張ソケット1
> BUD_DRIVE_C2 | ポートCの拡張ソケット2
> BUD_DRIVE_D1 | ポートDの拡張ソケット1
> BUD_DRIVE_D2 | ポートDの拡張ソケット2

> 読み込み開始ブロックに0を指定するとファイルの先頭からロードします。 読み込むブロック数に0を指定するとファイル全体をロードします。

### 用例

>     Sint32 ret;
>     Sint32 blocks;
>     Sint32 start_block;

>     /* Load buffer */
>     extern char LoadBuffer[];

>     /* Partial file load */
>     start_block = 0;
>     blocks = 1;
>     ret = buLoadFileEx(BUD_DRIVE_A1, "SAVEDATA_001",
>     	LoadBuffer, start_block, blocks);
>     if (ret != BUD_ERR_OK)
>     	return NG;
>     while (buStat(BUD_DRIVE_A1) == BUD_STAT_BUSY) {
>     	:
>     }
>     if (buGetLastError(BUD_DRIVE_A1) != BUD_ERR_OK){
>     	return NG;
>     } else {
>     	return OK;
>     }

### 備考

> buStat関数によるこの関数の完了ステータスは以下のとおりです。

> ステータス | 意味
> BUD_ERR_OK | 正常終了
> BUD_ERR_NO_DISK | メモリーカードがない
> BUD_ERR_UNFORMAT | フォーマットされていない
> BUD_ERR_FILE_NOT_FOUND | ファイルがない
> BUD_ERR_CANNOT_OPEN | ファイルが開けない
> BUD_ERR_FILE_BROKEN | ファイルが壊れている

> ロードには、大体、(ロードブロック数×1 Int)かかります(他のドライブの状態等によっては多少時間は変動します)。

> また 書き出しアドレスbufには必ず、4バイト境界でアドレスを与えるようにしてください。

buLoadFileEx

COPYRIGHT © SEGA ENTERPRISES, LTD., 1998-2000