ライブラリ - ソフトウェアライブラリ集

このリポジトリは、私がこれまでに開発したソフトウェアライブラリのコレクションです。その一部は ZPU Evo での使用を目的としています。

現在、ZPU GCC ツールチェーンにはネットワークプログラミングや newlib ライブラリをサポートしていないという問題があります。これにより、UX は ZPU Evo 向けに完全にビルドできませんが、zOS でネットワーク機能とスレッドを実現したいため、解決に努める予定です。


UX ライブラリ

1994年当時、C プログラムの作成には高価なツールキット(Rogue Wave など)を購入し、バグの多いライブラリ API を組み合わせるか、それ自体を一から書くかしかありませんでしたが、それは容易なことではありませんでした。現在では、Java・Perl・Python などの最新言語は非常に豊富なエコシステムを持っています。C/C++ 向けにも、このようなオープンソースのライブラリが存在し、開発を加速させることができますが、探すのに苦労することもあります。 私はこのライブラリを、クライアント向けの C プログラムをより簡単に書けるようにするために開発しました。最終的にはツールキット全体がクライアントに渡されることも多く、彼らのアプリケーション設計の中で大幅に拡張されていきました(ライセンスの都合上、残念ながらその拡張をバックポートすることはできませんでした)。 このライブラリは、Linux・Solaris・Windows 上での C プログラム開発を大幅に容易にし、組み込み開発にも非常に有用です。ZPU Evo はこのツールキットのターゲットの一つであり、それゆえにこのライブラリが再び活用されるに至りました。

UX ライブラリのメソッドは、所属するモジュールごとに以下に記述されています。メソッド名が _ で始まる場合は内部メソッドであり、通常は直接呼び出されません。ただし C 言語にはメソッドやデータに対するプライベート定義がないため、必要であれば呼び出すことも可能です。

ux_cli

Unix または Windows のコマンドライン処理関数。

   
関数: GetCLIParam
説明: このプログラムを起動したシェルのコマンドラインから、コマンドラインインターフェース(CLI)パラメータを取得します。
戻り値: R_OK - パラメータを取得しました。
R_FAIL - パラメータが存在しません。
プロトタイプ: int GetCLIParam( int nArgc /* I: Argc または同等のもの */, UCHAR **Argv /* IO: Argv または同等のもの */, UCHAR *szParm /* I: 検索するパラメータフラグ */, UINT nParmType /* I: パラメータの型 (例: int) */, UCHAR *pVar /* O: パラメータ用変数へのポインタ */, UINT nVarLen /* I: pVar が指す領域の長さ */, UINT nZapParam ) /* I: 処理後に引数を削除するか */

ux_cmprs

データの圧縮・展開を行うメソッドのセットです。基本的なコードは Linux のパブリックドメイン LZW 圧縮・展開アルゴリズムに由来しており、プログラムへの組み込みを可能にするために多少整理・拡張されています。最終的にはより高度なアルゴリズムを実装する予定ですが、現時点ではこの LZW がテキストに対して非常に高い圧縮率を示しています。

   
関数: Compress
説明: テキストバッファを圧縮する汎用関数。
戻り値: NULL - メモリ不足。
入力データの圧縮済みコピーを含むメモリバッファ。
プロトタイプ: UCHAR *Compress( UCHAR *spInBuf /* I: 圧縮対象のバッファ */, UINT *nLen ) /* IO: 圧縮前後のバッファ長 */
   
関数: Decompress
説明: バッファをテキストに展開する汎用関数。
戻り値: NULL - メモリ不足。
入力データの展開済みコピーを含むメモリバッファ。
プロトタイプ: UCHAR *Decompress( UCHAR *spInBuf /* I: 展開対象のバッファ */, UINT *nCmpLen ) /* IO: 圧縮前後のバッファ長 */
   
関数: WLZW
説明: データを LZW 形式で書き込み(圧縮)します。
戻り値: 0 = 無駄なCPU処理(圧縮なし)
-1 = 一般エラー
-2 = 論理エラー
-3 = 展開エラー
>0 = 成功/合計長
プロトタイプ: int WLZW( byte *si /* I: 圧縮対象データ */, code *so /* O: 圧縮済みデータ */, int len /* I: 圧縮対象データの長さ */, int maxlen ) /* I: 圧縮済みデータの最大長 */
   
関数: RLZW
説明: LZW 形式のデータを読み込み(展開)します。
戻り値: 0 = 無駄なCPU処理(圧縮なし)
-1 = 一般エラー
-2 = 論理エラー
-3 = 展開エラー
>0 = 成功/合計長
プロトタイプ: int RLZW( code *si /* I: 展開対象データ */, byte *so /* O: 展開済みデータ */, int silen /* I: 圧縮済みデータの長さ */, int len ) /* I: 展開後の予想データ長 */

ux_comms

汎用ネットワーク通信ルーチン。デーモン機能、接続の受け付け、プロセスとコールバックのスケジューリングの基盤を形成します。

   
関数: _SL_CalcCRC
説明: バッファの CRC を計算します。
スレッドセーフ: はい
戻り値: 16ビット CRC
プロトタイプ: UINT _SL_CalcCRC( UCHAR *szBuf /* I: CRC を計算するデータバッファ */, UINT nBufLen ) /* I: データバッファの長さ */
   
関数: _SL_CheckCRC
説明: バッファの CRC を指定値と照合して検証します。
スレッドセーフ: はい
戻り値: R_OK - CRC が一致しました。
R_FAIL - CRC が一致しません。
 
プロトタイプ: UINT _SL_CheckCRC( UCHAR *szBuf /* I: CRC を計算するデータバッファ */, UINT nBufLen ) /* I: バッファ内のデータ長 */
   
関数: _SL_FdBlocking
説明: ファイルディスクリプタのブロッキングモードを設定します。
スレッドセーフ: はい
戻り値: R_OK - モードを設定しました。
R_FAIL - モードを設定できませんでした。
プロトタイプ: int _SL_FdBlocking( int nFd /* 操作対象のファイルディスクリプタ*/, int nBlock ) /* ブロッキング (1) または非ブロッキング (0) */
   
関数: _SL_AcceptClient
説明: クライアントからの受信要求を受け付けます。クライアントの重複テーブルエントリを構築し(存在しない場合)、一意のチャンネル ID を割り当てます。
スレッドセーフ: いいえ。SL ライブラリスレッドのみが入れます。
戻り値: R_OK - 通信機能が初期化されました。
R_FAIL - 初期化に失敗しました。Errno を参照してください。
E_NOMEM - メモリが枯渇しました。
プロトタイプ: int _SL_AcceptClient( UINT nServerSd /* I: サーバーソケット ID */, SL_NETCONS *spServer /* I: サーバー記述レコード */, SL_NETCONS **spNewClnt ) /* O: 新しいクライアント */
   
関数: _SL_GetPortNo
説明: 構造体から有効なポート番号を取得します。
スレッドセーフ: はい
戻り値: ポート番号。
プロトタイプ: UINT _SL_GetPortNo( SL_NETCONS *spNetCon ) /* I: 接続記述 */
   
関数: _SL_Close
説明: クライアントまたはサーバーの接続を閉じます。
スレッドセーフ: いいえ。SL スレッドのみが入れます。
戻り値: R_OK - 接続を正常に閉じました。
R_FAIL - 接続を閉じることができませんでした。Errno を参照してください。
 
プロトタイプ: int _SL_Close( SL_NETCONS *spNetCon /* I: 切断する接続 */, UINT nDoCallback ) /* I: クローズコールバックを実行するか */
   
関数: _SL_ConnectToServer
説明: リモートサーバーへの接続を試みます。
スレッドセーフ: いいえ。SL スレッドのみが入れます。
戻り値: R_OK -
R_FAIL -
E_NOMEM - メモリが枯渇しました。
E_NOSOCKET - 接続用ソケットを確保できませんでした。
プロトタイプ: int _SL_ConnectToServer( SL_NETCONS *spNetCon )
   
関数: _SL_ReceiveFromSocket
説明: 指定されたソケットからデータを受信し、必要に応じて受信バッファを拡張します。
スレッドセーフ: いいえ。SL スレッドのみが入れます。
戻り値: R_OK -
R_FAIL -
E_NOMEM - メモリが枯渇しました。
E_BADPARM - 不正なパラメータが渡されました。
E_NOSERVICE - ソケット上にサービスがありません。
プロトタイプ: int _SL_ReceiveFromSocket( SL_NETCONS *spNetCon ) /* IO: アクティブな接続 */
   
関数: _SL_ProcessRecvBuf
説明: ネットワーク接続の受信バッファに保持されているデータを処理します。完全なパケットが組み立てられ、CRC チェックを通過した場合、そのデータをコールバックを通じてサブスクライブ中のアプリケーションに渡します。
スレッドセーフ: いいえ。SL スレッドのみが入れます。
戻り値: R_OK -
R_FAIL -
E_NOMEM - メモリが枯渇しました。
E_NOSOCKET - 接続用ソケットを確保できませんでした。
プロトタイプ: int _SL_ProcessRecvBuf( SL_NETCONS *spNetCon )
   
関数: _SL_ProcessWaitingPorts
説明:  
スレッドセーフ: いいえ。SL スレッドのみが入れます。
戻り値: R_OK - select が成功しました。
R_FAIL - 重大な障害。Errno を参照してください。
E_BADSELECT - select の失敗を引き起こした内部障害。
E_NONWAITING - 処理待ちのソケットがありません。
プロトタイプ: int _SL_ProcessWaitingPorts( ULNG nHibernationPeriod ) /* I: select スリープ */
   
関数: _SL_ProcessCallbacks
説明: タイマーがアクティブで期限切れになったコールバックを起動します。
スレッドセーフ: いいえ。SL スレッドのみが入れます。
戻り値: 次のコールバックまでの時間(ミリ秒)。
 
プロトタイプ: ULNG _SL_ProcessCallbacks( void )
   
関数: SL_HostIPtoString
説明: 指定された IP アドレスをドット表記の文字列に変換します。
スレッドセーフ: いいえ。API は同時に1スレッドのみ許可します。
戻り値: 16ビット CRC
プロトタイプ: UCHAR *SL_HostIPtoString( ULNG lIPaddr ) /* I: 変換する IP アドレス */
   
関数: SL_GetIPaddr
説明: ローカルマシンまたは指定されたマシン名のインターネットアドレスを取得します。
スレッドセーフ: いいえ。API は同時に1スレッドのみ許可します。
戻り値: R_OK - IP アドレスを取得しました。
R_FAIL - IP アドレスを取得できませんでした。
プロトタイプ: int SL_GetIPaddr( UCHAR *szHost /* I: ホスト名文字列 */, ULNG *lIPaddr ) /* O: インターネットアドレスの保存領域 */
   
関数: SL_GetService
説明: サービスファイルから TCP/UDP サービスのポート番号を取得します。
スレッドセーフ: いいえ。API 関数は同時に1スレッドのみ許可します。
戻り値: R_OK - サービスポートを取得しました。
R_FAIL - サービスポートを取得できませんでした。
プロトタイプ: int SL_GetService( UCHAR *szService /* I: サービス名文字列 */, UINT *nPortNo ) /* O: ポート番号の保存領域 */
   
関数: SL_Init
説明: 通信変数を初期化し、必要なソケット接続への接続またはリッスン設定を行います。
スレッドセーフ: いいえ。API 関数は同時に1スレッドのみ許可します。
戻り値: R_OK - 通信機能が初期化されました。
R_FAIL - 初期化に失敗しました。Errno を参照してください。
E_NOMEM - メモリが枯渇しました。
プロトタイプ: int SL_Init( UINT nSockKeepAlive /* I: ソケットキープアライブ時間 */, UCHAR *szErrMsg ) /* O: エラーメッセージバッファ */
   
関数: SL_Exit
説明: プログラム終了または再初期化に備えて通信モジュールを解体します。
スレッドセーフ: いいえ。API 関数は同時に1スレッドのみ許可します。
戻り値: R_OK - 正常に終了しました。
R_FAIL - 終了処理を実行できませんでした。errno を参照してください。
 
プロトタイプ: int SL_Exit( UCHAR *szErrMsg ) /* O: エラーメッセージバッファ */
   
関数: SL_PostTerminate
説明: プログラムをできるだけ早く終了させるリクエストを投稿します。
スレッドセーフ: はい
戻り値: なし。
プロトタイプ: void SL_PostTerminate( void )
   
関数: SL_GetChanId
説明: 指定された IP アドレスからチャンネル ID を取得します。IP アドレスが存在しないか、まだ接続保留中の場合はエラーとして 0 を返します。
スレッドセーフ: いいえ。API 関数は同時に1スレッドのみ許可します。
戻り値: > 0 - IP アドレスに関連付けられたチャンネル ID。
0 - 関連するチャンネルが見つかりませんでした。
プロトタイプ: UINT SL_GetChanId( ULNG lIPaddr ) /* I: 変換するアドレス */
   
関数: SL_RawMode
説明: チャンネルをローモード処理に切り替える、またはローモードから切り替える関数。ローモード処理はあらゆる形式のチェックを省略し、通常は SL ライブラリを使用しないサーバー/クライアントとの接続に使用されます。
スレッドセーフ: いいえ。API 関数は同時に1スレッドのみ許可します。
戻り値: R_FAIL - 不正なチャンネル ID が指定されました。
R_OK - モードを設定しました。
 
プロトタイプ: int SL_RawMode( UINT nChanId /* I: 変更を適用するチャンネル */, UINT nMode ) /* I: チャンネルに設定するモード */
   
関数: SL_AddServer
説明: ネットワーク接続テーブルにサーバーとしてエントリを追加します。エントリを構築し、ソケットを作成してリッスン状態に設定します。
スレッドセーフ: いいえ。API 関数は同時に1スレッドのみ許可します。
戻り値: R_OK - 正常に追加されました。
R_FAIL - エラー。Errno を参照してください。
E_NOMEM - メモリが枯渇しました。
E_BADPARM - 不正なパラメータが渡されました。
E_EXISTS - エントリがすでに存在します。
E_NOSOCKET - ソケットを確保できませんでした。
E_NOLISTEN - 指定ポートでリッスンできませんでした。
プロトタイプ: int SL_AddServer( UINT nPortNo /* I: リッスンするポート */, UINT nForkForAccept /* I: accept 前にフォークするか */, void (*nDataCallback)() /* I: データ受信コールバック */, void (*nCntrlCallback)(int, ...) ) /* I: 制御コールバック */
   
関数: SL_AddClient
説明: ネットワーク接続テーブルにクライアントとしてエントリを追加します。ソケット作成と接続はカーネルの裁量に委ねます。
スレッドセーフ: いいえ。API 関数は同時に1スレッドのみ許可します。
戻り値: >= 0 - チャンネル ID。
-1 - エラー。Errno を参照してください。
E_NOMEM - メモリが枯渇しました。
E_EXISTS - 同じ内容のクライアントがすでに存在します。
プロトタイプ: int SL_AddClient( UINT nServerPortNo /* I: 通信に使用するサーバーポート */, ULNG lServerIPaddr /* I: サーバー IP アドレス */, UCHAR *szServerName /* I: サーバー名 */, void (*nDataCallback)() /* I: データ受信コールバック */, void (*nCntrlCallback)(int, ...) ) /* I: 制御コールバック */
   
関数: SL_AddTimerCB
説明: タイマーコールバックを追加します。タイマーコールバックとは、一定時間後に呼び出される関数です。この関数は、一度だけ呼び出す(TCB_ONESHOT)、Xミリ秒ごとに呼び出す(TCB_ASTABLE)、または最終実行から固定時間 Xミリ秒後に呼び出す(TCB_FLIPFLOP)ことができます。各コールバックには定義済みの変数またはポインタを渡せるため、同じコールバック関数の複数のインスタンスを、それぞれ異なる値を渡す形で共存させることが可能です。コールバックは動的リンクリストで管理されます。
スレッドセーフ: いいえ。API 関数は同時に1スレッドのみ許可します。
戻り値: R_OK - コールバックを正常に追加しました。
R_FAIL - 失敗。Errno を参照してください。
E_NOMEM - メモリが枯渇しました。
プロトタイプ: int SL_AddTimerCB( ULNG lTimePeriod, /* I: コールバック間隔 */, UINT nOptions /* I: コールバックのオプションフラグ */, ULNG lCBData /* I: コールバックに渡すデータ */, void (*nCallback)() ) /* I: 呼び出す関数 */
   
関数: SL_DelServer
説明: ネットワーク接続テーブルからエントリを削除し、それに関連する実際の通信を無効化します。
スレッドセーフ: いいえ。API 関数は同時に1スレッドのみ許可します。
戻り値: R_OK - 正常に削除されました。
R_FAIL - エラー。Errno を参照してください。
E_BADPARM - 不正なパラメータが渡されました。
プロトタイプ: int SL_DelServer( UINT nPortNo ) /* I: サーバーが使用しているポート番号 */
   
関数: SL_DelClient
説明: ネットワーク接続テーブルからクライアントエントリを削除し、使用していたすべてのリソースを解放します。
スレッドセーフ: いいえ。API 関数は同時に1スレッドのみ許可します。
戻り値: R_OK - クライアント接続を正常に閉じました。
R_FAIL - エラー。Errno を参照してください。
 
プロトタイプ: int SL_DelClient( UINT nChanId ) /* I: 削除するクライアントのチャンネル ID */
   
関数: SL_Close
説明: 指定されたチャンネル ID に基づいてソケット接続(クライアントまたはサーバー)を閉じます。ソケットライブラリの性質上、これを即座に実行することはできません。なぜなら、クローズを要求するアプリケーションはほぼ常にソケットライブラリのコールバック内にあり、その状態で内部構造を変更することは危険を伴うためです。
スレッドセーフ: いいえ。API 関数は同時に1スレッドのみ許可します。
戻り値: なし。
プロトタイプ: int SL_Close( UINT nChanId ) /* I: 閉じるチャンネル ID */
   
関数: SL_SendData
説明: チャンネル ID で識別された指定の宛先にデータパケットを送信します。
スレッドセーフ: いいえ。API 関数は同時に1スレッドのみ許可します。
戻り値: R_OK - データを正常に送信しました。
R_FAIL - データを送信できませんでした。Errno を参照してください。
E_INVCHANID - 無効なチャンネル ID。
E_BUSY - チャンネルが使用中です。後で再試行してください。
E_BADSOCKET - ソケットの内部障害。致命的エラー。
E_NOSERVICE - リモート接続がまだ確立されていません。
プロトタイプ: int SL_SendData( UINT nChanId /* I: データを送信するチャンネル ID */, UCHAR *szData /* I: 送信するデータ */, UINT nDataLen ) /* I: データの長さ */
   
関数: SL_BlockSendData
説明: 指定された宛先にデータパケットを送信し、終了前に確実に送信されることを保証します。エラーが発生した場合は呼び出し元に返します。
スレッドセーフ: いいえ。API 関数は同時に1スレッドのみ許可します。
戻り値: R_OK - データを正常に送信しました。
R_FAIL - データを送信できませんでした。Errno を参照してください。
E_INVCHANID - 無効なチャンネル ID。
E_BADSOCKET - ソケットの内部障害。致命的エラー。
E_NOSERVICE - リモート接続がまだ確立されていません。
プロトタイプ: int SL_BlockSendData( UINT nChanId /* I: データを送信するチャンネル ID */, UCHAR *szData /* I: 送信するデータ */, UINT nDataLen ) /* I: データの長さ */
   
関数: SL_Poll
説明: UX に CPU 制御を渡すことができないプログラム向けの関数。このポーリング関数を頻繁に呼び出すことで、このような種類のアプリケーションが通信処理を行えるようにします。
スレッドセーフ: いいえ。API 関数は同時に1スレッドのみ許可します。
戻り値: R_OK - システムがシャットダウン中です。R_FAIL - 重大な障害。Errno を参照してください。
 
プロトタイプ: int SL_Poll( ULNG lSleepTime )
   
関数: SL_Kernel
説明: アプリケーションのプロセス制御がこの関数に委ねられ、時間とイベントの割り当て・管理を行います。アプリケーションはこのライブラリにコールバックを登録し、イベントが発生したり時間が経過したりするとそれらが呼び出されます。アプリケーションの完了とともに制御がこの関数から戻ります。
スレッドセーフ: いいえ。メインスレッドまたは1つの制御スレッドを想定しています。
戻り値: R_OK - システムがシャットダウン中です。
R_FAIL - 重大な障害。Errno を参照してください。
 
プロトタイプ: int SL_Kernel( void )

ux_lgr

汎用スタンドアロン(プログラム可能な)ロギングユーティリティ。

   
関数: Lgr
説明: メッセージをフラットファイル、データベース、またはその両方に記録する関数。
戻り値: なし。
プロトタイプ: void Lgr( int nLevel /* I: エラーメッセージのレベルまたはコマンド */, ... ) /* I: 可変引数 */

ux_linkl

リンクリストの作成・削除・検索などを行うリンクリスト関数ライブラリ。

   
関数: AddItem
説明: リンクリストを構成するシンプルなメカニズム。リンクは片方向のみで、アイテムはリストの末尾にのみ追加されます。
戻り値: R_OK - アイテムを正常に追加しました。
R_FAIL - 追加に失敗しました。Errno を参照してください。
E_NOMEM - メモリが枯渇しました。
E_BADHEAD - ヘッドポインタが不正です。
E_BADTAIL - テールポインタが不正です。
E_NOKEY - 検索キーが提供されていません。
プロトタイプ: int AddItem( LINKLIST **spHead /* IO: リストの先頭へのポインタ */, LINKLIST **spTail /* IO: リストの末尾へのポインタ */, int nMode /* I: リンクへの追加モード */, UINT *nKey /* I: 整数型検索キー */, ULNG *lKey /* I: long 型検索キー */, UCHAR *szKey /* I: 文字列型検索キー */, void *spData ) /* I: 保持データのアドレス */
   
関数: DelItem
説明: 指定されたリンクリストから要素を削除します。保持されているデータは解放されません。呼び出し元が割り当てたものであるため、解放は呼び出し元の責任です。
戻り値: R_OK - アイテムを正常に削除しました。
R_FAIL - 削除に失敗しました。Errno を参照してください。
E_BADHEAD - ヘッドポインタが不正です。
E_BADTAIL - テールポインタが不正です。
E_MEMFREE - システムプールへのメモリ解放に失敗しました。
E_NOKEY - 検索キーが提供されていません。
プロトタイプ: int DelItem( LINKLIST **spHead /* IO: リストの先頭へのポインタ */, LINKLIST **spTail /* IO: リストの末尾へのポインタ */, void *spKey /* I: アイテムのアドレス(直接更新) */, UINT *nKey /* I: 整数型検索キー */, ULNG *lKey /* I: long 型検索キー */, UCHAR *szKey ) /* I: 文字列型検索キー */
   
関数: FindItem
説明: 指定されたリンクリストから要素を検索します。
戻り値: NOTNULL - アイテムが見つかりました。アドレスを返します。
NULL - アイテムが見つかりません。Errno を参照してください。
E_BADHEAD - ヘッドポインタが不正です。
E_BADTAIL - テールポインタが不正です。
E_NOKEY - 検索キーが提供されていません。
プロトタイプ: void *FindItem( LINKLIST *spHead /* I: リストの先頭へのポインタ */, UINT *nKey /* I: 整数型検索キー */, ULNG *lKey /* I: long 型検索キー */, UCHAR *szKey ) /* I: 文字列型検索キー */
   
関数: StartItem
説明: リスト全体をスキャンするためのポインタを設定します。リストの先頭にある「データアイテム」を呼び出し元に返します。
戻り値: NOTNULL - アイテムが見つかりました。アドレスを返します。
NULL - アイテムが見つかりません。Errno を参照してください。
E_BADHEAD - ヘッドポインタが不正です。
プロトタイプ: void *StartItem( LINKLIST *spHead /* I: リストの先頭へのポインタ */, LINKLIST **spNext ) /* O: リスト内の次のアイテムへのポインタ */
   
関数: NextItem
説明: 指定されたリストの次のアイテムに移動します。現在の「データアイテム」を呼び出し元に返します。
戻り値: NOTNULL - アイテムが見つかりました。アドレスを返します。
NULL - アイテムが見つかりません。Errno を参照してください。
E_BADPARM - 不正なパラメータが渡されました。
プロトタイプ: void *NextItem( LINKLIST **spNext ) /* O: リスト内の次のアイテムへのポインタ */
   
関数: MergeLists
説明: 2つのリストを結合します。ソースリストがターゲットリストにマージされます。必要に応じてリストは再ソートされます。
戻り値: R_OK - アイテムを正常に追加しました。
R_FAIL - 追加に失敗しました。Errno を参照してください。
E_NOMEM - メモリが枯渇しました。
E_BADHEAD - ヘッドポインタが不正です。
E_BADTAIL - テールポインタが不正です。
E_NOKEY - 検索キーが提供されていません。
プロトタイプ: int MergeLists( LINKLIST **spDstHead, /* IO: 宛先リストの先頭へのポインタ */, LINKLIST **spDstTail /* IO: 宛先リストの末尾へのポインタ */, LINKLIST *spSrcHead /* I: ソースリストの先頭へのポインタ */, LINKLIST *spSrcTail /* I: ソースリストの末尾へのポインタ */, int nMode ) /* I: リストのマージモード */
   
関数: DelList
説明: リスト全体を削除し、リストおよびその中に保持されているデータが使用するメモリを解放します。
戻り値: R_OK - リストを正常に削除しました。
R_FAIL - リストの削除に失敗しました。Errno を参照してください。
E_BADHEAD - ヘッドポインタが不正です。
E_BADTAIL - テールポインタが不正です。
プロトタイプ: int DelList( LINKLIST **spHead /* IO: リストの先頭へのポインタ */, LINKLIST **spTail ) /* IO: リストの末尾へのポインタ */
   
関数: SizeList
説明: 指定されたリストをスキャンして要素の総数を求めます。
戻り値: R_OK - リストのサイズを計算しました。
R_FAIL - リストのサイズの計算に失敗しました。Errno を参照してください。
E_BADHEAD - ヘッドポインタが不正です。
プロトタイプ: int SizeList( LINKLIST *spHead /* I: リストの先頭へのポインタ */, UINT *nCnt ) /* O: リスト内の要素数 */

ux_mon

インタラクティブモニター機能。これらの機能を組み込んだ実行中のアプリケーションに対して、ユーザーが発行できる一連のインタラクティブコマンド(HTML または自然言語)を提供します。

   
関数: _ML_HTMLDefaultCB
説明: HTML インタープリターのデフォルトハンドラー。基本的に「未実装」メッセージをクライアントに送信します。
戻り値: なし。
プロトタイプ: int _ML_HTMLDefaultCB( UINT nChanId /* I: クライアントへの送信 ID*/, UCHAR *szData /* I: データバッファ */, UINT nDataLen ) /* I: データバッファの長さ */
   
関数: _ML_InterpretHTMLRequest
説明: 外部クライアント(Web ブラウザなど)からのバッファに HTML リクエストが含まれています。比較と推論によって一連のアクションに解釈します。
戻り値: なし。
プロトタイプ: UINT _ML_InterpretHTMLRequest( ML_MONLIST *spMon /* I: モニター記述 */, ML_CONLIST *spCon /* I: 接続記述 */, UCHAR *szData ) /* I: コマンドバッファ */
   
関数: _ML_InterpretNLRequest
説明: 外部クライアントからのバッファに自然言語コマンドリクエストが含まれています。比較によって一連のアクションに解釈します。
戻り値: なし。
プロトタイプ: UINT _ML_InterpretNLRequest( ML_MONLIST *spMon /* I: モニター記述 */, ML_CONLIST *spCon /* I: 接続記述 */, UCHAR *szData ) /* I: コマンドバッファ */
   
関数: _ML_MonitorCB
説明: 外部クライアントがコマンドを発行している際、コマンドデータはこの関数に配信され処理されます。
戻り値: なし。
プロトタイプ: void _ML_MonitorCB( UINT nChanId /* I: データを受信したチャンネル */, UCHAR *szData /* I: データを含むバッファ */, UINT nDLen ) /* I: バッファ内のデータ長 */
   
関数: _ML_MonitorCntrl
説明: インタラクティブモニター制御関数。外部クライアントとの接続が確立または切断されたとき、この関数が処理を要求されます。
戻り値: なし。
プロトタイプ: void _ML_MonitorCntrl( int nType /* I: コールバックの種類 */, ... ) /* I: 種類に応じた引数リスト */
   
関数: _ML_MonTerminate
説明: プログラム自身を終了させるインタラクティブモニターコマンド。
戻り値: なし。
プロトタイプ: int _ML_MonTerminate( UINT nChanId /* I: IM セッションへのチャンネル */, UCHAR *szBuf /* I: 入力行の残余部分 */, UINT nBufLen ) /* I: 入力行の長さ */
   
関数: ML_Init
説明: リモートユーザーがこの実行中プログラムに接続してコマンドを発行できるようにするための機能をすべて初期化します。
戻り値: なし。
プロトタイプ: int ML_Init( UINT nMonPort /* I: モニターサービスのポート */, UINT nServiceType /* I: モニターサービスの種類(HTML など) */, UCHAR *szServerName /* I: HTTP サーバー名レスポンス */, int (*nConnectCB)() /* I: クライアント接続時のコールバック */, int (*nDisconCB)() /* I: クライアント切断時のコールバック */, int (*nInterpretOvr)()) /* I: 組み込みインタープリターオーバーライド関数 */
   
関数: ML_Exit
説明: プログラム終了または再初期化に備えてモニターモジュールを解体します。
戻り値: R_OK - 正常に終了しました。
R_FAIL - 終了処理を実行できませんでした。errno を参照してください。
 
プロトタイプ: int ML_Exit( UCHAR *szErrMsg ) /* O: エラーメッセージバッファ */
   
関数: ML_Send
説明: 指定されたリモートセッションにデータを送信します。
戻り値: なし。
プロトタイプ: int ML_Send( UINT nChanId /* I: IM セッションへのチャンネル */, UCHAR *szBuf /* I: 送信データ */, UINT nBufLen ) /* I: 送信データの長さ */
   
関数: ML_AddMonCommand
説明: インタラクティブモニターの認識済み予約語データベースにコマンドを追加します。外部ユーザーからコマンドが届いたとき、予約語リストと照合して検証・識別します。
戻り値: R_OK - コマンドを追加しました。
R_FAIL - コマンドを追加できませんでした。errno を参照してください。
 
プロトタイプ: int ML_AddMonCommand( UINT nMonPort /* I: サービスモニターポート */, UCHAR *szCommand /* I: テキスト形式のコマンド */, int (*nCallback)()) /* I: コマンドコールバック */
   
関数: ML_DelMonCommand
説明: モニターチャンネルの認識済み単語データベースで現在アクティブなコマンドを削除します。
戻り値: R_OK - コマンドを削除しました。
R_FAIL - コマンドを削除できませんでした。errno を参照してください。
 
プロトタイプ: int ML_DelMonCommand( UINT nMonPort, /* I: サービスモニターポート */, UCHAR *szCommand ) /* I: 削除するコマンド */
   
関数: ML_Broadcast
説明: リッスン中のすべてのモニタープロセスにメッセージをブロードキャストします。
戻り値: R_OK - 一部またはすべてに正常に送信しました。
R_FAIL - どこにも送信できませんでした。Errno を参照してください。
 
プロトタイプ: int ML_Broadcast( UCHAR *szData /* I: 送信するデータ */, UINT nDataLen ) /* I: データの長さ */

ux_str

汎用文字列処理関数。C ライブラリに存在する関数への追加機能。

   
関数: PutCharFromLong
説明: long 型変数を既知のバイト順序で文字バッファに配置します。例えば long は 32 ビットであり、MSB (3)、2、1、LSB (0) の順で文字バッファに配置されます。MSB はバッファの先頭バイトに入ります。
戻り値: R_OK - 失敗することはありません……そう思っていたいところですが。
プロトタイプ: int PutCharFromLong( UCHAR *pDestBuf /* O: 宛先バッファ */, ULNG lVar ) /* I: long 型変数 */
   
関数: PutCharFromInt
説明: int 型変数を既知のバイト順序で文字バッファに配置します。例えば int は 16 ビットであり、MSB (1)、LSB (0) の順で文字バッファに配置されます。MSB はバッファの先頭バイトに入ります。
戻り値: R_OK - 失敗することはありません……上記コメント参照。
プロトタイプ: int PutCharFromInt( UCHAR *pDestBuf /* O: 宛先バッファ */, UINT lVar ) /* I: int 型変数 */
   
関数: GetLongFromChar
説明: 文字バッファから long 型変数を取得します。バッファ内のバイト順序は 32 ビット、MSB(3)、2、1、LSB(0) であると仮定し、MSB はバッファの先頭バイトに入ります。
戻り値: R_OK - 失敗することはありません……そう思っていたいところですが。
プロトタイプ: ULNG GetLongFromChar( UCHAR *pDestBuf ) /* I: 変換するソースバッファ */
   
関数: GetIntFromChar
説明: 文字バッファから long 型変数を取得します。バッファ内のバイト順序は 16 ビット、MSB(1)、LSB(0) であると仮定し、MSB はバッファの先頭バイトに入ります。
戻り値: R_OK - 失敗することはありません……そう思っていたいところですが。
プロトタイプ: UINT GetIntFromChar( UCHAR *pDestBuf ) /* I: 変換するソースバッファ */
   
関数: StrPut
説明: 文字列を別の文字列の中に配置します。strcpy と同じですが、宛先文字列を終端しません。
戻り値: R_OK - 失敗することはありません……そう思っていたいところですが。
プロトタイプ: UINT StrPut( UCHAR *spDestBuf /* I: コピー先バッファ */, UCHAR *spSrcBuf /* I: コピー元バッファ */, UINT nBytes ) /* I: コピーするバイト数 */
   
関数: FFwdOverWhiteSpace
説明: 入力バッファ内の空白文字を超えてポインタを前進させます。
戻り値: なし。
プロトタイプ: void FFwdOverWhiteSpace( UCHAR *szInBuf /* I: 入力データバッファ */, UINT *nPos ) /* IO: バッファ内の開始位置と終了位置 */
   
関数: ParseForToken
説明: 入力バッファから次のトークンを解析します。トークンには、英字・英数字の単語、数値、単一文字、または文字列が含まれます。
戻り値: 検出されたトークンの種類。
プロトタイプ: UINT ParseForToken( UCHAR *szInBuf /* I: 入力バッファ */, UINT *nPos /* IO: バッファ内の現在位置 */, UCHAR *szTokBuf ) /* O: トークン出力バッファ */
   
関数: ParseForString
説明: 入力バッファから次の有効な文字列を取得します。
戻り値: なし。
プロトタイプ: int ParseForString( UCHAR *szInBuf /* I: 入力バッファ */, UINT *nPos /* I: 入力バッファ内の位置 */, UCHAR *szOutBuf ) /* O: 文字列の格納先バッファ */
   
関数: ParseForInteger
説明: 入力バッファから次の有効な整数を取得します。
戻り値: なし。
プロトタイプ: int ParseForInteger( UCHAR *szInBuf /* I: 入力バッファ */, UINT *nPos /* I: 入力バッファ内の位置 */, UINT *nMin /* I: 許容最小値 */, UINT *nMax /* I: 許容最大値 */, int *pOutInt ) /* O: 整数の格納先バッファ */
   
関数: ParseForLong
説明: 入力バッファから次の有効な Long 値を取得します。
戻り値: なし。
プロトタイプ: int ParseForLong( UCHAR *szInBuf /* I: 入力バッファ */, UINT *nPos /* I: 入力バッファ内の位置 */, long *lMin /* I: 許容最小値 */, long *lMax /* I: 許容最大値 */, long *pOutLong ) /* O: Long 値の格納先バッファ */
   
関数: StrRTrim
説明: 指定された文字列の末尾にある空白をすべて除去する関数。ヌル終端文字列の末尾から始め、最初の非空白文字を探します。その新しい位置にヌル終端文字を配置します。
戻り値: 新しい文字列へのポインタ。
プロトタイプ: char *StrRTrim( char *szSrc ) /* IO: トリムするベース文字列 */
   
関数: StrCaseCmp
説明: 文字の大小に関わらず文字列比較を実行する関数。主にそのような機能を持たないオペレーティングシステム向けに提供されています。
戻り値: 0 - 文字列が一致しました。
> 0
< 0
プロトタイプ: int StrCaseCmp( const char *szSrc /* I: 比較基準のベース文字列 */, const char *szCmp ) /* I: 比較対象文字列 */
   
関数: StrnCaseCmp
説明: 両文字列の指定バイト数分について、文字の大小に関わらず文字列比較を実行する関数。主にそのような機能を持たないオペレーティングシステム向けに提供されています。
戻り値: 0 - 文字列が一致しました。
> 0
< 0
プロトタイプ: int StrnCaseCmp( const char *szSrc /* I: 比較基準のベース文字列 */, const char *szCmp /* I: 比較対象文字列 */, size_t nCount ) /* I: 比較するバイト数 */
   
関数: SplitFQFN
説明: 完全修飾ファイル名をディレクトリコンポーネントとファイル名コンポーネントに分割する関数。
戻り値: R_OK - ファイル名を分割しました。
R_FAIL - メモリなどのエラーにより分割できませんでした。
プロトタイプ: int SplitFQFN( char *szFQFN /* I: 完全修飾ファイル名 */, char **szDir /* O: ディレクトリコンポーネント */, char **szFN ) /* O: ファイル名コンポーネント */

UX テストプログラムの例

この例はリポジトリの ux_test フォルダにあります。

````c /**************************

  • Product: ####### ####### ##### ####### # # ####### # #
  • # # # # ## ## # # ##

  • # # # # # # # # # # #

  • ##### ##### # # # # # # # #

  • # # # # # # # # #

  • # # # # # # # # #

  • ####### ##### # ####### # # ####### #

    *

  • File: test_mon.c
  • Description: A Test Harness program specifically for testing out ux
  • monitor functionality. Ie the ability to add an interactive
  • monitor to any application. *
  • Version: %I%
  • Dated: %D%
  • Copyright: P.D. Smart, 1996-2019. *
  • History: 1.0 - Initial Release. * **************************
  • This source file is free software: you can redistribute it and#or modify
  • it under the terms of the GNU General Public License as published
  • by the Free Software Foundation, either version 3 of the License, or
  • (at your option) any later version. *
  • This source file is distributed in the hope that it will be useful,
  • but WITHOUT ANY WARRANTY; without even the implied warranty of
  • MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  • GNU General Public License for more details. *
  • You should have received a copy of the GNU General Public License
  • along with this program. If not, see http://www.gnu.org/licenses/. **************************/

/* システムヘッダファイルを読み込む。 */ #include #include #include #include #include

/* UX ヘッダファイルを読み込む。 */ #include

/* Solaris 向けの特別定義。 */ #if defined(SOLARIS) || defined(LINUX) || defined(ZPU) #include <sys/types.h> #endif

/* ヘッダの特定事項のために C モジュールであることを示す。 */ #define TEST_MON_C

/* ローカル固有のヘッダファイルを読み込む。 */ #include “test_mon.h”

/**************************

  • Function: _HTML_GetHandler
  • Description: デフォルトの HTML GET ハンドラーをオーバーライドするコールバック。
  • この関数はクライアントブラウザが要求するものを判断し、
  • それを満たそうとします。 *
  • Returns: R_OK - 設定を取得しました。
  • R_FAIL - 失敗。エラーメッセージを参照してください。 **************************/ int _HTML_GetHandler( UINT nChanId, /* I: 新規接続のチャンネル ID / UCHAR *szData, / I: WWW が受信したデータ / UINT nMonPort ) / I: モニターポート番号 / { / ローカル変数。 */ int nCnt=0; int nChar; UINT nPos = 0; UINT nTokType; UCHAR *spEndStr; UCHAR *spMsgBuf = NULL; UCHAR szFileName[MAX_FILENAMELEN+1]; char *szFunc = “_HTML_GetHandler”; FILE *fp;
/* この接続の詳細を示すデバッグメッセージをログに記録する。
*/
Lgr(LOG_DEBUG, szFunc,
    "GET Handler called: Data=%s, nChanId=%d, MonPort=%d\n",
    szData, nChanId, nMonPort);

/* HTML コンテンツタイプを設定する。
*/
ML_Send(nChanId, "Content-type: text/html\n\n", 0);

/* ブラウザのストリーム終端として認識される HTTP/バージョンをバッファから検索する。
 * 存在しない場合、クライアントにエラーメッセージを送信して終了する。
*/
if( (spMsgBuf=(UCHAR *)malloc((strlen(szData)*3)+1)) == NULL )
{
    /* メモリ枯渇により失敗して終了する。
    */
    ML_Send(nChanId, "<HTML><TITLE>Out of Memory</TITLE>"
            "Out of Memory, Re-Try Later</HTML>/n/n", 0);
    if(spMsgBuf != NULL) free(spMsgBuf);
    return(R_FAIL);
}
if((spEndStr=strstr(szData, "HTTP")) != NULL)
{
    /* 理解する必要があるコマンドはバッファの先頭から HTTP が始まる部分
     * までの間にある。それを抽出する。
    */
    FFwdOverWhiteSpace(szData, &nPos);
    strncpy(spMsgBuf, &szData[nPos], ((spEndStr - szData)-nPos));
    spMsgBuf[(spEndStr - szData)-nPos] = '\0';
} else
 {
    /* できることがないため、クライアントにエラーメッセージを送信する。
    */
    ML_Send(nChanId, "<HTML><TITLE>Illegal HTML</TITLE>"
            "The HTML that your browser issued is illegal, or it is from"
            " a newer version not supported by this product</HTML>\n\n", 0);
    return(R_FAIL);
}

/* 余分な部分を取り除いてファイルを開く。
*/
strcpy(szFileName, StrRTrim(spMsgBuf));
if((fp=fopen(szFileName, "r")) == NULL)
{
    sprintf(spMsgBuf, "<HTML><TITLE>Cannot access %s</TITLE>"
            "<H1>File Not Available</H1>\n"
            "The file requested (%s) cannot be accessed.</HTML>\n\n",
            szFileName, szFileName);
    ML_Send(nChanId, spMsgBuf, 0);
    return(R_FAIL);
} else
 {
    /* 簡素だが効果的。1 バイトずつ読み込み、HTML 構造に
     * 包んで送信する。
    */
    ML_Send(nChanId, "<HTML>\n<BODY><PRE>\n", 0);
    spMsgBuf[1]='\0';
    while((nChar=fgetc(fp)) != EOF)
    {
    nCnt++;
        spMsgBuf[0]=nChar;
        ML_Send(nChanId, spMsgBuf, 1);
    }
    ML_Send(nChanId, "</PRE></BODY></HTML>", 0);
    fclose(fp);
}

/* 完了、終了!
*/
return(R_OK); }

/**************************

  • Function: _HTML_ConnectCB
  • Description: 着信した WWW ブラウザが接続を確立したときのコールバック。 *
  • Returns: R_OK - 設定を取得しました。
  • R_FAIL - 失敗。エラーメッセージを参照してください。 **************************/ int _HTML_ConnectCB( UINT nChanId, /* I: 新規接続のチャンネル ID / UINT nMonPort ) / I: モニターポート番号 / { / ローカル変数。 */ char *szFunc = “_HTML_ConnectCB”;
/* この接続の詳細を示すデバッグメッセージをログに記録する。
*/
Lgr(LOG_DEBUG, szFunc, "New Connection: ChanID=%d, MonPort=%d\n",
    nChanId, nMonPort);

/* 完了、終了!
*/
return; }

/**************************

  • Function: _HTML_DisconnectCB
  • Description: 既存の WWW ブラウザ接続が切断されたときのコールバック。 *
  • Returns: R_OK - 設定を取得しました。
  • R_FAIL - 失敗。エラーメッセージを参照してください。 **************************/ int _HTML_DisconnectCB( UINT nChanId, /* I: 新規接続のチャンネル ID / UINT nMonPort ) / I: モニターポート番号 / { / ローカル変数。 */ char *szFunc = “_HTML_DisconnectCB”;
/* この接続の詳細を示すデバッグメッセージをログに記録する。
*/
Lgr(LOG_DEBUG, szFunc, "Connection Closed: ChanID=%d, MonPort=%d\n",
    nChanId, nMonPort);

/* 完了、終了!
*/
return; }

/**************************

  • Function: _NL_HelpHandler
  • Description: 自然言語コマンドインターフェースに HELP 機能を実装するコールバック。
  • このコマンドはコマンドの引数に応じてグローバルまたは
  • 個別のヘルプを一覧表示し、クライアントに返送します。 *
  • Returns: R_OK - 設定を取得しました。
  • R_FAIL - 失敗。エラーメッセージを参照してください。 **************************/ int _NL_HelpHandler( UINT nChanId, /* I: 新規接続のチャンネル ID / UCHAR *szData, / I: WWW が受信したデータ / UINT nMonPort ) / I: モニターポート番号 / { / ローカル変数。 */ char *szFunc = “_NL_HelpHandler”;
/* この接続の詳細を示すデバッグメッセージをログに記録する。
*/
Lgr(LOG_DEBUG, szFunc,
    "Help Handler called: Data=%s, nChanId=%d, MonPort=%d\n",
    szData, nChanId, nMonPort);

/* 完了、終了!
*/
return(R_OK); }

/**************************

  • Function: _NL_ConnectCB
  • Description: 着信した WWW ブラウザが接続を確立したときのコールバック。 *
  • Returns: R_OK - 設定を取得しました。
  • R_FAIL - 失敗。エラーメッセージを参照してください。 **************************/ int _NL_ConnectCB( UINT nChanId, /* I: 新規接続のチャンネル ID / UINT nMonPort ) / I: モニターポート番号 / { / ローカル変数。 */ char *szFunc = “_NL_ConnectCB”;
/* この接続の詳細を示すデバッグメッセージをログに記録する。
*/
Lgr(LOG_DEBUG, szFunc, "New Connection: ChanID=%d, MonPort=%d\n",
    nChanId, nMonPort);

/* 完了、終了!
*/
return; }

/**************************

  • Function: _NL_DisconnectCB
  • Description: 既存の WWW ブラウザ接続が切断されたときのコールバック。 *
  • Returns: R_OK - 設定を取得しました。
  • R_FAIL - 失敗。エラーメッセージを参照してください。 **************************/ int _NL_DisconnectCB( UINT nChanId, /* I: 新規接続のチャンネル ID / UINT nMonPort ) / I: モニターポート番号 / { / ローカル変数。 */ char *szFunc = “_NL_DisconnectCB”;
/* この接続の詳細を示すデバッグメッセージをログに記録する。
*/
Lgr(LOG_DEBUG, szFunc, "Connection Closed: ChanID=%d, MonPort=%d\n",
    nChanId, nMonPort);

/* 完了、終了!
*/
return; }

/**************************

  • Function: GetConfig
  • Description: OS またはコマンドラインフラグから設定情報を取得する。 *
  • Returns: R_OK - 設定を取得しました。
  • R_FAIL - 失敗。エラーメッセージを参照してください。 **************************/ int GetConfig( int argc, /* I: CLI 引数の数 / UCHAR **argv, / I: CLI 引数の内容 / char **envp, / I: 環境変数 / UCHAR *szErrMsg ) / O: 生成されたエラーメッセージ / { / ローカル変数。 */ int nReturn = R_OK; FILE *fp; UCHAR *szFunc = “GetConfig”;
/* ユーザーがログファイルを使用するかどうかを確認する。
*/
if( GetCLIParam(argc, argv, FLG_LOGFILE, T_STR, TMON.szLogFile,
                MAX_LOGFILELEN, FALSE) == R_OK )
{
    /* ファイル名が有効かどうかを確認する。
    */
    if((fp=fopen(TMON.szLogFile, "a")) == NULL)
    {
        sprintf(szErrMsg, "Cannot write to logfile (%s)", TMON.szLogFile);
        return(R_FAIL);
    }

    /* テスト完了のためファイルを閉じる。
    */
    fclose(fp);
} else
 {
    /* OS に応じたデフォルトのログファイルを設定する。
    */
    strcpy(TMON.szLogFile, DEF_LOGFILE);
}

/* コマンドラインからログモードを取得する。
*/
if(GetCLIParam(argc, argv, FLG_LOGMODE, T_INT, (UCHAR *)&TMON.nLogMode,
               0, 0) == R_OK)
{
    /* モードの妥当性を確認する。
    */
    if((TMON.nLogMode < LOG_OFF || TMON.nLogMode > LOG_FATAL) &&
        TMON.nLogMode != LOG_CONFIG)
    {
        sprintf(szErrMsg, "Illegal Logger mode (%d)", TMON.nLogMode);
        return(R_FAIL);
    }
} else
 {
    /* デフォルトのログモードを設定する。
    */
    TMON.nLogMode = LOG_DEBUG;
}

/* HTML モニタリングに使用するポートを取得する。
*/
if(GetCLIParam(argc, argv, FLG_HTMLPORT, T_INT, (UCHAR *)&TMON.nHtmlPort,
               0, 0) == R_OK)
{
    /* ポートの妥当性を確認する。
    */
    if((TMON.nHtmlPort < 2000 || TMON.nHtmlPort > 10000))
    {
        sprintf(szErrMsg, "Illegal HTML TCP Port (%d)", TMON.nHtmlPort);
        return(R_FAIL);
    }
} else
 {
    /* デフォルトポートを設定する。
    */
    TMON.nHtmlPort = DEF_HTML_PORT;
}

/* HTML モニタリングに使用するポートを取得する。
*/
if(GetCLIParam(argc, argv, FLG_NLPORT, T_INT, (UCHAR *)&TMON.nNLPort,
               0, 0) == R_OK)
{
    /* ポートの妥当性を確認する。
    */
    if((TMON.nNLPort < 2000 || TMON.nNLPort > 10000))
    {
        sprintf(szErrMsg, "Illegal Natural Language TCP Port (%d)",
                TMON.nNLPort);
        return(R_FAIL);
    }
} else
 {
    /* デフォルトポートを設定する。
    */
    TMON.nNLPort = DEF_NL_PORT;
}

/* 完了、終了!
*/
return( nReturn ); }

/**************************

SDD ライブラリ

サーバー・データソース・ドライバー・ライブラリ(SDD)は、データソースと通信するための API セットです。現在、以下のドライバーが実装されています:

  • オーディオ再生 - 厳密にはデータソースではなくデータターゲットですが、SDD ライブラリは双方向の性質を持ちます。
  • FTP - ファイル転送プロトコル(FTP)を介してリモートソースとのデータ送受信を可能にします。
  • Java - データの提供と受信のためにリモートソース上で Java プログラムを実行できます。データソースが標準的でない場合に有用です。
  • ODBC - Open Database Connectivity ドライバーがサポートするすべてのデータベースへの接続を可能にします。
  • SCMD - システムコマンド。リモートサーバー上で Linux、Solaris、Windows のシステムコマンドを実行してデータの抽出や受信ができます。
  • SYBC - Sybase データベース。データの格納と抽出のために Sybase データベースへのネイティブ接続を可能にします。

追加のドライバーは templates/ ディレクトリにあるテンプレートを使用して作成できます。

ドライバーは MDC 層を通じて、または特定のデータソースを使用したいアプリケーション(例:SCMD ドライバーを介してリモートサーバーにコマンドを発行する管理アプリケーション — Ansible の初期版とも言えます)から直接開くことができます。

SDD ライブラリのメソッドは、それぞれが属するドライバーごとに分類して以下に説明します。メソッド名が「_」で始まる場合は内部メソッドであり、通常は直接呼び出しません。ただし C 言語の性質上、メソッドやデータに対するプライベート定義は存在しないため、必要であれば呼び出すことも可能です。

オーディオドライバー sdd_aupl

   
関数: _AUPL_GetStrArg
説明: 入力バッファをスキャンして、文字列ベースの引数を抽出する関数。
戻り値: SDD_FAIL- 引数を取得できませんでした。
SDD_OK - 引数を取得しました。
プロトタイプ: int _AUPL_GetStrArg( UCHAR *snzDataBuf /* I: Input buffer */, int nDataLen /* I: Len of data */, UCHAR *szArg /* I: Arg to look for */, UCHAR **pszPath ) /* O: Pointer to argument */
   
関数: _AUPL_ValidatePath
説明: パスの存在を検証する関数。
戻り値: SDD_FAIL- PATH を検証できませんでした。
SDD_OK - PATH を検証しました。
プロトタイプ: int _AUPL_ValidatePath( UCHAR *pszPath ) /* I: Path to validate */
   
関数: _AUPL_ValidateFile
説明: ファイルの存在を検証する、またはファイルが作成可能であることを検証する関数。
戻り値: SDD_FAIL- ファイル名を取得または検証できませんでした。
SDD_OK - ファイル名を取得して検証しました。
プロトタイプ: int _AUPL_ValidateFile( UCHAR *pszPath /* I: Path to file */, UCHAR *pszFile /* I: File to validate */, UINT nWriteFlag ) /* I: Read = 0, Write = 1 */
   
関数: _AUPL_PlayZ
説明: 圧縮されたオーディオファイルを再生する関数。子プロセスを起動してアタッチする方式を採用しています。子プロセスが実際の展開処理を行い、標準出力を通じてデータを親プロセスの標準入力にフィードバックします。データはラウンドロビン方式でバッファリングされ、オーディオ DSP ハードウェアに供給されます。
戻り値: SDD_FAIL- 実行中にコマンドが失敗しました。
SDD_OK - コマンドが正常に実行されました。
プロトタイプ: int _AUPL_PlayZ( UCHAR *pszAudioPath /* I: Path to Audio File */, UCHAR *pszAudioFile /* I: Audio Filename */, int (*fSendDataCB)(UCHAR *, UINT) /* I: Func for returning data */, UCHAR *szErrMsg ) /* O: Error message generated */jjjjj
   
関数: aupl_InitService
説明: ドライバーを定義済みの状態に初期化するエントリーポイント。ドライバーが正しく機能するために、他のすべての関数の前にこの関数を呼び出すことが必須です。呼び出し元は 2 種類のデータを提供します。1) 自己初期化に使用するデータを含む構造体、2) 初期化を完了できない場合にドライバーがエラーメッセージを格納するバッファへのポインター。
戻り値: SDD_FAIL- ドライバーの初期化中にエラーが発生し、szErrStr にエラーメッセージが格納されています。
SDD_OK - ドライバーが正常に初期化されました。
プロトタイプ: int aupl_InitService( SERVICEDETAILS *sServiceDet /* I: Init data */, UCHAR *szErrStr ) /* O: Error message */
   
関数: aupl_CloseService
説明: ドライバーのクローズダウンを実行するエントリーポイント。クローズダウン手順により、ドライバーは初期状態(電源投入時のような状態)に戻り、InitService を再度呼び出すことができます。
戻り値: SDD_FAIL- ドライバーのクローズ中にエラーが発生し、szErrStr にエラーメッセージが格納されています。
SDD_OK - ドライバーが正常にクローズされました。
プロトタイプ: int aupl_CloseService( UCHAR *szErrMsg ) /* O: Error message if failed */
   
関数: aupl_ProcessRequest
説明: ドライバーにリクエストの処理を開始させるためのドライバーへのエントリーポイント。リクエストと関連パラメーターを表すデータブロックがパラメーターとしてドライバーに渡されます。構造体内のデータは元のクライアントとこのドライバーコードにのみ関連します。
戻り値: SDD_FAIL- リクエストの処理中にドライバー内でエラーが発生しました。エラーテキストを参照してください。
SDD_OK - リクエストが正常に処理されました。
プロトタイプ: int aupl_ProcessRequest( UCHAR *snzDataBuf /* I: Input data */, int nDataLen /* I: Len of data */, int (*fSendDataCB)(UCHAR *, UINT) /* I: CB to send reply*/, UCHAR *szErrMsg ) /* O: Error text */
   
関数: aupl_ProcessOOB
説明: 現在の動作状態に関連する可能性のある帯域外コマンドを処理するためのドライバーへのエントリーポイント。この関数の役割はコマンドを解読して即座に対応することです。例えば、キャンセルコマンドは処理中の ProcessRequest を中断してクリーンアップします。
戻り値: 戻り値なし。
プロトタイプ: void aupl_ProcessOOB( UCHAR nCommand ) /* I: OOB Command */

FTP プロトコルドライバー sdd_ftpx

   
関数: _FTPX_GetStrArg
説明: 入力バッファをスキャンして、文字列ベースの引数を抽出する関数。
戻り値: SDD_FAIL- 引数を取得できませんでした。
SDD_OK - 引数を取得しました。
プロトタイプ: int _FTPX_GetStrArg( UCHAR *snzDataBuf /* I: Input buffer */, int nDataLen /* I: Len of data */, UCHAR *szArg /* I: Arg to look for */, UCHAR **pszPath ) /* O: Pointer to argument */
   
関数: _FTPX_GetMode
説明: 入力バッファをスキャンして、呼び出し元が要求する FTP 動作モード(バイナリまたは ASCII)を判定する関数。モードが指定されていない場合はバイナリをデフォルトとします。
戻り値: モードフラグ - 1 = バイナリモードが選択されました。
- 0 = ASCII モードが選択されました。
プロトタイプ: int _FTPX_GetMode( UCHAR *snzDataBuf /* I: Input buffer */, int nDataLen ) /* I: Len of data */
   
関数: _FTPX_GetWriteData
説明: 入力バッファをスキャンし、データが含まれているか検証して、データを抽出してオープンしたファイルストリームに格納し、そのブロックが最終ブロックであれば開始フラグを設定する関数。
戻り値: SDD_FAIL- 不正なデータブロックまたはファイルへの書き込みエラー。
SDD_OK - ブロックを取得して格納しました。
プロトタイプ: int _FTPX_GetWriteData( UCHAR *snzDataBuf /* I: Input buffer */, int nDataLen /* I: Len of data */, FILE *fpFile /* IO: Opened file stream */, int *nLast /* O: Last block flag */, UCHAR *szErrMsg ) /* O: Any resultant error msg */
   
関数: _FTPX_PutReadData
説明: オープンしたストリームを読み取り、コールバックメカニズムを介してデータの内容を呼び出し元に送信する関数。
戻り値: SDD_FAIL- PATH を取得できませんでした。
SDD_OK - PATH を取得しました。
プロトタイプ: int _FTPX_PutReadData( FILE *fpFile /* I: Stream to read from */, int (*fSendDataCB)(UCHAR *, UINT) /* I: CB to send data to */, UCHAR *szErrMsg ) /* O: Error text */
   
関数: _FTPX_PIDataCB
説明: FTP サーバーから返される制御情報を処理する関数。
戻り値: 戻り値なし。
プロトタイプ: void _FTPX_PIDataCB( UINT nChanId /* I: Channel data arrived on */, UCHAR *szData /* I: Actual data */, UINT nDataLen ) /* I: Length of data */
   
関数: _FTPX_PICtrlCB
説明: FTP サーバーとの接続中に発生する制御コールバックを処理する関数。
戻り値: 戻り値なし。
プロトタイプ: void _FTPX_PICtrlCB( int nType /* I: Type of callback */, ... ) /* I: Var args */
   
関数: _FTPX_DTPDataCB
説明: データ転送接続で FTP サーバーから返されるデータを処理する関数。
戻り値: 戻り値なし。
プロトタイプ: void _FTPX_DTPDataCB( UINT nChanId /* I: Channel data arrived on */, UCHAR *szData /* I: Actual data */, UINT nDataLen ) /* I: Length of data */
   
関数: _FTPX_DTPCtrlCB
説明: FTP サーバーとのデータ転送接続における制御コールバックを処理する関数。
戻り値: 戻り値なし。
プロトタイプ: void _FTPX_DTPCtrlCB( int nType /* I: Type of callback */, ... ) /* I: Var args */
   
関数: _FTPX_PIGetResponse
説明: FTP サーバーからレスポンスコードを取得する関数。
戻り値: レスポンスコード。
プロトタイプ: int _FTPX_PIGetResponse( void )
   
関数: _FTPX_PISendCmd
説明: FTP サーバーにコマンドを送信する関数。
戻り値: SDD_FAIL - FTP サーバーが応答しませんでした。szErrMsg を参照してください。
SDD_OK - コマンドが正常に送信されました。
プロトタイプ: int _FTPX_PISendCmd( UCHAR *szCmd /* I: Command to send */, UINT *panReqResponses /* I: Array of req resp */, UCHAR *szErrMsg ) /* O: Error message */
   
関数: _FTPX_PIGetDTPResponse
説明: DTP 転送中のレスポンスコードを取得する関数。
戻り値: レスポンスコード。
プロトタイプ: int _FTPX_PIGetDTPResponse( void )
   
関数: _FTPX_PISendDTPCmd
説明: データ転送のための DTP チャネルを起動する FTP サーバーへのコマンドを送信する関数。
戻り値: SDD_FAIL - FTP サーバーが応答しませんでした。szErrMsg を参照してください。
SDD_OK - コマンドが正常に送信されました。
プロトタイプ: int _FTPX_PISendDTPCmd( UCHAR *szCmd /* I: Command to send */, UINT *panReqResponses /* I: Allowed responses */, UCHAR *szErrMsg ) /* O: Error message */
   
関数: _FTPX_SetMode
説明: FTP サーバーとドライバー間の転送モードを設定する関数。
戻り値: SDD_FAIL - 転送モードの設定に失敗しました。重大なエラーです。
SDD_OK - モードが設定されました。
プロトタイプ: int _FTPX_SetMode( UINT nBinaryMode /* I: Select binary mode = TRUE */, UCHAR *szErrMsg ) /* O: Generated error messages */
   
関数: _FTPX_SetCwd
説明: FTP サーバーのカレントワーキングディレクトリを設定する関数。
戻り値: SDD_FAIL - 指定されたディレクトリの設定に失敗しました。
SDD_OK - カレントワーキングディレクトリが設定されました。
プロトタイプ: int _FTPX_SetCwd( UCHAR *szPath /* I: Path to set CWD */, UCHAR *szErrMsg ) /* O: Generated error messages */
   
関数: _FTPX_FTPInit
説明: FTP サーバーとの接続を初期化する関数。呼び出し元はサーバーの名前または IP アドレス、および接続を完了するためのユーザー名とパスワードを提供します。
戻り値: SDD_FAIL - 指定された情報で接続を確立できませんでした。
SDD_OK - FTP 接続が確立されました。
プロトタイプ: int _FTPX_FTPInit( UCHAR *szFTPServer /* I: Name of FTP server */, UCHAR *szUserName /* I: User name to login with */, UCHAR *szPassword /* I: Password for login */, UCHAR *szErrMsg ) /* O: Error message if failed */
   
関数: _FTPX_FTPClose
説明: 接続中の FTP 接続をクローズして、次のタスクに備えて後処理を行う関数。
戻り値: SDD_FAIL - 正常にクローズできませんでした。ライブラリは再使用できません。
SDD_OK - クローズしました。
プロトタイプ: int _FTPX_FTPClose( UCHAR *szErrMsg ) /* O: Generated error messages */
   
関数: _FTPX_FTPRenFile
説明: リモート FTP サーバー上のファイルの名前を変更する関数。
戻り値: SDD_FAIL - 指定されたファイルの名前変更に失敗しました。
SDD_OK - ファイルの名前が正常に変更されました。
プロトタイプ: int _FTPX_FTPRenFile( UCHAR *szPath /* I: Path to remote file */, UCHAR *szSrcFile /* I: Original remote file name */, UCHAR *szDstFile /* I: New remote file name */, UCHAR *szErrMsg ) /* O: Generated error messages */
   
関数: _FTPX_FTPRcvFile
説明: FTP サーバーから現在のマシンのファイルシステムへのファイル転送を開始する関数。
戻り値: SDD_FAIL - ファイル転送を完了できませんでした。
SDD_OK - ファイルが正常に受信されました。
プロトタイプ: int _FTPX_FTPRcvFile( UCHAR *szRcvFile /* I: Name of file to store in */, UCHAR *szPath /* I: Path to remote file */, UCHAR *szFile /* I: Remote file */, UINT nBinaryMode /* I: Select binary transfer mode */, UCHAR *szErrMsg ) /* O: Generated error messages */
   
関数: _FTPX_FTPXmitFile
説明: 現在のマシンのファイルシステムから FTP サーバーへのファイル転送を開始する関数。
戻り値: SDD_FAIL - ファイル転送を完了できませんでした。
SDD_OK - ファイルが正常に送信されました。
プロトタイプ: int _FTPX_FTPXmitFile( UCHAR *szXmitFile /* I: Name of file to transmit */, UCHAR *szPath /* I: Path to remote destination */, UCHAR *szFile /* I: Remote file */, UINT nBinaryMode /* I: Select binary transfer Mode */, UCHAR *szErrMsg ) /* O: Generated error messages */
   
関数: ftpx_InitService
説明: ドライバーを定義済みの状態に初期化するエントリーポイント。ドライバーが正しく機能するために、他のすべての関数の前にこの関数を呼び出すことが必須です。呼び出し元は 2 種類のデータを提供します。1) 自己初期化に使用するデータを含む構造体、2) 初期化を完了できない場合にドライバーがエラーメッセージを格納するバッファへのポインター。
戻り値: SDD_FAIL- ドライバーの初期化中にエラーが発生し、szErrStr にエラーメッセージが格納されています。
SDD_OK - ドライバーが正常に初期化されました。
プロトタイプ: int ftpx_InitService( SERVICEDETAILS *sServiceDet /* I: Init data */, UCHAR *szErrStr ) /* O: Error message */
   
関数: ftpx_CloseService
説明: ドライバーのクローズダウンを実行するエントリーポイント。クローズダウン手順により、ドライバーは初期状態(電源投入時のような状態)に戻り、InitService を再度呼び出すことができます。
戻り値: SDD_FAIL- ドライバーのクローズ中にエラーが発生し、szErrStr にエラーメッセージが格納されています。
SDD_OK - ドライバーが正常にクローズされました。
プロトタイプ: int ftpx_CloseService( UCHAR *szErrMsg ) /* O: Error message if failed */
   
関数: ftpx_ProcessRequest
説明: ドライバーにリクエストの処理を開始させるためのドライバーへのエントリーポイント。リクエストと関連パラメーターを表すデータブロックがパラメーターとしてドライバーに渡されます。構造体内のデータは元のクライアントとこのドライバーコードにのみ関連します。
戻り値: SDD_FAIL- リクエストの処理中にドライバー内でエラーが発生しました。エラーテキストを参照してください。
SDD_OK - リクエストが正常に処理されました。
プロトタイプ: int ftpx_ProcessRequest( UCHAR *snzDataBuf /* I: Input data */, int nDataLen /* I: Len of data */, int (*fSendDataCB)(UCHAR *, UINT) /* I: CB to send reply*/, UCHAR *szErrMsg ) /* O: Error text */
   
関数: ftpx_ProcessOOB
説明: 現在の動作状態に関連する可能性のある帯域外コマンドを処理するためのドライバーへのエントリーポイント。この関数の役割はコマンドを解読して即座に対応することです。例えば、キャンセルコマンドは処理中の ProcessRequest を中断してクリーンアップします。
戻り値: 戻り値なし。
プロトタイプ: void ftpx_ProcessOOB( UCHAR nCommand ) /* I: OOB Command */

Java ドライバー sdd_java

   
関数: java_InitService
説明: ドライバーを定義済みの状態に初期化するエントリーポイント。ドライバーが正しく機能するために、他のすべての関数の前にこの関数を呼び出すことが必須です。呼び出し元は 2 種類のデータを提供します。1) 自己初期化に使用するデータを含む構造体、2) 初期化を完了できない場合にドライバーがエラーメッセージを格納するバッファへのポインター。
戻り値: SDD_FAIL- ドライバーの初期化中にエラーが発生し、szErrStr にエラーメッセージが格納されています。
SDD_OK - ドライバーが正常に初期化されました。
プロトタイプ: int java_InitService( SERVICEDETAILS *sServiceDet /* I: Init data */, UCHAR *szErrStr ) /* O: Error message */
   
関数: java_CloseService
説明: ドライバーのクローズダウンを実行するエントリーポイント。クローズダウン手順により、ドライバーは初期状態(電源投入時のような状態)に戻り、InitService を再度呼び出すことができます。
戻り値: SDD_FAIL- ドライバーのクローズ中にエラーが発生し、szErrStr にエラーメッセージが格納されています。
SDD_OK - ドライバーが正常にクローズされました。
プロトタイプ: int java_CloseService( UCHAR *szErrMsg ) /* O: Error message if failed */
   
関数: java_ProcessRequest
説明: ドライバーにリクエストの処理を開始させるためのドライバーへのエントリーポイント。リクエストと関連パラメーターを表すデータブロックがパラメーターとしてドライバーに渡されます。構造体内のデータは元のクライアントとこのドライバーコードにのみ関連します。
戻り値: SDD_FAIL- リクエストの処理中にドライバー内でエラーが発生しました。エラーテキストを参照してください。
SDD_OK - リクエストが正常に処理されました。
プロトタイプ: int java_ProcessRequest( UCHAR *snzDataBuf /* I: Input data */, int nDataLen /* I: Len of data */, int (*fSendDataCB)(UCHAR *, UINT) /* I: CB to send reply*/, UCHAR *szErrMsg ) /* O: Error text */
   
関数: java_ProcessOOB
説明: 現在の動作状態に関連する可能性のある帯域外コマンドを処理するためのドライバーへのエントリーポイント。この関数の役割はコマンドを解読して即座に対応することです。例えば、キャンセルコマンドは処理中の ProcessRequest を中断してクリーンアップします。
戻り値: 戻り値なし。
プロトタイプ: void java_ProcessOOB( UCHAR nCommand ) /* I: OOB Command */

ODBC ドライバー sdd_odbc

   
関数: _ODBC_GetArg
説明: 入力バッファをスキャンして、必要な引数を抽出する関数。
戻り値: SDD_FAIL- 引数を取得できませんでした。
SDD_OK - 引数を取得して検証しました。
プロトタイプ: int _ODBC_GetArg( UCHAR *szArgType /* I: Type of Arg to scan for */, UCHAR *snzDataBuf /* I: Input buffer */, int nDataLen /* I: Len of data */, UCHAR **pszArg ) /* O: Pointer to Arg */
   
関数: _ODBC_LogODBCError
説明: ODBC ドライバーからのエラーメッセージやエラーコードをログデバイスに出力する関数。主にデバッグ用途に使用します。
戻り値: 戻り値なし。
プロトタイプ: void _ODBC_LogODBCError( HSTMT hStmt )
   
関数: _ODBC_RunSql
説明: 現在のデータベース上で指定された SQL バッファを実行し、結果データを元の呼び出し元に返す関数。
戻り値: SDD_FAIL- SQL の実行に失敗しました。エラーメッセージを参照してください。
SDD_OK - SQL が正常に実行されました。
プロトタイプ: int _ODBC_RunSql( UCHAR *snzDataBuf /* I: Input data */, int nDataLen /* I: Len of data */, int (*fSendDataCB)(UCHAR *, UINT) /* I: CB to send reply */, UCHAR *szErrMsg ) /* O: Error text */
   
関数: _ODBC_ListDB
説明: 現在開いているデータソースで使用可能なすべてのデータベース名を一覧表示する関数。
戻り値: SDD_FAIL- SQL の実行に失敗しました。エラーメッセージを参照してください。
SDD_OK - SQL が正常に実行されました。
プロトタイプ: int _ODBC_ListDB( int (*fSendDataCB)(UCHAR *, UINT) /* I: CB to send reply */, UCHAR *szErrMsg ) /* O: Error text */
   
関数: _ODBC_ListTables
説明: 指定されたデータベース(またはデータベース名が指定されていない場合は現在のデータベース)内のすべてのテーブル名を一覧表示する関数。
戻り値: SDD_FAIL- SQL の実行に失敗しました。エラーメッセージを参照してください。
SDD_OK - SQL が正常に実行されました。
プロトタイプ: int _ODBC_ListTables( UCHAR *snzDataBuf /* I: Input data */, int nDataLen /* I: Len of data */, int (*fSendDataCB)(UCHAR *, UINT) /* I: CB to send reply */, UCHAR *szErrMsg ) /* O: Error text */
   
関数: _ODBC_ListCols
説明: 指定されたデータベース内の指定されたテーブル(またはデータベース名が指定されていない場合は現在のデータベース/テーブル)のすべての列名と属性を一覧表示する関数。
戻り値: SDD_FAIL- SQL の実行に失敗しました。エラーメッセージを参照してください。
SDD_OK - SQL が正常に実行されました。
プロトタイプ: int _ODBC_ListCols( UCHAR *snzDataBuf /* I: Input data */, int nDataLen /* I: Len of data */, int (*fSendDataCB)(UCHAR *, UINT) /* I: CB to send reply */, UCHAR *szErrMsg ) /* O: Error text */
   
関数: odbc_InitService
説明: ドライバーを定義済みの状態に初期化するエントリーポイント。ドライバーが正しく機能するために、他のすべての関数の前にこの関数を呼び出すことが必須です。呼び出し元は 2 種類のデータを提供します。1) 自己初期化に使用するデータを含む構造体、2) 初期化を完了できない場合にドライバーがエラーメッセージを格納するバッファへのポインター。
戻り値: SDD_FAIL- ドライバーの初期化中にエラーが発生し、szErrMsg にエラーメッセージが格納されています。
SDD_OK - ドライバーが正常に初期化されました。
プロトタイプ: int odbc_InitService( SERVICEDETAILS *sServiceDet /* I: Init data */, UCHAR *szErrMsg ) /* O: Error message */
   
関数: odbc_CloseService
説明: ドライバーのクローズダウンを実行するエントリーポイント。クローズダウン手順により、ドライバーは初期状態(電源投入時のような状態)に戻り、InitService を再度呼び出すことができます。
戻り値: SDD_FAIL- ドライバーのクローズ中にエラーが発生し、szErrMsg にエラーメッセージが格納されています。
SDD_OK - ドライバーが正常にクローズされました。
プロトタイプ: int odbc_CloseService( UCHAR *szErrMsg ) /* O: Error message if failed */
   
関数: odbc_ProcessRequest
説明: ドライバーにリクエストの処理を開始させるためのドライバーへのエントリーポイント。リクエストと関連パラメーターを表すデータブロックがパラメーターとしてドライバーに渡されます。構造体内のデータは元のクライアントとこのドライバーコードにのみ関連します。
戻り値: SDD_FAIL- リクエストの処理中にドライバー内でエラーが発生しました。エラーテキストを参照してください。
SDD_OK - リクエストが正常に処理されました。
プロトタイプ: int odbc_ProcessRequest( UCHAR *snzDataBuf /* I: Input data */, int nDataLen /* I: Len of data */, int (*fSendDataCB)(UCHAR *, UINT) /* I: CB to send reply*/, UCHAR *szErrMsg ) /* O: Error text */

| | | | ———- | —————————————————————————– | |関数: |odbc_ProcessOOB| |説明: |現在の動作状態に関連する可能性のある帯域外コマンドを処理するためのドライバーへのエントリーポイント。この関数の役割はコマンドを解読して即座に対応することです。例えば、キャンセルコマンドは処理中の ProcessRequest を中断してクリーンアップします。 | |戻り値: |戻り値なし。 | |プロトタイプ: |void odbc_ProcessOOB( UCHAR nCommand ) /* I: OOB Command */ |

SCMD ドライバー sdd_scmd

   
関数: _SCMD_GetStrArg
説明: 入力バッファをスキャンして、文字列ベースの引数を抽出する関数。
戻り値: SDD_FAIL- 引数を取得できませんでした。
SDD_OK - 引数を取得しました。
プロトタイプ: int _SCMD_GetStrArg( UCHAR *snzDataBuf /* I: Input buffer */, int nDataLen /* I: Len of data */, UCHAR *szArg /* I: Arg to look for */, UCHAR **pszPath ) /* O: Pointer to argument */
   
関数: _SCMD_ValidatePath
説明: パスの存在を検証する関数。
戻り値: SDD_FAIL- PATH を検証できませんでした。
SDD_OK - PATH を検証しました。
プロトタイプ: int _SCMD_ValidatePath( UCHAR *pszPath ) /* I: Path to validate */
   
関数: _SCMD_ValidateFile
説明: ファイルの存在を検証する、またはファイルが作成可能であることを検証する関数。
戻り値: SDD_FAIL- ファイル名を取得または検証できませんでした。
SDD_OK - ファイル名を取得して検証しました。
プロトタイプ: int _SCMD_ValidateFile( UCHAR *pszPath /* I: Path to file */, UCHAR *pszFile /* I: File to validate */, UINT nWriteFlag ) /* I: Read = 0, Write = 1 */
   
関数: _SCMD_ValidateTime
説明: ASCII 文字列として与えられた時刻値を検証する関数。
戻り値: SDD_FAIL- TIME を取得または検証できませんでした。
SDD_OK - TIME を取得して検証しました。
プロトタイプ: int _SCMD_ValidateTime( UCHAR *pszTime /* I: Time to verify */, ULNG *lTime ) /* O: Time in seconds */
   
関数: _SCMD_Exec
説明: fork と exec を使って指定されたコマンドを実行し、親プロセスを子プロセスの I/O にアタッチすることで、子プロセスが出力するデータを親プロセスが取得して呼び出し元にフィードバックできるようにする関数。
戻り値: SDD_FAIL- 実行中にコマンドが失敗しました。
SDD_OK - コマンドが正常に実行されました。
プロトタイプ: int _SCMD_Exec( int nTimedExec /* I: Is this a timed exec (T/F)? */, UCHAR *pszPath /* I: Path to command */, UCHAR *pszCmd /* I: Command name */, UCHAR *pszArgs /* I: Arguments to command */, ULNG lTimeToExec /* I: Time to execution */, int (*fSendDataCB)(UCHAR *, UINT) /* I: Func for returning data */, UCHAR *szErrMsg ) /* O: Error message generated */
   
関数: _SCMD_GetWriteData
説明: 入力バッファをスキャンし、データが含まれているか検証して、データを抽出してオープンしたファイルストリームに格納し、そのブロックが最終ブロックであれば開始フラグを設定する関数。
戻り値: SDD_FAIL- 不正なデータブロックまたはファイルへの書き込みエラー。
SDD_OK - ブロックを取得して格納しました。
プロトタイプ: int _SCMD_GetWriteData( UCHAR *snzDataBuf /* I: Input buffer */, int nDataLen /* I: Len of data */, FILE *fpFile /* IO: Opened file stream */, int *nLast /* O: Last block flag */, UCHAR *szErrMsg ) /* O: Any resultant error msg */
   
関数: _SCMD_PutReadData
説明: オープンしたストリームを読み取り、コールバックメカニズムを介してデータの内容を呼び出し元に送信する関数。
戻り値: SDD_FAIL- PATH を取得できませんでした。
SDD_OK - PATH を取得しました。
プロトタイプ: int _SCMD_PutReadData( FILE *fpFile /* I: Stream to read from */, int (*fSendDataCB)(UCHAR *, UINT) /* I: CB to send data to */, UCHAR *szErrMsg ) /* O: Error text */
   
関数: _SCMD_MoveFile
説明: ファイルをある場所/名前から別の場所/名前に移動する関数。基盤となるシステムがファイルシステムをまたぐ移動をサポートしていない場合があるため、コピーとアンリンクの操作として実行されます。
戻り値: SDD_FAIL- ファイルの移動中にエラーが発生しました。szErrMsg を参照してください。
SDD_OK - ファイルが正常に移動されました。
プロトタイプ: int _SCMD_MoveFile( UCHAR *pszSrcPath /* I: Path to source file */, UCHAR *pszSrcFile /* I: Source File */, UCHAR *pszDstPath /* I: Path to dest file */, UCHAR *pszDstFile /* I: Dest File */, UCHAR *szErrMsg ) /* O: Error message */
   
関数: _SCMD_DeleteFile
説明: 指定されたパスからファイルを削除する関数。
戻り値: SDD_FAIL- ファイルの移動中にエラーが発生しました。szErrMsg を参照してください。
SDD_OK - ファイルが正常に移動されました。
プロトタイプ: int _SCMD_DeleteFile( UCHAR *pszDelPath /* I: Path to file */, UCHAR *pszDelFile /* I: File to delete */, UCHAR *szErrMsg ) /* O: Error message */
   
関数: scmd_InitService
説明: ドライバーを定義済みの状態に初期化するエントリーポイント。ドライバーが正しく機能するために、他のすべての関数の前にこの関数を呼び出すことが必須です。呼び出し元は 2 種類のデータを提供します。1) 自己初期化に使用するデータを含む構造体、2) 初期化を完了できない場合にドライバーがエラーメッセージを格納するバッファへのポインター。
戻り値: SDD_FAIL- ドライバーの初期化中にエラーが発生し、szErrStr にエラーメッセージが格納されています。
SDD_OK - ドライバーが正常に初期化されました。
プロトタイプ: int scmd_InitService( SERVICEDETAILS *sServiceDet /* I: Init data */, UCHAR *szErrStr ) /* O: Error message */
   
関数: scmd_CloseService
説明: ドライバーのクローズダウンを実行するエントリーポイント。クローズダウン手順により、ドライバーは初期状態(電源投入時のような状態)に戻り、InitService を再度呼び出すことができます。
戻り値: SDD_FAIL- ドライバーのクローズ中にエラーが発生し、szErrStr にエラーメッセージが格納されています。
SDD_OK - ドライバーが正常にクローズされました。
プロトタイプ: int scmd_CloseService( UCHAR *szErrMsg ) /* O: Error message if failed */
   
関数: scmd_ProcessRequest
説明: ドライバーにリクエストの処理を開始させるためのドライバーへのエントリーポイント。リクエストと関連パラメーターを表すデータブロックがパラメーターとしてドライバーに渡されます。構造体内のデータは元のクライアントとこのドライバーコードにのみ関連します。
戻り値: SDD_FAIL- リクエストの処理中にドライバー内でエラーが発生しました。エラーテキストを参照してください。
SDD_OK - リクエストが正常に処理されました。
プロトタイプ: int scmd_ProcessRequest( UCHAR *snzDataBuf /* I: Input data */, int nDataLen /* I: Len of data */, int (*fSendDataCB)(UCHAR *, UINT) /* I: CB to send reply*/, UCHAR *szErrMsg ) /* O: Error text */
   
関数: scmd_ProcessOOB
説明: 現在の動作状態に関連する可能性のある帯域外コマンドを処理するためのドライバーへのエントリーポイント。この関数の役割はコマンドを解読して即座に対応することです。例えば、キャンセルコマンドは処理中の ProcessRequest を中断してクリーンアップします。
戻り値: 戻り値なし。
プロトタイプ: void scmd_ProcessOOB( UCHAR nCommand ) /* I: OOB Command */

Sybase ドライバー sdd_sybc

   
関数: _SYBC_GetArg
説明: 入力バッファをスキャンして、必要な引数を抽出する関数。
戻り値: SDD_FAIL- 引数を取得できませんでした。
SDD_OK - 引数を取得して検証しました。
プロトタイプ: int _SYBC_GetArg( UCHAR *szArgType /* I: Type of Arg to scan for */, UCHAR *snzDataBuf /* I: Input buffer */, int nDataLen /* I: Len of data */, UCHAR **pszArg ) /* O: Pointer to Arg */
   
関数: _SYBC_RunSql
説明: 現在のデータベース上で指定された SQL バッファを実行し、結果データを元の呼び出し元に返す関数。
戻り値: SDD_FAIL- SQL の実行に失敗しました。エラーメッセージを参照してください。
SDD_OK - SQL が正常に実行されました。
プロトタイプ: int _SYBC_RunSql( UCHAR *snzDataBuf /* I: Input data */, int nDataLen /* I: Len of data */, int (*fSendDataCB)(UCHAR *, UINT) /* I: CB to send reply */, UCHAR *szErrMsg ) /* O: Error text */
   
関数: sybc_InitService
説明: ドライバーを定義済みの状態に初期化するエントリーポイント。ドライバーが正しく機能するために、他のすべての関数の前にこの関数を呼び出すことが必須です。呼び出し元は 2 種類のデータを提供します。1) 自己初期化に使用するデータを含む構造体、2) 初期化を完了できない場合にドライバーがエラーメッセージを格納するバッファへのポインター。
戻り値: SDD_FAIL- ドライバーの初期化中にエラーが発生し、szErrStr にエラーメッセージが格納されています。
SDD_OK - ドライバーが正常に初期化されました。
プロトタイプ: int sybc_InitService( SERVICEDETAILS *sServiceDet /* I: Init data */, UCHAR *szErrStr ) /* O: Error message */
   
関数: _SYBC_ListDB
説明: 現在開いているデータソースで使用可能なすべてのデータベース名を一覧表示する関数。
戻り値: SDD_FAIL- SQL の実行に失敗しました。エラーメッセージを参照してください。
SDD_OK - SQL が正常に実行されました。
プロトタイプ: int _SYBC_ListDB( int (*fSendDataCB)(UCHAR *, UINT) /* I: CB to send reply */, UCHAR *szErrMsg ) /* O: Error text */
   
関数: _SYBC_ListTables
説明: 指定されたデータベース(またはデータベース名が指定されていない場合は現在のデータベース)内のすべてのテーブル名を一覧表示する関数。
戻り値: SDD_FAIL- SQL の実行に失敗しました。エラーメッセージを参照してください。
SDD_OK - SQL が正常に実行されました。
プロトタイプ: int _SYBC_ListTables( UCHAR *snzDataBuf /* I: Input data */, int nDataLen /* I: Len of data */, int (*fSendDataCB)(UCHAR *, UINT) /* I: CB to send reply */, UCHAR *szErrMsg ) /* O: Error text */
   
関数: _SYBC_ListCols
説明: 指定されたデータベース内の指定されたテーブル(またはデータベース名が指定されていない場合は現在のデータベース/テーブル)のすべての列名と属性を一覧表示する関数。
戻り値: SDD_FAIL- SQL の実行に失敗しました。エラーメッセージを参照してください。
SDD_OK - SQL が正常に実行されました。
プロトタイプ: int _SYBC_ListCols( UCHAR *snzDataBuf /* I: Input data */, int nDataLen /* I: Len of data */, int (*fSendDataCB)(UCHAR *, UINT) /* I: CB to send reply */, UCHAR *szErrMsg ) /* O: Error text */
   
関数: sybc_CloseService
説明: ドライバーのクローズダウンを実行するエントリーポイント。クローズダウン手順により、ドライバーは初期状態(電源投入時のような状態)に戻り、InitService を再度呼び出すことができます。
戻り値: SDD_FAIL- ドライバーのクローズ中にエラーが発生し、szErrStr にエラーメッセージが格納されています。
SDD_OK - ドライバーが正常にクローズされました。
プロトタイプ: `int sybc_CloseService( UCHAR szErrMsg ) / O: Error message if failed */
   
関数: sybc_ProcessRequest
説明: ドライバーにリクエストの処理を開始させるためのドライバーへのエントリーポイント。リクエストと関連パラメーターを表すデータブロックがパラメーターとしてドライバーに渡されます。構造体内のデータは元のクライアントとこのドライバーコードにのみ関連します。
戻り値: SDD_FAIL- リクエストの処理中にドライバー内でエラーが発生しました。エラーテキストを参照してください。
SDD_OK - リクエストが正常に処理されました。
プロトタイプ: int sybc_ProcessRequest( UCHAR *snzDataBuf /* I: Input data */, int nDataLen /* I: Len of data */, int (*fSendDataCB)(UCHAR *, UINT) /* I: CB to send reply */, UCHAR *szErrMsg ) /* O: Error text */
   
関数: sybc_ProcessOOB
説明: 現在の動作状態に関連する可能性のある帯域外コマンドを処理するためのドライバーへのエントリーポイント。この関数の役割はコマンドを解読して即座に対応することです。例えば、キャンセルコマンドは処理中の ProcessRequest を中断してクリーンアップします。
戻り値: 戻り値なし。
プロトタイプ: void sybc_ProcessOOB( UCHAR nCommand ) /* I: OOB Command */


VDW ライブラリ

仮想データウェアハウスライブラリ(VDW)は、仮想データウェアハウスを構築するための API セットです。これらのメソッドは通常、データソースを持つサーバーに配置されるクロスプラットフォーム(Linux、SunOS、Solaris、Windows)デーモンのセットを構築するために使用されます。デーモンは SDD ドライバーのセットを内蔵し、必要なデータソースをオープンしてアプリケーションや MDC 層と通信しながら適切にサービスを提供します。 例えば、ネットワーク A 上の SQL Server、ネットワーク B 上の Sybase Server、ネットワーク C 上の FTP ソースに対して、それぞれのサーバーに VDW デーモンを配置してデータソースとの接続を開きます。ルーティングを介して、ネットワーク D 上の MDC アプリケーションがすべてのソースを必要に応じてクエリできるようになります。 現時点では VDW ライブラリが ZPU Evo で役立つ用途は見当たりませんが、分散した非中央集権型データソースのネットワークを構築しようとしている場合には有用かもしれません。

VDW ライブラリのメソッドは以下の通りです。メソッド名が「_」で始まる場合は内部メソッドであり、通常は直接呼び出しません。ただし C 言語の性質上、メソッドやデータに対するプライベート定義は存在しないため、必要であれば呼び出すことも可能です。

   
関数: GetConfig
説明: OS またはコマンドラインフラグから設定情報を取得します。
戻り値: VDWD_OK - 設定を取得しました。
VDWD_FAIL - 失敗しました。エラーメッセージを参照してください。
プロトタイプ: int GetConfig( int argc /* I: CLI argument count */. UCHAR **argv /* I: CLI argument contents */, char **envp /* I: Environment variables */, UCHAR *szErrMsg ) /* O: Any generated error message */
   
関数: VDWDInit
説明: 変数、機能、通信の初期化、およびプロセスのデーモン化を行います。
戻り値: VDWD_OK - 正常に初期化されました。
VDWD_FAIL - 失敗しました。エラーメッセージを参照してください。
プロトタイプ: int VDWDInit( UCHAR *szErrMsg ) /* O: Generated error message */
   
関数: VDWDClose
説明: モジュール内で使用されたすべてのリソースのクローズ処理を実行する関数。
戻り値: VDWD_OK - 正常にクローズされました。
VDWD_FAIL - 失敗しました。エラーメッセージを参照してください。
プロトタイプ: int VDWDClose( UCHAR *szErrMsg ) /* O: Generated error message */
   
関数: VDWDSentToClient
説明: このデーモンから関連するクライアントにデータを送信する関数。
戻り値: SDD_OK - データが正常に送信されました。
SDD_FAIL - データの送信に失敗しました。
プロトタイプ: int VDWDSendToClient( UCHAR *snzData /* I: Data to send */, UINT nDataLen ) /* I: Length of data */
   
関数: VDWDInitService
説明: 指定されたドライバーの初期化関数を呼び出す関数。
戻り値: VDWD_OK - サービスが正常に初期化されました。
VDWD_FAIL - 失敗しました。エラーメッセージを参照してください。
プロトタイプ: int VDWDInitService( int nServiceType /* I: Type of service*/, SERVICEDETAILS *sServiceDet /* I: Service Data */, UCHAR *szErrMsg ) /* O: Error message */
   
関数: VDWDCloseService
説明: 指定されたドライバーのクローズダウン関数を呼び出す関数。
戻り値: VDWD_OK - サービスが正常にクローズされました。
VDWD_FAIL - 失敗しました。エラーメッセージを参照してください。
プロトタイプ: int VDWDCloseService( int nServiceType /* I: Type of service*/, UCHAR *szErrMsg ) /* O: Error message */
   
関数: VDWDProcessRequest
説明: 指定されたドライバーのサービスリクエスト処理関数を呼び出す関数。
戻り値: VDWD_OK - リクエストが正常に処理されました。
VDWD_FAIL - 失敗しました。エラーメッセージを参照してください。
プロトタイプ: int VDWDProcessRequest( int nServiceType /* I: Type of service */, UCHAR *snzData /* I: Data Buffer */, UINT nDataLen /* I: Len of Data */, UCHAR *szErrMsg ) /* O: Error message */
   
関数: VDWDDataCallback
説明: コールバックとして登録される関数で、新しいクライアントからデータが届くたびに呼び出されます。
戻り値: MDC_OK - 正常にクローズされました。
MDC_FAIL - 失敗しました。エラーメッセージを参照してください。
プロトタイプ: int VDWDDataCallback( UCHAR *snzData /* I: Buffer containing data */, int nDataLen /* I: Length of data in buffer */, UCHAR *szErrMsg ) /* O: Error messages generated */
   
関数: VDWDOOBCallback
説明: MDC 層からの帯域外コマンドに対してアクションを取る関数。帯域外メッセージは一般的に即座に対応する必要があるコマンドであるため、ドライバーの帯域外処理関数に渡されます。
戻り値: 戻り値なし。
プロトタイプ: void VDWDOOBCallback( UCHAR cCmd ) /* I: Command to action upon */


MDC ライブラリ

メタデータコミュニケーション API(MDC)は、仮想データウェアハウス設計の一部として開発されたもので、異種システムおよびデータソース(Sybase、SQL Server、FTP CSV、フラットファイルなど)をカプセル化し、MDC API を通じてこれらを一元的かつ均一な方法でクエリできるようにすることを目的としていました。アプリケーションはデータソースに関係なく正規化されたリクエストを MDC 層に対して発行し、MDC が適切なソースへのターゲティングと必要な変換処理を担います。 現時点では ZPU Evo での用途は見当たりませんが、VDW デーモンを使用して異種データソースを結合しようとしている場合には有用かもしれません。

MDC ライブラリのメソッドは、それぞれが属する機能ごとに分類して以下に説明します。メソッド名が「_」で始まる場合は内部メソッドであり、通常は直接呼び出しません。ただし C 言語の性質上、メソッドやデータに対するプライベート定義は存在しないため、必要であれば呼び出すことも可能です。

MDC サーバー API

   
関数: _MDC_SendACK
説明: データブロックを正常に受信した場合またはリクエストが正常に処理された場合に、クライアントに確認応答を送信する関数。
戻り値: MDC_FAIL- ACK メッセージをクライアントに送信できませんでした。
MDC_OK - ACK が正常に送信されました。
プロトタイプ: int _MDC_SendACK( void )
   
関数: _MDC_SendNAK
説明: 不正なデータブロックが届いた場合またはリクエストを正常に処理できなかった場合に、クライアントに否定応答を送信する関数。
戻り値: MDC_FAIL- NAK メッセージをクライアントに送信できませんでした。
MDC_OK - NAK が正常に送信されました。
プロトタイプ: int _MDC_SendNAK( UCHAR szErrMsg /* I: Error msg to send with NAK */ )
   
関数: _MDC_ServerCntlCB
説明: MDC_Server の実行結果として生成される通信制御コールバックを処理する関数。
戻り値: 戻り値なし。
プロトタイプ: void _MDC_ServerCntlCB( int nType /* I: Type of callback */, ... /* I: Arg list according to type */ )
   
関数: _MDC_ServerDataCB
説明: MDC_Server の実行中にデータが到着した際に生成されるデータコールバックを処理する関数。
戻り値: 戻り値なし。
プロトタイプ: void _MDC_ServerDataCB( UINT nChanId / I: Channel data rcv on */, UCHAR szData /* I: Rcvd data */, UINT nDataLen /* I: Rcvd data length */)
   
関数: MDC_Server
説明: サーバープロセスとしてメタデータコミュニケーションへのエントリーポイント。この関数はすべての通信等を初期化した後、指定されたユーザーコールバックを実行して必要なアクションを行います。
戻り値: MDC_FAIL- 重大なエラーにより関数が終了しました。正確な理由コードは Errno を参照してください。
MDC_OK - 関数がエラーなく正常に完了しました。
プロトタイプ: int MDC_Server( UINT nPortNo /* I: TCP/IP port number */, UCHAR szService /* I: Name of TCP/IP Service */, int (fLinkDataCB) /* I: User function callback */, (UCHAR , int, UCHAR ), void (fControlCB)(UCHAR) /* I: User control callback */ )
   
関数: MDC_ReturnData
説明: 接続されたクライアントに任意のデータを返すためにユーザーコードから呼び出される関数。この関数は、データを提供した「MDC 層からユーザーコードへの」コールバックに応答してのみ呼び出すことができます。
戻り値: MDC_FAIL- 指定されたデータブロックをクライアントプロセスに送信中にエラーが発生しました。正確な理由コードは Errno を参照してください。
MDC_OK - データパケットが正常に送信されました。
プロトタイプ: int MDC_ReturnData( UCHAR snzDataBuf /* I: Data to return */, int nDataLen /* I: Length of data */ )
   
関数: MDC_TimerCB
説明: タイマーの満了時に起動されるコールバックイベントをユーザーコードが登録できるようにする関数。ユーザーは頻度とコールバック関数を提供し、MDC がスケジューリングを行います。
戻り値: 戻り値なし。
プロトタイプ: int MDC_TimerCB( ULNG lTimePeriod /* I: CB Time in Millseconds */, UINT nEnable /* I: Enable(TRUE)/Dis(FALSE) CB */, UINT nAstable /* I: Astable(TRUE) or Mono CB */, void (fTimerCB)(void) /* I: Function to call back */ )

MDC クライアント API

   
関数: _MDC_DataCB
説明: いずれかのサービス接続でデータが受信された際にコールバックされる関数。
戻り値: void
プロトタイプ: `void _MDC_DataCB(UINT nChanId, UCHAR *szData, UINT nDataLen)
   
