# Shinobi Library

1998/10/18

# ファイルシステム関数

## 0. 概要

> GD-ROM のアクセス機能を提供します。
> - ディレクトリのアクセス
> - ファイルのオープン/クローズ
> - ファイルの読み込み(完了復帰)

## 1. データ仕様

### 1.1 定数

  gdFsSeekのモード

  名称 | 機能
  --- | ---
  GDD_SEEK_SET | ファイルの先頭
  GDD_SEEK_CUR | ファイルの現在の読み込み位置
  GDD_SEEK_END | ファイルの最後

  再生ステータス

  名称 | 機能
  --- | ---
  GDD_STAT_IDLE | アイドル
  GDD_STAT_COMPLETE | 動作完了
  GDD_STAT_READ | 読み込み中
  GDD_STAT_ERR | エラー発生
  GDD_STAT_FATAL | 致命的なエラーが発生

  ドライブステータス

  名称 | 機能
  --- | ---
  GDD_DRVSTAT_BUSY | 稼働中
  GDD_DRVSTAT_PAUSE | ポーズ状態
  GDD_DRVSTAT_STANDBY | スタンバイ状態
  GDD_DRVSTAT_SEEK | シーク中
  GDD_DRVSTAT_PLAY | 再生中
  GDD_DRVSTAT_SCAN | スキャン再生中
  GDD_DRVSTAT_OPEN | トレイが開いている
  GDD_DRVSTAT_NODISC | ディスクがない
  GDD_DRVSTAT_RETRY | リトライ
  GDD_DRVSTAT_ERROR | エラー

  エラーステータス

  名称 | 機能
  --- | ---
  GDD_ERR_OK | 正常終了
  GDD_ERR_INIT | ライブラリ初期化に失敗しました
  GDD_ERR_RESET | ドライブの初期化に失敗しました
  GDD_ERR_LIBOV | オーバーレイの初期化に失敗しました
  GDD_ERR_MOUNT | マウントできませんでした
  GDD_ERR_DISC | 不正なディスクを使用しました
  GDD_ERR_DIRREC | 不正なディレクトリレコードハンドルを使用しました
  GDD_ERR_CANTOPEN | ファイルがオープンできませんでした
  GDD_ERR_NOTFOUND | ファイルが見つかりませんでした
  GDD_ERR_NOHNDL | 未使用のハンドルが見つかりませんでした
  GDD_ERR_ILLHNDL | 不正なハンドルを使用しました
  GDD_ERR_NOTDIR | ディレクトリではありません
  GDD_ERR_DIROVER | 格納できるエントリー数を超えました
  GDD_ERR_BUSY | 実行中です
  GDD_ERR_32ALIGN | 32バイト境界からはずれています
  GDD_ERR_SIZE | 32バイト単位ではありません
  GDD_ERR_SEEK | シークの指定が不正です
  GDD_ERR_OFS | 指定された位置が不正です
  GDD_ERR_ILLTMODE | 転送モードが正しくありません
  GDD_ERR_READ | 読み込みに失敗しました
  GDD_ERR_NOTREAD | 読み込み中ではありません
  GDD_ERR_TOUT | タイムアウトしました
  GDD_ERR_EOF | ファイルの終端に達しました
  GDD_ERR_TRAYOPEND | トレイがオープンされています
  GDD_ERR_SIZEOVER | 要求サイズが大きすぎます
  GDD_ERR_FATAL | 致命的なエラーが発生しました
  GDD_ERR_UNDEF | 未定義なエラーです
  GDD_ERR_NOERR | エラーはありませんでした
  GDD_ERR_RECOVER | エラーが発生しましたが復帰しました
  GDD_ERR_NOTREADY | ドライブの準備ができていません
  GDD_ERR_MEDIA | メディアエラー
  GDD_ERR_HWARE | ハードウエアエラー
  GDD_ERR_ILLREQ | 不正なリクエストを発行しました
  GDD_ERR_UNITATTENT | 媒体の交換を検出しました
  GDD_ERR_PROTECT | プロテクトされています
  GDD_ERR_ABORT | 中断されました
  GDD_ERR_NOREADABLE | 読み込みできません
  GDD_ERR_CHECKBUSY | メディアのチェック中です

  転送ステータス

  GDD_FS_TRANS_READY | 転送可能
  GDD_FS_TRANS_BUSY | 転送中
  GDD_FS_TRANS_COMPLETE | 転送完了
  GDD_FS_TRANS_ERROR | 転送エラー

  ファイルフラグ

  Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0
  --- | --- | --- | --- | --- | --- | --- | ---
  Multi Extent | **** | **** | Protection | Record | Associated | Directory | Existence

### 1.2 データ型

GDFS
  ファイルハンドル

GDFS_DIRREC
  ディレクトリレコードハンドル

GDFS_DIRINFO
  ディレクトリ情報

  型 | 名称 | 機能
  --- | --- | ---
  Sint32 | fad | 先頭FAD
  Sint32 | fsize | ファイルサイズ
  Uint8 | flag | ファイルフラグ
  Uint8 | pad[3] | 予約

GDFS_FUNC
  コールバック関数

  型 | 名称 | 機能
  --- | --- | ---
  void * | obj | コールバック関数に渡される第一引数

GDFS_ERRFUNC
  エラーコールバック関数

  型 | 名称 | 機能
  --- | --- | ---
  void * | obj | コールバック関数に渡される第一引数
  Sint32 | errcode | エラーコード

GDFS_DAINFO
  ディレクトリ情報

  型 | 名称 | 機能
  --- | --- | ---
  Sint32 | track | トラック番号
  Sint32 | min | 経過時間(分)
  Sint32 | sec | 経過時間(秒)
  Sint32 | frame | 経過時間(フレーム)
  Sint32 | fad | フレームアドレス

### 1.3 マクロ

## gdFsGetWorkSize

［SYNOPSIS］
  gdFsGetWorkSize(max_open)
［ARGUMENTS］
  max_open
  同時にオープンできるファイル数
［RETURN］
  必要なライブラリワークエリアのバイト数
［DESCRIPTION］
  ライブラリのワークエリアの必要とするバイト数を求めます
［EXAMPLES］
  Uint32 gdfswork[gdFsGetWorkSize(8)/4];

## gdFsGetDirrecSize

［SYNOPSIS］
  gdFsGetDirrecSize(max_dirent)
［ARGUMENTS］
  max_dirent
  ディレクトリの最大エントリ数
［RETURN］
  必要なディレクトリバッファのバイト数
［DESCRIPTION］
  ディレクトリバッファのバイト数を求めます
［EXAMPLES］
  Uint32 gdfscurdir[gdFsGetDirrecSize(64)/4];

## gdFsCalcSctSize

［SYNOPSIS］
  gdFsCalcSctSize(bytes)
［ARGUMENTS］
  bytes
  ファイルのバイトサイズ
［RETURN］
  セクタサイズ
［DESCRIPTION］
  バイト数からセクタ数を算出します
［EXAMPLES］

    	GDFS gf;
    	Sint32 flen;
    	Sint32 fslen;

    	gf = gdFsOpen("TEST.BIN", NULL);
    	gdFsGetFileSize(gdfs, &flen);
    	fslen = gdFsCalcSctSize(flen);

## 2. 関数仕様

### 2.1関数一覧

関数 | 機能
--- | ---
gdFsInit | GDFSの初期化
gdFsReinit | ファイルシステムの再マウント
gdFsFinish | ファイルシステムの終了
gdFsCreateDirhn | ディレクトリハンドルの生成
gdFsLoadDir | ディレクトリの読み取り
gdFsSetDir | カレントディレクトリを設定
gdFsChangeDir | カレントディレクトリの変更
gdFsGetDirInfo | ファイルの情報を取得
gdFsOpen | ファイルのオープン
gdFsOpenRange | ファイルのセクタ指定オープン
gdFsClose | ファイルのクローズ
gdFsSeek | ファイルの読み出し位置変更
gdFsTell | ファイルの次の読み出し位置を取得
gdFsCheckEof | ファイルがEOFに到達したかを調べる
gdFsGetFileSize | ファイルサイズの取得
gdFsGetFileSctSize | ファイルのセクタサイズ取得
gdFsGetFad | ファイルのFADを取得
gdFsRead | ファイルの読み込み
gdFsReqRd32 | ファイルの読み込み
gdFsGetStat | ファイルの状態取得
gdFsGetErrStat | ファイルのエラー状態取得
gdFsGetNumRd | ファイルの読み込み済みサイズの取得
gdFsStopRd | ファイルの読み込み中断
gdFsMovePickup | ピックアップ (読取装置) の移動
gdFsReqGdRd | GDバッファへの先読みのリクエスト発行
gdFsTrans32 | GDバッファからの転送指定
gdFsGetWorkHn | 現在実行中のハンドルの取得
gdFsGetSysHn＜新規＞ | システムハンドルの取得
gdFsGetTransStat | 転送状態を取得
gdFsGetToc | TOCの取得
gdFsGetDrvStat | ドライブの状態の取得
gdFsReqDrvStat＜新規＞ | ドライブ状態の更新
gdFsEntryRdEndFunc | 読み込み終了時のコールバック関数を登録
gdFsEntryTrEndFunc | 転送終了時のコールバック関数を登録
gdFsEntryErrFunc | エラー発生時のコールバック関数を登録
gdFsEntryErrFuncAll＜新規＞ | 全ハンドルに対するエラー発生時のコールバック関数を登録
gdFsDaPlay | DAのトラック再生
gdFsDaPlaySct | DAのセクタ指定再生
gdFsDaStop | DAの再生停止
gdFsDaPause | DAの再生の一時停止
gdFsDaRelease | DAの再生の一時停止解除
gdFsDaGetInfo＜新規＞ | DAの再生情報を取得

