📄 mainprog.cpp
字号:
#include "mainprog.h"
extern void deal();
extern void initial();
WORD CardStatusYx;
void Watchdog();
void ClearWatchdog();
void DetectCard();
void SCMain();
void SCQuit();
//void InitParallel();
//void ResetParallel();
//void InitAD();
//void ResetAD();
void Interface();
//extern void ReadSecurity();
extern void InitMoxa1();
extern void ResetMoxa1();
extern void InitMoxa2();
extern void ResetMoxa2();
extern void CommInit();
extern void ResetComm();
extern void SetTimer();
extern void ResetTimer();
//extern BOOLEAN SecuCheck();
//extern void interrupt (*ADOldHand)(...);
//extern void interrupt ADNewHand(...);
BOOLEAN ResetState;
BOOLEAN RunState;
void Watchdog()
{
outportb(0x444,1);
}
void ClearWatchdog()
{
inportb(0x44);
}
void SCQuit()
{
ResetComm();
ResetTimer();
if (CardStatusYx & 0x1) ResetMoxa1();
if (CardStatusYx & 0x2) ResetMoxa2();
// if (CardStatusYx & 0x4) ResetParallel();
// if (CardStatusYx & 0x8) ResetAD();
ClearWatchdog();
textbackground(BLACK);
textcolor(WHITE);
clrscr();
}
void SCMain()
{
SetTimer(); // setup int8 interrupt def yxclass.h
DetectCard();
CommInit();
if (CardStatusYx & 0x1) InitMoxa1();
if (CardStatusYx & 0x2) InitMoxa2();
// if (CardStatusYx & 0x4) InitParallel();
// if (CardStatusYx & 0x8) InitAD();
do {
if( (watchdog[0]<WATCHDOGLIMIT)&&(watchdog[1]<WATCHDOGLIMIT)&&(watchdog[2]<WATCHDOGLIMIT)&&(watchdog[3]<WATCHDOGLIMIT)
&&(watchdog[4]<WATCHDOGLIMIT)&&(watchdog[5]<WATCHDOGLIMIT)&&(watchdog[6]<WATCHDOGLIMIT)&&(watchdog[7]<WATCHDOGLIMIT)
&&(watchdog[8]<WATCHDOGLIMIT)&&(watchdog[9]<WATCHDOGLIMIT) )
Watchdog();
// if (SecuCheck()==TRUE)
{
//yc.selectayc(); // must be followed a time gap between yc.startayc()
// wait for 4067 stable
yk.doyk(); // process yk
yx.yxgetdeal(); // process yx
ym.ymdeal(); // process ym
// yc.startayc(); // start a/d convert
yc.ycdeal(); // process yc
}
if(port_set[COM1].chk_time_gap!=255) { port9.deal(); port_run_flag[8] = TRUE;}
if(port_set[COM2].chk_time_gap!=255) { port10.deal(); port_run_flag[9] = TRUE;}
if (CardStatusYx & 0x01) {
if(port_set[PORT1].chk_time_gap!=255) { port1.deal(); port_run_flag[0] = TRUE;}
if(port_set[PORT2].chk_time_gap!=255) { port2.deal(); port_run_flag[1] = TRUE;}
if(port_set[PORT3].chk_time_gap!=255) { port3.deal(); port_run_flag[2] = TRUE;}
if(port_set[PORT4].chk_time_gap!=255) { port4.deal(); port_run_flag[3] = TRUE;}
}
if (CardStatusYx & 0x02) {
if(port_set[PORT5].chk_time_gap!=255) { port5.deal(); port_run_flag[4] = TRUE;}
if(port_set[PORT6].chk_time_gap!=255) { port6.deal(); port_run_flag[5] = TRUE;}
if(port_set[PORT7].chk_time_gap!=255) { port7.deal(); port_run_flag[6] = TRUE;}
if(port_set[PORT8].chk_time_gap!=255) { port8.deal(); port_run_flag[7] = TRUE;}
}
Interface();
} while (RunState == TRUE); // when F8 F10 pressed quit program
SCQuit();
}
void main()
{
do {
//ReadSecurity();
ResetState = FALSE;
RunState = TRUE;
directvideo=1;
for(int i; i < 10; i++)
port_run_flag[i] = FALSE;
SCMain();
} while (ResetState == TRUE);
}
void DetectCard()
{
if (inportb(hardwareset[C36401].address + 2) != 0xff) CardStatusYx |= 0x1;
else CardStatusYx &= 0xfffe; // 4 port moxa(1)
if (inportb(hardwareset[C36402].address + 2) != 0xff) CardStatusYx |= 0x2;
else CardStatusYx &= 0xfffd; // 4 port moxa(2)
/* outportb(hardwareset[C3724].address + 9, 0x00);
outportb(hardwareset[C3724].address + 3, 0x80);
outportb(hardwareset[C3724].address + 8, 0xff);
outportb(hardwareset[C3724].address + 9, 0xff);
outportb(hardwareset[C3724].address, 0xaa);
if (inportb(hardwareset[C3724].address) == 0xaa) CardStatusYx |= 0x4;
else CardStatusYx &= 0xfffb; // 24 bit parallel card
if (inportb(hardwareset[C3718].address + 2) != 0xff) CardStatusYx |= 0x8;
else CardStatusYx &= 0xfff7; */ //ggg 5.12 // 12 bit ad card
}
/*void InitParallel()
{
outportb(hardwareset[C3724].address + 9, 0x00); // disable all gates
outportb(hardwareset[C3724].address + 3, 0x90); // init 8255 #0
// A0 input B0,C0 output
outportb(hardwareset[C3724].address + 7, 0x90);
outportb(hardwareset[C3724].address + 5, 0x00);
outportb(hardwareset[C3724].address + 6, 0x8f); // init 8255 #1
outportb(hardwareset[C3724].address + 8, 0x1b); // set launch direction
outportb(hardwareset[C3724].address + 9, 0xff); // make port active
} // A1 input B1,C1 output
void ResetParallel()
{
outportb(hardwareset[C3724].address + 8, 0x00);
outportb(hardwareset[C3724].address + 9, 0x00);
outportb(hardwareset[C3724].address + 3, 0x00);
outportb(hardwareset[C3724].address + 7, 0x00);
}
void InitAD()
{
int i;
BYTE picmask, temp;
BYTE StartChan = 0, StopChan = 15, Range = 0;
// 0: +/-5V 4: 0-10V 5: 0-5V
asm cli;
picmask = 1 << (hardwareset[C3718].intno % 8);
temp = inportb(0x21); // read PIC old value
outportb(0x21, temp & !picmask); // enable PIC IRQ7
outportb(0x20, 0x20); // reset the PIC
asm sti;
temp = (hardwareset[C3718].intno + 8) << 4;
outportb(hardwareset[C3718].address + 9, 0xf0); // IRQ7 enable
for (i = 0; i <= StopChan; i++) { // set a/d range
outportb(hardwareset[C3718].address + 2, i);
outportb(hardwareset[C3718].address + 1, Range);
}
outportb(hardwareset[C3718].address + 2, StopChan << 4 | StartChan); // set scan
ADOldHand = getvect(hardwareset[C3718].intno + 8);
setvect(hardwareset[C3718].intno + 8, ADNewHand); // set isp
}
void ResetAD()
{
BYTE picmask, temp;
setvect(hardwareset[C3718].intno + 8, ADOldHand);
asm cli;
picmask = 1 << (hardwareset[C3718].intno % 8);
temp = inportb(0x21);
outportb(0x21, temp | picmask); // enable PIC IRQ7
outportb(0x20, 0x20); // reset the PIC
asm sti;
}*/ //ggg 5.12
void Interface()
{
INT8U keychar;
win.UpdateClock();
if (bioskey(1) == 0) { // key not pressed
if (win.item_flag == TRUE && win.window_flag == TRUE) {
if ((win.mainmenuno == STATE) && (win.itemmenuno == 0x00))
win.systemsate();
if ((win.mainmenuno == STATE) && (win.itemmenuno == 0x01)
&& (win.message_pause_flag == FALSE))
win.showmessage();
if ((win.mainmenuno == STATE) && (win.itemmenuno == 0x01)
&& (win.message_pause_flag == TRUE))
win.showmespause();
if ((win.mainmenuno == INFO) && (win.itemmenuno == 0x00))
win.showyx();
if ((win.mainmenuno == INFO) && (win.itemmenuno == 0x01))
win.showyc();
if ((win.mainmenuno == INFO) && (win.itemmenuno == 0x02))
win.showym();
if ((win.mainmenuno == LOCALFUNC) && (win.itemmenuno == 0x00))
win.doykopinfo();
}
else win.dropmessage();
return;
}
else { // key pressed
rdkey = bioskey(0);
switch (rdkey) { // receive cursor move
case UPARR: win.mainuparr(); break;
case DNARR: win.maindnarr(); break;
case RTARR: win.mainrtarr(); break;
case LTARR: win.mainltarr(); break;
case ENTER: win.mainenter(); break;
case ESC: win.mainesc(); break;
case F1: win.mainf1(); break;
case F5: win.mainf5(); break;
case F6: win.mainf6(); break;
case F7: win.mainf7(); break;
case F9: win.mainf9(); break;
case PGUP: win.mainpgup(); break;
case PGDN: win.mainpgdn(); break;
case F10: RunState = FALSE; break;
case BACKSP: win.KeyDrop(); break;
}
keychar = rdkey & 0xff;
if (keychar == '.' || keychar == '-' || keychar == '+'
|| isalpha(keychar) || isdigit(keychar))
win.parakeyin(toupper(keychar));
if ((win.item_flag == TRUE) && (win.window_flag == FALSE))
win.PopSubMenu(win.mainmenuno);
else if ((win.item_flag == TRUE) && (win.window_flag == TRUE))
win.showwindow();
else if ((win.item_flag == FALSE) && (win.window_flag == FALSE))
win.drawmain();
/* else if (win.helpfirst == TRUE) {
win.showhelpwindow();
win.helpfirst = FALSE;
}*/
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// The end of mainprog.cpp
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -