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

# buLoadFile

ファイルのロード

### 書式

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

### 引数

> drive | 拡張ソケットの番号
> fname | ファイル名
> buf | 書き出しアドレス(4バイト境界)
> 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

> 書き出しアドレスbufは、即時復帰なので関数終了後では不定です。

> 通常のアプリケーションであればこの関数でファイル全体をロードします。 ファイル全体をロードするには、読み込むブロック数nblockに0を指定します。

### 用例

>     Sint32 ret;
>     Sint32 blocks;

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

>     /* Get file size */
>     blocks = buGetFileSize(BUD_DRIVE_A1, "SAVEDATA");

>     if (blocks <= 0)
>     	return NG;
>     ret = buLoadFile(BUD_DRIVE_A1, "SAVEDATA", SaveData, blocks);
>     if (ret == BUD_ERR_OK) {
>     	/* Load request was successful */
>     } else {
>     	/* Load request failed (busy) */
>     }

### 備考

> buStat()関数を使って処理が完了したかどうかを調べたあと、buGetLastError()関数で取得するこの関数の完了ステータスは以下のとおりです。

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

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

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

### 参照

> buStat() | 処理の終了の検知
> buGetLastError() | 最後に発生したエラーを戻す

buLoadFile

COPYRIGHT © SEGA ENTERPRISES, LTD., 1998-2000