
                               SERIALJ.TXT  File
               README file for Serial/FCA Communication Library
           (C) Copyright FANUC LTD, 1996-2006, All Rights Reserved.


  このドキュメントにはシリアル／ＦＣＡ通信ライブラリに関する以下の情報が
記述されています。ご使用の前に必ずお読みいただくようお願いいたします。

------------------------------------------------------------------------------
[1] 概要
[2] 注意事項
[3] 関数一覧
[4] 関数仕様
------------------------------------------------------------------------------

  Microsoft, Windows, Visual Basic は米国 Microsoft 社の登録商標です。


==============================================================================
[1] 概要
==============================================================================

  シリアル／ＦＣＡ通信ライブラリは、パソコンのシリアルポートを通じて、外部の
シリアル機器を使用するためのライブラリで、シリアルライブラリとＦＣＡライブラ
リから成ります。

  シリアルライブラリは、市販のシリアル機器を使用するための汎用ライブラリで、
ＦＣＡライブラリは、ＦＣＡ（ファナックカセットアダプタ）機器を使用するための
専用ライブラリです。

  本ライブラリは、32ビットの開発言語（Visual C++ 2.x/4.x, Visual Basic 4.x）
から使用することが可能です。


==============================================================================
[2] 注意事項
==============================================================================

* マルチスレッド環境でのライブラリの使用

    本ライブラリは、マルチスレッド環境での使用に制限があります。シリアルライ
  ブラリでは、一つのプロセスが複数のポートに同時にアクセスすることはできます
  が、複数のスレッドが同時に一つのポートにアクセスすることはできません。ＦＣ
  Ａライブラリでは、一つのプロセスが同時に複数のポートにアクセスすることはで
  きません。

* ヘッダファイル

    本ライブラリの各関数は、"dllexport"を指定して作成してあります。C/C++言語
  からこれらの関数を呼び出すためには、"dllimport"の指定が必要です。この指定は
  ヘッダファイル FCA32.H に記述されていますので、このヘッダファイルを必ずイン
  クルードするようにしてください。

* Visual Basic からのライブラリの使用

    本ライブラリを Visual Basic から使用するために必要な、関数の宣言や定数の
  定義などが、FCA32.BAS に記述されています。このファイルは、Visual Basic のプ
  ロジェクトに追加してご使用ください。
    なお、以下の点に注意してください。
      ・FCA32.BAS で定義されているユーザ定義型のメンバ名は、FCA32.H で定義さ
        れている構造体のメンバ名と異なります。
      ・Visual C++ の int型（32ビット）は、Visual Basic の Long型に対応しま
        す。
      ・Visual C++ の char型は、Visual Basic の Byte型に対応しますが、以下の
        関数では String型が使用されています。
          rs_open, fca_open, fca_fopen, fca_rename, fca_delete

* ＦＣＡ機器のアラーム状態への対処

    ＦＣＡライブラリの各関数が正常に終了しても、その後でＦＣＡ機器がアラーム
  状態になることがあります。ＦＣＡ機器がアラーム状態のとき、ＦＣＡライブラリ
  の各関数（fca_status関数を除く）は、０以外の値を返します。
    ＦＣＡライブラリの各関数が０以外の値を返す場合は、ＦＣＡ機器がアラーム状
  態であることが考えられます。ＦＣＡ機器がアラーム状態であるかどうかは、ＤＲ
  信号がオフかどうかを調べれば分かります。ＤＲ信号の状態は、シリアルライブラ
  リの rs_status関数で調べてください。
    ＦＣＡ機器がアラーム状態のとき、ＦＣＡ機器をリセットする必要があります。
  fca_status関数を呼び出して、ＦＣＡ機器をリセットしてください。
    なお、ＦＣＡ機器上のファイルをオープンした後で fca_status関数を呼び出す
  と、そのファイルに対する入出力操作を継続することができなくなります。入出力
  操作を再開するためには、いったんファイルをクローズしてから、再度ファイルを
  オープンしてください。

