⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 winclass.cpp

📁 一个完整的RTU程序源码,用DOS平台,支持16串口,在天津港用的很多,8个规约103,modbus,cdt,1801,u4f
💻 CPP
📖 第 1 页 / 共 3 页
字号:
#include "sc_cfg.h"
#include "common.h"
#include "class.h"
#include "extern.h"

// message window has 5 type of display mode
#define MAX_MESSAGE_WIN_TYPE		5
#define MAX_PROTOCOL 15

#define GRID_COLOR1			CYAN
#define GRID_COLOR2			MAGENTA

yk_display_t yk_display;

message_win_t message_win;

char *protocol_name[] = {"NEWBB ", "DYAN  ", "IEC101",
												 "IEC102", "IEC103", "GPS   ",
												 "DL645 ", "DCMOD ", "MODBUS",
												 "SPABUS", "GST   ", "TTC31X",
												 "DCJZ  ", "STMOD ", "DISA3 "};

#define POSITEM(x) x+1

#define MAINMENUNO 5

static INT8U *MenuName[] = {" Setting ", " Infomation ", " Operation ",
														" State ", " Table ", " Debug "};

static INT8U Menux[] = {0, 9, 21, 32, 39, 46};

static INT8U *SubName[10][10] = {
		{" Port         ", " YX Info     ", " Manual YK    ", " Port Message ", " YX Define   ", " YC Debug   "},
		{" Sample Data  ", " YC Info     ", " Modify Time  ", " Hardware     ", " YC Define   ", " YX Debug   "},
		{" Protocol PAR ", " YM Info     ", "              ", " System State ", " YM Define   ", " YK Debug   "},
		{"              ", " YK Info     ", "              ", " Boot Log     ", " YK Define   ", " Infomation "},
		{"              ", " Port Info   ", "              ", " YXBW History ", " YC Sequence ", " Opreation  "},
		{"              ", "             ", "              ", " Soe History  ", " YM Sequence ", " State      "},
		{"              ", "             ", "              ", "              ", "             ", " Table      "}};

static INT8U SubNo[] = {3, 5, 2, 6, 4, 3};
static INT8U SubWidth[] = {14, 13, 14, 14, 13, 12};
//eb90eb90eb90 eb90eb90eb90 eb90eb90eb90 eb90eb90eb90 eb90eb90eb90 eb90eb90eb90

void draw_send_message(INT8U portno, INT8U *buf, INT8U length, INT8U color)
{
	tpattern_t pattern;
	int i;
	INT16U menuid = win.mainmenuno << 8 + win.itemmenuno;
	if (win.window_flag == FALSE || menuid != 0x0300) return;
	if (portno != message_win.port_no) return;
	if (message_win.pause_flag) return;
	if (message_win.tymax == 0xff) return;

	pattern.color = BLUE << 4 | color;
	if (message_win.poll) {	// polling protocol
		pattern.x = message_win.tx; pattern.y = message_win.ty;
		dprintf(pattern, "TX -> ");
		message_win.tx += 6;
		for (i = 0; i < length; i++) {
			if (message_win.tx + 2 > message_win.xmax) {
				message_win.ty++;
				message_win.tx = message_win.xmin;
			}
			if (message_win.ty > message_win.tymax) {
				win.scrollup(message_win.xmin, message_win.tymin, message_win.xmax, message_win.tymax);
				message_win.ty = message_win.tymax;
			}
			pattern.x = message_win.tx; pattern.y = message_win.ty;
			if (PortSet[portno].Protocol == SPABUS)
			dprintf(pattern,"%c",buf[i]);
			else dprintf(pattern, "%02x", buf[i]);
			message_win.tx += 2;
		}

		message_win.tx = message_win.xmin;
		if (++message_win.ty > message_win.tymax) {
			win.scrollup(message_win.xmin, message_win.tymin, message_win.xmax, message_win.tymax);
			message_win.ty = message_win.tymax;
		}
		return;
	}
	// cdt protocol
	for (i = 0; i < length; i++) {
		if (message_win.tx + 2 > message_win.xmax) {
			message_win.ty++;
			message_win.tx = message_win.xmin;
		}
		if (message_win.ty > message_win.tymax) {
			win.scrollup(message_win.xmin, message_win.tymin, message_win.xmax, message_win.tymax);
			message_win.ty = message_win.tymax;
		}
		pattern.x = message_win.tx; pattern.y = message_win.ty;
		if (PortSet[portno].Protocol == SPABUS)
		dprintf(pattern,"%c",buf[i]);
		else dprintf(pattern, "%02x", buf[i]);
		message_win.tx += 2;
	}

	if (message_win.tx + 1 > message_win.xmax) {
		message_win.ty++;
		message_win.tx = message_win.xmin;
	}
	if (message_win.ty > message_win.tymax) {
		win.scrollup(message_win.xmin, message_win.tymin, message_win.xmax, message_win.tymax);
		message_win.ty = message_win.tymax;
	}
	PC_DispChar(message_win.tx, message_win.ty, ' ', pattern.color);
	message_win.tx++;
}

void draw_rece_message(INT8U portno, INT8U *buf, INT8U length, INT8U color)
{
	tpattern_t pattern;
	int i;
	INT16U menuid = win.mainmenuno << 8 + win.itemmenuno;
	if (win.window_flag == FALSE || menuid != 0x0300) return;
	if (portno != message_win.port_no) return;
	if (message_win.pause_flag) return;
	if (message_win.rymin == 0xff) return;

	pattern.color = BLUE << 4 | color;
	if (message_win.poll) {		// polling protocol
		pattern.x = message_win.tx; pattern.y = message_win.ty;
		dprintf(pattern, "RX -> ");
		message_win.tx += 6;
		for (i = 0; i < length; i++) {
			if (message_win.tx + 2 > message_win.xmax) {
				message_win.ty++;
				message_win.tx = message_win.xmin;
			}
			if (message_win.ty > message_win.tymax) {
				win.scrollup(message_win.xmin, message_win.tymin, message_win.xmax, message_win.tymax);
				message_win.ty = message_win.tymax;
			}
			pattern.x = message_win.tx; pattern.y = message_win.ty;
			if (PortSet[portno].Protocol == SPABUS)
			dprintf(pattern,"%c",buf[i]);
			else dprintf(pattern, "%02x", buf[i]);
			message_win.tx += 2;
		}

		message_win.tx = message_win.xmin;
		if (++message_win.ty > message_win.tymax) {
			win.scrollup(message_win.xmin, message_win.tymin, message_win.xmax, message_win.tymax);
			message_win.ty = message_win.tymax;
		}
		return;
	}
	// cdt protocol
	for (i = 0; i < length; i++) {
		if (message_win.rx + 2 > message_win.xmax) {
			message_win.ry++;
			message_win.rx = message_win.xmin;
		}
		if (message_win.ry > message_win.rymax) {
			win.scrollup(message_win.xmin, message_win.rymin, message_win.xmax, message_win.rymax);
			message_win.ry = message_win.rymax;
		}
		pattern.x = message_win.rx; pattern.y = message_win.ry;
		dprintf(pattern, "%02x", buf[i]);
		message_win.rx += 2;
	}

	if (message_win.rx + 1 > message_win.xmax) {
		message_win.ry++;
		message_win.rx = message_win.xmin;
	}
	if (message_win.ry > message_win.rymax) {
		win.scrollup(message_win.xmin, message_win.rymin, message_win.xmax, message_win.rymax);
		message_win.ry = message_win.rymax;
	}
	PC_DispChar(message_win.rx, message_win.ry, ' ', BLUE << 4 | color);
	message_win.rx++;
}

void CWindows::initial()
{
	_setcursortype(_NOCURSOR);
	mainmenuno = oldmainmenuno = 0x00;		//set main menu item no to the first
	itemmenuno = olditemmenuno = 0x00;		//set sub menu item no to the first
	item_flag = window_flag = FALSE;			//if a menu(window) is opened

	siginput = sigcursor = sigcreat = FALSE; // signal of page input create change
	pageno = pagelineno = pagedotno = 0;

	keyin_buf.size = KEYIN_BUF_SIZE;
	ResetKeyBuf();

	DrawMainMenu();
	DrawBackGround();
}

void CWindows::mainenter() // process key enter pressed
{
	if (item_flag == FALSE && window_flag == FALSE) { // status: only mainmenu
		item_flag = TRUE;
		itemmenuno = 0x00;
		PopSubMenu(mainmenuno);
		return;
	}

	if (item_flag == TRUE) { // status: submenu poped
		window_flag = TRUE;
		item_flag = FALSE;
		sigcreat = TRUE;	// send signal of create
		pageno = pagelineno = pagedotno = 0x00;
		showwindow();			// display window and title
		ResetKeyBuf();		// reset keyin buffer and flags
		return;
	}

	if (window_flag == TRUE) { // status: in window
		if (keyin_buf.keyinstate == TRUE && keyin_buf.count > 0) {
			keyin_buf.keyinover = TRUE;
			keyin_buf.keyinstate = keyin_buf.dispkeyflag = FALSE;
			keyin_buf.keybuf[keyin_buf.count] = ' ';
			siginput = FALSE;	// send signal of input
		}
	}
}

