#ifndef __WELHTCOM_H__
#define __WELHTCOM_H__

/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
/*
/*		WelHTComm.dll	Include file for VC++(V6.0)
/*
/*										WELCOM DESIGN K.K.
/*
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/


#ifdef __WELHTCOM_DLL__
#define DllExport __declspec( dllexport )
#else
#define DllExport __declspec( dllimport )
#endif

/**************************************************************
	各　種　定　義
 **************************************************************/

// エラー番号/戻り値定義/受信コード判断用定義
#define	WelHTCODRecieve 	0x00000FFF				//	正常受信判断用
#define	WelHTERRRecieve 	0x8FFFF000				//	エラー判断用

#define	WelHTNormalStatus	0x00000000				//	正常状態
#define	WelHTNotExecute		0x00000800				//	実行していない

#define	WelHTTXTRecieve	 	0x00000001				//	文字列受信
#define	WelHTACKRecieve	 	0x00000002				//	ACK コード受信
#define	WelHTNAKRecieve	 	0x00000004				//	NAK コード受信
#define	WelHTCANRecieve	 	0x00000008				//	CAN コード受信
#define	WelHTBELRecieve	 	0x00000010				//	BEL コード受信
#define	WelHTFULRecieve	 	0x00000020				//	FUL コード受信
#define	WelHTENQRecieve	 	0x00000040				//	ENQ コード受信
#define	WelHTFINRecieve	 	0x00000080				//	終了コード受信

#define WelHTGeneralErr		0x800FF000				//	一般エラー判断用

#define	WelHTPortOpenErr	0x80001000				//	ポート　オープンエラー
#define	WelHTTimeOutErr		0x80002000				//	受信タイムアウトエラー
#define	WelHTUserAbortReq	0x80004000				//	ユーザーによる中断
#define	WelHTExceptionErr	0x80008000				//	例外　エラー
#define	WelHTProtocolErr 	0x80010000				//	プロトコルエラー

#define	WelHTPacketErr		0x80F00000				//	パケット　エラー判断用

#define	WelHTPacketFmtErr	0x80100000				//	パケット　フォーマットエラー
#define	WelHTPacketCrcErr	0x80200000				//	パケット　CRCエラー
#define	WelHTPacketOthErr	0x80400000				//	パケット　その他エラー

#define	WelHTFileErr		0x8F000000				//	ファイルエラー判断用

#define	WelHTFileOpenErr	0x81000000				//	ファイルオープンエラー
#define	WelHTFileWriteErr	0x82000000				//	ファイル書き込みエラー
#define	WelHTFileReadErr	0x84000000				//	ファイル読み込みエラー

//	自動実行定義
typedef enum  {
    HT_MANUAL			= 0x0000,					//	自動実行しない
    HT_AUTOSTART		= 0x0001,					//	自動開始
    HT_AUTOEND			= 0x0002,					//	自動終了
} AutoStartENum ;

//	ファイルＲ／Ｗ定義+
typedef enum {
    HT_SETFIO_DISABLE	= 0x0000,					//	設定ファイルＲ／Ｗ　不許可
    HT_SETFIO_PUT		= 0x0001,					//	設定ファイル書き出し
    HT_SETFIO_GET		= 0x0002,					//	設定ファイル読み込み
} SettingIOEnum ;

//	ハンディターミナル機種定義
typedef enum  {
    HT_MODEL8000		= 0x0001,					//	Ｍｏｄｅｌ８０００
    HT_PHL1000			= 0x0002,					//	ＰＨＬ１０００
    HT_PHL2600			= 0x0004,					//	ＰＨＬ２６００
} HandyTermENum ;

//	ポート番号定義
typedef enum  {
    HT_COM1				= 0x0001,					//	ＣＯＭ１
    HT_COM2				= 0x0002,					//	ＣＯＭ２
    HT_COM3				= 0x0004,					//	ＣＯＭ３
    HT_COM4				= 0x0008,					//	ＣＯＭ４
    HT_COM5				= 0x0010,					//	ＣＯＭ５
    HT_COM6				= 0x0020,					//	ＣＯＭ６
    HT_COM7				= 0x0040,					//	ＣＯＭ７
    HT_COM8				= 0x0080,					//	ＣＯＭ８
} PortNoENum ;

//	ボーレート定義
typedef enum  {
    HT_BAUD115200		= 0x0001,					//	１１５．２Ｋ
    HT_BAUD38400		= 0x0002,					//	３８４００
} BaudRaitENum ;

//	接続方法定義
typedef enum  {
    HT_RS232C			= 0x0001,					//	ＲＳ−２３２Ｃ
    HT_IR705			= 0x0002,					//	ＩＲ−７０５
} ConnectModeENum ;

//	データアップロード時送信コード定義
typedef enum  {
    HT_SENDVOL			= 0x0001,					//	ＶＯＬ送信により開始
    HT_SENDENQ			= 0x0002,					//	ＥＮＱ送信により開始
} UploadStartCdENum ;

//	ＣＲＣタイプ定義
typedef enum  {
    HT_CRC1				= 0x0001,					//	ＣＲＣタイプ１（全伝文計算）
    HT_CRC2				= 0x0002,					//	ＣＲＣタイプ２（ヘッダ・ＩＤを除いて計算）
} CrcTypeENum ;

//	プロトコルタイプ定義
typedef enum  {
    HT_PROTO_WONLY		= 0x0001,					//	専用プロトコル
    HT_PROTO_SIMPLE		= 0x0002,					//	シンプルプロトコル（データ受信時、パケットなし）
} ProtoTypeENum ;

//	送受信方向定義
typedef enum {
	HT_UPLOAD			= 0x0001,					//	ＵＰＬＯＡＤ	（ＨＴ->ＰＣ）
	HT_DOWNLOAD			= 0x0002,					//	ＤＯＷＮＬＯＡＤ（ＰＣ->ＨＴ）
} DirectionEnum ;

//	送受信ファイルタイプ定義
typedef enum {
	HT_FT_PROGRAM		= 0x0001,					//	プログラムの送信
	HT_FT_MENU			= 0x0002,					//	メニューの送信
	HT_FT_CSV			= 0x0010,					//	データの送受信（ＣＳＶ形式）
	HT_FT_MDB			= 0x0020,					//	データの送受信（ＭＤＢ形式）
	HT_FT_XLS			= 0x0040,					//	データの送受信（ＸＬＳ形式）
} FileTypeEnum ;

#define	HT_FT_DATA		0x00F0						//	データファイルビット定義

//	ファイル名指定タイプ
typedef enum {
	HT_FILENAME			= 0x0001,					//	ファイルを指定
	HT_FOLDERNAME		= 0x0002,					//	フォルダを指定
} FolderFileEnum ;

//	編集可／不可
typedef enum {
	HT_EDIT_ENABLE		= 0x0001,					//	編集可
	HT_EDIT_DISABLE		= 0x0002,					//	編集不可
} EditPermEnum ;

//	設定可能拡張子
typedef enum  {
    HT_EXT_SYN			= 0x0001,					//	*.syn	Model8000 Program 
    HT_EXT_HEX			= 0x0002,					//	*.hex	PHL1000/2600 Program 
    HT_EXT_PDT			= 0x0004,					//	*.pdt	Menu file
    HT_EXT_CSV			= 0x0010,					//	*.csv	CSV Data
    HT_EXT_TXT			= 0x0020,					//	*.txt	TEXT Data
    HT_EXT_XLS			= 0x0040,					//	*.xls	XLS Data
    HT_EXT_MDB			= 0x0080,					//	*.mdv	MDV Data
    HT_EXT_SET			= 0x0100,					//	*.hst	WelHTCom Setting File
    HT_EXT_ETC			= 0x1000,					//	*.*		All Data
} FileExtENum ;

//	タイトル有り／なし（ＣＳＶ用）
typedef enum {
	HT_WITHOUT_TITLE	= 0x0001,					//	タイトル行なし
	HT_WITH_TITLE		= 0x0002,					//	タイトル行あり
} TitlePermEnum ;

//	追加／上書き（ＣＳＶ用）
typedef enum {
	HT_CSVAPPEND		= 0x0001,					//	追加書き込み
	HT_CSVOVERW			= 0x0002,					//	上書き
} OpenModeEnum ;

//	テキスト区切り文字（ＣＳＶ用用）
typedef enum {
	HT_CSVSEP_COMMA		= 0x0001,					//	カンマ（ , )
	HT_CSVSEP_TAB		= 0x0002,					//	タブ ( \t )
	HT_CSVSEP_SPC		= 0x0004,					//	スペース ( ' ' )
	HT_CSVSEP_SEMIC		= 0x0008,					//	セミコロン ( ; )
	HT_CSVSEP_NOEDIT	= 0x0010,					//	変換を行わない
} TextSepEnum ;

//	文字列引用符（ＣＳＶ用用）
typedef enum {
	HT_QUOTE_DOUBLE		= 0x0001,					//	double quote（ " )
	HT_QUOTE_SINGLE		= 0x0002,					//	single quote ( ' )
	HT_QUOTE_NOTHING	= 0x0004,					//	なし
} TextQuoteEnum ;

//	Excelのタイプ（Ｅｘｃｅｌ用）
typedef enum {
	HT_XLS_2000			= 0x0001,					//	Excel 97/2000 形式
	HT_XLS_95			= 0x0002,					//	Excel 95 形式
} XlsTypeEnum ;

//	シート分割区分（Ｅｘｃｅｌ用）
typedef enum {
	HT_SP_DISABLE		= 0x0001,					//	シートに分けない
	HT_SP_ENABLE		= 0x0002,					//	シートに分ける
} SpSheetEnum ;

//	シート選択方法（Ｅｘｃｅｌ用）
typedef enum {
	HT_SHEET_NO			= 0x0001,					//	シート番号
	HT_SHEET_NAME		= 0x0002,					//	シート名称
} ShSelectEnum ;

//	ＭＤＢのタイプ（ＭＤＢ用）
typedef enum {
	HT_MDB_2000			= 0x0001,					//	Access2000形式
	HT_MDB_97			= 0x0002,					//	Access97形式
} MdbTypeEnum ;

//	名称使用区分
typedef enum {
	HT_DISPLAY			= 0x0001,					//	表示にのみ使用
	HT_FIELDNAME		= 0x0002,					//	名称として使用
} NameTypeEnum ;

#define	HT_DEFAULTSET	0x00000000					//	設定なし
#define	HT_PERMALL		0x7FFFFFFF					//	すべて許可

#define	HT_BLANKITEM	9999						//	空項目（編集項目設定）


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

//	インターフェース用定数 定義

#define HT_FILEPATH_LEN		512						//	ファイルパス領域サイズ
#define HT_FILENAME_LEN		32						//	ファイル名領域サイズ
#define	HT_EDITTBL_MAX		30						//	編集項目数
#define HT_ITEMNAME_LEN		32						//	項目名領域サイズ

#define HT_BUFFSIZE	256
#define HT_MSGSIZE	1024

//	通信設定 構造体
typedef struct {
	PortNoENum			port ;						//	ポート
	BaudRaitENum		baud ;						//	ボーレート
	ConnectModeENum		mode ;						//	接続モード
	UploadStartCdENum	sendcod ;					//	データアップロード時送信コード
	CrcTypeENum			crctype ;					//	ＣＲＣタイプ指定
	ProtoTypeENum		protocol ;					//	プロトコルタイプ
} WelHComSetTMPL ;

//	項目 出力順指定 構造体
typedef struct {
	NameTypeEnum		nametype ;					//	名称使用区分	初期値
	NameTypeEnum		nametype_perm ;				//					選択可能値

	char				itname [HT_EDITTBL_MAX][HT_ITEMNAME_LEN] ;
													//	項目名

	short				out_itno[HT_EDITTBL_MAX] ;	//	出力順（入力項目の番号を指定）
}  WelHTComEditTMPL ;

//	TEXT/CSV  専用 構造体
typedef struct {
	TitlePermEnum		withtitle ;					//	タイトル有無	初期値
	TitlePermEnum		withtitle_perm ;			//					選択可能値

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

	TextSepEnum			textsep ;					//	区切り文字	初期値
	TextSepEnum			textsep_perm ;				//				選択可能値

	TextQuoteEnum		textquote ;					//	引用符	初期値
	TextQuoteEnum		textquote_perm ;			//			選択可能値
} WelHTCsvTMPL ;

//	XLS 専用 構造体
typedef struct {
	XlsTypeEnum			xls_type ;					//	エクセルファイル形式
	XlsTypeEnum			xls_type_perm ;				//	エクセルファイル形式

	EditPermEnum		tmplatename_edit ;			//	テンプレート名変更 可／不可
	char				tmplatename[HT_FILEPATH_LEN] ;
													//	テンプレート名

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

	ShSelectEnum		shselect ;					//	シート選択方法	初期値
	ShSelectEnum		shselect_perm ;				//					選択可能値

	long				shselectitem ;				//	シート名に使用する項目番号

	long				titlerow ;					//	タイトル行
	long				startrow ;					//	開始行
} WelHTXlsTMPL ;

//	MDB 専用 構造体
typedef struct {
	MdbTypeEnum			mdb_type ;					//	データベース形式
	MdbTypeEnum			mdb_type_perm ;				//	データベース形式

	EditPermEnum		tablename_edit ;			//	テーブル名変更 可／不可
	char				tablename[HT_FILENAME_LEN] ;//	テーブル名

	char				uid[64] ;					//	ユーザーＩＤ
	char				pwd[64] ;					//	パスワード
	char				dsn[64] ;					//	ＤＳＮ（未使用）
} WelHTMdbTMPL ;


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

typedef struct {
	//	機種情報
	HandyTermENum		httype ;					//	機種	初期値
	HandyTermENum		httype_perm ;				//			選択可能値

	//	通信設定
	WelHComSetTMPL		comset ;					//	通信設定	初期値
	WelHComSetTMPL		comset_perm ;				//				選択可能値

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

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

	EditPermEnum		ht_fname_edit ;				//	ハンディファイル名変更 許可
	char				ht_fname[HT_FILENAME_LEN] ;	//	ハンディファイル名

	EditPermEnum		filename_edit ;				//	ファイル名変更 許可

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

	FileExtENum			fileext_perm ;				//	ファイル名 指定可能張子
	char				filename[HT_FILEPATH_LEN] ;	//	フォルダ／ファイル名

	//	項目編集
	EditPermEnum		dataitem_edit ;				//	項目編集 変更許可

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

	EditPermEnum		selcnt_edit ;				//	最大項目数 変更許可
	long				selcnt ;					//	入力項目数

	WelHTComEditTMPL	edittbl ;					//	項目編集方法設定

	WelHTCsvTMPL		csv ;						//	CSV		専用
	WelHTXlsTMPL		xls ;						//	Excel	専用
	WelHTMdbTMPL		mdb ;						//	Access	専用

	//	実行制御
	SettingIOEnum		setting ;					//	設定ファイルＲ／Ｗ
	AutoStartENum		autorun ;					//	自動実行
} WelHTComTMPL ;


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

	共通関数定義

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

#ifdef __cplusplus
extern "C" {		//	C++のための定義
#endif

/****************************************************************************
	全通信制御
 ***************************************************************************/

//	WelHT通信制御
DllExport long WINAPI WelHTComFunc( WelHTComTMPL	*htsetp ) ;

//	全許可設定
DllExport void WINAPI WelHTComSetEnable( WelHTComTMPL	*htsetp ) ;

//	全不許可設定
DllExport void WINAPI WelHTComSetDisable( WelHTComTMPL	*htsetp ) ;

//	ファイルからの設定の読み込み
DllExport void WINAPI WelHTComSettingGet( char *filename, WelHTComTMPL *htsetp ) ;

//	ファイルに設定を保存
DllExport void WINAPI WelHTComSettingPut( char *filename, WelHTComTMPL *htsetp ) ;


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

//	ハンディターミナルからデータをアップロードし、ＣＳＶ形式で保存する
DllExport long WINAPI WelHTUploadCsv(	LPSTR				Prm_Fold,
										LPSTR				Prm_Fnam,
										WelHComSetTMPL		*Prm_Com,
										WelHTComEditTMPL	*Prm_Edit,
										WelHTCsvTMPL		*Prm_Csv ) ;

//	ハンディターミナルからデータをアップロードし、ＸＬＳ形式で保存する
DllExport long WINAPI WelHTUploadXls(	LPSTR				Prm_Fold,
										LPSTR				Prm_Fnam,
										WelHComSetTMPL		*Prm_Com,
										WelHTComEditTMPL	*Prm_Edit,
										WelHTXlsTMPL		*Prm_Xls ) ;

//	ハンディターミナルからデータをアップロードし、ＭＤＢ形式で保存する
DllExport long WINAPI WelHTUploadMdb(	LPSTR				Prm_Fold,
										LPSTR				Prm_Fnam,
										WelHComSetTMPL		*Prm_Com,
										WelHTComEditTMPL	*Prm_Edit,
										WelHTMdbTMPL		*Prm_Mdb ) ;

//	ハンディターミナル(Model8000)にプログラムファイルをダウンロードする
DllExport long WINAPI WelHTDownloadProgSyn(	LPSTR				Prm_HTFnam,
											LPSTR				Prm_Fold, 
											LPSTR				Prm_Fnam,
											WelHComSetTMPL		*Prm_Com ) ;

//	ハンディターミナル(PHL)にプログラムファイルをダウンロードする
DllExport long WINAPI WelHTDownloadProgHex(	LPSTR				Prm_HTFnam,
											LPSTR				Prm_Fold, 
											LPSTR				Prm_Fnam,
											WelHComSetTMPL		*Prm_Com ) ;

//	ハンディターミナルにメニューファイルをダウンロードする
DllExport long WINAPI WelHTDownloadMenu(	LPSTR				Prm_HTFnam,
										LPSTR				Prm_Fold, 
										LPSTR				Prm_Fnam,
										WelHComSetTMPL		*Prm_Com ) ;

//	ハンディターミナルにＣＳＶ形式ファイルのデータをダウンロードする
DllExport long WINAPI WelHTDownloadCsv(	LPSTR				Prm_HTFnam,
										LPSTR				Prm_Fold, 
										LPSTR				Prm_Fnam,
										WelHComSetTMPL		*Prm_Com,
										WelHTComEditTMPL	*Prm_Edit,
										WelHTCsvTMPL		*Prm_Csv ) ;

//	ハンディターミナルにＸＬＳ形式ファイルのデータをダウンロードする
DllExport long WINAPI WelHTDownloadXls(	LPSTR				Prm_HTFnam,
										LPSTR				Prm_Fold, 
										LPSTR				Prm_Fnam,
										WelHComSetTMPL		*Prm_Com,
										WelHTComEditTMPL	*Prm_Edit,
										WelHTXlsTMPL		*Prm_Xls ) ;

//	ハンディターミナルにＭＤＢ形式ファイルのデータをダウンロードする
DllExport long WINAPI WelHTDownloadMdb(	LPSTR				Prm_HTFnam,
										LPSTR				Prm_Fold, 
										LPSTR				Prm_Fnam,
										WelHComSetTMPL		*Prm_Com,
										WelHTComEditTMPL	*Prm_Edit,
										WelHTMdbTMPL		*Prm_Mdb ) ;

//	ファイル送受信状態を得る
DllExport BOOL WINAPI WelHTStatusGet( LPSTR msg_p, long *errno_p, long *curno_p, long *allno_p ) ;

//	通信の中断指示
DllExport void WINAPI WelHTCancelCom() ;

//	送受信データログ開始
DllExport void WINAPI WelHTDataLogStart( char *fname ) ;

//	送受信データログ終了
DllExport void WINAPI WelHTDataLogEnd( ) ;


/****************************************************************************
	入出力
 ***************************************************************************/

//	通信ポートオープン
DllExport long WINAPI WelHTPortOpen(	HANDLE			*comh_p,
									PortNoENum		Prm_port,
									BaudRaitENum	Prm_baud,
									ConnectModeENum	Prm_mode,
									CrcTypeENum		Prm_crc ) ;

//	通信ポートクローズ
DllExport void WINAPI WelHTPortClose( HANDLE comh ) ;

//	通信ポート受信バッファクリア
DllExport void WINAPI WelHTPortClear( HANDLE comh ) ;

//	伝文終了コード（CR)を付加して、データ送信（パケット編集なし）
DllExport void WINAPI WelHTPutRawData( HANDLE comh, LPSTR SndStr ) ;

//	データ受信（伝文終了コード（CR)削除・パケットデコードなし）
DllExport long WINAPI WelHTGetRawData( HANDLE comh, LPSTR RcvStr ) ;

//	パケット編集後、送信
DllExport void WINAPI WelHTPutTextData( HANDLE comh, LPSTR SndStr, char Sep ) ;

//	データ受信（伝文終了コード(CR)削除・パケットデコードあり）
DllExport long WINAPI WelHTGetTextData( HANDLE comh, LPSTR RcvStr, char Sep, short TimeOutCnt ) ;

//	データ送信　＆　データ受信（伝文終了コード(CR)削除・パケットデコードあり）待ち
DllExport long WINAPI WelHTPutRawData_Wait ( HANDLE comh, LPSTR SndStr, char Sep, LPSTR RcvStr,
											short TimeOutCnt, short RetryCnt, long AcceptCode ) ;

//	パケット編集後、データ送信　＆　データ受信（伝文終了コード(CR)削除・パケットデコードあり）待ち
DllExport long WINAPI WelHTPutTextData_Wait( HANDLE comh, LPSTR SndStr, char Sep, LPSTR RcvStr,
											short TimeOutCnt, short RetryCnt, long AcceptCode ) ;

//	受信待ち　＆　自動リプライ
DllExport long WINAPI WelHTGetTextData_Retry
						( HANDLE comh, LPSTR RcvStr, char Sep,
							short TimeOutCnt, short RetryCnt, long AcceptCode ) ;


/****************************************************************************
	低水準入出力
 ***************************************************************************/

//	通信ポートのオープン
DllExport HANDLE WINAPI WelOpenCom( short nPort, long nBaud, short mode ) ;

//	通信ポートのクローズ
DllExport void WINAPI WelCloseCom( HANDLE hcomm ) ;

//	受信バッファのクリア
DllExport void WINAPI WelClearCom( HANDLE hcomm ) ;

//	通信ポートにデータを書き込む
DllExport void WINAPI WelWriteCom( HANDLE hcomm, LPSTR lpStr) ;
DllExport void WINAPI WelWriteComEx( HANDLE hcomm, LPSTR lpStr, short nCount) ;

//	通信ポートからデータを読み込む
DllExport long WINAPI WelReadCom( HANDLE hcomm, LPSTR lpStr, short endlinecd ) ;


#ifdef  __cplusplus
}		//	C++のための定義
#endif

#endif

