Shinobiライブラリ - メモリーカード関数

buSaveFile

ファイルのセーブ

書式

Sint32 buSaveFile( drive, *fname, *buf, nblock, *time, flag )
Sint32 drive
const char *fname
const void *buf
Uint32 nblock
const BUS_TIME *time
Sint32 flag

引数

drive拡張ソケットの番号
*fnameファイル名
*buf読み込みアドレス
nblock読み込むブロック数
*timeタイムスタンプ
flagフラグ
BUD_FLAG_VERIFY:ベリファイあり
BUD_FLAG_COPY(n):コピーフラグ(nはコピーフラグ値)

戻値

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には必ず 4バイトバウンダリでアドレスを与えるようにしてください。


用例

Sint32 ret;
Sint32 blocks, flag;
BUS_TIME time;
SYS_RTC_DATE rtc;
extern char SaveData[];                      /* セーブするデータ(512*10バイト) */
	:
blocks = 10;                                  /* ファイルサイズは10ブロック */
flag = BUD_FLAG_VERIFY | BUD_FLAG_COPY(0x00); /* ベリファイを行う | コピーフラグを00Hに設定する */
syRtcGetDate( &rtc );
time = ( BUS_TIME )rtc;  /* タイムスタンプの設定 */
ret = buSaveFile(BUD_DRIVE_A1, "SAVEDATA", SaveData, blocks, &time, flag);
if (ret == BUD_ERR_OK) {
	/* セーブリクエストに成功した */
} else {
	/* セーブリクエストに失敗した(BUSY) */
}
	:

備考

ベリファイエラーが発生した場合でも、ファイルはセーブされています。

buStat()関数によるこの関数の完了ステータスは

BUD_ERR_OK正常終了
BUD_ERR_NO_DISKメモリカードがない
BUD_ERR_UNFORMATフォーマットされていない
BUD_ERR_FILE_NOT_FOUNDファイルがない
BUD_ERR_CANNOT_OPENファイルが開けない

セーブには、(セーブブロック数×5 Int)の時間を必要とします。 (他の拡張ソケットの状態等によっては、多少時間は変動します。)


buSaveFile
COPYRIGHT © SEGA ENTERPRISES, LTD., 1998