void CWindows::mainesc() // process key esc pressed
{
	INT16U menuid = mainmenuno << 8 + itemmenuno;

	if (window_flag) { // process window exit
		DrawBackGround();
		PopSubMenu(mainmenuno);
		window_flag = FALSE;
		item_flag = TRUE;
		if (siginput) siginput = FALSE;

		switch (menuid) {
			case 0x0200:
				yk_display.pwdokflag = FALSE;
				break;
		}
		return;
	}

	if (item_flag) {
		DrawBackGround();
		item_flag = FALSE;
		return;
	}
}

void CWindows::mainltarr() // process key left arrow
{
	if (window_flag) {			// in window
		if (keyin_buf.keyinstate) ResetKeyBuf();
		sigcursor = TRUE;
		pagedotno--;
	}
	else {									// in sub menu
		oldmainmenuno =	mainmenuno--;
		mainmenucheck();
		UpdateMainMenu();
		if (item_flag) {
			itemmenuno = 0x00;
			ClrSubMenu(oldmainmenuno);
			PopSubMenu(mainmenuno);
		}
	}
}

void CWindows::mainrtarr() // process key right arrow
{
	if (window_flag) {			// in window
		if (keyin_buf.keyinstate) ResetKeyBuf();
		sigcursor = TRUE;
		pagedotno++;
	}
	else {									// in sub menu
		oldmainmenuno = mainmenuno++;
		mainmenucheck();
		UpdateMainMenu();
		if (item_flag) {
			itemmenuno = 0x00;
			ClrSubMenu(oldmainmenuno);
			PopSubMenu(mainmenuno);
		}
	}
}

void CWindows::mainuparr() // process key up arrow
{
	if (item_flag) {				// in sub menu
		olditemmenuno = itemmenuno--;
		SubMenuCheck();
		UpdatePopMenu();
		return;
	}

	if (window_flag) {			// in window
		if (keyin_buf.keyinstate) ResetKeyBuf();
		sigcursor = TRUE;
		pagelineno--;
		return;
	}
}

void CWindows::maindnarr()	// process key down arrow
{
	if (item_flag) {				// in sub menu
		olditemmenuno = itemmenuno++;
		SubMenuCheck();
		UpdatePopMenu();
		return;
	}

	if (window_flag) {			// in window
		if (keyin_buf.keyinstate) ResetKeyBuf();
		sigcursor = TRUE;
		pagelineno++;
		return;
	}
}

void CWindows::mainf2()
{
	INT16U menuid = mainmenuno << 8 | itemmenuno;
	if (window_flag && menuid == 0x0200) {
		yk_display.preset = yk_display.exec = yk_display.esc = FALSE;
		yk_display.checkresult = YKRNONE;
		yk_display.ykobj = 0x00;
		yk_display.ykcmd = YKCTRIP;
		sigcursor = TRUE;
	}
}

void CWindows::mainf4() // change message display mode
{
	INT16U menuid = mainmenuno << 8 | itemmenuno;

	if (window_flag && menuid == 0x0300) {
		message_win.win_type++;
		message_win.win_update = TRUE;
		if (message_win.win_type >= MAX_MESSAGE_WIN_TYPE) message_win.win_type = 0;
		sigcursor = TRUE;
	}
}

void CWindows::mainf5() // change other port message (increase)
{
	INT16U menuid = mainmenuno << 8 | itemmenuno;

	if (window_flag && menuid == 0x0300) {
		message_win.port_no++;
		if (message_win.port_no >= MAX_PORT) message_win.port_no = 0;
		sigcursor = TRUE;
		message_win.win_update = TRUE;
	}
}

void CWindows::mainf6() // change other port message (decrease)
{
	INT16U menuid = mainmenuno << 8 | itemmenuno;

	if (window_flag && menuid == 0x0300) {
		message_win.port_no--;
		if (message_win.port_no < 0) message_win.port_no = MAX_PORT -1;
		sigcursor = TRUE;
		message_win.win_update = TRUE;
	}
}

void CWindows::mainf7() // port message pause
{
	INT16U menuid = mainmenuno << 8 | itemmenuno;

	if (window_flag && menuid == 0x0300) {
		if (message_win.pause_flag) message_win.pause_flag = FALSE;
		else message_win.pause_flag = TRUE;
		sigcursor = TRUE;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -