##### 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_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

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

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

  BUD_FLAG_VERIFY | ベリファイあり
  BUD_FLAG_COPY(n) | コピーフラグ(nはコピーフラグ値)

### 用例

      Sint32 ret;
      Sint32 blocks, flag;
      BUS_TIME time;
      SYS_RTC_DATE rtc;
      /* セーブするデータ(512*10バイト) */
      extern char SaveData[];

      /* ファイルサイズは10ブロック */
      blocks = 10;

      /* ベリファイを行う | コピーフラグをFFHに設定する */
      flag = BUD_FLAG_VERIFY | BUD_FLAG_COPY(0xff);

      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;
      } else {
      	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,1999