📄 st3000.c
字号:
/********************
Filename: ST3000.C
History:
12/10/2006; 改进了屏幕保护开关的默认值=常开
********************/
#include <alloc.h>
#include "ST3000.H"
#include "STRUC_3K.H"
#include "CORE_VGA.H"
#include "CORE_COM.H"
time_t tmsLastREC; // 对最后一次更改内容作的计时时间
tagVER Edition3K; // 记录系统版本信息
tagVarST3000 VarST3000;
tagEntireStatus EntireStatus;
Str6xt Str6xtcs;
SystemSettings SysSet;
Units unit[MAXCNL_3K];
MSG_STRUCT smsg1,rmsg1;
Cmd CommandData[MAXCNL_3K];
CheckBuffer checkbuffer[MAXCNL_3K];
struct setupnum system1[MAXCNL_3K];
FILE *DataFile;
FILE *fpGB16,*fpICO2424,*fpICO3232,*fpICO8840; // 字库与图标库 文件句柄
unsigned char OUT7; // 0x0302H 端口控制字
unsigned char far *pdata1,*pdata2; // 信号A/D缓冲区
unsigned char far *lpImageData,*lpImageMask; // 图标显示掩码和数据缓冲区
unsigned hClientXms=0,hWaveXms=0; // 从扩展内存中申请的客户区以及波形背景的内存句柄(为了提高屏幕刷新的速度)
float g_LINESPEED=0; // 当前系线速度
int g_SimParaID=0;
int lineheader[MAXCNL_3K],displaybar[MAXCNL_3K],displaywidth[MAXCNL_3K];
BITFlags CtrlUnitFlags[MAXCNL_3K];
BITFlags CmdFlags[MAXCNL_3K]; // bit0=6# bit1=7# bit2=8# bit3=9# bit4=a# bit5=b#
int hjCurvHeader[MAXCNL_3K];
int vRealErr[MAXCNL_3K],hRealErr[MAXCNL_3K];
int vCurvErr[MAXCNL_3K][BOX34_W],hCurvErr[MAXCNL_3K][BOX34_W];
int vRealHisErr[MAXCNL_3K][BOX34_W],hRealHisErr[MAXCNL_3K][BOX34_W];
extern int MouseClickFlag,ClickCol,ClickRow;
extern void menu1(void);
extern void menu2(void);
extern void menu3(void);
extern void menu4(void);
extern void menu5(void);
extern void menu6(void);
extern void menu7(void);
extern int GetEntireTurns(const int iSER);
extern int GetEntireAuto(const int iSER);
extern int GetEntireIntelligent(const int iSER);
extern void DrawCfgTable(const int Lx, const int Ty);
/***
设置整机通道状态
***/
void SetEntireFlags(const int iCNL, const unsigned char iSAT, const int iVAL)
{
unsigned uVAL=0x0001;
uVAL<<=iCNL;
switch( iSAT&0x30 )
{
case 0x10: // 纵向报警状态
if( iVAL )
{ EntireStatus.EntireVAlarmFlags[iSAT&0x01] |= uVAL;}
else
{ EntireStatus.EntireVAlarmFlags[iSAT&0x01] &= (uVAL^0xffff);}
break;
case 0x20: // 横向报警状态
if( iVAL )
{ EntireStatus.EntireHAlarmFlags[iSAT&0x01] |= uVAL;}
else
{ EntireStatus.EntireHAlarmFlags[iSAT&0x01] &= (uVAL^0xffff);}
break;
case 0x30: // 丢失报警状态
if( iVAL )
{ EntireStatus.EntireLapseFlags[iSAT&0x01] |= uVAL;}
else
{ EntireStatus.EntireLapseFlags[iSAT&0x01] &= (uVAL^0xffff);}
break;
default:
break;
}
}
/***
查询指定通道状态
***/
int GetEntireFlags(const int iCNL)
{
unsigned uVAL=((unsigned)0x0001<<iCNL);
if( (uVAL&EntireStatus.EntireVAlarmFlags[VarST3000.jobAB-1]) ||
(uVAL&EntireStatus.EntireHAlarmFlags[VarST3000.jobAB-1]) ||
(uVAL&EntireStatus.EntireLapseFlags[VarST3000.jobAB-1]) )
{ return 1;}
return 0;
}
/***
清除整机的通道工作状态标志
***/
void ClearEntireFlags(void)
{
int t;
for(t=0; t<2; t++)
{
EntireStatus.EntireLapseFlags[t]=0;
EntireStatus.EntireVAlarmFlags[t]=0;
EntireStatus.EntireHAlarmFlags[t]=0;
}
}
/***
系统确认
开机检测到系统配置发生改变时调用该函数
***/
void SysConfirm(void)
{
int nU0;
FILE *fpver;
Bar(200, 100, 1000, 600, 192, 192, 192);
DrawCfgTable(300, 180);
if(VarST3000.Language)
{
ShowASCMem(768, 200, "WARNING", 0, 0, 255);
ShowASCMem(768, 250, "SYSTEM NUMBER MAYBE ERROR!!!", 0, 0, 255);
}
else
{
ShowGB2312(768, 200, "警告", 0, 0, 255);
ShowGB2312(768, 250, "系统机组编号可能有错!!!", 0, 0, 255);
}
Button(768, 365, 95, 40, 0x01, "OK", 192, 192, 192);
ShowMouse();
while(1)
{
MouseKeyClick();
if( MouseClickFlag )
{
MouseClickFlag=0;
if( (ClickRow>=365 && ClickRow<=405) &&
(ClickCol>=768 && ClickCol<=863) )
{
//Button(768, 365, 95, 40, 0x10, NULL, 192, 192, 192);
Rect( 768, 365, 95, 40,1);
delay(20);
Button(768, 365, 95, 40, 0x01, "OK", 192, 192, 192);
for(nU0=0; nU0<MAXCNL_3K; nU0++)
{
system1[nU0].sub1.B1=0;
system1[nU0].sub1.B2=0;
system1[nU0].sub1.B3=0;
system1[nU0].sub1.B4=0;
system1[nU0].sub2.B1=0;
system1[nU0].sub2.B2=0;
system1[nU0].sub2.B3=0;
}
for(nU0=1; nU0<=VarST3000.UnitActuals; nU0++)
{
system1[nU0].sub1.B1=checkbuffer[nU0].buffer[0];
system1[nU0].sub1.B2=checkbuffer[nU0].buffer[1];
system1[nU0].sub1.B3=checkbuffer[nU0].buffer[2];
system1[nU0].sub1.B4=checkbuffer[nU0].buffer[3];
system1[nU0].sub2.B1=checkbuffer[nU0].buffer[4];
system1[nU0].sub2.B2=checkbuffer[nU0].buffer[5];
system1[nU0].sub2.B3=checkbuffer[nU0].buffer[6];
}
SysSet.unitscount=VarST3000.UnitCounts=MAXCNL_3K;
fpver=fopen("ks.s", "rb+");
fseek(fpver, sizeof(tagVER), SEEK_SET);
fwrite(system1, sizeof(struct setupnum)*MAXCNL_3K, 1, fpver);
fclose(fpver);
REC_SysSet(1);
break;
}
}
}
}
/***
清除通道状态记录
***/
void ClearhjCNLFlags(void)
{
int t;
for(t=0; t<MAXCNL_3K; t++)
{ CtrlUnitFlags[t].B=0;}
}
/***
清除波形缓冲区内容
***/
void ClearBuffers(void)
{
_fmemset(pdata1, 0, 4096L);
_fmemset(pdata2, 0, 4096L);
}
/***
对收到的所有通道进行重新排序
***/
void ReSortCURecv(void)
{
int i,j,n;
unsigned char chflags=0;
for(i=1; i<VarST3000.UnitActuals; i++)
{
for(j=1; j<=VarST3000.UnitActuals-i; j++)
{
if(checkbuffer[j].unitnumber>checkbuffer[j+1].unitnumber)
{ chflags=1;}
else if(checkbuffer[j].unitnumber==checkbuffer[j+1].unitnumber &&
checkbuffer[j].buffer[4] > checkbuffer[j+1].buffer[4])
{ chflags=1;}
else if(checkbuffer[j].unitnumber==checkbuffer[j+1].unitnumber &&
checkbuffer[j].buffer[4] ==checkbuffer[j+1].buffer[4] &&
checkbuffer[j].buffer[5] > checkbuffer[j+1].buffer[5])
{ chflags=1;}
else if(checkbuffer[j].unitnumber==checkbuffer[j+1].unitnumber &&
checkbuffer[j].buffer[4] ==checkbuffer[j+1].buffer[4] &&
checkbuffer[j].buffer[5] ==checkbuffer[j+1].buffer[5] &&
checkbuffer[j].buffer[6] > checkbuffer[j+1].buffer[6])
{ chflags=1;}
else
{ chflags=0;}
//
if(chflags)
{
checkbuffer[0].unitnumber=checkbuffer[j].unitnumber;
for(n=0; n<7; n++)
{ checkbuffer[0].buffer[n]=checkbuffer[j].buffer[n];}
//
checkbuffer[j].unitnumber=checkbuffer[j+1].unitnumber;
for(n=0; n<7; n++)
{ checkbuffer[j].buffer[n]=checkbuffer[j+1].buffer[n];}
//
checkbuffer[j+1].unitnumber=checkbuffer[0].unitnumber;
for(n=0; n<7; n++)
{ checkbuffer[j+1].buffer[n]=checkbuffer[0].buffer[n];}
}
}
}
}
/***
显示所有菜单按钮图标
***/
void ShowAllCtrlMenu(void)
{
disable();
XPButton(130, 10, 100, 50, 0);
ShowICO8840(10, 136, 15);
if(VarST3000.CtrlMenuStatus)
{
XPButton(240, 10, 100, 50, 0);
ShowICO8840(4, 246, 15);
XPButton(350, 10, 100, 50, 0);
ShowICO8840(5, 356, 15);
XPButton(460, 10, 100, 50, 0);
ShowICO8840(6, 466, 15);
}
XPButton(570, 10, 100, 50, 0);
ShowICO8840(2, 576, 15);
XPButton(680, 10, 100, 50, 0);
ShowICO8840(3, 686, 15);
XPButton(790, 10, 100, 50, 0);
ShowICO8840(1, 796, 15);
XPButton(900, 10, 100, 50, 0);
ShowICO8840(11, 906, 15);
enable();
}
/***
设置按钮光标
***/
void ResetCtrlMenuFocus(void)
{
if(VarST3000.MenuIDSEL!=VarST3000.MenuIDSELOld)
{
switch(VarST3000.MenuIDSELOld)
{
case 1:
XPButton(900, 10, 100, 50, 0);
ShowICO8840(11, 906, 15);
break;
case 2:
XPButton(790, 10, 100, 50, 0);
ShowICO8840(1, 796, 15);
break;
case 3:
XPButton(680, 10, 100, 50, 0);
ShowICO8840(3, 686, 15);
break;
case 4:
XPButton(570, 10, 100, 50, 0);
ShowICO8840(2, 576, 15);
break;
case 5:
if(VarST3000.CtrlMenuStatus)
{ XPButton(460, 10, 100, 50, 0);
ShowICO8840(6, 466, 15);
}
break;
case 6:
if(VarST3000.CtrlMenuStatus)
{ XPButton(350, 10, 100, 50, 0);
ShowICO8840(5, 356, 15);
}
break;
case 7:
if(VarST3000.CtrlMenuStatus)
{ XPButton(240, 10, 100, 50, 0);
ShowICO8840(4, 246, 15);
}
default: break;
}
}
switch(VarST3000.MenuIDSEL)
{
case 1:
XPButton(900, 10, 100, 50, 1);
ShowICO8840(11, 906, 15);
break;
case 2:
XPButton(790, 10, 100, 50, 1);
ShowICO8840(1, 796, 15);
break;
case 3:
XPButton(680, 10, 100, 50, 1);
ShowICO8840(3, 686, 15);
break;
case 4:
XPButton(570, 10, 100, 50, 1);
ShowICO8840(2, 576, 15);
break;
case 5:
XPButton(460, 10, 100, 50, 1);
ShowICO8840(6, 466, 15);
break;
case 6:
XPButton(350, 10, 100, 50, 1);
ShowICO8840(5, 356, 15);
break;
case 7:
XPButton(240, 10, 100, 50, 1);
ShowICO8840(4, 246, 15);
default: break;
}
VarST3000.MenuIDSELOld=VarST3000.MenuIDSEL;
}
/***
系统初始化
对文件和命令等进行初值设定
***/
void SysInit(void)
{
int t,CtrlUnitID,CtrlUnitIsOld,CfgUpdate=0;
FILE *tfp; // temp-file-point.
unsigned char bEntireTurns=0,bSingleShape=0;
#ifndef ST3000_TMODE
unsigned long itimeouts=0L;
#endif
/*
文件装载
*/
if( (fpGB16=fopen("hzk16", "rb"))==NULL )
{
ShowASCMemX(10, 20, 1, 2, "Failed access GBFONT!\n", 0, 0, 255);
delay(1000); return;
}
if( (fpICO2424=fopen("I2424.ICO", "rb"))==NULL )
{
ShowASCMemX(10, 20, 1, 2, "Failed access I2424.ICO!", 0, 0, 255);
delay(1000); return;
}
if( (fpICO8840=fopen("I8840.ICO", "rb"))==NULL )
{
ShowASCMemX(10, 20, 1, 2, "failed access I8840.ICO!", 0, 0, 255);
delay(1000); return;
}
if( (fpICO3232=fopen("I3232.ICO", "rb"))==NULL )
{
ShowASCMemX(10, 20, 1, 2, "failed access I3232.ICO!", 0, 0, 255);
delay(1000); return;
}
enter_again: // 系统初次进入 找不到sysdata.dat文件 以默认值创建的重入位置
if( (DataFile=fopen("sysdata.dat", "rb+"))==NULL )
{
DataFile=fopen("sysdata.dat", "wb");
fwrite(unit, sizeof(Units)*MAXCNL_3K, 1, DataFile);
fwrite(&SysSet, sizeof(SystemSettings), 1, DataFile);
fwrite(&Str6xtcs, sizeof(Str6xt), 1, DataFile);
fclose(DataFile);
goto enter_again;
}
// 成功调用文件sysdata.dat.
tfp = fopen("ks.s", "rb+");
if( tfp==NULL )
{
tfp=fopen("ks.s", "wb");
Edition3K.Language=0; // 默认中文
Edition3K.YtzMachID=1; // 机械结构 [摆臂]
Edition3K.EncryptDWORD1=0xFFFFFFFFL;
Edition3K.EncryptDWORD2=0xFFFFFFFFL;
Edition3K.Year=2007;
Edition3K.Month=4;
Edition3K.Day=29;
Edition3K.AppID=0x304;
strcpy(Edition3K.WriterName, "陈彦");
fwrite(&Edition3K, sizeof(tagVER), 1, tfp);
fwrite(system1, sizeof(struct setupnum)*MAXCNL_3K, 1, tfp);
}
else
{
fseek(tfp, 0, SEEK_SET);
fread(&Edition3K, sizeof(tagVER), 1, tfp);
fread(system1, sizeof(struct setupnum)*MAXCNL_3K, 1, tfp);
}
fclose(tfp);
VarST3000.Language=Edition3K.Language; // 系统操作语言
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -