pubproc.cpp
来自「这是一个在正实际应用当中运行的电力监控系统软件源代码」· C++ 代码 · 共 622 行 · 第 1/2 页
CPP
622 行
#include <owl.h>
#include <windows.h>
#include <string.h>
static BYTE tbch[256] = {
0x00, 0x07, 0x0E, 0x09, 0x1C, 0x1B, 0x12, 0x15,
0x38, 0x3F, 0x36, 0x31, 0x24, 0x23, 0x2A, 0x2D,
0x70, 0x77, 0x7E, 0x79, 0x6C, 0x6B, 0x62, 0x65,
0x48, 0x4F, 0x46, 0x41, 0x54, 0x53, 0x5A, 0x5D,
0xE0, 0xE7, 0xEE, 0xE9, 0xFC, 0xFB, 0xF2, 0xF5,
0xD8, 0xDF, 0xD6, 0xD1, 0xC4, 0xC3, 0xCA, 0xCD,
0x90, 0x97, 0x9E, 0x99, 0x8C, 0x8B, 0x82, 0x85,
0xA8, 0xAF, 0xA6, 0xA1, 0xB4, 0xB3, 0xBA, 0xBD,
0xC7, 0xC0, 0xC9, 0xCE, 0xDB, 0xDC, 0xD5, 0xD2,
0xFF, 0xF8, 0xF1, 0xF6, 0xE3, 0xE4, 0xED, 0xEA,
0xB7, 0xB0, 0xB9, 0xBE, 0xAB, 0xAC, 0xA5, 0xA2,
0x8F, 0x88, 0x81, 0x86, 0x93, 0x94, 0x9D, 0x9A,
0x27, 0x20, 0x29, 0x2E, 0x3B, 0x3C, 0x35, 0x32,
0x1F, 0x18, 0x11, 0x16, 0x03, 0x04, 0x0D, 0x0A,
0x57, 0x50, 0x59, 0x5E, 0x4B, 0x4C, 0x45, 0x42,
0x6F, 0x68, 0x61, 0x66, 0x73, 0x74, 0x7D, 0x7A,
0x89, 0x8E, 0x87, 0x80, 0x95, 0x92, 0x9B, 0x9C,
0xB1, 0xB6, 0xBF, 0xB8, 0xAD, 0xAA, 0xA3, 0xA4,
0xF9, 0xFE, 0xF7, 0xF0, 0xE5, 0xE2, 0xEB, 0xEC,
0xC1, 0xC6, 0xCF, 0xC8, 0xDD, 0xDA, 0xD3, 0xD4,
0x69, 0x6E, 0x67, 0x60, 0x75, 0x72, 0x7B, 0x7C,
0x51, 0x56, 0x5F, 0x58, 0x4D, 0x4A, 0x43, 0x44,
0x19, 0x1E, 0x17, 0x10, 0x05, 0x02, 0x0B, 0x0C,
0x21, 0x26, 0x2F, 0x28, 0x3D, 0x3A, 0x33, 0x34,
0x4E, 0x49, 0x40, 0x47, 0x52, 0x55, 0x5C, 0x5B,
0x76, 0x71, 0x78, 0x7F, 0x6A, 0x6D, 0x64, 0x63,
0x3E, 0x39, 0x30, 0x37, 0x22, 0x25, 0x2C, 0x2B,
0x06, 0x01, 0x08, 0x0F, 0x1A, 0x1D, 0x14, 0x13,
0xAE, 0xA9, 0xA0, 0xA7, 0xB2, 0xB5, 0xBC, 0xBB,
0x96, 0x91, 0x98, 0x9F, 0x8A, 0x8D, 0x84, 0x83,
0xDE, 0xD9, 0xD0, 0xD7, 0xC2, 0xC5, 0xCC, 0xCB,
0xE6, 0xE1, 0xE8, 0xEF, 0xFA, 0xFD, 0xF4, 0xF3
};
BYTE FAR PASCAL _export CDT_BCH(BYTE *);
BYTE FAR PASCAL _export ByteRotate(BYTE srcbyte);
//================================================================
//-- 定义实时数据库全局变量
#include "db.h"
#include "dbfile.h"
#include "cmdefs.h"
HGLOBAL hMsgDataMem = NULL;
char FAR *lpMsgBuf = NULL;
HWND hDBWnd = NULL;
static HINSTANCE hinstLib=NULL;
//----------------------------------------------------------------
void FAR PASCAL _export GetName(WORD dbn, WORD stano, WORD ord, char *name);
WORD FAR PASCAL _export GetRcdNum(WORD dbn, WORD stano);
DWORD FAR PASCAL _export GetValue(WORD dbn, WORD stano, WORD ord);
BOOL FAR PASCAL GetBatchValue(WORD dbn, WORD stano, WORD startord, WORD num, void huge *vbuf);
DWORD FAR PASCAL _export GetAttr(WORD dbn, WORD stano, WORD ord);
BYTE FAR PASCAL _export GetPoint(WORD dbn, WORD stano, WORD ord);
float FAR PASCAL _export GetCoe(WORD dbn, WORD stano, WORD ord);//tzc
WORD FAR PASCAL _export GetType(WORD dbn, WORD stano, WORD ord);
WORD FAR PASCAL _export GetTimerValue(WORD dbn, WORD stano);
WORD FAR PASCAL _export GetReadHandle(WORD dbn);
BOOL FAR PASCAL _export FreeReadHandle(WORD dbn, WORD hdl);
char huge *FAR PASCAL _export GetBuffer(WORD dbn, BYTE tp);
WORD FAR PASCAL _export GetWritePtr(WORD dbn, BYTE tp);
BOOL FAR PASCAL _export ReadAEvent(WORD dbn, WORD hdl, EVENT *eve);
BOOL FAR PASCAL _export ReadACommand(WORD dbn, WORD hdl, BYTE tp, COMMAND *cmd, char *cmddata);
void FAR PASCAL _export WriteAEvent(WORD dbn, EVENT *eve);
void FAR PASCAL _export WriteACommand(WORD dbn, BYTE tp, COMMAND *cmd, char *cmddata);
void FAR PASCAL _export SetTimerValue(WORD dbn, WORD stano, WORD timer);
void FAR PASCAL _export SetPoint(WORD dbn, WORD stano, WORD ord, BYTE pnt);
void FAR PASCAL _export SetAttr(WORD dbn, WORD stano, WORD ord, DWORD attr);
void FAR PASCAL _export SetValue(WORD dbn, WORD stano, WORD ord, DWORD val);
void FAR PASCAL _export SetBatchValue(WORD dbn, WORD stano, WORD startord, WORD num, void *vbuf);
WORD FAR PASCAL _export GetZfPara(WORD dbn,WORD stano,WORD ord);
void FAR PASCAL _export ZfProc();
int FAR PASCAL _export GetSStation(WORD,BYTE);
int FAR PASCAL _export GetDStation(WORD,BYTE);
int FAR PASCAL _export GetSOrder(WORD,BYTE);
int FAR PASCAL _export GetDOrder(WORD,BYTE);
BYTE FAR PASCAL _export GetSymbol(WORD,BYTE);
//================================================================
int FAR PASCAL LibMain(HANDLE hInstance, WORD wDataSeg, WORD wHeapSize, LPSTR lpszCmdLine)
{
if (wHeapSize >0 ) UnlockData(0);
if (!hinstLib)
{
// hMsgDataMem = GlobalAlloc (GMEM_SHARE|GMEM_NODISCARD|GMEM_MOVEABLE|GMEM_ZEROINIT, RDBMSGDATAMAXLEN);
hMsgDataMem = GlobalAlloc (GMEM_SHARE|GMEM_ZEROINIT, RDBMSGDATAMAXLEN);
if (hMsgDataMem) lpMsgBuf = (char FAR *)GlobalLock(hMsgDataMem);
else return 0;
hDBWnd = FindWindow("RTDBMWINDOW", "TCZ实时数据库管理");
if (hDBWnd==NULL)
{
GlobalFree (hMsgDataMem);
MessageBox(NULL, "请先运行实时数据库管理模块!", "提示!!!", MB_OK);
return 0;
}
hinstLib = hInstance;
}
return 1;
}
int FAR PASCAL WEP (int nParameter)
{
while (GlobalFlags (hMsgDataMem)&GMEM_LOCKCOUNT) GlobalUnlock (hMsgDataMem);
GlobalFree (hMsgDataMem);
return 1;
}
//------------------------------------------------------------------------------------------
BYTE FAR PASCAL _export CDT_BCH(BYTE *rxp)
{
BYTE k=0, i;
for(i=0; i<5; i++)
{
k ^= *(rxp+i);
k = tbch[k];
}
k^=0xff;
return(k);
}
BYTE FAR PASCAL _export ByteRotate(BYTE srcbyte)
{
BYTE dstbyte=0;
for (int i=0; i<8; i++)
{
dstbyte <<= 1;
if (srcbyte&1) dstbyte |= 1;
srcbyte >>= 1;
}
return dstbyte;
}
//---------------------------------------------------------------
void FAR PASCAL _export GetName(WORD dbn, WORD stano, WORD ord, char *name)
{
// if (!lpMsgBuf) return;
RDBMESSAGE FAR *lpMsg = (RDBMESSAGE FAR *)lpMsgBuf;
lpMsg->RetFlag = FALSE;
lpMsg->MsgType = GETNAME;
lpMsg->DbNo = dbn;
lpMsg->MsgDataLen = sizeof(WORD)*2;
*(WORD *)lpMsg->MsgData = stano;
*((WORD *)lpMsg->MsgData+1) = ord;
SendMessage(hDBWnd, WM_GETITEM, 0, (LPARAM)lpMsgBuf);
name[0]=0;
if (lpMsg->RetFlag)
{
strcpy(name, lpMsg->MsgData);
name[lpMsg->MsgDataLen] = 0;
}
}
WORD FAR PASCAL _export GetRcdNum(WORD dbn, WORD stano)
{
if (!lpMsgBuf) return 0;
WORD num;
RDBMESSAGE FAR *lpMsg = (RDBMESSAGE FAR *)lpMsgBuf;
lpMsg->RetFlag = FALSE;
lpMsg->MsgType = GETRCDNUM;
lpMsg->DbNo = dbn;
lpMsg->MsgDataLen = sizeof(WORD);
*(WORD *)lpMsg->MsgData = stano;
SendMessage(hDBWnd, WM_GETITEM, 0, (LPARAM)lpMsgBuf);
if (lpMsg->RetFlag) num = *(WORD *)lpMsg->MsgData;
else num = 0;
return num;
}
DWORD FAR PASCAL _export GetValue(WORD dbn, WORD stano, WORD ord)
{
if (!lpMsgBuf) return 0;
DWORD val;
RDBMESSAGE FAR *lpMsg = (RDBMESSAGE FAR *)lpMsgBuf;
lpMsg->RetFlag = FALSE;
lpMsg->MsgType = GETVALUE;
lpMsg->DbNo = dbn;
lpMsg->MsgDataLen = sizeof(WORD)*2;
*(WORD *)lpMsg->MsgData = stano;
*((WORD *)lpMsg->MsgData+1) = ord;
SendMessage(hDBWnd, WM_GETITEM, 0, (LPARAM)lpMsgBuf);
if (lpMsg->RetFlag) val = *(DWORD *)lpMsg->MsgData;
else val = 0;
return val;
}
BOOL FAR PASCAL _export GetBatchValue(WORD dbn, WORD stano, WORD ord, WORD num, void huge *vbuf)
{
if (!lpMsgBuf) return NULL;
RDBMESSAGE FAR *lpMsg = (RDBMESSAGE FAR *)lpMsgBuf;
lpMsg->RetFlag = FALSE;
lpMsg->MsgType = GETBATCHVALUE;
lpMsg->DbNo = dbn;
lpMsg->MsgDataLen = sizeof(WORD)*3;
*(WORD *)lpMsg->MsgData = stano;
*((WORD *)lpMsg->MsgData+1) = ord;
*((WORD *)lpMsg->MsgData+2) = num;
lpMsg->ptr1 = (char huge *)vbuf;
SendMessage(hDBWnd, WM_GETITEM, 0, (LPARAM)lpMsgBuf);
return (lpMsg->RetFlag);
}
DWORD FAR PASCAL _export GetAttr(WORD dbn, WORD stano, WORD ord)
{
if (!lpMsgBuf) return 0;
DWORD attr = 0l;
RDBMESSAGE FAR *lpMsg = (RDBMESSAGE FAR *)lpMsgBuf;
lpMsg->RetFlag = FALSE;
lpMsg->MsgType = GETATTR;
lpMsg->DbNo = dbn;
lpMsg->MsgDataLen = sizeof(WORD)*2;
*(WORD *)lpMsg->MsgData = stano;
*((WORD *)lpMsg->MsgData+1) = ord;
SendMessage(hDBWnd, WM_GETITEM, 0, (LPARAM)lpMsgBuf);
if (lpMsg->RetFlag) attr = *(DWORD *)lpMsg->MsgData;
return attr;
}
BYTE FAR PASCAL _export GetPoint(WORD dbn, WORD stano, WORD ord)
{
if (!lpMsgBuf) return 0;
BYTE pnt;
RDBMESSAGE FAR *lpMsg = (RDBMESSAGE FAR *)lpMsgBuf;
lpMsg->RetFlag = FALSE;
lpMsg->MsgType = GETPOINT;
lpMsg->DbNo = dbn;
lpMsg->MsgDataLen = sizeof(WORD)*2;
*(WORD *)lpMsg->MsgData = stano;
*((WORD *)lpMsg->MsgData+1) = ord;
SendMessage(hDBWnd, WM_GETITEM, 0, (LPARAM)lpMsgBuf);
if (lpMsg->RetFlag) pnt = *(BYTE *)lpMsg->MsgData;
else pnt = 0;
return pnt;
}
int ll=0;
float FAR PASCAL _export GetCoe(WORD dbn, WORD stano, WORD ord)
{
if (!lpMsgBuf) return 0;
float coe = 0.0;
RDBMESSAGE FAR *lpMsg = (RDBMESSAGE FAR *)lpMsgBuf;
lpMsg->RetFlag = FALSE;
lpMsg->MsgType = GETLINECOE;//GETCOE;
lpMsg->DbNo = dbn;
lpMsg->MsgDataLen = sizeof(WORD)*2;
*(WORD *)lpMsg->MsgData = stano;
*((WORD *)lpMsg->MsgData+1) = ord;
SendMessage(hDBWnd, WM_GETITEM, 0, (LPARAM)lpMsgBuf);
//tzc
if (lpMsg->RetFlag)
{
YCLINECOE ycl;
ycl = *(YCLINECOE*) lpMsg->MsgData;
if (ycl.x1!=ycl.x2)
coe=(ycl.y2-ycl.y1)/(ycl.x2-ycl.x1);
}
return coe;
}
BOOL FAR PASCAL _export GetLineCoe(WORD dbn, WORD stano, WORD ord, YCLINECOE *ycl)
{
RDBMESSAGE FAR *lpMsg = (RDBMESSAGE FAR *)lpMsgBuf;
lpMsg->RetFlag = FALSE;
lpMsg->MsgType = GETLINECOE;
lpMsg->DbNo = dbn;
lpMsg->MsgDataLen = sizeof(WORD)*2;
*(WORD *)lpMsg->MsgData = stano;
*((WORD *)lpMsg->MsgData+1) = ord;
SendMessage(hDBWnd, WM_GETITEM, 0, (LPARAM)lpMsgBuf);
if (lpMsg->RetFlag) *ycl = *(YCLINECOE *)lpMsg->MsgData;
return lpMsg->RetFlag;
}
WORD FAR PASCAL _export GetType(WORD dbn, WORD stano, WORD ord)
{
if (!lpMsgBuf) return 0;
WORD tp=0;
RDBMESSAGE FAR *lpMsg = (RDBMESSAGE FAR *)lpMsgBuf;
lpMsg->RetFlag = FALSE;
lpMsg->MsgType = GETTYPE;
lpMsg->DbNo = dbn;
lpMsg->MsgDataLen = sizeof(WORD)*2;
*(WORD *)lpMsg->MsgData = stano;
*((WORD *)lpMsg->MsgData+1) = ord;
SendMessage(hDBWnd, WM_GETITEM, 0, (LPARAM)lpMsgBuf);
if (lpMsg->RetFlag) tp = *(WORD *)lpMsg->MsgData;
return tp;
}
WORD FAR PASCAL _export GetTimerValue(WORD dbn, WORD stano)
{
if (!lpMsgBuf) return 0;
WORD timer = 0;
RDBMESSAGE FAR *lpMsg = (RDBMESSAGE FAR *)lpMsgBuf;
lpMsg->RetFlag = FALSE;
lpMsg->MsgType = GETTIMER;
lpMsg->DbNo = dbn;
lpMsg->MsgDataLen = 0;
*(WORD *)lpMsg->MsgData = stano;
SendMessage(hDBWnd, WM_GETITEM, 0, (LPARAM)lpMsgBuf);
if (lpMsg->RetFlag) timer = *(WORD *)lpMsg->MsgData;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?