* シリアルポートの制限

    本ライブラリでは、利用できるシリアルポートが COM1 と COM2 に制限されてい
  ます。


==============================================================================
[3] 関数一覧
==============================================================================

[シリアルライブラリ]
  ----------------------------------------------------------------------------
  関数名          機能内容
  ----------------------------------------------------------------------------
  rs_open         通信回線の初期化を行います。
  rs_close        通信回線の終了処理を行います。
  rs_putc         送信バッファに1バイト出力します。
  rs_getc         受信バッファから1バイト入力します。
  rs_write        送信バッファに複数バイト出力します。
  rs_read         受信バッファから複数バイト入力します。
  rs_buffer       送受信バッファの検査や操作を行います。
  rs_status       通信回線や送受信バッファの状態を取得します。
  ----------------------------------------------------------------------------

[ＦＣＡライブラリ]
  ----------------------------------------------------------------------------
  関数名          機能内容
  ----------------------------------------------------------------------------
  fca_setparam    通信回線を初期化し、FCA機器との通信を開始します。
  fca_bye         FCA機器との通信を終了し、通信回線を解放します。
  fca_open        FCA機器上のバイナリファイルをオープンします。
  fca_close       fca_open関数でオープンしたファイルをクローズします。
  fca_read        fca_open関数でオープンしたファイルからデータを読み込みます。
  fca_write       fca_open関数でオープンしたファイルにデータを書き込みます。
  fca_fopen       FCA機器上のテキストファイルをオープンします。
  fca_fclose      fca_fopen関数でオープンしたファイルをクローズします。
  fca_getc        fca_fopen関数でオープンしたファイルから1文字読み込みます。
  fca_putc        fca_fopen関数でオープンしたファイルに1文字書き込みます。
  fca_delete      FCA機器上のファイルを削除します。
  fca_rename      FCA機器上のファイル名の変更を行います。
  fca_readdir     FCA機器のディレクトリ情報を読み込みます。
  fca_status      FCA機器のステータス情報を読み込みます。
  fca_remains     FCA機器のフロッピィディスクの残量を読み込みます。
  ----------------------------------------------------------------------------


==============================================================================
[4] 関数仕様
==============================================================================


関数名:
    rs_open

機能:
    通信回線の初期化を行います。

宣言:
    #include "fca32.h"
    int WINAPI rs_open(int port, ser_t *param, char *mode);

引数:
    port
        シリアルポート番号を指定します。
            1: COM1
            2: COM2
    
    param
        通信回線の初期化に必要なser_t構造体を指すポインタです。
        NULLが指定された場合は、デフォルトの設定を使用します。
    
    mode
        通信モードを指定するnull終端文字列を指すポインタです。
            "r" : 受信モード
            "w" : 送信モード
            "rw": 送受信モード

戻り値:
    正常に終了した場合は、0を返します。
    エラーが発生した場合は、0以外の値を返します。

備考:
    ser_t構造体は、通信回線の初期化に使用されるパラメータを格納します。
    
        typedef struct PortDefUser {
            int baud;
            int stop_bit;
            int parity;
            int data_bit;
            int hardflow;
            int dc_enable;
            int dc_put;
            int dc1_code;
            int dc2_code;
            int dc3_code;
            int dc4_code;
        } ser_t;
        
        メンバ      説明
        ----------------------------------------------------------------------
        baud        ボーレートを指定します。
                        FCA_BAUD_1200 :  1200ボー
                        FCA_BAUD_2400 :  2400ボー
                        FCA_BAUD_4800 :  4800ボー
                        FCA_BAUD_9600 :  9600ボー
                        FCA_BAUD_19200: 19200ボー
        
        stop_bit    ストップビットを指定します。
                        STOP_1: 1ストップビット
                        STOP_2: 2ストップビット
        
        parity      パリティビットを指定します。
                        PARITY_N: パリティなし
                        PARITY_E: 偶数パリティ
                        PARITY_O: 奇数パリティ
        
        data_bit    キャラクタ長を指定します。
                        DATA_7: 7ビット
                        DATA_8: 8ビット
        
        hardflow    ハードウェア信号 (CS/RS) によるフロー制御を指定します。
                        0: 行わない
                        1: 双方向
                        2: 送信のみ
                        3: 受信のみ
        
        dc_enable   DCコードによるフロー制御を指定します。
                        0: 行わない
                        1: 双方向
                        2: 送信のみ
                        3: 受信のみ
        
        dc_put      ポートのオープン/クローズ時に、DCコードを出力するかどうか
                    を指定します。
                        0: 出力しない
                        1: 出力する
                    
                    出力されるDCコードと通信モードの関係を以下に示します。
                    
                        モード  オープン  クローズ
                        --------------------------
                        受信      DC1       DC3
                        送信      DC2       DC4
                        送受信    無効      無効
        
        dc1_code    DC1コードを指定します。
                    通常は0x11を指定してください。
        
        dc2_code    DC2コードを指定します。
                    通常は0x12を指定してください。
        
        dc3_code    DC3コードを指定します。
                    通常は0x13を指定しますが、CNCとの互換性を重視する場合は
                    0x93を指定してください。
        
        dc4_code    DC4コードを指定します。
                    通常は0x14を指定してください。
