Attribute VB_Name = "WelHTCom"
Option Explicit

'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
'*
'*		WelHTComm.dll	Module file for VB(V6.0)
'*
'*										WELCOM DESIGN K.K.
'*
'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/

' エラー番号/戻り値定義/受信コード判断用定義
Public Const WelHTCODRecieve = &HFFF                        ' 正常受信判断用
Public Const WelHTERRRecieve = &H8FFFF000                   ' エラー判断用

Public Const WelHTNormalStatus = &H0                        ' 正常状態
Public Const WelHTNotExecute = &H800                        ' 実行していない

Public Const WelHTTXTRecieve = &H1                          ' 文字列受信
Public Const WelHTACKRecieve = &H2                          ' ACK コード受信
Public Const WelHTNAKRecieve = &H4                          ' NAK コード受信
Public Const WelHTCANRecieve = &H8                          ' CAN コード受信
Public Const WelHTBELRecieve = &H10                         ' BEL コード受信
Public Const WelHTFULRecieve = &H20                         ' FUL コード受信
Public Const WelHTENQRecieve = &H40                         ' ENQ コード受信
Public Const WelHTFINRecieve = &H80                         ' 終了コード受信

Public Const WelHTGeneralErr = &H800FF000                   ' 一般エラー判断用

Public Const WelHTPortOpenErr = &H80001000                  ' ポート　オープンエラー
Public Const WelHTTimeOutErr = &H80002000                   ' 受信タイムアウトエラー
Public Const WelHTUserAbortReq = &H80004000                 ' ユーザーによる中断
Public Const WelHTExceptionErr = &H80008000                 ' 例外　エラー
Public Const WelHTProtocolErr = &H80010000                  ' プロトコルエラー

Public Const WelHTPacketErr = &H80F00000                    ' パケット　エラー判断用

Public Const WelHTPacketFmtErr = &H80100000                 ' パケット　フォーマットエラー
Public Const WelHTPacketCrcErr = &H80200000                 ' パケット　CRCエラー
Public Const WelHTPacketOthErr = &H80400000                 ' パケット　その他エラー

Public Const WelHTFileErr = &H8F000000                      ' ファイルエラー判断用

Public Const WelHTFileOpenErr = &H81000000                  ' ファイルオープンエラー
Public Const WelHTFileWriteErr = &H82000000                 ' ファイル書き込みエラー
Public Const WelHTFileReadErr = &H84000000                  ' ファイル読み込みエラー

' 自動実行定義
Public Enum AutoStartENum
    HT_MANUAL = &H0                                         ' 自動実行しない
    HT_AUTOSTART = &H1                                      ' 自動開始
    HT_AUTOEND = &H2                                        ' 自動終了
End Enum

' ファイルＲ／Ｗ定義
Public Enum SettingIOEnum
    HT_SETFIO_DISABLE = &H0                                 ' 設定ファイルＲ／Ｗ　不許可
    HT_SETFIO_PUT = &H1                                     ' 設定ファイル書き出し
    HT_SETFIO_GET = &H2                                     ' 設定ファイル読み込み
End Enum

' ハンディターミナル機種定義
Public Enum HandyTermENum
    HT_MODEL8000 = &H1                                      ' Ｍｏｄｅｌ８０００
    HT_PHL1000 = &H2                                        ' ＰＨＬ１０００
    HT_PHL2600 = &H4                                        ' ＰＨＬ２６００
End Enum

' ポート番号定義
Public Enum PortNoENum
    HT_COM1 = &H1                                           ' ＣＯＭ１
    HT_COM2 = &H2                                           ' ＣＯＭ２
    HT_COM3 = &H4                                           ' ＣＯＭ３
    HT_COM4 = &H8                                           ' ＣＯＭ４
    HT_COM5 = &H10                                          ' ＣＯＭ５
    HT_COM6 = &H20                                          ' ＣＯＭ６
    HT_COM7 = &H40                                          ' ＣＯＭ７
    HT_COM8 = &H80                                          ' ＣＯＭ８
End Enum

' ボーレート定義
Public Enum BaudRaitENum
    HT_BAUD115200 = &H1                                     ' １１５．２Ｋ
    HT_BAUD38400 = &H2                                      ' ３８４００
End Enum

' 接続方法定義
Public Enum ConnectModeENum
    HT_RS232C = &H1                                         ' ＲＳ−２３２Ｃ
    HT_IR705 = &H2                                          ' ＩＲ−７０５
End Enum

' データアップロード時送信コード定義
Public Enum UploadStartCdENum
    HT_SENDVOL = &H1                                        ' ＶＯＬ送信により開始
    HT_SENDENQ = &H2                                        ' ＥＮＱ送信により開始
End Enum

' ＣＲＣタイプ定義
Public Enum CrcTypeENum
    HT_CRC1 = &H1                                           ' ＣＲＣタイプ１（全伝文計算）
    HT_CRC2 = &H2                                           ' ＣＲＣタイプ２（ヘッダ・ＩＤを除いて計算）
End Enum

' プロトコルタイプ定義
Public Enum ProtoTypeENum
    HT_PROTO_WONLY = &H1                                    ' 専用プロトコル
    HT_PROTO_SIMPLE = &H2                                   ' シンプルプロトコル（データ受信時、パケットなし）
End Enum

' 送受信方向定義
Public Enum DirectionEnum
    HT_UPLOAD = &H1                                         ' ＵＰＬＯＡＤ（ＨＴ->ＰＣ）
    HT_DOWNLOAD = &H2                                       ' ＤＯＷＮＬＯＡＤ（ＰＣ->ＨＴ）
End Enum

' 送受信ファイルタイプ定義
Public Enum FileTypeEnum
    HT_FT_PROGRAM = &H1                                     ' プログラムの送信
    HT_FT_MENU = &H2                                        ' メニューの送信
    HT_FT_CSV = &H10                                        ' データの送受信（ＣＳＶ形式）
    HT_FT_MDB = &H20                                        ' データの送受信（ＭＤＢ形式）
    HT_FT_XLS = &H40                                        ' データの送受信（ＸＬＳ形式）
End Enum

Public Const HT_FT_DATA = &HF0                              ' データファイルビット定義

' ファイル名指定タイプ
Public Enum FolderFileEnum
    HT_FILENAME = &H1                                       ' ファイルを指定
    HT_FOLDERNAME = &H2                                     ' フォルダを指定
End Enum

' 編集可／不可
Public Enum EditPermEnum
    HT_EDIT_ENABLE = &H1                                    ' 編集可
    HT_EDIT_DISABLE = &H2                                   ' 編集不可
End Enum

' 設定可能拡張子
Public Enum FileExtENum
    HT_EXT_SYN = &H1                                        ' *.syn - Model8000 Program
    HT_EXT_HEX = &H2                                        ' *.hex - PHL1000/2600 Program
    HT_EXT_PDT = &H4                                        ' *.pdt - Menu file
    HT_EXT_CSV = &H10                                       ' *.csv - CSV Data
    HT_EXT_TXT = &H20                                       ' *.txt - TEXT Data
    HT_EXT_XLS = &H40                                       ' *.xls - XLS Data
    HT_EXT_MDB = &H80                                       ' *.mdv - MDV Data
    HT_EXT_SET = &H100                                      ' *.hst - WelHTCom Setting File
    HT_EXT_ETC = &H1000                                     ' *.*   - All Data
End Enum

' タイトル有り／なし（ＣＳＶ用）
Public Enum TitlePermEnum
    HT_WITHOUT_TITLE = &H1                                  ' タイトル行なし
    HT_WITH_TITLE = &H2                                     ' タイトル行あり
End Enum

' 追加／上書き（ＣＳＶ用）
Public Enum OpenModeEnum
    HT_CSVAPPEND = &H1                                      ' 追加書き込み
    HT_CSVOVERW = &H2                                       ' 上書き
End Enum

' テキスト区切り文字（ＣＳＶ用）
Public Enum TextSepEnum
    HT_CSVSEP_COMMA = &H1                                   ' カンマ（ , )
    HT_CSVSEP_TAB = &H2                                     ' タブ ( \t )
    HT_CSVSEP_SPC = &H4                                     ' スペース ( ' ' )
    HT_CSVSEP_SEMIC = &H8                                   ' セミコロン ( ; )
    HT_CSVSEP_NOEDIT = &H10                                 ' 変換を行わない
End Enum

' 文字列引用符（ＣＳＶ用）
Public Enum TextQuoteEnum
    HT_QUOTE_DOUBLE = &H1                                   ' double quote（ " )
    HT_QUOTE_SINGLE = &H2                                   ' single quote ( ' )
    HT_QUOTE_NOTHING = &H4                                  ' なし
End Enum

' Excelのタイプ（Ｅｘｃｅｌ用）
Public Enum XlsTypeEnum
    HT_XLS_2000 = &H1                                       ' Excel 97/2000 形式
    HT_XLS_95 = &H2                                         ' Excel 97 形式
End Enum

' シート分割区分（Ｅｘｃｅｌ用）
Public Enum SpSheetEnum
    HT_SP_DISABLE = &H1                                     ' シートに分けない
    HT_SP_ENABLE = &H2                                      ' シートに分ける
End Enum

' シート選択方法（Ｅｘｃｅｌ用）
Public Enum ShSelectEnum
    HT_SHEET_NO = &H1                                       ' シート番号
    HT_SHEET_NAME = &H2                                     ' シート名称
End Enum

' ＭＤＢのタイプ（ＭＤＢ用）
Public Enum MdbTypeEnum
    HT_MDB_2000 = &H1                                       ' Access2000形式
    HT_MDB_97 = &H2                                         ' Access97形式
End Enum

' 名称使用区分
Public Enum NameTypeEnum
    HT_DISPLAY = &H1                                        ' 表示にのみ使用
    HT_FIELDNAME = &H2                                      ' フィールド名として使用
End Enum

Public Const HT_DEFAULTSET = &H0                            ' 設定なし
Public Const HT_PERMALL = &H7FFFFFFF                        ' すべて許可

Public Const HT_BLANKITEM = 9999                            ' 空項目（編集項目設定）

' ユーザーインターフェース
'     初期値の指定がない場合、システムのデフォルト値を使用する
'     選択可能の指定がない場合、初期値と同じもののみ許可する

Public Const HT_FILEPATH_LEN = 512                          ' ファイルパス領域サイズ
Public Const HT_FILENAME_LEN = 32                           ' ファイル名領域サイズ
Public Const HT_EDITTBL_MAX = 30                            ' 編集項目数
Public Const HT_ITEMNAME_LEN = 32                           ' 項目名領域サイズ

Public Const HT_BUFFSIZE = 256

' 通信設定 構造体
Public Type WelHComSetTMPL
    port                             As PortNoENum          ' ポート
    baud                             As BaudRaitENum        ' ボーレート
    mode                             As ConnectModeENum     ' 接続モード
    sendcod                          As UploadStartCdENum   ' データアップロード時送信コード
    crctype                          As CrcTypeENum         ' ＣＲＣタイプ指定
    protocol                         As ProtoTypeENum       ' プロトコルタイプ
End Type

' 項目出力順指定 構造体
Public Type WelHTComEditTMPL
    nametype                         As NameTypeEnum        ' 名称使用区分 初期値
    nametype_perm                    As NameTypeEnum        '              選択可能値

    itname(HT_ITEMNAME_LEN - 1, HT_EDITTBL_MAX - 1) _
                                     As Byte                ' 項目名
    out_itno(HT_EDITTBL_MAX - 1)     As Integer             ' 出力順（入力項目の番号を指定）
End Type

' TEXT/CSV  専用 構造体
Public Type WelHTCsvTMPL
    withtitle                        As TitlePermEnum       ' タイトル有無  初期値
    withtitle_perm                   As TitlePermEnum       '               選択可能値

    openmode                         As OpenModeEnum        ' 追加／上書き  初期値
    openmode_perm                    As OpenModeEnum        '               選択可能値

    textsep                          As TextSepEnum         ' 区切り文字  初期値
    textsep_perm                     As TextSepEnum         '             選択可能値

    textquote                        As TextQuoteEnum       ' 引用符  初期値
    textquote_perm                   As TextQuoteEnum       '         選択可能値
End Type

' XLS 専用 構造体
Public Type WelHTXlsTMPL
    xls_type                         As XlsTypeEnum         ' エクセルファイル形式
    xls_type_perm                    As XlsTypeEnum         ' エクセルファイル形式

    tmplatename_edit                 As EditPermEnum        ' テンプレート名変更 可／不可
    tmplatename(HT_FILEPATH_LEN - 1) As Byte                ' テンプレート名

    spsheet                          As SpSheetEnum         ' シートに分割  初期値
    spsheet_perm                     As SpSheetEnum         '               選択可能値

    shselect                         As ShSelectEnum        ' シート選択方法  初期値
    shselect_perm                    As ShSelectEnum        '                 選択可能値

    shselectitem                     As Long                ' シート名に使用する項目番号

    titlerow                         As Long                ' タイトル行
    startrow                         As Long                ' 開始行
End Type

' MDB 専用 構造体
Public Type WelHTMdbTMPL
    mdb_type                         As MdbTypeEnum         ' データベース形式
    mdb_type_perm                    As MdbTypeEnum         ' データベース形式

    tablename_edit                   As EditPermEnum        ' テーブル名変更 可／不可
    tablename(HT_FILENAME_LEN - 1)   As Byte                ' テーブル名

    uid(64 - 1)                      As Byte                ' ユーザーＩＤ
    pwd(64 - 1)                      As Byte                ' パスワード
    dsn(64 - 1)                      As Byte                ' ＤＳＮ（未使用）
End Type


' WelHTCom インターフェース 構造体

Public Type WelHTComTMPL
    ' 機種情報
    httype                           As HandyTermENum       ' 機種  初期値
    httype_perm                      As HandyTermENum       '       選択可能値

    ' 通信設定
    comset                           As WelHComSetTMPL      ' 通信設定 初期値
    comset_perm                      As WelHComSetTMPL      '          選択可能値

    ' 送受信ファイル情報
    direct                           As DirectionEnum       ' 送受信方向  初期値
    direct_perm                      As DirectionEnum       '             選択可能値

    filetype                         As FileTypeEnum        ' ファイル形式  初期値
    filetype_perm                    As FileTypeEnum        '               選択可能値

    ht_fname_edit                    As EditPermEnum        ' ハンディファイル名変更 許可
    ht_fname(HT_FILENAME_LEN - 1)    As Byte                ' ハンディファイル名

    filename_edit                    As EditPermEnum        ' ファイル名変更 許可

    foldfile                         As FolderFileEnum      ' 指定方法（フォルダ／ファイル）  初期値
    foldfile_perm                    As FolderFileEnum      '                                 選択可能値

    fileext_perm                     As FileExtENum         ' ファイル名 指定可能張子
    filename(HT_FILEPATH_LEN - 1)    As Byte                ' フォルダ／ファイル名

    ' 項目編集
    dataitem_edit                    As EditPermEnum        ' 項目編集 変更許可

    itemedit                         As EditPermEnum        ' 項目編集する／しない  初期値
    itemedit_perm                    As EditPermEnum        '                       選択可能値

    selcnt_edit                      As EditPermEnum        ' 最大項目数 変更許可
    selcnt                           As Long                ' 入力項目数

    edittbl                          As WelHTComEditTMPL    ' 項目編集方法設定

    csv                              As WelHTCsvTMPL        ' CSV     専用
    xls                              As WelHTXlsTMPL        ' Excel   専用
    mdb                              As WelHTMdbTMPL        ' Access  専用

    ' 実行制御
    setting                          As SettingIOEnum       ' 設定ファイルＲ／Ｗ
    autorun                          As AutoStartENum       ' 自動実行
End Type


' MoveMemory API
Public Declare Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" _
        (Destination As Byte, Source As Byte, ByVal Length As Long)

'*****************************************************************************
'
' 共通関数定義
'
' *****************************************************************************

'****************************************************************************
' 全通信制御
'****************************************************************************

' WelHT通信制御
Declare Function vbWelHTComFunc Lib "WelHTCom.dll" Alias "WelHTComFunc" _
                                                (ByRef htsetp As WelHTComTMPL) As Long

' 全許可設定
Declare Sub vbWelHTComSetEnable Lib "WelHTCom.dll" Alias "WelHTComSetEnable" _
                                                (ByRef htsetp As WelHTComTMPL)

' 全不許可設定
Declare Sub vbWelHTComSetDisable Lib "WelHTCom.dll" Alias "WelHTComSetDisable" _
                                                (ByRef htsetp As WelHTComTMPL)

' ファイルからの設定の読み込み
Declare Sub WelHTComSettingGet Lib "WelHTCom.dll" _
                                                (ByVal filename As String, _
                                                 ByRef htsetp As WelHTComTMPL)

' ファイルに設定を保存
Declare Sub WelHTComSettingPut Lib "WelHTCom.dll" _
                                                (ByVal filename As String, _
                                                 ByRef htsetp As WelHTComTMPL)


'****************************************************************************
' ファイル自動送受信
'****************************************************************************

' ハンディターミナルからデータをアップロードし、ＣＳＶ形式で保存する
Declare Function WelHTUploadCsv Lib "WelHTCom.dll" _
                                                (ByVal Prm_Fold As String, _
                                                 ByVal Prm_Fnam As String, _
                                                 ByRef Prm_Com As WelHComSetTMPL, _
                                                 ByRef Prm_Edit As WelHTComEditTMPL, _
                                                 ByRef Prm_Csv As WelHTCsvTMPL) As Long

' ハンディターミナルからデータをアップロードし、ＸＬＳ形式で保存する
Declare Function WelHTUploadXls Lib "WelHTCom.dll" _
                                                (ByVal Prm_Fold As String, _
                                                 ByVal Prm_Fnam As String, _
                                                 ByRef Prm_Com As WelHComSetTMPL, _
                                                 ByRef Prm_Edit As WelHTComEditTMPL, _
                                                 ByRef Prm_Xls As WelHTXlsTMPL) As Long

' ハンディターミナルからデータをアップロードし、ＭＤＢ形式で保存する
Declare Function WelHTUploadMdb Lib "WelHTCom.dll" _
                                                (ByVal Prm_Fold As String, _
                                                 ByVal Prm_Fnam As String, _
                                                 ByRef Prm_Com As WelHComSetTMPL, _
                                                 ByRef Prm_Edit As WelHTComEditTMPL, _
                                                 ByRef Prm_Mdb As WelHTMdbTMPL) As Long

' ハンディターミナル(Model8000)にプログラムファイルをダウンロードする
Declare Function WelHTDownloadProgSyn Lib "WelHTCom.dll" _
                                                (ByVal Prm_HTFnam As String, _
                                                 ByVal Prm_Fold As String, _
                                                 ByVal Prm_Fnam As String, _
                                                 ByRef Prm_Com As WelHComSetTMPL) As Long

' ハンディターミナル(PHL)にプログラムファイルをダウンロードする
Declare Function WelHTDownloadProgHex Lib "WelHTCom.dll" _
                                                (ByVal Prm_HTFnam As String, _
                                                 ByVal Prm_Fold As String, _
                                                 ByVal Prm_Fnam As String, _
                                                 ByRef Prm_Com As WelHComSetTMPL) As Long

' ハンディターミナルにメニューファイルをダウンロードする
Declare Function WelHTDownloadMenu Lib "WelHTCom.dll" _
                                                (ByVal Prm_HTFnam As String, _
                                                ByVal Prm_Fold As String, _
                                                ByVal Prm_Fnam As String, _
                                                ByRef Prm_Com As WelHComSetTMPL) As Long

