📄 novell.cpp
字号:
for (int i=0; i<MAXNETPOOL; i++)
if (NetPool[i].haveNewData ()) {
IPXRecProc (NetPool[i].GetBuf ());
NetPool[i].ProNewData ();
}
}
//***********************************************************************
int AddClientName ()
{
NCB AddNameNcb;
WORD i=0;
memset ((LPSTR) &AddNameNcb, 0, sizeof(NCB));
AddNameNcb.NcbCommand = NETBIOS_ADD_GROUP_NAME;
AddNameNcb.NcbLanaNum = 0;
for (i=0; i<16; i++)
AddNameNcb.NcbName[i] = GroupName[i];
NetbiosRequest (&AddNameNcb);
if (!AddNameNcb.NcbRetCode) {
NameNum = AddNameNcb.NcbNum;
return SUCCESS;
}
else return FAILURE;
}
//*******************************************************
void DeletClientName ()
{
NCB DeletNameNcb;
WORD i=0;
memset ((LPSTR)&DeletNameNcb, 0, sizeof(NCB));
DeletNameNcb.NcbCommand = NETBIOS_DELETE_NAME;
DeletNameNcb.NcbLanaNum = 0;
DeletNameNcb.NcbPostRtn = NULL;
for (i=0; i<16; i++) DeletNameNcb.NcbName[i] = GroupName[i];
NetbiosRequest (&DeletNameNcb);
}
//***********************************************************************
void Reset ()
{
NCB ResetNcb;
memset ((LPSTR)&ResetNcb, 0, sizeof(NCB));
ResetNcb.NcbCommand = NETBIOS_RESET_WAIT_ONLY;
ResetNcb.NcbLanaNum = 0;
NetbiosRequest (&ResetNcb);
}
//***********************************************************************
void RcvDataGram (BYTE no)
{
if (no >= MAXRCVNCB) return;
NCB far *ncb = (NCB far *)& (NetRcv[no].RcvNcb);
memset ((LPSTR) ncb, 0, sizeof(NCB));
ncb->NcbCommand = NETBIOS_RECEIVE_DATAGRAM + NO_WAIT;
ncb->NcbNum = NameNum;
ncb->NcbLength = DATAGRAM_LEN;
switch (no) {
case 0: ncb->NcbPostRtn = (LPSTR) RcvPost0;
ncb->NcbBuffer = NetRcv[0].RXBUF_addr;
break;
case 1: ncb->NcbPostRtn = (LPSTR) RcvPost1;
ncb->NcbBuffer = NetRcv[1].RXBUF_addr;
break;
case 2: ncb->NcbPostRtn = (LPSTR) RcvPost2;
ncb->NcbBuffer = NetRcv[2].RXBUF_addr;
break;
case 3: ncb->NcbPostRtn = (LPSTR) RcvPost3;
ncb->NcbBuffer = NetRcv[3].RXBUF_addr;
break;
case 4: ncb->NcbPostRtn = (LPSTR) RcvPost4;
ncb->NcbBuffer = NetRcv[4].RXBUF_addr;
break;
case 5: ncb->NcbPostRtn = (LPSTR) RcvPost5;
ncb->NcbBuffer = NetRcv[5].RXBUF_addr;
break;
}
NetbiosRequest (ncb);
}
//***********************************************************************
void XmitDataGram ()
{
//MessageBox(0,"","",MB_OK);//jgx
if(syscfg->GetNetProto()==0){
WORD i;
NetSend.txfinishflag = FALSE;
NCB far *ncb = (NCB far *)& (NetSend.SendNcb);
memset ((LPSTR)ncb, 0, sizeof(NCB));
ncb->NcbCommand = NETBIOS_SEND_DATAGRAM + NO_WAIT;
ncb->NcbBuffer = (LPSTR)NetSend.TXBUF_addr;
ncb->NcbPostRtn = (LPSTR)SendPost;
ncb->NcbLength = DATAGRAM_LEN; // sizeof(SendBuf);
ncb->NcbNum = 0x01; // use Permanent Node Name NameNUm
for (i=0; i<16; i++) ncb->NcbCallName[i] = GroupName[i];
NetbiosRequest (ncb);
}
//wyy++ for tcp_ip
else if(syscfg->GetNetProto()==1){
if(hTcpWin)//wyy++
{
NetSend.txfinishflag = FALSE;
pTcpWin->BroadcastData((LPSTR)NetSend.TXBUF_addr);
NetSend.txfinishflag = TRUE;
}
}
//++wyy
}
void old_XmitDataGram ()
{
WORD i;
NetSend.txfinishflag = FALSE;
NCB far *ncb = (NCB far *)& (NetSend.SendNcb);
memset ((LPSTR)ncb, 0, sizeof(NCB));
ncb->NcbCommand = NETBIOS_SEND_DATAGRAM + NO_WAIT;
ncb->NcbBuffer = (LPSTR)NetSend.TXBUF_addr;
ncb->NcbPostRtn = (LPSTR)SendPost;
ncb->NcbLength = DATAGRAM_LEN; // sizeof(SendBuf);
ncb->NcbNum = 0x01; // use Permanent Node Name NameNUm
for (i=0; i<16; i++) ncb->NcbCallName[i] = GroupName[i];
NetbiosRequest (ncb);
}
//***********************************************************************
void interrupt RcvPost0 (void)
{
if (QUIT == -1) return;
NCB far *ncb = (NCB far *) MK_FP (_ES, _BX);
NetRcv[0].rxfinishflag = TRUE;
if (ncb->NcbCmdCplt !=0x0b) {
NetRcv[0].RxCount++;
SetRcvData (NetRcv[0].RXBUF_addr);
PostMessage (hMainWindow, WM_RXDATA, (WORD)0, (LONG)0);
}
RcvDataGram (0);
}
//***********************************************************************
void interrupt RcvPost1 (void)
{
if (QUIT == -1) return;
NCB far *ncb = (NCB far *) MK_FP (_ES, _BX);
NetRcv[1].rxfinishflag = TRUE;
if (ncb->NcbCmdCplt !=0x0b) {
NetRcv[1].RxCount++;
SetRcvData (NetRcv[1].RXBUF_addr);
PostMessage (hMainWindow, WM_RXDATA, (WORD)1, (LONG)1);
}
RcvDataGram (1);
}
//***********************************************************************
void interrupt RcvPost2 (void)
{
if (QUIT == -1) return;
NCB far *ncb = (NCB far *) MK_FP (_ES, _BX);
NetRcv[2].rxfinishflag = TRUE;
if (ncb->NcbCmdCplt !=0x0b) {
NetRcv[2].RxCount++;
SetRcvData (NetRcv[2].RXBUF_addr);
PostMessage (hMainWindow, WM_RXDATA, (WORD)2, (LONG)2);
}
RcvDataGram (2);
}
//***********************************************************************
void interrupt RcvPost3 (void)
{
if (QUIT == -1) return;
NCB far *ncb = (NCB far *) MK_FP (_ES, _BX);
NetRcv[3].rxfinishflag = TRUE;
if (ncb->NcbCmdCplt !=0x0b) {
NetRcv[3].RxCount++;
SetRcvData (NetRcv[3].RXBUF_addr);
PostMessage (hMainWindow, WM_RXDATA, (WORD)3, (LONG)3);
}
RcvDataGram (3);
}
//***********************************************************************
void interrupt RcvPost4 (void)
{
if (QUIT == -1) return;
NCB far *ncb = (NCB far *) MK_FP (_ES, _BX);
NetRcv[4].rxfinishflag = TRUE;
if (ncb->NcbCmdCplt !=0x0b) {
NetRcv[4].RxCount++;
SetRcvData (NetRcv[4].RXBUF_addr);
PostMessage (hMainWindow, WM_RXDATA, (WORD)4, (LONG)4);
}
RcvDataGram (4);
}
//***********************************************************************
void interrupt RcvPost5 (void)
{
if (QUIT == -1) return;
NCB far *ncb = (NCB far *) MK_FP (_ES, _BX);
NetRcv[5].rxfinishflag = TRUE;
if (ncb->NcbCmdCplt !=0x0b) {
NetRcv[5].RxCount++;
SetRcvData (NetRcv[5].RXBUF_addr);
PostMessage (hMainWindow, WM_RXDATA, (WORD)5, (LONG)5);
}
RcvDataGram (5);
}
//***********************************************************************
void interrupt SendPost (void)
{
NetSend.txfinishflag = TRUE;
}
//***********************************************************************
void NetbiosRequest (NCB far *NcbPtr)
{
NcbPtr->NcbCmdCplt = 0xff;
_ES = FP_SEG (NcbPtr); //取得NcbPtr段地址
_BX = FP_OFF (NcbPtr); //取得NcbPtr偏移量
_AX = 0X100; //AH=1;AL=0;
geninterrupt (0x5c);//调用软中断0xc5
}
//***********************************************************************
void PutGramHead (LPSTR buf) //置报文头
{
GRAMHEAD far *gHead = (GRAMHEAD *)buf;
gHead->DestType = 'G'; //0x47 //brodcast gram.
gHead->DestName = 'A'; //0x41
gHead->SourceType = 'F'; //0x46前置机 //'H' 0x48后台机
gHead->SourceName = ThisNodeName; //0x41-A 0X42-B 0X43-C节点
gHead->SourceNo = GetNodeNo (ThisNodeName); //00,01-----A,B
gHead->TxCount = NetSend.TxCount;//包计数
NetSend.TxCount++;
}
//----------------------for simulate fert system----------------------
void PutGramHead1 (LPSTR buf)
{
GRAMHEAD far *gHead = (GRAMHEAD *)buf;
gHead->DestType = 'G'; //brodcast gram.
gHead->DestName = 'A';
gHead->SourceType = 'F';
gHead->SourceName = 'B'; //simulate Fert A
gHead->SourceNo = 0;
gHead->TxCount = FertCount; //simulate Fert txCount
FertCount++;
}
//***********************************************************************
void CancelNode (BYTE Name)
{
LPSTR Txbuf = NetSend.TXBUF_addr;
PutGramHead (Txbuf);
Txbuf += sizeof(GRAMHEAD);
GRAMINF *gInf = (GRAMINF *)Txbuf;
gInf->CmdCode = CANCEL;
gInf->Length = 10;
Txbuf += sizeof(GRAMINF);
CREGISTER *cRegister = (CREGISTER *)Txbuf;
cRegister->NodeNo = GetNodeNo (Name);
cRegister->NodeType = 'F';
cRegister->NodeName = Name;
XmitDataGram ();
}
BYTE CALLWAVE=FALSE;
BYTE KWHPVAsk=TRUE,KWHDataAsk=TRUE,ProtAsk=TRUE, GraphFlag=FALSE;
BYTE YCOverAsk=TRUE,YXChgAsk=TRUE;
extern BYTE GraphBlkNo;
//***********************************************************************
BOOL IPXMakeFrame (BYTE no, BYTE PagNo) //分析网络报文jgx
{ //no 命令码 PagNo=0;
struct date Date;
HGLOBAL hglb;
LPSTR Txbuf = NetSend.TXBUF_addr;
PutGramHead (Txbuf);
GRAMHEAD *gHead = (GRAMHEAD *)Txbuf;
Txbuf += sizeof(GRAMHEAD);
GRAMINF *gInf = (GRAMINF *)Txbuf;
gInf->CmdCode = no;
BOOL RETFLAG=TRUE;
switch (no)
{
case REGISTER://register
gInf->Length = 10;
Txbuf += sizeof(GRAMINF);
CREGISTER *cRegister = (CREGISTER *)Txbuf;
cRegister->NodeNo = GetNodeNo (ThisNodeName);
cRegister->NodeType = 'F';
cRegister->NodeName = ThisNodeName;
break;
case CANCEL:
gInf->Length = 10;
Txbuf += sizeof(GRAMINF);
cRegister = (CREGISTER *)Txbuf;
cRegister->NodeNo = GetNodeNo (ThisNodeName);
cRegister->NodeType = 'F';
cRegister->NodeName = ThisNodeName;
break;
case SST:
BYTE m=GetNodeNo (ThisNodeName);
// if (scadainf.NodeType=='G' || HostNode[m].NodeState=='B') return FALSE;
gInf->Length = 10;
struct date dat;
struct time tim;
gettime (&tim);
getdate (&dat);
Txbuf += sizeof(GRAMINF);
char buff[6];
BYTE year1,year2;
year1=dat.da_year/100;
year2=dat.da_year%100;
*Txbuf++ = (year1/10)*16+year1%10;
*Txbuf++ = (year2/10)*16+year2%10;
*Txbuf++ = (dat.da_mon/10)*16+dat.da_mon%10;
*Txbuf++ = (dat.da_day/10)*16+dat.da_day%10;
*Txbuf++ = (tim.ti_hour/10)*16+tim.ti_hour%10;
*Txbuf++ = (tim.ti_min/10)*16+tim.ti_min%10;
*Txbuf++ = (tim.ti_sec/10)*16+tim.ti_sec%10;
break;
/* case SYSSTATE: //sysstate
gInf->Length = 2+sizeof(NODEMSG)*(FERTNODEMAXNUM+HOSTNODEMAXNUM);
Txbuf += sizeof(GRAMINF);
* (Txbuf)=NodeCount;
* (Txbuf+1)= MainFertName ;
* (Txbuf+2)= DupName;
DupName = 'Z';
* (Txbuf+3)= 0;
* (Txbuf+4)= 0;
* (Txbuf+5)= 0;
* (Txbuf+6)= 0;
* (Txbuf+7)= 0;
Txbuf += 8;
memmove (Txbuf, FertNode, sizeof(NODEMSG)*FERTNODEMAXNUM);
Txbuf += sizeof(NODEMSG)*FERTNODEMAXNUM;
memmove (Txbuf, HostNode, sizeof(NODEMSG)*HOSTNODEMAXNUM);
break;*/
case ATB: //atb
gInf->Length = 10;
Txbuf += sizeof(GRAMINF);
cRegister = (CREGISTER *)Txbuf;
cRegister->NodeNo = GetNodeNo (ThisNodeName);
cRegister->NodeType = 'F';
cRegister->NodeName = ThisNodeName;
// cRegister->NodeState = FertNode[GetNodeNo (ThisNodeName)].NodeState;
if (ThisNodeName==MainFertName)
cRegister->NodeState = 'M';
else
cRegister->NodeState = 'B';
Txbuf += sizeof(CREGISTER);
*(Txbuf+1) = MainFertName;
// *Txbuf = LOBYTE (FertNode[ GetNodeNo (ThisNodeName) ].LostCount);
// * (Txbuf+1) = HIBYTE (FertNode[ GetNodeNo (ThisNodeName) ].LostCount);
break;
case YXDRF:
// yxw: lobyte-hibyte, bit0->yx0, lastyxw bit15=rtu status
if (ThisNodeName != MainFertName) return FALSE;
{
WORD len=0, yxnum=0, yxlen=0, yxw;
int i,j;
char yxv[16];
Txbuf += sizeof(GRAMINF);
while (StationCnt<(TotalStaNum-1))
{
yxnum = GetRcdNum(YXDB, StationCnt);
if (yxnum==0) yxnum = 1;
yxlen=(yxnum+15)/16*2;
if ((len+yxlen)<490)
{
len += (yxlen+3);
*Txbuf = StationCnt;
*(Txbuf+1) = LOBYTE(yxlen);
*(Txbuf+2) = HIBYTE(yxlen);
Txbuf += 3;
for (j=0; j<(yxlen/2); j++)
{
yxw = 0;
GetBatchValue(YXDB, StationCnt, 16*j, 16, (char huge *)yxv);
for (i=0; i<16; i++)
{
yxw >>= 1;
if (yxv[i] & bit0) yxw |= bit15;
}
*(Txbuf+2*j) = LOBYTE(yxw);
*(Txbuf+2*j+1) = HIBYTE(yxw);
}
//if (GetValue(YXDB, StationCnt, yxnum-1) & bit0)
STATIONPARAM FAR * lpSta=(STATIONPARAM FAR *)lpStaParam+StationCnt;
CHANNELPARAM FAR * lpChp;
if(lpSta->CurrUsedCh!=0xff)
{
lpChp=(CHANNELPARAM FAR *)lpChannelParam+lpSta->CurrUsedCh;
DWORD chs;
chs=lpChp->CHStatus;
if((!lpChp->CHValidFlag)||(!(chs&ChOpen))||(chs&CommBreakFlag1))
//ding
*(Txbuf+yxlen-1) &=~bit7;
else *(Txbuf+yxlen-1) |= bit7;
}
else
*(Txbuf+yxlen-1)&=~bit7;
Txbuf += yxlen;
StationCnt++;
}
else break; //>500
} //end while
gInf->Length = len;
if (StationCnt >= (TotalStaNum-1))
{ StationCnt=0; TaskList++; }
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -