====================================================================================================
== Release Note (TDS) ==============================================================================

■ Please refer to ReleaseE.txt if you want to refer to the contents of this file in English.



■ V11.083 : 2011/08/27

  ・ 新規公開



■ V11.091 : 2011/09/08

  ・ TDSMDMssgXxxxx() 関数により、SML形式、TS300形式両方のメッセージ定義ファイルの使用を同一の関数
     で可能とした。



■ V11.101 : 2011/10/05
■ V11.102 : 2011/10/11

  ・ 内部管理上の問題に関する改修。機能での変更はない。
  


■ V11.110 : 2011/11/08

  ・ メッセージ定義ファイルを使用した場合の、不定個数リストに関する改訂。
    ・ 不定個数リストの定義個数に関する制限を撤廃。複数の不定個数リストを定義可能とした。
    ・ 複数レベルで複数の不定個数リストを設定可能とした。
    ・ 不定個数リストの個数が =0 の場合に、メッセージ構築が正しく行えない問題を改訂。

  ・ メッセージ定義ファイルにおける改訂。
    ・ 複数行に渡る /* */ を可能とする。
    ・ 有効行の中で /* */ の部分のみをコメント化が可能。
    ・ テキスト項目データの " " 中では、コメント指示文字の評価を行わない。
    ・ '\' によるエスケープを行う。

  ・ 通信トレースに関する改訂。
    ・ 項目名を表示する場合、(TRCTTYPE&0x0400)!=0 の場合、先頭行にメッセージ名称を表示する。
    ・ 通信トレースのメッセージ・リストの先頭スペースの個数を (TRCTTYPE&0800) で 2 or 0 の選択を
       可能とした。
    ・ TDWTraceSetDataSize() を新設し、通信トレースの打ち切りバイト数を設定可能とした。

  ・ HSMS の場合、Separate request が出ていない状態で Shutdown を行う場合、Close() により、強制的
     に Separate request を送出するように改訂。



■ V11.111 : 2011/11/15

  ・ TDSMssgNextL() における F4、F8、S8、U8 の表現が間違っていた（正常に表現できていなかった）問題
     を改訂。



■ V11.120 : 2011/12/06

  ・ HSMS 通信に関する改訂。
    ・ Passive 側において、一旦 Accept し、切断した後、再度 Accept した場合に、トレース出力に
       ACCEPT が表示されない問題を改訂。
    ・ Diselect 要求に対する T6 タイムアウトが発生するケースを想定していない問題を改訂。
    ・ Select、Deselect、LinkTest Request 時の W-bit の扱いを変更。デフォルトでは W-bit=0 とし、
       .ini の (DEVMODE&0x08)!=0 の場合に =1 とする。

  ・ トランザクションＩＤの付与において、制御用、データ用のソースＩＤを同一のものを指定するする事
     を可能とした。ただし、この場合 CommSend() において、送信時に実際に付与する TXID と戻り値に戻る
     TXID が異なる場合があるので、説明書に注記した。



■ V12.010 : 2012/01/12

  ・ SECS-1 通信における Single Block 時のブロック番号を (DEVMODE&0x04) で指定可能とした。

  ・ データ送信時 (特に SECS-1 で) 大きなメッセージ送信する場合に、送信に時間がかかって T3TO になる
     場合があること抑止するため、データ送信後にタイマーの再設定を行い、送信前の TXID の登録時は長い
     値を設定することにすることを可能とした。

  ・ SML 形式メッセージ定義において、項目名定義部分 "XX[99.99]XXXXX" に ' '、'\t' の挿入を可能にし
     た。即ち "B [ 10.. 20] BINITEM" といった定義書式が可能となり、書式整形しやすくした。



■ V12.030 : 2012/03/06

  ・ パラメータ TORECV を追加し、指定時間メッセージ受信が無い場合に接続断する事を可能にした。

  ・ (SECSMODE&0x0100) を追加し、==0 の場合は、既接続中に新規接続があった場合は、その接続を即切断。
     !=0 の場合は、既接続を切断し、新規接続を有効とする。
     これにより、接続したまま、未動作のクライアントの接続を無効とすることを可能とした。

  ・ HSMS 時の Connect 要求が失敗した場合のエラー・コードを E_CONN_ERR と明確化した。

  ・ _TDSCommStatus() を追加し、現在の接続状態を取得することを可能とした。

  ・ _TDSMDMssgInitialize() の mode に 0x4000 を追加し、指定があった場合 ((mode&0x4000)!=0 の場合)
     は、スレッドのロックを行う。これにより、ユーザＡＰでロックを行う必要がなくなる。

  ・ 簡易 API (_TDSUDrvXxxxx() 系関数) を追加し、HSMS Active 側も Connect、Select 要求を AP 側で
     コード化することなく、接続し通信することを可能とした。



■ V12.031 : 2012/03/28

  ・ サンプル・ソースコードを改訂
    ・ メッセージ定義ファイル使用処理のロック制御
    ・ Sample1、Sample2 で、送受信 SECS メッセージ構造表示を送受信が混在しないように制御する処理
       を追加



■ V12.071 : 2012/07/08

  ・ プログラマーズ・マニュアルの _TDSMDMssgInitialize()、_TDSMDMssgTerminate() の mode に 関する
     記述に誤りがあり改訂。

  ・ .ini の XMSGSIZE に大きな値を設定した場合に、CPU負荷が増加する現象を回避。



■ V12.121 : 2012/12/12

  ・ _TDSMDMssgInitialize() にて、ロック制御を行う指定をしている場合で、_TDSMDMssgFinc() にて、
     指定 SF-Code に合致するメッセージが存在せず、エラーで戻る場合にも _TDSMDMssgExit() を実行し
     ないとロックが解除されない問題を解決。

  ・ NSG/TS300 形式のメッセージ定義ファイルを使用した場合の、デフォルト・パラメータ、チェック・
     パラメータの指定で、"" を指定すると、'"' が設定されてしまう問題を解決。

  ・ 通信トレース出力におけるリスト形式表示で、データ項目値を複数行に渡り表示することで、全データ
     値を表示することを可能とした。(TRCTTYPE&0x04) にて指定する。

  ・ 通信トレース出力における１６進数形式表示で、１行に表示するデータ個数を、16バイト、20バイトの
     選択を可能とした。(TRCTTYPE&0x08) にて指定する。

  ・ _TDSMssgBuild()、_TDSMssgNext() の mode&0x4000 を有効とし、２バイト文字列の自動変換をサポート
     した。

  ・ 通信トレースに任意のコメントを出力する際、_TDSCommSendComment() で指定した文字列の後ろに、
     ゴミが付いてしまう場合がある問題を解決。
     また、長いメッセージを指定した場合に発生する問題を解決。

  ・ 通信トレース出力時、SECS データを構成する項目のデータ個数が多く、トレースの１行に収まらずに
     最後が、"..." 表記となる場合に、通信トレースに正しく表示されない問題を解決。

  ・ Windows での使用時に、DEVMODE の設定が S9Fx でトランザクションの解放を行う設定の場合に、トラ
     ンザクションの解放がされない問題を解決。

  ・ Ｔ３タイムアウト発生後に対応する２次メッセージを受信する等により、予期せぬメッセージを受信し
     た場合の報告がされない問題を解決。_TDSCommRecv() から -EFAULT で戻るように改訂。

  ・ SECS-1 接続の場合、_TDSCommOpen() 直後に、_TDSCommStatus() の値が =3 となり、接続状態を示す
     ように改訂。

  ・ _TDSSMMssgXxxxx()、_TDSTSMssgXxxxx() 系関数を廃し、_TDSMDMssgXxxxx() に一本化した。
     _TDSSMMssgXxxxx()、_TDSTSMssgXxxxx() 系関数は、互換性を保持するため、TDS.h 内でマクロ定義。
 
  ・ TDSSample1Proc.cpp、TDSSample2Proc.cpp での _TDSMDMssgInitialize() の mode の値が、仕様書での
     定義と異なった設定（0x8000 及び 0x0000）にしてしまっていたものを、正しい値（0x4000）に訂正。

  ・ 付属の Sample.sml の S6F11 の構成を変更しました。ご注意下さい。



■ V12.122 : 2013/11/10

  ・ 内部管理上の問題に関する改修。機能での変更はない。



■ V14.040 : 2014/04/25

  ・ C#、VB 対応 DLL である TDCSS.dll、TDVBS.dll が Win32 プラットホーム用であることを明記し、
     サンプルの Makefile 及び Readme.txt に、Win64 プラットホームでの Build 方法を記述。

  ・ 有効でないメッセージ定義ファイルを指定しているにも関わらず、誤って通信トレースにメッセージ名
     称、メッセージ項目名称を表示する旨の指示を行っている場合の問題を回避。

  ・ 処理中にシステム時刻が大きく変化した場合のタイムアウト処理に対応。

  ・ Sample1、Sample2 において終了時に異常終了する現象に簡易的に対応。詳細は、Sample1Dlg.cpp、
     Sample2Dlg.cpp 内のコメント参照。



■ V14.060 : 2014/06/27

  ・ Java API を整備 (JNA を使用した実装)

  ・ MacOS X (10.6.3 以降) に対応



■ V15.050 : 2015/05/08

  ・ T7 タイムアウト 及び 無受信タイムアウト発生時の、エラー情報を、ユーザＡＰにまで返す様に改訂。

  ・ １次メッセージと２次メッセージのトレース出力の順番が入れ違いになる現象を回避

  ・ .ini ファイルの DEVID 行に、複数の DeviceID を指定可能とした。

  ・ FreeBSD (10.1 以降) に対応



■ V15.080 : 2015/08/01

  ・ 64bit アプリケーション対応の .lib、.dll 等 (UNIX 系ＯＳも含む) を整備。

  ・ TDS.pdf の _TDSMssgNext() の戻り値で、解析終了を意味する値を -ENODATA と誤記していたが、正し
     い値 -E_NODATA に訂正。

  ・ TDS.h に _TDSUDrvUserComment() マクロを定義

  ・ HSMS 接続の場合、_TDSCommRecv() を実行しないと、HSMS Selected になる過程での状態を
     _TDSCommStatus() が正しい値を返さない現象を、HSMS Selected 以前の状態の場合 _TDSCommStatus()
     内で _TDSCommRecv() を実行する事により回避するように改訂。

  ・ SECS-2 メッセージ編集における項目形式コード =022 (ローカル・キャラクタ文字列項目) の扱いに誤
     りがあり、2Bytes で１項目とカウントしていたのを、正しく 1Byte で１項目とするよう修正。
     同時に、UTF-8 と SJIS、EUC-J 間での変換時に、使用 Byte数が異なる事による相違を（できるだけ）
     吸収するように改訂。

  ・ 上記に関連して、通信トレース出力において、マルチバイト文字列（"K" 指定）が正しく表現されない
     問題を改訂。また、同項目を含むメッセージを正しく認識できず、トレース出力において項目名が表示
     されない問題、_TDSMDMssgAutoRes() で対応メッセージを選択しない問題を修正。

  ・ メッセージ定義を使用した２次メッセージの自動選択機能（_TDSMDMssgAutoRes()）において、メッセー
     ジ方向を両方向とした１次メッセージ定義の下方に定義した２次メッセージの選択をしない現象を修正。

  ・ SECS メッセージの構築、解析が SECS 通信制御識別子を指定しなくても可能とした。
     _TDSMssgInit()、_TDSMssgFind() の mode に bit#11 を新設し、パラメータ fdc の扱いを変更。
     これにより、TDS 設定ファイル (.ini ファイル) を用意しなくても、SECS メッセージの構築、解析を
     可能とした。

  ・ PeerGroup 社 SDR の API と互換性のある C、C++ における SdrXxxxx() 関数 I/F 互換ライブラリ
     及び Yokogawa 社 YSD の API と互換性のある C、C++ における YSD_Xxxxxx() 関数 I/F 互換ライブラ
     リを、おまけとして整備した。
     SDR 互換 API、YSD 互換 API に関しては、弊社（info@trust-design.co.jp）までお問い合わせ下さい。



■ V15.110 : 2015/11/13

  ・ ライセンス管理の誤り（ファイアーウォール等によりライセンス管理情報がブロックされたと誤検出し
     てしまう場合がある）を改訂。



■ V15.111 : 2015/11/27

  ・ 設定ファイル（.ini）から取得した設定値を、初期化時 及び 再読込時に通信トレース・ファイルに
     出力する。
  ・ 起動スレッドのスタック・サイズの指定値（THSTACKUSR、THSTACKSYS）を正しく評価できていなかった
     問題を解決。



■ V16.010 : 2016/01/08

  ・ 設定ファイル（.ini）における共通項目に関するセクションとして、従来の [DEFAULT] に加えて
     [SECSCOMMON] を追加。従って、各接続条件において共通なパラメータは、[DEFAULT] もしくは
     [SECSCOMMON] セクションで定義することが可能。
     従来 [SECSCOMMON] セクションを定義し、使用している場合は、申し訳ありませんが、他のセクション
     名に変更する等の対応が必要になります。

  ・ 設定ファイル (.ini) の DEVMODE 指定の第16ビットを追加し、HSMS 通信における _TDSCommSend() で
     の Select、Deselect、Separate Request 送信時のセッションＩＤに、任意の値を付与する事を可能と
     した。

  ・ ライセンス管理において、他ＰＣでの同一ライセンス・キーコードのチェックを、ライセンス・キー
     コード発行日から６ヶ月が経過した後実行していたが、ライセンス・キーコード発行日から実行する
     ように変更。



■ V16.011 : 2016/01/15

  ・ 設定ファイル（.ini ファイル）を評価する際、DEVID の指定を [DEFAULT] セクション以外で複数指定
     した場合等に異常終了する等の場合がある問題を修正。



■ V16.012 : 2016/02/25

  ・ TDS.h の _TDSCommUserComment()、_TDSUDrvUserComment() のマクロ定義に ';' が付属している不具合
     を改訂。

  ・ ＡＰからの Reject 要求送信において、SessionID (DeviceID) を無指定 (=0) とした場合にも、データ
     送信要求と同様、設定ファイル (.ini ファイル) の DEVID に指定した先頭の値を使用するように改訂。

  ・ _TDSMDMssgInitialize() の (mode&0x03) による、メッセージ定義ファイルの形式指定を path==0 を指
     定した場合は無効とし、この場合のメッセージ定義ファイルの形式指定は、(TRCTTYPE&0x0300) 値にて
     決定する。

  ・ トレース・ファイルをサイズ超過で切り替える場合、1000 以上の通番が付いたファイルの次のファイル
     が、正しい通番にならない問題を修正。

  ・ トレース・ファイルとして、日付をファイル先頭に付与した形式を指定した場合で、ファイル・サイズ
     超過でのファイル切り替え指定を行った場合、正しい通番が付与されない場合がある問題を修正。

  ・ 古トレース・ファイル削除機能において、正しく削除できない場合（日付指定の無いトレース・ファイ
     ル、日付フォルダを使用したトレース・ファイル）を解決。

  ・ 起動時点が、設定ファイル（.ini）の TRCDELTIME 以降である場合、翌日の TRCDELTIME になるまで
     古トレース・ファイル削除機能を実行しなかったのを、TRCDELDAY として負値を設定した場合は、起動
     時点で常に１回同起動を実行するように機能追加。

  ・ Java 用 .jar ファイルの名称を TDS.jar から TDJVS.jar に変更。
     現在 TDS.jar を使用している場合は、CLASSPATH の設定を TDJVS.jar に変更してください。
     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  ・ JNA を使用しない（従って、TDS.dll も使用しない）Java 実行環境のみで動作する TDS.jar をリリー
     ス。ただし、TDS.jar は TDS.dll（及び TDJVS.jar）に比して、機能は限定的である。

  ・ Sample0/ のサンプル・ソースを改訂。



■ V16.040 : 2016/04/05

  ・ HSMS-GS 動作モードのサポート
     設定ファイル (.ini) の SECSMODE にいくつかの動作設定ビットを新設。また、従来の動作設定ビット
     とあわせて、HSMS-GS 動作モードをサポートする。新設動作設定ビットの詳細は、以下の記述 及び
     TDS.pdf を "HSMS-GS" で検索参照すること。

  ・ 設定ファイル (.ini) の SECSMODE の 0x8000、0x4000、0x2000、0x1000 ビットの設定値を追加し、
     HSMS 動作時の動作状態に関するモード設定を追加。

  ・ 設定ファイル (.ini) に指定する DEVMODE の 0x0008 及び 0x010000 の２つのビット指定を、それぞれ
     SECSMODE の 0x0800、0x0400 に移動。DEVMODE の当該ビット設定も当面は有効とする。
     近い将来のバージョンにおいて、DEVMODE の当該ビットは廃止予定です。SECSMODE の対応ビットへの
     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     変更をお願いします。
     ~~~~~~~~~~~~~~~~~~~

  ・ HSMS Passive Open モードにおいて、既接続時に、新たな接続があった場合は、現状は指定により、即
     時切断する動作モードのみだが、SEMI E37 9.2.4.1 a の記述に基づく、Select Request に対して
     Select Status =3 を応答した後に切断する動作モードを、設定ファイル (.ini) の (SECSMODE&0x1000)
     に指定することにより可能とする。

  ・ _TDSUDrvRecv() において、32768Byte 以上のメッセージを受信することができなかったが、受信可能と
     した。


  ・ _TDSUDrvXxxx() を使用して Active 側と自動接続を行っている場合に、Passive 側が先に処理を終了
     した後、Active 側が _TDSUDrvClose() を実行すると、接続要求が異常終了し AP が異常停止してしま
     う現象が発生する場合がある問題を回避。

  ・ T3TimeOut、T6TimeOut 等発生時に、指定最大メッセージ長のメモリ・リークが発生する場合がある問題
     を回避。

  ・ HSMS Select Response 受信時に HeaderByte 3 (fcd) 値を評価していなかったが、正しく評価するよう
     に改訂。

  ・ Separate request 発行時に、CommRecv() にて req=99 (Not connected) が発生する前に、req=0 (All
     0) のメッセージが発生してしまう不具合を改訂。


  ・ _TDSCommSendError()、_TDSUDrvSendError() の (mode&0x02) を有効化し、厳密に送信結果を待つモー
     ドを追加。

  ・ 受信用 Callback を使用する等により、複数のスレッドで _TDSCommSend() を実行する時の mode 値を
     (mode&0x02)!=0 とした場合に、排他制御を実施する必要があったが、内部で排他制御を行う事により、
     AP 側での排他制御を不要とした。

  ・ １次メッセージ送信時にトランザクション管理テーブルが満杯の場合でも、エラー状態をエラー・ト
     レースに出力した上で送信処理を行っていたが、送信処理は行わず、エラーをＡＰに通知するように
     改訂。

  ・ T3Timeout 発生等により、その後の対応２次メッセージ受信時に .ini の DEVMODE の設定によっては
     S9F7 と Reject(3) を同時に自動送信する場合があるが、このような場合には S9F7 送信のみを送信す
     るように改訂。


  ・ C# 用の一部関数における引数の渡し方で ref にて修飾した配列引数に関して、ref キーワードを削除。
     C# 用関数を使用している AP は、ご面倒をお掛けいたしますが "ref" キーワードを削除し、再 Build
     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     していただきますようお願い申し上げます。
     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  ・ VB 用の一部関数において配列引数の渡し方を byref から byval に変更。
     従って、VB 用関数を使用している AP は、お手数ですが、再 Build が必要になります。
             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  ・ 機能増強に伴い、使用するスタック・サイズが増加しています。特に Java + JNA 環境でご使用の場合
     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     等、設定ファイル (.ini) の THSTACKUSR、THSTACKSYS の設定値に十分留意してください。
     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  ・ 設定ファイル (.ini) の TRCPLEVEL、TRCULEVEL の空ループ出力のレベルを 21 から 23 に変更。

  ・ Sample0/、Sample1/、Sample2/ のサンプル・ソースを改訂
     ２次メッセージ送信時のデバイスＩＤを明示的に指定。



■ V16.060 : 2016/06/10

  ・ メッセージ定義ファイルでの２次メッセージ定義におけるメッセージ属性に 'D' を追加し、デフォルト
     の２次メッセージである事を宣言可能とした。これにより、_TDSMDMssgAutoRes() において、受信１次
     メッセージの構造が一致しないことにより、該当１次メッセージが見つからない場合も、SF-Code のみ
     が該当する場合の２次メッセージを特定する事を可能とした。



■ V16.060b: 2017/03/01

  ・ Sample0/SemiStandard.sml を改訂



■ V17.100 : 2017/10/06

  ・ 64bit バージョンにおいて、起動時に (トレース・ファイルのオープン処理に関連して) 異常終了する場
     合があることを解決した。

  ・ Windows 版での SECS-1 (RS232C) 接続において、115200 を超え定義の無い BPS (例えば 230400 等) を
     サポートした。



■ V18.010 : 2018/01/10

  ・ Passive 接続時に、Active 側から通常の切断手順以外で接続が切断された場合に、以降の接続において、
     接続後の切断の直後に再度接続が行われる場合等のおいて、動作が不安定になる現象を改善した。

  ・ (SECSMODE&0x000c0000) により HSMS 接続時の TCP/IP KeepAlive 機能の使用可否を設定可能とした。

  ・ TDSUDrv() による Active 時の自動接続処理において、切断を検知してから再接続動作をするまでの時間
     を、即時もしくは、T5 時間経過後のどちらかを (SECSMODE&0x00010000) で選択可能とした。

  ・ VB 用関数を使用する場合の "namespace TDVBL" を明示した。
     VB 用関数を使用する AP は、"imports TDVBL" を指定して、再 Build する必要があります。
     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  ・ SampleX フォルダを追加し、VS2013 の IDE 環境による 32bit AP の Build サンプルを置いた。
     サンプル AP 自体は、従来のものと変わりはない。



■ V18.020 : 2018/02/10

  ・ SML 形式メッセージ定義ファイルのメッセージ定義行で flag として 'H'、'E' のどちらも指定しない
     ケースにおいて、'D' のみを指定（即ち "D" もしくは "WD"）した場合に、メッセージ自体が有効にな
     らず、'D' 指定も有効にならない問題を解決。

  ・ メッセージ定義ファイルを使用した SECS メッセージの構築処理において、不定個数リスト内に @TIME
     項目が存在した場合、その項目が現在時刻に変換されない問題を解決。

  ・ SML 形式メッセージ定義ファイルにおける L[0|n] 形式をサポートした。
     これにより、LIST 項目に単一項目だけでなく、0個もしくは n個の異なるデータ項目を指定可能とした。

  ・ 上記 L[0|n] のサポートにより、SML 形式メッセージ定義ファイルのサンプル "SemiStandard.sml" を
     一部改訂。



■ V18.031 : 2018/03/23

  ・ SECS-1 接続時に受信エラーが発生した場合のエラー・メッセージのトレース出力が原因で異常終了する
     可能性がある問題を改訂。



■ V18.041 : 2018/04/23

  ・ 指定の .ini ファイル等のパス名称が長い (概ね 120バイト超) 場合に、バッファオーバーランが発生
     し、動作が不定あるいは不安定になる場合がある問題を改訂。



■ V18.050 : 2018/05/28

  ・ HSMS Passive 動作時の、同一 TCP/IP Port# への複数接続を許可する仕様を追加。
     本機能は (SECSMODE&0x020000)!=0 とすることにより有効となる。
     本機能を使用する場合、必ず TDS.pdf の (SECSMODE&0x020000) 部に記載の注記、DEVID に関する記述
     を参照し、適切な設定を行うこと。

  ・ _TDSCommSend() 等の送信処理時に指定する devid に与える値として -1 の指定を新設し、-1 の場合
     .ini の DEVID に指定の先頭デバイスＩＤを使用することとした。
     devid=0 指定時は、.ini の DEVID に 0x0000 の指定が含まれれば devid=0x0000 として、そのまま使
     用し、含まれない場合は、DEVID に指定の先頭デバイスＩＤを使用する。
     これにより、DevID として 0x0000 を使用する必要がある場合でも、.ini の DEVID の指定の先頭に
     0x0000 を指定する必要はなくなる。ただし、この場合で先頭 DevID を指定する場合は、devid=-1 を
     指定すること。
     （今まで通りの .ini 指定で DEVID の先頭に 0x0000 が指定されている場合、devid=0 を指定した今
     まで通りの Call では、今まで通りの動作となる。）

  ・ .ini に TRCTHOST、TRCTPORT を新設し、通信トレース出力を TCP/IP で送出する機能を追加。
     TRCTHOST に示すホストで動作する TCP/IP Server 機能を持ち、接続された Port からテキストを受信
     するＡＰを動作させると、その Server AP に接続し、通信トレースを逐次送出する。

  ・ 通信トレースの SECS ヘッダ表示に、その通信に使用した Stream Descriptor 値を追加し、複数接続
     を実行するプロセスにおける通信相手毎の識別を容易にした。

  ・ HSMS Active 接続時に発行する Select.Request に対する Passive 側からの Select.Responce の応答
     がとても速い場合に、Select 状態に移行せず T7TO を発生してしまう場合がある現象を回避。

  ・ FreeBSD において、標準入力が閉じてしまう場合がある問題を解決。

  ・ エラー番号一覧表示するツール tdse を新規ツールとして提供。



■ V18.070 : 2018/07/01

  ・ SECS-1 接続時において、.ini に T1=0 として指定されていると、通信エラーが発生した場合に、エラー
     の後処理時に、永久に待ち状態となってしまう問題を解決。

  ・ SECS-1 接続時において、従来は MULTI BLOCK メッセージの受信途中で、送信要求を受け付けた場合、
     タイミングによっては、その送信要求を優先して送信処理に入るが、このような場合でのデフォルト動作
     を、送信処理を MULTI BLOCK メッセージ受信での最終 BLOCK の受信後に開始するように変更し、.ini
     での (SECSMODE&0x10000000)!=0 の指定により、従来通りの動作をするように改訂。

  ・ SECS-1 接続時における、MULTI BLOCK メッセージの受信において、先頭 BLOCK の BLOCK 番号が任意の
     ものであっても受信を許可するモード ((SECSMODE&0x200000000)!=0) を追加した。

  ・ SECS-1 接続時における、MULTI BLOCK メッセージの受信において、受信した BLOCK 番号値が、受信を
     期待している番号と異なっている場合に、NAK 応答をして、送信側に再送を促すモード
     ((SECSMODE&0x400000000)!=0) を追加した。

  ・ SECS-1 接続時の通信トレースでは、送信時のトレースを送信前に出力するため、BLOCK に関する表示は
     常に =0 で表示していたが、送信データ長から BLOCK 値を計算して、送信するであろう最終 BLOCK の
     値を出力するように変更。

  ・ SECS-1 接続時の通信トレースに於いて、メッセージ定義を使用したメッセージ名称、項目名称の表示を
     指示しているにも関わらず、送信メッセージの表示に、メッセージ名称、項目名称が表示されない問題を
     解決。



■ V19.070 : 2019/07/05

  ・ 設定ファイルにおける以下のビットの扱いを、以前からの予告の通り廃止した。
    ・ (DEVMODE&0x000008) : HSMS Select,Deselect,LinkTest Request での W-bit の扱い
                            (SECSMODE&0x000800) に移行
    ・ (DEVMODE&0x010000) : HSMS Select,Deselect,Separate Request でのセッションID (デバイスID) の
                            扱い
                            (SECSMODE&0x000400) に移行
     [注意]
     現在、これらのビットの設定により TDS の動作設定をされている場合は、移行先のビットでの設定に
     変更し、これらのビット値を =0 とする必要があります。

  ・ C# 用関数における以下の関数において、日本語を使用した場合に異常終了する場合がある問題を解決
     した。
    ・ _TDCSSMssgBuild()    , _MssgBuild()
    ・ _TDCSSMDMssgBuild()  , _MDMssgBuild()
    ・ _TDCSSSMMssgBuild()  , _SMMssgBuild()
    ・ _TDCSSTSMssgBuild()  , _TMMssgBuild()

  ・ VB 用関数における以下の関数において、signed byte (sbyte)、unsigned short (ushort)、
     unsigned int (uinteger)、unsigned long (ulong) の使用を可能とした。
    ・ _TDSMssgBuild()
    ・ _TDSMDMssgBuild()
    ・ _TDSMDMssgNext()

  ・ tdsc、tdsm に tdse と同様、終了前に「終了して良いか」を確認するオプション "-w" を追加し、
     Windows の場合は、デフォルトで -w を有効とした。
     これにより、tdsc、tdsm も tdse と同様、.exe を Double Click 等で起動した場合も、cmd.exe が自動
     的に終了して、画面表示が確認できない現象を回避する。

  ・ 英語標記プログラム 及び 英語ドキュメントの追加


■ V19.100 : 2019/10/25

  ・ SML 形式のメッセージ定義ファイルにおける Multi Byte Text String 項目における LSH (Local String
     Header) の指定を可能とした。
     Multi Byte Text String (022) の指定時のニモニックとして 'M99' (99:LSH の値) を指定する。

  ・ 通信トレース・ファイルへの出力形式に Multi Byte Text String 項目の LSH (Local String Header)
     の出力を .ini の (TRCTTYPE&0x4000) の指定により可能とした。

  ・ _TDSMssgBuild()、_TDSMDMssgBuild()、_TDSMssgNext()、_TDSMDMssgNext() 各関数において、Multi
     Byte Text String 項目の文字コード変換実施の有無を指定可能とした。

  ・ _TDSMssgNextL() の (mode&0x4000) の指定により Multi Byte Text String 項目の LSH (Local String
     Header) 表示を可能とした。

  ・ TDSCommClose()、TDSUDrvClose() 処理を見直し、終了時間の短縮を計った。

  ・ NIC が存在しない場合に、ライセンス管理処理の不備により、異常終了する場合がある問題を解決。

  ・ ライセンス異常発生等の何らかの異常発生時の終了処理を見直し、終了時に異常終了する場合がある等の
     不具合を改定し、終了処理時間の短縮を図った。

  ・ サンプル・プログラムの構成を変更
     各ディレクトリにおける Make もしくは Build 処理にて Sample0/bin32 及び Sample0/bin64 に実行
     ファイル 及び 設定ファイル等を自動配置するように変更した。
     なお Windows における SampleX に関しては、従来通り ./bin/ に自動配置する。

  ・ VS2005、VS2008 でのサポートを 2019年末で終了することを告知


■ V20.040 : 2020/04/17

  ・ _TDSCommRecv()、_TDSCommSend() 等からの戻り値でのエラー・コード および コールバック関数で取得
     するエラー・コードがＯＳ種別、ＯＳバージョン等により異なる問題をエラー・コードを統一することに
     より解決した。
     TDS で使用するエラー・コード（番号）を示すマクロ定数は、"E_" で始まるマクロ名とした。
     ----
     従って、現在 "ENOMEM" 等のマクロ名を使用している場合は、正しくは "E_NOMEM" 等に変更する必要が
     あります。しかしながら、現状 E_NOENT、E_INTR ... E_NOSPC 値は ENOENT、EINTR ... ENOSPC 値と同
     一なので、現状では変更しなくても動作に支障はありません。
     -----
     C#、VB、Java 等の言語でエラー・コードを参照する場合は、tdse.exe により表示されるエラー番号を
     参照してください。

  ・ Windows において TDS 内部で使用するキューとして Local Memory を使用する場合 ((QUEMODE&0xc0)
     ==0x80) に、Link Test を使用する等で TDS 内部で発生するメッセージ送信要求と、ＡＰからの送信
     要求とが同時に発生した場合に競合を起こしてしまい、どちらかのメッセージが送信処理されず、結果
     としてＡＰに -E_TIMEOUT を報告する もしくは -E_T6TIMEDOUT が発生する現象があることを解決した。

  ・ _TDSCommOpen() の mode に 0x1000 ビットの設定を追加し、通信処理実行部を AP 内部のスレッドとし
     て実行する場合（即ち _TDSCommOpen() の (mode&0x1003)==0x1002 の場合） は、_TDSCommStatus()、
     _TDSCommSelectStatus() で取得する現在の接続状態を、通信制御部が持つ現在の接続状態と同期するこ
     とを可能とした。
     この設定 ((mode&0x1003)==0x1002) により、通信制御をスレッド動作させる場合は、TDS からの受信を
     Callback によらない場合も  _TDSCommRecv() の実行に関わらず、現在の最新接続状態を常に取得できる
     こととなった。

  ・ HSMS-GS 接続時の Select、Deselect、Separate 処理を見直し、現在の Select 状態を正しく認識できる
     ように改訂。

  ・ _TDSUDrvXxxx() を使用して HSMS-GS 通信を Active 接続で行う場合の自動接続方法を改善。
     使用するセッションＩＤ毎の Separate request により、あるセッションＩＤが "Not Select" 状態に
     なった場合の再接続手順を見直し、接続処理ができない状態を回避した。

  ・ HSMS Passive 接続時の重複接続の ACCEPT 時において、既接続を優先する場合に、ユーザＡＰに切断を
     報告してしまう（新規接続に関する切断処理の報告）問題を解決。

  ・ 受信 Callback 関数を使用する場合の HSMS-SS/HSMS-GS 通信において _TDSCommSend()、_TDSUDrvSend()
     により SECS メッセージの送信をする時、現在の Select 状態をチェックし、Select 状態でない場合は、
     -E_NOEXEC エラーとした。 

  ・ _TDSCommRecv()、_TDSCommSend()、_TDSCommSendError() 及び同様の _TDSUDrvXxxx() の (mode&0x4000)
     を新設し、取得、設定する SECS ヘッダ内の複数バイト項目のバイトオーダー形式の指定を可能とした。
     現在 AP が参照する SECS ヘッダの構成は動作システムのバイトオーダーだが、SECS メッセージ本来の
     バイトオーダーでの参照も可能とした。

  ・ C# 版 TDS の以下の関数において、各項目値の型として sbyte を使用可能とした。
    ・ MssgBuild()
    ・ MDMssgBuild()
    ・ MDMssgNext()

  ・ 各サンプル・プログラム（.c、.cpp、.cs、.vb、.java、.py、.rb）に関して以下の改訂を行った。
    ・ 起動パラメータを追加し、動作の形態を指示するパラメータを起動時に変更可能とした。
    ・ S1F21、S1F22 の送受信処理を追加し、全てのデータ型に関する送受信例を示した。
    ・ DispSECSMssg() 内に、メッセージ定義ファイルを用いる事により、_TDSMDMssgFind()、MDMssgNext()、
       MDMssgEnd() を使用して、必要とする任意のメッセージ項目の値を取得する方法を例示した。


■ V20.090 : 2020/09/01

  ・ .ini において (DEVMODE&0x4000)!=0 とすることにより、HSMS 通信時の LinkTest の送信タイマーを、
     接続相手からのデータ・メッセージ受信によりリセットする事を可能とした。これにより、この設定を
     行うとアプリケーションのメッセージ交換がされている間は LinkTest を発行しなくなる。

  ・ TDS.h に SECS-1 接続、HSMS 接続毎の SECS Header メンバーを格納した構造体 TDSECSHeadA を新設。

  ・ 以下の関数における mode 値の第14ビットの設定 (取得あるいは指定する SECS ヘッダを Network
     ByteOrder とする) (mode&0x4000) を、第13ビット (mode&0x2000) に移動した。
    ・ _TDSCommRecv()、_TDSCommSend()、_TDSCommSendError()
    ・ _TDSUDrvRecv()、_TDSUDrvSend()、_TDSUDrvSendError()
     現在、上記関数にて本機能を使用している場合は、mode 指定のビットの移動をお願いいたします。
     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  ・ _TDSMDMssgAutoRes() の mode に、第13ビット (mode&0x2000) の設定を追加し、指定する SECS ヘッダ
     を Network ByteOrder での指定を可能とした。


■ V21.010 : 2021/01/15
■ V21.011 : 2021/02/25

  ・ TDS 動作中に、使用している .ini ファイルの SECSMODE、DEVMODE の一部を変更可能とした。
     変更可能なのは (SECSMODE&0x70010f00)、(DEVMODE &0x0000dfc7) の各ビットに限る。

  ・ _TDSMssgBuild()、_TDSMDMssgEnd() 及び _TDSMDMssgAutoRes() において、指定メッセージ項目が SECS
     メッセージ領域内で使用する Length Byte のサイズ（自動、2、3 のいずれか）を指定可能とした。

  ・ .ini ファイルでの (TRCTTYPE&0x1000) の指定により、通信トレースへの LIST 形式出力に、関連する
     SECS-II Message のバイトデータの 16進数コードの出力を付加表示する事を可能とした。
     これにより、SECS-II Message データ内容の詳細確認が容易になる。

  ・ (V21.011) 
     ユーザ通信トレース機能、外部通信トレース機能を使用した場合に、通信トレース・ファイルに記録され
     る時刻が、前行のものに置き換わりズレてしまう問題を解決。


■ V21.060 : 2021/06/15
■ V21.061 : 2021/07/23
■ V21.062 : 2021/08/17

  ・ TDS を構成するサポート・プログラム（tdsc、tdsm、tdse）の 64bit版を用意した。

  ・ サンプル・ソース・コードにおける TDSCommRecv() 等のおける mode での SECS ヘッダの ByteOrder に
     関する指定ビットに誤りがあるのを修正した。

  ・ SECS/HSMS Simulator (tdlSSim) のための改訂
     関連して、サンプル・ソース・コード 及び サンプル設定ファイルを改訂した。Simulator との整合を
     保つためであり、内容的な変更はない。


■ V23.040 : 2023/04/25
   V23.041 : 2023/06/15

  ・ TDS が SF-Code 毎に統計情報（SF-Code 毎の送受信数、異常返信数、トランザクション時間等）を集計
     し、その内容をＡＰが取得する、あるいは通信トレースファイルに出力する機能を新設した。
     以下の関数を参照すること。
     _TDSCommSInfoClear()、_TDSCommSInfoGet()、_TDSCommSInfoOut()
     _TDSUDrvSInfoClear()、_TDSUDrvSInfoGet()、_TDSUDrvSInfoOut()

  ・ _TDSMssgBuild()、_TDSMDMssgBuild() で送信用に作成する SECS メッセージ項目が文字列項目 (A, J,
     M (K)) である場合に、指定テキスト・データ中に \377 形式の Escape code の記述を可能とし、１バイ
     ト毎の非印字バイトの指定を可能とした。
     \377 Escape は３桁の８進数で 1Byte を示し、\001 〜 \376 が指定可能（\000、\377 は指定不可）
  ・ _TDSMssgNext()、_TDSMssgNextL()、_TDSMDMssgNext() で受信 SECS メッセージの取得結果が ASC、JIS8
     文字列項目 (A, J) である場合 (注: マルチバイト文字列 (M(K)) には適用しない）に、含まれる非表示
     バイトを \377 Escape code 形式に変換して出力することを可能とした。

  ・ HSMS 接続において、接続状態が正しく取得できないタイミングがある問題を修正
  ・ 関連してサンプル・プログラムにおける _TDSCommStatus()、_TDSUDrvStatus() に関して改訂を行う

  ・ より簡易なサンプル・コード "FirstSample0" を追加

  ・ プログラマーズ・マニュアルの (SECSMODE&0x00020000) に関する記述誤りを改訂
     (HSMS-GS 時の Passive 側における SeparateReq 送受信時の Connected 状態維持に関するビット)


■ V23.061 : 2023/06/15

  ・ HSMS 動作時の Select Response 受信時の不具合を改定
  ・ 上記以外は SECS/HSMS Simulater (tdlSSim) 向けの改定であり、通常の TDS 動作に関しては無関係の
     改定


■ V23.062 : 2023/09/01

  ・ メッセージ定義を使用したメッセージ解析処理 (TDSMDMssgFind()) において、文字列項目を対象として
     比較項目値を設定した場合に、正しく比較が行われず、比較結果が一致しない事がある問題を解決した


■ V23.063 : 2023/11/01

  ・ SECS-1 接続時における送信メッセージの通信トレース出力ヘッダ Hexa 表示の BLOCK 番号部分に関して、
     以下の改定を行った。
     本来 BLOCK 番号は、１つの SECS-2 メッセージに付与するのではなく、RS232C 通信を使用して１つの
     SECS-2 メッセージを構成する複数の通信 BLOCK 毎に付与するので、通信トレース表示では不定となる。
     これを受信時と同様の値として出力するために、分割最終ブロック番号を送信前に算出し E-Bit と共に
     表示する。


■ V24.040 : 2024/04/15

  ・ 接続先からの１次メッセージに付属するトランザクションＩＤ (32bit で構成する SystemByte) の先頭
     ビットが 1 である場合 (SystemByte を 32bit Signed Integer として扱う場合、負値となる場合）を
     考える。対応する２次メッセージを _TDSCommSend()（あるいは _TDSUDrvSend()）で送信指示し、正常に
     処理すると、 xid に指定した先頭ビットが =1 である値が戻り値としてそのまま戻るので、ＡＰで
     (戻り値<0) としてエラー判定していると、正常終了であってもエラーとして扱ってしまう。
     この問題を解決するため _TDSCommSend()、_TDSCommSendError()、_TDSUDrvSend()、_TDSUDrvSendError()
     の mode に (mode&0x80) を新設した。(mode&0x80)!=0 の場合、正常終了時は常に (戻り値=0) となる。


■ V24.042 : 2024/05/23

  ・ TDSMssgNextL() において .ini で (TRCTTYPE&0x04)==0 とすることにより文字列項目を１行に格納する
     場合、 SECS メッセージのテキスト文字列長が、指定格納先バッファーのサイズよりも大きい時に TDS
     が異常終了する場合がある問題を解決。

  ・ V23.040 の改定において実装した \377 Escape 処理に関して、_TDSMDMssgNext() 実行時に本 Escape
     処理を有効とした場合、処理対象項目が文字項目であり、not パラメータを =0 に指定した場合に
     格納される項目値が 1Byte 少なくなってしまう場合がある現象を解決。

  ・ 通信トレース出力において、(TRCTTYPE&0x80)!=0 を指定した場合でも、メッセージ定義でのメッセージ
     の方向が合致しないメッセージはメッセージ名称、項目名称の表示を行わないが、それを方向が異なって
     いてもメッセージ構造と項目値が設定と合致するもとはメッセージ名称、項目名称を表示するように改定。

  ・ TDSMDMssgXxxx() によりメッセージ定義を使用して SECS Message を構築する際に、項目値として設定す
     るデータをファイルに指定する場合、指定ファイルが存在しない等でデータ取得に失敗すると、現状で
     はその項目自体をメッセージに追加しないが、それではメッセージ構造が指定の構造と変わってしまう。
     それを避け指定のメッセージ構造を維持するため、データ要素数 =0 で項目の登録を行うように改定。