' ハンディターミナルにＣＳＶ形式ファイルのデータをダウンロードする
Declare Function WelHTDownloadCsv Lib "WelHTCom.dll" _
                                                (ByVal Prm_HTFnam As String, _
                                                 ByVal Prm_Fold As String, _
                                                 ByVal Prm_Fnam As String, _
                                                 ByRef Prm_Com As WelHComSetTMPL, _
                                                 ByRef Prm_Edit As WelHTComEditTMPL, _
                                                 ByRef Prm_Csv As WelHTCsvTMPL) As Long

' ハンディターミナルにＸＬＳ形式ファイルのデータをダウンロードする
Declare Function WelHTDownloadXls Lib "WelHTCom.dll" _
                                                (ByVal Prm_HTFnam As String, _
                                                 ByVal Prm_Fold As String, _
                                                 ByVal Prm_Fnam As String, _
                                                 ByRef Prm_Com As WelHComSetTMPL, _
                                                 ByRef Prm_Edit As WelHTComEditTMPL, _
                                                 ByRef Prm_Xls As WelHTXlsTMPL) As Long

' ハンディターミナルにＭＤＢ形式ファイルのデータをダウンロードする
Declare Function WelHTDownloadMdb Lib "WelHTCom.dll" _
                                                (ByVal Prm_HTFnam As String, _
                                                 ByVal Prm_Fold As String, _
                                                 ByVal Prm_Fnam As String, _
                                                 ByRef Prm_Com As WelHComSetTMPL, _
                                                 ByRef Prm_Edit As WelHTComEditTMPL, _
                                                 ByRef Prm_Mdb As WelHTMdbTMPL) As Long

' ファイル送受信状態を得る
Declare Function WelHTStatusGet Lib "WelHTCom.dll" _
                                                (ByVal msg_p As String, _
                                                 ByRef errno_p As Long, _
                                                 ByRef curno_p As Long, _
                                                 ByRef allno_p As Long) As Boolean

' 通信の中断指示
Declare Sub vbWelHTCancelCom Lib "WelHTCom.dll" Alias "WelHTCancelCom" ()

' 送受信データログ開始
Declare Sub WelHTDataLogStart Lib "WelHTCom.dll" (ByVal fname As String)

' 送受信データログ終了
Declare Sub vbWelHTDataLogEnd Lib "WelHTCom.dll" Alias "WelHTDataLogEnd" ()


'****************************************************************************
' 入出力
'****************************************************************************

' 通信ポートオープン
Declare Function vbWelHTPortOpen Lib "WelHTCom.dll" Alias "WelHTPortOpen" _
                                                (ByRef comh_p As Long, _
                                                 ByVal Prm_Port As PortNoENum, _
                                                 ByVal Prm_Baud As BaudRaitENum, _
                                                 ByVal Prm_Mode As ConnectModeENum, _
                                                 ByVal Prm_crc As CrcTypeENum) As Long

' 通信ポートクローズ
Declare Sub vbWelHTPortClose Lib "WelHTCom.dll" Alias "WelHTPortClose" _
                                                (ByVal comh As Long)

' 通信ポート受信バッファクリア
Declare Sub vbWelHTPortClear Lib "WelHTCom.dll" Alias "WelHTPortClear" _
                                                (ByVal comh As Long)

' 伝文終了コード（CR)を付加して、データ送信（パケット編集なし）
Declare Sub WelHTPutRawData Lib "WelHTCom.dll" _
                  (ByVal comh As Long, ByVal SndStr As String)

' データ受信（伝文終了コード（CR)削除・パケットデコードなし）
Declare Function WelHTGetRawData Lib "WelHTCom.dll" _
                     (ByVal comh As Long, ByVal RcvStr As String) As Long

' パケット編集後、送信
Declare Sub WelHTPutTextData Lib "WelHTCom.dll" _
                (ByVal comh As Long, ByVal SndStr As String, ByVal Sep As Integer)

' データ受信（伝文終了コード(CR)削除・パケットデコードあり）
Declare Function WelHTGetTextData Lib "WelHTCom.dll" _
                     (ByVal comh As Long, ByVal RcvStr As String, ByVal Sep As Integer, _
                     ByVal TimeOutCnt As Integer) As Long

' データ送信　＆　データ受信（伝文終了コード(CR)削除・パケットデコードあり）待ち
Declare Function WelHTPutRawData_Wait Lib "WelHTCom.dll" _
                     (ByVal comh As Long, ByVal SndStr As String, ByVal Sep As Integer, ByVal RcvStr As String, _
                     ByVal TimeOutCnt As Integer, ByVal RetryCnt As Integer, ByVal AcceptCode As Long) As Long

' パケット編集後、データ送信　＆　データ受信（伝文終了コード(CR)削除・パケットデコードあり）待ち
Declare Function WelHTPutTextData_Wait Lib "WelHTCom.dll" _
                     (ByVal comh As Long, ByVal SndStr As String, ByVal Sep As Long, ByVal RcvStr As String, _
                     ByVal TimeOutCnt As Integer, ByVal RetryCnt As Integer, ByVal AcceptCode As Long) As Long

' 受信待ち　＆　自動リプライ
Declare Function WelHTGetTextData_Retry Lib "WelHTCom.dll" _
                     (ByVal comh As Long, ByVal RcvStr As String, ByVal Sep As Integer, _
                     ByVal TimeOutCnt As Integer, ByVal RetryCnt As Integer, ByVal AcceptCode As Long) As Long


'****************************************************************************
' 低水準入出力
'****************************************************************************

' 通信ポートのオープン
Declare Function vbWelOpenCom Lib "WelHTCom.dll" Alias "WelOpenCom" _
                     (ByVal nPort As Integer, ByVal nBaud As Long, ByVal mode As Integer) As Long

' 通信ポートのクローズ
Declare Sub vbWelCloseCom Lib "WelHTCom.dll" Alias "WelCloseCom" _
                     (ByVal hcomm As Long)

' 受信バッファのクリア
Declare Sub vbWelClearCom Lib "WelHTCom.dll" Alias "WelClearCom" (ByVal hcomm As Long)

' 通信ポートにデータを書き込む
Declare Sub WelWriteCom Lib "WelHTCom.dll" _
                (ByVal hcomm As Long, ByVal lpStr As String)

Declare Sub WelWriteComEx Lib "WelHTCom.dll" _
                (ByVal hcomm As Long, ByVal lpStr As String, ByVal nCount As Integer)

' 通信ポートからデータを読み込む
Declare Function WelReadCom Lib "WelHTCom.dll" _
                     (ByVal hcomm As Long, ByVal lpStr As String, ByVal endlinecd As Integer) As Long

'*****************************************************************************
'
' VB専用インターフェース関数（文字列の変換を行う）
'   出力パラメータ( VB  から DLL へ ）  vbNullCharを付加する
'   入力パラメータ( DLL から VB  へ ）  必要なバッファサイズを確保して関数コール
'                                     vbNullCharまでを取り出して返す
'*****************************************************************************

' ファイルからの設定の読み込み
Public Sub vbWelHTComSettingGet(ByVal filename As String, ByRef htsetp As WelHTComTMPL)
    WelHTComSettingGet filename + vbNullChar, htsetp
End Sub

' ファイルに設定を保存
Public Sub vbWelHTComSettingPut(ByVal filename As String, ByRef htsetp As WelHTComTMPL)
    WelHTComSettingPut filename + vbNullChar, htsetp
End Sub

' ハンディターミナルからデータをアップロードし、ＣＳＶ形式で保存する
Public Function vbWelHTUploadCsv(ByVal Prm_Fold As String, _
                                 ByVal Prm_Fnam As String, _
                                 ByRef Prm_Com As WelHComSetTMPL, _
                                 ByRef Prm_Edit As WelHTComEditTMPL, _
                                 ByRef Prm_Csv As WelHTCsvTMPL) As Long
    vbWelHTUploadCsv = WelHTUploadCsv(Prm_Fold + vbNullChar, _
                                        Prm_Fnam + vbNullChar, _
                                        Prm_Com, Prm_Edit, Prm_Csv)
End Function

' ハンディターミナルからデータをアップロードし、ＸＬＳ形式で保存する
Public Function vbWelHTUploadXls(ByVal Prm_Fold As String, _
                                 ByVal Prm_Fnam As String, _
                                 ByRef Prm_Com As WelHComSetTMPL, _
                                 ByRef Prm_Edit As WelHTComEditTMPL, _
                                 ByRef Prm_Xls As WelHTXlsTMPL) As Long
    vbWelHTUploadXls = WelHTUploadXls(Prm_Fold + vbNullChar, _
                                        Prm_Fnam + vbNullChar, _
                                        Prm_Com, Prm_Edit, Prm_Xls)
End Function

' ハンディターミナルからデータをアップロードし、ＭＤＢ形式で保存する
Public Function vbWelHTUploadMdb(ByVal Prm_Fold As String, _
                                 ByVal Prm_Fnam As String, _
                                 ByRef Prm_Com As WelHComSetTMPL, _
                                 ByRef Prm_Edit As WelHTComEditTMPL, _
                                 ByRef Prm_Mdb As WelHTMdbTMPL) As Long
    vbWelHTUploadMdb = WelHTUploadMdb(Prm_Fold + vbNullChar, _
                                        Prm_Fnam + vbNullChar, _
                                        Prm_Com, Prm_Edit, Prm_Mdb)
End Function

' ハンディターミナル(Model8000)にプログラムファイルをダウンロードする
Public Function vbWelHTDownloadProgSyn(ByVal Prm_HTFnam As String, _
                                       ByVal Prm_Fold As String, _
                                       ByVal Prm_Fnam As String, _
                                       ByRef Prm_Com As WelHComSetTMPL)
    vbWelHTDownloadProgSyn = WelHTDownloadProgSyn(Prm_HTFnam + vbNullChar, _
                                        Prm_Fold + vbNullChar, _
                                        Prm_Fnam + vbNullChar, _
                                        Prm_Com)
End Function

' ハンディターミナル(PHL)にプログラムファイルをダウンロードする
Public Function vbWelHTDownloadProgHex(ByVal Prm_HTFnam As String, _
                                       ByVal Prm_Fold As String, _
                                       ByVal Prm_Fnam As String, _
                                       ByRef Prm_Com As WelHComSetTMPL)
    vbWelHTDownloadProgHex = WelHTDownloadProgHex(Prm_HTFnam + vbNullChar, _
                                        Prm_Fold + vbNullChar, _
                                        Prm_Fnam + vbNullChar, _
                                        Prm_Com)
End Function

' ハンディターミナルにメニューファイルをダウンロードする
Public Function vbWelHTDownloadMenu(ByVal Prm_HTFnam As String, _
                                    ByVal Prm_Fold As String, _
                                    ByVal Prm_Fnam As String, _
                                    ByRef Prm_Com As WelHComSetTMPL)
    vbWelHTDownloadMenu = WelHTDownloadMenu(Prm_HTFnam + vbNullChar, _
                                        Prm_Fold + vbNullChar, _
                                        Prm_Fnam + vbNullChar, _
                                        Prm_Com)
End Function

' ハンディターミナルにＣＳＶ形式ファイルのデータをダウンロードする
Public Function vbWelHTDownloadCsv(ByVal Prm_HTFnam As String, _
                                   ByVal Prm_Fold As String, _
                                   ByVal Prm_Fnam As String, _
                                   ByRef Prm_Com As WelHComSetTMPL, _
                                   ByRef Prm_Edit As WelHTComEditTMPL, _
                                   ByRef Prm_Csv As WelHTCsvTMPL) As Long
    vbWelHTDownloadCsv = WelHTDownloadCsv(Prm_HTFnam + vbNullChar, _
                                        Prm_Fold + vbNullChar, _
                                        Prm_Fnam + vbNullChar, _
                                        Prm_Com, Prm_Edit, Prm_Csv)
End Function

' ハンディターミナルにＸＬＳ形式ファイルのデータをダウンロードする
Public Function vbWelHTDownloadXls(ByVal Prm_HTFnam As String, _
                                   ByVal Prm_Fold As String, _
                                   ByVal Prm_Fnam As String, _
                                   ByRef Prm_Com As WelHComSetTMPL, _
                                   ByRef Prm_Edit As WelHTComEditTMPL, _
                                   ByRef Prm_Xls As WelHTXlsTMPL) As Long
    vbWelHTDownloadXls = WelHTDownloadXls(Prm_HTFnam + vbNullChar, _
                                        Prm_Fold + vbNullChar, _
                                        Prm_Fnam + vbNullChar, _
                                        Prm_Com, Prm_Edit, Prm_Xls)
End Function

' ハンディターミナルにＭＤＢ形式ファイルのデータをダウンロードする
Public Function vbWelHTDownloadMdb(ByVal Prm_HTFnam As String, _
                                   ByVal Prm_Fold As String, _
                                   ByVal Prm_Fnam As String, _
                                   ByRef Prm_Com As WelHComSetTMPL, _
                                   ByRef Prm_Edit As WelHTComEditTMPL, _
                                   ByRef Prm_Mdb As WelHTMdbTMPL) As Long
    vbWelHTDownloadMdb = WelHTDownloadMdb(Prm_HTFnam + vbNullChar, _
                                        Prm_Fold + vbNullChar, _
                                        Prm_Fnam + vbNullChar, _
                                        Prm_Com, Prm_Edit, Prm_Mdb)
End Function

' ファイル送受信状態を得る
Public Function vbWelHTStatusGet(ByRef msg_p As String, ByRef errno_p As Long, _
                                 ByRef curno_p As Long, ByRef allno_p As Long) As Boolean
    msg_p = Space(HT_BUFFSIZE * 2)
    vbWelHTStatusGet = WelHTStatusGet(msg_p, errno_p, curno_p, allno_p)
    msg_p = vbWelHTStrGet(msg_p)
End Function

' 送受信データログ開始
Public Sub vbWelHTDataLogStart(ByVal fname As String)
    WelHTDataLogStart fname + vbNullChar
End Sub


' 伝文終了コード（CR)を付加して、データ送信（パケット編集なし）
Public Sub vbWelHTPutRawData(ByVal comh As Long, ByVal SndStr As String)
    WelHTPutRawData comh, SndStr + vbNullChar
End Sub


' データ受信（伝文終了コード（CR)削除・パケットデコードなし）
Public Function vbWelHTGetRawData(ByVal comh As Long, ByRef RcvStr As String) As Long
    RcvStr = Space(HT_BUFFSIZE * 2)
    vbWelHTGetRawData = WelHTGetRawData(comh, RcvStr)
    RcvStr = vbWelHTStrGet(RcvStr)
End Function

' パケット編集後、送信
Public Sub vbWelHTPutTextData(ByVal comh As Long, ByVal SndStr As String, ByVal Sep As Integer)
    WelHTPutTextData comh, SndStr + vbNullChar, Sep
End Sub

' データ受信（伝文終了コード(CR)削除・パケットデコードあり）
Public Function vbWelHTGetTextData(ByVal comh As Long, ByRef RcvStr As String, _
                                   ByVal Sep As Integer, ByVal TimeOutCnt As Integer) As Long
    RcvStr = Space(HT_BUFFSIZE * 2)
    vbWelHTGetTextData = WelHTGetTextData(comh, RcvStr, Sep, TimeOutCnt)
    RcvStr = vbWelHTStrGet(RcvStr)
End Function

' データ送信　＆　データ受信（伝文終了コード(CR)削除・パケットデコードあり）待ち
Public Function vbWelHTPutRawData_Wait(ByVal comh As Long, ByVal SndStr As String, _
                                       ByVal Sep As Integer, ByRef RcvStr As String, _
                                       ByVal TimeOutCnt As Integer, ByVal RetryCnt As Integer, _
                                       ByVal AcceptCode As Long) As Long
        RcvStr = Space(HT_BUFFSIZE * 2)
        vbWelHTPutRawData_Wait = WelHTPutRawData_Wait(comh, SndStr + vbNullChar, Sep, RcvStr, TimeOutCnt, RetryCnt, AcceptCode)
        RcvStr = vbWelHTStrGet(RcvStr)
End Function


' データ送信　＆　データ受信（伝文終了コード(CR)削除・パケットデコードあり）待ち
Public Function vbWelHTPutTextData_Wait(ByVal comh As Long, ByVal SndStr As String, _
                                        ByVal Sep As Integer, ByRef RcvStr As String, _
                                        ByVal TimeOutCnt As Integer, ByVal RetryCnt As Integer, _
                                        ByVal AcceptCode As Long) As Long
        RcvStr = Space(HT_BUFFSIZE * 2)
        vbWelHTPutTextData_Wait = WelHTPutTextData_Wait(comh, SndStr + vbNullChar, Sep, RcvStr, TimeOutCnt, RetryCnt, AcceptCode)
        RcvStr = vbWelHTStrGet(RcvStr)
End Function

' 受信待ち　＆　自動リプライ
Public Function vbWelHTGetTextData_Retry(ByVal comh As Long, ByRef RcvStr As String, _
                                         ByVal Sep As Integer, _
                                         ByVal TimeOutCnt As Integer, ByVal RetryCnt As Integer, _
                                         ByVal AcceptCode As Long) As Long
        RcvStr = Space(HT_BUFFSIZE * 2)
        vbWelHTGetTextData_Retry = WelHTGetTextData_Retry(comh, RcvStr, Sep, TimeOutCnt, RetryCnt, AcceptCode)
        RcvStr = vbWelHTStrGet(RcvStr)
End Function

' 通信ポートにデータを書き込む
Public Sub vbWelWriteCom(ByVal hcomm As Long, ByVal lpStr As String)
        WelWriteCom hcomm, lpStr + vbNullChar
End Sub

Public Sub vbWelWriteComEx(ByVal hcomm As Long, ByVal lpStr As String, ByVal nCount As Integer)
        WelWriteComEx hcomm, lpStr + vbNullChar, nCount
End Sub

' 通信ポートからデータを読み込む
Public Function vbWelReadCom(ByVal hcomm As Long, ByRef lpStr As String, ByVal endlinecd As Integer) As Integer
    lpStr = Space(HT_BUFFSIZE * 2)
    vbWelReadCom = WelReadCom(hcomm, lpStr, endlinecd)
    lpStr = vbWelHTStrGet(lpStr)
End Function

'*****************************************************************************
' VB専用関数
'*****************************************************************************
' NULLまでのデータ（有効データ）を取り出す
Private Function vbWelHTStrGet(rcvbuff As String) As String
    Dim Leng As Integer

    Leng = InStr(rcvbuff, vbNullChar)
    If Leng > 0 Then
        vbWelHTStrGet = Left(rcvbuff, Leng - 1)
    Else
        vbWelHTStrGet = ""
    End If

End Function

' 構造体のメンバーにデータを設定（UnicodeからJISに変換＆NULLを付加）
Public Sub vbWelHTStrMemberSet(ArrayTop As Byte, SetStr As String, Optional ByVal BuffSize As Long = HT_ITEMNAME_LEN)
    Dim Bs() As Byte
    Dim Leng As Long
    
    Bs = StrConv(SetStr + vbNullChar, vbFromUnicode)
    Leng = UBound(Bs)
    If Leng > BuffSize Then
        Bs(BuffSize - 1) = 0
    End If

    MoveMemory ArrayTop, Bs(0), BuffSize
End Sub

' 構造体のメンバーからNULLまでのデータ（有効データ）を取り出す（JISからUnicodeに変換）
Public Sub vbWelHTStrMemberGet(rcvbuff As String, ArrayTop As Byte, Optional ByVal BuffSize As Long = HT_ITEMNAME_LEN)
    Dim Leng As Integer
    Dim Idx As Integer
    Dim Bs() As Byte
    
    ReDim Bs(BuffSize)
    MoveMemory Bs(0), ArrayTop, BuffSize
    rcvbuff = StrConv(Bs, vbUnicode)

    Leng = InStr(rcvbuff, vbNullChar)
    If Leng > 0 Then
        rcvbuff = Left(rcvbuff, Leng - 1)
    Else
        rcvbuff = ""
    End If
End Sub