### 2.2関数API

## gdFsInit

［関数］
  Sint32 gdFsInit(Sint32 max_open, void *gdfs_work, Sint32 max_dirent, void *dirbuf)
［入力］

max_open
  同時にオープンできるファイル数
gdfs_work
  ワークエリアのポインタ（ユーザー領域から提供）
max_dirent
  カレントディレクトリのエントリ数
dirbuf
  カレントディレクトリのバッファ（ユーザー領域から提供）

［出力］
  なし
［戻値］
  この関数で返される主なエラーコードは以下の通りです。

  返される値 | 意味
  --- | ---
  GDD_ERR_OK | 初期化完了
  GDD_ERR_32ALIGN | gdfs_workが32バイト境界にない
  GDD_ERR_RESET | ドライブのリセットに失敗した
  GDD_ERR_TRAYOPEND | GDトレイが空いている
  GDD_ERR_DISC | このディスクは扱えません
  GDD_ERR_MOUNT | マウントに失敗した
  GDD_ERR_DIROVER | ルートディレクトリのエントリー数が多すぎるエラーステータス

［機能］
  GDファイルシステムを初期化します。
［使用例］

      Uint32 gdfswork[gdFsGetWorkSize(8)/4];
      Uint32 gdfscurdir[gdFsGetDirrecSize(64)/4];

      gdFsInit(8, gdfswork, 64, gdfscurdir);

［注意］
  gdfs_workは32 Byte alignでなければなりません。(dirbuf は 4 Byte align で結構です。)
  一度初期化が完了した後、gdFsFinish関数を呼び出さずにgdFsInit関数を呼び出しても再初期化されません。
  gdFsInit関数で処理される主な内容は、以下のとおりです。
  1. デバイスドライバの初期化
  2. ワークエリアの初期化
  3. デバイスの初期化
  4. マウント処理

## gdFsReinit

［関数］
  Sint32 gdFsReinit(void)
［入力］
  なし
［出力］
  なし
［戻値］
  エラーコード
［機能］
  GDファイルシステムの再マウントをします。
  デバイスの初期化からマウント処理までを行います。
  メディアの交換時などに使用してください。
［使用例］

      gdFsReinit();

［注意］

## gdFsFinish

［関数］
  gdFsFinish(void)
［入力］
  なし
［出力］
  なし
［戻値］
  なし
［機能］
  GDファイルシステムの使用を停止します
［使用例］

      Uint32 gdfswork[gdFsGetWorkSize(8)/4];
      Uint32 gdfscurdir[gdFsGetDirrecSize(64)/4];

      gdFsInit(8, gdfswork, 64, gdfscurdir);
      gdFsFinish();

［注意］

## gdFsCreateDirhn

［関数］
  GDFS_DIRREC gdFsCreateDirhn(void *dirbuf, Sint32 max_dirent)
［入力］

dirbuf
  ディレクトリのバッファ
max_dirent
  ディレクトリのエントリ数

［出力］
  なし
［戻値］
  ディレクトリレコードハンドル
［機能］
  ディレクトリハンドルを生成します
［使用例］

      Uint32 dirbuf[gdFsGetDirrecSize(64)];
      GDFS_DIRREC g_dir;

      g_dir = gdFsCreateDirhn(dirbuf, 64);

［注意］

## gdFsLoadDir

［関数］
  Sint32 gdFsLoadDir(const char *dirname, GDFS_DIRREC gf_dirrec)
［入力］

dirname
  ディレクトリ名

［出力］

gf_dirrec
  ディレクトリレコードハンドル

  (NULLの場合はカレントディレクトリへ)
［戻値］
  エラーコード
［機能］
  ディレクトリレコードを読み込みます。
［使用例］

      /* サンプル 1 */
      /* MOVIE directory を g_dir へ読み取る */
      Uint32 dirbuf[gdFsGetDirrecSize(64)];
      GDFS_DIRREC g_dir;

      g_dir = gdFsCreateDirhn(dirbuf, 64);
      gdFsLoadDir("MOVIE", g_dir);

      /* サンプル 2 */
      /* カレントディレクトリを DATA directory へ移動する */
      gdFsLoadDir("DATA", NULL);

［注意］
  大文字と小文字は同一視します。

## gdFsSetDir

［関数］
  Sint32 gdFsSetDir(GDFS_DIRREC gf_dirrec)
［入力］

gf_dirrec
  ディレクトリレコードハンドル

［出力］
  なし
［戻値］
  エラーコード
［機能］
  カレントディレクトリを設定します。
［使用例］

      /* MOVIE directory を g_dir へ読み取る */
      Uint32 dirbuf[gdFsGetDirrecSize(64)];
      GDFS_DIRREC g_dir;

      g_dir = gdFsCreateDirhn(dirbuf, 64);
      gdFsLoadDir("MOVIE", g_dir);
      gdFsSetDir(g_dir);

［注意］

## gdFsChangeDir

［関数］
  Sint32 gdFsChangeDir(const char *dirname)
［入力］

dirname
  ディレクトリ名

［出力］
  なし
［戻値］
  エラーコード
［機能］
  カレントディレクトリを変更します。
［使用例］

      /* カレントディレクトリを DATA directory へ移動する */
      gdFsChangeDir("DATA");

［注意］
  大文字と小文字は同一視します。

## gdFsGetDirInfo

［関数］
  Sint32 gdFsGetDirInfo(const char *name, GDFS_DIRINFO dirinfo)
［入力］

name
  ファイル名／ディレクトリ名

［出力］

dirinfo
  ファイル情報

［戻値］
  エラーコード
［機能］
  ファイルの情報を取得します
［使用例］

      GDFS_DIRINFO dinfo;
      gdFsGetDirInfo("ABC.DAT", &dinfo);

［注意］

## gdFsOpen

［関数］
  GDFS gdFsOpen(const char *fname, GDFS_DIRREC gf_dirrec)
［入力］

fname
  ファイル名
gf_dirrec
  ファイル名を検索するディレクトリレコードハンドル

NULL の場合はカレントから検索します。
［出力］
  なし
［戻値］

NULL
  失敗
それ以外
  ファイルハンドル

［機能］
  ファイルをオープンします
［使用例］

      /* サンプル 1 */
      GDFS gf;

      gf = gdFsOpen("A.BIN", NULL);

      /* サンプル 2 */
      GDFS gf;
      Uint32 dirbuf[gdFsGetDirSize(64)];
      GDFS_DIRREC g_dir;

      g_dir = gdFsCreateDirhn(dirbuf, 64);
      gdFsLoadDir("MOVIE", g_dir);
      gf = gdFsOpen("SMP.MOV", g_dir);

［注意］

## gdFsOpenRange

［関数］
  GDFS gdFsOpenRange(Sint32 stsct, Sint32 nsct)
［入力］

stsct開始セクタ
endsct終了セクタ

［出力］
  なし
［戻値］

NULL
  失敗
それ以外
  ファイルハンドル

［機能］
  セクタを指定してファイルをオープンします。
［使用例］

      GDFS gf;

      gf = gdFsOpenRange(0xB555, 0x10);
      gdFsClose(gf);

［注意］
  単密領域のファイルオープンは出来ません。

## gdFsClose

［関数］
  void gdFsClose(GDFS gdfs);
［入力］

gdfs
  ファイルハンドル

［出力］
  なし
［戻値］
  なし
［機能］
  ファイルをクローズします
［使用例］

      GDFS gf;

      gf = gdFsOpen("TEST.BIN", NULL);
      gdFsClose(gf);

［注意］

## gdFsSeek

［関数］
  Sint32 gdFsSeek(GDFS gdfs, Sint32 sctno, Sint32 type)
［入力］

gdfs
  ファイルハンドル
sctno
  セクタ番号
type

  GDD_SEEK_SET | ファイルの先頭
  GDD_SEEK_CUR | ファイルの現在の読み込み位置
  GDD_SEEK_END | ファイルの最後

［出力］
  なし
［戻値］
  エラーコード
［機能］
  ファイルの読み込みポインタを移動します
［使用例］

      GDFS gf;

      gf = gdFsOpen("TEST.BIN", NULL);

      /* 先頭から 5 セクタ目にシークする */
      gdFsSeek(gf, 5, SEEK_SET);

［注意］

## gdFsTell

［関数］
  Sint32 gdFsTell(GDFS gdfs);
［入力］

gdfs
  ファイルハンドル

［出力］
  なし
［戻値］
  読み込み位置
［機能］
  セクタ単位でファイルの読み込みポインタの位置を取得します。
［使用例］

      Sint32 pos;
      GDFS gf;

      gf = gdFsOpen("TEST.BIN", NULL);

      pos = gdFsTell(gf);

［注意］

## gdFsCheckEof

［関数］
  Sint32 gdFsCheckEof(GDFS gdfs, Bool *iseof)
［入力］

gdfs
  ファイルハンドル

［出力］

iseof

  0 | ファイルの終了ではない
  0以外 | ファイルの終了

［戻値］
  エラーコード
［機能］
  ファイルが EOF に到達したかを調べます。
［使用例］

      GDFS gf;
      Bool flag;
      Sint32 ret;

      gf = gdFsOpen("TEST.BIN", NULL);

      /* 読み込み処理の後 */

      ret = gdFsCheckEof(gf, &flag);
      if (ret == GDD_ERR_OK && flag == TRUE) {
        gdFsClose(gf);
        return;
      }

［注意］

## gdFsGetFileSize

［関数］
  Bool gdFsGetFileSize(GDFS gdfs, Sint32 *fsize)
［入力］

gdfs
  ファイルハンドル

［出力］

fsize
  ファイルサイズ(バイト)

［戻値］
  true
    取得に成功
  false
    ハンドルが不正等の理由で、取得に失敗
［機能］
  ファイルサイズを取得します
［使用例］

      GDFS gf;
      Sint32 flen;

      gf = gdFsOpen("TEST.BIN", NULL);
      gdFsGetFileSize(gdfs, &flen);

［注意］

## gdFsGetFileSctSize

［関数］
  Bool gdFsGetFileSctSize(GDFS gdfs, Sint32 *fsctsize)
［入力］

gdfs
  ファイルハンドル

［出力］

fsctsizeファイルサイズ (セクタ)

［戻値］
  true
    取得に成功
  false
    ハンドルが不正等の理由で、取得に失敗
［機能］
  ファイルのセクタサイズを取得します
［使用例］

      GDFS gf;

      Sint32 fslen;

      gf = gdFsOpen("TEST.BIN", NULL);
      gdFsGetFileSctSize(gdfs, &fslen);

［注意］

## gdFsGetFad

［関数］
  Bool gdFsGetFad(GDFS gdfs, Sint32 *fad)
［入力］

gdfs
  ファイルハンドル

［出力］

fad
  フレームアドレス (物理セクタ)

［戻値］
  true
    取得に成功
  false
    ハンドルが不正等の理由で、取得に失敗
［機能］
  ファイルの FAD を取得します
［使用例］

      Sint32 fad;
      Sint32 gf;

      gf = gdFsOpen("TEST.BIN", NULL);
      gdFsGetFad(gf, &fad);

［注意］

## gdFsRead

［関数］
  Sint32 gdFsRead(GDFS gdfs, Sint32 nsct, void *buf)
［入力］

gdfs
  ファイルハンドル
nsct
  読み込むセクタ数

［出力］

buf
  格納バッファ

［戻値］
  エラーコード
［機能］
  ファイルを読み込みます。
  読み込みが終了するまでは関数から戻ってきません。（完了復帰）
［使用例］

      GDFS gf;
      Sint32 buf[32*2048/4];

      gf = gdFsOpen("TEST.BIN", NULL);
      gdFsRead(gf, 32, buf);
      gdFsClose(gf);

［注意］

## gdFsReqRd32

［関数］
  Sint32 gdFsReqRd32(GDFS gdfs, Sint32 nsct, void *buf)
［入力］

gdfs
  ファイルハンドル
nsct
  読み込むセクタ数

［出力］

buf
  格納バッファ

［戻値］
  実際にリクエストされたセクタ数 (> 0)。負のときはエラーコード
［機能］
  ファイルの読み込みリクエストします。
  関数は読み込みのリクエストをかけただけで戻ってきます。実際の読み込みが終了したかどうかについては、別途調べる必要があります。（即時復帰）
［使用例］

      GDFS gf;
      Uint32 buf[32*2048/4];

      gf = gdFsOpen("TEST.BIN", NULL);
      gdFsReqRd32(gf, 32, buf);

      while (gdFsGetStat(gf) == GDD_STAT_READ);

      gdFsClose(gf);

［注意］
  bufは32 bytes alignにする必要があります。
  また、リクエストの受付は同時に1つのみです。

## gdFsGetStat

［関数］
  Sint32 gdFsGetStat(GDFS gdfs)
［入力］

gdfs
  ファイルハンドル

［出力］
  なし
［戻値］

  GDD_STAT_IDLE | アイドル
  GDD_STAT_COMPLETE | 動作完了
  GDD_STAT_READ | 読み込み中
  GDD_STAT_ERR | エラー発生
  GDD_STAT_FATAL | 致命的なエラーが発生

［機能］
  ハンドルの状態を取得します
［使用例］

      GDFS gf;
      Uint32 buf[32*2048/4];

      gf = gdFsOpen("TEST.BIN", NULL);
      gdFsReqRd32(gf, 32, buf);

      while (gdFsGetStat(gf) == GDD_STAT_READ);

      gdFsClose(gf);

［注意］

## gdFsGetErrStat

［関数］
  Sint32 gdFsGetErrStat(GDFS gdfs)
［入力］

gdfs
  ファイルハンドル

［出力］
  なし
［戻値］
  エラーコード
［機能］
  ハンドルのエラー状態を取得します
［使用例］

      GDFS gf;
      Uint32 buf[32*2048/4];
      Sint32 stat;
      Sint32 err;

      gf = gdFsOpen("TEST.BIN", NULL);
      gdFsReqRd32(gf, 32, buf);

      while ((stat = gdFsGetStat(gf)) == GDD_STAT_READ);

      if (stat == GDD_STAT_ERR) {
        err = gdFsGetErrStat(gf);
        /* error 処理 */
      }
      gdFsClose(gf);

［注意］

## gdFsGetNumRd

［関数］
  Sint32 gdFsGetNumRd(GDFS gdfs);
［入力］

gdfs
  ファイルハンドル

［出力］
  なし
［戻値］
  0以上 読み込んだバイト数
［機能］
  読み込んだバイト数を取得します
［使用例］

      GDFS gf;
      Uint32 buf[32*2048/4];

      gf = gdFsOpen("TEST.BIN", NULL);
      gdFsReqRd32(gf, 32, buf);

      while (gdFsGetStat(gf) != GDD_STAT_COMPLETE) {
        readnum = gdFsGetNumRd(gdfs);
      }

      gdFsClose(gf);

［注意］

## gdFsStopRd

［関数］
  Sint32 gdFsStopRd(GDFS gdfs)
［入力］

gdfs
  ファイルハンドル

［出力］
  なし
［戻値］
  エラーコード
［機能］
  リクエストを中断します
［使用例］

      gdFsStopRd(gf);

［注意］

## gdFsMovePickup

［関数］
  Sint32 gdFsMovePickup(GDFS gdfs)
［入力］

gdfs
  ファイルハンドル

［出力］
  なし
［戻値］
  エラーコード
［機能］
  次の読み込み位置に、ピックアップを移動する
［使用例］

      gdFsMovePickup(gf);

［注意］

## gdFsReqGdRd

［関数］
  Sint32 gdFsReqGdRd(GDFS gdfs, Sint32 nsct)
［入力］

gdfs
  ファイルハンドル
nsct
  読み込みセクタ数

［出力］
  なし
［戻値］
  実際にリクエストされたセクタ数 (> 0)。負のときはエラーコード
［機能］
  GD バッファへの先読みリクエスト発行
［使用例］

      gdFsReqGdRd(gf, 128);

［注意］

## gdFsTrans32

［関数］
  Sint32 gdFsTrans32(GDFS gdfs, Sint32 nbytes, void *buf)
［入力］

gdfs
  ファイルハンドル
nbytes
  転送するバイト数 (32 バイト単位)

［出力］

buf
  転送先アドレス

［戻値］
  エラーコード
［機能］
  GD バッファからの転送指定
［使用例］

      while ((stat = gdFsGetStat(gf)) == GDD_STAT_READ) {
        if (gdFsGetTransStat(gf) == GDD_TRANS_READY)
        gdFsTrans32(gf, 2048, buf);
      }

［注意］

## gdFsGetTransStat

［関数］
  Sint32 gdFsGetTransStat(GDFS gdfs)
［入力］

gdfs
  ファイルハンドル

［出力］
  なし
［戻値］
  転送状態
［機能］
  転送状態を取得
［使用例］

      gdFsGetTransStat(gf);

［注意］

## gdFsGetWorkHn

［関数］
  GDFS gdFsGetWorkHn(void)
［入力］
  なし
［出力］
  なし
［戻値］
  現在実行中のハンドル。なければNULL。
［機能］
  動作中のハンドルを取得
［使用例］

      GDFS gf;
      gf = gdFsGetWorkHn();

［注意］

## gdFsGetSysHn

［関数］
  GDFS gdFsGetSysHn(void)
［入力］
  なし
［出力］
  なし
［戻値］
  システムハンドル。
［機能］
  システムハンドルを取得します。
  システムハンドルが実行中かどうかを調査するために使用します。
［使用例］

      GDFS sys;
      sys = gdFsGetSysHn();
      stat = gdFsGetStat(sys);

［注意］

## gdFsGetToc

［関数］
  Sint32 gdFsGetToc(Sint32 type, void *buf)
［入力］

type
  TOC のタイプ
  1
    高密

［出力］

buf
  TOC を読み込むためのバッファ

  必要バイト数は408バイトです。
［戻値］
  エラーコード
［機能］
  TOC の取得します
［使用例］

      gdFsGetToc(0, &buf);

［注意］
  単密領域のTOC情報は取得できなくなりました。

## gdFsGetDrvStat

［関数］
  Sint32 gdFsGetDrvStat(void)
［入力］
  なし
［出力］
  なし
［戻値］
  ドライブステータス

  名称 | 機能
  --- | ---
  GDD_DRVSTAT_BUSY | 稼働中
  GDD_DRVSTAT_PAUSE | ポーズ状態
  GDD_DRVSTAT_STANDBY | スタンバイ状態
  GDD_DRVSTAT_SEEK | シーク中
  GDD_DRVSTAT_PLAY | 再生中
  GDD_DRVSTAT_SCAN | スキャン再生中
  GDD_DRVSTAT_OPEN | トレイが開いている
  GDD_DRVSTAT_NODISC | ディスクがない
  GDD_DRVSTAT_RETRY | リトライ
  GDD_DRVSTAT_ERROR | エラー

［機能］
  ドライブ状態の取得します
［使用例］

      Sint32 dstat;
      dstat = gdFsGetDrvStat();

［注意］

## gdFsReqDrvStat

［関数］
  Sint32 gdFsReqDrvStat(void)
［入力］なし
［出力］なし
［戻値］
  エラーコード
［機能］
  ドライブ状態を更新させます。
［使用例］

      Sint32 dstat;
      gdFsReqDrvStat();
      /* リクエスト動作完了の後 */
      dstat = gdFsGetDrvStat();

［注意］

## gdFsEntryRdEndFunc

［関数］
  void gdFsEntryRdEndFunc(GDFS gdfs, GDFS_FUNC func, void *obj);
［入力］

gdfs
  ファイルハンドル
func
  コールバック関数
obj
  コールバック関数に渡す第1引数

［出力］
  なし
［戻値］
  なし
［機能］
  読み込み完了時のコールバック関数を登録します
［使用例］

      void rdend_callback(void *obj)
      {
      /* 処理 */
      }

      gdFsEntryRdEndFunc(gf, rdend_callback, (void *) 0x1234);

［注意］

## gdFsEntryTrEndFunc

［関数］
  void gdFsEntryTrEndFunc(GDFS gdfs, GDFS_FUNC func, void *obj)
［入力］

gdfs
  ファイルハンドル
func
  コールバック関数
obj
  コールバック関数にわたす第一引数

［出力］
  なし
［戻値］
  なし
［機能］
  転送完了時のコールバック関数を登録します
［使用例］

      void trend_callback(void *obj)
      {
      /* 処理 */
      }

      gdFsEntryTrEndFunc(gf, trend_callback, (void *) 0x1234);

［注意］

## gdFsEntryErrFunc

［関数］
  void gdFsEntryErrFunc(GDFS gdfs, GDFS_ERRFUNC func, void *obj)
［入力］

gdfs
  ファイルハンドル
func
  コールバック関数
obj
  コールバック関数にわたす第一引数

［出力］
  なし
［戻値］
  なし
［機能］
  エラー発生時のコールバック関数を登録します
［使用例］

      void err_callback(void *obj, Sint32 errcode)
      {
      /* 処理 */
      }

      gdFsEntryErrFunc(gf, err_callback, (void *) 0x1234);

［注意］

## gdFsEntryErrFuncAll

［関数］
  void gdFsEntryErrFuncAll(GDFS_ERRFUNC erfunc, void *obj)
［入力］

erfunc
  コールバック関数
obj
  コールバック関数に渡す第一引数

［出力］
  なし
［戻値］
  なし
［機能］
  全ハンドルに対するエラー発生時のコールバック関数を登録します。
［使用例］

      void err_callback(void *obj, Sint32 errcode)
      {
        /* 処理 */
      }

      gdFsEntryErrFuncAll(err_callback, (void *) 0x1234);

［注意］

## gdFsDaPlay

［関数］
  Sint32 gdFsDaPlay(Sint32 st_track, Sint32 end_track, Sint32 reptime)
［入力］

st_track
  開始トラック番号
end_track
  終了トラック番号
reptime
  繰り返し回数(0-14: くり返し回数, 15: 無限ループ)

［出力］
  なし
［戻値］
  エラーコード
［機能］
  DA再生を開始します
［使用例］

      gdFsDaPlay(4, 4, 0);

［注意］
  単密領域のDA再生は出来ません。

## gdFsDaPlaySct

［関数］
  Sint32 gdFsDaPlaySct(Sint32 st_sct, Sint32 end_sct, Sint32 reptime)
［入力］

st_sct
  開始セクタ
end_sct
  終了セクタ
reptime
  繰り返し回数(0-14: くり返し回数, 15: 無限ループ)

［出力］
  なし
［戻値］
  エラーコード
［機能］
  DA 再生をセクタ指定で開始します
［使用例］

      gdFsDaPlaySct(0xC000, 0xD000, 2);

［注意］
  単密領域のDA再生は出来ません。

## gdFsDaStop

［関数］
  Sint32 gdFsDaStop(void)
［入力］
  なし
［出力］
  なし
［戻値］
  エラーコード
［機能］
  DA 再生を停止させます
［使用例］

      gdFsDaStop();

［注意］

## gdFsDaPause

［関数］
  Sint32 gdFsDaPause(void)
［入力］
  なし
［出力］
  なし
［戻値］
  エラーコード
［機能］
  DA 再生の一時停止
［使用例］

      gdFsDaPause();

［注意］

## gdFsDaRelease

［関数］
  Sint32 gdFsDaRelease(Sint32 reptime)
［入力］

reptime
  くり返し回数

［出力］
  なし
［戻値］
  エラーコード
［機能］
  DA 再生の一時停止解除
［使用例］

      gdFsDaRelease(0);

［注意］

## gdFsDaGetInfo

［関数］
  Sint32 gdFsDaGetInfo(GDFS_DAINFO info)
［入力］
  なし
［出力］

info
  DA再生情報

［戻値］
  エラーコード
［機能］
  DAの再生情報を取得します。
［使用例］

      gdFsDaGetInfo(info);

［注意］
  システムハンドルを取得しステータスを監視してください。
  GDD_STAT_COMPLETE になった時だけ情報が格納されます。

オーバービューに戻る
TOPに戻る