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

buSaveExecFile

実行ファイルのセーブ

書式

Sint32 buSaveExecFile( drive, *fname, *buf, nblock, *time, flag )
Sint32 drive
const char *fname
const void *buf
Uint32 nblock
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

通常のアプリケーションであればこの関数でファイルを丸ごとセーブします。 実行ファイルが存在する場合、および同名ファイルが存在する場合はエラーとなります。


用例

  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(0xff); /* ベリファイを行う | コピーフラグをFFHに設定する */
  syRtcGetDate( &rtc );
  time = ( BUS_TIME )rtc;  /* タイムスタンプの設定 */
  ret = buSaveExecFile(BUD_DRIVE_A1, "SAVEDATA", SaveData, blocks, &time, flag);
  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;
  return OK;

備考

ベリファイエラーが発生した場合でも、ファイルはセーブされています。 buStat()関数によるこの関数の完了ステータスは

BUD_ERR_OK正常終了
BUD_ERR_UNFORMATフォーマットされていない
BUD_ERR_NO_DISKメモリーカードがない
BUD_ERR_DISK_FULL実行ファイルはすでに存在する
BUD_ERR_FILE_EXIST同名ファイルが存在する
セーブには、(セーブブロック数×5 Int)かかります。(他のドライブの状態等によっては、多少時間は変動します。) また bufには必ず、4バイト境界でアドレスを与えるようにしてください。


buSaveExecFile
COPYRIGHT © SEGA ENTERPRISES, LTD., 1998