亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? udldcfg.c

?? 工業組態軟件modbus驅動源代碼, 包括幫助文件.共享.
?? C
?? 第 1 頁 / 共 5 頁
字號:
    lpBestFitMsg = (LPUDMSG) NULL;
    first = TRUE;

    /* try to find an existing message into which the read can be placed */
    while ((lpMsg != (LPUDMSG) NULL) && (!found)) {
        /* Don't check message that are waiting to be deleted
           (mmActiveCt == 0) */
        if ((lpMsg->mmActiveCt != 0 ) &&
            (lpMsg->mmMsgType == msgType)) {
            if ((lpMsg->mmStartAddr <= myAddr) && (endAddr <= lpMsg->mmEndAddr)) {
                /* message includes this symbol, folding is possible */
                found = TRUE;
                lpFoundMsg = lpMsg;
                folding = TRUE;
            } else {
                /* get new start, end address for possible combined message */
                newStart = (WORD) min (lpMsg->mmStartAddr, myAddr);
                newEnd   = (WORD) max (lpMsg->mmEndAddr,   endAddr);
                /* check size of possible new message */
                size = (WORD) ((newEnd + 1) - newStart);
                if (size <= MAX_PTS) {
                    /* it will fit, but is it the best choice?
                       check difference between present range size and new one */
                    delta = size - lpMsg->mmCount;
                    if (first || (delta < bfDelta)) {
                        /* this is the new best fit, save size delta and pointers */
                        first = FALSE;
                        lpBestFitMsg = lpMsg;
                        bfDelta = delta;
                        bfStart = newStart;
                        bfEnd   = newEnd;
                        bfCount = size;
                    }
                }
            }
        }
        if (!found) {
            /* advance to next message */
            lpMsg = (LPUDMSG) FindNextItem (&message_scanner);
        }
    }

    /** check whether a compatible existing message was found,
        even if we couldn't fold **/
    if ((!folding) && (lpBestFitMsg != (LPUDMSG) NULL)) {
        /* indicate message found, get its pointer */
        found = TRUE;
        lpFoundMsg = lpBestFitMsg;
    }

    /* if match found, extend the message to handle the activated item **/
    if (found) {
        /* get pointer to message, indicate message not ready */
        lpMsg = lpFoundMsg;
        msg_ready = FALSE;
        /* check whether folding this read into an existing message */
        if (folding) {
            /* no change to message needed */
            msg_ready = TRUE;
        } else {
            /* build modified read message */
			BYTE plcAddr = lpTopic->statTopic;
            msgSize = BldRead (plcAddr,
							   &lpData,
                               plcDataType, DDEType,
                               bfStart, bfCount);
            if (msgSize != 0) {
                /* copy modified message to message structure */
                lpMsg->mmSize = msgSize;
                _fmemcpy (lpMsg->mmData, lpData, msgSize);

                /* update polling range for message */
                lpMsg->mmStartAddr = bfStart;
                lpMsg->mmEndAddr   = bfEnd;
                lpMsg->mmCount     = bfCount;

                /* indicate message has changed and is ready */
                lpMsg->mmChanged = TRUE;
                msg_ready = TRUE;
            }
        }

        /* check whether message generation was successful */
        if (msg_ready) {
            /* store pointer to message in symbol table, bump active count */
            lpSymEnt->msPollMsg = lpMsg;
            lpMsg->mmActiveCt++;

            /* get pointer to first symbol entry associated with the read */
            lpSymOld = &lpSymTab[lpMsg->mmFirstSym-SYM_OFFSET];
            /* compare to this symbol */
            if (LogicalAddrCmp (lpSymEnt, lpSymOld) < 0) {
                /* store handle for new first symbol */
                lpMsg->mmFirstSym = SymHandle;
            }

            /* get pointer to last symbol entry associated with the read */
            lpSymOld = &lpSymTab[lpMsg->mmLastSym-SYM_OFFSET];
            /* compare to this symbol */
            if (LogicalAddrCmp (lpSymOld, lpSymEnt) < 0) {
                /* store handle for new last symbol */
                lpMsg->mmLastSym = SymHandle;
            }
        }
    } else {
        /****************************************************************\
           create a new read message for the new data point
        \****************************************************************/

        /* build new message */
		BYTE plcAddr = lpTopic->statTopic;
        msgSize = BldRead (plcAddr,
						   &lpData,
                           plcDataType, DDEType,
                           myAddr, count);

        /* allocate new message structure */
        allocSize = MAX_MSG_SIZE + sizeof(UDMSG);
        lpMsg = (LPUDMSG) wwHeap_AllocPtr(hHeap,
                                          GMEM_MOVEABLE | GMEM_ZEROINIT,
                                          (DWORD) allocSize);
        if (lpMsg != (LPUDMSG) NULL) {

            /* copy new message to message structure */
            lpMsg->mmSize = msgSize;
            _fmemcpy (lpMsg->mmData, lpData, (size_t) msgSize);

            /* set pointers to station, symbol, etc. */
            lpMsg->mmTopic      = lpTopic;
            lpMsg->mmTopicId    = lpTopic->statTopic;
            lpMsg->mmIdLogDev   = lpTopic->statIdLogDev;
            lpMsg->mmFirstSym   = SymHandle;
            lpMsg->mmLastSym    = SymHandle;
            lpMsg->mmActiveCt   = 1;
            lpMsg->mmDue        = TRUE;    /* Read immediately */
            lpMsg->mmRead       = TRUE;
            lpMsg->mmScanTimer  = lpTopic->statUpdatePeriod;
            lpMsg->mmScanReload = lpTopic->statUpdatePeriod;
            /**************************************************************\
              Initialize the protocol dependent message fields here.
            \**************************************************************/
            lpMsg->mmMsgInBinary= bBldSendMsgInBinary;
            lpMsg->mmMsgType    = msgType;
            lpMsg->mmStartAddr  = myAddr;
            lpMsg->mmEndAddr    = endAddr;
            lpMsg->mmCount      = count;
            lpMsg->mmDiscrete   = discrete;

            /* indicate message has changed */
            lpMsg->mmChanged    = TRUE;

            /* store pointer to message in symbol table */
            lpSymEnt->msPollMsg = lpMsg;

            /*
             * Chain the newly allocated message into the read
             * message list on the topic.
             */

            AppendItemAtTail (&lpTopic->statReadMsgList, (LPCHAINLINK) lpMsg);

            /* check whether station is currently servicing a message */
            if (lpTopic->statCurMsg == (LPUDMSG) NULL) {
                /* no, set current message to new message */
                lpTopic->statCurMsg = lpMsg;
            }
        } else {
#ifdef DEBUG_CALL_TRAFFIC
            if (Verbose)
                debug ("UdprotAddPoll - can't alloc for message");
#endif
            return FALSE;   /* Couldn't allocate memory */
        }
    }

    assert(lpMsg);

    /* Force an immediate read */
    lpMsg->mmScanTimer = lpMsg->mmScanReload;
    lpMsg->mmDue = TRUE;

    /* indicate success */
    return ok;
} /* UdprotAddPoll */

