📄 winclass.cpp
字号:
#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 + -