//	M070 : VAMƃCxg
option unsigned;

define	port, bno = 0;
define	fEnd	= 0;
define	fOpened = _FALSE;

//------------------------------------------------------------------------------//
//	VAMƃCxg̎sTv										//
//																				//
//	߂l	F	Ȃ															//
//------------------------------------------------------------------------------//
function main()
{
	define	n[10];

	_BtnOpen(0, "|[g̐ݒ");		//	{^\
	_BtnOpen(1, "|[gI[v");		//	E
	_BtnOpen(2, "I ");				//	E

	//	KCh\
	_Cls();
	 _SetTextColor(4);
	_Print("|[g̎Mf[^\܂B\n"
		   "Mf[^́Â܂܃[vobN܂B\n");
	_Print("@Eu|[g̐ݒv{^ŁA|[gݒύXł܂B\n");
	_Print("@E L[͂ꍇAYL[̃R[h\܂\n");
	_Print("@E ENbNƑMj[\܂\n");
	_Print("@EuIv{^ƃ}NeLXg̎sI܂B\n");
	_Print("L[͂ۂ́ÃEChtH[JXԂŃL[͂ĂB\n\n");
	_ResetColor();

	_EnableStdRClk(_FALSE);	//	W̉ENbNɂ|bvAbvj[֎~
							//	̐ݒɂENbNu_OnRClick()vs

	bno = _MemAlloc(1024);				//	ubNm

	port  = _ComCreate();				//	|[g

	_Stop();							//	sf

	_ComClose (port);					//	|[gN[Y
	_ComDelete(port);					//	|[g
	_MemFree(bno);						//	ubN
}

//------------------------------------------------------------------------------//
//	|[g I[vԐݒ														//
//																				//
//			F	Ȃ				 											//
//																				//
//	߂l	F	Ȃ															//
//------------------------------------------------------------------------------//
function CheckOpenState()
{
	if (_ComIsOpened(port)) {
		fOpened = _TRUE;
		_BtnOpen(1, "|[g N[Y");
	}
	else {
		fOpened = _FALSE;
		_BtnOpen(1, "|[g I[v");
	}
	//	|[g\
	_ShowText($_StrCat(" ", $_ComGetParam(port), " "));
}
//------------------------------------------------------------------------------//
//	|[g I[v^N[Y													//
//																				//
//			F	pno - |[gԍ	 											//
//																				//
//	߂l	F	Ȃ															//
//------------------------------------------------------------------------------//
function OpenPort()
{
	define	$text;

	if (!fOpened) {										//	I[vH
		if (_ComIsOpenPossible(port)) {					//		I[v\H
			_ComSetOnRxText  (port, "OnText");			//			eLXg@@MCxg֐o^
			_ComSetOnRxCtrl  (port, "OnCtrl");			//			R[h@MCxg֐o^
			_ComSetOnRxEsc	 (port, "OnEsc" );			//			drbR[hMCxg֐o^
			_ComSetOnRxPacket(port, "OnPacket", bno);	//			pPbg@@MCxg֐o^
			_ComOpen		 (port);					//			|[gI[v
		}
	}
	else {												//	I[vρH
		_ComClose(port);								//		|[gN[Y
	}
	CheckOpenState();									//	|[gI[vԃ`FbN
}
//------------------------------------------------------------------------------//
//	|[geLXgf[^M̏										//
//																				//
//			F	$Text - MeLXg											//
//																				//
//	߂l	F	Ȃ															//
//------------------------------------------------------------------------------//
function OnText($Text)
{
	_Print("RxText = '", $Text, "'\n");					//	MeLXg\
	_ComSendText(port, $Text);							//	[vobNM
}

//------------------------------------------------------------------------------//
//	|[g琧R[hM̏											//
//																				//
//			F	ctrl - R[h												//
//																				//
//	߂l	F	Ȃ															//
//------------------------------------------------------------------------------//
function OnCtrl(ctrl)
{
	_Pd("RxCtrl = 0x"); _Ph(ctrl, 2); _Pd("\n");		//	MR[h\
	_ComSendBytes(port, ctrl);							//	[vobNM
}

//------------------------------------------------------------------------------//
//	|[gdrbV[PXM̏										//
//																				//
//			F	$Esc - drbV[PX 										//
//																				//
//	߂l	F	Ȃ															//
//------------------------------------------------------------------------------//
function OnEsc($Esc)
{
	_Print("RxEsc  = '\x1B', $_StrPart($Esc, 1, 100), "'\n");	//	Mdrb\
	_ComSendText(port, $Esc);									//	[vobNM
}

//------------------------------------------------------------------------------//
//	|[gpPbgf[^M̏										//
//																				//
//			F	$Esc - drbV[PX 										//
//																				//
//	߂l	F	Ȃ															//
//------------------------------------------------------------------------------//
function OnPacket(len)
{
	define	b, i;

	_Print("RxPkt  =");									//	MpPbg\
	for (i = 0; i < len; i++) {							//	E
		b = _GetMemBlk(bno, i, 1);						//	E
		_Ph(" 0x"); _Ph(b, 2);							//	E
	}													//	E
	_Print("\n");										//	E
	_ComSendPacket(port, bno, 0, len);					//	[vobNM
}
//------------------------------------------------------------------------------//
//	L[͎̏															//
//																				//
//			F	key - L[R[h		 										//
//																				//
//	߂l	F	Ȃ															//
//------------------------------------------------------------------------------//
function _OnKeyIn(key)
{
	_PrintF("Key = 0x%02X\n", key);			//	͂L[R[h\
}
//------------------------------------------------------------------------------//
//	ENbN̏															//
//																				//
//			F	x - wʒu			shift - ShiftL[tO					//
//				y - xʒu			ctrl  - Ctrl L[tO					//
//																				//
//	߂l	F	Ȃ															//
//------------------------------------------------------------------------------//
function _OnRClick(x, y, shift, ctrl)
{//						[0] 			[1] 				  [2]				 
	define	$menu[] = {"eLXgM", "oCif[^M", "pPbgf[^M"};
	define	id, bytes;
	define	$txt;

	if (fOpened) {
		id = _PopupMenu($menu[], x, y);					//	|bvAbvj[

		if		(id == 0) {								//	eLXgMH
			$txt = $_Input("MeLXg͂Ă");
			if ($txt != "") {									// ͂H
				_ComSendText(port, $txt, "\r\n");				//	 eLXgf[^M
			}
		}
		else if (id == 1) {								//	oCif[^MH
			$txt = $_Input("MoCif[^i16i2j󔒂ŋ؂ē͂Ă");
			if ($txt != "") {									// ͂H
				if (bytes = _HexStrToBinary($txt, bno, 0)) {	//	 16i񁨃oCiϊ
					_ComSendBinary(port, bno, 0, bytes);		//	 oCif[^M
				}
			}
		}
		else if (id == 2) {								//	pPbgf[^MH
			$txt = $_Input("MpPbgf[^i16i2j󔒂ŋ؂ē͂Ă");
			if ($txt != "") {									// ͂H
				if (bytes = _HexStrToBinary($txt, bno, 0)) {	//	 16i񁨃oCiϊ
					_ComSendPacket(port, bno, 0, bytes);		//	 pPbgf[^M
				}
			}
		}
	}
	else _MsgBox("|[gI[vĂ", $_MyName, _MB_OK);
}
//------------------------------------------------------------------------------//
//	{^̏															//
//																				//
//			F	BtnNo - {^ʂhc	 										//
//																				//
//	߂l	F	Ȃ															//
//------------------------------------------------------------------------------//
function _OnButton(BtnNo)
{
	define	NewPort;
	define	parity;

	if		(BtnNo == 0) {									//	OF|[gݒ{^
		if (NewPort = _ComCreateByDialog(port)) {			//		_CAOɂ|[g
			port = NewPort;									//			V|[gԍݒ
			parity = _ComGetParity(port);
			if		(parity == 0) parity = 'N';
			else if (parity == 1) parity = 'O';
			else				  parity = 'E';
			_PrintF("Rate=%d, DataBit=%d, Parity=%c, StopBit=%d\n",
						_ComGetRate(port), _ComGetDataBits(port), parity, _ComGetStopBits(port));
		}
	}
	else if (BtnNo == 1) {									//	PF|[gI[v
		OpenPort();											//			|[g I[v
	}
	else if (BtnNo == 2) {									//	QFI{^
		if (_MsgBox("I܂H", $_MyName, _MB_YESNO) == _IDYES) {
			_Restart();
		}
	}
	return 0;
}
