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

buSaveFile

ファイルのセーブ

書式

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

引数

drive   拡張ソケットの番号
fname   ファイル名
buf   読み込みアドレス
nblock   読み込むブロック数
time   タイムスタンプ
flag   フラグ

戻り値

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

フラグflagにはファイルの属性を指定します。

 定義   意味 
 BUD_FLAG_VERIFY   ベリファイあり 
 BUD_FLAG_COPY(n)   コピーフラグ(nはコピーフラグ値) 


用例

Sint32 ret;
Sint32 blocks, flag;
BUS_TIME time;
SYS_RTC_DATE rtc;

/* Data to be saved (512*10 bytes) */
extern char SaveData[];
	:
/* File size is 10 blocks */
blocks = 10;

/* Verify enabled | Set copy flag to 00H */
flag = BUD_FLAG_VERIFY | BUD_FLAG_COPY(0x00);
syRtcGetDate( &rtc );

/* Time stamp setting */
time = ( BUS_TIME )rtc;
ret = buSaveFile(BUD_DRIVE_A1, "SAVEDATA",
	SaveData, blocks, &time, flag);
if (ret == BUD_ERR_OK) {
	/* Save request was successful */
} else {
	/* Save request failed (busy) */
}
	:

備考

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

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

 定義   意味 
 BUD_ERR_OK   正常終了 
 BUD_ERR_NO_DISK   メモリーカードがない 
 BUD_ERR_UNFORMAT   フォーマットされていない 
 BUD_ERR_DISK_FULL   メモリーカードに空きがない 
 BUD_ERR_EXECFILE_EXIST   同名の実行ファイルが存在する 
 BUD_ERR_CANNOT_CREATE   ファイルが作成できない 
 BUD_ERR_VERIFY   ベリファイエラー 

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


buSaveFile
COPYRIGHT © SEGA ENTERPRISES, LTD., 1998-2000