関数: _MDC_CtrlCB
説明: いずれかのサービス接続で制御情報が受信された際にコールバックされる関数。
戻り値: void
プロトタイプ: `void _MDC_CtrlCB(int nType, …)
   
関数: _MDC_SendPacket
説明: デーモンにパケットを送信する関数。
戻り値: MDC_OK または MDC_FAIL
プロトタイプ: `int _MDC_SendPacket(UINT nChanId, char cPacketType, UCHAR *psnzBuf, UINT nBuflen)
   
関数: _MDC_GetSrvRqtReply
説明: サービスリクエストパケットへの返信を取得する関数。
戻り値: MDC_OK または MDC_FAIL
プロトタイプ: `int _MDC_GetSrvRqtReply(UINT nChanId, char *pcPacketType)
   
関数: _MDC_CreateChStatus
説明: 新しいチャネルステータス構造体を作成してリンクリストに追加する関数。
戻り値: MDC_OK または MDC_FAIL
プロトタイプ: `int _MDC_CreateChStatus(UINT nChanId) /* Channel ID */
   
関数: _MDC_DelChStatus
説明: チャネルステータスのリンクリストからアイテムを削除する関数。
戻り値: MDC_OK または MDC_FAIL
プロトタイプ: `int _MDC_DelChStatus(UINT nChanId) /* Channel ID */
   
関数: _MDC_SetChState
説明: チャネルの状態を指定された値に設定する関数。
戻り値: MDC_OK または MDC_FAIL
プロトタイプ: `int _MDC_SetChState( UINT nChanId /* Channel ID /, CHSTATE eNewState / New state */ )
   
関数: _MDC_SetSRResult
説明: チャネルの送信リクエスト結果を設定する関数。
戻り値: MDC_OK または MDC_FAIL
プロトタイプ: `int _MDC_SetSRResult( UINT nChanId /* Channel ID /, UINT bResult / Send Request result */)
   
関数: _MDC_GetSRResult
説明: チャネルの送信リクエスト結果を取得する関数。
戻り値: MDC_OK または MDC_FAIL
プロトタイプ: `int _MDC_GetSRResult( UINT nChanId /* Channel ID /, UINT *bResult / Send Request result */)
   
関数: _MDC_SetUserCB
説明: 送信リクエストのコールバックを指定された値に設定する関数。
戻り値: MDC_OK または MDC_FAIL
プロトタイプ: `int _MDC_SetUserCB( UINT nChanId /* Channel ID /, void (UserCB) (UINT, UCHAR , UINT) / call back */)
   
関数: _MDC_GetChState
説明: 指定されたチャネルのチャネル状態を取得する関数。
戻り値: MDC_OK または MDC_FAIL
プロトタイプ: `int _MDC_GetChState( UINT nChanId /* Channel ID /, CHSTATE *eState / Channel state */)
   
関数: _MDC_GetNAKErrStr
説明: NAK エラー文字列へのポインターを取得する関数。
戻り値: MDC_OK または MDC_FAIL
プロトタイプ: `int _MDC_GetNAKErrStr( UINT nChanId /* Channel ID /, UCHAR **ppszErrStr / pointer to pointer to error string */)
   
関数: _MDC_GetUserCB
説明: チャネルのユーザーコールバックを取得する関数。
戻り値: MDC_OK または MDC_FAIL
プロトタイプ: `int _MDC_GetUserCB( UINT nChanId /* Channel ID /, void (**UserCB) (UINT, UCHAR *, UINT / User call back */)
   
関数: _MDC_PrintErrMsg
説明: エラーメッセージのテキストを出力する関数。
戻り値: MDC_OK または MDC_FAIL
プロトタイプ: `int _MDC_PrintErrMsg( UCHAR psnzErrMsg / Error message none terminated /, UINT nBufLen / Buffer Length */)
   
関数: _MDC_WaitOnSndReq
説明: 送信リクエストが完了するまでブロックする関数。
戻り値: MDC_OK または MDC_FAIL
プロトタイプ: `int _MDC_WaitOnSndReq(UINT nChanId) /* Channel ID */
   
関数: MDC_SendRequest
説明: ドライバーにリクエストを送信する関数。
戻り値: MDC_OK または MDC_FAIL
プロトタイプ: `int MDC_SendRequest( UINT nChanId /* I: Channel to send message on /, UCHAR *szData / I: Data to send /, UINT nDataLen / I: Length of data /, void (DataCB) (UINT, UCHAR , UINT) / I: call back function for data */ )
   
関数: MDC_GetResult
説明: 送信リクエストへのすべての返信を待機してから結果を返す関数。
戻り値: MDC_OK または MDC_FAIL
プロトタイプ: int MDC_GetResult( UINT nChanId /* I: Channel ID */, UCHAR **ppszErrorMsg /* O: Associated error message */)
   
関数: MDC_GetStatus
説明: 指定されたチャネルの送信リクエストが完了したかどうかを示すブール値を返す関数。
戻り値: MDC_OK または MDC_FAIL
プロトタイプ: int MDC_GetStatus( UINT nChanId /* I: Channel ID */, UINT *bSndReqCom /* O: Indicates whether Send Request has completed */ )
   
関数: MDC_CreateService
説明: サービスリクエストを発行できるようにデーモンへの接続を作成する関数。
戻り値: チャネル ID、または負のエラーコード。
プロトタイプ: int MDC_CreateService( UCHAR *szHostName /* I: Host for connect*/, UINT *nPortNo /* I: Port host on */, SERVICEDETAILS *serviceDet /* I: Service details */ )
   
関数: MDC_SetTimeout
説明: システムのタイムアウト値の一つをデフォルトからユーザー設定に変更する関数。
戻り値: MDC_OK - 設定が変更されました。
MDC_FAIL - 設定を変更できませんでした。エラーメッセージを参照してください。
プロトタイプ: int MDC_SetTimeout( UCHAR *pszWhichTimeout /* I: Timeout to set */, UINT nTimeoutValue /* I: New value */, UCHAR *pszErrMsg /* O: Error message */ )
   
関数: MDC_CloseService
説明: サービスチャネルをクローズする関数。
戻り値: MDC_FAIL または MDC_OK または MDC_BADCONTEXT
プロトタイプ: int MDC_CloseService( UINT nChanId ) /* I: Channel to close */
   
関数: MDC_Start
説明: MDC 通信を初期化するために呼び出される関数。
戻り値: MDC_FAIL または MDC_OK
プロトタイプ: int MDC_Start( void )
   
関数: MDC_End
説明: MDC 通信をシャットダウンするために呼び出される関数。
戻り値: MDC_FAIL または MDC_OK
プロトタイプ: int MDC_End( void )
   
関数: MDC_ChangeService
説明: 既存のデーモン接続のサービスを変更する関数。
戻り値: MDC_OK、MDC_FAIL、MDC_NODAEMON、MDC_NOSERVICE、MDC_BADPARMS
プロトタイプ: int MDC_ChangeService( UINT nChanId /* I: Chan ID of srvc */, SERVICEDETAILS *serviceDet /* I: Service details */ )

MDC 共通 API

   
関数: _MDC_Init
説明: MDC の初期化を実行する関数。ライブラリは _MDC_Terminate の前に初期化が一度だけ行われるよう確認チェックを行います。
戻り値: MDC_FAIL- ライブラリを初期化できませんでした。
MDC_OK - ライブラリが初期化されました。
プロトタイプ: int _MDC_Init( void )
   
関数: _MDC_Terminate
説明: MDC ライブラリをシャットダウンする関数。正常にシャットダウンされた後、_MDC_Init を呼び出してライブラリを再初期化することができます。MDC_Terminate が失敗した場合は、プログラムの終了を推奨します。
戻り値: MDC_FAIL- クリーンなシャットダウンを実行できませんでした。
MDC_OK - ライブラリが正常にシャットダウンされました。
プロトタイプ: int _MDC_Terminate( void )


ライセンス

これらのソフトウェアライブラリは GNU Public Licence v3 の下でライセンスされています。

GNU パブリックライセンス v3

このプロジェクト内で GPL v3 とマークされているソースおよびバイナリファイルはフリーソフトウェアです。Free Software Foundation が公開する GNU 一般公衆ライセンスのバージョン 3、またはお望みであればそれ以降のバージョンの条件のもとで、再配布および/または改変することができます。

ソースファイルは有用であることを期待して配布されていますが、いかなる保証も伴いません。市場性または特定目的への適合性に関する暗黙の保証も含め、一切の保証を行いません。詳細については GNU 一般公衆ライセンスをご参照ください。

このプログラムとともに GNU 一般公衆ライセンスのコピーを受け取っているはずです。受け取っていない場合は http://www.gnu.org/licenses/ をご参照ください。