📄 3kmenu1.c
字号:
/******************************
文件: 3KMENU1.C
描述: 静止画面系统
DateTime: 2007-4-24 14:26:26
JOB-TODO: 为了解决在静止画面下修改微调值后死机的问题
在Menu1的修改微调值部分加上REC_sub1com标志 不在修改部分存储而在换屏时保存微调值
DateTime: 2007-4-16 10:54
JOB-TODO: 对用户处理键盘中断 造成的死机 现认为加入了新的处理
假设 处理 [齿轮齿数、打开文件、保存文件]时进入了CAN信息处理
复用bCANProcessing标志
DateTime: 2007-4-29 16:15:33
JOB-TODO: 在menu1() 函数中注销了bProcessUserInterrupt 解决了上电后找不到视频源的问题
******************************/
#include <alloc.h>
#include <math.h>
#include "ST3000.H"
#include "STRUC_3K.H"
#include "CORE_VGA.H"
#include "CORE_COM.H"
#include "3KDEFN.H"
#define SERIAL_COMM 0x3f8
#define XMEMS_USED 5 // 分配5M的图像内存
/**************** local constants ****************/
const int XiStart=0,YiStart=0,XoStart=220,YoStart=100;
/* 变量中含有i的表示input; 变量中含有o的表示outport
即: 输入窗口位置和输出窗口位置 */
const int nVideoWinWid=768,nVideoWinHei=576;
/* 图像输入大小 768x576 点阵面 */
const int nViewWinWid=768,nViewWinHei=576;
/* 图像显示大小 768x576 点阵面 */
/**************** local variables ****************/
typedef struct {
int nBytesPerPixel;
int bSample;
int nWho;
int source;
int bright;
int contrast;
int hue;
int saturation;
int bFrameField;
int bShowMemIMG;
int bMask;
int nMaxMemIMGNum;
int nViewedMemIMGNum;
} SampleStatus;
SampleStatus status;
unsigned char bCANProcessing;
WORD g_xms=0;
WORD g_hxms=0;
WORD g_hTrigMenu=0;
DWORD lineaddr=0;
BYTE far *pMask;
int n878=0; // VideoCard ID.
int bright,nMaskWid,nMaskHei;
int flag,flag1,flag2;
int captureflag,loadflag,saveflag;
int vNewCNL_M1,vOldCNL_M1;
long dwTotalFrames=0;
iRect rectMask;
time_t time0,time3;
unsigned char gfMatrixOffList[20]={0};
/* 显示所依据的索引标志数组 */
unsigned char Dispbz,compressbz=0;
unsigned char Bright_Flag=0;
unsigned char pflag[20],sbuf[20][10];
unsigned char para[2]={0};
unsigned char far bbf[3072],bbf1[3072],bbf2[3072];
struct{
unsigned _jzCmdListFlag:1;
unsigned uID:4;
unsigned uCC:11;
} _jzCmdList[80];
int jzCmdList_r=0,jzCmdList_w=0;
int REC_sub1com=0;
/**************** extern variables ****************/
extern int BitsOfPixel;
extern time_t tmsLastREC;
extern int OldMouseCol,OldMouseRow,MouseFlag,CursorDrawing;
/**************** local constants matrix for charsetlib ****************/
const unsigned char hz_buff[] = {
0x08,0x08,0x0b,0xfc,0x0a,0x08,0x12,0x08,0x12,0x08,0x33,0xf8,0x32,0x40,0x50,0x44,
0x9f,0xfe,0x10,0x40,0x10,0xe0,0x11,0x50,0x12,0x48,0x14,0x4e,0x18,0x44,0x10,0x40, //[保] 0
0x02,0x00,0x02,0x04,0xff,0xfe,0x04,0x00,0x08,0x00,0x0b,0xf8,0x10,0x10,0x10,0x20,
0x30,0x44,0x5f,0xfe,0x90,0x40,0x10,0x40,0x10,0x40,0x10,0x40,0x11,0x40,0x10,0x80, //[存] 1
0x02,0x00,0x01,0x00,0x01,0x04,0xff,0xfe,0x10,0x10,0x08,0x10,0x08,0x20,0x04,0x20,
0x04,0x40,0x02,0x80,0x01,0x00,0x02,0x80,0x04,0x60,0x08,0x10,0x30,0x0e,0xc0,0x04, //[文] 2
0x10,0x40,0x10,0x40,0x12,0x40,0x22,0x48,0x23,0xfc,0x64,0x40,0xa4,0x40,0x28,0x40,
0x20,0x44,0x3f,0xfe,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40, //[件] 3
0x10,0x00,0x10,0x00,0x10,0x04,0x13,0xfe,0xfc,0x20,0x10,0x20,0x14,0x20,0x18,0x20,
0x30,0x20,0xd0,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x50,0xa0,0x20,0x40, //[打] 4
0x00,0x08,0x7f,0xfc,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x24,0xff,0xfe,
0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x10,0x20,0x10,0x20,0x20,0x20,0x40,0x20, //[开] 5
0x01,0x00,0x11,0x20,0x11,0xf0,0x11,0x00,0x11,0x00,0x11,0x04,0xff,0xfe,0x00,0x00,
0x21,0x08,0x21,0x08,0x22,0x88,0x24,0x68,0x28,0x28,0x20,0x08,0x3f,0xf8,0x20,0x08, //[齿] 6
0x10,0x40,0x10,0x40,0x20,0xa0,0xfc,0xa0,0x21,0x10,0x51,0x08,0x52,0x0e,0xfd,0x04,
0x11,0x10,0x11,0x30,0x1d,0xc0,0xf1,0x00,0x51,0x04,0x11,0x04,0x10,0xfc,0x10,0x00, //[轮] 7
0x08,0x40,0x49,0x40,0x2a,0x40,0x08,0x84,0xff,0xfe,0x19,0x08,0x2c,0x88,0x4a,0x88,
0x10,0x88,0xfe,0x90,0x22,0x50,0x22,0x20,0x14,0x50,0x18,0x88,0x25,0x0e,0x42,0x04, //[数] 8
0x02,0x00,0x02,0x40,0x04,0x20,0x1f,0xf0,0x02,0x04,0xff,0xfe,0x04,0x40,0x08,0xa0,
0x13,0x10,0x2c,0x4e,0xc1,0x84,0x0e,0x10,0x00,0x60,0x01,0x80,0x0e,0x00,0x70,0x00, //[参] 9
0x01,0xf0,0x21,0x10,0x11,0x10,0x11,0x10,0x01,0x10,0x02,0x0e,0xf4,0x00,0x13,0xf8,
0x11,0x08,0x11,0x10,0x10,0x90,0x10,0xa0,0x14,0x40,0x18,0xb0,0x13,0x0e,0x0c,0x04, //[设] 10
0x3f,0xf8,0x24,0x48,0x3f,0xf8,0x01,0x00,0x7f,0xfc,0x01,0x00,0x1f,0xf0,0x10,0x10,
0x1f,0xf0,0x10,0x10,0x1f,0xf0,0x10,0x10,0x1f,0xf0,0x10,0x14,0xff,0xfe,0x00,0x00, //[置] 11
0x00,0xf0,0x3f,0x00,0x01,0x00,0x01,0x00,0x01,0x10,0x3f,0xf8,0x01,0x00,0x01,0x00,
0x01,0x04,0xff,0xfe,0x02,0x00,0x04,0x00,0x08,0x20,0x10,0x10,0x3f,0xf8,0x00,0x08, //[丢] 12
0x01,0x00,0x11,0x00,0x11,0x00,0x11,0x10,0x1f,0xf8,0x21,0x00,0x41,0x00,0x01,0x04,
0xff,0xfe,0x01,0x00,0x02,0x80,0x02,0x80,0x04,0x40,0x08,0x30,0x10,0x0e,0x60,0x04, //[失] 13
0x11,0x10,0x11,0x10,0x21,0x10,0x21,0x10,0x45,0x10,0xf9,0x10,0x11,0x10,0x21,0x10,
0x41,0x10,0xfd,0x10,0x42,0xa8,0x02,0xa8,0x1c,0x48,0xe4,0x44,0x48,0x82,0x11,0x00, //[纵] 14
0x11,0x10,0x11,0x10,0x17,0xfc,0x11,0x10,0xfd,0x14,0x17,0xfe,0x30,0x48,0x3b,0xfc,
0x56,0x48,0x53,0xf8,0x92,0x48,0x13,0xf8,0x10,0x00,0x11,0x10,0x13,0x0c,0x14,0x04, //[横] 15
0x02,0x00,0x04,0x00,0x08,0x04,0x7f,0xfe,0x40,0x04,0x40,0x24,0x4f,0xf4,0x48,0x24,
0x48,0x24,0x48,0x24,0x48,0x24,0x4f,0xe4,0x48,0x24,0x40,0x04,0x40,0x14,0x40,0x08 //[向] 16
};
/*
void ___SERIAL_FUNCS___(void)
*/
/******************************
描述: 将从通讯口COM1接收到的数据放入程序指定的缓冲数组中
******************************/
void PushKBuffer_JZ(const unsigned char inB)
{
if( inB==0xff || inB==0xfc )
{
sbuf[flag][flag1]=inB;
pflag[flag]=1;
flag1=0;
if( ++flag==20 ) { flag=0;}
}
else
{
sbuf[flag][flag1]=inB;
if( ++flag1==10 ) { flag1=0;}
}
}
void interrupt far (*asyncvect)(void);
/******************************
描述: 处理通讯口COM1接收数据的中断服务程序
******************************/
void interrupt far asyncint(void)
{
unsigned char B;
disable();
B=inportb(SERIAL_COMM);
if( B==0xfc )
{
if(captureflag==0) captureflag=1;
}
else PushKBuffer_JZ(B);
outportb(0x20, 0x20);
enable();
}
/******************************
描述: 通讯口COM1初始化 (9600bps N 8 1)
******************************/
void InitCOM1(void)
{
unsigned char B;
outportb(SERIAL_COMM+3, 0x80); // DLAB=1; set div rate
outportb(SERIAL_COMM, 0x0C); // low baud
outportb(SERIAL_COMM+1, 0x00); // high baud
outportb(SERIAL_COMM+3, 0x03); // DLAB=0; set data format
outportb(SERIAL_COMM+4, 0x0b);
outportb(SERIAL_COMM+1, 0x01); // interrupt enable
/* install affair-routine for serial communications */
asyncvect=getvect(0x0C);
disable();
inportb(SERIAL_COMM);
inportb(SERIAL_COMM+6);
inportb(SERIAL_COMM+3);
inportb(SERIAL_COMM+2);
outportb(SERIAL_COMM+4, 0x0B);
outportb(SERIAL_COMM+1, 0x01);
B=inportb(0x21)&0xEF; // 1110 1111
outport(0x21, B);
setvect(0x0C, asyncint);
enable();
}
/******************************
描述: 禁止通讯口COM1接收任何数据
******************************/
void DisableCOM1(void)
{
disable();
outportb(SERIAL_COMM+1, 0x00);
outportb(SERIAL_COMM+4, 0x00);
outportb(0x21, inportb(0x21)&0x10);
enable();
setvect(0x0C, asyncvect);
}
/*
void ___JZHM_FUNCS___(void)
*/
/******************************
描述: 直接显示内存字库中文
参数:
-x,y 起点位置
-*ptr 显示内容
-*idx 字库位置索引数组
-lens 有效内容长度 (Default.100 表示空格)
-r,g,b 字体颜色
******************************/
void ShowGB_CRT(int x, int y, unsigned char *idx, int lens, int r, int g, int b)
{
int t,k,m=0,tindex=0;
int ttx=x,tty=y;
long fMatrixOffset=0L;
unsigned char buffer[32]={0};
for(tindex=0; tindex<lens; tindex++)
{
fMatrixOffset=idx[tindex]*32L;
memcpy(buffer, hz_buff+fMatrixOffset, 32);
m=0;
for(t=0; t<16; t++)
{
for(k=0; k<8; k++)
{
if( buffer[m]&(0x80>>k) )
{ PutPixel(ttx+k, tty+t, r, g, b);}
}
m++;
for(k=0; k<8; k++)
{
if( buffer[m]&(0x80>>k) )
{ PutPixel(ttx+8+k, tty+t, r, g, b);}
}
m++;
}
ttx+=16;
}
}
/******************************
描述: 显示窗口菜单中的标题文字
******************************/
void DispTrigMenu(const int ID, char *ptr)
{
Bar(300+XoStart, 200+YoStart, 500+XoStart, 260+YoStart, 222, 222, 222);
Rectangle(305+XoStart, 205+YoStart, 496+XoStart, 255+YoStart, 0, 200, 0);
if( VarST3000.Language )
{ // 英文显示
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -