⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 novell.cpp

📁 这是一个在正实际应用当中运行的电力监控系统软件源代码
💻 CPP
📖 第 1 页 / 共 4 页
字号:
    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 + -