/***********************************************************************/
/** delete polling for indicated point from queue of messages for station
    returns TRUE if successful **/

BOOL
WINAPI
UdprotDelPoll(LPSTAT lpTopic,
              SYMPTR lpSymEnt)
{
    LPSTR           lpData;
    LPUDMSG         lpMsg;
    unsigned long   SymHandle, newHandle;
    unsigned long   firstIdx, lastIdx;
    SYMPTR          lpSymTab;
    BOOL            ok;
    BOOL            msgChanged, blockSizeChanged;
    WORD            msgSize;
    BYTE            plcDataType;
    BYTE            DDEType;
	BYTE			plcAddr;

#ifdef DEBUG_CALL_TRAFFIC
    if (Verbose)
        debug ("UdprotDelPoll( %Fp, %Fp )", lpTopic, lpSymEnt);
#endif

    /* indicate error if pointers are NULL */
    assert(lpTopic);
    assert(lpSymEnt);

    /* get pointer to symbol table for station */
    lpSymTab = (SYMPTR) lpTopic->statSymTab.first_member;
    assert(lpSymTab);

    /* get handle for symbol table entry */
    SymHandle = lpSymEnt->msIndex + SYM_OFFSET;

    /* set type of data message from symbol table entry */
    plcDataType = (BYTE) lpSymEnt->msPlcDataType;
    DDEType     = (BYTE) lpSymEnt->msDdeType;

    /* intialize return value */
    ok = TRUE;

    /* initialize flags */
    msgChanged = FALSE;
    blockSizeChanged = FALSE;

    /* get pointer to polling message */
    lpMsg = lpSymEnt->msPollMsg;
    /* clear polling message from symbol table entry */
    lpSymEnt->msPollMsg = (LPUDMSG) NULL;

    if (lpMsg == (LPUDMSG) NULL) {
        /* unable to access message, indicate error and return */
        return (FALSE);
    }

    /* decrement number of points active for this message */
    lpMsg->mmActiveCt--;
    if (lpMsg->mmActiveCt == 0) {
        /* deactivating the last point */
        /* clear range of points polled for this message */
        lpMsg->mmStartAddr = 0;
        lpMsg->mmEndAddr = 0;
        lpMsg->mmCount = 0;
        lpMsg->mmFirstSym = 0;
        lpMsg->mmLastSym = 0;
        /* indicate message changed, it will be deleted later */
        lpMsg->mmChanged = TRUE;
        /* indicate success, return */
        return TRUE;
    }

    /* at least one point is still being polled by this message,
       remove this symbol while leaving the rest of the message intact */
    lpSymEnt->msActive = FALSE;
    if (SymHandle == lpMsg->mmFirstSym) {
        /* Deactivating a point that spans the first alias in the poll */

        /* scan forward through symbol table
           for next active symbol in same message */
        newHandle = FindNextActive(lpTopic, lpSymEnt, lpMsg);
        if (newHandle == 0) {
            /* no symbol found -- error */
            ASSERT_ERROR;
        } else {
            /* update handle for first symbol */
            lpMsg->mmFirstSym = newHandle;
            /* indicate message changed */
            msgChanged = TRUE;
            /* indicate block size changed */
            blockSizeChanged = TRUE;
        }
    } else if (SymHandle == lpMsg->mmLastSym) {
        /* Deactivating a point that spans the last alias in the poll */

        /* scan backward through symbol table
           for previous active symbol in same message */
        newHandle = FindPrevActive(lpTopic, lpSymEnt, lpMsg);
        if (newHandle == 0) {
            /* no symbol found -- error */
            ASSERT_ERROR;
        } else {
            /* update handle for last symbol */
            lpMsg->mmLastSym = newHandle;
            /* indicate message changed */
            msgChanged = TRUE;
            /* indicate block size changed */
            blockSizeChanged = TRUE;
        }
    }

    /* check whether message has been changed */
    if (msgChanged) {
        if (blockSizeChanged) {
            /* set pointers, start and end addresses */
            firstIdx = lpMsg->mmFirstSym;
            lastIdx  = lpMsg->mmLastSym;
            lpMsg->mmStartAddr = lpSymTab[firstIdx-SYM_OFFSET].msAddr1;
            lpMsg->mmEndAddr   = lpSymTab[lastIdx -SYM_OFFSET].msAddr1;
            lpMsg->mmCount = (WORD)(lpMsg->mmEndAddr - lpMsg->mmStartAddr + 1);
        }
        /***************************************************************\
            Build the correct new message here.
        \***************************************************************/
        plcAddr = lpTopic->statTopic;
		msgSize = BldRead(plcAddr,
						  &lpData,
                          plcDataType, DDEType,
                          lpMsg->mmStartAddr, lpMsg->mmCount);
        if (msgSize != 0) {
            /* copy modified message to message structure */
            lpMsg->mmSize = msgSize;
            _fmemcpy(lpMsg->mmData, lpData, msgSize);
            /* indicate message has changed */
            lpMsg->mmChanged = TRUE;
        } else {
            /* unable to build message -- error */
            ASSERT_ERROR;
        }
    }

    /* indicate success or failure */
    

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精品vⅰdeose4hd| 国产成人精品一区二区三区四区| 国产精品无圣光一区二区| 久久久久久久久久久黄色| 日韩精品一区二区三区视频| 久久久一区二区三区捆绑**| 日本一区二区电影| 亚洲精品菠萝久久久久久久| 香蕉久久夜色精品国产使用方法| 亚洲一级片在线观看| 蜜桃av一区二区在线观看| 国产一区二区视频在线播放| 色综合久久久久综合体| 欧美图区在线视频| 日本一区二区免费在线观看视频| 国产精品麻豆网站| 日韩av电影天堂| 国产福利一区在线| 91精品在线观看入口| 国产精品麻豆欧美日韩ww| 丝袜美腿成人在线| 不卡的av中国片| 欧美电影精品一区二区| 日韩一区中文字幕| 黑人精品欧美一区二区蜜桃| 色一区在线观看| 精品久久久久久久人人人人传媒| 一区二区三区日本| 成人深夜视频在线观看| 欧美刺激脚交jootjob| 一区二区三区资源| 一本一本大道香蕉久在线精品 | 亚洲色图一区二区三区| 亚洲自拍偷拍九九九| av电影在线观看一区| 26uuu亚洲| 激情文学综合丁香| 欧美成人女星排名| 韩国av一区二区三区在线观看| 欧美精品在线观看一区二区| 又紧又大又爽精品一区二区| 成人高清免费观看| 亚洲国产岛国毛片在线| 成人免费三级在线| 亚洲欧洲制服丝袜| 欧美中文字幕一区二区三区 | 欧美日韩国产123区| 一区二区三区.www| 欧洲另类一二三四区| 亚洲一级二级在线| 精品久久久久久久一区二区蜜臀| 蜜臀精品久久久久久蜜臀 | 韩国精品免费视频| 国产欧美精品一区二区三区四区| 成人精品国产免费网站| 中文字幕在线观看不卡| 欧美精品粉嫩高潮一区二区| 蜜臀av性久久久久蜜臀aⅴ| 国产人久久人人人人爽| 色天天综合久久久久综合片| 亚洲成a人片在线不卡一二三区| 欧美一区二区三区视频免费| 成人妖精视频yjsp地址| 天天影视涩香欲综合网| 国产婷婷一区二区| 欧美电影一区二区三区| 成人av网站在线观看免费| 日韩av中文字幕一区二区三区| 国产午夜精品理论片a级大结局| 欧美a级一区二区| 色综合久久综合中文综合网| 日韩1区2区日韩1区2区| 久久亚洲精品国产精品紫薇| 色噜噜狠狠成人网p站| 国产在线精品视频| 亚洲综合丁香婷婷六月香| 中文文精品字幕一区二区| 日韩免费看网站| 欧美顶级少妇做爰| 欧美二区三区的天堂| 91福利视频久久久久| av不卡一区二区三区| 国产福利一区二区三区视频在线| 久久福利资源站| 免费成人你懂的| 精品一区二区在线免费观看| 日韩精品成人一区二区三区| 亚洲va欧美va国产va天堂影院| 亚洲伦理在线精品| 亚洲午夜在线电影| 免费一级片91| 国产成人av自拍| 国产综合久久久久久鬼色| 韩国三级电影一区二区| 国产高清在线精品| 不卡一区在线观看| 91蜜桃免费观看视频| 欧美在线观看禁18| 91精品国产91热久久久做人人| 日韩精品影音先锋| 专区另类欧美日韩| 日本最新不卡在线| 国产福利一区二区| 欧美日本不卡视频| 欧美激情中文不卡| 日本中文字幕不卡| av网站一区二区三区| 欧美一区二区三区免费视频| 国产亚洲午夜高清国产拍精品| 亚洲伦理在线免费看| 久久不见久久见免费视频7 | 日韩欧美第一区| 亚洲区小说区图片区qvod| 青草av.久久免费一区| 972aa.com艺术欧美| 精品人伦一区二区色婷婷| 18欧美乱大交hd1984| 亚洲综合一区二区| 亚洲欧洲日本在线| 日韩国产欧美在线观看| 91在线观看下载| 欧美激情一二三区| 久久爱另类一区二区小说| 欧美高清性hdvideosex| 亚洲欧美另类综合偷拍| 波多野结衣91| 国产精品免费观看视频| 风间由美性色一区二区三区| 欧美不卡在线视频| 另类小说色综合网站| 91精品国产欧美一区二区| 午夜视频久久久久久| 欧美视频一区二区| 亚洲国产一区二区三区青草影视| 在线亚洲一区二区| 亚洲线精品一区二区三区八戒| 欧洲精品在线观看| 一区二区三区在线播放| 欧美天堂亚洲电影院在线播放| 亚洲激情av在线| 欧美丰满少妇xxxbbb| 蜜桃一区二区三区在线| 337p日本欧洲亚洲大胆色噜噜| 国产精品亚洲视频| 亚洲综合在线视频| 日韩午夜电影在线观看| 国产一区二区久久| 亚洲视频你懂的| 日韩视频一区二区三区 | 日韩欧美在线一区二区三区| 久久国产精品99精品国产| 中文字幕精品三区| 欧美日韩一区视频| 国产激情视频一区二区在线观看| 亚洲丝袜美腿综合| 欧美一级黄色大片| 97久久超碰国产精品电影| 免费高清成人在线| 亚洲激情在线播放| 欧美精品一区二区蜜臀亚洲| 欧美日韩国产首页| 成人激情免费电影网址| 国内精品伊人久久久久av一坑 | 一本一本大道香蕉久在线精品 | 欧美国产乱子伦 | 欧美一区二区三区视频在线观看 | 成人精品小蝌蚪| 久久国产麻豆精品| 亚洲成人福利片| 亚洲一区二区三区四区五区黄 | 亚洲精品伦理在线| 国产精品视频看| 国产区在线观看成人精品 | 亚洲午夜日本在线观看| 中文字幕乱码亚洲精品一区| 精品日韩一区二区| 日韩美女在线视频| 欧美一区二区成人| 欧美成人激情免费网| 欧美人与禽zozo性伦| 7777精品伊人久久久大香线蕉经典版下载 | 蜜桃视频在线一区| 毛片av一区二区| 国产成人av电影免费在线观看| 久久成人免费网| 国产一区二区调教| 99这里都是精品| 在线不卡的av| 精品美女一区二区三区| 欧美激情一区二区在线| 亚洲人成精品久久久久久| 午夜精品福利一区二区三区蜜桃| 青青草成人在线观看| 国产成人一级电影| 欧美日韩在线播放三区| 精品国产百合女同互慰| 国产精品久久久久久久久久免费看| 亚洲精品久久久蜜桃| 麻豆久久久久久| 99久久精品免费|