====================================================================================================
== Release Note (TDSE) =============================================================================

[] V19.070 : 2019/07/05

  + First release of Program in English and English Documentation.



[] V19.100 : 2019/10/25

  + LSH (Local String Header) can be specified in Multi Byte Text String item in SML format message
    definition file.
    Specify 'M99' (99:LSH value) as the mnemonic when specifying Multi Byte Text String (022).

  + LSH (Local String Header) of Multi Byte Text String item can be output to communication trace
    file by specifying (TRCTTYPE&0x4000) of .ini.

  + In _TDSMssgBuild(), _TDSMDMssgBuild(), _TDSMssgNext(), and _TDSMDMssgNext() functions, it is
    now possible to specify whether or not to perform character code conversion for Multi Byte Text
    String items.

  + Enabled to display LSH (Local String Header) of Multi Byte Text String item by specifying
    (mode&0x4000) of _TDSMssgNextL().

  + The TDSCommClose() and TDSUDrvClose() processes were reviewed to shorten the end time.

  + Solved the problem that the software may terminate abnormally due to inadequate license
    management processing when the NIC does not exist.

  + Revised the termination process when any abnormality such as a license abnormality occurred,
    revised the malfunctions such as abnormal termination at the end, and shortened the termination
    process time.

  + Change the configuration of the sample program.
    Changed to automatically place execution files and setting files in Sample0/bin32/ and
    Sample0/bin64/ by Make or Build processing in each directory.
    Note that SampleX on Windows is automatically placed in ./bin/ as before.

  + Announced that support for VS2005 and VS2008 will end at the end of 2019



[] V20.040 : 2020/04/17

  + Problem that error code in return value from _TDSCommRecv(), _TDSCommSend(), etc. and error
    code obtained by callback function differ depending on the OS type, OS version, etc. was solved
    by unifying the error codes.
    Macro constants indicating error codes (numbers) used in TDS are macro names starting with "E_".
    ----
    Therefore, if you are currently using a macro name such as "ENOMEM" etc., originally, it is
    necessary to change to "E_NOMEM" etc.
    However, the current values of E_NOENT, E_INTR ... E_NOSPC are same as the ENOENT, EINTR ...
    ENOSPC values, so there is no problem in operation without changing them at present.
    ----
    When referring to error codes in languages such as C#, VB, Java, etc., refer to the error
    numbers displayed by tdse.exe.

  + Solved the following problem that occurred when using Local Memory as a queue used inside TDS
    ((QUEMODE & 0xc0) == 0x80) on Windows.
    Contention occurs when a message transmission request generated inside the TDS and a trans-
    mission request from the AP occur at the same time, for example, by using the Link Test.
    As a result, either message is not processed for transmission, and E_TIMEDOUT is reported to the
    AP or E_T6TIMEDOUT occurs as a result.

  + Added setting of (mode&0x1000) of _TDSCommOpen().  When the communication processing execution
    unit is executed as a thread inside the AP (that is, when (mode&0x1003)==0x1002 of
    _TDSCommOpen()), the current connection status obtained by _TDSCommStatus() and
    _TDSCommSelectStatus() can be synchronized with the current connection status of the
    communication control unit.
    With this setting ((mode&0x1003)==0x1002), if the communication control is threaded, the current
    connection status can always be obtained regardless of execution of _TDSCommRecv() even if the
    receiving from TDS is not based on Callback.

  + Review the Select, Deselect, and Separate processing when connecting to HSMS-GS and revise so
    that the current Select status can be correctly recognized.

  + Improved automatic connection method when HSMS-GS communication is performed by Active
    connection using _TDSUDrvXxxx().
    The Separate request for each sessionID used re-examined the reconnection procedure when a
    certain sessionID became Not Select status, and avoided the situation where connection
    processing could not be performed.

  + Solved the problem of reporting a disconnection to User AP (reporting disconnection processing
    for new connection) when prioritizing an existing connection at the time of ACCEPT of duplicate
    connection during HSMS Passive connection.

  + When sending SECS messages with _TDSCommSend() and _TDSUDrvSend() in HSMS-SS/HSMS-GS
    communication, the current Select status was checked.  If not, a -E_NOEXEC error occurred.

  + (mode&0x4000) of _TDSCommRecv(), _TDSCommSend(), _TDSCommSendError() and similar _TDSUDrvXxxx()
    are newly added, and it is now possible to specify the byte order format of multiple byte items
    in the SECS header to get and set.
    Currently, the configuration of SECS message header referenced by AP is the byte order of
    operating system, but it is also possible to refer to SECS message in original byte order.

  + In the following functions of C# version TDS, 'sbyte' can be used as the type of each item value.
    - MssgBuild()
    - MDMssgBuild()
    - MDMssgNext()

  + The following revisions were made for each sample program (.c, .cpp, .cs, .vb, .java, .py, .rb).
    - A startup parameter is added, and the parameter that indicates the operation mode can be
      changed at startup.
    - The sending/receiving processing of S1F21 and S1F22 was added, and the sending/receiving
      example for all data types was shown.
    - DispSECSMssg() illustrates how to use _TDSMDMssgFind(), MDMssgNext(), and MDMssgEnd() to get
      the value of any message item you need by using the message definition file.

  + To show send/receive examples for all data types, S1F21 and S1F22 was added to each sample
    program (.c, .cpp, .cs, .vb, .java, .py and .rb).
    In addition, startup parameters for each sample program have been added, and parameters that
    indicate the mode of operation can be changed at startup.


[] V20.090 : 2020/09/01

  + By setting (DEVMODE&0x4000)!=0 in .ini, it became possible to reset LinkTest transmission timer
    during HSMS communication by receiving a data message from connection partner.
    As a result, with this setting, LinkTest will not be issued while application messages are being
    exchanged.

  + TDSECSHeadA structure that stores SECS Header member for each SECS-1 connection and HSMS
    connection is newly added in TDS.h.

  + Moved the setting of the 14th bit of 'mode' value in the following function (SECS header to get
    or specify is Network ByteOrder) (mode&0x4000) to the 13th bit (mode&0x2000).
    - _TDSCommRecv(), _TDSCommSend(), _TDSCommSendError()
    - _TDSUDrvRecv(), _TDSUDrvSend(), _TDSUDrvSendError()
    If you are currently using this function in the above function, please move the bit that
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    specifies mode.
    ~~~~~~~~~~~~~~~
  + Added the setting of the 13th bit (mode&0x2000) to 'mode' of _TDSMDMssgAutoRes(), and made it
    possible to specify the SECS header to be specified in Network ByteOrder. 



[] V21.010 : 2021/01/15
[] V21.011 : 2021/02/25

  + It is possible to change some value of SECSMODE and DEVMODE of the .ini file used during TDS
    operation.
    Only the bits of (SECSMODE&0x70010f00) and (DEVMODE&0x0000dfc7) can be changed.

  + In _TDSMssgBuild(), _TDSMDMssgEnd() and _TDSMDMssgAutoRes(), size of Length Byte (automatic,2,
    or 3) used by the specified message item in the SECS message area can be specified.

  + By specifying (TRCTTYPE&0x1000) in the .ini file, it is possible to additionally display
    output of hexadecimal code of the byte data of related SECS-II Message to the LIST format
    output to communication trace.
    This facilitates detailed confirmation of the SECS-II Message data contents.

  + (V21.011)
    Solved the problem that the time recorded in communication trace file was replaced with the one
    in previous line when user communication trace function and external communication trace
    function were used.


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

  + A 64-bit version of support programs (tdsc, tdsm, tdse) that make up TDS is available.

  + Fixed an error in the specified bit related to ByteOrder in the SECS header in mode such as
    TDSCommRecv() in the sample source code.

  + Revised for SECS/HSMS Simulator (tdlSSim)
    Relatedly, the sample source code and sample configuration file have been revised. This is to
    maintain consistency with the Simulator, and there are no changes in the content.


[] V23.040 : 2023/04/25
   V23.041 : 2023/06/15

  + A new function has been added in which TDS collects statistical information for each SF-Code
    (number of transmissions and receptions for each SF-Code, number of abnormal replies,
    transaction time, etc.), and the AP acquires information or outputs it to communication trace
    file.  See the functions below.
    _TDSCommSInfoClear(), _TDSCommSInfoGet(), _TDSCommSInfoOut()
    _TDSUDrvSInfoClear(), _TDSUDrvSInfoGet(), _TDSUDrvSInfoOut()

  + If SECS message item created for transmission by _TDSMssgBuild() and _TDSMDMssgBuild() is a
    character string item (A,J,M(K)), write \377 format Escape code in the specified text data. 
    This makes it possible to specify non-printing bytes for each byte.
    \377 Escape indicates 1Byte in 3-digit octal number, \001 to \376 can be specified (\000, \377
    cannot be specified)

  + _TDSMssgNext(), _TDSMssgNextL(), _TDSMDMssgNext() can now convert unprintable bytes included
    in ASC and JIS8 string items (A, J) to \377 Escape code format.
    (Note: does not apply to multibyte strings (M(K)))

  + Fixed the problem that there is a timing when the connection status cannot be obtained
    correctly in the HSMS connection.
  + In relation to the above, revise _TDSCommStatus() and _TDSUDrvStatus() in sample program.

  + Added simpler sample code "FirstSample0"

  + Revised description error about (SECSMODE&0x00020000) in "Programmer's Manual".
    (Bit related to maintaining Connected state when SeparateReq is sent/received on Passive
    side during HSMS-GS)


[] V23.061 : 2023/06/15

  + Revised the problem when receiving Select Response during HSMS operation.
  + Other revisions are for the SECS/HSMS Simulater (tdlSSim) and are unrelated to normal TDS
    operation.


[] V23.062 : 2023/09/01

  + Solved the problem that in the message analysis process (TDSMDMssgFind()) that uses message
    definitions, if the comparison item value is set for a character string item, the comparison
    may not be performed correctly and the comparison result may not match.


[] V23.063 : 2023/11/01

  + The following revisions have been made to the BLOCK number part of communi cation trace output
    header Hexa display of sent messages when connected to SECS-1.
    Originally, a BLOCK number is not assigned to one SECS-2 message, but to each of multiple
    communication BLOCKs that make up one SECS-2 message using RS232C communication, so it becomes
    undefined in communication trace display. In order to output this as same value as when
    received, the final divided block number is calculated before transmission and displayed
    together with the E-Bit.


[] V24.040 : 2024/04/15

  + Consider the case where first bit of transaction ID (SystemByte consisting of 32 bits) attached
    to the primary message from peer is 1. (In other words, when SystemByte is 32bit Signed Integer,
    consider the case where it is a negative value.)  If you instruct the corresponding secondary
    message to be sent using _TDSCommSend() (or _TDSUDrvSend()) and process it normally, the value
    whose first bit specified in 'xid' is =1 is returned as return value. Therefore, if application
    determines an error as (return value<0), it will be treated as an error even if it completes
    normally.
    To solve this problem, we added (mode&0x80) to the mode of _TDSCommSend(), _TDSCommSendError(),
    _TDSUDrvSend(), and _TDSUDrvSendError().  If (mode&0x80)!=0, return value will always be 0 upon
    normal termination.


[] V24.042 : 2024/05/23

  + I solved the following problem.  By setting (TRCTTYPE&0x04)==0 in .ini, when storing string
    items in one line with TDSMssgNextL(), TDS will abnormal finish when the text string length of
    SECS message is larger than size of specified storage buffer.

  + Solved the following problem regarding "\377 Escape" processing implemented in V23.040 revision.
    If you enable "\377 Escape" processing when executing _TDSMDMssgNext(), the item to be processed
    is a character item, and 'not' parameter is specified as =0, number of stored items may be
    reduced by 1 Byte. 

  + Improved the following current behavior when specifying (TRCTTYPE&0x80)!=0 in communication
    trace output. Currently, message names and item names are not displayed for messages whose
    message directions in message definition file do not match. With this revision, even if
    direction is different, if message structure and item values match the settings, message name
    and item name will be displayed.

  + Consider the case where data to be set as item values is specified in a file when constructin
    a SECS Message using a message definition file using TDSMDMssgXxxx().  Currently, if data
    acquisition fails because the specified file does not exist, etc., the item itself is not added
    to SECS message.  This will cause the message structure to change from the specified structure.
    In order to avoid this and maintain the specified message structure, it has been revised to
    register items with the number of data elements = 0.