------------------------------------------------------------------------------


関数名:
    rs_close

機能:
    通信回線の終了処理を行います。

宣言:
    #include "fca32.h"
    int WINAPI rs_close(int port);

引数:
    port
        シリアルポート番号を指定します。
            1: COM1
            2: COM2

戻り値:
    正常に終了した場合は、0を返します。
    エラーが発生した場合は、0以外の値を返します。

備考:
    rs_open関数で、ポートのクローズ時にDCコードを出力するように指定した場合は、
    DCコードが出力されます。
    
    rs_close関数は送受信バッファをクリアします。
    rs_putc関数やrs_write関数で送信操作を行った直後に、rs_close関数を呼び出す
    と、意図するデータが完全に送信されない危険があります。
    これを避けるため、rs_buffer関数で送信バッファが空になったことを確認して
    からrs_close関数を呼び出すようにしてください。
------------------------------------------------------------------------------


関数名:
    rs_putc

機能:
    送信バッファに1バイト出力します。

宣言:
    #include "fca32.h"
    int WINAPI rs_putc(int c, int port);

引数:
    c
        出力するデータを指定します。
    
    port
        シリアルポート番号を指定します。
            1: COM1
            2: COM2

戻り値:
    正常に終了した場合は、1を返します。
    送信バッファがいっぱいでデータが出力できなかった場合は、0を返します。
    エラーが発生した場合は、-1を返します。

備考:
    rs_putc関数は、送信バッファに対してデータを出力します。
    データが実際に送信されたことを知るには、rs_buffer関数で送信バッファが
    空になったことを確認してください。
------------------------------------------------------------------------------


関数名:
    rs_getc

機能:
    受信バッファから1バイト入力します。

宣言:
    #include "fca32.h"
    int WINAPI rs_getc(int port);

引数:
    port
        シリアルポート番号を指定します。
            1: COM1
            2: COM2

戻り値:
    正常に終了した場合は、入力されたデータを返します。
    受信バッファにデータがない場合や、エラーが発生した場合は、-1を返します。
------------------------------------------------------------------------------


関数名:
    rs_write

機能:
    送信バッファに複数バイト出力します。

宣言:
    #include "fca32.h"
    int WINAPI rs_write(char *buffer, int size, int port);

引数:
    buffer
        出力するデータが格納されているバッファを指すポインタです。
    
    size
        出力するデータのサイズを指定します。
    
    port
        シリアルポート番号を指定します。
            1: COM1
            2: COM2

戻り値:
    正常に終了した場合は、出力されたデータのサイズを返します。
    送信バッファに指定したサイズ分の余裕がない場合、戻り値は指定したサイズより
    小さくなります。
    エラーが発生した場合は、-1を返します。

備考:
    rs_write関数は、送信バッファに対してデータを出力します。
    データが実際に送信されたことを知るには、rs_buffer関数で送信バッファが
    空になったことを確認してください。
------------------------------------------------------------------------------


関数名:
    rs_read

機能:
    受信バッファから複数バイト入力します。

宣言:
    #include "fca32.h"
    int WINAPI rs_read(char *buffer, int size, int port);

引数:
    buffer
        入力したデータを格納するバッファを指すポインタです。
    
    size
        入力するデータのサイズを指定します。
    
    port
        シリアルポート番号を指定します。
            1: COM1
            2: COM2

戻り値:
    正常に終了した場合は、入力されたデータのサイズを返します。
    受信バッファに指定したサイズ分のデータがない場合、戻り値は指定したサイズ
    より小さくなります。
    エラーが発生した場合は、-1を返します。
------------------------------------------------------------------------------


関数名:
    rs_buffer

機能:
    送受信バッファの検査や操作を行います。

宣言:
    #include "fca32.h"
    int WINAPI rs_buffer(int port, int cmnd);

引数:
    port
        シリアルポート番号を指定します。
            1: COM1
            2: COM2
    
    cmnd
        バッファに対する動作命令を指定します。
            RS_GET_BUF_R: 受信バッファのサイズを返す
            RS_GET_BUF_W: 送信バッファのサイズを返す
            RS_CHK_BUF_R: 受信バッファ内のデータのバイト数を返す
            RS_CHK_BUF_W: 送信バッファ内のデータのバイト数を返す
            RS_CLR_BUF_R: 受信バッファをクリアする
            RS_CLR_BUF_W: 送信バッファをクリアする

戻り値:
    正常に終了した場合は、各動作命令に対して以下のような値を返します。
    
        動作命令        戻り値
        ----------------------------------------------------------------------
        RS_GET_BUF_R    受信バッファのサイズ
        RS_GET_BUF_W    送信バッファのサイズ
        RS_CHK_BUF_R    受信バッファ内のデータのバイト数
        RS_CHK_BUF_W    送信バッファ内のデータのバイト数
        RS_CLR_BUF_R    0
        RS_CLR_BUF_W    0
    
    エラーが発生した場合は、-1を返します。
------------------------------------------------------------------------------


関数名:
    rs_status

機能:
    通信回線や送受信バッファの状態を取得します。

宣言:
    #include "fca32.h"
    int WINAPI rs_status(int port);

引数:
    port
        シリアルポート番号を指定します。
            1: COM1
            2: COM2

戻り値:
    正常に終了した場合は、通信回線 (LSI) の状態と送受信バッファの状態を、
    以下の値の論理和で返します。
    
        値              意味
        ----------------------------------------------------------------------
        STS_S_STOP      送信停止状態         (送信)
        STS_BUF_FULL    バッファフル         (送信)
        STS_R_STOP      受信停止状態         (受信)
        STS_EMPTY       バッファエンプティ   (受信)
        STS_OVERFLOW    バッファオーバーラン (受信)
        STS_DR_ON       DRオン               (LSI)
        STS_FRAME       フレーミングエラー   (LSI)
        STS_OVERRUN     オーバーラン         (LSI)
        STS_PARITY      パリティエラー       (LSI)
        STS_CD_ON       CDオン               (LSI)
    
    エラーが発生した場合は、-1を返します。
------------------------------------------------------------------------------


関数名:
    fca_setparam

機能:
    通信回線を初期化し、FCA機器との通信を開始します。

宣言:
    #include "fca32.h"
    int WINAPI fca_setparam(int port, ser_t *param);

引数:
    port
        シリアルポート番号を指定します。
            1: COM1
            2: COM2
    
    param
        通信回線の初期化に必要なser_t構造体を指すポインタです。
        NULLが指定された場合は、デフォルトの設定を使用します。

戻り値:
    正常に終了した場合は、0を返します。
    エラーが発生した場合は、0以外の値を返します。

備考:
    fca_setparam関数は、通信回線を初期化し、RS/ER信号をオンにします。
    
    ser_t構造体に設定するパラメータについては、rs_open関数の説明を参照して
    ください。
    
    プロトコルBで送受信する場合は、以下の設定をお勧めします。
    
        param->baud      = FCA_BAUD_4800;
        param->stop_bit  = STOP_2;
        param->parity    = PARITY_N;
        param->data_bit  = DATA_8;
        param->hardflow  = 2;
        param->dc_enable = 3;
        param->dc_put    = 0;
        param->dc1_code  = 0x11;
        param->dc2_code  = 0x12;
        param->dc3_code  = 0x93;
        param->dc4_code  = 0x14;
------------------------------------------------------------------------------


関数名:
    fca_bye

機能:
    FCA機器との通信を終了し、通信回線を解放します。

宣言:
    #include "fca32.h"
    int WINAPI fca_bye(int port);

引数:
    port
        シリアルポート番号を指定します。
            1: COM1
            2: COM2

戻り値:
    正常に終了した場合は、0を返します。
    エラーが発生した場合は、0以外の値を返します。

備考:
    fca_bye関数は、RS/ER信号をオフにし、通信回線を解放します。
    
    以下の場合は、fca_bye関数を呼び出してください。
    
        1) FCA機器を回線から脱着するとき
        2) FCA機器がエラー状態から回復できなくなったとき
        3) シリアルライブラリ関数 (rs_xxxxxx) で入出力を行いたいとき
------------------------------------------------------------------------------


関数名:
    fca_open

機能:
    FCA機器上のバイナリファイルをオープンします。

宣言:
    #include "fca32.h"
    int WINAPI fca_open(char *name, int mode);

引数:
    name
        ファイル名 (最大17文字) を指定するnull終端文字列を指すポインタです。
        先頭文字を"#"にした場合は、ファイル番号の指定になります。
            "#xxxx": xxxx番目のファイル (xxxxは最大4桁の数字)
            "#0"   : 先頭のファイル
            "#N"   : 次のファイル
            "#E"   : 最終ファイルの次 (新規ファイルを追加作成)
    
    mode
        アクセスモードを指定します。
            0: read
            1: write

戻り値:
    正常に終了した場合は、0を返します。
    エラーが発生した場合は、-1を返します。

備考:
    fca_open関数は、fca_close関数と組みで使用します。
    fca_open関数とfca_close関数の間は、fca_read関数またはfca_write関数しか
    呼び出すことができません。
    それ以外のFCAライブラリ関数 (fca_xxxxxx) を呼び出すと、エラーになります。
     (fca_status関数とfca_bye関数を除く)
------------------------------------------------------------------------------


関数名:
    fca_close

機能:
    fca_open関数でオープンしたファイルをクローズします。

宣言:
    #include "fca32.h"
    int WINAPI fca_close(void);

引数:
    なし

戻り値:
    正常に終了した場合は、0を返します。
    エラーが発生した場合は、-1を返します。

備考:
    fca_close関数は、fca_open関数と組みで使用します。
    fca_open関数とfca_close関数の間は、fca_read関数またはfca_write関数しか
    呼び出すことができません。
    それ以外のFCAライブラリ関数 (fca_xxxxxx) を呼び出すと、エラーになります。
     (fca_status関数とfca_bye関数を除く)
------------------------------------------------------------------------------


関数名:
    fca_read

機能:
    fca_open関数でオープンしたファイルからデータを読み込みます。

宣言:
    #include "fca32.h"
    int WINAPI fca_read(char *buffer, int bytes);

引数:
    buffer
        読み込まれたデータを格納するバッファを指すポインタです。
    
    bytes
        読み込むデータのバイト数を指定します。(最大65534バイト)

戻り値:
    正常に終了した場合は、読み込まれたデータのバイト数を返します。
    エラーが発生した場合は、-1を返します。

備考:
    FCA機器は、入出力単位以下のバイト数のデータを書き込むことができないため、
    読み込まれたデータの末尾に余分なnullが付加されていることがあります。
    戻り値が指定バイト数よりも小さい場合は、ファイルの終端に達したものと解釈
    してください。
    
    また、FANUCフォーマットのフロッピィディスクの場合、ファイルのサイズが
    正確に分からないため、読み込まれたデータの末尾に余分な0xFFがさらに付加
    されていることがあります。このため、ファイルの終端はアプリケーションで
    判断する必要があります。
------------------------------------------------------------------------------


関数名:
    fca_write

機能:
    fca_open関数でオープンしたファイルにデータを書き込みます。

宣言:
    #include "fca32.h"
    int WINAPI fca_write(char *buffer, int bytes);

引数:
    buffer
        書き込むデータが格納されているバッファを指すポインタです。
    
    bytes
        書き込むデータのバイト数を指定します。(最大65534バイト)

戻り値:
    正常に終了した場合は、書き込まれたデータのバイト数を返します。
    エラーが発生した場合は、-1を返します。

備考:
    FCA機器は、入出力単位以下のバイト数のデータを書き込むことができないため、
    実際の書き込みでは、入出力単位に満たないバイト数だけnullを書き込みます。
    このため、FCA機器上のファイルの末尾には、余分なnullが付加されることが
    あります。
------------------------------------------------------------------------------


関数名:
    fca_fopen

機能:
    FCA機器上のテキストファイルをオープンします。

宣言:
    #include "fca32.h"
    int WINAPI fca_fopen(char *name, char *mode);

引数:
    name
        ファイル名 (最大17文字) を指定するnull終端文字列を指すポインタです。
        先頭文字を"#"にした場合は、ファイル番号の指定になります。
            "#xxxx": xxxx番目のファイル (xxxxは最大4桁の数字)
            "#0"   : 先頭のファイル
            "#N"   : 次のファイル
            "#E"   : 最終ファイルの次 (新規ファイルを追加作成)
    
    mode
        アクセスモードを指定するnull終端文字列を指すポインタです。
            "r": read
            "w": write

戻り値:
    正常に終了した場合は、0を返します。
    エラーが発生した場合は、-1を返します。

備考:
    fca_fopen関数は、fca_fclose関数と組みで使用します。
    fca_fopen関数とfca_fclose関数の間は、fca_getc関数またはfca_putc関数しか
    呼び出すことができません。
    それ以外のFCAライブラリ関数 (fca_xxxxxx) を呼び出すと、エラーになります。
     (fca_status関数とfca_bye関数を除く)
------------------------------------------------------------------------------


関数名:
    fca_fclose

機能:
    fca_fopen関数でオープンしたファイルをクローズします。

宣言:
    #include "fca32.h"
    int WINAPI fca_fclose(void);

引数:
    なし

戻り値:
    正常に終了した場合は、0を返します。
    エラーが発生した場合は、-1を返します。

備考:
    fca_fclose関数は、fca_fopen関数と組みで使用します。
    fca_fopen関数とfca_fclose関数の間は、fca_getc関数またはfca_putc関数しか
    呼び出すことができません。
    それ以外のFCAライブラリ関数 (fca_xxxxxx) を呼び出すと、エラーになります。
     (fca_status関数とfca_bye関数を除く)
------------------------------------------------------------------------------


関数名:
    fca_getc

機能:
    fca_fopen関数でオープンしたファイルから1文字読み込みます。

宣言:
    #include "fca32.h"
    int WINAPI fca_getc(void);

引数:
    なし

戻り値:
    正常に終了した場合は、読み込まれた文字を返します。
    ファイルの終端に達した場合や、エラーが発生した場合は、-1を返します。

備考:
    読み込まれた文字のコードは、ISOからASCIIに変換されます。
    
    FANUCフォーマットのフロッピィディスクの場合、ファイルのサイズが正確に
    分からないため、ファイルの終端に達してから余分な0x7Fが読み込まれることが
    あります。このため、ファイルの終端はアプリケーションで判断する必要が
    あります。
------------------------------------------------------------------------------


関数名:
    fca_putc

機能:
    fca_fopen関数でオープンしたファイルに1文字書き込みます。

宣言:
    #include "fca32.h"
    int WINAPI fca_putc(int c);

引数:
    c
        書き込む文字を指定します。

戻り値:
    正常に終了した場合は、書き込まれた文字を返します。
    エラーが発生した場合は、-1を返します。

備考:
    書き込む文字のコードは、ASCIIからISOに変換されます。
------------------------------------------------------------------------------


関数名:
    fca_delete

機能:
    FCA機器上のファイルを削除します。

宣言:
    #include "fca32.h"
    int WINAPI fca_delete(char *name);

引数:
    name
        ファイル名 (最大17文字) を指定するnull終端文字列を指すポインタです。
        先頭文字を"#"にした場合は、ファイル番号の指定になります。
            "#xxxx": xxxx番目のファイル (xxxxは最大4桁の数字)

戻り値:
    正常に終了した場合は、0を返します。
    エラーが発生した場合は、-1を返します。
------------------------------------------------------------------------------


関数名:
    fca_rename

機能:
    FCA機器上のファイル名の変更を行います。

宣言:
    #include "fca32.h"
    int WINAPI fca_rename(char *oldname, char *newname);

引数:
    oldname
        旧ファイル名 (最大17文字) を指定するnull終端文字列を指すポインタです。
        先頭文字を"#"にした場合は、ファイル番号の指定になります。
            "#xxxx": xxxx番目のファイル (xxxxは最大4桁の数字)
            "#0"   : 先頭のファイル
            "#N"   : 次のファイル
    
    newname
        新ファイル名 (最大17文字) を指定するnull終端文字列を指すポインタです。
        先頭文字を"#"にすることはできません。

戻り値:
    正常に終了した場合は、0を返します。
    エラーが発生した場合は、-1を返します。
------------------------------------------------------------------------------


関数名:
    fca_readdir

機能:
    FCA機器のディレクトリ情報を読み込みます。

宣言:
    #include "fca32.h"
    int WINAPI fca_readdir(fca_dir *buffer, int ndir, int nfile);

引数:
    buffer
        ディレクトリ情報を格納するfca_dir構造体 (配列) のバッファを指す
        ポインタです。
        NULLが指定された場合は、ディレクトリ情報がバッファに格納されません。
    
    ndir
        ディレクトリ情報の読み込みを開始するファイル番号を指定します。
    
    nfile
        ディレクトリ情報を読み込むファイル数を指定します。
        0が指定された場合は、最後のファイルまでディレクトリ情報を読み込み
        ますが、ディレクトリ情報はバッファに格納されません。

戻り値:
    正常に終了した場合は、ディレクトリ情報が読み込まれたファイル数を返します。
    エラーが発生した場合は、-1を返します。

備考:
    fca_readdir関数を使用するときは、以下の手順に従ってください。
    
        1) 引数bufferにNULL、引数nfileに0を指定して、fca_readdir関数を
           呼び出します。
        2) 戻り値として、引数ndirで指定したファイル以降のファイル数が
           得られますので、その数のディレクトリ情報を十分に格納できる
           バッファを確保し、引数bufferにそのポインタを指定します。
        3) 引数nfileに、2)で得られたファイル数を指定し、fca_readdir関数を
           再度呼び出します。
    
    fca_dir構造体には、ディレクトリ情報が格納されます。
    
        typedef struct FCA_DIRINFO {
            char file_name[18];
            char file_size[9]; 
            char wrt_protect;  
            char record_code;  
            char vol_no[3];    
            char multi_vol;    
        } fca_dir;
        
            メンバ          説明
            ------------------------------------------------------------------
            file_name       ファイル名を示す文字列 (17文字以内の英数字+null) 
                            が格納されます。
                            1文字目がnullの場合は、削除ファイルを示します。
            
            file_size       ファイルサイズを示す文字列 (8桁+null) が格納
                            されます。
            
            wrt_protect     ライトプロテクトされているかどうかを示します。
                                'P': オン
                                ' ': オフ
            
            record_code     記録コードを示します。
                                'B': バイナリ
                                'E': EIA
                                ' ': ISO
            
            vol_no          ボリューム番号を示す文字列 (2桁+null) が格納
                            されます。
                            "  "の場合は、単一ボリュームを示します。
            
            multi_vol       マルチボリュームかどうかを示します。
                                ' ': 単一ボリューム
                                'C': 次のボリュームあり
                                'L': 最終ボリューム
------------------------------------------------------------------------------


関数名:
    fca_status

機能:
    FCA機器のステータス情報を読み込みます。

宣言:
    #include "fca32.h"
    int WINAPI fca_status(char *buffer);

引数:
    buffer
        ステータス情報を受け取るバッファを指すポインタです。
        バッファには、2バイト必要です。

戻り値:
    正常に終了した場合は、0を返します。
    エラーが発生した場合は、-1を返します。

備考:
    FCA機器がアラーム状態である場合は、FCA機器をリセットし、アラーム状態を
    解除します。
    
    FCA機器がアラーム状態でない場合は、入出力操作を終了させ、ステータスを
    クリアします。
    
    ステータス情報の内容を、以下に示します。
    
        1バイト目: エラーコード等
        
              7   6   5   4   3   2   1   0
            +---+---+---+---+---+---+---+---+
            | SD| 0 | PT|    ERROR CODE     |
            +---+---+---+---+---+---+---+---+
              |       |
              |       +---+--->0: ライトプロテクトオフ
              |           +--->1: ライトプロテクトオン
              |           
              +-----------+--->0: 1ファイルのデータ送出が完了
                          +--->1: 1ファイルのデータ送出が未完了
            
            ERROR CODEは、最後に発生したアラームのエラーコードを示します。
            
                ERROR CODE      アラームの原因
                --------------------------------------------------------------
                00000 (= 0)     エラーなし
                00001 (= 1)     ファイルサーチエラー
                00010 (= 2)     (未使用)
                00011 (= 3)     (未使用)
                00100 (= 4)     (未使用)
                00101 (= 5)     (未使用)
                00110 (= 6)     (未使用)
                00111 (= 7)     レコードサイズオーバー
                01000 (= 8)     (未使用)
                01001 (= 9)     プロトコルエラー
                01010 (=10)     (未使用)
                01011 (=11)     (未使用)
                01100 (=12)     ライトプロテクトエラー
                01101 (=13)     (未使用)
                01110 (=14)     (未使用)
                01111 (=15)     オーバーラン、フレーミングエラー
                10000 (=16)     (未使用)
                10001 (=17)     FDハードエラー
                10010 (=18)     RAMエラー
                10011 (=19)     ROMサムチェックエラー
                10100 (=20)     ボリュームシーケンスエラー
                10101 (=21)     フォーマットエラー
                10110 (=22)     ラベルエラー
                10111 (=23)     ドアオープン
                11000 (=24)     (未使用)
                11001 (=25)     (未使用)
                11010 (=26)     コードエラー
                11011 (=27)     (未使用)
                11100 (=28)     ファイルリードエラー
                11101 (=29)     準備不足
                11110 (=30)     システムエラー
                11111 (=31)     パワーオフエラー
        
        2バイト目: フロッピィディスクの種類
        
              7   6   5   4   3   2   1   0
            +---+---+---+---+---+---+---+---+
            | - | - | - | C5| - | C3| C2| - |
            +---+---+---+---+---+---+---+---+
                          |       |   |
                          0       0   1 : 片面倍密度 (1D)
                          0       1   0 : 両面倍密度 (2D)
                          1       0   0 : 両面高密度 (2HD)
------------------------------------------------------------------------------


関数名:
    fca_remains

機能:
    FCA機器のフロッピィディスクの残量を読み込みます。

宣言:
    #include "fca32.h"
    int WINAPI fca_remains(long *remains);

引数:
    remains
        フロッピィディスクの残量を受け取る32ビット変数を指すポインタです。

戻り値:
    正常に終了した場合は、0を返します。
    エラーが発生した場合は、-1を返します。

備考:
    フロッピィディスクの残量は、バイト単位で示されます。
------------------------------------------------------------------------------

